diff --git a/.github/.release-please-manifest-v2.json b/.github/.release-please-manifest-v2.json new file mode 100644 index 0000000000..0739396e62 --- /dev/null +++ b/.github/.release-please-manifest-v2.json @@ -0,0 +1,3 @@ +{ + ".": "2.0.0-alpha.0" +} diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index f97891a673..bacdd304e4 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.26.0" + ".": "1.30.0" } diff --git a/.github/release-please-config-v2.json b/.github/release-please-config-v2.json new file mode 100644 index 0000000000..6947d9e15a --- /dev/null +++ b/.github/release-please-config-v2.json @@ -0,0 +1,62 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "versioning": "prerelease", + "prerelease": true, + "prerelease-type": "alpha", + "package-name": "google-adk", + "include-component-in-tag": false, + "skip-github-release": true, + "changelog-path": "CHANGELOG-v2.md", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "refactor", + "section": "Code Refactoring" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System", + "hidden": true + }, + { + "type": "ci", + "section": "CI/CD", + "hidden": true + }, + { + "type": "style", + "section": "Styles", + "hidden": true + }, + { + "type": "chore", + "section": "Miscellaneous Chores", + "hidden": true + } + ] + } + } +} diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 053aab23c3..b8b693afc9 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "8f5428150d18ed732b66379c0acb806a9121c3cb", + "last-release-sha": "80a7ecf4b31e4c6de4a1425b03422f384c1a032d", "packages": { ".": { "release-type": "python", diff --git a/.github/workflows/analyze-releases-for-adk-docs-updates.yml b/.github/workflows/analyze-releases-for-adk-docs-updates.yml index a149a48c33..7932ecad32 100644 --- a/.github/workflows/analyze-releases-for-adk-docs-updates.yml +++ b/.github/workflows/analyze-releases-for-adk-docs-updates.yml @@ -6,6 +6,20 @@ on: types: [published] # Manual trigger for testing and retrying. workflow_dispatch: + inputs: + resume: + description: 'Resume from the last failed/interrupted run' + required: false + type: boolean + default: false + start_tag: + description: 'Older release tag (base), e.g. v1.26.0' + required: false + type: string + end_tag: + description: 'Newer release tag (head), e.g. v1.27.0' + required: false + type: string jobs: analyze-new-release-for-adk-docs-updates: @@ -33,10 +47,17 @@ jobs: python -m pip install --upgrade pip pip install requests google-adk + - name: Restore session DB from cache + if: ${{ github.event.inputs.resume == 'true' }} + uses: actions/cache/restore@v4 + with: + path: contributing/samples/adk_documentation/adk_release_analyzer/sessions.db + key: analyzer-session-db + - name: Run Analyzing Script env: GITHUB_TOKEN: ${{ secrets.ADK_TRIAGE_AGENT }} - GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY_FOR_DOCS_AGENTS }} GOOGLE_GENAI_USE_VERTEXAI: 0 DOC_OWNER: 'google' CODE_OWNER: 'google' @@ -44,4 +65,15 @@ jobs: CODE_REPO: 'adk-python' INTERACTIVE: 0 PYTHONPATH: contributing/samples/adk_documentation - run: python -m adk_release_analyzer.main + run: >- + python -m adk_release_analyzer.main + ${{ github.event.inputs.resume == 'true' && '--resume' || '' }} + ${{ github.event.inputs.start_tag && format('--start-tag {0}', github.event.inputs.start_tag) || '' }} + ${{ github.event.inputs.end_tag && format('--end-tag {0}', github.event.inputs.end_tag) || '' }} + + - name: Save session DB to cache + if: always() + uses: actions/cache/save@v4 + with: + path: contributing/samples/adk_documentation/adk_release_analyzer/sessions.db + key: analyzer-session-db diff --git a/.github/workflows/issue-monitor.yml b/.github/workflows/issue-monitor.yml new file mode 100644 index 0000000000..e0dc82dcf7 --- /dev/null +++ b/.github/workflows/issue-monitor.yml @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: ADK Issue Monitoring Agent + +on: + schedule: + # Runs daily at 6:00 AM UTC + - cron: '0 6 * * *' + + # Allows manual triggering from the GitHub Actions tab + workflow_dispatch: + inputs: + full_scan: + description: 'Run an Initial Full Scan of ALL open issues' + required: false + type: boolean + default: false + +jobs: + sweep-spam: + runs-on: ubuntu-latest + timeout-minutes: 120 + permissions: + issues: write + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests google-adk python-dotenv + + - name: Run Issue Monitoring Agent + env: + GITHUB_TOKEN: ${{ secrets.ADK_TRIAGE_AGENT }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + CONCURRENCY_LIMIT: 3 + INITIAL_FULL_SCAN: ${{ github.event.inputs.full_scan == 'true' }} + LLM_MODEL_NAME: "gemini-2.5-flash" + PYTHONPATH: contributing/samples + run: python -m adk_issue_monitoring_agent.main diff --git a/.github/workflows/release-cherry-pick.yml b/.github/workflows/release-cherry-pick.yml index ad324a08a5..469b9c8063 100644 --- a/.github/workflows/release-cherry-pick.yml +++ b/.github/workflows/release-cherry-pick.yml @@ -18,7 +18,7 @@ jobs: cherry-pick: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: release/candidate fetch-depth: 0 diff --git a/.github/workflows/release-cut.yml b/.github/workflows/release-cut.yml index 8dbed40487..ca54fa698b 100644 --- a/.github/workflows/release-cut.yml +++ b/.github/workflows/release-cut.yml @@ -18,7 +18,7 @@ jobs: cut-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ inputs.commit_sha || 'main' }} diff --git a/.github/workflows/release-finalize.yml b/.github/workflows/release-finalize.yml index b9d6203f37..a9256d9a75 100644 --- a/.github/workflows/release-finalize.yml +++ b/.github/workflows/release-finalize.yml @@ -29,7 +29,7 @@ jobs: echo "is_release_pr=false" >> $GITHUB_OUTPUT fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: steps.check.outputs.is_release_pr == 'true' with: ref: release/candidate diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 41d8d864c2..cc5a98a228 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -27,7 +27,7 @@ jobs: echo "exists=false" >> $GITHUB_OUTPUT fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: steps.check.outputs.exists == 'true' with: ref: release/candidate diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index 95ee326a9c..8f31945a29 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -28,7 +28,7 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Publishing version: $VERSION" - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install uv uses: astral-sh/setup-uv@v4 diff --git a/.github/workflows/release-v2-cherry-pick.yml b/.github/workflows/release-v2-cherry-pick.yml new file mode 100644 index 0000000000..f5641a55b3 --- /dev/null +++ b/.github/workflows/release-v2-cherry-pick.yml @@ -0,0 +1,43 @@ +# Step 3 (v2, optional): Cherry-picks a commit from v2 to the release/v2-candidate branch. +# Use between step 1 and step 4 to include bug fixes in an in-progress release. +# Note: Does NOT auto-trigger release-please to preserve manual changelog edits. +name: "Release v2: Cherry-pick" + +on: + workflow_dispatch: + inputs: + commit_sha: + description: 'Commit SHA to cherry-pick' + required: true + type: string + +permissions: + contents: write + +jobs: + cherry-pick: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: release/v2-candidate + fetch-depth: 0 + + - name: Configure git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Cherry-pick commit + run: | + echo "Cherry-picking ${INPUTS_COMMIT_SHA} to release/v2-candidate" + git cherry-pick ${INPUTS_COMMIT_SHA} + env: + INPUTS_COMMIT_SHA: ${{ inputs.commit_sha }} + + - name: Push changes + run: | + git push origin release/v2-candidate + echo "Successfully cherry-picked commit to release/v2-candidate" + echo "Note: Release Please is NOT auto-triggered to preserve manual changelog edits." + echo "Run release-v2-please.yml manually if you want to regenerate the changelog." diff --git a/.github/workflows/release-v2-cut.yml b/.github/workflows/release-v2-cut.yml new file mode 100644 index 0000000000..52af5bf038 --- /dev/null +++ b/.github/workflows/release-v2-cut.yml @@ -0,0 +1,46 @@ +# Step 1 (v2): Starts the v2 release process by creating a release/v2-candidate branch. +# Generates a changelog PR for review (step 2). +name: "Release v2: Cut" + +on: + workflow_dispatch: + inputs: + commit_sha: + description: 'Commit SHA to cut from (leave empty for latest v2)' + required: false + type: string + +permissions: + contents: write + actions: write + +jobs: + cut-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ inputs.commit_sha || 'v2' }} + + - name: Check for existing release/v2-candidate branch + env: + GH_TOKEN: ${{ github.token }} + run: | + if git ls-remote --exit-code --heads origin release/v2-candidate &>/dev/null; then + echo "Error: release/v2-candidate branch already exists" + echo "Please finalize or delete the existing release candidate before starting a new one" + exit 1 + fi + + - name: Create and push release/v2-candidate branch + run: | + git checkout -b release/v2-candidate + git push origin release/v2-candidate + echo "Created branch: release/v2-candidate" + + - name: Trigger Release Please + env: + GH_TOKEN: ${{ github.token }} + run: | + gh workflow run release-v2-please.yml --repo ${{ github.repository }} --ref release/v2-candidate + echo "Triggered Release Please workflow for v2" diff --git a/.github/workflows/release-v2-finalize.yml b/.github/workflows/release-v2-finalize.yml new file mode 100644 index 0000000000..c8b1020948 --- /dev/null +++ b/.github/workflows/release-v2-finalize.yml @@ -0,0 +1,85 @@ +# Step 4 (v2): Triggers when the changelog PR is merged to release/v2-candidate. +# Records last-release-sha and renames release/v2-candidate to release/v{version}. +name: "Release v2: Finalize" + +on: + pull_request: + types: [closed] + branches: + - release/v2-candidate + +permissions: + contents: write + pull-requests: write + +jobs: + finalize: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Check for release-please PR + id: check + env: + LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} + run: | + if echo "$LABELS" | grep -q "autorelease: pending"; then + echo "is_release_pr=true" >> $GITHUB_OUTPUT + else + echo "Not a release-please PR, skipping" + echo "is_release_pr=false" >> $GITHUB_OUTPUT + fi + + - uses: actions/checkout@v6 + if: steps.check.outputs.is_release_pr == 'true' + with: + ref: release/v2-candidate + token: ${{ secrets.RELEASE_PAT }} + fetch-depth: 0 + + - name: Extract version from manifest + if: steps.check.outputs.is_release_pr == 'true' + id: version + run: | + VERSION=$(jq -r '.["."]' .github/.release-please-manifest-v2.json) + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "Extracted version: $VERSION" + + - name: Configure git identity from RELEASE_PAT + if: steps.check.outputs.is_release_pr == 'true' + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + run: | + USER_JSON=$(gh api user) + git config user.name "$(echo "$USER_JSON" | jq -r '.login')" + git config user.email "$(echo "$USER_JSON" | jq -r '.id')+$(echo "$USER_JSON" | jq -r '.login')@users.noreply.github.com" + + - name: Record last-release-sha for release-please + if: steps.check.outputs.is_release_pr == 'true' + run: | + git fetch origin v2 + CUT_SHA=$(git merge-base origin/v2 HEAD) + echo "Release was cut from v2 at: $CUT_SHA" + jq --arg sha "$CUT_SHA" '. + {"last-release-sha": $sha}' \ + .github/release-please-config-v2.json > tmp.json && mv tmp.json .github/release-please-config-v2.json + git add .github/release-please-config-v2.json + git commit -m "chore: update last-release-sha for next v2 release" + git push origin release/v2-candidate + + - name: Rename release/v2-candidate to release/v{version} + if: steps.check.outputs.is_release_pr == 'true' + run: | + VERSION="v${STEPS_VERSION_OUTPUTS_VERSION}" + git push origin "release/v2-candidate:refs/heads/release/$VERSION" ":release/v2-candidate" + echo "Renamed release/v2-candidate to release/$VERSION" + env: + STEPS_VERSION_OUTPUTS_VERSION: ${{ steps.version.outputs.version }} + + - name: Update PR label to tagged + if: steps.check.outputs.is_release_pr == 'true' + env: + GH_TOKEN: ${{ github.token }} + run: | + gh pr edit ${{ github.event.pull_request.number }} \ + --remove-label "autorelease: pending" \ + --add-label "autorelease: tagged" + echo "Updated PR label to autorelease: tagged" diff --git a/.github/workflows/release-v2-please.yml b/.github/workflows/release-v2-please.yml new file mode 100644 index 0000000000..d659ca1c4e --- /dev/null +++ b/.github/workflows/release-v2-please.yml @@ -0,0 +1,41 @@ +# Runs release-please to create/update a PR with version bump and changelog for v2. +# Triggered only by workflow_dispatch (from release-v2-cut.yml). +# Does NOT auto-run on push to preserve manual changelog edits after cherry-picks. +name: "Release v2: Please" + +on: + # Only run via workflow_dispatch (triggered by release-v2-cut.yml) + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - name: Check if release/v2-candidate still exists + id: check + env: + GH_TOKEN: ${{ github.token }} + run: | + if gh api repos/${{ github.repository }}/branches/release/v2-candidate --silent 2>/dev/null; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "release/v2-candidate branch no longer exists, skipping" + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - uses: actions/checkout@v6 + if: steps.check.outputs.exists == 'true' + with: + ref: release/v2-candidate + + - uses: googleapis/release-please-action@v4 + if: steps.check.outputs.exists == 'true' + with: + token: ${{ secrets.RELEASE_PAT }} + config-file: .github/release-please-config-v2.json + manifest-file: .github/.release-please-manifest-v2.json + target-branch: release/v2-candidate diff --git a/.github/workflows/release-v2-publish.yml b/.github/workflows/release-v2-publish.yml new file mode 100644 index 0000000000..41edc78d9e --- /dev/null +++ b/.github/workflows/release-v2-publish.yml @@ -0,0 +1,79 @@ +# Step 6 (v2): Builds and publishes the v2 package to PyPI from a release/v{version} branch. +# Reads version from .release-please-manifest-v2.json, converts to PEP 440, +# updates version.py, then builds and publishes. +# Creates a merge-back PR (step 7) to sync release changes to v2. +name: "Release v2: Publish to PyPi" + +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Validate branch + run: | + if [[ ! "${GITHUB_REF_NAME}" =~ ^release/v[0-9]+\.[0-9]+\.[0-9]+ ]]; then + echo "Error: Must run from a release/v* branch (e.g., release/v2.0.0-alpha.2)" + exit 1 + fi + + - uses: actions/checkout@v6 + + - name: Extract version from manifest and convert to PEP 440 + id: version + run: | + VERSION=$(jq -r '.["."]' .github/.release-please-manifest-v2.json) + echo "semver=$VERSION" >> $GITHUB_OUTPUT + echo "Semver version: $VERSION" + + # Convert semver pre-release to PEP 440: + # 2.0.0-alpha.1 -> 2.0.0a1 + # 2.0.0-beta.1 -> 2.0.0b1 + # 2.0.0-rc.1 -> 2.0.0rc1 + # 2.0.0 -> 2.0.0 (no change for stable) + PEP440=$(echo "$VERSION" | sed -E 's/-alpha\./a/; s/-beta\./b/; s/-rc\./rc/') + echo "pep440=$PEP440" >> $GITHUB_OUTPUT + echo "PEP 440 version: $PEP440" + + - name: Install uv + uses: astral-sh/setup-uv@v4 + with: + version: "latest" + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Update version.py with PEP 440 version + env: + PEP440_VERSION: ${{ steps.version.outputs.pep440 }} + run: | + sed -i "s/^__version__ = .*/__version__ = \"${PEP440_VERSION}\"/" src/google/adk/version.py + echo "Updated version.py to ${PEP440_VERSION}" + grep __version__ src/google/adk/version.py + + - name: Build package + run: uv build + + - name: Publish to PyPI + env: + UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }} + run: uv publish + + - name: Create merge-back PR + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + SEMVER_VERSION: ${{ steps.version.outputs.semver }} + PEP440_VERSION: ${{ steps.version.outputs.pep440 }} + run: | + gh pr create \ + --base v2 \ + --head "${GITHUB_REF_NAME}" \ + --title "chore: merge release v${PEP440_VERSION} to v2" \ + --body "Syncs version bump and CHANGELOG from release v${SEMVER_VERSION} to v2." diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index ff1afaac98..7ff668c589 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -17,8 +17,7 @@ jobs: if: >- github.repository == 'google/adk-python' && ( github.event_name == 'schedule' || - github.event.action == 'opened' || - github.event.label.name == 'planned' + github.event.action == 'opened' ) permissions: issues: write diff --git a/.github/workflows/v2-sync.yml b/.github/workflows/v2-sync.yml new file mode 100644 index 0000000000..c627f40d46 --- /dev/null +++ b/.github/workflows/v2-sync.yml @@ -0,0 +1,59 @@ +# Automatically creates a PR to merge main (v1) into v2 to keep v2 up to date. +# The oncall is responsible for reviewing and merging the sync PR. +name: "Sync: main -> v2" + +on: + schedule: + - cron: '0 6 * * *' # Daily at 6am UTC + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: v2 + fetch-depth: 0 + token: ${{ secrets.RELEASE_PAT }} + + - name: Check for new commits on main + id: check + run: | + git fetch origin main + BEHIND=$(git rev-list --count HEAD..origin/main) + echo "behind=$BEHIND" >> $GITHUB_OUTPUT + if [ "$BEHIND" -eq 0 ]; then + echo "v2 is up to date with main, nothing to sync" + else + echo "v2 is $BEHIND commit(s) behind main" + fi + + - name: Check for existing sync PR + if: steps.check.outputs.behind != '0' + id: existing + env: + GH_TOKEN: ${{ github.token }} + run: | + PR=$(gh pr list --base v2 --head main --state open --json number --jq '.[0].number // empty') + if [ -n "$PR" ]; then + echo "Sync PR #$PR already exists, skipping" + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Create sync PR + if: steps.check.outputs.behind != '0' && steps.existing.outputs.exists == 'false' + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + run: | + gh pr create \ + --base v2 \ + --head main \ + --title "chore: sync main -> v2" \ + --body "Automated sync of v1 changes from main into v2. The oncall is responsible for reviewing and merging this PR. Resolve conflicts in favor of the v2 implementation." diff --git a/CHANGELOG.md b/CHANGELOG.md index 92a8197b7a..d955ad7ff5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,301 @@ # Changelog +## [1.30.0](https://github.com/google/adk-python/compare/v1.29.0...v1.30.0) (2026-04-13) + + +### Features + +* Add Auth Provider support to agent registry ([f2c68eb](https://github.com/google/adk-python/commit/f2c68eb1536f1c0018c2cf7ee3f4417ca442080c)) +* Add Parameter Manager integration to ADK ([b0715d7](https://github.com/google/adk-python/commit/b0715d77a2a433bb2ed07a2475cc4d1f2d662b6c)) +* Add support for Gemma 4 models in ADK ([9d4ecbe](https://github.com/google/adk-python/commit/9d4ecbe9fd1141693e4682cbfe4d542cc62b76ac)), closes [#5156](https://github.com/google/adk-python/issues/5156) +* allow users to include artifacts from artifact_service in A2A events using provided interceptor ([e63d991](https://github.com/google/adk-python/commit/e63d991be84e373fd31be29d4b6b0e32fdbde557)) +* emit a `TaskStatusUpdateEvent` for ADK events with no output parts but with event.actions ([dcc485b](https://github.com/google/adk-python/commit/dcc485b23e3509e2e386636d841033b91c9a401c)) +* Live avatar support in ADK ([a64a8e4](https://github.com/google/adk-python/commit/a64a8e46480753439b91b9cfd41fd190b4dad493)) +* **live:** expose live_session_resumption_update as Event in BaseLlmFlow ([2626ad7](https://github.com/google/adk-python/commit/2626ad7c69fb64a88372225d5583085fc08b1fcd)), closes [#4357](https://github.com/google/adk-python/issues/4357) +* Promote BigQuery tools to Stable ([abcf14c](https://github.com/google/adk-python/commit/abcf14c166baf4f8cc6e919b1eb4c063bf3a92af)) +* **samples:** add sample for skill activation via environment tools ([2cbb523](https://github.com/google/adk-python/commit/2cbb52306910fac994fe1d29bdfcfacb258703b4)) + + +### Bug Fixes + +* Add "gcloud config unset project" command to express mode flow ([e7d8160](https://github.com/google/adk-python/commit/e7d81604126cbdb4d9ee4624e1d1410b06585750)) +* avoid load all agents in adk web server ([cb4dd42](https://github.com/google/adk-python/commit/cb4dd42eff2df6d20c5e53211718ecb023f127fc)) +* Change express mode user flow so it's more clear that an express mode project is being created ([0fedb3b](https://github.com/google/adk-python/commit/0fedb3b5eb2074999d8ccdb839e054ea80da486f)) +* Custom pickling in McpToolset to exclude unpicklable objects like errlog ([d62558c](https://github.com/google/adk-python/commit/d62558cc2d7d6c0372e43c9f009c8c7a6863ff0a)) +* Fix credential leakage vulnerability in Agent Registry ([e3567a6](https://github.com/google/adk-python/commit/e3567a65196bb453cdac4a5ae42f7f079476d748)) +* Include a link to the deployed agent ([547766a](https://github.com/google/adk-python/commit/547766a47779915a8a47745237a46882a02dae9a)) +* preserve interaction ids for interactions SSE tool calls ([9a19304](https://github.com/google/adk-python/commit/9a1930407a4eff67093ea9f14292f1931631a661)), closes [#5169](https://github.com/google/adk-python/issues/5169) +* validate user_id and session_id against path traversal ([cbcb5e6](https://github.com/google/adk-python/commit/cbcb5e6002b5bae89de5309caf7b9bb02d563cfc)), closes [#5110](https://github.com/google/adk-python/issues/5110) + +## [1.29.0](https://github.com/google/adk-python/compare/v1.28.0...v1.29.0) (2026-04-09) + + +### Features + +* Add auth scheme/credential support to MCP toolsets in Agent Registry ([7913a3b](https://github.com/google/adk-python/commit/7913a3b76432caf16953ea7b2a2cf4872baad417)) +* add ability to block shell metacharacters in BashTool ([23bd95b](https://github.com/google/adk-python/commit/23bd95bcf23367a8df3342ca4bb9d17f0b3b0d8f)) +* add configurable resource limits for subprocesses in BashTool ([1b05842](https://github.com/google/adk-python/commit/1b0584241f6418fd5fe9bd05fa666d03c310b8ae)) +* Add configurable view_prefix to BigQueryLoggerConfig ([37973da](https://github.com/google/adk-python/commit/37973daff47d3c67e928a240acd188d4e318f52b)) +* Add custom session id functionality to vertex ai session service ([e1913a6](https://github.com/google/adk-python/commit/e1913a6b411aec9e8774ca92ea39531b085c43f0)) +* Add Description column to SKILL.md and update terminology ([435f7c7](https://github.com/google/adk-python/commit/435f7c7a9fdf8b1214f4439c6d953b6426d90da1)) +* Add Easy GCP support to ADK CLI ([8850916](https://github.com/google/adk-python/commit/8850916e1908ace19a058102f0392eee08349d60)) +* Add regional endpoint support to `SecretManagerClient` ([19ac679](https://github.com/google/adk-python/commit/19ac679aeacc045ed78cb9fd48bb295440843288)) +* Add support for model endpoints in Agent Registry ([eb4674b](https://github.com/google/adk-python/commit/eb4674b49f017f3947506c55be4075b1ea0369d6)) +* **auth:** Add public api to register custom auth provider with credential manager ([a220910](https://github.com/google/adk-python/commit/a22091058dd2ea6e1e0655b5946ce6ed7e72d25e)) +* **auth:** Pass consent_nonce to Agent Frontend ([9fec503](https://github.com/google/adk-python/commit/9fec503061846b9903c18921f7848b358a041331)) +* **auth:** Support additional HTTP headers in MCP tools ([b3e9962](https://github.com/google/adk-python/commit/b3e99628ee1b87b61badf56e67f8ddee15e6fe54)) +* **bigquery:** Add ADK 1P Skills for ADK BQ Toolset ([4030c0d](https://github.com/google/adk-python/commit/4030c0d0167b348cf2e4c941c8610aa6ede28275)) +* **environment:** Add EnvironmentToolset for file I/O and command execution ([9082b9e](https://github.com/google/adk-python/commit/9082b9e38eeb3465c399b41633e6441e339c47c3)) +* **environment:** Add LocalEnvironment for executing commands and file I/O locally ([f973673](https://github.com/google/adk-python/commit/f97367381e820c75ad16d4ce7ee27c0f9929c81d)) +* Implement robust process group management and timeouts in BashTool ([f641b1a](https://github.com/google/adk-python/commit/f641b1a219b041659e6d429c47974bc9e5cfe1af)) +* **live:** Added in 1.28.1, support live for `gemini-3.1-flash-live-preview` model ([8082893](https://github.com/google/adk-python/commit/8082893619bb85d4ee0dc53fd2133d12b9434d07)) +* Option to use shallow-copy for session in InMemorySessionService ([16a1a18](https://github.com/google/adk-python/commit/16a1a185ab77a904fd01712779fa1bc6417dc628)) +* Propagate context to thread pools ([83393ab](https://github.com/google/adk-python/commit/83393ab839d5733568699195683408fccbd1cb6e)) +* refresh credentials if token is missing in the common code and samples ([1445ad5](https://github.com/google/adk-python/commit/1445ad5069841e446328e0856553f69a6699f0f4)) +* Remove use of raw_event field in vertex ai session service ([642d337](https://github.com/google/adk-python/commit/642d337a9069fae334192d045c9f85922cbcef53)) +* **skill:** Standardize skill tools and make script arguments flexible ([9e73ab8](https://github.com/google/adk-python/commit/9e73ab846672065f1fbe1c2642419e8a008efd43)) +* Support AgentRegistry association ([6754760](https://github.com/google/adk-python/commit/675476088b9f3c0a488ce48f652b7f3f7ea47230)) +* Support loading agents from Visual Builder with BigQuery-powered logging ([2074889](https://github.com/google/adk-python/commit/20748894cdaa5a95d0c4ccb0daf87a34496639dd)) +* Support propagating grounding metadata from AgentTool ([d689a04](https://github.com/google/adk-python/commit/d689a04f16846c2aa483dd45dcc65e2decdb419c)) +* Support short options and positional arguments in RunSkillScriptTool ([2b49163](https://github.com/google/adk-python/commit/2b49163b399135f0d96b73a99eb4ace764ce87db)) +* Use raw_event field in vertex ai session service for append and list events ([6ee0362](https://github.com/google/adk-python/commit/6ee036292e9eefabb032e8ebec3580a2243f3a96)) +* Use raw_event to store event data in vertex ai session service ([9da9dee](https://github.com/google/adk-python/commit/9da9dee140a3c8971d2dc267eab7d8d17a22a089)) + + +### Bug Fixes + +* Add A2ATransport.http_json to the default supported transports list ([7dd9359](https://github.com/google/adk-python/commit/7dd9359fa1c419f82db84b844195e1b77d8070e7)) +* add httpx_client_factory support to SseConnectionParams ([815ebb4](https://github.com/google/adk-python/commit/815ebb441579724e5aa22830b2e6f7c22f94fde6)) +* **adk:** redact credentials in BigQuery analytics plugin ([a27ce47](https://github.com/google/adk-python/commit/a27ce4771ff271947a0d94762231da842095836e)) +* api client initialization logic to be mutually exclusive between ExpressMode and GCP projects ([4ffe8fb](https://github.com/google/adk-python/commit/4ffe8fb4a6befc9e9d0e838427b7bf4890df4ba3)) +* avoid load all agents in adk web server ([ede8a56](https://github.com/google/adk-python/commit/ede8a56a3cd18311ce82e761f0f3da6228fbc0d6)) +* Cache BaseToolset.get_tools() for calls within the same invocation ([92cad99](https://github.com/google/adk-python/commit/92cad99724d333760e4ebc6116951d78a9b1cb7a)) +* **cli:** fail Agent Engine deploy when config file path is invalid ([bbad9ec](https://github.com/google/adk-python/commit/bbad9ec64ce1617bc45148de97e6246752845b98)) +* Disable tool caching for skill toolset ([064f0d2](https://github.com/google/adk-python/commit/064f0d278e55e1e9fd6db1b6ccf3d1cb95cba47b)) +* Disallow args on /builder and Add warning about Web UI usage to CLI help ([dcee290](https://github.com/google/adk-python/commit/dcee2902729e178b41086c4039a3828917bbb9f3)) +* empty events_iterator assignment ([898c4e5](https://github.com/google/adk-python/commit/898c4e5f78b60c4c4732c7cd19ff2da9a64964a1)) +* **environment:** fix package references ([add8e86](https://github.com/google/adk-python/commit/add8e8664bd2ae9257c8b37a5e602d0c7aae7625)) +* Fix RemoteA2AAgent deepcopy errors ([6f29775](https://github.com/google/adk-python/commit/6f29775f4bf7172b1378b17856534f95b9d4eeb6)) +* Fixes for initializing RemoteA2aAgent - passing in preferred transport, protocol version, and auth headers ([0f3850f](https://github.com/google/adk-python/commit/0f3850f56c857dfb86c7ad8de372bcc7fe495968)) +* Generate IDs for FunctionCalls when processing streaming LLM responses ([fe41817](https://github.com/google/adk-python/commit/fe4181718d104843b974417c59203ed8a7b15255)), closes [#4609](https://github.com/google/adk-python/issues/4609) +* Handle merging lists in deep_merge_dicts ([cdb3ff4](https://github.com/google/adk-python/commit/cdb3ff4e1f155c357f8cf720132d09bbc1446075)) +* In memory session service to evaluate dictionary keys and value into an isolated snapshot sequence before starting loop ([f75de59](https://github.com/google/adk-python/commit/f75de59362e07c0cce0ead723ceea3102081af4d)) +* include intermediate subagent final response events in evaluation intermediate data ([f8a6bd7](https://github.com/google/adk-python/commit/f8a6bd7fc0ca4b37cac4dc93c725c8973a1c9027)) +* **live:** Handle live session resumption and GoAway signal ([6b1600f](https://github.com/google/adk-python/commit/6b1600fbf53bcf634c5fe4793f02921bc0b75125)), closes [#4996](https://github.com/google/adk-python/issues/4996) +* move BigQueryAgentAnalyticsPlugin import inside get_runner_async ([6fd0f85](https://github.com/google/adk-python/commit/6fd0f85191dea17b7c6b033473bd39764250265b)) +* Safer fix for UI widget merging in ADK ([0e71985](https://github.com/google/adk-python/commit/0e71985501c00682eff0f0c5328a3d429f2bdc68)) +* Small fixes for express mode ([3a374ce](https://github.com/google/adk-python/commit/3a374ce0aae73c138cd51d754220d0d7a64677b3)) +* sync callbacks with call_llm span ([b2daf83](https://github.com/google/adk-python/commit/b2daf83db406f8844f9db75abc7fee17362433b3)) +* **tools:** handle toolset errors gracefully in canonical_tools ([5df03f1](https://github.com/google/adk-python/commit/5df03f1f412e3ab55a5a6ceac892ba6b985a8036)), closes [#3341](https://github.com/google/adk-python/issues/3341) +* truncate error_message in v0 schema to prevent VARCHAR overflow ([62daf4f](https://github.com/google/adk-python/commit/62daf4f61b14aee7bca9d8dec479bfd940bbb955)), closes [#4993](https://github.com/google/adk-python/issues/4993) +* update toolbox-adk and toolbox server versions ([1486925](https://github.com/google/adk-python/commit/14869253d072e901d530fd3b7ee8ef67fbe5ddbc)) + + +### Code Refactoring + +* Move SecretManagerClient to google.adk.integrations.secret_manager package ([1104523](https://github.com/google/adk-python/commit/110452375c6ccaa16e4ade7d7fe3438d185d4355)) +* Remove the session events dependency from A2aAgentExecutor ([aaa03ac](https://github.com/google/adk-python/commit/aaa03ac30841b2e12e3ddf4bb02fbcbf08ae13e8)) + + +### Documentation + +* **adk:** clean up remote triggers README to remove internal references ([ccac461](https://github.com/google/adk-python/commit/ccac461b2ab6291ecd09577ca0553833eaff71b9)) +* Update the MCP Toolbox docsite with the new URL ([a60baca](https://github.com/google/adk-python/commit/a60baca3ddfe2541159b32d67b738a836d2395e7)) + +## [1.28.0](https://github.com/google/adk-python/compare/v1.27.5...v1.28.0) (2026-03-26) + + +### Features + +* **a2a:** add lifespan parameter to to_a2a() ([0f4c807](https://github.com/google/adk-python/commit/0f4c8073e5a180a220f88928d67ee8d521486f03)), closes [#4701](https://github.com/google/adk-python/issues/4701) +* Add a new extension for the new version of ADK-A2A integration ([6f0dcb3](https://github.com/google/adk-python/commit/6f0dcb3e26dd82fed1a8564c17a47eec03b04617)) +* Add ability to run individual unit tests to unittests.sh ([b3fcd8a](https://github.com/google/adk-python/commit/b3fcd8a21fe64063cdd8d07121ee4da3adb44c30)) +* Add database_role property to SpannerToolSettings and use it in execute_sql to support fine grained access controls ([360e0f7](https://github.com/google/adk-python/commit/360e0f7ebaba7a682f7230c259b474ace7ff6d13)) +* Add index to events table and update dependencies ([3153e6d](https://github.com/google/adk-python/commit/3153e6d74f401f39e363a36f6fa0664f245013db)), closes [#4827](https://github.com/google/adk-python/issues/4827) +* Add MultiTurn Task success metric ([9a75c06](https://github.com/google/adk-python/commit/9a75c06873b79fbd206b3712231c0280fb2f87ca)) +* Add MultiTurn Task trajectory and tool trajectory metrics ([38bfb44](https://github.com/google/adk-python/commit/38bfb4475406d63af3111775950d9c25acf17ed2)) +* Add slack integration to ADK ([6909a16](https://github.com/google/adk-python/commit/6909a167c8d030111bf7118b9d5e78255a299684)) +* Add Spanner Admin Toolset ([28618a8](https://github.com/google/adk-python/commit/28618a8dcbee9c4faeec6653a5d978d0330f39bb)) +* Add SSE streaming support to conformance tests ([c910961](https://github.com/google/adk-python/commit/c910961501ef559814f54c22aca1609fd3227b80)) +* Add support for Anthropic's thinking_blocks format in LiteLLM integration ([fc45fa6](https://github.com/google/adk-python/commit/fc45fa68d75fbf5276bf5951929026285a8bb4af)), closes [#4801](https://github.com/google/adk-python/issues/4801) +* Add support for timeout to UnsafeLocalCodeExecutor ([71d26ef](https://github.com/google/adk-python/commit/71d26ef7b90fe25a5093e4ccdf74b103e64fac67)) +* **auth:** Integrate GCP IAM Connectors (Noop implementation) ([78e5a90](https://github.com/google/adk-python/commit/78e5a908dcb4b1a93e156c6f1b282f59ec6b69d4)) +* **bigquery:** Migrate 1P BQ Toolset ([08be442](https://github.com/google/adk-python/commit/08be44295de614f30e686113897af7fe9c228751)) ([7aa1f52](https://github.com/google/adk-python/commit/7aa1f5252c15caaf40fde73ac4283fa0a48d8a96)) ([d112131](https://github.com/google/adk-python/commit/d1121317ef4e1ac559f4ae13855ac1af28eef8f6)) ([166ff99](https://github.com/google/adk-python/commit/166ff99b9266cd3bb0e86070c58a67d937216297)) +* enable suppressing A2A experimental warnings ([fdc2b43](https://github.com/google/adk-python/commit/fdc2b4355b5a73b8f32d3fa32a092339d963ce67)) +* Enhance AgentEngineSandboxCodeExecutor sample to automatically provision an Agent Engine if neither agent_engine_resource_name nor sandbox_resource_name is provided ([6c34694](https://github.com/google/adk-python/commit/6c34694da64968bc766a7e5e860c0ed9acbc69c2)) +* Extract and merge EventActions from A2A metadata ([4b677e7](https://github.com/google/adk-python/commit/4b677e73b939f5a13269abd9ba9fe65e4b78d7f6)), closes [#3968](https://github.com/google/adk-python/issues/3968) +* **mcp:** add sampling callback support for MCP sessions ([8f82697](https://github.com/google/adk-python/commit/8f826972cc06ef250c1f020e34b9d1cdbd0788c4)) +* Optional GCP project and credential for GCS access ([2f90c1a](https://github.com/google/adk-python/commit/2f90c1ac09638517b08cd96a17d595f0968f0bf6)) +* Support new embedding model in files retrieval ([faafac9](https://github.com/google/adk-python/commit/faafac9bb33b45174f04746055fc655b12d3e7f7)) + + +### Bug Fixes + +* add agent name validation to prevent arbitrary module imports ([116f75d](https://github.com/google/adk-python/commit/116f75d)) +* add protection for arbitrary module imports ([995cd1c](https://github.com/google/adk-python/commit/995cd1c)), closes [#4947](https://github.com/google/adk-python/issues/4947) +* Add read-only session support in DatabaseSessionService ([f6ea58b](https://github.com/google/adk-python/commit/f6ea58b5939b33afad5a2d2f8fb395150120ae07)), closes [#4771](https://github.com/google/adk-python/issues/4771) +* Allow snake case for skill name ([b157276](https://github.com/google/adk-python/commit/b157276cbb3c4f7f7b97e338e9d9df63d9c949cd)) +* **bigquery:** use valid dataplex OAuth scope ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8)) +* Default to ClusterIP so GKE deployment isn't publicly exposed by default ([f7359e3](https://github.com/google/adk-python/commit/f7359e3fd40eae3b8ef50c7bc88f1075ffb9b7de)) +* **deps:** bump google-genai minimum to >=1.64.0 for gemini-embedding-2-preview ([f8270c8](https://github.com/google/adk-python/commit/f8270c826bc807da99b4126e98ee1c505f4ed7c3)) +* enforce allowed file extensions for GET requests in the builder API ([96e845e](https://github.com/google/adk-python/commit/96e845ef8cf66b288d937e293a88cdb28b09417c)) +* error when event does not contain long_running_tool_ids ([1f9f0fe](https://github.com/google/adk-python/commit/1f9f0fe9d349c06f48063b856242c67654786dbc)) +* Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([77f1c41](https://github.com/google/adk-python/commit/77f1c41be61eed017b008d7ab311923e30b46643)) +* Fix IDE hangs by moving test venv and cache to /tmp ([6f6fd95](https://github.com/google/adk-python/commit/6f6fd955f6dab50c98859294328a98f32181dc27)) +* Fix imports for environment simulation files ([dcccfca](https://github.com/google/adk-python/commit/dcccfca1d1dd1b3b9c273278e9f9c883f0148eba)) +* gate builder endpoints behind web flag ([6c24ccc](https://github.com/google/adk-python/commit/6c24ccc9ec7d0f942e1dd436a823f48ae1a0c695)) +* Handle concurrent creation of app/user state rows in DatabaseSessionService ([d78422a](https://github.com/google/adk-python/commit/d78422a4051bba383202f3f13325e65b8be3ccd3)), closes [#4954](https://github.com/google/adk-python/issues/4954) +* **live:** convert response_modalities to Modality enum before assigning to LiveConnectConfig ([47aaf66](https://github.com/google/adk-python/commit/47aaf66efb3e3825f06fd44578d592924fb7542b)), closes [#4869](https://github.com/google/adk-python/issues/4869) +* **models:** handle arbitrary dict responses in part_to_message_block ([c26d359](https://github.com/google/adk-python/commit/c26d35916e1b6cd12a412516381c6fcbf867bcee)) +* **models:** update 429 docs link for Gemini ([a231c72](https://github.com/google/adk-python/commit/a231c729e6526a2035b4630796f3dc8a658bb203)) +* populate `required` for Pydantic `BaseModel` parameters in `FunctionTool` ([c5d809e](https://github.com/google/adk-python/commit/c5d809e10eeaadfcbd12874d0976b5259f327adf)), closes [#4777](https://github.com/google/adk-python/issues/4777) +* Prevent compaction of events with pending function calls ([991c411](https://github.com/google/adk-python/commit/991c4111e31ffe97acc73c2ddf5cacea0955d39f)), closes [#4740](https://github.com/google/adk-python/issues/4740) +* Prevent uv.lock modifications in unittests.sh ([e6476c9](https://github.com/google/adk-python/commit/e6476c9790eaa8f3a6ae8165351f8fe38bf9bd1e)) +* Refactor blocking subprocess call to use asyncio in bash_tool ([58c4536](https://github.com/google/adk-python/commit/58c453688fea921707a07c21d0669174ea1a3b5f)) +* Refactor LiteLlm check to avoid ImportError ([7b94a76](https://github.com/google/adk-python/commit/7b94a767337e0d642e808734608f07a70e077c62)) +* Reject appends to stale sessions in DatabaseSessionService ([b8e7647](https://github.com/google/adk-python/commit/b8e764715cb1cc7c8bc1de9aa94ca5f5271bb627)), closes [#4751](https://github.com/google/adk-python/issues/4751) +* Remove redundant client_id from fetch_token call ([50d6f35](https://github.com/google/adk-python/commit/50d6f35139b56aa5b9fb06ee53b911269c222ffe)), closes [#4782](https://github.com/google/adk-python/issues/4782) +* returns '<No stdout/stderr captured>' instead of empty strings for clearer agent feedback and correct typing ([3e00e95](https://github.com/google/adk-python/commit/3e00e955519730503e73155723f27b2bc8d5779b)) +* Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f)) +* Support resolving string annotations for `find_context_parameter` ([22fc332](https://github.com/google/adk-python/commit/22fc332c95b7deca95240b33406513bcc95c6e03)) +* **telemetry:** Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685)) +* **tools:** disable default httpx 5s timeout in OpenAPI tool _request ([4c9c01f](https://github.com/google/adk-python/commit/4c9c01fd4b1c716950700fd56a1a8789795cb7b1)), closes [#4431](https://github.com/google/adk-python/issues/4431) +* **tools:** support regional Discovery Engine endpoints ([30b904e](https://github.com/google/adk-python/commit/30b904e596b0bcea8498a9b47d669585a6c481d3)) +* **tools:** support structured datastores in DiscoveryEngineSearchTool ([f35c3a6](https://github.com/google/adk-python/commit/f35c3a66da7c66967d06d0f5f058f9417abf1f8d)), closes [#3406](https://github.com/google/adk-python/issues/3406) +* Update Agent Registry to use the full agent card if available ([031f581](https://github.com/google/adk-python/commit/031f581ac6e0fb06cc1175217a26bdd0c7382da8)) +* Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound ([27cc98d](https://github.com/google/adk-python/commit/27cc98db5fbc15de27713a5814d5c68e9c835d0f)) +* Update import and version for k8s-agent-sandbox ([1ee0623](https://github.com/google/adk-python/commit/1ee062312813e9564fdff693f883f57987e18c6a)), closes [#4883](https://github.com/google/adk-python/issues/4883) +* Update list_agents to only list directories, not validate agent definitions ([5020954](https://github.com/google/adk-python/commit/50209549206256abe5d1c5d84ab2b14dfdf80d66)) + + +### Code Refactoring +* rename agent simulator to environment simulation. Also add tracing into environment simulation ([99a31bf](https://github.com/google/adk-python/commit/99a31bf77ea6fb2c53c313094734611dcb87b1e2)) + + +### Documentation + +* Feat/Issue Monitoring Agent ([780093f](https://github.com/google/adk-python/commit/780093f389bfbffce965c89ca888d49f992219c1)) +* Use a dedicated API key for docs agents ([51c19cb](https://github.com/google/adk-python/commit/51c19cbc13c422dffd764ed0d7c664deed9e58b3)) + + +## [1.27.4](https://github.com/google/adk-python/compare/v1.27.3...v1.27.4) (2026-03-24) +### Bug Fixes + +* Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([fa5e707](https://github.com/google/adk-python/commit/fa5e707c11ad748e7db2f653b526d9bdc4b7d405)) +* gate builder endpoints behind web flag ([44b3f72](https://github.com/google/adk-python/commit/44b3f72d8f4ee09461d0acd8816149e801260b84)) + +## [1.27.3](https://github.com/google/adk-python/compare/v1.27.2...v1.27.3) (2026-03-23) +### Bug Fixes + * add protection for arbitrary module imports ([276adfb](https://github.com/google/adk-python/commit/276adfb7ad552213c0201a3c95efbc9876bf3b66)) + +## [1.27.2](https://github.com/google/adk-python/compare/v1.27.1...v1.27.2) (2026-03-17) +### Bug Fixes + * Use valid dataplex OAuth scope for BigQueryToolset ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8)) + * Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f)) + +## [1.27.1](https://github.com/google/adk-python/compare/v1.27.0...v1.27.1) (2026-03-13) +### Bug Fixes + * Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685)) + + +## [1.27.0](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-12) + +### Features +* **[Core]** + * Introduce A2A request interceptors in RemoteA2aAgent ([6f772d2](https://github.com/google/adk-python/commit/6f772d2b0841446bc168ccf405b59eb17c1d671a)) + * Add UiWidget to EventActions for supporting new experimental UI Widgets feature ([530ff06](https://github.com/google/adk-python/commit/530ff06ece61a93855a53235e85af18b46b2a6a0)) + * **auth:** Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager ([d004074](https://github.com/google/adk-python/commit/d004074c90525442a69cebe226440bb318abad29)) + * Support all `types.SchemaUnion` as output_schema in LLM Agent ([63f450e](https://github.com/google/adk-python/commit/63f450e0231f237ee1af37f17420d37b15426d48)) + * durable runtime support ([07fdd23](https://github.com/google/adk-python/commit/07fdd23c9c3f5046aa668fb480840f67f13bf271)) + * **runners:** pass GetSessionConfig through Runner to session service ([eff724a](https://github.com/google/adk-python/commit/eff724ac9aef2a203607f772c473703f21c09a72)) + +* **[Models]** + * Add support for PDF documents in Anthropic LLM ([4c8ba74](https://github.com/google/adk-python/commit/4c8ba74fcb07014db187ef8db8246ff966379aa9)) + * Add streaming support for Anthropic models ([5770cd3](https://github.com/google/adk-python/commit/5770cd3776c8805086ece34d747e589e36916a34)), closes [#3250](https://github.com/google/adk-python/issues/3250) + * Enable output schema with tools for LiteLlm models ([89df5fc](https://github.com/google/adk-python/commit/89df5fcf883b599cf7bfe40bde35b8d86ab0146b)), closes [#3969](https://github.com/google/adk-python/issues/3969) + * Preserve thought_signature in LiteLLM tool calls ([ae565be](https://github.com/google/adk-python/commit/ae565be30e64249b2913ad647911061a8b170e21)), closes [#4650](https://github.com/google/adk-python/issues/4650) + +* **[Web]** + * Updated human in the loop: developers now can respond to long running functions directly in chat + * Render artifacts when resuming + * Fix some light mode styles + * Fix token level streaming not working properly ([22799c0](https://github.com/google/adk-python/commit/22799c0833569753021078f7bd8dcd11ece562fe)) + +* **[Observability]** + * **telemetry:** add new gen_ai.agent.version span attribute ([ffe97ec](https://github.com/google/adk-python/commit/ffe97ec5ad7229c0b4ba573f33eb0edb8bb2877a)) + * **otel:** add `gen_ai.tool.definitions` to experimental semconv ([4dd4d5e](https://github.com/google/adk-python/commit/4dd4d5ecb6a1dadbc41389dac208616f6d21bc6e)) + * **otel:** add experimental semantic convention and emit `gen_ai.client.inference.operation.details` event ([19718e9](https://github.com/google/adk-python/commit/19718e9c174af7b1287b627e6b23a609db1ee5e2)) + * add missing token usage span attributes during model usage ([77bf325](https://github.com/google/adk-python/commit/77bf325d2bf556621c3276f74ee2816fce2a7085)) + * capture tool execution error code in OpenTelemetry spans ([e0a6c6d](https://github.com/google/adk-python/commit/e0a6c6db6f8e2db161f8b86b9f11030f0cec807a)) + +* **[Tools]** + * Warn when accessing DEFAULT_SKILL_SYSTEM_INSTRUCTION ([35366f4](https://github.com/google/adk-python/commit/35366f4e2a0575090fe12cd85f51e8116a1cd0d3)) + * add preserve_property_names option to OpenAPIToolset ([078b516](https://github.com/google/adk-python/commit/078b5163ff47acec69b1c8e105f62eb7b74f5548)) + * Add gcs filesystem support for Skills. It supports skills in text and pdf format, also has some sample agents ([6edcb97](https://github.com/google/adk-python/commit/6edcb975827dbd543a40ae3a402d2389327df603)) + * Add list_skills_in_dir to skills utils ([327b3af](https://github.com/google/adk-python/commit/327b3affd2d0a192f5a072b90fdb4aae7575be90)) + * Add support for MCP App UI widgets in MCPTool ([86db35c](https://github.com/google/adk-python/commit/86db35c338adaafb41e156311465e71e17edf35e)) + * add Dataplex Catalog search tool to BigQuery ADK ([82c2eef](https://github.com/google/adk-python/commit/82c2eefb27313c5b11b9e9382f626f543c53a29e)) + * Add RunSkillScriptTool to SkillToolset ([636f68f](https://github.com/google/adk-python/commit/636f68fbee700aa47f01e2cfd746859353b3333d)) + * Add support for ADK tools in SkillToolset ([44a5e6b](https://github.com/google/adk-python/commit/44a5e6bdb8e8f02891e72b65ef883f108c506f6a)) + * limit number of user-provided BigQuery job labels and reserve internal prefixes ([8c4ff74](https://github.com/google/adk-python/commit/8c4ff74e7d70cf940f54f6d7735f001495ce75d5)) + * Add param support to Bigtable execute_sql ([5702a4b](https://github.com/google/adk-python/commit/5702a4b1f59b17fd8b290fc125c349240b0953d7)) + * **bigtable:** add Bigtable cluster metadata tools ([34c560e](https://github.com/google/adk-python/commit/34c560e66e7ad379f586bbcd45a9460dc059bee2)) + * execute-type param addition in GkeCodeExecutor ([9c45166](https://github.com/google/adk-python/commit/9c451662819a6c7de71be71d12ea715b2fe74135)) + * **skill:** Add BashTool ([8a31612](https://github.com/google/adk-python/commit/8a3161202e4bac0bb8e8801b100f4403c1c75646)) + * Add support for toolsets to additional_tools field of SkillToolset ([066fcec](https://github.com/google/adk-python/commit/066fcec3e8e669d1c5360e1556afce3f7e068072)) + + +* **[Optimization]** + * Add `adk optimize` command ([b18d7a1](https://github.com/google/adk-python/commit/b18d7a140f8e18e03255b07e6d89948427790095)) + * Add interface between optimization infra and LocalEvalService ([7b7ddda](https://github.com/google/adk-python/commit/7b7ddda46ca701952f002b2807b89dbef5322414)) + * Add GEPA root agent prompt optimizer ([4e3e2cb](https://github.com/google/adk-python/commit/4e3e2cb58858e08a79bc6119ad49b6c049dbc0d0)) + +* **[Integrations]** + * Enhance BigQuery plugin schema upgrades and error reporting ([bcf38fa](https://github.com/google/adk-python/commit/bcf38fa2bac2f0d1ab74e07e01eb5160bad1d6dc)) + * Enhance BQ plugin with fork safety, auto views, and trace continuity ([80c5a24](https://github.com/google/adk-python/commit/80c5a245557cd75870e72bff0ecfaafbd37fdbc7)) + * Handle Conflict Errors in BigQuery Agent Analytics Plugin ([372c76b](https://github.com/google/adk-python/commit/372c76b857daa1102e76d755c0758f1515d6f180)) + * Added tracking headers for ADK CLI command to Agent Engine ([3117446](https://github.com/google/adk-python/commit/3117446293d30039c2f21f3d17a64a456c42c47d)) + +* **[A2A]** + * New implementation of A2aAgentExecutor and A2A-ADK conversion ([87ffc55](https://github.com/google/adk-python/commit/87ffc55640dea1185cf67e6f9b78f70b30867bcc)) + * New implementation of RemoteA2aAgent and A2A-ADK conversion ([6770e41](https://github.com/google/adk-python/commit/6770e419f5e200f4c7ad26587e1f769693ef4da0)) + +### Bug Fixes + +* Allow artifact services to accept dictionary representations of types.Part ([b004da5](https://github.com/google/adk-python/commit/b004da50270475adc9e1d7afe4064ca1d10c560a)), closes [#2886](https://github.com/google/adk-python/issues/2886) +* Decode image data from ComputerUse tool response into image blobs ([d7cfd8f](https://github.com/google/adk-python/commit/d7cfd8fe4def2198c113ff1993ef39cd519908a1)) +* Expand LiteLLM reasoning extraction to include 'reasoning' field ([9468487](https://github.com/google/adk-python/commit/94684874e436c2959cfc90ec346010a6f4fddc49)), closes [#3694](https://github.com/google/adk-python/issues/3694) +* Filter non-agent directories from list_agents() ([3b5937f](https://github.com/google/adk-python/commit/3b5937f022adf9286dc41e01e3618071a23eb992)) +* Fix Type Error by initializing user_content as a Content object ([2addf6b](https://github.com/google/adk-python/commit/2addf6b9dacfe87344aeec0101df98d99c23bdb1)) +* Handle length finish reason in LiteLLM responses ([4c6096b](https://github.com/google/adk-python/commit/4c6096baa1b0bed8533397287a5c11a0c4cb9101)), closes [#4482](https://github.com/google/adk-python/issues/4482) +* In SaveFilesAsArtifactsPlugin, write the artifact delta to state then event actions so that the plugin works with ADK Web UI's artifacts panel ([d6f31be](https://github.com/google/adk-python/commit/d6f31be554d9b7ee15fd9c95ae655b2265fb1f32)) +* Make invocation_context optional in convert_event_to_a2a_message ([8e79a12](https://github.com/google/adk-python/commit/8e79a12d6bcde43cc33247b7ee6cc9e929fa6288)) +* Optimize row-level locking in append_event ([d61846f](https://github.com/google/adk-python/commit/d61846f6c6dd5e357abb0e30eaf61fe27896ae6a)), closes [#4655](https://github.com/google/adk-python/issues/4655) +* Preserve thought_signature in FunctionCall conversions between GenAI and A2A ([f9c104f](https://github.com/google/adk-python/commit/f9c104faf73e2a002bb3092b50fb88f4eed78163)) +* Prevent splitting of SSE events with artifactDelta for function resume requests ([6a929af](https://github.com/google/adk-python/commit/6a929af718fa77199d1eecc62b16c54beb1c8d84)), closes [#4487](https://github.com/google/adk-python/issues/4487) +* Propagate file names during A2A to/from Genai Part conversion ([f324fa2](https://github.com/google/adk-python/commit/f324fa2d62442301ebb2e7974eb97ea870471410)) +* Propagate thought from A2A TextPart metadata to GenAI Part ([e59929e](https://github.com/google/adk-python/commit/e59929e11a56aaee7bb0c45cd4c9d9fef689548c)) +* Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([de4dee8](https://github.com/google/adk-python/commit/de4dee899cd777a01ba15906f8496a72e717ea98)) +* Refactor type string update in Anthropic tool param conversion ([ab4b736](https://github.com/google/adk-python/commit/ab4b736807dabee65659486a68135d9f1530834c)) +* **simulation:** handle NoneType generated_content ([9d15517](https://github.com/google/adk-python/commit/9d155177b956f690d4c99560f582e3e90e111f71)) +* Store and retrieve EventCompaction via custom_metadata in Vertex AISessionService ([2e434ca](https://github.com/google/adk-python/commit/2e434ca7be765d45426fde9d52b131921bd9fa30)), closes [#3465](https://github.com/google/adk-python/issues/3465) +* Support before_tool_callback and after_tool_callback in Live mode ([c36a708](https://github.com/google/adk-python/commit/c36a708058163ade061cd3d2f9957231a505a62d)), closes [#4704](https://github.com/google/adk-python/issues/4704) +* temp-scoped state now visible to subsequent agents in same invocation ([2780ae2](https://github.com/google/adk-python/commit/2780ae2892adfbebc7580c843d2eaad29f86c335)) +* **tools:** Handle JSON Schema boolean schemas in Gemini schema conversion ([3256a67](https://github.com/google/adk-python/commit/3256a679da3e0fb6f18b26057e87f5284680cb58)) +* typo in A2A EXPERIMENTAL warning ([eb55eb7](https://github.com/google/adk-python/commit/eb55eb7e7f0fa647d762205225c333dcd8a08dd0)) +* Update agent_engine_sandbox_code_executor in ADK ([dff4c44](https://github.com/google/adk-python/commit/dff4c4404051b711c8be437ba0ae26ca2763df7d)) +* update Bigtable query tools to async functions ([72f3e7e](https://github.com/google/adk-python/commit/72f3e7e1e00d93c632883027bf6d31a9095cd6c2)) +* Update expected UsageMetadataChunk in LiteLLM tests ([dd0851a](https://github.com/google/adk-python/commit/dd0851ac74d358bc030def5adf242d875ab18265)), closes [#4680](https://github.com/google/adk-python/issues/4680) +* update toolbox server and SDK package versions ([2e370ea](https://github.com/google/adk-python/commit/2e370ea688033f0663501171d0babfb0d74de4b2)) +* Validate session before streaming instead of eagerly advancing the runner generator ([ebbc114](https://github.com/google/adk-python/commit/ebbc1147863956e85931f8d46abb0632e3d1cf67)) + + +### Code Refactoring + +* extract reusable functions from hitl and auth preprocessor ([c59afc2](https://github.com/google/adk-python/commit/c59afc21cbed27d1328872cdc2b0e182ab2ca6c8)) +* Rename base classes and TypeVars in optimization data types ([9154ef5](https://github.com/google/adk-python/commit/9154ef59d29eb37538914e9967c4392cc2a24237)) + + ## [1.26.0](https://github.com/google/adk-python/compare/v1.25.1...v1.26.0) (2026-02-26) diff --git a/contributing/samples/adk_documentation/adk_release_analyzer/agent.py b/contributing/samples/adk_documentation/adk_release_analyzer/agent.py index bac8090163..2a72d2840a 100644 --- a/contributing/samples/adk_documentation/adk_release_analyzer/agent.py +++ b/contributing/samples/adk_documentation/adk_release_analyzer/agent.py @@ -29,6 +29,7 @@ - recommendations: Accumulated recommendations from all groups """ +import copy import os import sys from typing import Any @@ -114,6 +115,7 @@ def get_next_file_group(tool_context: ToolContext) -> dict[str, Any]: current_index = tool_context.state.get("current_group_index", 0) if current_index >= len(file_groups): + print(f"[Progress] All {len(file_groups)} groups processed.") return { "status": "complete", "message": "All file groups have been processed.", @@ -122,7 +124,11 @@ def get_next_file_group(tool_context: ToolContext) -> dict[str, Any]: } current_group = file_groups[current_index] - tool_context.state["current_group_index"] = current_index + 1 + file_paths = [f.get("relative_path", "?") for f in current_group] + print( + f"[Progress] Starting group {current_index + 1}/{len(file_groups)}:" + f" {file_paths}" + ) return { "status": "success", @@ -157,6 +163,16 @@ def save_group_recommendations( all_recommendations = tool_context.state.get("recommendations", []) all_recommendations.extend(recommendations) tool_context.state["recommendations"] = all_recommendations + # Advance index only after recommendations are saved, so interrupted + # groups get retried on resume instead of being skipped. + tool_context.state["current_group_index"] = group_index + 1 + + total_groups = len(tool_context.state.get("file_groups", [])) + print( + f"[Progress] Group {group_index + 1}/{total_groups} done." + f" +{len(recommendations)} recommendations" + f" ({len(all_recommendations)} total)" + ) return { "status": "success", @@ -180,6 +196,11 @@ def get_all_recommendations(tool_context: ToolContext) -> dict[str, Any]: end_tag = tool_context.state.get("end_tag", "unknown") compare_url = tool_context.state.get("compare_url", "") + print( + f"[Summary] Retrieving recommendations: {len(recommendations)} total," + f" release {start_tag} → {end_tag}" + ) + return { "status": "success", "start_tag": start_tag, @@ -226,6 +247,12 @@ def save_release_info( tool_context.state["release_summary"] = release_summary tool_context.state["all_changed_files"] = all_changed_files + total_files = sum(len(group) for group in file_groups) + print( + f"[Planning] Release {start_tag} → {end_tag}:" + f" {total_files} files in {len(file_groups)} groups" + ) + return { "status": "success", "start_tag": start_tag, @@ -404,10 +431,13 @@ def file_analyzer_instruction(readonly_context: ReadonlyContext) -> str: 4. For EACH significant change, call `search_local_git_repo` to find related docs in {LOCAL_REPOS_DIR_PATH}/{DOC_REPO}/docs/ - Search for the feature name, class name, or related keywords + - **ALWAYS** pass `ignored_dirs=["api-reference"]` to skip auto-generated API + reference docs (they are updated automatically by code, not manually) - If no docs found, recommend creating new documentation 5. Call `read_local_git_repo_file_content` to read the relevant doc files and check if they need updating. + - **SKIP** any files under `docs/api-reference/` — these are auto-generated. 6. For each documentation update needed, create a recommendation with: - summary: Brief summary of what needs to change @@ -446,6 +476,7 @@ def file_analyzer_instruction(readonly_context: ReadonlyContext) -> str: "Analyzes a group of changed files and generates recommendations." ), instruction=file_analyzer_instruction, + include_contents="none", tools=[ get_next_file_group, get_release_context, # Get global context to avoid duplicates @@ -554,6 +585,26 @@ def summary_instruction(readonly_context: ReadonlyContext) -> str: ) +# Resume pipeline: skips planner, continues from where loop left off. +# Deep copy agents since ADK agents can only have one parent. +_resume_loop = copy.deepcopy(file_analysis_loop) +_resume_loop.parent_agent = None +_resume_summary = copy.deepcopy(summary_agent) +_resume_summary.parent_agent = None + +resume_pipeline = SequentialAgent( + name="resume_pipeline", + description=( + "Resumes the release analysis pipeline from the file analysis loop," + " skipping the planning phase." + ), + sub_agents=[ + _resume_loop, + _resume_summary, + ], +) + + # ============================================================================= # Root Agent: Entry point that understands user requests # ============================================================================= diff --git a/contributing/samples/adk_documentation/adk_release_analyzer/main.py b/contributing/samples/adk_documentation/adk_release_analyzer/main.py index bfad49e5e0..540433caa3 100644 --- a/contributing/samples/adk_documentation/adk_release_analyzer/main.py +++ b/contributing/samples/adk_documentation/adk_release_analyzer/main.py @@ -12,8 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +import argparse import asyncio import logging +import os import time from adk_documentation.adk_release_analyzer import agent @@ -23,30 +25,105 @@ from adk_documentation.settings import DOC_REPO from adk_documentation.utils import call_agent_async from google.adk.cli.utils import logs -from google.adk.runners import InMemoryRunner +from google.adk.runners import Runner +from google.adk.sessions import DatabaseSessionService APP_NAME = "adk_release_analyzer" USER_ID = "adk_release_analyzer_user" +DB_PATH = os.path.join(os.path.dirname(__file__), "sessions.db") +DB_URL = f"sqlite+aiosqlite:///{DB_PATH}" -logs.setup_adk_logger(level=logging.DEBUG) +logs.setup_adk_logger(level=logging.INFO) async def main(): - runner = InMemoryRunner( - agent=agent.root_agent, - app_name=APP_NAME, + parser = argparse.ArgumentParser(description="ADK Release Analyzer") + parser.add_argument( + "--resume", + action="store_true", + help="Resume from the last session instead of starting fresh.", ) - session = await runner.session_service.create_session( - app_name=APP_NAME, - user_id=USER_ID, + parser.add_argument( + "--start-tag", + type=str, + default=None, + help="The older release tag (base) for comparison, e.g. v1.26.0.", ) - - response = await call_agent_async( - runner, - USER_ID, - session.id, - "Please analyze the most recent two releases of ADK Python!", + parser.add_argument( + "--end-tag", + type=str, + default=None, + help="The newer release tag (head) for comparison, e.g. v1.27.0.", ) + args = parser.parse_args() + + session_service = DatabaseSessionService(db_url=DB_URL) + + if args.resume: + # Find the most recent session to resume + sessions_response = await session_service.list_sessions( + app_name=APP_NAME, user_id=USER_ID + ) + if not sessions_response.sessions: + print("No previous session found. Starting fresh.") + args.resume = False + + if args.resume: + # Resume: use existing session with resume_pipeline (skip planner) + last_session = sessions_response.sessions[-1] + session_id = last_session.id + session = await session_service.get_session( + app_name=APP_NAME, user_id=USER_ID, session_id=session_id + ) + state = session.state + group_index = state.get("current_group_index", 0) + total_groups = len(state.get("file_groups", [])) + num_recs = len(state.get("recommendations", [])) + print(f"Resuming session {session_id}") + print( + f" Progress: group {group_index + 1}/{total_groups}," + f" {num_recs} recommendations so far" + ) + print( + f" Release: {state.get('start_tag', '?')} →" + f" {state.get('end_tag', '?')}" + ) + + runner = Runner( + agent=agent.resume_pipeline, + app_name=APP_NAME, + session_service=session_service, + ) + prompt = "Resume analyzing the remaining file groups." + else: + # Fresh run + runner = Runner( + agent=agent.root_agent, + app_name=APP_NAME, + session_service=session_service, + ) + session = await session_service.create_session( + app_name=APP_NAME, + user_id=USER_ID, + ) + session_id = session.id + if args.start_tag and args.end_tag: + prompt = ( + f"Please analyze ADK Python releases from {args.start_tag} to" + f" {args.end_tag}!" + ) + elif args.end_tag: + prompt = ( + f"Please analyze the ADK Python release {args.end_tag} against its" + " previous release!" + ) + else: + prompt = "Please analyze the most recent two releases of ADK Python!" + + print(f"Session ID: {session_id}") + print("-" * 80) + + response = await call_agent_async(runner, USER_ID, session_id, prompt) print(f"<<<< Agent Final Output: {response}\n") diff --git a/contributing/samples/adk_documentation/tools.py b/contributing/samples/adk_documentation/tools.py index 74703b9585..723148ec30 100644 --- a/contributing/samples/adk_documentation/tools.py +++ b/contributing/samples/adk_documentation/tools.py @@ -183,18 +183,24 @@ def read_local_git_repo_file_content(file_path: str) -> Dict[str, Any]: commit hash. """ print(f"Attempting to read file from path: {file_path}") - dir_path = os.path.dirname(file_path) - head_commit_sha = _find_head_commit_sha(dir_path) + if not os.path.isabs(file_path): + return error_response( + f"file_path must be an absolute path, got: {file_path}" + ) + + try: + dir_path = os.path.dirname(file_path) + head_commit_sha = _find_head_commit_sha(dir_path) + except (FileNotFoundError, subprocess.CalledProcessError): + head_commit_sha = "unknown" try: - # Open and read the file content with open(file_path, "r", encoding="utf-8") as f: content = f.read() - # Add line numbers to the content - lines = content.splitlines() - numbered_lines = [f"{i + 1}: {line}" for i, line in enumerate(lines)] - numbered_content = "\n".join(numbered_lines) + lines = content.splitlines() + numbered_lines = [f"{i + 1}: {line}" for i, line in enumerate(lines)] + numbered_content = "\n".join(numbered_lines) return { "status": "success", @@ -204,7 +210,7 @@ def read_local_git_repo_file_content(file_path: str) -> Dict[str, Any]: } except FileNotFoundError: return error_response(f"Error: File not found at {file_path}") - except IOError as e: + except (IOError, OSError) as e: return error_response(f"An unexpected error occurred: {e}") diff --git a/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt b/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt new file mode 100644 index 0000000000..dcd7cb071b --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt @@ -0,0 +1,18 @@ +You are the automated security and moderation agent for the {OWNER}/{REPO} repository. + +You will be provided with an Issue Number and a list of comments made by non-maintainers. +Your job is to read through these comments and identify if any of them contain SPAM, promotional content for 3rd-party websites, SEO links, or objectionable material. + +CRITERIA FOR SPAM: +- The comment is completely unrelated to the repository or the specific issue. +- The comment promotes a 3rd party product, service, or website. +- The comment is generic "SEO spam" (e.g., "Great post! Check out my site at [link]"). + +INSTRUCTIONS: +1. Evaluate the provided comments. +2. If you identify spam, call the `flag_issue_as_spam` tool. + - Pass the `item_number`. + - Pass a brief `detection_reason` explaining which comment is spam and why (e.g., "@spammer_bot posted an irrelevant link to a shoe store"). +3. If NONE of the comments contain spam, do NOT call any tools. Just respond with "No spam detected." + +Remember: Do not flag comments that are merely unhelpful, off-topic, or from beginners asking legitimate questions. Only flag actual spam, endorsements, or objectionable material. \ No newline at end of file diff --git a/contributing/samples/adk_issue_monitoring_agent/README.md b/contributing/samples/adk_issue_monitoring_agent/README.md new file mode 100644 index 0000000000..da1a5d7d4f --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/README.md @@ -0,0 +1,62 @@ +# ADK Issue Monitoring Agent 🛡️ + +An intelligent, cost-optimized, automated moderation agent built with the **Google Agent Development Kit (ADK)**. + +This agent automatically audits GitHub repository issues to detect SEO spam, unsolicited promotional links, and irrelevant third-party endorsements. If spam is detected, it automatically applies a `spam` label and alerts the repository maintainers. + +## ✨ Key Features & Optimizations + +* **Zero-Waste LLM Invocations:** Fetches issue comments via REST APIs and pre-filters them in Python. It automatically ignores comments from maintainers, `[bot]` accounts, and the official `adk-bot`. The Gemini LLM is never invoked for safe threads, saving 100% of the token cost. +* **Dual-Mode Scanning:** Can perform a **Deep Clean** (auditing the entire history of all open issues) or a **Daily Sweep** (only fetching issues updated within the last 24 hours). +* **Token Truncation:** Uses Regular Expressions to strip out Markdown code blocks (` ``` `) replacing them with `[CODE BLOCK REMOVED]`, and truncates unusually long text to 1,500 characters before sending it to the AI. +* **Idempotency (Anti-Double-Posting):** The bot reads the comment history for its own signature. If it has already flagged an issue, it instantly skips it, preventing infinite feedback loops. + +--- + +## Configuration + +The agent is configured via environment variables, typically set as secrets in GitHub Actions. + +### Required Secrets + +| Secret Name | Description | +| :--- | :--- | +| `GITHUB_TOKEN` | A GitHub Personal Access Token (PAT) or Service Account Token with `repo` and `issues: write` scope. | +| `GOOGLE_API_KEY` | An API key for the Google AI (Gemini) model used for reasoning. | + +### Optional Configuration + +These variables control the scanning behavior, thresholds, and model selection. + +| Variable Name | Description | Default | +| :--- | :--- | :--- | +| `INITIAL_FULL_SCAN` | If `true`, audits every open issue in the repository. If `false`, only audits issues updated in the last 24 hours. | `false` | +| `SPAM_LABEL_NAME` | The exact text of the label applied to flagged issues. | `spam` | +| `BOT_NAME` | The GitHub username of your official bot to ensure its comments are ignored. | `adk-bot` | +| `CONCURRENCY_LIMIT` | The number of issues to process concurrently. | `3` | +| `SLEEP_BETWEEN_CHUNKS` | Time in seconds to sleep between batches to respect GitHub API rate limits. | `1.5` | +| `LLM_MODEL_NAME`| The specific Gemini model version to use. | `gemini-2.5-flash` | +| `OWNER` | Repository owner (auto-detected in Actions). | (Environment dependent) | +| `REPO` | Repository name (auto-detected in Actions). | (Environment dependent) | + +--- + +## Deployment + +To deploy this agent, a GitHub Actions workflow file (`.github/workflows/issue-monitor.yml`) is recommended. + +### Directory Structure Note +Because this agent resides within the `adk-python` package structure, the workflow must ensure the script is executed correctly to handle imports. It must be run as a module from the parent directory. + +### Example Workflow Execution +```yaml + - name: Run ADK Issue Monitoring Agent + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + # Mapped to the manual trigger checkbox in the GitHub UI + INITIAL_FULL_SCAN: ${{ github.event.inputs.full_scan == 'true' }} + PYTHONPATH: contributing/samples + run: python -m adk_issue_monitoring_agent.main \ No newline at end of file diff --git a/contributing/samples/adk_issue_monitoring_agent/__init__.py b/contributing/samples/adk_issue_monitoring_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/adk_issue_monitoring_agent/agent.py b/contributing/samples/adk_issue_monitoring_agent/agent.py new file mode 100644 index 0000000000..b30bce3d36 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/agent.py @@ -0,0 +1,118 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +from typing import Any + +from adk_issue_monitoring_agent.settings import BOT_ALERT_SIGNATURE +from adk_issue_monitoring_agent.settings import GITHUB_BASE_URL +from adk_issue_monitoring_agent.settings import LLM_MODEL_NAME +from adk_issue_monitoring_agent.settings import OWNER +from adk_issue_monitoring_agent.settings import REPO +from adk_issue_monitoring_agent.settings import SPAM_LABEL_NAME +from adk_issue_monitoring_agent.utils import error_response +from adk_issue_monitoring_agent.utils import get_issue_comments +from adk_issue_monitoring_agent.utils import get_issue_details +from adk_issue_monitoring_agent.utils import post_request +from google.adk.agents.llm_agent import Agent +from requests.exceptions import RequestException + +logger = logging.getLogger("google_adk." + __name__) + + +def load_prompt_template(filename: str) -> str: + file_path = os.path.join(os.path.dirname(__file__), filename) + with open(file_path, "r") as f: + return f.read() + + +PROMPT_TEMPLATE = load_prompt_template("PROMPT_INSTRUCTION.txt") + +# --- Tools --- + + +def flag_issue_as_spam( + item_number: int, detection_reason: str +) -> dict[str, Any]: + """ + Flags an issue as spam by adding a label and leaving a comment for maintainers. + Includes idempotency checks to avoid duplicate POST actions. + + Args: + item_number (int): The GitHub issue number. + detection_reason (str): The explanation of what the spam is. + """ + logger.info(f"Flagging #{item_number} as SPAM. Reason: {detection_reason}") + + label_url = ( + f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{item_number}/labels" + ) + comment_url = ( + f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{item_number}/comments" + ) + + safe_reason = detection_reason.replace("```", "'''") + + alert_body = ( + f"{BOT_ALERT_SIGNATURE}\n" + "@maintainers, a suspected spam comment was detected in this thread.\n\n" + "**Reason:**\n" + f"```text\n{safe_reason}\n```" + ) + + try: + # 1. Fetch current state to check what actions are actually needed + issue = get_issue_details(OWNER, REPO, item_number) + comments = get_issue_comments(OWNER, REPO, item_number) + + current_labels = [ + label["name"].lower() for label in issue.get("labels", []) + ] + is_labeled = SPAM_LABEL_NAME.lower() in current_labels + is_commented = any( + BOT_ALERT_SIGNATURE in c.get("body", "") for c in comments + ) + + if is_labeled and is_commented: + logger.info(f"#{item_number} is already labeled and commented. Skipping.") + elif is_labeled and not is_commented: + post_request(comment_url, {"body": alert_body}) + logger.info(f"Successfully posted spam alert comment to #{item_number}.") + elif not is_labeled and is_commented: + post_request(label_url, {"labels": [SPAM_LABEL_NAME]}) + logger.info( + f"Successfully added '{SPAM_LABEL_NAME}' label to #{item_number}." + ) + else: + post_request(label_url, {"labels": [SPAM_LABEL_NAME]}) + post_request(comment_url, {"body": alert_body}) + logger.info(f"Successfully fully flagged #{item_number}.") + + return {"status": "success", "message": "Maintainers alerted successfully."} + + except RequestException as e: + return error_response(f"Error flagging issue: {e}") + + +root_agent = Agent( + model=LLM_MODEL_NAME, + name="spam_auditor_agent", + description="Audits issue comments for spam.", + instruction=PROMPT_TEMPLATE.format( + OWNER=OWNER, + REPO=REPO, + ), + tools=[flag_issue_as_spam], +) diff --git a/contributing/samples/adk_issue_monitoring_agent/main.py b/contributing/samples/adk_issue_monitoring_agent/main.py new file mode 100644 index 0000000000..65956d2685 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/main.py @@ -0,0 +1,204 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import logging +import re +import time + +from adk_issue_monitoring_agent.agent import root_agent +from adk_issue_monitoring_agent.settings import BOT_ALERT_SIGNATURE +from adk_issue_monitoring_agent.settings import BOT_NAME +from adk_issue_monitoring_agent.settings import CONCURRENCY_LIMIT +from adk_issue_monitoring_agent.settings import OWNER +from adk_issue_monitoring_agent.settings import REPO +from adk_issue_monitoring_agent.settings import SLEEP_BETWEEN_CHUNKS +from adk_issue_monitoring_agent.utils import get_api_call_count +from adk_issue_monitoring_agent.utils import get_issue_comments +from adk_issue_monitoring_agent.utils import get_issue_details +from adk_issue_monitoring_agent.utils import get_repository_maintainers +from adk_issue_monitoring_agent.utils import get_target_issues +from adk_issue_monitoring_agent.utils import reset_api_call_count +from google.adk.cli.utils import logs +from google.adk.runners import InMemoryRunner +from google.genai import types + +logs.setup_adk_logger(level=logging.INFO) +logger = logging.getLogger("google_adk." + __name__) + +APP_NAME = "issue_monitoring_app" +USER_ID = "issue_monitoring_user" + + +async def process_single_issue( + runner: InMemoryRunner, issue_number: int, maintainers: list[str] +) -> tuple[float, int]: + start_time = time.perf_counter() + start_api_calls = get_api_call_count() + + try: + # 1. Fetch the main issue AND the comments + issue = get_issue_details(OWNER, REPO, issue_number) + comments = get_issue_comments(OWNER, REPO, issue_number) + + user_comments = [] + + # 2. Process the ORIGINAL ISSUE DESCRIPTION first! + issue_author = issue.get("user", {}).get("login", "") + issue_body = issue.get("body") or "" + + # Only check the description if the author isn't a maintainer/bot + if ( + issue_author not in maintainers + and not issue_author.endswith("[bot]") + and issue_author != BOT_NAME + ): + cleaned_issue_body = re.sub( + r"```.*?```", "\n[CODE BLOCK REMOVED]\n", issue_body, flags=re.DOTALL + ) + if len(cleaned_issue_body) > 1500: + cleaned_issue_body = cleaned_issue_body[:1500] + "\n...[TRUNCATED]" + user_comments.append( + f"Author (Original Issue): @{issue_author}\nText:" + f" {cleaned_issue_body}\n---" + ) + + # 3. Process all the replies (comments) + for c in comments: + author = c.get("user", {}).get("login", "") + body = c.get("body") or "" + + if BOT_ALERT_SIGNATURE in body: + logger.info( + f"#{issue_number}: Spam bot already alerted maintainers previously." + " Skipping." + ) + return ( + time.perf_counter() - start_time, + get_api_call_count() - start_api_calls, + ) + + if ( + author in maintainers + or author.endswith("[bot]") + or author == BOT_NAME + ): + continue + + cleaned_body = re.sub( + r"```.*?```", "\n[CODE BLOCK REMOVED]\n", body, flags=re.DOTALL + ) + + if len(cleaned_body) > 1500: + cleaned_body = cleaned_body[:1500] + "\n...[TRUNCATED]" + + user_comments.append(f"Author: @{author}\nComment: {cleaned_body}\n---") + + # 4. Skip LLM if no user text exists + if not user_comments: + logger.debug(f"#{issue_number}: No non-maintainer text found. Skipping.") + return ( + time.perf_counter() - start_time, + get_api_call_count() - start_api_calls, + ) + + logger.info( + f"Processing Issue #{issue_number} (Found {len(user_comments)} items to" + " review)..." + ) + + # 5. Format prompt and invoke LLM + compiled_comments = "\n".join(user_comments) + prompt_text = ( + "Please review the following text for issue" + f" #{issue_number}:\n\n{compiled_comments}" + ) + + session = await runner.session_service.create_session( + user_id=USER_ID, app_name=APP_NAME + ) + prompt_message = types.Content( + role="user", parts=[types.Part(text=prompt_text)] + ) + + async for event in runner.run_async( + user_id=USER_ID, session_id=session.id, new_message=prompt_message + ): + if ( + event.content + and event.content.parts + and hasattr(event.content.parts[0], "text") + ): + text = event.content.parts[0].text + if text: + clean_text = text[:100].replace("\n", " ") + logger.info(f"#{issue_number} Decision: {clean_text}...") + + except Exception as e: + logger.error(f"Error processing issue #{issue_number}: {e}", exc_info=True) + + # Calculate duration and API calls regardless of success or failure + duration = time.perf_counter() - start_time + issue_api_calls = get_api_call_count() - start_api_calls + return duration, issue_api_calls + + +async def main(): + logger.info(f"--- Starting Issue Monitoring Agent for {OWNER}/{REPO} ---") + reset_api_call_count() + + # Step 1: Fetch Maintainers + try: + maintainers = get_repository_maintainers(OWNER, REPO) + logger.info(f"Found {len(maintainers)} maintainers.") + except Exception as e: + logger.critical(f"Failed to fetch maintainers: {e}") + return + + # Step 2: Fetch target issues + try: + all_issues = get_target_issues(OWNER, REPO) + except Exception as e: + logger.critical(f"Failed to fetch issue list: {e}") + return + + total_count = len(all_issues) + if total_count == 0: + logger.info("No issues matched criteria. Run finished.") + return + + logger.info(f"Found {total_count} issues to process.") + + # Initialize the runner ONCE for the entire run + runner = InMemoryRunner(agent=root_agent, app_name=APP_NAME) + + # Step 3: Iterate through issues async 'CONCURRENCY_LIMIT' at a time + for i in range(0, total_count, CONCURRENCY_LIMIT): + chunk = all_issues[i : i + CONCURRENCY_LIMIT] + logger.info(f"Processing chunk: {chunk}") + + tasks = [ + process_single_issue(runner, issue_num, maintainers) + for issue_num in chunk + ] + await asyncio.gather(*tasks) + + if (i + CONCURRENCY_LIMIT) < total_count: + await asyncio.sleep(SLEEP_BETWEEN_CHUNKS) + + logger.info(f"--- Run Finished. Total API calls: {get_api_call_count()} ---") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/contributing/samples/adk_issue_monitoring_agent/settings.py b/contributing/samples/adk_issue_monitoring_agent/settings.py new file mode 100644 index 0000000000..fbba22f904 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/settings.py @@ -0,0 +1,43 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from pathlib import Path + +from dotenv import load_dotenv + +CURRENT_DIR = Path(__file__).resolve().parent +ENV_PATH = CURRENT_DIR / ".env" +load_dotenv(dotenv_path=ENV_PATH, override=True) + +GITHUB_BASE_URL = "https://api.github.com" +GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") +if not GITHUB_TOKEN: + raise ValueError("GITHUB_TOKEN environment variable not set") + +OWNER = os.getenv("OWNER", "google") +REPO = os.getenv("REPO", "adk-python") +LLM_MODEL_NAME = os.getenv("LLM_MODEL_NAME", "gemini-2.5-flash") + +SPAM_LABEL_NAME = os.getenv("SPAM_LABEL_NAME", "spam") +CONCURRENCY_LIMIT = int(os.getenv("CONCURRENCY_LIMIT", 3)) +BOT_NAME = os.getenv("BOT_NAME", "adk-bot") +BOT_ALERT_SIGNATURE = os.getenv( + "BOT_ALERT_SIGNATURE", "🚨 **Automated Spam Detection Alert** 🚨" +) +SLEEP_BETWEEN_CHUNKS = float(os.getenv("SLEEP_BETWEEN_CHUNKS", 1.5)) + + +# Toggle for the initial run +INITIAL_FULL_SCAN = os.getenv("INITIAL_FULL_SCAN", "false").lower() == "true" diff --git a/contributing/samples/adk_issue_monitoring_agent/utils.py b/contributing/samples/adk_issue_monitoring_agent/utils.py new file mode 100644 index 0000000000..a2c8b70d0b --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/utils.py @@ -0,0 +1,171 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from typing import Any + +from adk_issue_monitoring_agent.settings import GITHUB_TOKEN +from adk_issue_monitoring_agent.settings import INITIAL_FULL_SCAN +from adk_issue_monitoring_agent.settings import SPAM_LABEL_NAME +import requests +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry + +logger = logging.getLogger("google_adk." + __name__) + +_api_call_count = 0 + + +def get_api_call_count() -> int: + return _api_call_count + + +def reset_api_call_count() -> None: + global _api_call_count + _api_call_count = 0 + + +def _increment_api_call_count() -> None: + global _api_call_count + _api_call_count += 1 + + +retry_strategy = Retry( + total=6, + backoff_factor=2, + status_forcelist=[429, 500, 502, 503, 504], + allowed_methods=["GET", "DELETE"], +) +adapter = HTTPAdapter(max_retries=retry_strategy) +_session = requests.Session() +_session.mount("https://", adapter) +_session.headers.update({ + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", +}) + + +def get_request(url: str, params: dict[str, Any] | None = None) -> Any: + _increment_api_call_count() + response = _session.get(url, params=params or {}, timeout=60) + response.raise_for_status() + return response.json() + + +def post_request(url: str, payload: Any) -> Any: + _increment_api_call_count() + response = _session.post(url, json=payload, timeout=60) + response.raise_for_status() + return response.json() + + +def error_response(error_message: str) -> dict[str, Any]: + return {"status": "error", "message": error_message} + + +def get_repository_maintainers(owner: str, repo: str) -> list[str]: + """Fetches all users with push/maintain access.""" + url = f"https://api.github.com/repos/{owner}/{repo}/collaborators" + data = get_request(url, {"permission": "push"}) + return [user["login"] for user in data] + + +def get_issue_details( + owner: str, repo: str, issue_number: int +) -> dict[str, Any]: + """Fetches the main issue object to get the original description (body).""" + url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}" + return get_request(url) + + +def get_issue_comments( + owner: str, repo: str, issue_number: int +) -> list[dict[str, Any]]: + """Fetches ALL comments for a specific issue, handling pagination.""" + url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/comments" + all_comments = [] + page = 1 + + while True: + data = get_request(url, params={"per_page": 100, "page": page}) + if not data: + break + + all_comments.extend(data) + + if len(data) < 100: + break + page += 1 + + return all_comments + + +def get_target_issues(owner: str, repo: str) -> list[int]: + """ + Fetches issues. + If INITIAL_FULL_SCAN is True, fetches ALL open issues. + If False, fetches only issues updated in the last 24 hours using the 'since' parameter. + """ + from datetime import datetime + from datetime import timedelta + from datetime import timezone + + url = f"https://api.github.com/repos/{owner}/{repo}/issues" + params = { + "state": "open", + "per_page": 100, + } + + if INITIAL_FULL_SCAN: + logger.info("INITIAL_FULL_SCAN is True. Fetching ALL open issues...") + else: + yesterday = (datetime.now(timezone.utc) - timedelta(days=1)).strftime( + "%Y-%m-%dT%H:%M:%SZ" + ) + params["since"] = yesterday + logger.info(f"Daily mode: Fetching issues updated since {yesterday}...") + + issue_numbers = [] + page = 1 + + while True: + params["page"] = page + try: + items = get_request(url, params=params) + + if not items: + break + + for item in items: + if "pull_request" not in item: + # Extract all the label names on this issue + current_labels = [label["name"] for label in item.get("labels", [])] + + # Only add the issue if it DOES NOT already have the spam label + if SPAM_LABEL_NAME not in current_labels: + issue_numbers.append(item["number"]) + else: + logger.debug( + f"Skipping #{item['number']} - already marked as spam." + ) + + if len(items) < 100: + break + + page += 1 + except requests.exceptions.RequestException as e: + logger.error(f"Failed to fetch issues on page {page}: {e}") + break + + return issue_numbers diff --git a/contributing/samples/adk_triaging_agent/agent.py b/contributing/samples/adk_triaging_agent/agent.py index 82f02e771c..cec5805f57 100644 --- a/contributing/samples/adk_triaging_agent/agent.py +++ b/contributing/samples/adk_triaging_agent/agent.py @@ -26,15 +26,14 @@ import requests LABEL_TO_OWNER = { - "a2a": "seanzhou1023", "agent engine": "yeesian", - "auth": "seanzhou1023", + "auth": "xuanyang15", "bq": "shobsi", "core": "Jacksunwei", "documentation": "joefernandez", "eval": "ankursharmas", - "live": "seanzhou1023", - "mcp": "seanzhou1023", + "live": "wuliang229", + "mcp": "wukath", "models": "xuanyang15", "services": "DeanChensj", "tools": "xuanyang15", @@ -43,6 +42,14 @@ "workflow": "DeanChensj", } + +LABEL_TO_GTECH = [ + "klateefa", + "llalitkumarrr", + "surajksharma07", + "sanketpatil06", +] + LABEL_GUIDELINES = """ Label rubric and disambiguation rules: - "documentation": Tutorials, README content, reference docs, or samples. @@ -122,15 +129,13 @@ def list_untriaged_issues(issue_count: int) -> dict[str, Any]: existing_component_labels = issue_labels & component_labels has_component = bool(existing_component_labels) - has_planned = "planned" in issue_labels # Determine what actions are needed needs_component_label = not has_component - needs_owner = has_planned and not assignees + needs_owner = not assignees # Include issue if it needs any action if needs_component_label or needs_owner: - issue["has_planned_label"] = has_planned issue["has_component_label"] = has_component issue["existing_component_label"] = ( list(existing_component_labels)[0] @@ -147,7 +152,6 @@ def list_untriaged_issues(issue_count: int) -> dict[str, Any]: def add_label_to_issue(issue_number: int, label: str) -> dict[str, Any]: """Add the specified component label to the given issue number. - Args: issue_number: issue number of the GitHub issue. label: label to assign @@ -178,37 +182,30 @@ def add_label_to_issue(issue_number: int, label: str) -> dict[str, Any]: } -def add_owner_to_issue(issue_number: int, label: str) -> dict[str, Any]: - """Assign an owner to the issue based on the component label. +def assign_gtech_owner_to_issue(issue_number: int) -> dict[str, Any]: + """Assign an owner from the GTech team to the given issue number. - This should only be called for issues that have the 'planned' label. + This is go to option irrespective of component label or planned label, + as long as the issue needs an owner. + + All unassigned issues will be considered for GTech ownership. Unassigned + issues will seperated in two categories: issues with type "Bug" and issues + with type "Feature". Then bug issues and feature issues will be equally + assigned to the Gtech members in such a way that every day all members get + equal number of bug and feature issues. Args: issue_number: issue number of the GitHub issue. - label: component label that determines the owner to assign Returns: The status of this request, with the assigned owner when successful. """ - print( - f"Attempting to assign owner for label '{label}' to issue #{issue_number}" - ) - if label not in LABEL_TO_OWNER: - return error_response( - f"Error: Label '{label}' is not a valid component label." - ) - - owner = LABEL_TO_OWNER.get(label, None) - if not owner: - return { - "status": "warning", - "message": f"Label '{label}' does not have an owner. Will not assign.", - } - + print(f"Attempting to assign GTech owner to issue #{issue_number}") + gtech_assignee = LABEL_TO_GTECH[issue_number % len(LABEL_TO_GTECH)] assignee_url = ( f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{issue_number}/assignees" ) - assignee_payload = {"assignees": [owner]} + assignee_payload = {"assignees": [gtech_assignee]} try: response = post_request(assignee_url, assignee_payload) @@ -218,7 +215,7 @@ def add_owner_to_issue(issue_number: int, label: str) -> dict[str, Any]: return { "status": "success", "message": response, - "assigned_owner": owner, + "assigned_owner": gtech_assignee, } @@ -260,7 +257,7 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: Each issue will have flags indicating what actions are needed: - `needs_component_label`: true if the issue needs a component label - - `needs_owner`: true if the issue needs an owner assigned (has 'planned' label but no assignee) + - `needs_owner`: true if the issue needs an owner assigned For each issue, perform ONLY the required actions based on the flags: @@ -272,8 +269,8 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: - Otherwise → do not change the issue type 2. **If `needs_owner` is true**: - - Use `add_owner_to_issue` to assign an owner based on the component label - - Note: If the issue already has a component label (`has_component_label: true`), use that existing label to determine the owner + - Use `assign_gtech_owner_to_issue` to assign an owner. + Do NOT add a component label if `needs_component_label` is false. Do NOT assign an owner if `needs_owner` is false. @@ -283,19 +280,18 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: placeholders (never output text like "[fill in later]"). - Justify the chosen label with a short explanation referencing the issue details. - - Mention the assigned owner only when you actually assign one (i.e., when - the issue has the 'planned' label). + - Mention the assigned owner only when you actually assign one. - If no label is applied, clearly state why. Present the following in an easy to read format highlighting issue number and your label. - the issue summary in a few sentence - your label recommendation and justification - - the owner of the label if you assign the issue to an owner (only for planned issues) + - the owner, if you assign the issue to an owner """, tools=[ list_untriaged_issues, add_label_to_issue, - add_owner_to_issue, + assign_gtech_owner_to_issue, change_issue_type, ], ) diff --git a/contributing/samples/adk_triaging_agent/main.py b/contributing/samples/adk_triaging_agent/main.py index 2d65cfd67d..fcdac832ac 100644 --- a/contributing/samples/adk_triaging_agent/main.py +++ b/contributing/samples/adk_triaging_agent/main.py @@ -57,7 +57,7 @@ async def fetch_specific_issue_details(issue_number: int): # Determine what actions are needed needs_component_label = not has_component - needs_owner = has_planned and not has_assignee + needs_owner = not has_assignee if needs_component_label or needs_owner: print( diff --git a/contributing/samples/agent_engine_code_execution/agent.py b/contributing/samples/agent_engine_code_execution/agent.py index a32e4ca4c6..8e9ea4af63 100644 --- a/contributing/samples/agent_engine_code_execution/agent.py +++ b/contributing/samples/agent_engine_code_execution/agent.py @@ -89,6 +89,6 @@ def base_system_instruction(): # "projects/vertex-agent-loadtest/locations/us-central1/reasoningEngines/6842889780301135872/sandboxEnvironments/6545148628569161728", sandbox_resource_name=None, # Replace with agent engine resource name used for creating sandbox environment. - agent_engine_resource_name="AGENT_ENGINE_RESOURCE_NAME", + agent_engine_resource_name=None, ), ) diff --git a/contributing/samples/agent_registry_agent/agent.py b/contributing/samples/agent_registry_agent/agent.py index 38036deabf..e969a639d1 100644 --- a/contributing/samples/agent_registry_agent/agent.py +++ b/contributing/samples/agent_registry_agent/agent.py @@ -18,6 +18,7 @@ from google.adk.agents.llm_agent import LlmAgent from google.adk.integrations.agent_registry import AgentRegistry +from google.adk.models.google_llm import Gemini # Project and location can be set via environment variables: # GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION @@ -27,6 +28,8 @@ # Initialize Agent Registry client registry = AgentRegistry(project_id=project_id, location=location) +# List agents, MCP servers, and endpoints resource names from the registry. +# They can be used to initialize the agent, toolset, and model below. print(f"Listing agents in {project_id}/{location}...") agents = registry.list_agents() for agent in agents.get("agents", []): @@ -37,6 +40,11 @@ for server in mcp_servers.get("mcpServers", []): print(f"- MCP Server: {server.get('displayName')} ({server.get('name')})") +print(f"\nListing endpoints in {project_id}/{location}...") +endpoints = registry.list_endpoints() +for endpoint in endpoints.get("endpoints", []): + print(f"- Endpoint: {endpoint.get('displayName')} ({endpoint.get('name')})") + # Example of using a specific agent or MCP server from the registry: # (Note: These names should be full resource names as returned by list methods) @@ -52,8 +60,19 @@ f"projects/{project_id}/locations/{location}/mcpServers/MCP_SERVER_NAME" ) +# 3. Getting a specific model endpoint configuration +# This returns a string like: +# "projects/adk12345/locations/us-central1/publishers/google/models/gemini-2.5-flash" +# TODO: Replace ENDPOINT_NAME with your endpoint name +model_name = registry.get_model_name( + f"projects/{project_id}/locations/{location}/endpoints/ENDPOINT_NAME" +) + +# Initialize the model using the resolved model name from registry. +gemini_model = Gemini(model=model_name) + root_agent = LlmAgent( - model="gemini-2.5-flash", + model=gemini_model, name="discovery_agent", instruction=( "You have access to tools and sub-agents discovered via Registry." diff --git a/contributing/samples/agent_tool_with_grounding_metadata/__init__.py b/contributing/samples/agent_tool_with_grounding_metadata/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/agent_tool_with_grounding_metadata/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/agent_tool_with_grounding_metadata/agent.py b/contributing/samples/agent_tool_with_grounding_metadata/agent.py new file mode 100644 index 0000000000..521038d809 --- /dev/null +++ b/contributing/samples/agent_tool_with_grounding_metadata/agent.py @@ -0,0 +1,74 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import random + +from dotenv import load_dotenv +from google.adk import Agent +from google.adk.tools.agent_tool import AgentTool +from google.adk.tools.tool_context import ToolContext +from google.adk.tools.vertex_ai_search_tool import VertexAiSearchTool + +load_dotenv(override=True) + +VERTEXAI_DATASTORE_ID = os.getenv("VERTEXAI_DATASTORE_ID") +if not VERTEXAI_DATASTORE_ID: + raise ValueError("VERTEXAI_DATASTORE_ID environment variable not set") + + +def roll_die(sides: int, tool_context: ToolContext) -> int: + """Roll a die and return the rolled result. + + Args: + sides: The integer number of sides the die has. + + Returns: + An integer of the result of rolling the die. + """ + result = random.randint(1, sides) + if "rolls" not in tool_context.state: + tool_context.state["rolls"] = [] + + tool_context.state["rolls"] = tool_context.state["rolls"] + [result] + return result + + +vertex_ai_search_agent = Agent( + model="gemini-3-flash-preview", + name="vertex_ai_search_agent", + description="An agent for performing Vertex AI search.", + tools=[ + VertexAiSearchTool( + data_store_id=VERTEXAI_DATASTORE_ID, + ) + ], +) + +root_agent = Agent( + model="gemini-3.1-pro-preview", + name="hello_world_agent", + description="A hello world agent with multiple tools.", + instruction=""" + You are a helpful assistant which can help user to roll dice and search for information. + - Use `roll_die` tool to roll dice. + - Use `vertex_ai_search_agent` to search for Google Agent Development Kit (ADK) information in the datastore. + """, + tools=[ + roll_die, + AgentTool( + agent=vertex_ai_search_agent, propagate_grounding_metadata=True + ), + ], +) diff --git a/contributing/samples/bigquery/agent.py b/contributing/samples/bigquery/agent.py index 5ff34c7cee..7e2031030c 100644 --- a/contributing/samples/bigquery/agent.py +++ b/contributing/samples/bigquery/agent.py @@ -21,6 +21,7 @@ from google.adk.tools.bigquery.config import BigQueryToolConfig from google.adk.tools.bigquery.config import WriteMode import google.auth +import google.auth.transport.requests # Define the desired credential type. # By default use Application Default Credentials (ADC) from the local @@ -57,6 +58,8 @@ # service account key file # https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys creds, _ = google.auth.load_credentials_from_file("service_account_key.json") + if not creds.valid: + creds.refresh(google.auth.transport.requests.Request()) credentials_config = BigQueryCredentialsConfig(credentials=creds) elif CREDENTIALS_TYPE == AuthCredentialTypes.HTTP: # Initialize the tools to use the externally provided access token. One such @@ -73,6 +76,10 @@ # Initialize the tools to use the application default credentials. # https://cloud.google.com/docs/authentication/provide-credentials-adc application_default_credentials, _ = google.auth.default() + if not application_default_credentials.valid: + application_default_credentials.refresh( + google.auth.transport.requests.Request() + ) credentials_config = BigQueryCredentialsConfig( credentials=application_default_credentials ) diff --git a/contributing/samples/data_agent/agent.py b/contributing/samples/data_agent/agent.py index 634a476286..b9bcd9cdfc 100644 --- a/contributing/samples/data_agent/agent.py +++ b/contributing/samples/data_agent/agent.py @@ -51,6 +51,10 @@ # Initialize the tools to use the application default credentials. # https://cloud.google.com/docs/authentication/provide-credentials-adc application_default_credentials, _ = google.auth.default() + if not application_default_credentials.valid: + application_default_credentials.refresh( + google.auth.transport.requests.Request() + ) credentials_config = DataAgentCredentialsConfig( credentials=application_default_credentials ) diff --git a/contributing/samples/files_retrieval_agent/README.md b/contributing/samples/files_retrieval_agent/README.md new file mode 100644 index 0000000000..57b16e742b --- /dev/null +++ b/contributing/samples/files_retrieval_agent/README.md @@ -0,0 +1,76 @@ +# Files Retrieval Agent + +A sample agent that demonstrates using `FilesRetrieval` with the +`gemini-embedding-2-preview` embedding model for retrieval-augmented +generation (RAG) over local files. + +## What it does + +This agent indexes local text files from the `data/` directory using +`FilesRetrieval` (backed by LlamaIndex's `VectorStoreIndex` and Google's +`gemini-embedding-2-preview` embedding model), then answers user questions +by retrieving relevant documents before generating a response. + +## Prerequisites + +- Python 3.11+ +- `google-genai >= 1.64.0` (required for `gemini-embedding-2-preview` + support via the Vertex AI `embedContent` endpoint) +- `llama-index-embeddings-google-genai >= 0.3.0` + +Install dependencies: + +```bash +uv sync --all-extras +``` + +## Authentication + +Configure one of the following: + +**Google AI API:** + +```bash +export GOOGLE_API_KEY="your-api-key" +``` + +**Vertex AI:** + +```bash +export GOOGLE_GENAI_USE_VERTEXAI=1 +export GOOGLE_CLOUD_PROJECT="your-project-id" +export GOOGLE_CLOUD_LOCATION="us-central1" +``` + +Note: `gemini-embedding-2-preview` is currently only available in +`us-central1`. + +## Usage + +```bash +cd contributing/samples + +# Interactive CLI +adk run files_retrieval_agent + +# Web UI +adk web . +``` + +## Example queries + +- "What agent types does ADK support?" +- "How does FilesRetrieval work?" +- "What tools are available in ADK?" + +## File structure + +``` +files_retrieval_agent/ +├── __init__.py +├── agent.py # Agent definition with FilesRetrieval tool +├── data/ +│ ├── adk_overview.txt # ADK architecture overview +│ └── tools_guide.txt # ADK tools documentation +└── README.md +``` diff --git a/contributing/samples/files_retrieval_agent/__init__.py b/contributing/samples/files_retrieval_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/files_retrieval_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/files_retrieval_agent/agent.py b/contributing/samples/files_retrieval_agent/agent.py new file mode 100644 index 0000000000..7b1209b8af --- /dev/null +++ b/contributing/samples/files_retrieval_agent/agent.py @@ -0,0 +1,54 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Sample agent using FilesRetrieval with gemini-embedding-2-preview. + +This agent indexes local text files and answers questions about them +using retrieval-augmented generation. + +Usage: + cd contributing/samples + adk run files_retrieval_agent + # or + adk web . +""" + +import os + +from google.adk.agents.llm_agent import Agent +from google.adk.tools.retrieval.files_retrieval import FilesRetrieval + +DATA_DIR = os.path.join(os.path.dirname(__file__), "data") + +files_retrieval = FilesRetrieval( + name="search_documents", + description=( + "Search through local ADK documentation files to find relevant" + " information. Use this tool when the user asks questions about ADK" + " features, architecture, or tools." + ), + input_dir=DATA_DIR, +) + +root_agent = Agent( + model="gemini-2.0-flash", + name="files_retrieval_agent", + instruction=( + "You are a helpful assistant that answers questions about the Agent" + " Development Kit (ADK). Use the search_documents tool to find" + " relevant information before answering. Always base your answers" + " on the retrieved documents." + ), + tools=[files_retrieval], +) diff --git a/contributing/samples/files_retrieval_agent/data/adk_overview.txt b/contributing/samples/files_retrieval_agent/data/adk_overview.txt new file mode 100644 index 0000000000..5e2f08e31a --- /dev/null +++ b/contributing/samples/files_retrieval_agent/data/adk_overview.txt @@ -0,0 +1,23 @@ +Agent Development Kit (ADK) Overview + +ADK is a Python framework for building AI agents powered by large language models. +It provides a structured way to create agents that can reason, use tools, and +collaborate with other agents. + +Key Features: +- Multi-agent orchestration with sequential, parallel, and loop patterns +- Built-in tool support including function tools, retrieval, and code execution +- Session management for maintaining conversation state +- Memory services for long-term recall across sessions +- Support for multiple LLM backends including Gemini, Anthropic, and Ollama + +Architecture: +The core abstractions are Agent, Runner, Tool, Session, and Memory. +The Runner orchestrates the reason-act loop, processing user turns and +streaming events back to the caller. + +Agent Types: +- LlmAgent: Main agent with LLM integration +- SequentialAgent: Runs sub-agents in sequence +- ParallelAgent: Runs sub-agents in parallel +- LoopAgent: Runs sub-agents in a loop diff --git a/contributing/samples/files_retrieval_agent/data/tools_guide.txt b/contributing/samples/files_retrieval_agent/data/tools_guide.txt new file mode 100644 index 0000000000..487e2f5e06 --- /dev/null +++ b/contributing/samples/files_retrieval_agent/data/tools_guide.txt @@ -0,0 +1,28 @@ +ADK Tools Guide + +Tools are capabilities that agents can invoke during their reasoning process. +ADK supports several types of tools: + +1. Function Tools + Define Python functions and pass them directly to an agent. + The function signature and docstring become the tool schema. + +2. Retrieval Tools + - FilesRetrieval: Index and search local files using embeddings. + Uses gemini-embedding-2-preview by default. + - VertexAiRagRetrieval: Search Vertex AI RAG corpora. + +3. Code Execution + Agents can generate and execute code in a sandboxed environment. + +4. Third-Party Tool Integration + - LangchainTool: Wraps LangChain tools for use in ADK. + - CrewaiTool: Wraps CrewAI tools for use in ADK. + +5. MCP Tools + Connect to Model Context Protocol servers for external tool access. + +Tool Configuration: +Tools can be configured with authentication, rate limiting, and custom +schemas. The ToolContext provides access to session state, artifacts, +and other contextual information during tool execution. diff --git a/contributing/samples/gepa/OWNERS b/contributing/samples/gepa/OWNERS deleted file mode 100644 index 36064e743f..0000000000 --- a/contributing/samples/gepa/OWNERS +++ /dev/null @@ -1,3 +0,0 @@ -aarg -jief -paulxz \ No newline at end of file diff --git a/contributing/samples/hello_world/main.py b/contributing/samples/hello_world/main.py index 0ffde91341..20305e5acc 100755 --- a/contributing/samples/hello_world/main.py +++ b/contributing/samples/hello_world/main.py @@ -48,8 +48,15 @@ async def run_prompt(session: Session, new_message: str): session_id=session.id, new_message=content, ): - if event.content.parts and event.content.parts[0].text: - print(f'** {event.author}: {event.content.parts[0].text}') + if event.content.parts: + for part in event.content.parts: + if part.text: + print(f'** {event.author}: {part.text}') + if part.function_call: + print( + f'** {event.author} calls tool: {part.function_call.name} with' + f' args {part.function_call.args}' + ) async def run_prompt_bytes(session: Session, new_message: str): content = types.Content( @@ -74,6 +81,7 @@ async def check_rolls_in_state(rolls_size: int): session = await runner.session_service.get_session( app_name=app_name, user_id=user_id_1, session_id=session_11.id ) + print('** session.state:', session.state) assert len(session.state['rolls']) == rolls_size for roll in session.state['rolls']: assert roll > 0 and roll <= 100 @@ -82,9 +90,9 @@ async def check_rolls_in_state(rolls_size: int): print('Start time:', start_time) print('------------------------------------') await run_prompt(session_11, 'Hi') - await run_prompt(session_11, 'Roll a die with 100 sides') + await run_prompt(session_11, 'Roll a dice with 100 sides') await check_rolls_in_state(1) - await run_prompt(session_11, 'Roll a die again with 100 sides.') + await run_prompt(session_11, 'Roll a dice again with 100 sides.') await check_rolls_in_state(2) await run_prompt(session_11, 'What numbers did I got?') await run_prompt_bytes(session_11, 'Hi bytes') diff --git a/contributing/samples/live_bidi_streaming_multi_agent/agent.py b/contributing/samples/live_bidi_streaming_multi_agent/agent.py index 312c043491..5c0dd5037a 100644 --- a/contributing/samples/live_bidi_streaming_multi_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_multi_agent/agent.py @@ -30,11 +30,10 @@ def roll_die(sides: int) -> int: roll_agent = Agent( name="roll_agent", model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( @@ -85,11 +84,10 @@ def check_prime(nums: list[int]) -> str: prime_agent = Agent( name="prime_agent", model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( @@ -128,13 +126,11 @@ def get_current_weather(location: str): root_agent = Agent( - # find supported models here: https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/ model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md b/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md new file mode 100644 index 0000000000..cc96819c38 --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md @@ -0,0 +1,38 @@ +# Simple Live (Bidi-Streaming) Agent with Parallel Tools +This project provides a basic example of a live, [bidirectional streaming](https://google.github.io/adk-docs/streaming/) agent that demonstrates parallel tool execution. + +## Getting Started + +Follow these steps to get the agent up and running: + +1. **Start the ADK Web Server** + Open your terminal, navigate to the root directory that contains the + `live_bidi_streaming_parallel_tools_agent` folder, and execute the following + command: + ```bash + adk web + ``` + +2. **Access the ADK Web UI** + Once the server is running, open your web browser and navigate to the URL + provided in the terminal (it will typically be `http://localhost:8000`). + +3. **Select the Agent** + In the top-left corner of the ADK Web UI, use the dropdown menu to select + this agent (`live_bidi_streaming_parallel_tools_agent`). + +4. **Start Streaming** + Click on the **Audio** icon located near the chat input + box to begin the streaming session. + +5. **Interact with the Agent** + You can now begin talking to the agent, and it will respond in real-time. + Try asking it to perform multiple actions at once, for example: "Turn on the + lights and the TV at the same time." The agent will be able to invoke both + `turn_on_lights` and `turn_on_tv` tools in parallel. + +## Usage Notes + +* You only need to click the **Audio** button once to initiate the + stream. The current version does not support stopping and restarting the stream + by clicking the button again during a session. diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py b/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py new file mode 100644 index 0000000000..46c7cfba09 --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py @@ -0,0 +1,39 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from google.adk.agents.llm_agent import Agent + + +def turn_on_lights(): + """Turn on the lights.""" + print("turn_on_lights") + return {"status": "OK"} + + +def turn_on_tv(): + """Turn on the tv.""" + print("turn_on_tv") + return {"status": "OK"} + + +root_agent = Agent( + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API + name="Home_helper", + instruction="Be polite and answer all user's questions.", + tools=[turn_on_lights, turn_on_tv], +) diff --git a/contributing/samples/live_bidi_streaming_single_agent/agent.py b/contributing/samples/live_bidi_streaming_single_agent/agent.py index f20c948641..447affa105 100755 --- a/contributing/samples/live_bidi_streaming_single_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_single_agent/agent.py @@ -65,11 +65,10 @@ async def check_prime(nums: list[int]) -> str: root_agent = Agent( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model='gemini-live-2.5-flash-native-audio', # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model='gemini-live-2.5-flash-native-audio', # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name='roll_dice_agent', description=( 'hello world agent that can roll a dice of 6 sides and check prime' diff --git a/contributing/samples/live_bidi_streaming_tools_agent/agent.py b/contributing/samples/live_bidi_streaming_tools_agent/agent.py index 57e2279e10..543870f949 100644 --- a/contributing/samples/live_bidi_streaming_tools_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_tools_agent/agent.py @@ -124,11 +124,10 @@ def stop_streaming(function_name: str): root_agent = Agent( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name="video_streaming_agent", instruction=""" You are a monitoring agent. You can do video monitoring and stock price monitoring diff --git a/contributing/samples/live_tool_callbacks_agent/agent.py b/contributing/samples/live_tool_callbacks_agent/agent.py index a140ac5a15..11a220138e 100644 --- a/contributing/samples/live_tool_callbacks_agent/agent.py +++ b/contributing/samples/live_tool_callbacks_agent/agent.py @@ -217,9 +217,10 @@ async def after_tool_async_callback( # Create the agent with tool callbacks root_agent = Agent( - # find supported models here: https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/ - model="gemini-2.0-flash-live-preview-04-09", # for Vertex project - # model="gemini-live-2.5-flash-preview", # for AI studio key + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name="tool_callbacks_agent", description=( "Live streaming agent that demonstrates tool callbacks functionality. " diff --git a/contributing/samples/local_environment/README.md b/contributing/samples/local_environment/README.md new file mode 100644 index 0000000000..f94c55c3e6 --- /dev/null +++ b/contributing/samples/local_environment/README.md @@ -0,0 +1,21 @@ +# Local Environment Sample + +This sample demonstrates how to use the `LocalEnvironment` with the `EnvironmentToolset` to allow an agent to interact with the local filesystem and execute commands. + +## Description + +The agent is configured with the `EnvironmentToolset`, which provides tools for file I/O (reading, writing) and command execution within a local environment. This allows the agent to perform tasks that involve creating files, modifying them, and running local scripts or commands. + +## Sample Usage + +You can interact with the agent by providing prompts that require file operations and command execution. + +### Example Prompt + +> "Write a Python file named `hello.py` to the working directory that prints 'Hello from ADK!'. Then read the file to verify its contents, and finally execute it using a command." + +### Expected Behavior + +1. **Write File**: The agent uses a tool to write `hello.py` with the content `print("Hello from ADK!")`. +2. **Read File**: The agent uses a tool to read `hello.py` and verify the content. +3. **Execute Command**: The agent uses a tool to run `python3 hello.py` and returns the output. diff --git a/contributing/samples/local_environment/__init__.py b/contributing/samples/local_environment/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/local_environment/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/local_environment/agent.py b/contributing/samples/local_environment/agent.py new file mode 100644 index 0000000000..0c33cc00f0 --- /dev/null +++ b/contributing/samples/local_environment/agent.py @@ -0,0 +1,34 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from google.adk import Agent +from google.adk.environment import LocalEnvironment +from google.adk.tools.environment import EnvironmentToolset + +root_agent = Agent( + model="gemini-2.5-pro", + name="local_environment_agent", + description="A simple agent that demonstrates local environment usage.", + instruction=""" + You are a helpful AI assistant that can use the local environment to + execute commands and file I/O. Follow the rules of the environment and the + user's instructions. + """, + tools=[ + EnvironmentToolset( + environment=LocalEnvironment(), + ), + ], +) diff --git a/contributing/samples/local_environment_skill/README.md b/contributing/samples/local_environment_skill/README.md new file mode 100644 index 0000000000..22ba2fa016 --- /dev/null +++ b/contributing/samples/local_environment_skill/README.md @@ -0,0 +1,24 @@ +# Local Environment Skill Sample + +This sample demonstrates how to use the `LocalEnvironment` with the `EnvironmentToolset` to allow an agent to manually discover and load skills from the environment, rather than using the pre-configured `SkillToolset`. + +## Description + +The agent is configured with the `EnvironmentToolset` and is initialized with a `LocalEnvironment` pointing to the agent's directory. +Instead of having skills pre-loaded, the agent uses system instructions that guide it to search for skills in the `skills/` folder and load them by reading their `SKILL.md` files using the `ReadFile` tool. + +This demonstrates a "manual skill loading" pattern where the agent can acquire new capabilities dynamically by reading instructions from the environment. + +## Sample Usage + +You can interact with the agent by providing prompts that require a specific skill (like weather). + +### Example Prompt + +> "Can you check the weather in Sunnyvale?" + +### Expected Behavior + +1. **Find Skill**: The agent uses the `Execute` tool to search for all available skills by running `find skills -name SKILL.md`. +2. **Load Skill**: The agent identifies the relevant skill and uses the `ReadFile` tool to read its `SKILL.md` file. +3. **Execute Skill**: The agent follows the instructions in the skill file (e.g., reading references or running scripts) to answer the user's request. diff --git a/contributing/samples/local_environment_skill/__init__.py b/contributing/samples/local_environment_skill/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/local_environment_skill/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/local_environment_skill/agent.py b/contributing/samples/local_environment_skill/agent.py new file mode 100644 index 0000000000..0ecd73be9a --- /dev/null +++ b/contributing/samples/local_environment_skill/agent.py @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import pathlib + +from google.adk import Agent +from google.adk.environment import LocalEnvironment +from google.adk.tools.environment import EnvironmentToolset + + +def get_wind_speed(location: str) -> str: + """Returns the current wind speed for a given location.""" + return f"The wind speed in {location} is 10 mph." + + +BASE_INSTRUCTION = ( + "You are a helpful AI assistant that can use the local environment to" + " execute commands and file I/O." +) + +SKILL_USAGE_INSTRUCTION = """\ +[SKILLS ACCESS] +You have access to specialized skills stored in the environment's `skills/` folder. +Each skill is a folder containing a `SKILL.md` file with instructions. + +[MANDATORY PROCEDURE] +Before declaring that you cannot perform a task or answer a question (especially for domain-specific queries like weather), you MUST: +1. Use the `Execute` tool to search for all available skills by running: `find skills -name SKILL.md` +2. Review the list of found skills to see if any are relevant to the user's request. +3. If a relevant skill is found, use the `ReadFile` tool to read its `SKILL.md` file. +4. Follow the instructions in that file to complete the request. + *CRITICAL NOTE ON PATHS:* All file and script paths mentioned inside a `SKILL.md` file (e.g., `references/...` or `scripts/...`) are RELATIVE to that specific skill's folder. You MUST resolve them by prepending the skill's folder path (e.g., if the skill is at `skills/weather-skill/`, you must read `skills/weather-skill/references/weather_info.md`). + +Failure to check the `skills/` directory before stating you cannot help is unacceptable.\ +""" + + +root_agent = Agent( + model="gemini-2.5-pro", + name="local_environment_skill_agent", + description=( + "An agent that uses local environment tools to load and use skills." + ), + instruction=f"{BASE_INSTRUCTION}\n\n{SKILL_USAGE_INSTRUCTION}", + tools=[ + EnvironmentToolset( + environment=LocalEnvironment( + working_dir=pathlib.Path(__file__).parent + ), + ), + get_wind_speed, + ], +) diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md b/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md new file mode 100644 index 0000000000..1c6a57accf --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md @@ -0,0 +1,9 @@ +--- +name: weather-skill +description: A skill that provides weather information based on reference data. +--- + +Step 1: Check 'references/weather_info.md' for the current weather. +Step 2: If humidity is requested, use run 'scripts/get_humidity.py' with the `location` argument. +Step 3: If wind speed is requested, use the `get_wind_speed` tool. +Step 4: Provide the update to the user. diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md b/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md new file mode 100644 index 0000000000..dc163470bc --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md @@ -0,0 +1,11 @@ +# Weather Information + +- **Location:** San Francisco, CA +- **Condition:** Sunny ☀️ +- **Temperature:** 72°F (22°C) +- **Forecast:** Clear skies all day. + +- **Location:** Sunnyvale, CA +- **Condition:** Sunny ☀️ +- **Temperature:** 75°F (24°C) +- **Forecast:** Warm and sunny. diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py b/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py new file mode 100644 index 0000000000..a2e1dc4701 --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py @@ -0,0 +1,29 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse + + +def get_humidity(location: str) -> str: + """Fetch live humidity for a given location. (Simulated)""" + print(f"Fetching live humidity for {location}...") + return "45% (Simulated)" + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--location", type=str, default="Mountain View") + args = parser.parse_args() + + print(get_humidity(args.location)) diff --git a/contributing/samples/sandbox_computer_use/__init__.py b/contributing/samples/sandbox_computer_use/__init__.py new file mode 100644 index 0000000000..c48963cdc7 --- /dev/null +++ b/contributing/samples/sandbox_computer_use/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/sandbox_computer_use/agent.py b/contributing/samples/sandbox_computer_use/agent.py new file mode 100644 index 0000000000..8cdb1f9e7e --- /dev/null +++ b/contributing/samples/sandbox_computer_use/agent.py @@ -0,0 +1,89 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Sample agent using Vertex AI Agent Engine Sandbox for computer use. + +This sample demonstrates how to use the AgentEngineSandboxComputer with ADK +to create a computer use agent that operates in a remote sandbox environment. + +Prerequisites: + 1. A GCP project with Agent Engine setup (https://docs.cloud.google.com/agent-builder/agent-engine/set-up) + 2. A service account with roles/iam.serviceAccountTokenCreator permission + 3. Environment variables in contributing/samples/.env: + - GOOGLE_CLOUD_PROJECT: Your GCP project ID + - VMAAS_SERVICE_ACCOUNT: Your service account email + - VMAAS_SANDBOX_NAME: (Optional) Existing sandbox resource name for BYOS mode + +Usage: + # Run via ADK web UI + adk web contributing/samples/sandbox_computer_use + + # Run via main.py + cd contributing/samples + python -m sandbox_computer_use.main +""" + +import os + +from dotenv import load_dotenv +from google.adk import Agent +from google.adk.integrations.vmaas import AgentEngineSandboxComputer +from google.adk.tools.computer_use.computer_use_toolset import ComputerUseToolset + +# Load environment variables from .env file +load_dotenv(override=True) + +# Configuration from environment variables +PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT") +SERVICE_ACCOUNT = os.environ.get("VMAAS_SERVICE_ACCOUNT") + +# Optional: Use existing sandbox (BYOS mode) +# Format: projects/{project}/locations/{location}/reasoningEngines/{id}/sandboxEnvironments/{id} +SANDBOX_NAME = os.environ.get("SANDBOX_NAME") or os.environ.get( + "VMAAS_SANDBOX_NAME" +) + +# Create the sandbox computer +sandbox_computer = AgentEngineSandboxComputer( + project_id=PROJECT_ID, + service_account_email=SERVICE_ACCOUNT, + sandbox_name=SANDBOX_NAME, + search_engine_url="https://www.google.com", +) + +# Create agent with the computer use toolset +root_agent = Agent( + model="gemini-2.5-computer-use-preview-10-2025", + name="sandbox_computer_use_agent", + description=( + "A computer use agent that operates a browser in a remote Vertex AI" + " sandbox environment to complete user tasks." + ), + instruction="""You are a computer use agent that can operate a web browser +to help users complete tasks. You have access to browser controls including: +- Navigation (go to URLs, back, forward, search) +- Mouse actions (click, hover, scroll, drag and drop) +- Keyboard input (type text, key combinations) +- Screenshots (to see the current state) + +When given a task: +1. Think about what steps are needed to accomplish it +2. Take actions one at a time, observing the results +3. If something doesn't work, try alternative approaches +4. Report back when the task is complete or if you encounter issues + +Be careful with sensitive information and always respect website terms of service. +""", + tools=[ComputerUseToolset(computer=sandbox_computer)], +) diff --git a/contributing/samples/sandbox_computer_use/main.py b/contributing/samples/sandbox_computer_use/main.py new file mode 100644 index 0000000000..1813adff46 --- /dev/null +++ b/contributing/samples/sandbox_computer_use/main.py @@ -0,0 +1,162 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Main script to run the sandbox computer use agent. + +This script demonstrates how to run the sandbox computer use agent +programmatically using the InMemoryRunner. + +Prerequisites: + 1. Set environment variables: + - GOOGLE_CLOUD_PROJECT: Your GCP project ID + - VMAAS_SERVICE_ACCOUNT: Your service account email with + roles/iam.serviceAccountTokenCreator permission + +Usage: + cd contributing/samples + python -m sandbox_computer_use.main +""" + +import asyncio +import os +import time + +from dotenv import load_dotenv +from google.adk.cli.utils import logs +from google.adk.runners import InMemoryRunner +from google.adk.sessions.session import Session +from google.genai import types + +# Import the agent module +from . import agent + +load_dotenv(override=True) +logs.log_to_tmp_folder() + + +async def run_prompt( + runner: InMemoryRunner, + session: Session, + user_id: str, + message: str, +) -> None: + """Run a single prompt and print the response. + + Args: + runner: The agent runner. + session: The session to use. + user_id: The user ID. + message: The user message. + """ + content = types.Content( + role="user", parts=[types.Part.from_text(text=message)] + ) + print(f"\n** User says: {message}") + print("-" * 40) + + async for event in runner.run_async( + user_id=user_id, + session_id=session.id, + new_message=content, + ): + if event.content and event.content.parts: + for part in event.content.parts: + if part.text: + print(f"** {event.author}: {part.text}") + elif hasattr(part, "inline_data") and part.inline_data: + # Screenshot received + print(f"** {event.author}: [Screenshot received]") + + +async def main(): + """Main function to run the sandbox computer use agent.""" + # Validate environment + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + service_account = os.environ.get("VMAAS_SERVICE_ACCOUNT") + + if not project_id: + print("ERROR: GOOGLE_CLOUD_PROJECT environment variable is not set.") + print("Please set it to your GCP project ID.") + return + + if not service_account: + print("ERROR: VMAAS_SERVICE_ACCOUNT environment variable is not set.") + print( + "Please set it to your service account email with" + " roles/iam.serviceAccountTokenCreator permission." + ) + return + + print("=" * 60) + print("Sandbox Computer Use Agent Demo") + print("=" * 60) + print(f"Project: {project_id}") + print(f"Service Account: {service_account}") + print("=" * 60) + + app_name = "sandbox_computer_use_demo" + user_id = "demo_user" + + # Create runner and session + runner = InMemoryRunner( + agent=agent.root_agent, + app_name=app_name, + ) + session = await runner.session_service.create_session( + app_name=app_name, user_id=user_id + ) + + print(f"\nSession created: {session.id}") + print("\nStarting agent interaction...") + + start_time = time.time() + + # Example interaction: Navigate and describe + await run_prompt( + runner, + session, + user_id, + "Navigate to https://www.google.com and tell me what you see.", + ) + + # Example interaction: Search for something + await run_prompt( + runner, + session, + user_id, + "Search for 'Vertex AI Agent Engine' and tell me the first result.", + ) + + end_time = time.time() + + print("\n" + "=" * 60) + print(f"Demo completed in {end_time - start_time:.2f} seconds") + print("=" * 60) + + # Print session state to show sandbox info + session = await runner.session_service.get_session( + app_name=app_name, user_id=user_id, session_id=session.id + ) + print("\nSession state (sandbox info):") + for key, value in session.state.items(): + if key.startswith("_vmaas_"): + # Mask token for security + if "token" in key.lower(): + print(f" {key}: [REDACTED]") + else: + print(f" {key}: {value}") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/contributing/samples/skills_agent/agent.py b/contributing/samples/skills_agent/agent.py index 6d5355db23..a42fa2583e 100644 --- a/contributing/samples/skills_agent/agent.py +++ b/contributing/samples/skills_agent/agent.py @@ -54,9 +54,9 @@ async def run_async(self, *, args: dict, tool_context) -> str: return f"The timezone for {args['location']} is UTC+00:00." -def get_current_humidity(location: str) -> str: - """Returns the current humidity for a given location.""" - return f"The humidity in {location} is 45%." +def get_wind_speed(location: str) -> str: + """Returns the current wind speed for a given location.""" + return f"The wind speed in {location} is 10 mph." greeting_skill = models.Skill( @@ -87,7 +87,7 @@ def get_current_humidity(location: str) -> str: # be used in production environments. my_skill_toolset = SkillToolset( skills=[greeting_skill, weather_skill], - additional_tools=[GetTimezoneTool(), get_current_humidity], + additional_tools=[GetTimezoneTool(), get_wind_speed], code_executor=UnsafeLocalCodeExecutor(), ) diff --git a/contributing/samples/skills_agent/skills/weather-skill/SKILL.md b/contributing/samples/skills_agent/skills/weather-skill/SKILL.md index 6893ef671e..0323c18bfb 100644 --- a/contributing/samples/skills_agent/skills/weather-skill/SKILL.md +++ b/contributing/samples/skills_agent/skills/weather-skill/SKILL.md @@ -1,8 +1,12 @@ --- name: weather-skill description: A skill that provides weather information based on reference data. +metadata: + adk_additional_tools: + - get_wind_speed --- Step 1: Check 'references/weather_info.md' for the current weather. Step 2: If humidity is requested, use run 'scripts/get_humidity.py' with the `location` argument. -Step 3: Provide the update to the user. +Step 3: If wind speed is requested, use the `get_wind_speed` tool. +Step 4: Provide the update to the user. diff --git a/contributing/samples/skills_agent/skills/weather_skill/SKILL.md b/contributing/samples/skills_agent/skills/weather_skill/SKILL.md deleted file mode 100644 index ea79220a38..0000000000 --- a/contributing/samples/skills_agent/skills/weather_skill/SKILL.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: weather-skill -description: A skill that provides weather information based on reference data. -metadata: - adk_additional_tools: - - get_current_humidity ---- - -Step 1: Check 'references/weather_info.md' for the current weather. -Step 2: Provide the weather update to the user. diff --git a/contributing/samples/slack_agent/agent.py b/contributing/samples/slack_agent/agent.py new file mode 100644 index 0000000000..45d20e8db6 --- /dev/null +++ b/contributing/samples/slack_agent/agent.py @@ -0,0 +1,61 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import os + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.integrations.slack import SlackRunner +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from slack_bolt.app.async_app import AsyncApp + + +async def main(): + # 1. Setup your ADK agent + agent = LlmAgent( + name="slack_agent", + instruction=( + "You are a helpful Slack bot powered by Google ADK. Be concise and" + " friendly." + ), + ) + + # 2. Setup ADK Runner + runner = Runner( + agent=agent, + app_name="slack_app", + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 3. Setup Slack Bolt App + # Ensure you have SLACK_BOT_TOKEN and SLACK_APP_TOKEN in your environment + slack_app = AsyncApp(token=os.environ.get("SLACK_BOT_TOKEN")) + + # 4. Initialize SlackRunner + slack_runner = SlackRunner(runner=runner, slack_app=slack_app) + + # 5. Start the Slack bot (using Socket Mode) + app_token = os.environ.get("SLACK_APP_TOKEN") + if not app_token: + print("SLACK_APP_TOKEN not found. Please set it for Socket Mode.") + return + + print("Starting Slack bot...") + await slack_runner.start(app_token=app_token) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/contributing/samples/spanner_admin/README.md b/contributing/samples/spanner_admin/README.md new file mode 100644 index 0000000000..eadfd1fe25 --- /dev/null +++ b/contributing/samples/spanner_admin/README.md @@ -0,0 +1,116 @@ +# Spanner Admin Tools Sample + +## Introduction + +This sample agent demonstrates the Spanner first-party tools in ADK, +distributed via the `google.adk.tools.spanner` module. These tools include: + +1. `list_instances` + + Fetches Spanner instance names present in a project. + +1. `get_instance` + + Fetches details of a given Spanner instance. + +1. `create_database` + + Creates a Spanner database within a given instance and project. + +1. `list_databases` + + Fetches Spanner database names present in an instance. + +1. `create_instance` + + Creates a Spanner instance within a GCP project. + +1. `list_instance_configs` + + Fetches Spanner instance configurations available for a project. + +1. `get_instance_config` + + Fetches details of a Spanner instance configuration. + +## How to use + +Set up environment variables in your `.env` file for using +[Google AI Studio](https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-ai-studio) +or +[Google Cloud Vertex AI](https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai) +for the LLM service for your agent. For example, for using Google AI Studio you +would set: + +* GOOGLE_GENAI_USE_VERTEXAI=FALSE +* GOOGLE_API_KEY={your api key} + +### With Application Default Credentials + +This mode is useful for quick development when the agent builder is the only +user interacting with the agent. The tools are run with these credentials. + +1. Create application default credentials on the machine where the agent would +be running by following https://cloud.google.com/docs/authentication/provide-credentials-adc. + +1. Set `CREDENTIALS_TYPE=None` in `agent.py` + +1. Run the agent + +### With Service Account Keys + +This mode is useful for quick development when the agent builder wants to run +the agent with service account credentials. The tools are run with these +credentials. + +1. Create service account key by following https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys. + +1. Set `CREDENTIALS_TYPE=AuthCredentialTypes.SERVICE_ACCOUNT` in `agent.py` + +1. Download the key file and replace `"service_account_key.json"` with the path + +1. Run the agent + +### With Interactive OAuth + +1. Follow +https://developers.google.com/identity/protocols/oauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name. +to get your client id and client secret. Be sure to choose "web" as your client +type. + +1. Follow https://developers.google.com/workspace/guides/configure-oauth-consent + to add scope "https://www.googleapis.com/auth/spanner.data" and + "https://www.googleapis.com/auth/spanner.admin" as declaration, this is used + for review purpose. + +1. Follow + https://developers.google.com/identity/protocols/oauth2/web-server#creatingcred + to add http://localhost/dev-ui/ to "Authorized redirect URIs". + + Note: localhost here is just a hostname that you use to access the dev ui, + replace it with the actual hostname you use to access the dev ui. + +1. For 1st run, allow popup for localhost in Chrome. + +1. Configure your `.env` file to add two more variables before running the + agent: + + * OAUTH_CLIENT_ID={your client id} + * OAUTH_CLIENT_SECRET={your client secret} + + Note: don't create a separate .env, instead put it to the same .env file that + stores your Vertex AI or Dev ML credentials + +1. Set `CREDENTIALS_TYPE=AuthCredentialTypes.OAUTH2` in `agent.py` and run the + agent + +## Sample prompts + +* Show me all Spanner instances in my project. +* Give me details about the 'my-instance' Spanner instance. +* List all databases in instance 'my-instance'. +* Create a new Spanner database named 'my-db' in instance 'my-instance'. +* List all instance configurations available for my project. +* Get details about 'regional-us-central1' configuration. +* Create a Spanner instance 'new-instance' with 'regional-us-central1' config and name 'new-instance'. + diff --git a/contributing/samples/spanner_admin/__init__.py b/contributing/samples/spanner_admin/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/spanner_admin/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/spanner_admin/agent.py b/contributing/samples/spanner_admin/agent.py new file mode 100644 index 0000000000..6129207e87 --- /dev/null +++ b/contributing/samples/spanner_admin/agent.py @@ -0,0 +1,77 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.tools.spanner.admin_toolset import SpannerAdminToolset +from google.adk.tools.spanner.spanner_credentials import SpannerCredentialsConfig +import google.auth + +# Define an appropriate credential type +# Set to None to use the application default credentials (ADC) for a quick +# development. +CREDENTIALS_TYPE = None + +if CREDENTIALS_TYPE == AuthCredentialTypes.OAUTH2: + # Initialize the tools to do interactive OAuth + # The environment variables OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET + # must be set + credentials_config = SpannerCredentialsConfig( + client_id=os.getenv("OAUTH_CLIENT_ID"), + client_secret=os.getenv("OAUTH_CLIENT_SECRET"), + scopes=[ + "https://www.googleapis.com/auth/spanner.admin", + "https://www.googleapis.com/auth/spanner.data", + ], + ) +elif CREDENTIALS_TYPE == AuthCredentialTypes.SERVICE_ACCOUNT: + # Initialize the tools to use the credentials in the service account key. + # If this flow is enabled, make sure to replace the file path with your own + # service account key file + # https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys + creds, _ = google.auth.load_credentials_from_file("service_account_key.json") + credentials_config = SpannerCredentialsConfig(credentials=creds) +else: + # Initialize the tools to use the application default credentials. + # https://cloud.google.com/docs/authentication/provide-credentials-adc + application_default_credentials, _ = google.auth.default() + credentials_config = SpannerCredentialsConfig( + credentials=application_default_credentials + ) + +spanner_admin_toolset = SpannerAdminToolset( + credentials_config=credentials_config, +) + +# The variable name `root_agent` determines what your root agent is for the +# debug CLI +root_agent = LlmAgent( + model="gemini-2.5-flash", + name="spanner_admin_agent", + description=( + "Agent to perform Spanner admin tasks and answer questions about" + " Spanner databases." + ), + instruction="""\ + You are a Spanner admin agent with access to several Spanner admin tools. + Make use of those tools to answer user's questions and perform admin + tasks like listing instances or databases. + """, + tools=[ + # Use tools from Spanner admin toolset. + spanner_admin_toolset, + ], +) diff --git a/contributing/samples/toolbox_agent/README.md b/contributing/samples/toolbox_agent/README.md index 0e6deac74d..50ad72f27b 100644 --- a/contributing/samples/toolbox_agent/README.md +++ b/contributing/samples/toolbox_agent/README.md @@ -1,6 +1,6 @@ # Toolbox Agent -This agent utilizes [MCP toolbox for database](https://googleapis.github.io/genai-toolbox/getting-started/introduction/) to assist end users based on information stored in a database. +This agent utilizes [MCP toolbox for database](https://mcp-toolbox.dev) to assist end users based on information stored in a database. Follow the steps below to run this agent. @@ -15,11 +15,11 @@ Before starting, ensure you have Python installed on your system. Run the following command to download and install the MCP Toolbox binary. > [!NOTE] -> You can find the latest version on the [Releases page](https://github.com/googleapis/genai-toolbox/releases) and update the version in the URL below. +> You can find the latest version on the [Releases page](https://github.com/googleapis/mcp-toolbox/releases) and update the version in the URL below. ```bash export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64 -curl -O https://storage.googleapis.com/genai-toolbox/v0.28.0/$OS/toolbox +curl -O https://storage.googleapis.com/mcp-toolbox-for-databases/v1.1.0/$OS/toolbox chmod +x toolbox ``` diff --git a/llms-full.txt b/llms-full.txt index 1ea50993fc..11cfb9b309 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -9378,7 +9378,7 @@ and design patterns that help you use ADK together with MCP servers, including: ## MCP Toolbox for Databases -[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an +[MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox) is an open source MCP server that helps you build Gen AI tools so that your agents can access data in your database. Google’s Agent Development Kit (ADK) has built in support for The MCP Toolbox for Databases. @@ -15733,7 +15733,7 @@ workflow as a tool for your agent or create a new one. ## Toolbox Tools for Databases -[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an +[MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox) is an open source MCP server for databases. It was designed with enterprise-grade and production-quality in mind. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, @@ -15741,10 +15741,10 @@ authentication, and more. Google’s Agent Development Kit (ADK) has built in support for Toolbox. For more information on -[getting started](https://googleapis.github.io/genai-toolbox/getting-started) or -[configuring](https://googleapis.github.io/genai-toolbox/getting-started/configure/) +[getting started](https://mcp-toolbox.dev/documentation/introduction/#getting-started) or +[configuring](https://mcp-toolbox.dev/documentation/configuration/) Toolbox, see the -[documentation](https://googleapis.github.io/genai-toolbox/getting-started/introduction/). +[documentation](https://mcp-toolbox.dev/documentation/introduction/). ![GenAI Toolbox](../assets/mcp_db_toolbox.png) @@ -15754,8 +15754,8 @@ Toolbox is an open source server that you deploy and manage yourself. For more instructions on deploying and configuring, see the official Toolbox documentation: -* [Installing the Server](https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server) -* [Configuring Toolbox](https://googleapis.github.io/genai-toolbox/getting-started/configure/) +* [Installing the Server](https://mcp-toolbox.dev/documentation/introduction/#getting-started) +* [Configuring Toolbox](https://mcp-toolbox.dev/documentation/configuration/) ### Install client SDK @@ -15794,9 +15794,9 @@ root_agent = Agent( Toolbox has a variety of features to make developing Gen AI tools for databases. For more information, read more about the following features: -* [Authenticated Parameters](https://googleapis.github.io/genai-toolbox/resources/tools/#authenticated-parameters): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data -* [Authorized Invocations:](https://googleapis.github.io/genai-toolbox/resources/tools/#authorized-invocations) restrict access to use a tool based on the users Auth token -* [OpenTelemetry](https://googleapis.github.io/genai-toolbox/how-to/export_telemetry/): get metrics and tracing from Toolbox with OpenTelemetry +* [Authenticated Parameters](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#parameter-binding): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data +* [Authorized Invocations:](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#client-to-server-authentication) restrict access to use a tool based on the users Auth token +* [OpenTelemetry](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#opentelemetry): get metrics and tracing from Toolbox with OpenTelemetry # Tools diff --git a/pyproject.toml b/pyproject.toml index 4bd800131d..5815b971f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "fastapi>=0.124.1, <1.0.0", # FastAPI framework "google-api-python-client>=2.157.0, <3.0.0", # Google API client discovery "google-auth[pyopenssl]>=2.47.0", # Google Auth library - "google-cloud-aiplatform[agent_engines]>=1.132.0, <2.0.0", # For VertexAI integrations, e.g. example store. + "google-cloud-aiplatform[agent_engines]>=1.148.0, <2.0.0", # For VertexAI integrations, e.g. example store. "google-cloud-bigquery-storage>=2.0.0", "google-cloud-bigquery>=2.2.0", "google-cloud-bigtable>=2.32.0", # For Bigtable database @@ -44,11 +44,11 @@ dependencies = [ "google-cloud-spanner>=3.56.0, <4.0.0", # For Spanner database "google-cloud-speech>=2.30.0, <3.0.0", # For Audio Transcription "google-cloud-storage>=2.18.0, <4.0.0", # For GCS Artifact service - "google-genai>=1.56.0, <2.0.0", # Google GenAI SDK + "google-genai>=1.72.0, <2.0.0", # Google GenAI SDK "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation - "mcp>=1.23.0, <2.0.0", # For MCP Toolset + "mcp>=1.24.0, <2.0.0", # For MCP Toolset "opentelemetry-api>=1.36.0, <1.39.0", # OpenTelemetry - keep below 1.39.0 due to current agent_engines exporter constraints. "opentelemetry-exporter-gcp-logging>=1.9.0a0, <2.0.0", "opentelemetry-exporter-gcp-monitoring>=1.9.0a0, <2.0.0", @@ -111,7 +111,7 @@ eval = [ # go/keep-sorted start "Jinja2>=3.1.4,<4.0.0", # For eval template rendering "gepa>=0.1.0", - "google-cloud-aiplatform[evaluation]>=1.100.0", + "google-cloud-aiplatform[evaluation]>=1.148.0", "pandas>=2.2.3", "rouge-score>=0.1.2", "tabulate>=0.9.0", @@ -123,10 +123,13 @@ test = [ "a2a-sdk>=0.3.0,<0.4.0", "anthropic>=0.43.0", # For anthropic model tests "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool tests; chromadb/pypika fail on 3.12+ + "google-cloud-firestore>=2.11.0, <3.0.0", + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", + "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent - "litellm>=1.75.5, <2.0.0", # For LiteLLM tests + "litellm>=1.75.5, <=1.82.6", # For LiteLLM tests. Upper bound pinned: versions 1.82.7+ compromised in supply chain attack. "llama-index-readers-file>=0.4.0", # For retrieval tests "openai>=1.100.2", # For LiteLLM "opentelemetry-instrumentation-google-genai>=0.3b0, <1.0.0", @@ -137,6 +140,7 @@ test = [ "pytest>=9.0.0,<10.0.0", "python-multipart>=0.0.9", "rouge-score>=0.1.2", + "slack-bolt>=1.22.0", "tabulate>=0.9.0", # go/keep-sorted end ] @@ -156,20 +160,28 @@ extensions = [ "beautifulsoup4>=3.2.2", # For load_web_page tool. "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool; chromadb/pypika fail on 3.12+ "docker>=7.0.0", # For ContainerCodeExecutor + "google-cloud-firestore>=2.11.0, <3.0.0", # For Firestore services + "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor - "k8s-agent-sandbox>=0.1.1.post2", # For GkeCodeExecutor sandbox mode + "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent - "litellm>=1.75.5, <2.0.0", # For LiteLlm class. Currently has OpenAI limitations. TODO: once LiteLlm fix it + "litellm>=1.75.5, <=1.82.6", # For LiteLlm class. Upper bound pinned: versions 1.82.7+ compromised in supply chain attack. "llama-index-readers-file>=0.4.0", # For retrieval using LlamaIndex. "llama-index-embeddings-google-genai>=0.3.0", # For files retrieval using LlamaIndex. "lxml>=5.3.0", # For load_web_page tool. "pypika>=0.50.0", # For crewai->chromadb dependency - "toolbox-adk>=0.7.0, <0.8.0", # For tools.toolbox_toolset.ToolboxToolset + "toolbox-adk>=1.0.0, <2.0.0", # For tools.toolbox_toolset.ToolboxToolset ] otel-gcp = ["opentelemetry-instrumentation-google-genai>=0.6b0, <1.0.0"] -toolbox = ["toolbox-adk>=0.7.0, <0.8.0"] +toolbox = ["toolbox-adk>=1.0.0, <2.0.0"] + +slack = ["slack-bolt>=1.22.0"] + +agent-identity = [ + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", +] [tool.pyink] # Format py files following Google style-guide diff --git a/scripts/unittests.sh b/scripts/unittests.sh index b4892c290c..eb9805f698 100755 --- a/scripts/unittests.sh +++ b/scripts/unittests.sh @@ -16,7 +16,7 @@ # Runs all unit tests for adk codebase. Sets up test environment according to # CONTRIBUTING.md. -# Usage: ./unittests.sh [--version ] +# Usage: ./unittests.sh [--version ] [pytest_args] set -euo pipefail @@ -27,25 +27,33 @@ cd .. # Argument Parsing ALL_VERSIONS=("3.10" "3.11" "3.12" "3.13" "3.14") versions_to_run=() +PYTEST_ARGS=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --version) + if [[ -z "${2:-}" ]]; then + echo "Error: Missing version for --version flag." >&2 + echo "Usage: $0 [--version ] [pytest_args]" >&2 + exit 1 + fi + # Validate version + if ! [[ " ${ALL_VERSIONS[*]} " =~ " $2 " ]]; then + echo "Error: Invalid version '$2'. Supported versions: ${ALL_VERSIONS[*]}" >&2 + exit 1 + fi + versions_to_run=("$2") + shift 2 + ;; + *) + PYTEST_ARGS+=("$1") + shift + ;; + esac +done -if [[ $# -eq 0 ]]; then +if [[ ${#versions_to_run[@]} -eq 0 ]]; then versions_to_run=("${ALL_VERSIONS[@]}") -elif [[ "$1" == "--version" ]]; then - if [[ -z "${2:-}" ]]; then - echo "Error: Missing version for --version flag." >&2 - echo "Usage: $0 --version " >&2 - exit 1 - fi - # Validate version - if ! [[ " ${ALL_VERSIONS[*]} " =~ " $2 " ]]; then - echo "Error: Invalid version '$2'. Supported versions: ${ALL_VERSIONS[*]}" >&2 - exit 1 - fi - versions_to_run=("$2") -else - echo "Error: Unknown argument '$1'." >&2 - echo "Usage: $0 [--version ]" >&2 - exit 1 fi @@ -58,10 +66,9 @@ restore_venv() { deactivate fi - if [[ -d ".unittest_venv" ]]; then - echo "Cleaning up .unittest_venv..." - rm -rf .unittest_venv - fi + echo "Cleaning up temporary directories..." + [[ -n "${VENV_DIR:-}" ]] && rm -rf "$VENV_DIR" + [[ -n "${UV_CACHE_DIR:-}" ]] && rm -rf "$UV_CACHE_DIR" if [[ -n "$ORIGINAL_VENV" ]]; then echo "Reactivating pre-existing venv: $ORIGINAL_VENV" @@ -72,6 +79,15 @@ restore_venv() { # Ensure the environment is restored when the script exits. trap restore_venv EXIT +# Temporary directory for the virtual environment. +VENV_DIR=$(mktemp -d "${TMPDIR:-/tmp}/unittest_venv.XXXXXX") + +# Move uv cache to temp to prevent workspace bloat and IDE performance issues. +export UV_CACHE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/uv_cache.XXXXXX") + +# Force 'copy' mode; hardlinks (uv default) fail on many virtual filesystems. +export UV_LINK_MODE=copy + # 1. deactivate the current venv if [[ -n "${VIRTUAL_ENV:-}" ]]; then echo "Deactivating current venv: $VIRTUAL_ENV" @@ -88,18 +104,27 @@ for version in "${versions_to_run[@]}"; do echo "==================================================" # 2. create a unittest_venv just for unit tests - echo "Creating/Using unittest_venv for python${version} in .unittest_venv..." - uv venv --python "${version}" .unittest_venv --clear - source .unittest_venv/bin/activate + echo "Creating/Using unittest_venv for python${version} in $VENV_DIR..." + uv venv --python "${version}" "$VENV_DIR" --clear + source "$VENV_DIR/bin/activate" # 3. perform the unit tests - echo "Setting up test environment in .unittest_venv..." - uv sync --extra test --active + echo "Setting up test environment in $VENV_DIR..." + uv sync --extra test --active --frozen + + # Determine if PYTEST_ARGS contains explicit test targets (e.g. file, dir, or node ID) + HAS_TEST_TARGET=false + for arg in "${PYTEST_ARGS[@]:-}"; do + [[ "$arg" == *.py || -d "$arg" || "$arg" == *::* ]] && HAS_TEST_TARGET=true && break + done echo "Running unit tests..." TEST_EXIT_CODE=0 - pytest ./tests/unittests || TEST_EXIT_CODE=$? - + if [[ "$HAS_TEST_TARGET" == true ]]; then + pytest "${PYTEST_ARGS[@]}" || TEST_EXIT_CODE=$? + else + pytest ./tests/unittests "${PYTEST_ARGS[@]:-}" || TEST_EXIT_CODE=$? + fi # 4. report the unit tests status as is if [[ $TEST_EXIT_CODE -ne 0 ]]; then echo "" diff --git a/src/google/adk/a2a/agent/config.py b/src/google/adk/a2a/agent/config.py index 9898436253..a9e1149558 100644 --- a/src/google/adk/a2a/agent/config.py +++ b/src/google/adk/a2a/agent/config.py @@ -16,6 +16,7 @@ from __future__ import annotations +import copy from typing import Any from typing import Awaitable from typing import Callable @@ -108,3 +109,16 @@ class A2aRemoteAgentConfig(BaseModel): ) request_interceptors: Optional[list[RequestInterceptor]] = None + + def __deepcopy__(self, memo): + cls = self.__class__ + copied_values = {} + for k, v in self.__dict__.items(): + if not k.startswith('_'): + if callable(v): + copied_values[k] = v + else: + copied_values[k] = copy.deepcopy(v, memo) + result = cls.model_construct(**copied_values) + memo[id(self)] = result + return result diff --git a/tests/unittests/tools/agent_simulator/__init__.py b/src/google/adk/a2a/agent/interceptors/__init__.py similarity index 100% rename from tests/unittests/tools/agent_simulator/__init__.py rename to src/google/adk/a2a/agent/interceptors/__init__.py diff --git a/src/google/adk/a2a/agent/interceptors/new_integration_extension.py b/src/google/adk/a2a/agent/interceptors/new_integration_extension.py new file mode 100644 index 0000000000..e98667156f --- /dev/null +++ b/src/google/adk/a2a/agent/interceptors/new_integration_extension.py @@ -0,0 +1,56 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Interceptor that injects the new agent version extension.""" + +from __future__ import annotations + +from typing import Union + +from a2a.client.middleware import ClientCallContext +from a2a.extensions.common import HTTP_EXTENSION_HEADER +from a2a.types import Message as A2AMessage +from google.adk.a2a.agent.config import ParametersConfig +from google.adk.a2a.agent.config import RequestInterceptor +from google.adk.agents.invocation_context import InvocationContext +from google.adk.events.event import Event + +_NEW_A2A_ADK_INTEGRATION_EXTENSION = ( + 'https://google.github.io/adk-docs/a2a/a2a-extension/' +) + + +async def _before_request( + _: InvocationContext, + a2a_request: A2AMessage, + params: ParametersConfig, +) -> tuple[Union[A2AMessage, Event], ParametersConfig]: + """Adds A2A_new_agent_version to client_call_context.""" + if params.client_call_context is None: + params.client_call_context = ClientCallContext() + + http_kwargs = params.client_call_context.state.get('http_kwargs', {}) + headers = http_kwargs.get('headers', {}) + a2a_extensions = headers.get(HTTP_EXTENSION_HEADER, '').split(',') + a2a_extensions = [ext for ext in a2a_extensions if ext] + if _NEW_A2A_ADK_INTEGRATION_EXTENSION not in a2a_extensions: + a2a_extensions.append(_NEW_A2A_ADK_INTEGRATION_EXTENSION) + headers[HTTP_EXTENSION_HEADER] = ','.join(a2a_extensions) + http_kwargs['headers'] = headers + params.client_call_context.state['http_kwargs'] = http_kwargs + return a2a_request, params + + +_new_integration_extension_interceptor = RequestInterceptor( + before_request=_before_request +) diff --git a/src/google/adk/a2a/converters/from_adk_event.py b/src/google/adk/a2a/converters/from_adk_event.py index 05bf16d167..d64c1940fa 100644 --- a/src/google/adk/a2a/converters/from_adk_event.py +++ b/src/google/adk/a2a/converters/from_adk_event.py @@ -218,6 +218,23 @@ def convert_event_to_a2a_events( ), ) ) + elif _serialize_value(event.actions) is not None: + a2a_events.append( + TaskStatusUpdateEvent( + task_id=task_id, + context_id=context_id, + status=TaskStatus( + state=TaskState.working, + message=Message( + message_id=str(uuid.uuid4()), + role=Role.agent, + parts=[], + ), + timestamp=datetime.now(timezone.utc).isoformat(), + ), + final=False, + ) + ) a2a_events = _add_event_metadata(event, a2a_events) return a2a_events @@ -280,7 +297,10 @@ def _add_event_metadata( metadata[_get_adk_metadata_key(field_name)] = value for a2a_event in a2a_events: - if isinstance(a2a_event, TaskStatusUpdateEvent): + if ( + isinstance(a2a_event, TaskStatusUpdateEvent) + and a2a_event.status.message + ): a2a_event.status.message.metadata = metadata.copy() elif isinstance(a2a_event, TaskArtifactUpdateEvent): a2a_event.artifact.metadata = metadata.copy() diff --git a/src/google/adk/a2a/converters/long_running_functions.py b/src/google/adk/a2a/converters/long_running_functions.py index 0bbb46daf5..6c620be714 100644 --- a/src/google/adk/a2a/converters/long_running_functions.py +++ b/src/google/adk/a2a/converters/long_running_functions.py @@ -74,7 +74,10 @@ def process_event(self, event: Event) -> Event: for part in event.content.parts: should_remove = False if part.function_call: - if part.function_call.id in event.long_running_tool_ids: + if ( + event.long_running_tool_ids + and part.function_call.id in event.long_running_tool_ids + ): if not event.partial: self._parts.append(part) self._long_running_tool_ids.add(part.function_call.id) diff --git a/src/google/adk/a2a/converters/to_adk_event.py b/src/google/adk/a2a/converters/to_adk_event.py index 66d7768ec8..26ae95e1b4 100644 --- a/src/google/adk/a2a/converters/to_adk_event.py +++ b/src/google/adk/a2a/converters/to_adk_event.py @@ -15,6 +15,7 @@ from __future__ import annotations from collections.abc import Callable +import json import logging from typing import Any from typing import List @@ -28,9 +29,11 @@ from a2a.types import TaskState from a2a.types import TaskStatusUpdateEvent from google.genai import types as genai_types +from pydantic import ValidationError from ...agents.invocation_context import InvocationContext from ...events.event import Event +from ...events.event_actions import EventActions from ..experimental import a2a_experimental from .part_converter import A2A_DATA_PART_METADATA_IS_LONG_RUNNING_KEY from .part_converter import A2APartToGenAIPartConverter @@ -171,11 +174,15 @@ def _create_event( output_parts: List[genai_types.Part], invocation_context: Optional[InvocationContext], author: Optional[str], + actions: Optional[EventActions] = None, long_running_function_ids: Optional[set[str]] = None, partial: bool = False, ) -> Optional[Event]: """Creates an ADK event from parts and metadata.""" - if not output_parts: + event_actions = actions or EventActions() + if not output_parts and not event_actions.model_dump( + exclude_none=True, exclude_defaults=True + ): return None event = Event( @@ -186,12 +193,17 @@ def _create_event( ), author=author or "a2a agent", branch=invocation_context.branch if invocation_context else None, + actions=event_actions, long_running_tool_ids=( long_running_function_ids if long_running_function_ids else None ), - content=genai_types.Content( - role="model", - parts=output_parts, + content=( + genai_types.Content( + role="model", + parts=output_parts, + ) + if output_parts + else None ), partial=partial, ) @@ -199,6 +211,71 @@ def _create_event( return event +def _parse_adk_metadata_value(value: Any) -> Any: + """Parses ADK metadata values serialized through A2A.""" + if not isinstance(value, str): + return value + + try: + return json.loads(value) + except json.JSONDecodeError: + return value + + +def _extract_event_actions( + metadata: Optional[dict[str, Any]], +) -> EventActions: + """Extracts ADK event actions from A2A metadata.""" + if not metadata: + return EventActions() + + raw_actions = metadata.get(_get_adk_metadata_key("actions")) + if raw_actions is None: + return EventActions() + + parsed_actions = _parse_adk_metadata_value(raw_actions) + if not isinstance(parsed_actions, dict): + logger.warning( + "Ignoring invalid ADK actions metadata of type %s", + type(parsed_actions).__name__, + ) + return EventActions() + + try: + return EventActions.model_validate(parsed_actions) + except ValidationError as error: + logger.warning("Ignoring invalid ADK actions metadata: %s", error) + return EventActions() + + +def _merge_top_level_dicts( + base: dict[str, Any], new_values: dict[str, Any] +) -> dict[str, Any]: + """Merges dictionaries while preserving top-level overwrite semantics.""" + merged = dict(base) + for key, value in new_values.items(): + if ( + key in merged + and isinstance(merged[key], dict) + and isinstance(value, dict) + ): + merged[key] = {**merged[key], **value} + else: + merged[key] = value + return merged + + +def _merge_event_actions( + existing_actions: EventActions, new_actions: EventActions +) -> EventActions: + """Merges action metadata from multiple A2A sources.""" + merged_actions_data = _merge_top_level_dicts( + existing_actions.model_dump(exclude_none=True, by_alias=True), + new_actions.model_dump(exclude_none=True, by_alias=True), + ) + return EventActions.model_validate(merged_actions_data) + + @a2a_experimental def convert_a2a_task_to_event( a2a_task: Task, @@ -226,12 +303,17 @@ def convert_a2a_task_to_event( raise ValueError("A2A task cannot be None") try: + event_actions = EventActions() output_parts = [] long_running_function_ids = set() if a2a_task.artifacts: artifact_parts = [ part for artifact in a2a_task.artifacts for part in artifact.parts ] + for artifact in a2a_task.artifacts: + event_actions = _merge_event_actions( + event_actions, _extract_event_actions(artifact.metadata) + ) output_parts, _ = _convert_a2a_parts_to_adk_parts( artifact_parts, part_converter ) @@ -239,6 +321,10 @@ def convert_a2a_task_to_event( a2a_task.status.message and a2a_task.status.state == TaskState.input_required ): + event_actions = _merge_event_actions( + event_actions, + _extract_event_actions(a2a_task.status.message.metadata), + ) parts, ids = _convert_a2a_parts_to_adk_parts( a2a_task.status.message.parts, part_converter ) @@ -249,6 +335,7 @@ def convert_a2a_task_to_event( output_parts, invocation_context, author, + event_actions, long_running_function_ids, ) @@ -288,7 +375,12 @@ def convert_a2a_message_to_event( output_parts, _ = _convert_a2a_parts_to_adk_parts( a2a_message.parts, part_converter ) - return _create_event(output_parts, invocation_context, author) + return _create_event( + output_parts, + invocation_context, + author, + _extract_event_actions(a2a_message.metadata), + ) except Exception as e: logger.error("Failed to convert A2A message to event: %s", e) @@ -319,7 +411,11 @@ def convert_a2a_status_update_to_event( try: output_parts = [] long_running_function_ids = set() + event_actions = EventActions() if a2a_status_update.status.message: + event_actions = _extract_event_actions( + a2a_status_update.status.message.metadata + ) parts, ids = _convert_a2a_parts_to_adk_parts( a2a_status_update.status.message.parts, part_converter ) @@ -330,6 +426,7 @@ def convert_a2a_status_update_to_event( output_parts, invocation_context, author, + event_actions, long_running_function_ids, ) except Exception as e: @@ -367,6 +464,7 @@ def convert_a2a_artifact_update_to_event( output_parts, invocation_context, author, + _extract_event_actions(a2a_artifact_update.artifact.metadata), partial=not a2a_artifact_update.last_chunk, ) except Exception as e: diff --git a/src/google/adk/a2a/executor/a2a_agent_executor.py b/src/google/adk/a2a/executor/a2a_agent_executor.py index f2f9852ab6..a9b55f526e 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor.py @@ -39,6 +39,7 @@ from typing_extensions import override from ...utils.context_utils import Aclosing +from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION from ..converters.request_converter import AgentRunRequest from ..converters.utils import _get_adk_metadata_key from ..experimental import a2a_experimental @@ -62,7 +63,9 @@ class A2aAgentExecutor(AgentExecutor): Args: runner: The runner to use for the agent. config: The config to use for the executor. - use_legacy: Whether to use the legacy executor implementation. + use_legacy: If true, force the legacy implementation. + force_new_version: If true, force the new implementation regardless of the + extension. """ def __init__( @@ -70,15 +73,15 @@ def __init__( *, runner: Runner | Callable[..., Runner | Awaitable[Runner]], config: Optional[A2aAgentExecutorConfig] = None, - use_legacy: bool = True, + use_legacy: bool = False, + force_new_version: bool = False, ): super().__init__() - if not use_legacy: - self._executor_impl = ExecutorImpl(runner=runner, config=config) - else: - self._executor_impl = None - self._runner = runner - self._config = config or A2aAgentExecutorConfig() + self._runner = runner + self._config = config or A2aAgentExecutorConfig() + self._use_legacy = use_legacy + self._force_new_version = force_new_version + self._executor_impl = None async def _resolve_runner(self) -> Runner: """Resolve the runner, handling cases where it's a callable that returns a Runner.""" @@ -129,7 +132,16 @@ async def execute( * Converts the ADK output events into A2A task updates * Publishes the updates back to A2A server via event queue """ - if self._executor_impl: + should_use_new_impl = not self._use_legacy and ( + self._force_new_version or self._check_new_version_extension(context) + ) + + if should_use_new_impl: + if self._executor_impl is None: + self._executor_impl = ExecutorImpl( + runner=self._runner, + config=self._config, + ) await self._executor_impl.execute(context, event_queue) return @@ -248,17 +260,15 @@ async def _handle_request( context.context_id, self._config.gen_ai_part_converter, ): - a2a_event = await execute_after_event_interceptors( + a2a_events = await execute_after_event_interceptors( a2a_event, executor_context, adk_event, self._config.execute_interceptors, ) - if a2a_event is None: - continue - - task_result_aggregator.process_event(a2a_event) - await event_queue.enqueue_event(a2a_event) + for e in a2a_events: + task_result_aggregator.process_event(e) + await event_queue.enqueue_event(e) # publish the task result event - this is final if ( @@ -338,3 +348,10 @@ async def _prepare_session( run_request.session_id = session.id return session + + def _check_new_version_extension(self, context: RequestContext): + """Check if the extension for the new version is requested and activate it.""" + if _NEW_A2A_ADK_INTEGRATION_EXTENSION in context.requested_extensions: + context.add_activated_extension(_NEW_A2A_ADK_INTEGRATION_EXTENSION) + return True + return False diff --git a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py index cec68f3698..320af124df 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py @@ -38,7 +38,9 @@ from typing_extensions import override from ...runners import Runner +from ...sessions import base_session_service from ...utils.context_utils import Aclosing +from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION from ..converters.from_adk_event import create_error_status_event from ..converters.long_running_functions import handle_user_input from ..converters.long_running_functions import LongRunningFunctions @@ -47,6 +49,7 @@ from ..experimental import a2a_experimental from .config import A2aAgentExecutorConfig from .executor_context import ExecutorContext +from .interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor from .utils import execute_after_agent_interceptors from .utils import execute_after_event_interceptors from .utils import execute_before_agent_interceptors @@ -219,15 +222,14 @@ async def _handle_request( self._config.gen_ai_part_converter, ): a2a_event.metadata = self._get_invocation_metadata(executor_context) - a2a_event = await execute_after_event_interceptors( + a2a_events = await execute_after_event_interceptors( a2a_event, executor_context, adk_event, self._config.execute_interceptors, ) - if not a2a_event: - continue - await event_queue.enqueue_event(a2a_event) + for e in a2a_events: + await event_queue.enqueue_event(e) if error_event: final_event = error_event @@ -286,6 +288,8 @@ async def _resolve_session( app_name=runner.app_name, user_id=user_id, session_id=session_id, + # Checking existence doesn't require event history. + config=base_session_service.GetSessionConfig(num_recent_events=0), ) if session is None: session = await runner.session_service.create_session( @@ -306,5 +310,5 @@ def _get_invocation_metadata( _get_adk_metadata_key('session_id'): executor_context.session_id, # TODO: Remove this metadata once the new agent executor # is fully adopted. - _get_adk_metadata_key('agent_executor_v2'): True, + _NEW_A2A_ADK_INTEGRATION_EXTENSION: {'adk_agent_executor_v2': True}, } diff --git a/src/google/adk/a2a/executor/config.py b/src/google/adk/a2a/executor/config.py index c083affdf3..0bb639f329 100644 --- a/src/google/adk/a2a/executor/config.py +++ b/src/google/adk/a2a/executor/config.py @@ -57,7 +57,7 @@ class ExecuteInterceptor: after_event: Optional[ Callable[ [ExecutorContext, A2AEvent, Event], - Awaitable[Union[A2AEvent, None]], + Awaitable[Union[A2AEvent, list[A2AEvent], None]], ] ] = None """Hook executed after an ADK event is converted to an A2A event. diff --git a/src/google/adk/a2a/executor/interceptors/__init__.py b/src/google/adk/a2a/executor/interceptors/__init__.py new file mode 100644 index 0000000000..5aa247608a --- /dev/null +++ b/src/google/adk/a2a/executor/interceptors/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor + +__all__ = [ + "include_artifacts_in_a2a_event_interceptor", +] diff --git a/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py b/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py new file mode 100644 index 0000000000..ce2dfd35b9 --- /dev/null +++ b/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py @@ -0,0 +1,73 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import annotations + +from typing import Union + +from a2a.server.events import Event as A2AEvent +from a2a.types import Artifact +from a2a.types import TaskArtifactUpdateEvent +from a2a.types import TaskStatusUpdateEvent +from google.adk.a2a.executor.config import ExecuteInterceptor +from google.adk.a2a.executor.config import ExecutorContext + +from ....events.event import Event +from ...converters.part_converter import convert_genai_part_to_a2a_part + + +async def _after_agent( + ctx: ExecutorContext, a2a_event: A2AEvent, adk_event: Event +) -> Union[A2AEvent, list[A2AEvent]]: + """After agent interceptor that includes artifacts in A2A events.""" + if isinstance(a2a_event, (TaskStatusUpdateEvent, TaskArtifactUpdateEvent)): + artifact_service = ctx.runner.artifact_service + if artifact_service and adk_event.actions.artifact_delta: + new_events = [] + for filename, version in adk_event.actions.artifact_delta.items(): + genai_part = await artifact_service.load_artifact( + app_name=ctx.app_name, + user_id=ctx.user_id, + session_id=ctx.session_id, + filename=filename, + version=version, + ) + if genai_part: + a2a_part = convert_genai_part_to_a2a_part(genai_part) + if a2a_part: + a2a_artifact = Artifact( + artifact_id=f"{filename}_{version}", + name=filename, + parts=[a2a_part], + ) + new_event = TaskArtifactUpdateEvent( + task_id=a2a_event.task_id, + context_id=a2a_event.context_id, + artifact=a2a_artifact, + metadata=a2a_event.metadata, + append=False, + last_chunk=True, + ) + new_events.append(new_event) + + adk_event.actions.artifact_delta = {} + + if new_events: + return [a2a_event] + new_events + + return a2a_event + + +include_artifacts_in_a2a_event_interceptor = ExecuteInterceptor( + after_event=_after_agent +) diff --git a/src/google/adk/a2a/executor/utils.py b/src/google/adk/a2a/executor/utils.py index d01066ea57..166c8ff743 100644 --- a/src/google/adk/a2a/executor/utils.py +++ b/src/google/adk/a2a/executor/utils.py @@ -41,16 +41,24 @@ async def execute_after_event_interceptors( executor_context: ExecutorContext, adk_event: Event, execute_interceptors: Optional[list[ExecuteInterceptor]], -) -> Optional[A2AEvent]: +) -> list[A2AEvent]: + events = [a2a_event] if execute_interceptors: for interceptor in execute_interceptors: if interceptor.after_event: - a2a_event = await interceptor.after_event( - executor_context, a2a_event, adk_event - ) - if a2a_event is None: - return None - return a2a_event + next_events = [] + for e in events: + res = await interceptor.after_event(executor_context, e, adk_event) + if res is None: + continue + if isinstance(res, list): + next_events.extend(res) + else: + next_events.append(res) + events = next_events + if not events: + return [] + return events async def execute_after_agent_interceptors( diff --git a/src/google/adk/a2a/experimental.py b/src/google/adk/a2a/experimental.py index 7f331eb763..dadc3791d1 100644 --- a/src/google/adk/a2a/experimental.py +++ b/src/google/adk/a2a/experimental.py @@ -27,6 +27,7 @@ "themselves not experimental. Once it's stable enough the experimental " "mode will be removed. Your feedback is welcome." ), + bypass_env_var="ADK_SUPPRESS_A2A_EXPERIMENTAL_FEATURE_WARNINGS", ) """Mark a class or function as experimental A2A feature. diff --git a/src/google/adk/a2a/utils/agent_to_a2a.py b/src/google/adk/a2a/utils/agent_to_a2a.py index d6a07080fd..3e8ed461e2 100644 --- a/src/google/adk/a2a/utils/agent_to_a2a.py +++ b/src/google/adk/a2a/utils/agent_to_a2a.py @@ -14,7 +14,10 @@ from __future__ import annotations +from contextlib import asynccontextmanager import logging +from typing import AsyncIterator +from typing import Callable from typing import Optional from typing import Union @@ -82,6 +85,7 @@ def to_a2a( agent_card: Optional[Union[AgentCard, str]] = None, push_config_store: Optional[PushNotificationConfigStore] = None, runner: Optional[Runner] = None, + lifespan: Optional[Callable[[Starlette], AsyncIterator[None]]] = None, ) -> Starlette: """Convert an ADK agent to a A2A Starlette application. @@ -98,6 +102,11 @@ def to_a2a( config RPC methods are supported. runner: Optional pre-built Runner object. If not provided, a default runner will be created using in-memory services. + lifespan: Optional async context manager for Starlette lifespan + events. Use this to run startup/shutdown logic (e.g. initializing + database connections or loading resources). The context manager + receives the Starlette app instance and can set state on + ``app.state``. Returns: A Starlette application that can be run with uvicorn @@ -109,6 +118,15 @@ def to_a2a( # Or with custom agent card: app = to_a2a(agent, agent_card=my_custom_agent_card) + + # Or with lifespan: + @asynccontextmanager + async def lifespan(app): + app.state.db = await init_db() + yield + await app.state.db.close() + + app = to_a2a(agent, lifespan=lifespan) """ # Set up ADK logging to ensure logs are visible when using uvicorn directly adk_logger = logging.getLogger("google_adk") @@ -151,11 +169,8 @@ async def create_runner() -> Runner: rpc_url=rpc_url, ) - # Create a Starlette app that will be configured during startup - app = Starlette() - - # Add startup handler to build the agent card and configure A2A routes - async def setup_a2a(): + # Build the agent card and configure A2A routes + async def setup_a2a(app: Starlette): # Use provided agent card or build one asynchronously if provided_agent_card is not None: final_agent_card = provided_agent_card @@ -173,7 +188,19 @@ async def setup_a2a(): app, ) - # Store the setup function to be called during startup - app.add_event_handler("startup", setup_a2a) + # Compose a lifespan that runs A2A setup and the user's lifespan + @asynccontextmanager + async def _combined_lifespan( + app: Starlette, + ) -> AsyncIterator[None]: + await setup_a2a(app) + if lifespan: + async with lifespan(app): + yield + else: + yield + + # Create a Starlette app with the composed lifespan + app = Starlette(lifespan=_combined_lifespan) return app diff --git a/src/google/adk/agents/base_agent.py b/src/google/adk/agents/base_agent.py index 27971711ca..dec85690b3 100644 --- a/src/google/adk/agents/base_agent.py +++ b/src/google/adk/agents/base_agent.py @@ -136,12 +136,6 @@ class MyAgent(BaseAgent): sub_agents: list[BaseAgent] = Field(default_factory=list) """The sub-agents of this agent.""" - version: str = '' - """The agent's version. - - Version of the agent being invoked. Used to identify the Agent involved in telemetry. - """ - before_agent_callback: Optional[BeforeAgentCallback] = None """Callback or list of callbacks to be invoked before the agent run. @@ -686,7 +680,6 @@ def __create_kwargs( kwargs: Dict[str, Any] = { 'name': config.name, - 'version': config.version, 'description': config.description, } if config.sub_agents: diff --git a/src/google/adk/agents/base_agent_config.py b/src/google/adk/agents/base_agent_config.py index 9dca68c5e6..3859cb3550 100644 --- a/src/google/adk/agents/base_agent_config.py +++ b/src/google/adk/agents/base_agent_config.py @@ -55,10 +55,6 @@ class BaseAgentConfig(BaseModel): name: str = Field(description='Required. The name of the agent.') - version: str = Field( - default='', description='Optional. The version of the agent.' - ) - description: str = Field( default='', description='Optional. The description of the agent.' ) diff --git a/src/google/adk/agents/common_configs.py b/src/google/adk/agents/common_configs.py index 49baa8a426..cefab0e8d1 100644 --- a/src/google/adk/agents/common_configs.py +++ b/src/google/adk/agents/common_configs.py @@ -118,7 +118,7 @@ class AgentRefConfig(BaseModel): my_custom_agent = LlmAgent( name="my_custom_agent", instruction="You are a helpful custom agent.", - model="gemini-2.0-flash", + model="gemini-2.5-flash", ) ``` diff --git a/src/google/adk/agents/config_agent_utils.py b/src/google/adk/agents/config_agent_utils.py index 2c1c9bd9c8..b38e3fb3a6 100644 --- a/src/google/adk/agents/config_agent_utils.py +++ b/src/google/adk/agents/config_agent_utils.py @@ -36,7 +36,7 @@ def from_config(config_path: str) -> BaseAgent: """Build agent from a configfile path. Args: - config: the path to a YAML config file. + config_path: the path to a YAML config file. Returns: The created agent instance. diff --git a/src/google/adk/agents/config_schemas/AgentConfig.json b/src/google/adk/agents/config_schemas/AgentConfig.json index f912cefdd2..5d1999e6b6 100644 --- a/src/google/adk/agents/config_schemas/AgentConfig.json +++ b/src/google/adk/agents/config_schemas/AgentConfig.json @@ -2461,7 +2461,7 @@ } ], "default": null, - "description": "Optional. LlmAgent.model. Provide a model name string (e.g. \"gemini-2.0-flash\"). If not set, the model will be inherited from the ancestor or fall back to the system default (gemini-2.5-flash unless overridden via LlmAgent.set_default_model). To construct a model instance from code, use model_code.", + "description": "Optional. LlmAgent.model. Provide a model name string (e.g. \"gemini-2.5-flash\"). If not set, the model will be inherited from the ancestor or fall back to the system default (gemini-2.5-flash unless overridden via LlmAgent.set_default_model). To construct a model instance from code, use model_code.", "title": "Model" }, "instruction": { diff --git a/src/google/adk/agents/llm_agent.py b/src/google/adk/agents/llm_agent.py index 0f7cc2b7d9..96e5043f72 100644 --- a/src/google/adk/agents/llm_agent.py +++ b/src/google/adk/agents/llm_agent.py @@ -181,7 +181,15 @@ async def _convert_tool_union_to_tools( return [FunctionTool(func=tool_union)] # At this point, tool_union must be a BaseToolset - return await tool_union.get_tools_with_prefix(ctx) + try: + return await tool_union.get_tools_with_prefix(ctx) + except Exception as e: + logger.warning( + 'Failed to get tools from toolset %s: %s', + type(tool_union).__name__, + e, + ) + return [] class LlmAgent(BaseAgent): diff --git a/src/google/adk/agents/llm_agent_config.py b/src/google/adk/agents/llm_agent_config.py index b26b1b978b..93ca718094 100644 --- a/src/google/adk/agents/llm_agent_config.py +++ b/src/google/adk/agents/llm_agent_config.py @@ -55,7 +55,7 @@ class LlmAgentConfig(BaseAgentConfig): default=None, description=( 'Optional. LlmAgent.model. Provide a model name string (e.g.' - ' "gemini-2.0-flash"). If not set, the model will be inherited from' + ' "gemini-2.5-flash"). If not set, the model will be inherited from' ' the ancestor or fall back to the system default (gemini-2.5-flash' ' unless overridden via LlmAgent.set_default_model). To construct a' ' model instance from code, use model_code.' diff --git a/src/google/adk/agents/remote_a2a_agent.py b/src/google/adk/agents/remote_a2a_agent.py index 2e3d2495cb..cbfbd61290 100644 --- a/src/google/adk/agents/remote_a2a_agent.py +++ b/src/google/adk/agents/remote_a2a_agent.py @@ -54,6 +54,8 @@ AGENT_CARD_WELL_KNOWN_PATH = "/.well-known/agent.json" from ..a2a.agent.config import A2aRemoteAgentConfig +from ..a2a.agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION +from ..a2a.agent.interceptors.new_integration_extension import _new_integration_extension_interceptor from ..a2a.agent.utils import execute_after_request_interceptors from ..a2a.agent.utils import execute_before_request_interceptors from ..a2a.converters.event_converter import convert_a2a_message_to_event @@ -135,6 +137,7 @@ def __init__( ] = None, full_history_when_stateless: bool = False, config: Optional[A2aRemoteAgentConfig] = None, + use_legacy: bool = True, **kwargs: Any, ) -> None: """Initialize RemoteA2aAgent. @@ -156,6 +159,8 @@ def __init__( request. If False, the default behavior of sending only events since the last reply from the agent will be used. config: Optional configuration object. + use_legacy: If false, send request to the server including the extension + indicating that the server should use the new implementation. **kwargs: Additional arguments passed to BaseAgent Raises: @@ -185,6 +190,13 @@ def __init__( self._full_history_when_stateless = full_history_when_stateless self._config = config or A2aRemoteAgentConfig() + if not use_legacy: + if self._config.request_interceptors is None: + self._config.request_interceptors = [] + self._config.request_interceptors.append( + _new_integration_extension_interceptor + ) + # Validate and store agent card reference if isinstance(agent_card, AgentCard): self._agent_card = agent_card @@ -221,7 +233,7 @@ async def _ensure_httpx_client(self) -> httpx.AsyncClient: httpx_client=self._httpx_client, streaming=False, polling=False, - supported_transports=[A2ATransport.jsonrpc], + supported_transports=[A2ATransport.jsonrpc, A2ATransport.http_json], ) self._a2a_client_factory = A2AClientFactory(config=client_config) return self._httpx_client @@ -669,9 +681,7 @@ async def _run_async_impl( else: metadata = a2a_response.metadata - if metadata and metadata.get( - _get_adk_metadata_key("agent_executor_v2") - ): + if metadata and metadata.get(_NEW_A2A_ADK_INTEGRATION_EXTENSION): event = await self._handle_a2a_response_v2(a2a_response, ctx) else: event = await self._handle_a2a_response(a2a_response, ctx) diff --git a/src/google/adk/agents/run_config.py b/src/google/adk/agents/run_config.py index 4790172966..e059cd957d 100644 --- a/src/google/adk/agents/run_config.py +++ b/src/google/adk/agents/run_config.py @@ -198,6 +198,9 @@ class RunConfig(BaseModel): response_modalities: Optional[list[str]] = None """The output modalities. If not set, it's default to AUDIO.""" + avatar_config: Optional[types.AvatarConfig] = None + """Avatar configuration for the live agent.""" + save_input_blobs_as_artifacts: bool = Field( default=False, deprecated=True, diff --git a/src/google/adk/apps/compaction.py b/src/google/adk/apps/compaction.py index 61941bff2c..1f6ebdec7a 100644 --- a/src/google/adk/apps/compaction.py +++ b/src/google/adk/apps/compaction.py @@ -232,6 +232,10 @@ def _events_to_compact_for_token_threshold( event_retention_size=event_retention_size, ) events_to_compact = candidate_events[:split_index] + pending_ids = _pending_function_call_ids(events) + events_to_compact = _truncate_events_before_pending_function_call( + events_to_compact, pending_ids + ) if not events_to_compact: return [] @@ -273,6 +277,39 @@ def _event_function_response_ids(event: Event) -> set[str]: return function_response_ids +def _pending_function_call_ids(events: list[Event]) -> set[str]: + """Returns function call IDs that have no matching response in the session. + + Scans the session once, collecting function call IDs and response IDs, then + returns the call IDs that are not covered by any response. Events containing + these IDs represent pending (unanswered) function calls that must not be + compacted. + """ + all_call_ids: set[str] = set() + all_response_ids: set[str] = set() + for event in events: + all_call_ids.update(_event_function_call_ids(event)) + all_response_ids.update(_event_function_response_ids(event)) + + return all_call_ids - all_response_ids + + +def _has_pending_function_call(event: Event, pending_ids: set[str]) -> bool: + """Returns True if the event contains any pending function call.""" + call_ids = _event_function_call_ids(event) + return bool(call_ids and not call_ids.isdisjoint(pending_ids)) + + +def _truncate_events_before_pending_function_call( + events: list[Event], pending_ids: set[str] +) -> list[Event]: + """Returns the leading contiguous events that avoid pending function calls.""" + for index, event in enumerate(events): + if _has_pending_function_call(event, pending_ids): + return events[:index] + return events + + def _safe_token_compaction_split_index( *, candidate_events: list[Event], @@ -553,6 +590,10 @@ async def _run_compaction_for_sliding_window( for e in events_to_compact if not (e.actions and e.actions.compaction) ] + pending_ids = _pending_function_call_ids(events) + events_to_compact = _truncate_events_before_pending_function_call( + events_to_compact, pending_ids + ) if not events_to_compact: return None diff --git a/src/google/adk/artifacts/file_artifact_service.py b/src/google/adk/artifacts/file_artifact_service.py index b0078e27ce..9c3870b6e3 100644 --- a/src/google/adk/artifacts/file_artifact_service.py +++ b/src/google/adk/artifacts/file_artifact_service.py @@ -138,6 +138,31 @@ def _is_user_scoped(session_id: Optional[str], filename: str) -> bool: return session_id is None or _file_has_user_namespace(filename) +def _validate_path_segment(value: str, field_name: str) -> None: + """Rejects values that could alter the constructed filesystem path. + + Args: + value: The caller-supplied identifier (e.g. user_id or session_id). + field_name: Human-readable name used in the error message. + + Raises: + InputValidationError: If the value contains path separators, traversal + segments, or null bytes. + """ + if not value: + raise InputValidationError(f"{field_name} must not be empty.") + if "\x00" in value: + raise InputValidationError(f"{field_name} must not contain null bytes.") + if "/" in value or "\\" in value: + raise InputValidationError( + f"{field_name} {value!r} must not contain path separators." + ) + if value in (".", "..") or ".." in value.split("/"): + raise InputValidationError( + f"{field_name} {value!r} must not contain traversal segments." + ) + + def _user_artifacts_dir(base_root: Path) -> Path: """Returns the path that stores user-scoped artifacts.""" return base_root / "artifacts" @@ -145,6 +170,7 @@ def _user_artifacts_dir(base_root: Path) -> Path: def _session_artifacts_dir(base_root: Path, session_id: str) -> Path: """Returns the path that stores session-scoped artifacts.""" + _validate_path_segment(session_id, "session_id") return base_root / "sessions" / session_id / "artifacts" @@ -220,6 +246,7 @@ def __init__(self, root_dir: Path | str): def _base_root(self, user_id: str, /) -> Path: """Returns the artifacts root directory for a user.""" + _validate_path_segment(user_id, "user_id") return self.root_dir / "users" / user_id def _scope_root( diff --git a/src/google/adk/auth/__init__.py b/src/google/adk/auth/__init__.py index 2426b512c1..f2148a75f6 100644 --- a/src/google/adk/auth/__init__.py +++ b/src/google/adk/auth/__init__.py @@ -20,3 +20,4 @@ from .auth_schemes import AuthSchemeType from .auth_schemes import OpenIdConnectWithConfig from .auth_tool import AuthConfig +from .base_auth_provider import BaseAuthProvider diff --git a/src/google/adk/auth/auth_credential.py b/src/google/adk/auth/auth_credential.py index 6160edcc02..a71ae317f5 100644 --- a/src/google/adk/auth/auth_credential.py +++ b/src/google/adk/auth/auth_credential.py @@ -73,6 +73,10 @@ class OAuth2Auth(BaseModelWithConfig): # tool or adk can generate the auth_uri with the state info thus client # can verify the state auth_uri: Optional[str] = None + # A unique value generated at the start of the OAuth flow to bind the user's + # session to the authorization request. This value is typically stored with + # user session and passed to backend for validation. + nonce: Optional[str] = None state: Optional[str] = None # tool or adk can decide the redirect_uri if they don't want client to decide redirect_uri: Optional[str] = None diff --git a/src/google/adk/auth/auth_provider_registry.py b/src/google/adk/auth/auth_provider_registry.py new file mode 100644 index 0000000000..624b95f762 --- /dev/null +++ b/src/google/adk/auth/auth_provider_registry.py @@ -0,0 +1,59 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auth provider registry.""" + +from __future__ import annotations + +from ..features import experimental +from ..features import FeatureName +from .auth_schemes import AuthScheme +from .base_auth_provider import BaseAuthProvider + + +@experimental(FeatureName.PLUGGABLE_AUTH) +class AuthProviderRegistry: + """Registry for auth provider instances.""" + + def __init__(self): + self._providers: dict[type[AuthScheme], BaseAuthProvider] = {} + + def register( + self, + auth_scheme_type: type[AuthScheme], + provider_instance: BaseAuthProvider, + ) -> None: + """Register a provider instance for an auth scheme type. + + Args: + auth_scheme_type: The auth scheme type to register for. + provider_instance: The provider instance to register. + """ + self._providers[auth_scheme_type] = provider_instance + + def get_provider( + self, auth_scheme: AuthScheme | type[AuthScheme] + ) -> BaseAuthProvider | None: + """Get the provider instance for an auth scheme. + + Args: + auth_scheme: The auth scheme or the auth scheme type to get the provider + for. + + Returns: + The provider instance if registered, None otherwise. + """ + if isinstance(auth_scheme, type): + return self._providers.get(auth_scheme) + return self._providers.get(type(auth_scheme)) diff --git a/src/google/adk/auth/auth_schemes.py b/src/google/adk/auth/auth_schemes.py index 78347eaf36..3d6364ff66 100644 --- a/src/google/adk/auth/auth_schemes.py +++ b/src/google/adk/auth/auth_schemes.py @@ -27,6 +27,7 @@ from pydantic import Field from ..utils.feature_decorator import experimental +from .auth_credential import BaseModelWithConfig class OpenIdConnectWithConfig(SecurityBase): @@ -42,8 +43,20 @@ class OpenIdConnectWithConfig(SecurityBase): scopes: Optional[List[str]] = None -# AuthSchemes contains SecuritySchemes from OpenAPI 3.0 and an extra flattened OpenIdConnectWithConfig. -AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig] +class CustomAuthScheme(BaseModelWithConfig): + """A flexible model for custom authentication schemes. + + The subclasses must define a `default` for the `type_` field, if using OAuth2 + user consent flow, to ensure correct rehydration. + """ + + type_: str = Field(alias="type") + + +# AuthSchemes contains SecuritySchemes from OpenAPI 3.0, an extra flattened +# OpenIdConnectWithConfig, and supports external schemes that subclasses +# CustomAuthScheme +AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig, CustomAuthScheme] class OAuthGrantType(str, Enum): diff --git a/src/google/adk/auth/auth_tool.py b/src/google/adk/auth/auth_tool.py index cc8a244e71..820540ef12 100644 --- a/src/google/adk/auth/auth_tool.py +++ b/src/google/adk/auth/auth_tool.py @@ -106,8 +106,11 @@ def get_credential_key(self): if auth_scheme.model_extra: auth_scheme = auth_scheme.model_copy(deep=True) auth_scheme.model_extra.clear() + + type_ = auth_scheme.type_ + type_name = type_.name if type_ and hasattr(type_, "name") else str(type_) scheme_name = ( - f"{auth_scheme.type_.name}_{_stable_model_digest(auth_scheme)}" + f"{type_name}_{_stable_model_digest(auth_scheme)}" if auth_scheme else "" ) diff --git a/src/google/adk/auth/base_auth_provider.py b/src/google/adk/auth/base_auth_provider.py new file mode 100644 index 0000000000..ab34e3b485 --- /dev/null +++ b/src/google/adk/auth/base_auth_provider.py @@ -0,0 +1,56 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from abc import ABC +from abc import abstractmethod +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from .auth_schemes import AuthScheme + +from ..agents.callback_context import CallbackContext +from ..features import experimental +from ..features import FeatureName +from .auth_credential import AuthCredential +from .auth_tool import AuthConfig + + +@experimental(FeatureName.PLUGGABLE_AUTH) +class BaseAuthProvider(ABC): + """Abstract base class for custom authentication providers.""" + + @property + def supported_auth_schemes(self) -> tuple[type[AuthScheme], ...]: + """The AuthScheme types supported by this provider. + + Subclasses can override this to return a tuple of scheme types, enabling + 1-parameter registration. + """ + return () + + @abstractmethod + async def get_auth_credential( + self, auth_config: AuthConfig, context: CallbackContext + ) -> AuthCredential | None: + """Provide an AuthCredential asynchronously. + + Args: + auth_config: The current authentication configuration. + context: The current callback context. + + Returns: + The retrieved AuthCredential, or None if unavailable. + """ diff --git a/src/google/adk/auth/credential_manager.py b/src/google/adk/auth/credential_manager.py index d037a43e6b..46d8057cd9 100644 --- a/src/google/adk/auth/credential_manager.py +++ b/src/google/adk/auth/credential_manager.py @@ -14,7 +14,9 @@ from __future__ import annotations +from collections.abc import Sequence import logging +import threading from typing import Optional from fastapi.openapi.models import OAuth2 @@ -24,10 +26,14 @@ from ..utils.feature_decorator import experimental from .auth_credential import AuthCredential from .auth_credential import AuthCredentialTypes +from .auth_provider_registry import AuthProviderRegistry +from .auth_schemes import AuthScheme from .auth_schemes import AuthSchemeType +from .auth_schemes import CustomAuthScheme from .auth_schemes import ExtendedOAuth2 from .auth_schemes import OpenIdConnectWithConfig from .auth_tool import AuthConfig +from .base_auth_provider import BaseAuthProvider from .exchanger.base_credential_exchanger import BaseCredentialExchanger from .exchanger.base_credential_exchanger import ExchangeResult from .exchanger.credential_exchanger_registry import CredentialExchangerRegistry @@ -37,6 +43,25 @@ logger = logging.getLogger("google_adk." + __name__) +def _rehydrate_custom_scheme( + scheme: CustomAuthScheme, supported_schemes: Sequence[type[AuthScheme]] +) -> CustomAuthScheme: + """Rehydrate a CustomAuthScheme into one of the given supported_schemes.""" + incoming_type = scheme.type_ + for scheme_class in supported_schemes: + type_field = scheme_class.model_fields.get("type_") + # Custom AuthScheme classes must define a `default` for their `type_` field + # to be rehydrated correctly. + if type_field and type_field.default == incoming_type: + data = scheme.model_dump(by_alias=True) + if scheme.model_extra: + data.update(scheme.model_extra) + return scheme_class.model_validate(data) + raise ValueError( + f"Cannot rehydrate: no registered scheme matches type '{incoming_type}'" + ) + + @experimental class CredentialManager: """Manages authentication credentials through a structured workflow. @@ -76,6 +101,27 @@ class CredentialManager: ``` """ + _auth_provider_registry = AuthProviderRegistry() + _registry_lock = threading.Lock() + + @classmethod + def register_auth_provider(cls, provider: BaseAuthProvider) -> None: + """Public API for developers to register custom auth providers.""" + with cls._registry_lock: + for scheme_type in provider.supported_auth_schemes: + existing_provider = cls._auth_provider_registry.get_provider( + scheme_type + ) + if existing_provider is not None: + if existing_provider is not provider: + logger.warning( + "An auth provider is already registered for scheme %s. " + "Ignoring the new provider.", + scheme_type, + ) + continue + cls._auth_provider_registry.register(scheme_type, provider) + def __init__( self, auth_config: AuthConfig, @@ -137,6 +183,43 @@ async def get_auth_credential( ) -> Optional[AuthCredential]: """Load and prepare authentication credential through a structured workflow.""" + # Pydantic may have deserialized an unknown scheme into a generic + # CustomAuthScheme. If so, rehydrate it first into a specific subclass. + # Note: Custom authentication scheme classes must have been imported into + # the Python runtime before get_auth_credential is called for their + # subclasses to be registered. This is fine as developer will anyway import + # them while registering the auth providers. + # Note: `__subclasses__()` only returns immediate subclasses, if there is a + # subclass of a subclass of CustomAuthScheme then it will not be returned. + # pylint: disable=unidiomatic-typecheck Needs exact class matching. + if type(self._auth_config.auth_scheme) is CustomAuthScheme: + self._auth_config.auth_scheme = _rehydrate_custom_scheme( + self._auth_config.auth_scheme, + CustomAuthScheme.__subclasses__(), + ) + # First, check if a registered auth provider is available before attempting + # to retrieve tokens natively. + provider = self._auth_provider_registry.get_provider( + self._auth_config.auth_scheme + ) + if provider: + provided_credential = await provider.get_auth_credential( + self._auth_config, context + ) + if not provided_credential: + raise ValueError("AuthProvider did not return a credential.") + # Handle special case for OAuth2 user consent flow. + if ( + provided_credential.oauth2 + and not provided_credential.oauth2.access_token + and provided_credential.oauth2.auth_uri + ): + # User consent is required. We save the auth uri and return None + # to signal the need for user consent. + self._auth_config.exchanged_auth_credential = provided_credential + return None + return provided_credential + # Step 1: Validate credential configuration await self._validate_credential() diff --git a/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py b/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py index 02365f3026..76f0c67899 100644 --- a/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py +++ b/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py @@ -193,6 +193,8 @@ async def _exchange_authorization_code( return ExchangeResult(auth_credential, False) try: + # Authlib already injects client_id for body-based client auth flows such + # as client_secret_post, so passing it here would duplicate the field. tokens = client.fetch_token( token_endpoint, authorization_response=self._normalize_auth_uri( @@ -200,7 +202,6 @@ async def _exchange_authorization_code( ), code=auth_credential.oauth2.auth_code, grant_type=OAuthGrantType.AUTHORIZATION_CODE, - client_id=auth_credential.oauth2.client_id, ) update_credential_with_tokens(auth_credential, tokens) logger.debug("Successfully exchanged authorization code for access token") diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index afedb7387a..86a2cf2495 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -20,6 +20,7 @@ import json import logging import os +import re import sys import time import traceback @@ -54,11 +55,14 @@ from typing_extensions import deprecated from typing_extensions import override from watchdog.observers import Observer +import yaml from . import agent_graph from ..agents.base_agent import BaseAgent from ..agents.live_request_queue import LiveRequest from ..agents.live_request_queue import LiveRequestQueue +from ..agents.llm_agent import LlmAgent +from ..agents.llm_agent import ToolUnion from ..agents.run_config import RunConfig from ..agents.run_config import StreamingMode from ..apps.app import App @@ -89,7 +93,10 @@ from ..runners import Runner from ..sessions.base_session_service import BaseSessionService from ..sessions.session import Session +from ..utils.agent_info import AgentInfo +from ..utils.agent_info import get_agents_dict from ..utils.context_utils import Aclosing +from ..utils.feature_decorator import experimental from ..version import __version__ from .cli_eval import EVAL_SESSION_ID_PREFIX from .utils import cleanup @@ -138,6 +145,158 @@ def _parse_cors_origins( return literal_origins, combined_regex +def _is_origin_allowed( + origin: str, + allowed_literal_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], +) -> bool: + """Check whether the given origin matches the allowed origins.""" + if "*" in allowed_literal_origins: + return True + if origin in allowed_literal_origins: + return True + if allowed_origin_regex is not None: + return allowed_origin_regex.fullmatch(origin) is not None + return False + + +def _normalize_origin_scheme(scheme: str) -> str: + """Normalize request schemes to the browser Origin scheme space.""" + if scheme == "ws": + return "http" + if scheme == "wss": + return "https" + return scheme + + +def _strip_optional_quotes(value: str) -> str: + """Strip a single pair of wrapping quotes from a header value.""" + if len(value) >= 2 and value[0] == '"' and value[-1] == '"': + return value[1:-1] + return value + + +def _get_scope_header( + scope: dict[str, Any], header_name: bytes +) -> Optional[str]: + """Return the first matching header value from an ASGI scope.""" + for candidate_name, candidate_value in scope.get("headers", []): + if candidate_name == header_name: + return candidate_value.decode("latin-1").split(",", 1)[0].strip() + return None + + +def _get_request_origin(scope: dict[str, Any]) -> Optional[str]: + """Compute the effective origin for the current HTTP/WebSocket request.""" + forwarded = _get_scope_header(scope, b"forwarded") + if forwarded is not None: + proto = None + host = None + for element in forwarded.split(",", 1)[0].split(";"): + if "=" not in element: + continue + name, value = element.split("=", 1) + if name.strip().lower() == "proto": + proto = _strip_optional_quotes(value.strip()) + elif name.strip().lower() == "host": + host = _strip_optional_quotes(value.strip()) + if proto is not None and host is not None: + return f"{_normalize_origin_scheme(proto)}://{host}" + + host = _get_scope_header(scope, b"x-forwarded-host") + if host is None: + host = _get_scope_header(scope, b"host") + if host is None: + return None + + proto = _get_scope_header(scope, b"x-forwarded-proto") + if proto is None: + proto = scope.get("scheme", "http") + return f"{_normalize_origin_scheme(proto)}://{host}" + + +def _is_request_origin_allowed( + origin: str, + scope: dict[str, Any], + allowed_literal_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], + has_configured_allowed_origins: bool, +) -> bool: + """Validate an Origin header against explicit config or same-origin.""" + if has_configured_allowed_origins and _is_origin_allowed( + origin, allowed_literal_origins, allowed_origin_regex + ): + return True + + request_origin = _get_request_origin(scope) + if request_origin is None: + return False + return origin == request_origin + + +_SAFE_HTTP_METHODS = frozenset({"GET", "HEAD", "OPTIONS"}) + + +class _OriginCheckMiddleware: + """ASGI middleware that blocks cross-origin state-changing requests.""" + + def __init__( + self, + app: Any, + has_configured_allowed_origins: bool, + allowed_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], + ) -> None: + self._app = app + self._has_configured_allowed_origins = has_configured_allowed_origins + self._allowed_origins = allowed_origins + self._allowed_origin_regex = allowed_origin_regex + + async def __call__( + self, + scope: dict[str, Any], + receive: Any, + send: Any, + ) -> None: + if scope["type"] != "http": + await self._app(scope, receive, send) + return + + method = scope.get("method", "GET") + if method in _SAFE_HTTP_METHODS: + await self._app(scope, receive, send) + return + + origin = _get_scope_header(scope, b"origin") + if origin is None: + await self._app(scope, receive, send) + return + + if _is_request_origin_allowed( + origin, + scope, + self._allowed_origins, + self._allowed_origin_regex, + self._has_configured_allowed_origins, + ): + await self._app(scope, receive, send) + return + + response_body = b"Forbidden: origin not allowed" + await send({ + "type": "http.response.start", + "status": 403, + "headers": [ + (b"content-type", b"text/plain"), + (b"content-length", str(len(response_body)).encode()), + ], + }) + await send({ + "type": "http.response.body", + "body": response_body, + }) + + class ApiServerSpanExporter(export_lib.SpanExporter): def __init__(self, trace_dict): @@ -336,6 +495,7 @@ class AppInfo(common.BaseModel): description: str language: Literal["yaml", "python"] is_computer_use: bool = False + agents: Optional[dict[str, AgentInfo]] = None class ListAppsResponse(common.BaseModel): @@ -498,6 +658,7 @@ def __init__( logo_image_url: Optional[str] = None, url_prefix: Optional[str] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[str]] = None, ): self.agent_loader = agent_loader self.session_service = session_service @@ -516,6 +677,7 @@ def __init__( self.runner_dict = {} self.url_prefix = url_prefix self.auto_create_session = auto_create_session + self.trigger_sources = trigger_sources async def get_runner_async(self, app_name: str) -> Runner: """Returns the cached runner for the given app.""" @@ -536,17 +698,53 @@ async def get_runner_async(self, app_name: str) -> Runner: # Instantiate extra plugins if configured extra_plugins_instances = self._instantiate_extra_plugins() + plugins_yaml_path = os.path.join(self.agents_dir, app_name, "plugins.yaml") + bq_analytics_config = None + if os.path.exists(plugins_yaml_path): + with open(plugins_yaml_path, "r", encoding="utf-8") as f: + plugins_config = yaml.safe_load(f) + if plugins_config and isinstance(plugins_config, dict): + bq_analytics_config = plugins_config.get("bigquery_agent_analytics") + + # All YAML agents are treated as visual builder agents. + is_visual_builder_agent = os.path.exists( + os.path.join(self.agents_dir, app_name, "root_agent.yaml") + ) + if isinstance(agent_or_app, BaseAgent): + plugins = extra_plugins_instances + + # Handle BigQuery Analytics Plugin injection + if bq_analytics_config and all([ + bq_analytics_config.get("project_id"), + bq_analytics_config.get("dataset_id"), + bq_analytics_config.get("dataset_location"), + ]): + from ..plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin + + plugins.append( + BigQueryAgentAnalyticsPlugin( + project_id=bq_analytics_config.get("project_id"), + dataset_id=bq_analytics_config.get("dataset_id"), + table_id=bq_analytics_config.get("table_id"), + location=bq_analytics_config.get("dataset_location"), + ) + ) + agentic_app = App( name=app_name, root_agent=agent_or_app, - plugins=extra_plugins_instances, + plugins=plugins, ) else: # Combine existing plugins with extra plugins agent_or_app.plugins = agent_or_app.plugins + extra_plugins_instances agentic_app = agent_or_app + # If the root agent was loaded from YAML, we treat it as being from Visual Builder + if is_visual_builder_agent: + object.__setattr__(agentic_app, "_is_visual_builder_app", True) + runner = self._create_runner(agentic_app) self.runner_dict[app_name] = runner return runner @@ -757,8 +955,12 @@ async def internal_lifespan(app: FastAPI): # Run the FastAPI server. app = FastAPI(lifespan=internal_lifespan) + has_configured_allowed_origins = bool(allow_origins) if allow_origins: literal_origins, combined_regex = _parse_cors_origins(allow_origins) + compiled_origin_regex = ( + re.compile(combined_regex) if combined_regex is not None else None + ) app.add_middleware( CORSMiddleware, allow_origins=literal_origins, @@ -767,6 +969,16 @@ async def internal_lifespan(app: FastAPI): allow_methods=["*"], allow_headers=["*"], ) + else: + literal_origins = [] + compiled_origin_regex = None + + app.add_middleware( + _OriginCheckMiddleware, + has_configured_allowed_origins=has_configured_allowed_origins, + allowed_origins=literal_origins, + allowed_origin_regex=compiled_origin_regex, + ) @app.get("/health") async def health() -> dict[str, str]: @@ -793,6 +1005,25 @@ async def list_apps( return ListAppsResponse(apps=[AppInfo(**app) for app in apps_info]) return self.agent_loader.list_agents() + @experimental + @app.get("/apps/{app_name}/app-info", response_model_exclude_none=True) + async def get_adk_app_info(app_name: str) -> AppInfo: + """Returns the detailed info for a given ADK app.""" + agent_or_app = self.agent_loader.load_agent(app_name) + root_agent = self._get_root_agent(agent_or_app) + if isinstance(root_agent, LlmAgent): + return AppInfo( + name=app_name, + root_agent_name=root_agent.name, + description=root_agent.description, + language="python", + agents=get_agents_dict(root_agent), + ) + else: + raise HTTPException( + status_code=400, detail="Root agent is not an LlmAgent" + ) + @app.get("/debug/trace/{event_id}", tags=[TAG_DEBUG]) async def get_trace_dict(event_id: str) -> Any: event_dict = trace_dict.get(event_id, None) @@ -1646,9 +1877,20 @@ async def patch_memory( raise HTTPException(status_code=404, detail="Session not found") await self.memory_service.add_session_to_memory(session) + def _set_telemetry_context_if_needed(runner: Runner): + """Helper to set contextvars for the current request task.""" + app = getattr(runner, "app", None) + from ..utils._telemetry_context import _is_visual_builder + + if app and getattr(app, "_is_visual_builder_app", False): + _is_visual_builder.set(True) + else: + _is_visual_builder.set(False) + @app.post("/run", response_model_exclude_none=True) async def run_agent(req: RunAgentRequest) -> list[Event]: runner = await self.get_runner_async(req.app_name) + _set_telemetry_context_if_needed(runner) try: async with Aclosing( runner.run_async( @@ -1670,6 +1912,7 @@ async def run_agent(req: RunAgentRequest) -> list[Event]: async def run_agent_sse(req: RunAgentRequest) -> StreamingResponse: stream_mode = StreamingMode.SSE if req.streaming else StreamingMode.NONE runner = await self.get_runner_async(req.app_name) + _set_telemetry_context_if_needed(runner) # Validate session existence before starting the stream. # We check directly here instead of eagerly advancing the @@ -1739,6 +1982,37 @@ async def event_generator(): media_type="text/event-stream", ) + @app.get( + "/dev/{app_name}/graph", + response_model_exclude_none=True, + tags=[TAG_DEBUG], + ) + async def get_app_graph_dot( + app_name: str, dark_mode: bool = False + ) -> GetEventGraphResult | dict: + """Returns the base agent graph in DOT format without any highlights. + + This endpoint allows the frontend to fetch the graph structure once + and compute highlights client-side for better performance. + + Args: + app_name: The name of the agent/app + dark_mode: Whether to use dark theme background color + """ + agent_or_app = self.agent_loader.load_agent(app_name) + root_agent = self._get_root_agent(agent_or_app) + + # Get graph with NO highlights (empty list) and specified theme + dot_graph = await agent_graph.get_agent_graph( + root_agent, [], dark_mode=dark_mode + ) + + if dot_graph and isinstance(dot_graph, graphviz.Digraph): + return GetEventGraphResult(dot_src=dot_graph.source) + else: + return {} + + # TODO: This endpoint can be removed once we update adk web to stop consuming it @app.get( "/apps/{app_name}/users/{user_id}/sessions/{session_id}/events/{event_id}/graph", response_model_exclude_none=True, @@ -1802,14 +2076,25 @@ async def run_agent_live( enable_affective_dialog: bool | None = Query(default=None), enable_session_resumption: bool | None = Query(default=None), ) -> None: + ws_origin = websocket.headers.get("origin") + if ws_origin is not None and not _is_request_origin_allowed( + ws_origin, + websocket.scope, + literal_origins, + compiled_origin_regex, + has_configured_allowed_origins, + ): + await websocket.close(code=1008, reason="Origin not allowed") + return + await websocket.accept() + runner_for_context = await self.get_runner_async(app_name) + _set_telemetry_context_if_needed(runner_for_context) session = await self.session_service.get_session( app_name=app_name, user_id=user_id, session_id=session_id ) if not session: - # Accept first so that the client is aware of connection establishment, - # then close with a specific code. await websocket.close(code=1002, reason="Session not found") return @@ -1882,6 +2167,13 @@ async def process_messages(): for task in pending: task.cancel() + # Register /trigger/* endpoints when enabled. + if self.trigger_sources: + from .trigger_routes import TriggerRouter + + trigger_router = TriggerRouter(self, trigger_sources=self.trigger_sources) + trigger_router.register(app) + if web_assets_dir: import mimetypes diff --git a/src/google/adk/cli/agent_graph.py b/src/google/adk/cli/agent_graph.py index ffb7114522..84166c39d9 100644 --- a/src/google/adk/cli/agent_graph.py +++ b/src/google/adk/cli/agent_graph.py @@ -282,9 +282,12 @@ def draw_edge(from_name, to_name): draw_edge(agent.name, get_node_name(tool)) -async def get_agent_graph(root_agent, highlights_pairs, image=False): +async def get_agent_graph( + root_agent, highlights_pairs, image=False, dark_mode=True +): + bg_color = '#333537' if dark_mode else '#ffffff' graph = graphviz.Digraph( - graph_attr={'rankdir': 'LR', 'bgcolor': '#333537'}, strict=True + graph_attr={'rankdir': 'LR', 'bgcolor': bg_color}, strict=True ) await build_graph(graph, root_agent, highlights_pairs) if image: diff --git a/src/google/adk/cli/browser/chunk-VPVAD56Y.js b/src/google/adk/cli/browser/chunk-2MVVEOIQ.js similarity index 79% rename from src/google/adk/cli/browser/chunk-VPVAD56Y.js rename to src/google/adk/cli/browser/chunk-2MVVEOIQ.js index d5e96825d3..589050f63b 100644 --- a/src/google/adk/cli/browser/chunk-VPVAD56Y.js +++ b/src/google/adk/cli/browser/chunk-2MVVEOIQ.js @@ -1 +1 @@ -import{Da as o,Db as d,Yb as l,Zb as s,ab as r,eb as a,md as m}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var f=(()=>{class e extends m{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=r({type:e,selectors:[["a2ui-divider"]],features:[a],decls:1,vars:4,template:function(n,t){n&1&&d(0,"hr"),n&2&&(l(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Divider),s(t.theme.components.Divider))},styles:["[_nghost-%COMP%]{display:block;min-height:0;overflow:auto}hr[_ngcontent-%COMP%]{height:1px;background:#ccc;border:none}"]})}return e})();export{f as Divider}; +import{$a as r,Ca as o,Db as d,Yb as l,Zb as s,eb as a,pd as m}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var f=(()=>{class e extends m{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=r({type:e,selectors:[["a2ui-divider"]],features:[a],decls:1,vars:4,template:function(n,t){n&1&&d(0,"hr"),n&2&&(l(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Divider),s(t.theme.components.Divider))},styles:["[_nghost-%COMP%]{display:block;min-height:0;overflow:auto}hr[_ngcontent-%COMP%]{height:1px;background:#ccc;border:none}"]})}return e})();export{f as Divider}; diff --git a/src/google/adk/cli/browser/chunk-CHLIPOEM.js b/src/google/adk/cli/browser/chunk-2VKC3BHH.js similarity index 79% rename from src/google/adk/cli/browser/chunk-CHLIPOEM.js rename to src/google/adk/cli/browser/chunk-2VKC3BHH.js index c793b46fd7..9662795485 100644 --- a/src/google/adk/cli/browser/chunk-CHLIPOEM.js +++ b/src/google/adk/cli/browser/chunk-2VKC3BHH.js @@ -1 +1 @@ -import{Bc as h,Da as o,Gb as u,Jb as p,Qa as a,Yb as m,Zb as f,ab as r,eb as c,md as y,nd as g,xb as s,yb as l,zb as d}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var _=(()=>{class n extends y{action=h.required();handleClick(){let t=this.action();t&&super.sendAction(t)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=o(n)))(e||n)}})();static \u0275cmp=r({type:n,selectors:[["a2ui-button"]],inputs:{action:[1,"action"]},features:[c],decls:2,vars:6,consts:[[3,"click"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,e){i&1&&(l(0,"button",0),p("click",function(){return e.handleClick()}),u(1,1),d()),i&2&&(m(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Button),f(e.theme.components.Button),a(),s("surfaceId",e.surfaceId())("component",e.component().properties.child))},dependencies:[g],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0}"]})}return n})();export{_ as Button}; +import{$a as r,Ca as o,Cc as h,Gb as u,Jb as p,Pa as a,Yb as m,Zb as f,eb as c,pd as y,qd as g,xb as s,yb as l,zb as d}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var _=(()=>{class n extends y{action=h.required();handleClick(){let t=this.action();t&&super.sendAction(t)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=o(n)))(e||n)}})();static \u0275cmp=r({type:n,selectors:[["a2ui-button"]],inputs:{action:[1,"action"]},features:[c],decls:2,vars:6,consts:[[3,"click"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,e){i&1&&(l(0,"button",0),p("click",function(){return e.handleClick()}),u(1,1),d()),i&2&&(m(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Button),f(e.theme.components.Button),a(),s("surfaceId",e.surfaceId())("component",e.component().properties.child))},dependencies:[g],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0}"]})}return n})();export{_ as Button}; diff --git a/src/google/adk/cli/browser/chunk-7MR4QDTO.js b/src/google/adk/cli/browser/chunk-4S2CIXCW.js similarity index 86% rename from src/google/adk/cli/browser/chunk-7MR4QDTO.js rename to src/google/adk/cli/browser/chunk-4S2CIXCW.js index b5e69c1ba1..62cdc0909a 100644 --- a/src/google/adk/cli/browser/chunk-7MR4QDTO.js +++ b/src/google/adk/cli/browser/chunk-4S2CIXCW.js @@ -1 +1 @@ -import{Bc as _,Da as o,Gb as u,Lb as g,Qa as r,Yb as y,Zb as C,ab as s,eb as c,md as M,nd as v,ob as a,ub as d,vb as l,wb as p,xb as m,yb as f,zb as h}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function O(e,x){if(e&1&&u(0,0),e&2){let n=x.$implicit,i=g();m("surfaceId",i.surfaceId())("component",n)}}var D=(()=>{class e extends M{direction=_("vertical");static \u0275fac=(()=>{let n;return function(t){return(n||(n=o(e)))(t||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-list"]],hostVars:1,hostBindings:function(i,t){i&2&&a("direction",t.direction())},inputs:{direction:[1,"direction"]},features:[c],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,t){i&1&&(f(0,"section"),l(1,O,1,2,"ng-container",0,d),h()),i&2&&(y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.List),C(t.theme.components.List),r(),p(t.component().properties.children))},dependencies:[v],styles:['[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}[direction="vertical"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:grid}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:flex;max-width:100%;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%] > [_ngcontent-%COMP%]::slotted(*){flex:1 0 fit-content;max-width:min(80%,400px)}']})}return e})();export{D as List}; +import{$a as s,Ca as o,Cc as _,Gb as u,Lb as g,Pa as r,Yb as y,Zb as C,eb as c,ob as a,pd as M,qd as v,ub as d,vb as l,wb as p,xb as m,yb as f,zb as h}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function O(e,x){if(e&1&&u(0,0),e&2){let n=x.$implicit,i=g();m("surfaceId",i.surfaceId())("component",n)}}var D=(()=>{class e extends M{direction=_("vertical");static \u0275fac=(()=>{let n;return function(t){return(n||(n=o(e)))(t||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-list"]],hostVars:1,hostBindings:function(i,t){i&2&&a("direction",t.direction())},inputs:{direction:[1,"direction"]},features:[c],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,t){i&1&&(f(0,"section"),l(1,O,1,2,"ng-container",0,d),h()),i&2&&(y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.List),C(t.theme.components.List),r(),p(t.component().properties.children))},dependencies:[v],styles:['[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}[direction="vertical"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:grid}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:flex;max-width:100%;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%] > [_ngcontent-%COMP%]::slotted(*){flex:1 0 fit-content;max-width:min(80%,400px)}']})}return e})();export{D as List}; diff --git a/src/google/adk/cli/browser/chunk-IXLBQLFI.js b/src/google/adk/cli/browser/chunk-5VJ6OSLK.js similarity index 81% rename from src/google/adk/cli/browser/chunk-IXLBQLFI.js rename to src/google/adk/cli/browser/chunk-5VJ6OSLK.js index c1a0434ee9..b1df2d73d2 100644 --- a/src/google/adk/cli/browser/chunk-IXLBQLFI.js +++ b/src/google/adk/cli/browser/chunk-5VJ6OSLK.js @@ -1 +1 @@ -import{Bb as m,Bc as _,Cb as u,Da as r,Db as p,Ib as v,Lb as f,Na as l,Qa as n,Yb as y,Zb as g,ab as d,eb as s,gc as h,hc as x,ic as C,md as b,qb as a,sb as c,vc as M}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function U(e,V){if(e&1&&(m(0,"section"),p(1,"video",1),u()),e&2){let t=f(),i=C(0);y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Video),g(t.theme.components.Video),n(),v("src",i,l)}}var L=(()=>{class e extends b{url=_.required();resolvedUrl=M(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=r(e)))(o||e)}})();static \u0275cmp=d({type:e,selectors:[["a2ui-video"]],inputs:{url:[1,"url"]},features:[s],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(i,o){if(i&1&&(h(0),a(1,U,2,5,"section",0)),i&2){let D=x(o.resolvedUrl());n(),c(D?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}video[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{L as Video}; +import{$a as d,Bb as m,Ca as r,Cb as u,Cc as _,Db as p,Ib as v,Lb as f,Ma as l,Pa as n,Yb as y,Zb as g,eb as s,fc as h,gc as x,hc as C,pd as b,qb as a,sb as c,wc as M}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function U(e,V){if(e&1&&(m(0,"section"),p(1,"video",1),u()),e&2){let t=f(),i=C(0);y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Video),g(t.theme.components.Video),n(),v("src",i,l)}}var L=(()=>{class e extends b{url=_.required();resolvedUrl=M(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=r(e)))(o||e)}})();static \u0275cmp=d({type:e,selectors:[["a2ui-video"]],inputs:{url:[1,"url"]},features:[s],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(i,o){if(i&1&&(h(0),a(1,U,2,5,"section",0)),i&2){let D=x(o.resolvedUrl());n(),c(D?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}video[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{L as Video}; diff --git a/src/google/adk/cli/browser/chunk-HAQR6HJ6.js b/src/google/adk/cli/browser/chunk-7P7JIWGK.js similarity index 79% rename from src/google/adk/cli/browser/chunk-HAQR6HJ6.js rename to src/google/adk/cli/browser/chunk-7P7JIWGK.js index 03be74513b..816c525ea5 100644 --- a/src/google/adk/cli/browser/chunk-HAQR6HJ6.js +++ b/src/google/adk/cli/browser/chunk-7P7JIWGK.js @@ -1 +1 @@ -import{Bb as g,Bc as r,Cb as p,Da as a,Db as v,Ib as h,Lb as f,Na as l,Qa as o,Yb as y,Zb as x,ab as m,bd as D,eb as d,gc as M,hc as b,ic as C,md as I,qb as c,sb as u,vc as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function H(t,U){if(t&1&&(g(0,"section"),v(1,"img",1),p()),t&2){let e=f(),i=C(0);y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Image),x(e.classes()),o(),h("src",i,l)}}var w=(()=>{class t extends I{url=r.required();usageHint=r.required();resolvedUrl=s(()=>this.resolvePrimitive(this.url()));classes=s(()=>{let e=this.usageHint();return D.merge(this.theme.components.Image.all,e?this.theme.components.Image[e]:{})});static \u0275fac=(()=>{let e;return function(n){return(e||(e=a(t)))(n||t)}})();static \u0275cmp=m({type:t,selectors:[["a2ui-image"]],inputs:{url:[1,"url"],usageHint:[1,"usageHint"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],[3,"src"]],template:function(i,n){if(i&1&&(M(0),c(1,H,2,5,"section",0)),i&2){let _=b(n.resolvedUrl());o(),u(_?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}img[_ngcontent-%COMP%]{display:block;width:100%;height:100%;box-sizing:border-box}"]})}return t})();export{w as Image}; +import{$a as m,Bb as g,Ca as a,Cb as p,Cc as r,Db as v,Ib as h,Lb as f,Ma as l,Nc as D,Pa as o,Yb as y,Zb as x,eb as d,fc as M,gc as b,hc as C,pd as I,qb as c,sb as u,wc as s}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function H(t,U){if(t&1&&(g(0,"section"),v(1,"img",1),p()),t&2){let e=f(),i=C(0);y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Image),x(e.classes()),o(),h("src",i,l)}}var w=(()=>{class t extends I{url=r.required();usageHint=r.required();resolvedUrl=s(()=>this.resolvePrimitive(this.url()));classes=s(()=>{let e=this.usageHint();return D.merge(this.theme.components.Image.all,e?this.theme.components.Image[e]:{})});static \u0275fac=(()=>{let e;return function(n){return(e||(e=a(t)))(n||t)}})();static \u0275cmp=m({type:t,selectors:[["a2ui-image"]],inputs:{url:[1,"url"],usageHint:[1,"usageHint"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],[3,"src"]],template:function(i,n){if(i&1&&(M(0),c(1,H,2,5,"section",0)),i&2){let _=b(n.resolvedUrl());o(),u(_?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}img[_ngcontent-%COMP%]{display:block;width:100%;height:100%;box-sizing:border-box}"]})}return t})();export{w as Image}; diff --git a/src/google/adk/cli/browser/chunk-M3M3P5CP.js b/src/google/adk/cli/browser/chunk-A2SOFJNC.js similarity index 87% rename from src/google/adk/cli/browser/chunk-M3M3P5CP.js rename to src/google/adk/cli/browser/chunk-A2SOFJNC.js index f83cb5b679..b63c9780bf 100644 --- a/src/google/adk/cli/browser/chunk-M3M3P5CP.js +++ b/src/google/adk/cli/browser/chunk-A2SOFJNC.js @@ -1 +1 @@ -import{$b as b,Bb as l,Bc as c,Cb as r,Da as m,Ib as d,Kb as h,Qa as o,Yb as v,Zb as a,_b as g,ab as p,eb as u,md as f,vc as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var E=(()=>{class i extends f{value=c.required();label=c.required();inputChecked=s(()=>super.resolvePrimitive(this.value())??!1);resolvedLabel=s(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-checkbox");handleChange(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.checked,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=p({type:i,selectors:[["a2ui-checkbox"]],inputs:{value:[1,"value"],label:[1,"label"]},features:[u],decls:4,vars:12,consts:[["autocomplete","off","type","checkbox",3,"change","id","checked"],[3,"htmlFor"]],template:function(n,e){n&1&&(l(0,"section")(1,"input",0),h("change",function(k){return e.handleChange(k)}),r(),l(2,"label",1),g(3),r()()),n&2&&(v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.CheckBox),a(e.theme.components.CheckBox.container),o(),a(e.theme.components.CheckBox.element),d("id",e.inputId)("checked",e.inputChecked()),o(),a(e.theme.components.CheckBox.label),d("htmlFor",e.inputId),o(),b(e.resolvedLabel()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%}"]})}return i})();export{E as Checkbox}; +import{$a as p,$b as b,Bb as l,Ca as m,Cb as r,Cc as c,Ib as d,Kb as h,Pa as o,Yb as v,Zb as a,_b as g,eb as u,pd as f,wc as s}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var E=(()=>{class i extends f{value=c.required();label=c.required();inputChecked=s(()=>super.resolvePrimitive(this.value())??!1);resolvedLabel=s(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-checkbox");handleChange(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.checked,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=p({type:i,selectors:[["a2ui-checkbox"]],inputs:{value:[1,"value"],label:[1,"label"]},features:[u],decls:4,vars:12,consts:[["autocomplete","off","type","checkbox",3,"change","id","checked"],[3,"htmlFor"]],template:function(n,e){n&1&&(l(0,"section")(1,"input",0),h("change",function(k){return e.handleChange(k)}),r(),l(2,"label",1),g(3),r()()),n&2&&(v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.CheckBox),a(e.theme.components.CheckBox.container),o(),a(e.theme.components.CheckBox.element),d("id",e.inputId)("checked",e.inputChecked()),o(),a(e.theme.components.CheckBox.label),d("htmlFor",e.inputId),o(),b(e.resolvedLabel()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%}"]})}return i})();export{E as Checkbox}; diff --git a/src/google/adk/cli/browser/chunk-BX7YU7E6.js b/src/google/adk/cli/browser/chunk-BX7YU7E6.js deleted file mode 100644 index e7ed117838..0000000000 --- a/src/google/adk/cli/browser/chunk-BX7YU7E6.js +++ /dev/null @@ -1,439 +0,0 @@ -import{a as S,b as P,e as lr,g as at}from"./chunk-W7GRJBO5.js";var me=null,Li=!1,ja=1,Kv=null,ne=Symbol("SIGNAL");function M(e){let t=me;return me=e,t}function ji(){return me}var Kt={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Jt(e){if(Li)throw new Error("");if(me===null)return;me.consumerOnSignalRead(e);let t=me.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=me.recomputing;if(r&&(n=t!==void 0?t.nextProducer:me.producers,n!==void 0&&n.producer===e)){me.producersTail=n,n.lastReadVersion=e.version;return}let o=e.consumersTail;if(o!==void 0&&o.consumer===me&&(!r||Xv(o,me)))return;let i=pr(me),s={producer:e,consumer:me,nextProducer:n,prevConsumer:o,lastReadVersion:e.version,nextConsumer:void 0};me.producersTail=s,t!==void 0?t.nextProducer=s:me.producers=s,i&&Sh(e,s)}function xh(){ja++}function wn(e){if(!(pr(e)&&!e.dirty)&&!(!e.dirty&&e.lastCleanEpoch===ja)){if(!e.producerMustRecompute(e)&&!fr(e)){dr(e);return}e.producerRecomputeValue(e),dr(e)}}function Ba(e){if(e.consumers===void 0)return;let t=Li;Li=!0;try{for(let n=e.consumers;n!==void 0;n=n.nextConsumer){let r=n.consumer;r.dirty||Jv(r)}}finally{Li=t}}function Va(){return me?.consumerAllowSignalWrites!==!1}function Jv(e){e.dirty=!0,Ba(e),e.consumerMarkedDirty?.(e)}function dr(e){e.dirty=!1,e.lastCleanEpoch=ja}function It(e){return e&&Ih(e),M(e)}function Ih(e){e.producersTail=void 0,e.recomputing=!0}function Xt(e,t){M(t),e&&Th(e)}function Th(e){e.recomputing=!1;let t=e.producersTail,n=t!==void 0?t.nextProducer:e.producers;if(n!==void 0){if(pr(e))do n=Ha(n);while(n!==void 0);t!==void 0?t.nextProducer=void 0:e.producers=void 0}}function fr(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let n=t.producer,r=t.lastReadVersion;if(r!==n.version||(wn(n),r!==n.version))return!0}return!1}function en(e){if(pr(e)){let t=e.producers;for(;t!==void 0;)t=Ha(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function Sh(e,t){let n=e.consumersTail,r=pr(e);if(n!==void 0?(t.nextConsumer=n.nextConsumer,n.nextConsumer=t):(t.nextConsumer=void 0,e.consumers=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let o=e.producers;o!==void 0;o=o.nextProducer)Sh(o.producer,o)}function Ha(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,o=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r!==void 0?r.prevConsumer=o:t.consumersTail=o,o!==void 0)o.nextConsumer=r;else if(t.consumers=r,!pr(t)){let i=t.producers;for(;i!==void 0;)i=Ha(i)}return n}function pr(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function yo(e){Kv?.(e)}function Xv(e,t){let n=t.producersTail;if(n!==void 0){let r=t.producers;do{if(r===e)return!0;if(r===n)break;r=r.nextProducer}while(r!==void 0)}return!1}function bo(e,t){return Object.is(e,t)}function vo(e,t){let n=Object.create(eD);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(wn(n),Jt(n),n.value===xt)throw n.error;return n.value};return r[ne]=n,yo(n),r}var Qt=Symbol("UNSET"),Cn=Symbol("COMPUTING"),xt=Symbol("ERRORED"),eD=P(S({},Kt),{value:Qt,dirty:!0,error:null,equal:bo,kind:"computed",producerMustRecompute(e){return e.value===Qt||e.value===Cn},producerRecomputeValue(e){if(e.value===Cn)throw new Error("");let t=e.value;e.value=Cn;let n=It(e),r,o=!1;try{r=e.computation(),M(null),o=t!==Qt&&t!==xt&&r!==xt&&e.equal(t,r)}catch(i){r=xt,e.error=i}finally{Xt(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function tD(){throw new Error}var Mh=tD;function Ah(e){Mh(e)}function $a(e){Mh=e}var nD=null;function Ua(e,t){let n=Object.create(Do);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Nh(n);return r[ne]=n,yo(n),[r,s=>xn(n,s),s=>Bi(n,s)]}function Nh(e){return Jt(e),e.value}function xn(e,t){Va()||Ah(e),e.equal(e.value,t)||(e.value=t,rD(e))}function Bi(e,t){Va()||Ah(e),xn(e,t(e.value))}var Do=P(S({},Kt),{equal:bo,value:void 0,kind:"signal"});function rD(e){e.version++,xh(),Ba(e),nD?.(e)}function za(e){let t=M(null);try{return e()}finally{M(t)}}var qa=P(S({},Kt),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:"effect"});function Ga(e){if(e.dirty=!1,e.version>0&&!fr(e))return;e.version++;let t=It(e);try{e.cleanup(),e.fn()}finally{Xt(e,t)}}function k(e){return typeof e=="function"}function hr(e){let n=e(r=>{Error.call(r),r.stack=new Error().stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var Vi=hr(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription: -${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` - `)}`:"",this.name="UnsubscriptionError",this.errors=n});function In(e,t){if(e){let n=e.indexOf(t);0<=n&&e.splice(n,1)}}var X=class e{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;let{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(let i of n)i.remove(this);else n.remove(this);let{initialTeardown:r}=this;if(k(r))try{r()}catch(i){t=i instanceof Vi?i.errors:[i]}let{_finalizers:o}=this;if(o){this._finalizers=null;for(let i of o)try{kh(i)}catch(s){t=t??[],s instanceof Vi?t=[...t,...s.errors]:t.push(s)}}if(t)throw new Vi(t)}}add(t){var n;if(t&&t!==this)if(this.closed)kh(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}}_hasParent(t){let{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){let{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){let{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&In(n,t)}remove(t){let{_finalizers:n}=this;n&&In(n,t),t instanceof e&&t._removeParent(this)}};X.EMPTY=(()=>{let e=new X;return e.closed=!0,e})();var Wa=X.EMPTY;function Hi(e){return e instanceof X||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function kh(e){k(e)?e():e.unsubscribe()}var We={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var gr={setTimeout(e,t,...n){let{delegate:r}=gr;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){let{delegate:t}=gr;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function $i(e){gr.setTimeout(()=>{let{onUnhandledError:t}=We;if(t)t(e);else throw e})}function Tt(){}var Rh=Za("C",void 0,void 0);function Fh(e){return Za("E",void 0,e)}function Oh(e){return Za("N",e,void 0)}function Za(e,t,n){return{kind:e,value:t,error:n}}var Tn=null;function mr(e){if(We.useDeprecatedSynchronousErrorHandling){let t=!Tn;if(t&&(Tn={errorThrown:!1,error:null}),e(),t){let{errorThrown:n,error:r}=Tn;if(Tn=null,n)throw r}}else e()}function Ph(e){We.useDeprecatedSynchronousErrorHandling&&Tn&&(Tn.errorThrown=!0,Tn.error=e)}var Sn=class extends X{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,Hi(t)&&t.add(this)):this.destination=sD}static create(t,n,r){return new Ze(t,n,r)}next(t){this.isStopped?Qa(Oh(t),this):this._next(t)}error(t){this.isStopped?Qa(Fh(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Qa(Rh,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},oD=Function.prototype.bind;function Ya(e,t){return oD.call(e,t)}var Ka=class{constructor(t){this.partialObserver=t}next(t){let{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){Ui(r)}}error(t){let{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){Ui(r)}else Ui(t)}complete(){let{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){Ui(n)}}},Ze=class extends Sn{constructor(t,n,r){super();let o;if(k(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&We.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&Ya(t.next,i),error:t.error&&Ya(t.error,i),complete:t.complete&&Ya(t.complete,i)}):o=t}this.destination=new Ka(o)}};function Ui(e){We.useDeprecatedSynchronousErrorHandling?Ph(e):$i(e)}function iD(e){throw e}function Qa(e,t){let{onStoppedNotification:n}=We;n&&gr.setTimeout(()=>n(e,t))}var sD={closed:!0,next:Tt,error:iD,complete:Tt};var yr=typeof Symbol=="function"&&Symbol.observable||"@@observable";function De(e){return e}function uD(...e){return Ja(e)}function Ja(e){return e.length===0?De:e.length===1?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}var B=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){let r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){let i=cD(n)?n:new Ze(n,r,o);return mr(()=>{let{operator:s,source:u}=this;i.add(s?s.call(i,u):u?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return r=Lh(r),new r((o,i)=>{let s=new Ze({next:u=>{try{n(u)}catch(a){i(a),s.unsubscribe()}},error:i,complete:o});this.subscribe(s)})}_subscribe(n){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(n)}[yr](){return this}pipe(...n){return Ja(n)(this)}toPromise(n){return n=Lh(n),new n((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function Lh(e){var t;return(t=e??We.Promise)!==null&&t!==void 0?t:Promise}function aD(e){return e&&k(e.next)&&k(e.error)&&k(e.complete)}function cD(e){return e&&e instanceof Sn||aD(e)&&Hi(e)}function Xa(e){return k(e?.lift)}function j(e){return t=>{if(Xa(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function R(e,t,n,r,o){return new ec(e,t,n,r,o)}var ec=class extends Sn{constructor(t,n,r,o,i,s){super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?function(u){try{n(u)}catch(a){t.error(a)}}:super._next,this._error=o?function(u){try{o(u)}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:n}=this;super.unsubscribe(),!n&&((t=this.onFinalize)===null||t===void 0||t.call(this))}}};function jh(){return j((e,t)=>{let n=null;e._refCount++;let r=R(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount){n=null;return}let o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}var tc=class extends B{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,Xa(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){let t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;let{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new X;let n=this.getSubject();t.add(this.source.subscribe(R(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=X.EMPTY)}return t}refCount(){return jh()(this)}};var br={schedule(e){let t=requestAnimationFrame,n=cancelAnimationFrame,{delegate:r}=br;r&&(t=r.requestAnimationFrame,n=r.cancelAnimationFrame);let o=t(i=>{n=void 0,e(i)});return new X(()=>n?.(o))},requestAnimationFrame(...e){let{delegate:t}=br;return(t?.requestAnimationFrame||requestAnimationFrame)(...e)},cancelAnimationFrame(...e){let{delegate:t}=br;return(t?.cancelAnimationFrame||cancelAnimationFrame)(...e)},delegate:void 0};var Bh=hr(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var le=(()=>{class e extends B{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){let r=new zi(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Bh}next(n){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(n)}})}error(n){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;let{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){let{hasError:r,isStopped:o,observers:i}=this;return r||o?Wa:(this.currentObservers=null,i.push(n),new X(()=>{this.currentObservers=null,In(i,n)}))}_checkFinalizedStatuses(n){let{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){let n=new B;return n.source=this,n}}return e.create=(t,n)=>new zi(t,n),e})(),zi=class extends le{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.next)===null||r===void 0||r.call(n,t)}error(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.error)===null||r===void 0||r.call(n,t)}complete(){var t,n;(n=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||n===void 0||n.call(t)}_subscribe(t){var n,r;return(r=(n=this.source)===null||n===void 0?void 0:n.subscribe(t))!==null&&r!==void 0?r:Wa}};var Eo=class extends le{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){let n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){let{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}};var _o={now(){return(_o.delegate||Date).now()},delegate:void 0};var Co=class extends le{constructor(t=1/0,n=1/0,r=_o){super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n)}next(t){let{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=this;n||(r.push(t),!o&&r.push(i.now()+s)),this._trimBuffer(),super.next(t)}_subscribe(t){this._throwIfClosed(),this._trimBuffer();let n=this._innerSubscribe(t),{_infiniteTimeWindow:r,_buffer:o}=this,i=o.slice();for(let s=0;sVh(t)&&e()),t},clearImmediate(e){Vh(e)}};var{setImmediate:dD,clearImmediate:fD}=Hh,xo={setImmediate(...e){let{delegate:t}=xo;return(t?.setImmediate||dD)(...e)},clearImmediate(e){let{delegate:t}=xo;return(t?.clearImmediate||fD)(e)},delegate:void 0};var Gi=class extends tn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=xo.setImmediate(t.flush.bind(t,void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(xo.clearImmediate(n),t._scheduled===n&&(t._scheduled=void 0))}};var vr=class e{constructor(t,n=e.now){this.schedulerActionCtor=t,this.now=n}schedule(t,n=0,r){return new this.schedulerActionCtor(this,t).schedule(r,n)}};vr.now=_o.now;var nn=class extends vr{constructor(t,n=vr.now){super(t,n),this.actions=[],this._active=!1}flush(t){let{actions:n}=this;if(this._active){n.push(t);return}let r;this._active=!0;do if(r=t.execute(t.state,t.delay))break;while(t=n.shift());if(this._active=!1,r){for(;t=n.shift();)t.unsubscribe();throw r}}};var Wi=class extends nn{flush(t){this._active=!0;let n=this._scheduled;this._scheduled=void 0;let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var pD=new Wi(Gi);var Dr=new nn(tn),oc=Dr;var Zi=class extends tn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=br.requestAnimationFrame(()=>t.flush(void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&n===t._scheduled&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(br.cancelAnimationFrame(n),t._scheduled=void 0)}};var Yi=class extends nn{flush(t){this._active=!0;let n;t?n=t.id:(n=this._scheduled,this._scheduled=void 0);let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var hD=new Yi(Zi);var St=new B(e=>e.complete());function Qi(e){return e&&k(e.schedule)}function ic(e){return e[e.length-1]}function rn(e){return k(ic(e))?e.pop():void 0}function ct(e){return Qi(ic(e))?e.pop():void 0}function $h(e,t){return typeof ic(e)=="number"?e.pop():t}function ZN(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var u=e.length-1;u>=0;u--)(s=e[u])&&(i=(o<3?s(i):o>3?s(t,n,i):s(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}function zh(e,t,n,r){function o(i){return i instanceof n?i:new n(function(s){s(i)})}return new(n||(n=Promise))(function(i,s){function u(l){try{c(r.next(l))}catch(d){s(d)}}function a(l){try{c(r.throw(l))}catch(d){s(d)}}function c(l){l.done?i(l.value):o(l.value).then(u,a)}c((r=r.apply(e,t||[])).next())})}function Uh(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Mn(e){return this instanceof Mn?(this.v=e,this):new Mn(e)}function qh(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),u("next"),u("throw"),u("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(p){return Promise.resolve(p).then(f,d)}}function u(f,p){r[f]&&(o[f]=function(g){return new Promise(function(m,y){i.push([f,g,m,y])>1||a(f,g)})},p&&(o[f]=p(o[f])))}function a(f,p){try{c(r[f](p))}catch(g){h(i[0][3],g)}}function c(f){f.value instanceof Mn?Promise.resolve(f.value.v).then(l,d):h(i[0][2],f)}function l(f){a("next",f)}function d(f){a("throw",f)}function h(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}function Gh(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Uh=="function"?Uh(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(u,a){s=e[i](s),o(u,a,s.done,s.value)})}}function o(i,s,u,a){Promise.resolve(a).then(function(c){i({value:c,done:u})},s)}}var Er=e=>e&&typeof e.length=="number"&&typeof e!="function";function Ki(e){return k(e?.then)}function Ji(e){return k(e[yr])}function Xi(e){return Symbol.asyncIterator&&k(e?.[Symbol.asyncIterator])}function es(e){return new TypeError(`You provided ${e!==null&&typeof e=="object"?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function gD(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var ts=gD();function ns(e){return k(e?.[ts])}function rs(e){return qh(this,arguments,function*(){let n=e.getReader();try{for(;;){let{value:r,done:o}=yield Mn(n.read());if(o)return yield Mn(void 0);yield yield Mn(r)}}finally{n.releaseLock()}})}function os(e){return k(e?.getReader)}function z(e){if(e instanceof B)return e;if(e!=null){if(Ji(e))return mD(e);if(Er(e))return yD(e);if(Ki(e))return bD(e);if(Xi(e))return Wh(e);if(ns(e))return vD(e);if(os(e))return DD(e)}throw es(e)}function mD(e){return new B(t=>{let n=e[yr]();if(k(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function yD(e){return new B(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,$i)})}function vD(e){return new B(t=>{for(let n of e)if(t.next(n),t.closed)return;t.complete()})}function Wh(e){return new B(t=>{ED(e,t).catch(n=>t.error(n))})}function DD(e){return Wh(rs(e))}function ED(e,t){var n,r,o,i;return zh(this,void 0,void 0,function*(){try{for(n=Gh(e);r=yield n.next(),!r.done;){let s=r.value;if(t.next(s),t.closed)return}}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})}function Se(e,t,n,r=0,o=!1){let i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function Io(e,t=0){return j((n,r)=>{n.subscribe(R(r,o=>Se(r,e,()=>r.next(o),t),()=>Se(r,e,()=>r.complete(),t),o=>Se(r,e,()=>r.error(o),t)))})}function is(e,t=0){return j((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function Zh(e,t){return z(e).pipe(is(t),Io(t))}function Yh(e,t){return z(e).pipe(is(t),Io(t))}function Qh(e,t){return new B(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function Kh(e,t){return new B(n=>{let r;return Se(n,t,()=>{r=e[ts](),Se(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){n.error(s);return}i?n.complete():n.next(o)},0,!0)}),()=>k(r?.return)&&r.return()})}function ss(e,t){if(!e)throw new Error("Iterable cannot be null");return new B(n=>{Se(n,t,()=>{let r=e[Symbol.asyncIterator]();Se(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function Jh(e,t){return ss(rs(e),t)}function Xh(e,t){if(e!=null){if(Ji(e))return Zh(e,t);if(Er(e))return Qh(e,t);if(Ki(e))return Yh(e,t);if(Xi(e))return ss(e,t);if(ns(e))return Kh(e,t);if(os(e))return Jh(e,t)}throw es(e)}function lt(e,t){return t?Xh(e,t):z(e)}function us(...e){let t=ct(e);return lt(e,t)}function _D(e,t){let n=k(e)?e:()=>e,r=o=>o.error(n());return new B(t?o=>t.schedule(r,0,o):r)}function CD(e){return!!e&&(e instanceof B||k(e.lift)&&k(e.subscribe))}var An=hr(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function sc(e,t){let n=typeof t=="object";return new Promise((r,o)=>{let i=new Ze({next:s=>{r(s),i.unsubscribe()},error:o,complete:()=>{n?r(t.defaultValue):o(new An)}});e.subscribe(i)})}function e0(e){return e instanceof Date&&!isNaN(e)}function Ee(e,t){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>{r.next(e.call(t,i,o++))}))})}var{isArray:wD}=Array;function xD(e,t){return wD(t)?e(...t):e(t)}function _r(e){return Ee(t=>xD(e,t))}var{isArray:ID}=Array,{getPrototypeOf:TD,prototype:SD,keys:MD}=Object;function as(e){if(e.length===1){let t=e[0];if(ID(t))return{args:t,keys:null};if(AD(t)){let n=MD(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}function AD(e){return e&&typeof e=="object"&&TD(e)===SD}function cs(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}function ND(...e){let t=ct(e),n=rn(e),{args:r,keys:o}=as(e);if(r.length===0)return lt([],t);let i=new B(kD(r,t,o?s=>cs(o,s):De));return n?i.pipe(_r(n)):i}function kD(e,t,n=De){return r=>{t0(t,()=>{let{length:o}=e,i=new Array(o),s=o,u=o;for(let a=0;a{let c=lt(e[a],t),l=!1;c.subscribe(R(r,d=>{i[a]=d,l||(l=!0,u--),u||r.next(n(i.slice()))},()=>{--s||r.complete()}))},r)},r)}}function t0(e,t,n){e?Se(n,e,t):t()}function n0(e,t,n,r,o,i,s,u){let a=[],c=0,l=0,d=!1,h=()=>{d&&!a.length&&!c&&t.complete()},f=g=>c{i&&t.next(g),c++;let m=!1;z(n(g,l++)).subscribe(R(t,y=>{o?.(y),i?f(y):t.next(y)},()=>{m=!0},void 0,()=>{if(m)try{for(c--;a.length&&cp(y)):p(y)}h()}catch(y){t.error(y)}}))};return e.subscribe(R(t,f,()=>{d=!0,h()})),()=>{u?.()}}function Mt(e,t,n=1/0){return k(t)?Mt((r,o)=>Ee((i,s)=>t(r,i,o,s))(z(e(r,o))),n):(typeof t=="number"&&(n=t),j((r,o)=>n0(r,o,e,n)))}function To(e=1/0){return Mt(De,e)}function r0(){return To(1)}function ls(...e){return r0()(lt(e,ct(e)))}function RD(e){return new B(t=>{z(e()).subscribe(t)})}function FD(...e){let t=rn(e),{args:n,keys:r}=as(e),o=new B(i=>{let{length:s}=n;if(!s){i.complete();return}let u=new Array(s),a=s,c=s;for(let l=0;l{d||(d=!0,c--),u[l]=h},()=>a--,void 0,()=>{(!a||!d)&&(c||i.next(r?cs(r,u):u),i.complete())}))}});return t?o.pipe(_r(t)):o}var OD=["addListener","removeListener"],PD=["addEventListener","removeEventListener"],LD=["on","off"];function uc(e,t,n,r){if(k(n)&&(r=n,n=void 0),r)return uc(e,t,n).pipe(_r(r));let[o,i]=VD(e)?PD.map(s=>u=>e[s](t,u,n)):jD(e)?OD.map(o0(e,t)):BD(e)?LD.map(o0(e,t)):[];if(!o&&Er(e))return Mt(s=>uc(s,t,n))(z(e));if(!o)throw new TypeError("Invalid event target");return new B(s=>{let u=(...a)=>s.next(1i(u)})}function o0(e,t){return n=>r=>e[n](t,r)}function jD(e){return k(e.addListener)&&k(e.removeListener)}function BD(e){return k(e.on)&&k(e.off)}function VD(e){return k(e.addEventListener)&&k(e.removeEventListener)}function ac(e=0,t,n=oc){let r=-1;return t!=null&&(Qi(t)?n=t:r=t),new B(o=>{let i=e0(e)?+e-n.now():e;i<0&&(i=0);let s=0;return n.schedule(function(){o.closed||(o.next(s++),0<=r?this.schedule(void 0,r):o.complete())},i)})}function HD(...e){let t=ct(e),n=$h(e,1/0),r=e;return r.length?r.length===1?z(r[0]):To(n)(lt(r,t)):St}var $D=new B(Tt);var{isArray:UD}=Array;function i0(e){return e.length===1&&UD(e[0])?e[0]:e}function on(e,t){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>e.call(t,i,o++)&&r.next(i)))})}function zD(...e){let t=rn(e),n=i0(e);return n.length?new B(r=>{let o=n.map(()=>[]),i=n.map(()=>!1);r.add(()=>{o=i=null});for(let s=0;!r.closed&&s{if(o[s].push(u),o.every(a=>a.length)){let a=o.map(c=>c.shift());r.next(t?t(...a):a),o.some((c,l)=>!c.length&&i[l])&&r.complete()}},()=>{i[s]=!0,!o[s].length&&r.complete()}));return()=>{o=i=null}}):St}function s0(e){return j((t,n)=>{let r=!1,o=null,i=null,s=!1,u=()=>{if(i?.unsubscribe(),i=null,r){r=!1;let c=o;o=null,n.next(c)}s&&n.complete()},a=()=>{i=null,s&&n.complete()};t.subscribe(R(n,c=>{r=!0,o=c,i||z(e(c)).subscribe(i=R(n,u,a))},()=>{s=!0,(!r||!i||i.closed)&&n.complete()}))})}function qD(e,t=Dr){return s0(()=>ac(e,t))}function cc(e){return j((t,n)=>{let r=null,o=!1,i;r=t.subscribe(R(n,void 0,void 0,s=>{i=z(e(s,cc(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function lc(e,t){return k(t)?Mt(e,t,1):Mt(e,1)}function u0(e,t=Dr){return j((n,r)=>{let o=null,i=null,s=null,u=()=>{if(o){o.unsubscribe(),o=null;let c=i;i=null,r.next(c)}};function a(){let c=s+e,l=t.now();if(l{i=c,s=t.now(),o||(o=t.schedule(a,e),r.add(o))},()=>{u(),r.complete()},void 0,()=>{i=o=null}))})}function a0(e){return j((t,n)=>{let r=!1;t.subscribe(R(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function dc(e){return e<=0?()=>St:j((t,n)=>{let r=0;t.subscribe(R(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function GD(e){return Ee(()=>e)}function c0(e,t=De){return e=e??WD,j((n,r)=>{let o,i=!0;n.subscribe(R(r,s=>{let u=t(s);(i||!e(o,u))&&(i=!1,o=u,r.next(s))}))})}function WD(e,t){return e===t}function l0(e=ZD){return j((t,n)=>{let r=!1;t.subscribe(R(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function ZD(){return new An}function ds(e){return j((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}function YD(e,t){let n=arguments.length>=2;return r=>r.pipe(e?on((o,i)=>e(o,i,r)):De,dc(1),n?a0(t):l0(()=>new An))}function QD(e){return e<=0?()=>St:j((t,n)=>{let r=[];t.subscribe(R(n,o=>{r.push(o),e{for(let o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function d0(){return j((e,t)=>{let n,r=!1;e.subscribe(R(t,o=>{let i=n;n=o,r&&t.next([i,o]),r=!0}))})}function fs(e={}){let{connector:t=()=>new le,resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s,u,a,c=0,l=!1,d=!1,h=()=>{u?.unsubscribe(),u=void 0},f=()=>{h(),s=a=void 0,l=d=!1},p=()=>{let g=s;f(),g?.unsubscribe()};return j((g,m)=>{c++,!d&&!l&&h();let y=a=a??t();m.add(()=>{c--,c===0&&!d&&!l&&(u=fc(p,o))}),y.subscribe(m),!s&&c>0&&(s=new Ze({next:v=>y.next(v),error:v=>{d=!0,h(),u=fc(f,n,v),y.error(v)},complete:()=>{l=!0,h(),u=fc(f,r),y.complete()}}),z(g).subscribe(s))})(i)}}function fc(e,t,...n){if(t===!0){e();return}if(t===!1)return;let r=new Ze({next:()=>{r.unsubscribe(),e()}});return z(t(...n)).subscribe(r)}function f0(e,t,n){let r,o=!1;return e&&typeof e=="object"?{bufferSize:r=1/0,windowTime:t=1/0,refCount:o=!1,scheduler:n}=e:r=e??1/0,fs({connector:()=>new Co(r,t,n),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:o})}function p0(e){return on((t,n)=>e<=n)}function h0(...e){let t=ct(e);return j((n,r)=>{(t?ls(e,n,t):ls(e,n)).subscribe(r)})}function ps(e,t){return j((n,r)=>{let o=null,i=0,s=!1,u=()=>s&&!o&&r.complete();n.subscribe(R(r,a=>{o?.unsubscribe();let c=0,l=i++;z(e(a,l)).subscribe(o=R(r,d=>r.next(t?t(a,d,l,c++):d),()=>{o=null,u()}))},()=>{s=!0,u()}))})}function KD(e){return j((t,n)=>{z(e).subscribe(R(n,()=>n.complete(),Tt)),!n.closed&&t.subscribe(n)})}function JD(e,t=!1){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>{let s=e(i,o++);(s||t)&&r.next(i),!s&&r.complete()}))})}function g0(e,t,n){let r=k(e)||t||n?{next:e,error:t,complete:n}:e;return r?j((o,i)=>{var s;(s=r.subscribe)===null||s===void 0||s.call(r);let u=!0;o.subscribe(R(i,a=>{var c;(c=r.next)===null||c===void 0||c.call(r,a),i.next(a)},()=>{var a;u=!1,(a=r.complete)===null||a===void 0||a.call(r),i.complete()},a=>{var c;u=!1,(c=r.error)===null||c===void 0||c.call(r,a),i.error(a)},()=>{var a,c;u&&((a=r.unsubscribe)===null||a===void 0||a.call(r)),(c=r.finalize)===null||c===void 0||c.call(r)}))}):De}function XD(...e){let t=rn(e);return j((n,r)=>{let o=e.length,i=new Array(o),s=e.map(()=>!1),u=!1;for(let a=0;a{i[a]=c,!u&&!s[a]&&(s[a]=!0,(u=s.every(De))&&(s=null))},Tt));n.subscribe(R(r,a=>{if(u){let c=[a,...i];r.next(t?t(...c):c)}}))})}var pc;function hs(){return pc}function dt(e){let t=pc;return pc=e,t}var m0=Symbol("NotFound");function Cr(e){return e===m0||e?.name==="\u0275NotFound"}function hc(e,t,n){let r=Object.create(eE);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(wn(r),Jt(r),r.value===xt)throw r.error;return r.value};return i[ne]=r,yo(r),i}function y0(e,t){wn(e),xn(e,t),dr(e)}function b0(e,t){wn(e),Bi(e,t),dr(e)}var eE=P(S({},Kt),{value:Qt,dirty:!0,error:null,equal:bo,kind:"linkedSignal",producerMustRecompute(e){return e.value===Qt||e.value===Cn},producerRecomputeValue(e){if(e.value===Cn)throw new Error("");let t=e.value;e.value=Cn;let n=It(e),r;try{let o=e.source(),i=t===Qt||t===xt?void 0:{source:e.sourceValue,value:t};r=e.computation(o,i),e.sourceValue=o}catch(o){r=xt,e.error=o}finally{Xt(e,n)}if(t!==Qt&&r!==xt&&e.equal(t,r)){e.value=t;return}e.value=r,e.version++}});var Es="https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss",_=class extends Error{code;constructor(t,n){super(pt(t,n)),this.code=t}};function tE(e){return`NG0${Math.abs(e)}`}function pt(e,t){return`${tE(e)}${t?": "+t:""}`}var xe=globalThis;function G(e){for(let t in e)if(e[t]===G)return t;throw Error("")}function C0(e,t){for(let n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function kt(e){if(typeof e=="string")return e;if(Array.isArray(e))return`[${e.map(kt).join(", ")}]`;if(e==null)return""+e;let t=e.overriddenName||e.name;if(t)return`${t}`;let n=e.toString();if(n==null)return""+n;let r=n.indexOf(` -`);return r>=0?n.slice(0,r):n}function _s(e,t){return e?t?`${e} ${t}`:e:t||""}var nE=G({__forward_ref__:G});function Cs(e){return e.__forward_ref__=Cs,e.toString=function(){return kt(this())},e}function ue(e){return Tc(e)?e():e}function Tc(e){return typeof e=="function"&&e.hasOwnProperty(nE)&&e.__forward_ref__===Cs}function I(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function ht(e){return{providers:e.providers||[],imports:e.imports||[]}}function Fo(e){return oE(e,ws)}function rE(e){return Fo(e)!==null}function oE(e,t){return e.hasOwnProperty(t)&&e[t]||null}function iE(e){let t=e?.[ws]??null;return t||null}function mc(e){return e&&e.hasOwnProperty(ms)?e[ms]:null}var ws=G({\u0275prov:G}),ms=G({\u0275inj:G}),x=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(t,n){this._desc=t,this.\u0275prov=void 0,typeof n=="number"?this.__NG_ELEMENT_ID__=n:n!==void 0&&(this.\u0275prov=I({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Sc(e){return e&&!!e.\u0275providers}var Mc=G({\u0275cmp:G}),Ac=G({\u0275dir:G}),Nc=G({\u0275pipe:G}),kc=G({\u0275mod:G}),Mo=G({\u0275fac:G}),On=G({__NG_ELEMENT_ID__:G}),v0=G({__NG_ENV_ID__:G});function Rc(e){return Is(e,"@NgModule"),e[kc]||null}function gt(e){return Is(e,"@Component"),e[Mc]||null}function xs(e){return Is(e,"@Directive"),e[Ac]||null}function w0(e){return Is(e,"@Pipe"),e[Nc]||null}function Is(e,t){if(e==null)throw new _(-919,!1)}function Ne(e){return typeof e=="string"?e:e==null?"":String(e)}function x0(e){return typeof e=="function"?e.name||e.toString():typeof e=="object"&&e!=null&&typeof e.type=="function"?e.type.name||e.type.toString():Ne(e)}var I0=G({ngErrorCode:G}),sE=G({ngErrorMessage:G}),uE=G({ngTokenPath:G});function Fc(e,t){return T0("",-200,t)}function Ts(e,t){throw new _(-201,!1)}function T0(e,t,n){let r=new _(t,e);return r[I0]=t,r[sE]=e,n&&(r[uE]=n),r}function aE(e){return e[I0]}var yc;function S0(){return yc}function _e(e){let t=yc;return yc=e,t}function Oc(e,t,n){let r=Fo(e);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Ts(e,"")}var cE={},Nn=cE,lE="__NG_DI_FLAG__",bc=class{injector;constructor(t){this.injector=t}retrieve(t,n){let r=kn(n)||0;try{return this.injector.get(t,r&8?null:Nn,r)}catch(o){if(Cr(o))return o;throw o}}};function dE(e,t=0){let n=hs();if(n===void 0)throw new _(-203,!1);if(n===null)return Oc(e,void 0,t);{let r=fE(t),o=n.retrieve(e,r);if(Cr(o)){if(r.optional)return null;throw o}return o}}function A(e,t=0){return(S0()||dE)(ue(e),t)}function b(e,t){return A(e,kn(t))}function kn(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function fE(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function vc(e){let t=[];for(let n=0;nArray.isArray(n)?Ss(n,t):t(n))}function Pc(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Oo(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function N0(e,t){let n=[];for(let r=0;rt;){let i=o-2;e[o]=e[i],o--}e[t]=n,e[t+1]=r}}function Po(e,t,n){let r=xr(e,t);return r>=0?e[r|1]=n:(r=~r,k0(e,r,t,n)),r}function Ms(e,t){let n=xr(e,t);if(n>=0)return e[n|1]}function xr(e,t){return hE(e,t,1)}function hE(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){let i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<{n.push(s)};return Ss(t,s=>{let u=s;ys(u,i,[],r)&&(o||=[],o.push(u))}),o!==void 0&&F0(o,i),n}function F0(e,t){for(let n=0;n{t(i,r)})}}function ys(e,t,n,r){if(e=ue(e),!e)return!1;let o=null,i=mc(e),s=!i&>(e);if(!i&&!s){let a=e.ngModule;if(i=mc(a),i)o=a;else return!1}else{if(s&&!s.standalone)return!1;o=e}let u=r.has(o);if(s){if(u)return!1;if(r.add(o),s.dependencies){let a=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let c of a)ys(c,t,n,r)}}else if(i){if(i.imports!=null&&!u){r.add(o);let c;Ss(i.imports,l=>{ys(l,t,n,r)&&(c||=[],c.push(l))}),c!==void 0&&F0(c,t)}if(!u){let c=sn(o)||(()=>new o);t({provide:o,useFactory:c,deps:ye},o),t({provide:jc,useValue:o,multi:!0},o),t({provide:Ir,useValue:()=>A(o),multi:!0},o)}let a=i.providers;if(a!=null&&!u){let c=e;Vc(a,l=>{t(l,c)})}}else return!1;return o!==e&&e.providers!==void 0}function Vc(e,t){for(let n of e)Sc(n)&&(n=n.\u0275providers),Array.isArray(n)?Vc(n,t):t(n)}var gE=G({provide:String,useValue:G});function O0(e){return e!==null&&typeof e=="object"&&gE in e}function mE(e){return!!(e&&e.useExisting)}function yE(e){return!!(e&&e.useFactory)}function Rn(e){return typeof e=="function"}function P0(e){return!!e.useClass}var Lo=new x(""),gs={},D0={},gc;function Tr(){return gc===void 0&&(gc=new Ao),gc}var Ce=class{},Fn=class extends Ce{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,Ec(t,s=>this.processProvider(s)),this.records.set(Lc,wr(void 0,this)),o.has("environment")&&this.records.set(Ce,wr(void 0,this));let i=this.records.get(Lo);i!=null&&typeof i.value=="string"&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(jc,ye,{self:!0}))}retrieve(t,n){let r=kn(n)||0;try{return this.get(t,Nn,r)}catch(o){if(Cr(o))return o;throw o}}destroy(){So(this),this._destroyed=!0;let t=M(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let n=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of n)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),M(t)}}onDestroy(t){return So(this),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){So(this);let n=dt(this),r=_e(void 0),o;try{return t()}finally{dt(n),_e(r)}}get(t,n=Nn,r){if(So(this),t.hasOwnProperty(v0))return t[v0](this);let o=kn(r),i,s=dt(this),u=_e(void 0);try{if(!(o&4)){let c=this.records.get(t);if(c===void 0){let l=_E(t)&&Fo(t);l&&this.injectableDefInScope(l)?c=wr(Dc(t),gs):c=null,this.records.set(t,c)}if(c!=null)return this.hydrate(t,c,o)}let a=o&2?Tr():this.parent;return n=o&8&&n===Nn?null:n,a.get(t,n)}catch(a){let c=aE(a);throw c===-200||c===-201?new _(c,null):a}finally{_e(u),dt(s)}}resolveInjectorInitializers(){let t=M(null),n=dt(this),r=_e(void 0),o;try{let i=this.get(Ir,ye,{self:!0});for(let s of i)s()}finally{dt(n),_e(r),M(t)}}toString(){let t=[],n=this.records;for(let r of n.keys())t.push(kt(r));return`R3Injector[${t.join(", ")}]`}processProvider(t){t=ue(t);let n=Rn(t)?t:ue(t&&t.provide),r=vE(t);if(!Rn(t)&&t.multi===!0){let o=this.records.get(n);o||(o=wr(void 0,gs,!0),o.factory=()=>vc(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n,r){let o=M(null);try{if(n.value===D0)throw Fc(kt(t));return n.value===gs&&(n.value=D0,n.value=n.factory(void 0,r)),typeof n.value=="object"&&n.value&&EE(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}finally{M(o)}}injectableDefInScope(t){if(!t.providedIn)return!1;let n=ue(t.providedIn);return typeof n=="string"?n==="any"||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){let n=this._onDestroyHooks.indexOf(t);n!==-1&&this._onDestroyHooks.splice(n,1)}};function Dc(e){let t=Fo(e),n=t!==null?t.factory:sn(e);if(n!==null)return n;if(e instanceof x)throw new _(204,!1);if(e instanceof Function)return bE(e);throw new _(204,!1)}function bE(e){if(e.length>0)throw new _(204,!1);let n=iE(e);return n!==null?()=>n.factory(e):()=>new e}function vE(e){if(O0(e))return wr(void 0,e.useValue);{let t=Hc(e);return wr(t,gs)}}function Hc(e,t,n){let r;if(Rn(e)){let o=ue(e);return sn(o)||Dc(o)}else if(O0(e))r=()=>ue(e.useValue);else if(yE(e))r=()=>e.useFactory(...vc(e.deps||[]));else if(mE(e))r=(o,i)=>A(ue(e.useExisting),i!==void 0&&i&8?8:void 0);else{let o=ue(e&&(e.useClass||e.provide));if(DE(e))r=()=>new o(...vc(e.deps));else return sn(o)||Dc(o)}return r}function So(e){if(e.destroyed)throw new _(205,!1)}function wr(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function DE(e){return!!e.deps}function EE(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function _E(e){return typeof e=="function"||typeof e=="object"&&e.ngMetadataName==="InjectionToken"}function Ec(e,t){for(let n of e)Array.isArray(n)?Ec(n,t):n&&Sc(n)?Ec(n.\u0275providers,t):t(n)}function Sr(e,t){let n;e instanceof Fn?(So(e),n=e):n=new bc(e);let r,o=dt(n),i=_e(void 0);try{return t()}finally{dt(o),_e(i)}}function As(){return S0()!==void 0||hs()!=null}function CE(e){if(!As())throw new _(-203,!1)}var Qe=0,T=1,L=2,ae=3,He=4,Ie=5,Ln=6,Mr=7,ee=8,Rt=9,mt=10,Z=11,Ar=12,$c=13,jn=14,ve=15,cn=16,Bn=17,yt=18,Ft=19,Uc=20,Nt=21,Ns=22,un=23,ke=24,Vn=25,Hn=26,Q=27,L0=1,zc=6,ln=7,jo=8,$n=9,te=10;function bt(e){return Array.isArray(e)&&typeof e[L0]=="object"}function Ke(e){return Array.isArray(e)&&e[L0]===!0}function qc(e){return(e.flags&4)!==0}function Ot(e){return e.componentOffset>-1}function Nr(e){return(e.flags&1)===1}function Je(e){return!!e.template}function kr(e){return(e[L]&512)!==0}function Un(e){return(e[L]&256)===256}var Gc="svg",j0="math";function $e(e){for(;Array.isArray(e);)e=e[Qe];return e}function Wc(e,t){return $e(t[e])}function Ue(e,t){return $e(t[e.index])}function Bo(e,t){return e.data[t]}function Vo(e,t){return e[t]}function Ho(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function Re(e,t){let n=t[e];return bt(n)?n:n[Qe]}function B0(e){return(e[L]&4)===4}function ks(e){return(e[L]&128)===128}function V0(e){return Ke(e[ae])}function Fe(e,t){return t==null?null:e[t]}function Zc(e){e[Bn]=0}function Yc(e){e[L]&1024||(e[L]|=1024,ks(e)&&zn(e))}function H0(e,t){for(;e>0;)t=t[jn],e--;return t}function $o(e){return!!(e[L]&9216||e[ke]?.dirty)}function Rs(e){e[mt].changeDetectionScheduler?.notify(8),e[L]&64&&(e[L]|=1024),$o(e)&&zn(e)}function zn(e){e[mt].changeDetectionScheduler?.notify(0);let t=an(e);for(;t!==null&&!(t[L]&8192||(t[L]|=8192,!ks(t)));)t=an(t)}function Qc(e,t){if(Un(e))throw new _(911,!1);e[Nt]===null&&(e[Nt]=[]),e[Nt].push(t)}function $0(e,t){if(e[Nt]===null)return;let n=e[Nt].indexOf(t);n!==-1&&e[Nt].splice(n,1)}function an(e){let t=e[ae];return Ke(t)?t[ae]:t}function Kc(e){return e[Mr]??=[]}function Jc(e){return e.cleanup??=[]}function U0(e,t,n,r){let o=Kc(t);o.push(n),e.firstCreatePass&&Jc(e).push(r,o.length-1)}var V={lFrame:tg(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var _c=!1;function z0(){return V.lFrame.elementDepthCount}function q0(){V.lFrame.elementDepthCount++}function Xc(){V.lFrame.elementDepthCount--}function Fs(){return V.bindingsEnabled}function el(){return V.skipHydrationRootTNode!==null}function tl(e){return V.skipHydrationRootTNode===e}function nl(){V.skipHydrationRootTNode=null}function C(){return V.lFrame.lView}function Y(){return V.lFrame.tView}function G0(e){return V.lFrame.contextLView=e,e[ee]}function W0(e){return V.lFrame.contextLView=null,e}function re(){let e=rl();for(;e!==null&&e.type===64;)e=e.parent;return e}function rl(){return V.lFrame.currentTNode}function Z0(){let e=V.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function qn(e,t){let n=V.lFrame;n.currentTNode=e,n.isParent=t}function ol(){return V.lFrame.isParent}function il(){V.lFrame.isParent=!1}function sl(){return V.lFrame.contextLView}function ul(){return _c}function No(e){let t=_c;return _c=e,t}function Rr(){let e=V.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function al(){return V.lFrame.bindingIndex}function Y0(e){return V.lFrame.bindingIndex=e}function Xe(){return V.lFrame.bindingIndex++}function Uo(e){let t=V.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function Q0(){return V.lFrame.inI18n}function K0(e,t){let n=V.lFrame;n.bindingIndex=n.bindingRootIndex=e,Os(t)}function J0(){return V.lFrame.currentDirectiveIndex}function Os(e){V.lFrame.currentDirectiveIndex=e}function X0(e){let t=V.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function Ps(){return V.lFrame.currentQueryIndex}function zo(e){V.lFrame.currentQueryIndex=e}function wE(e){let t=e[T];return t.type===2?t.declTNode:t.type===1?e[Ie]:null}function cl(e,t,n){if(n&4){let o=t,i=e;for(;o=o.parent,o===null&&!(n&1);)if(o=wE(i),o===null||(i=i[jn],o.type&10))break;if(o===null)return!1;t=o,e=i}let r=V.lFrame=eg();return r.currentTNode=t,r.lView=e,!0}function Ls(e){let t=eg(),n=e[T];V.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function eg(){let e=V.lFrame,t=e===null?null:e.child;return t===null?tg(e):t}function tg(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function ng(){let e=V.lFrame;return V.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var ll=ng;function js(){let e=ng();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function rg(e){return(V.lFrame.contextLView=H0(e,V.lFrame.contextLView))[ee]}function ze(){return V.lFrame.selectedIndex}function dn(e){V.lFrame.selectedIndex=e}function fn(){let e=V.lFrame;return Bo(e.tView,e.selectedIndex)}function og(){V.lFrame.currentNamespace=Gc}function ig(){xE()}function xE(){V.lFrame.currentNamespace=null}function sg(){return V.lFrame.currentNamespace}var ug=!0;function Bs(){return ug}function qo(e){ug=e}function Cc(e,t=null,n=null,r){let o=dl(e,t,n,r);return o.resolveInjectorInitializers(),o}function dl(e,t=null,n=null,r,o=new Set){let i=[n||ye,R0(e)];return r=r||(typeof e=="object"?void 0:kt(e)),new Fn(i,t||Tr(),r||null,o)}var we=class e{static THROW_IF_NOT_FOUND=Nn;static NULL=new Ao;static create(t,n){if(Array.isArray(t))return Cc({name:""},n,t,"");{let r=t.name??"";return Cc({name:r},t.parent,t.providers,r)}}static \u0275prov=I({token:e,providedIn:"any",factory:()=>A(Lc)});static __NG_ELEMENT_ID__=-1},K=new x(""),Oe=(()=>{class e{static __NG_ELEMENT_ID__=IE;static __NG_ENV_ID__=n=>n}return e})(),bs=class extends Oe{_lView;constructor(t){super(),this._lView=t}get destroyed(){return Un(this._lView)}onDestroy(t){let n=this._lView;return Qc(n,t),()=>$0(n,t)}};function IE(){return new bs(C())}var ag=!1,cg=new x(""),Gn=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Eo(!1);debugTaskTracker=b(cg,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new B(n=>{n.next(!1),n.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let n=this.taskId++;return this.pendingTasks.add(n),this.debugTaskTracker?.add(n),n}has(n){return this.pendingTasks.has(n)}remove(n){this.pendingTasks.delete(n),this.debugTaskTracker?.remove(n),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),wc=class extends le{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(t=!1){super(),this.__isAsync=t,As()&&(this.destroyRef=b(Oe,{optional:!0})??void 0,this.pendingTasks=b(Gn,{optional:!0})??void 0)}emit(t){let n=M(null);try{super.next(t)}finally{M(n)}}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&typeof t=="object"){let a=t;o=a.next?.bind(a),i=a.error?.bind(a),s=a.complete?.bind(a)}this.__isAsync&&(i=this.wrapInTimeout(i),o&&(o=this.wrapInTimeout(o)),s&&(s=this.wrapInTimeout(s)));let u=super.subscribe({next:o,error:i,complete:s});return t instanceof X&&t.add(u),u}wrapInTimeout(t){return n=>{let r=this.pendingTasks?.add();setTimeout(()=>{try{t(n)}finally{r!==void 0&&this.pendingTasks?.remove(r)}})}}},At=wc;function vs(...e){}function fl(e){let t,n;function r(){e=vs;try{n!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame=="function"&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function lg(e){return queueMicrotask(()=>e()),()=>{e=vs}}var pl="isAngularZone",ko=pl+"_ID",TE=0,be=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new At(!1);onMicrotaskEmpty=new At(!1);onStable=new At(!1);onError=new At(!1);constructor(t){let{enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:o=!1,scheduleInRootZone:i=ag}=t;if(typeof Zone>"u")throw new _(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!o&&r,s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,AE(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(pl)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new _(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new _(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){let i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,SE,vs,vs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}},SE={};function hl(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function ME(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){fl(()=>{e.callbackScheduled=!1,xc(e),e.isCheckStableRunning=!0,hl(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),xc(e)}function AE(e){let t=()=>{ME(e)},n=TE++;e._inner=e._inner.fork({name:"angular",properties:{[pl]:!0,[ko]:n,[ko+n]:!0},onInvokeTask:(r,o,i,s,u,a)=>{if(NE(a))return r.invokeTask(i,s,u,a);try{return E0(e),r.invokeTask(i,s,u,a)}finally{(e.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&t(),_0(e)}},onInvoke:(r,o,i,s,u,a,c)=>{try{return E0(e),r.invoke(i,s,u,a,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!kE(a)&&t(),_0(e)}},onHasTask:(r,o,i,s)=>{r.hasTask(i,s),o===i&&(s.change=="microTask"?(e._hasPendingMicrotasks=s.microTask,xc(e),hl(e)):s.change=="macroTask"&&(e.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,o,i,s)=>(r.handleError(i,s),e.runOutsideAngular(()=>e.onError.emit(s)),!1)})}function xc(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function E0(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function _0(e){e._nesting--,hl(e)}var Ro=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new At;onMicrotaskEmpty=new At;onStable=new At;onError=new At;run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}};function NE(e){return dg(e,"__ignore_ng_zone__")}function kE(e){return dg(e,"__scheduler_tick__")}function dg(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Ve=class{_console=console;handleError(t){this._console.error("ERROR",t)}},Pt=new x("",{factory:()=>{let e=b(be),t=b(Ce),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Ve),n.handleError(r))})}}}),fg={provide:Ir,useValue:()=>{let e=b(Ve,{optional:!0})},multi:!0};function pn(e,t){let[n,r,o]=Ua(e,t?.equal),i=n,s=i[ne];return i.set=r,i.update=o,i.asReadonly=Go.bind(i),i}function Go(){let e=this[ne];if(e.readonlyFn===void 0){let t=()=>this();t[ne]=e,e.readonlyFn=t}return e.readonlyFn}var Fr=(()=>{class e{view;node;constructor(n,r){this.view=n,this.node=r}static __NG_ELEMENT_ID__=RE}return e})();function RE(){return new Fr(C(),re())}var ft=class{},Wo=new x("",{factory:()=>!0});var gl=new x(""),Wn=(()=>{class e{internalPendingTasks=b(Gn);scheduler=b(ft);errorHandler=b(Pt);add(){let n=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(n)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(n))}}run(n){let r=this.add();n().catch(this.errorHandler).finally(r)}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Vs=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new Ic})}return e})(),Ic=class{dirtyEffectCount=0;queues=new Map;add(t){this.enqueue(t),this.schedule(t)}schedule(t){t.dirty&&this.dirtyEffectCount++}remove(t){let n=t.zone,r=this.queues.get(n);r.has(t)&&(r.delete(t),t.dirty&&this.dirtyEffectCount--)}enqueue(t){let n=t.zone;this.queues.has(n)||this.queues.set(n,new Set);let r=this.queues.get(n);r.has(t)||r.add(t)}flush(){for(;this.dirtyEffectCount>0;){let t=!1;for(let[n,r]of this.queues)n===null?t||=this.flushQueue(r):t||=n.run(()=>this.flushQueue(r));t||(this.dirtyEffectCount=0)}}flushQueue(t){let n=!1;for(let r of t)r.dirty&&(this.dirtyEffectCount--,n=!0,r.run());return n}},Ds=class{[ne];constructor(t){this[ne]=t}destroy(){this[ne].destroy()}};function Zo(e,t){let n=t?.injector??b(we),r=t?.manualCleanup!==!0?n.get(Oe):null,o,i=n.get(Fr,null,{optional:!0}),s=n.get(ft);return i!==null?(o=PE(i.view,s,e),r instanceof bs&&r._lView===i.view&&(r=null)):o=LE(e,n.get(Vs),s),o.injector=n,r!==null&&(o.onDestroyFns=[r.onDestroy(()=>o.destroy())]),new Ds(o)}var pg=P(S({},qa),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=No(!1);try{Ga(this)}finally{No(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=M(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],M(e)}}}),FE=P(S({},pg),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}}),OE=P(S({},pg),{consumerMarkedDirty(){this.view[L]|=8192,zn(this.view),this.notifier.notify(13)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[un]?.delete(this)}});function PE(e,t,n){let r=Object.create(OE);return r.view=e,r.zone=typeof Zone<"u"?Zone.current:null,r.notifier=t,r.fn=hg(r,n),e[un]??=new Set,e[un].add(r),r.consumerMarkedDirty(r),r}function LE(e,t,n){let r=Object.create(FE);return r.fn=hg(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function hg(e,t){return()=>{t(n=>(e.cleanupFns??=[]).push(n))}}function de(e){return za(e)}function si(e){return{toString:e}.toString()}function zE(e){return typeof e=="function"}function Kg(e,t,n,r){t!==null?t.applyValueToInputSignal(t,r):e[n]=r}var Qs=class{previousValue;currentValue;firstChange;constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}},hu=(()=>{let e=()=>Jg;return e.ngInherit=!0,e})();function Jg(e){return e.type.prototype.ngOnChanges&&(e.setInput=GE),qE}function qE(){let e=em(this),t=e?.current;if(t){let n=e.previous;if(n===Ye)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function GE(e,t,n,r,o){let i=this.declaredInputs[r],s=em(e)||WE(e,{previous:Ye,current:null}),u=s.current||(s.current={}),a=s.previous,c=a[i];u[i]=new Qs(c&&c.currentValue,n,a===Ye),Kg(e,t,o,n)}var Xg="__ngSimpleChanges__";function em(e){return e[Xg]||null}function WE(e,t){return e[Xg]=t}var gg=[];var W=function(e,t=null,n){for(let r=0;r=r)break}else t[a]<0&&(e[Bn]+=65536),(u>14>16&&(e[L]&3)===t&&(e[L]+=16384,mg(u,i)):mg(u,i)}var Pr=-1,Yn=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r,o){this.factory=t,this.name=o,this.canSeeViewProviders=n,this.injectImpl=r}};function QE(e){return(e.flags&8)!==0}function KE(e){return(e.flags&16)!==0}function JE(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}function Js(e,t){let n=e_(e),r=t;for(;n>0;)r=r[jn],n--;return r}var Il=!0;function Xs(e){let t=Il;return Il=e,t}var t_=256,im=t_-1,sm=5,n_=0,vt={};function r_(e,t,n){let r;typeof n=="string"?r=n.charCodeAt(0)||0:n.hasOwnProperty(On)&&(r=n[On]),r==null&&(r=n[On]=n_++);let o=r&im,i=1<>sm)]|=i}function eu(e,t){let n=um(e,t);if(n!==-1)return n;let r=t[T];r.firstCreatePass&&(e.injectorIndex=t.length,yl(r.data,e),yl(t,null),yl(r.blueprint,null));let o=sd(e,t),i=e.injectorIndex;if(om(o)){let s=Ks(o),u=Js(o,t),a=u[T].data;for(let c=0;c<8;c++)t[i+c]=u[s+c]|a[s+c]}return t[i+8]=o,i}function yl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function um(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function sd(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;o!==null;){if(r=fm(o),r===null)return Pr;if(n++,o=o[jn],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Pr}function Tl(e,t,n){r_(e,t,n)}function o_(e,t){if(t==="class")return e.classes;if(t==="style")return e.styles;let n=e.attrs;if(n){let r=n.length,o=0;for(;o>20,d=r?u:u+l,h=o?u+l:c;for(let f=d;f=a&&p.type===n)return f}if(o){let f=s[a];if(f&&Je(f)&&f.type===n)return a}return null}function Ko(e,t,n,r,o){let i=e[n],s=t.data;if(i instanceof Yn){let u=i;if(u.resolving){let f=x0(s[n]);throw Fc(f)}let a=Xs(u.canSeeViewProviders);u.resolving=!0;let c=s[n].type||s[n],l,d=u.injectImpl?_e(u.injectImpl):null,h=cl(e,r,0);try{i=e[n]=u.factory(void 0,o,s,e,r),t.firstCreatePass&&n>=r.directiveStart&&ZE(n,s[n],t)}finally{d!==null&&_e(d),Xs(a),u.resolving=!1,ll()}}return i}function s_(e){if(typeof e=="string")return e.charCodeAt(0)||0;let t=e.hasOwnProperty(On)?e[On]:void 0;return typeof t=="number"?t>=0?t&im:u_:t}function bg(e,t,n){let r=1<>sm)]&r)}function vg(e,t){return!(e&2)&&!(e&1&&t)}var Zn=class{_tNode;_lView;constructor(t,n){this._tNode=t,this._lView=n}get(t,n,r){return lm(this._tNode,this._lView,t,kn(r),n)}};function u_(){return new Zn(re(),C())}function Ur(e){return si(()=>{let t=e.prototype.constructor,n=t[Mo]||Sl(t),r=Object.prototype,o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){let i=o[Mo]||Sl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Sl(e){return Tc(e)?()=>{let t=Sl(ue(e));return t&&t()}:sn(e)}function a_(e,t,n,r,o){let i=e,s=t;for(;i!==null&&s!==null&&s[L]&2048&&!kr(s);){let u=dm(i,s,n,r|2,vt);if(u!==vt)return u;let a=i.parent;if(!a){let c=s[Uc];if(c){let l=c.get(n,vt,r);if(l!==vt)return l}a=fm(s),s=s[jn]}i=a}return o}function fm(e){let t=e[T],n=t.type;return n===2?t.declTNode:n===1?e[Ie]:null}function ud(e){return o_(re(),e)}function c_(){return zr(re(),C())}function zr(e,t){return new jt(Ue(e,t))}var jt=(()=>{class e{nativeElement;constructor(n){this.nativeElement=n}static __NG_ELEMENT_ID__=c_}return e})();function pm(e){return e instanceof jt?e.nativeElement:e}function l_(){return this._results[Symbol.iterator]()}var tu=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new le}constructor(t=!1){this._emitDistinctChangesOnly=t}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;let r=A0(t);(this._changesDetected=!M0(this._results,r,n))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(t){this._onDirty=t}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=l_};function hm(e){return(e.flags&128)===128}var ad=(function(e){return e[e.OnPush=0]="OnPush",e[e.Default=1]="Default",e})(ad||{}),gm=new Map,d_=0;function f_(){return d_++}function p_(e){gm.set(e[Ft],e)}function Ml(e){gm.delete(e[Ft])}var Dg="__ngContext__";function jr(e,t){bt(t)?(e[Dg]=t[Ft],p_(t)):e[Dg]=t}function mm(e){return bm(e[Ar])}function ym(e){return bm(e[He])}function bm(e){for(;e!==null&&!Ke(e);)e=e[He];return e}var Al;function cd(e){Al=e}function vm(){if(Al!==void 0)return Al;if(typeof document<"u")return document;throw new _(210,!1)}var gu=new x("",{factory:()=>h_}),h_="ng";var mu=new x(""),Xn=new x("",{providedIn:"platform",factory:()=>"unknown"}),g_=new x(""),yu=new x("",{factory:()=>b(K).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var Dm="r";var Em="di";var _m=!1,Cm=new x("",{factory:()=>_m});var wm=new x("");var m_=(e,t,n,r)=>{};function y_(e,t,n,r){m_(e,t,n,r)}function bu(e){return(e.flags&32)===32}var b_=()=>null;function xm(e,t,n=!1){return b_(e,t,n)}function Im(e,t){let n=e.contentQueries;if(n!==null){let r=M(null);try{for(let o=0;oe,createScript:e=>e,createScriptURL:e=>e})}catch{}return Hs}function vu(e){return v_()?.createHTML(e)||e}var $s;function D_(){if($s===void 0&&($s=null,xe.trustedTypes))try{$s=xe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return $s}function Eg(e){return D_()?.createHTML(e)||e}var Lt=class{changingThisBreaksApplicationSecurity;constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Es})`}},kl=class extends Lt{getTypeName(){return"HTML"}},Rl=class extends Lt{getTypeName(){return"Style"}},Fl=class extends Lt{getTypeName(){return"Script"}},Ol=class extends Lt{getTypeName(){return"URL"}},Pl=class extends Lt{getTypeName(){return"ResourceURL"}};function Pe(e){return e instanceof Lt?e.changingThisBreaksApplicationSecurity:e}function Bt(e,t){let n=Tm(e);if(n!=null&&n!==t){if(n==="ResourceURL"&&t==="URL")return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Es})`)}return n===t}function Tm(e){return e instanceof Lt&&e.getTypeName()||null}function dd(e){return new kl(e)}function fd(e){return new Rl(e)}function pd(e){return new Fl(e)}function hd(e){return new Ol(e)}function gd(e){return new Pl(e)}function E_(e){let t=new jl(e);return __()?new Ll(t):t}var Ll=class{inertDocumentHelper;constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{let n=new window.DOMParser().parseFromString(vu(t),"text/html").body;return n===null?this.inertDocumentHelper.getInertBodyElement(t):(n.firstChild?.remove(),n)}catch{return null}}},jl=class{defaultDoc;inertDocument;constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){let n=this.inertDocument.createElement("template");return n.innerHTML=vu(t),n}};function __(){try{return!!new window.DOMParser().parseFromString(vu(""),"text/html")}catch{return!1}}var C_=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function ui(e){return e=String(e),e.match(C_)?e:"unsafe:"+e}function Vt(e){let t={};for(let n of e.split(","))t[n]=!0;return t}function ai(...e){let t={};for(let n of e)for(let r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}var Sm=Vt("area,br,col,hr,img,wbr"),Mm=Vt("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Am=Vt("rp,rt"),w_=ai(Am,Mm),x_=ai(Mm,Vt("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),I_=ai(Am,Vt("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),_g=ai(Sm,x_,I_,w_),Nm=Vt("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),T_=Vt("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),S_=Vt("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),M_=ai(Nm,T_,S_),A_=Vt("script,style,template"),Bl=class{sanitizedSomething=!1;buf=[];sanitizeChildren(t){let n=t.firstChild,r=!0,o=[];for(;n;){if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild){o.push(n),n=R_(n);continue}for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=k_(n);if(i){n=i;break}n=o.pop()}}return this.buf.join("")}startElement(t){let n=Cg(t).toLowerCase();if(!_g.hasOwnProperty(n))return this.sanitizedSomething=!0,!A_.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);let r=t.attributes;for(let o=0;o"),!0}endElement(t){let n=Cg(t).toLowerCase();_g.hasOwnProperty(n)&&!Sm.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(wg(t))}};function N_(e,t){return(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function k_(e){let t=e.nextSibling;if(t&&e!==t.previousSibling)throw km(t);return t}function R_(e){let t=e.firstChild;if(t&&N_(e,t))throw km(t);return t}function Cg(e){let t=e.nodeName;return typeof t=="string"?t:"FORM"}function km(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var F_=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O_=/([^\#-~ |!])/g;function wg(e){return e.replace(/&/g,"&").replace(F_,function(t){let n=t.charCodeAt(0),r=t.charCodeAt(1);return"&#"+((n-55296)*1024+(r-56320)+65536)+";"}).replace(O_,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}var Us;function Du(e,t){let n=null;try{Us=Us||E_(e);let r=t?String(t):"";n=Us.getInertBodyElement(r);let o=5,i=r;do{if(o===0)throw new Error("Failed to sanitize html because the input is unstable");o--,r=i,i=n.innerHTML,n=Us.getInertBodyElement(r)}while(r!==i);let u=new Bl().sanitizeChildren(xg(n)||n);return vu(u)}finally{if(n){let r=xg(n)||n;for(;r.firstChild;)r.firstChild.remove()}}}function xg(e){return"content"in e&&P_(e)?e.content:null}function P_(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var L_=/^>|^->||--!>|)/g,B_="\u200B$1\u200B";function V_(e){return e.replace(L_,t=>t.replace(j_,B_))}function H_(e,t){return e.createText(t)}function $_(e,t,n){e.setValue(t,n)}function U_(e,t){return e.createComment(V_(t))}function Rm(e,t,n){return e.createElement(t,n)}function nu(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Fm(e,t,n){e.appendChild(t,n)}function Ig(e,t,n,r,o){r!==null?nu(e,t,n,r,o):Fm(e,t,n)}function Om(e,t,n,r){e.removeChild(null,t,n,r)}function z_(e,t,n){e.setAttribute(t,"style",n)}function q_(e,t,n){n===""?e.removeAttribute(t,"class"):e.setAttribute(t,"class",n)}function Pm(e,t,n){let{mergedAttrs:r,classes:o,styles:i}=n;r!==null&&JE(e,t,r),o!==null&&q_(e,t,o),i!==null&&z_(e,t,i)}var Le=(function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e})(Le||{});function md(e){let t=Lm();return t?Eg(t.sanitize(Le.HTML,e)||""):Bt(e,"HTML")?Eg(Pe(e)):Du(vm(),Ne(e))}function G_(e){let t=Lm();return t?t.sanitize(Le.URL,e)||"":Bt(e,"URL")?Pe(e):ui(Ne(e))}function Lm(){let e=C();return e&&e[mt].sanitizer}function W_(e){return e.ownerDocument.defaultView}function Z_(e){return e.ownerDocument}function jm(e){return e instanceof Function?e():e}function Y_(e,t,n){let r=e.length;for(;;){let o=e.indexOf(t,n);if(o===-1)return o;if(o===0||e.charCodeAt(o-1)<=32){let i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}var Bm="ng-template";function Q_(e,t,n,r){let o=0;if(r){for(;o-1){let i;for(;++oi?d="":d=o[l+1].toLowerCase(),r&2&&c!==d){if(et(r))return!1;s=!0}}}}return et(r)||s}function et(e){return(e&1)===0}function X_(e,t,n,r){if(t===null)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else r&8?o+="."+s:r&4&&(o+=" "+s);else o!==""&&!et(s)&&(t+=Tg(i,o),o=""),r=s,i=i||!et(r);n++}return o!==""&&(t+=Tg(i,o)),t}function iC(e){return e.map(oC).join(",")}function sC(e){let t=[],n=[],r=1,o=2;for(;r{class e{impl=null;execute(){this.impl?.execute()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),_d=[0,1,2,3],Cd=(()=>{class e{ngZone=b(be);scheduler=b(ft);errorHandler=b(Ve,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){b(Dt,{optional:!0})}execute(){let n=this.sequences.size>0;n&&W(q.AfterRenderHooksStart),this.executing=!0;for(let r of _d)for(let o of this.sequences)if(!(o.erroredOrDestroyed||!o.hooks[r]))try{o.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let i=o.hooks[r];return i(o.pipelinedValue)},o.snapshot))}catch(i){o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(let r of this.sequences)r.afterRun(),r.once&&(this.sequences.delete(r),r.destroy());for(let r of this.deferredRegistrations)this.sequences.add(r);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),n&&W(q.AfterRenderHooksEnd)}register(n){let{view:r}=n;r!==void 0?((r[Vn]??=[]).push(n),zn(r),r[L]|=8192):this.executing?this.deferredRegistrations.add(n):this.addSequence(n)}addSequence(n){this.sequences.add(n),this.scheduler.notify(7)}unregister(n){this.executing&&this.sequences.has(n)?(n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(this.sequences.delete(n),this.deferredRegistrations.delete(n))}maybeTrace(n,r){return r?r.run(_u.AFTER_NEXT_RENDER,n):n()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Xo=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(t,n,r,o,i,s=null){this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let t=this.view?.[Vn];t&&(this.view[Vn]=t.filter(n=>n!==this))}};function dC(e,t){let n=t?.injector??b(we);return Ht("NgAfterNextRender"),pC(e,n,t,!0)}function fC(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function pC(e,t,n,r){let o=t.get(Cu);o.impl??=t.get(Cd);let i=t.get(Dt,null,{optional:!0}),s=n?.manualCleanup!==!0?t.get(Oe):null,u=t.get(Fr,null,{optional:!0}),a=new Xo(o.impl,fC(e),u?.view,r,s,i?.snapshot(null));return o.impl.register(a),a}var zm=new x("",{factory:()=>({queue:new Set,isScheduled:!1,scheduler:null,injector:b(Ce)})});function qm(e,t,n){let r=e.get(zm);if(Array.isArray(t))for(let o of t)r.queue.add(o),n?.detachedLeaveAnimationFns?.push(o);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function hC(e,t){let n=e.get(zm);if(t.detachedLeaveAnimationFns){for(let r of t.detachedLeaveAnimationFns)n.queue.delete(r);t.detachedLeaveAnimationFns=void 0}}function gC(e,t){for(let[n,r]of t)qm(e,r.animateFns)}function Mg(e,t,n,r){let o=e?.[Hn]?.enter;t!==null&&o&&o.has(n.index)&&gC(r,o)}function Or(e,t,n,r,o,i,s,u){if(o!=null){let a,c=!1;Ke(o)?a=o:bt(o)&&(c=!0,o=o[Qe]);let l=$e(o);e===0&&r!==null?(Mg(u,r,i,n),s==null?Fm(t,r,l):nu(t,r,l,s||null,!0)):e===1&&r!==null?(Mg(u,r,i,n),nu(t,r,l,s||null,!0)):e===2?Ag(u,i,n,d=>{Om(t,l,c,d)}):e===3&&Ag(u,i,n,()=>{t.destroyNode(l)}),a!=null&&IC(t,e,n,a,i,r,s)}}function mC(e,t){Gm(e,t),t[Qe]=null,t[Ie]=null}function yC(e,t,n,r,o,i){r[Qe]=o,r[Ie]=t,xu(e,r,n,1,o,i)}function Gm(e,t){t[mt].changeDetectionScheduler?.notify(9),xu(e,t,t[Z],2,null,null)}function bC(e){let t=e[Ar];if(!t)return bl(e[T],e);for(;t;){let n=null;if(bt(t))n=t[Ar];else{let r=t[te];r&&(n=r)}if(!n){for(;t&&!t[He]&&t!==e;)bt(t)&&bl(t[T],t),t=t[ae];t===null&&(t=e),bt(t)&&bl(t[T],t),n=t&&t[He]}t=n}}function wd(e,t){let n=e[$n],r=n.indexOf(t);n.splice(r,1)}function wu(e,t){if(Un(t))return;let n=t[Z];n.destroyNode&&xu(e,t,n,3,null,null),bC(t)}function bl(e,t){if(Un(t))return;let n=M(null);try{t[L]&=-129,t[L]|=256,t[ke]&&en(t[ke]),EC(e,t),DC(e,t),t[T].type===1&&t[Z].destroy();let r=t[cn];if(r!==null&&Ke(t[ae])){r!==t[ae]&&wd(r,t);let o=t[yt];o!==null&&o.detachView(e)}Ml(t)}finally{M(n)}}function Ag(e,t,n,r){let o=e?.[Hn];if(o==null||o.leave==null||!o.leave.has(t.index))return r(!1);e&&Qn.add(e[Ft]),qm(n,()=>{if(o.leave&&o.leave.has(t.index)){let s=o.leave.get(t.index),u=[];if(s){for(let a=0;a{e[Hn].running=void 0,Qn.delete(e[Ft]),t(!0)});return}t(!1)}function DC(e,t){let n=e.cleanup,r=t[Mr];if(n!==null)for(let s=0;s=0?r[u]():r[-u].unsubscribe(),s+=2}else{let u=r[n[s+1]];n[s].call(u)}r!==null&&(t[Mr]=null);let o=t[Nt];if(o!==null){t[Nt]=null;for(let s=0;sQ&&Um(e,t,Q,!1);let u=s?q.TemplateUpdateStart:q.TemplateCreateStart;W(u,o,n),n(r,o)}finally{dn(i);let u=s?q.TemplateUpdateEnd:q.TemplateCreateEnd;W(u,o,n)}}function Iu(e,t,n){kC(e,t,n),(n.flags&64)===64&&RC(e,t,n)}function ci(e,t,n=Ue){let r=t.localNames;if(r!==null){let o=t.index+1;for(let i=0;inull;function NC(e){return e==="class"?"className":e==="for"?"htmlFor":e==="formaction"?"formAction":e==="innerHtml"?"innerHTML":e==="readonly"?"readOnly":e==="tabindex"?"tabIndex":e}function Jm(e,t,n,r,o,i){let s=t[T];if(Tu(e,s,t,n,r)){Ot(e)&&ey(t,e.index);return}e.type&3&&(n=NC(n)),Xm(e,t,n,r,o,i)}function Xm(e,t,n,r,o,i){if(e.type&3){let s=Ue(e,t);r=i!=null?i(r,e.value||"",n):r,o.setProperty(s,n,r)}else e.type&12}function ey(e,t){let n=Re(t,e);n[L]&16||(n[L]|=64)}function kC(e,t,n){let r=n.directiveStart,o=n.directiveEnd;Ot(n)&&cC(t,n,e.data[r+n.componentOffset]),e.firstCreatePass||eu(n,t);let i=n.initialInputs;for(let s=r;s=u&&f<=a){let p=t.data[f],g=d[h+1];Jo(p,n[f],g,i),c=!0}else if(f>a)break}}return s!==null&&r.inputs.hasOwnProperty(o)&&(Jo(r,n[s],o,i),c=!0),c}function BC(e,t){let n=Re(t,e),r=n[T];VC(r,n);let o=n[Qe];o!==null&&n[Ln]===null&&(n[Ln]=xm(o,n[Rt])),W(q.ComponentStart);try{Ad(r,n,n[ee])}finally{W(q.ComponentEnd,n[ee])}}function VC(e,t){for(let n=t.length;n{zn(e.lView)},consumerOnSignalRead(){this.lView[ke]=this}});function GC(e){let t=e[ke]??Object.create(WC);return t.lView=e,t}var WC=P(S({},Kt),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{let t=an(e.lView);for(;t&&!iy(t[T]);)t=an(t);t&&Yc(t)},consumerOnSignalRead(){this.lView[ke]=this}});function iy(e){return e.type!==2}function sy(e){if(e[un]===null)return;let t=!0;for(;t;){let n=!1;for(let r of e[un])r.dirty&&(n=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));t=n&&!!(e[L]&8192)}}var ZC=100;function uy(e,t=0){let r=e[mt].rendererFactory,o=!1;o||r.begin?.();try{YC(e,t)}finally{o||r.end?.()}}function YC(e,t){let n=ul();try{No(!0),Hl(e,t);let r=0;for(;$o(e);){if(r===ZC)throw new _(103,!1);r++,Hl(e,1)}}finally{No(n)}}function QC(e,t,n,r){if(Un(t))return;let o=t[L],i=!1,s=!1;Ls(t);let u=!0,a=null,c=null;i||(iy(e)?(c=$C(t),a=It(c)):ji()===null?(u=!1,c=GC(t),a=It(c)):t[ke]&&(en(t[ke]),t[ke]=null));try{Zc(t),Y0(e.bindingStartIndex),n!==null&&Km(e,t,n,2,r);let l=(o&3)===3;if(!i)if(l){let f=e.preOrderCheckHooks;f!==null&&qs(t,f,null)}else{let f=e.preOrderHooks;f!==null&&Gs(t,f,0,null),ml(t,0)}if(s||KC(t),sy(t),ay(t,0),e.contentQueries!==null&&Im(e,t),!i)if(l){let f=e.contentCheckHooks;f!==null&&qs(t,f)}else{let f=e.contentHooks;f!==null&&Gs(t,f,1),ml(t,1)}XC(e,t);let d=e.components;d!==null&&ly(t,d,0);let h=e.viewQuery;if(h!==null&&Nl(2,h,r),!i)if(l){let f=e.viewCheckHooks;f!==null&&qs(t,f)}else{let f=e.viewHooks;f!==null&&Gs(t,f,2),ml(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[Ns]){for(let f of t[Ns])f();t[Ns]=null}i||(ry(t),t[L]&=-73)}catch(l){throw i||zn(t),l}finally{c!==null&&(Xt(c,a),u&&zC(c)),js()}}function ay(e,t){for(let n=mm(e);n!==null;n=ym(n))for(let r=te;r0&&(e[n-1][He]=r[He]);let i=Oo(e,te+t);mC(r[T],r);let s=i[yt];s!==null&&s.detachView(i[T]),r[ae]=null,r[He]=null,r[L]&=-129}return r}function ew(e,t,n,r){let o=te+r,i=n.length;r>0&&(n[o-1][He]=t),r-1&&(ti(t,r),Oo(n,r))}this._attachedToViewContainer=!1}wu(this._lView[T],this._lView)}onDestroy(t){Qc(this._lView,t)}markForCheck(){Su(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[L]&=-129}reattach(){Rs(this._lView),this._lView[L]|=128}detectChanges(){this._lView[L]|=1024,uy(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new _(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let t=kr(this._lView),n=this._lView[cn];n!==null&&!t&&wd(n,this._lView),Gm(this._lView[T],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new _(902,!1);this._appRef=t;let n=kr(this._lView),r=this._lView[cn];r!==null&&!n&&hy(r,this._lView),Rs(this._lView)}};var gn=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=tw;constructor(n,r,o){this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,r){return this.createEmbeddedViewImpl(n,r)}createEmbeddedViewImpl(n,r,o){let i=li(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o});return new hn(i)}}return e})();function tw(){return Mu(re(),C())}function Mu(e,t){return e.type&4?new gn(t,e,zr(e,t)):null}function er(e,t,n,r,o){let i=e.data[t];if(i===null)i=nw(e,t,n,r,o),Q0()&&(i.flags|=32);else if(i.type&64){i.type=n,i.value=r,i.attrs=o;let s=Z0();i.injectorIndex=s===null?-1:s.injectorIndex}return qn(i,!0),i}function nw(e,t,n,r,o){let i=rl(),s=ol(),u=s?i:i&&i.parent,a=e.data[t]=ow(e,u,n,t,r,o);return rw(e,a,i,s),a}function rw(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function ow(e,t,n,r,o,i){let s=t?t.injectorIndex:-1,u=0;return el()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,fieldIndex:-1,customControlIndex:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function iw(e){let t=e[zc]??[],r=e[ae][Z],o=[];for(let i of t)i.data[Em]!==void 0?o.push(i):sw(i,r);e[zc]=o}function sw(e,t){let n=0,r=e.firstChild;if(r){let o=e.data[Dm];for(;nnull,aw=()=>null;function ru(e,t){return uw(e,t)}function gy(e,t,n){return aw(e,t,n)}var my=class{},Au=class{},$l=class{resolveComponentFactory(t){throw new _(917,!1)}},fi=class{static NULL=new $l},Kn=class{},pi=(()=>{class e{destroyNode=null;static __NG_ELEMENT_ID__=()=>cw()}return e})();function cw(){let e=C(),t=re(),n=Re(t.index,e);return(bt(n)?n:e)[Z]}var yy=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>null})}return e})();var Zs={},Ul=class{injector;parentInjector;constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){let o=this.injector.get(t,Zs,r);return o!==Zs||n===Zs?o:this.parentInjector.get(t,n,r)}};function ou(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(t!==null)for(let s=0;s0&&(n.directiveToIndex=new Map);for(let h=0;h0;){let n=e[--t];if(typeof n=="number"&&n<0)return n}return 0}function bw(e,t,n){if(n){if(t.exportAs)for(let r=0;rr($e(g[e.index])):e.index;Cy(p,t,n,i,u,f,!1)}}return c}function Cw(e){return e.startsWith("animation")||e.startsWith("transition")}function ww(e,t,n,r){let o=e.cleanup;if(o!=null)for(let i=0;ia?u[a]:null}typeof s=="string"&&(i+=2)}return null}function Cy(e,t,n,r,o,i,s){let u=t.firstCreatePass?Jc(t):null,a=Kc(n),c=a.length;a.push(o,i),u&&u.push(r,e,c,(c+1)*(s?-1:1))}function Pg(e,t,n,r,o,i){let s=t[n],u=t[T],c=u.data[n].outputs[r],d=s[c].subscribe(i);Cy(e.index,u,t,o,i,d,!0)}var ni=Symbol("BINDING"),xw={kind:"input",requiredVars:1},Iw={kind:"field",requiredVars:2};function Lg(e,t,n){let r=C(),o=Xe();if(Te(r,o,n)){let i=r[T],s=fn(),u=Re(s.index,r);Su(u,1);let a=i.directiveRegistry[e],c=jC(s,i,r,a,t,n)}}function jg(e,t){return C()[t.directiveStart+e.targetIdx][Ey]}function U(e,t){if(e==="formField"){let r={[ni]:Iw,create:()=>{jg(r,re())?.create()},update:()=>{Lg(r.targetIdx,e,t()),jg(r,fn())?.update()}};return r}let n={[ni]:xw,update:()=>Lg(n.targetIdx,e,t())};return n}var su=class extends fi{ngModule;constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){let n=gt(t);return new mn(n,this.ngModule)}};function Tw(e){return Object.keys(e).map(t=>{let[n,r,o]=e[t],i={propName:n,templateName:t,isSignal:(r&Eu.SignalBased)!==0};return o&&(i.transform=o),i})}function Sw(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Mw(e,t,n){let r=t instanceof Ce?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Ul(n,r):n}function Aw(e){let t=e.get(Kn,null);if(t===null)throw new _(407,!1);let n=e.get(yy,null),r=e.get(ft,null);return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1}}function Nw(e,t){let n=wy(e);return Rm(t,n,n==="svg"?Gc:n==="math"?j0:null)}function wy(e){return(e.selectors[0][0]||"div").toLowerCase()}var mn=class extends Au{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Tw(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Sw(this.componentDef.outputs),this.cachedOutputs}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=iC(t.selectors),this.ngContentSelectors=t.ngContentSelectors??[],this.isBoundToModule=!!n}create(t,n,r,o,i,s){W(q.DynamicComponentStart);let u=M(null);try{let a=this.componentDef,c=kw(r,a,s,i),l=Mw(a,o||this.ngModule,t),d=Aw(l),h=d.rendererFactory.createRenderer(null,a),f=r?SC(h,r,a.encapsulation,l):Nw(a,h),p=s?.some(Bg)||i?.some(y=>typeof y!="function"&&y.bindings.some(Bg)),g=vd(null,c,null,512|Hm(a),null,null,d,h,l,null,xm(f,l,!0));g[Q]=f,Ls(g);let m=null;try{let y=Nd(Q,g,2,"#host",()=>c.directiveRegistry,!0,0);Pm(h,f,y),jr(f,g),Iu(c,g,y),ld(c,y,g),kd(c,y),n!==void 0&&Fw(y,this.ngContentSelectors,n),m=Re(y.index,g),g[ee]=m[ee],Ad(c,g,null)}catch(y){throw m!==null&&Ml(m),Ml(g),y}finally{W(q.DynamicComponentEnd),js()}return new uu(this.componentType,g,!!p)}finally{M(u)}}};function kw(e,t,n,r){let o=e?["ng-version","21.1.0"]:sC(t.selectors[0]),i=null,s=null,u=0;if(n)for(let l of n)u+=l[ni].requiredVars,l.create&&(l.targetIdx=0,(i??=[]).push(l)),l.update&&(l.targetIdx=0,(s??=[]).push(l));if(r)for(let l=0;l{if(n&1&&e)for(let r of e)r.create();if(n&2&&t)for(let r of t)r.update()}}function Bg(e){let t=e[ni].kind;return t==="input"||t==="twoWay"}var uu=class extends my{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(t,n,r){super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=Bo(n[T],Q),this.location=zr(this._tNode,n),this.instance=Re(this._tNode.index,n)[ee],this.hostView=this.changeDetectorRef=new hn(n,void 0),this.componentType=t}setInput(t,n){this._hasInputBindings;let r=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(t)&&Object.is(this.previousInputValues.get(t),n))return;let o=this._rootLView,i=Tu(r,o[T],o,t,n);this.previousInputValues.set(t,n);let s=Re(r.index,o);Su(s,1)}get injector(){return new Zn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}};function Fw(e,t,n){let r=e.projection=[];for(let o=0;o{class e{static __NG_ELEMENT_ID__=Ow}return e})();function Ow(){let e=re();return Iy(e,C())}var Pw=rt,xy=class extends Pw{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return zr(this._hostTNode,this._hostLView)}get injector(){return new Zn(this._hostTNode,this._hostLView)}get parentInjector(){let t=sd(this._hostTNode,this._hostLView);if(om(t)){let n=Js(t,this._hostLView),r=Ks(t),o=n[T].data[r+8];return new Zn(o,n)}else return new Zn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){let n=Vg(this._lContainer);return n!==null&&n[t]||null}get length(){return this._lContainer.length-te}createEmbeddedView(t,n,r){let o,i;typeof r=="number"?o=r:r!=null&&(o=r.index,i=r.injector);let s=ru(this._lContainer,t.ssrId),u=t.createEmbeddedViewImpl(n||{},i,s);return this.insertImpl(u,o,Br(this._hostTNode,s)),u}createComponent(t,n,r,o,i,s,u){let a=t&&!zE(t),c;if(a)c=n;else{let m=n||{};c=m.index,r=m.injector,o=m.projectableNodes,i=m.environmentInjector||m.ngModuleRef,s=m.directives,u=m.bindings}let l=a?t:new mn(gt(t)),d=r||this.parentInjector;if(!i&&l.ngModule==null){let y=(a?d:this.parentInjector).get(Ce,null);y&&(i=y)}let h=gt(l.componentType??{}),f=ru(this._lContainer,h?.id??null),p=f?.firstChild??null,g=l.create(d,o,p,i,s,u);return this.insertImpl(g.hostView,c,Br(this._hostTNode,f)),g}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){let o=t._lView;if(V0(o)){let u=this.indexOf(t);if(u!==-1)this.detach(u);else{let a=o[ae],c=new xy(a,a[Ie],a[ae]);c.detach(c.indexOf(t))}}let i=this._adjustIndex(n),s=this._lContainer;return di(s,o,i,r),t.attachToViewContainerRef(),Pc(vl(s),i,t),t}move(t,n){return this.insert(t,n)}indexOf(t){let n=Vg(this._lContainer);return n!==null?n.indexOf(t):-1}remove(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);r&&(Oo(vl(this._lContainer),n),wu(r[T],r))}detach(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);return r&&Oo(vl(this._lContainer),n)!=null?new hn(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Vg(e){return e[jo]}function vl(e){return e[jo]||(e[jo]=[])}function Iy(e,t){let n,r=t[e.index];return Ke(r)?n=r:(n=dy(r,t,null,e),t[e.index]=n,Dd(t,n)),jw(n,t,e,r),new xy(n,e,t)}function Lw(e,t){let n=e[Z],r=n.createComment(""),o=Ue(t,e),i=n.parentNode(o);return nu(n,i,r,n.nextSibling(o),!1),r}var jw=Hw,Bw=()=>!1;function Vw(e,t,n){return Bw(e,t,n)}function Hw(e,t,n,r){if(e[ln])return;let o;n.type&8?o=$e(r):o=Lw(t,n),e[ln]=o}var zl=class e{queryList;matches=null;constructor(t){this.queryList=t}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},ql=class e{queries;constructor(t=[]){this.queries=t}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries!==null?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(s[u/2]);else{let c=i[u+1],l=t[-a];for(let d=te;dt.trim())}function Ny(e,t,n){e.queries===null&&(e.queries=new Gl),e.queries.track(new Wl(t,n))}function Ww(e,t){let n=e.contentQueries||(e.contentQueries=[]),r=n.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}function Pd(e,t){return e.queries.getByIndex(t)}function ky(e,t){let n=e[T],r=Pd(n,t);return r.crossesNgTemplate?Zl(n,e,t,[]):Ty(n,e,r,t)}function Ld(e,t,n){let r,o=vo(()=>{r._dirtyCounter();let i=Zw(r,e);if(t&&i===void 0)throw new _(-951,!1);return i});return r=o[ne],r._dirtyCounter=pn(0),r._flatValue=void 0,o}function jd(e){return Ld(!0,!1,e)}function Bd(e){return Ld(!0,!0,e)}function Ry(e){return Ld(!1,!1,e)}function Fy(e,t){let n=e[ne];n._lView=C(),n._queryIndex=t,n._queryList=Od(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(r=>r+1))}function Zw(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[L]&4)return t?void 0:ye;let o=Od(n,r),i=ky(n,r);return o.reset(i,pm),t?o.first:o._changesDetected||e._flatValue===void 0?e._flatValue=o.toArray():e._flatValue}var yn=class{},Oy=class{};function Vd(e,t){return new ri(e,t??null,[])}var ri=class extends yn{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];componentFactoryResolver=new su(this);constructor(t,n,r,o=!0){super(),this.ngModuleType=t,this._parent=n;let i=Rc(t);this._bootstrapComponents=jm(i.bootstrap),this._r3Injector=dl(t,n,[{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver},...r],kt(t),new Set(["environment"])),o&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}},cu=class extends Oy{moduleType;constructor(t){super(),this.moduleType=t}create(t){return new ri(this.moduleType,t,[])}};var oi=class extends yn{injector;componentFactoryResolver=new su(this);instance=null;constructor(t){super();let n=new Fn([...t.providers,{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver}],t.parent||Tr(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}};function Py(e,t,n=null){return new oi({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Yw=(()=>{class e{_injector;cachedInjectors=new Map;constructor(n){this._injector=n}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){let r=Bc(!1,n.type),o=r.length>0?Py([r],this._injector,""):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(let n of this.cachedInjectors.values())n!==null&&n.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=I({token:e,providedIn:"environment",factory:()=>new e(A(Ce))})}return e})();function Gr(e){return si(()=>{let t=Ly(e),n=P(S({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===ad.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?o=>o.get(Yw).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||tt.Emulated,styles:e.styles||ye,_:null,schemas:e.schemas||null,tView:null,id:""});t.standalone&&Ht("NgStandalone"),jy(n);let r=e.dependencies;return n.directiveDefs=Hg(r,Qw),n.pipeDefs=Hg(r,w0),n.id=Xw(n),n})}function Qw(e){return gt(e)||xs(e)}function $t(e){return si(()=>({type:e.type,bootstrap:e.bootstrap||ye,declarations:e.declarations||ye,imports:e.imports||ye,exports:e.exports||ye,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Kw(e,t){if(e==null)return Ye;let n={};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r],i,s,u,a;Array.isArray(o)?(u=o[0],i=o[1],s=o[2]??i,a=o[3]||null):(i=o,s=o,u=Eu.None,a=null),n[i]=[r,u,a],t[i]=s}return n}function Jw(e){if(e==null)return Ye;let t={};for(let n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ot(e){return si(()=>{let t=Ly(e);return jy(t),t})}function ku(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ly(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||Ye,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ye,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,inputs:Kw(e.inputs,t),outputs:Jw(e.outputs),debugInfo:null}}function jy(e){e.features?.forEach(t=>t(e))}function Hg(e,t){return e?()=>{let n=typeof e=="function"?e():e,r=[];for(let o of n){let i=t(o);i!==null&&r.push(i)}return r}:null}function Xw(e){let t=0,n=typeof e.consts=="function"?"":e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let i of r.join("|"))t=Math.imul(31,t)+i.charCodeAt(0)<<0;return t+=2147483648,"c"+t}function ex(e){let t=n=>{let r=Array.isArray(e);n.hostDirectives===null?(n.resolveHostDirectives=tx,n.hostDirectives=r?e.map(Yl):[e]):r?n.hostDirectives.unshift(...e.map(Yl)):n.hostDirectives.unshift(e)};return t.ngInherit=!0,t}function tx(e){let t=[],n=!1,r=null,o=null;for(let i=0;i=0;r--){let o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=Lr(o.hostAttrs,n=Lr(n,o.hostAttrs))}}function Dl(e){return e===Ye?{}:e===ye?[]:e}function sx(e,t){let n=e.viewQuery;n?e.viewQuery=(r,o)=>{t(r,o),n(r,o)}:e.viewQuery=t}function ux(e,t){let n=e.contentQueries;n?e.contentQueries=(r,o,i)=>{t(r,o,i),n(r,o,i)}:e.contentQueries=t}function ax(e,t){let n=e.hostBindings;n?e.hostBindings=(r,o)=>{t(r,o),n(r,o)}:e.hostBindings=t}function Vy(e,t,n,r,o,i,s,u){if(n.firstCreatePass){e.mergedAttrs=Lr(e.mergedAttrs,e.attrs);let l=e.tView=bd(2,e,o,i,s,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),l.queries=n.queries.embeddedTView(e))}u&&(e.flags|=u),qn(e,!1);let a=lx(n,t,e,r);Bs()&&xd(n,t,a,e),jr(a,t);let c=dy(a,t,a,e);t[r+Q]=c,Dd(t,c),Vw(c,e,t)}function cx(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;return t.firstCreatePass?(h=er(t,d,4,s||null,u||null),Fs()&&by(t,e,h,Fe(t.consts,c),Td),tm(t,h)):h=t.data[d],Vy(h,e,t,n,r,o,i,a),Nr(h)&&Iu(t,e,h),c!=null&&ci(e,h,l),h}function Vr(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;if(t.firstCreatePass){if(h=er(t,d,4,s||null,u||null),c!=null){let f=Fe(t.consts,c);h.localNames=[];for(let p=0;p{class e{log(n){console.log(n)}warn(n){console.warn(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function zy(e){return typeof e=="function"&&e[ne]!==void 0}function Hd(e){return zy(e)&&typeof e.set=="function"}var Ru=new x(""),Fu=new x(""),hi=(()=>{class e{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;constructor(n,r,o){this._ngZone=n,this.registry=r,As()&&(this._destroyRef=b(Oe,{optional:!0})??void 0),$d||(Gy(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this._taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){let n=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),r=this._ngZone.runOutsideAngular(()=>this._ngZone.onStable.subscribe({next:()=>{be.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}}));this._destroyRef?.onDestroy(()=>{n.unsubscribe(),r.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb()}});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>r.updateCb&&r.updateCb(n)?(clearTimeout(r.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n()},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this._taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static \u0275fac=function(r){return new(r||e)(A(be),A(qy),A(Fu))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),qy=(()=>{class e{_applications=new Map;registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return $d?.findTestabilityInTree(this,n,r)??null}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function Gy(e){$d=e}var $d;function gi(e){return!!e&&typeof e.then=="function"}function Ou(e){return!!e&&typeof e.subscribe=="function"}var Ud=new x("");function fx(e){return Pn([{provide:Ud,multi:!0,useValue:e}])}var zd=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r});appInits=b(Ud,{optional:!0})??[];injector=b(we);constructor(){}runInitializers(){if(this.initialized)return;let n=[];for(let o of this.appInits){let i=Sr(this.injector,o);if(gi(i))n.push(i);else if(Ou(i)){let s=new Promise((u,a)=>{i.subscribe({complete:u,error:a})});n.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),n.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Wy=new x("");function Zy(){$a(()=>{let e="";throw new _(600,e)})}function Yy(e){return e.isBoundToModule}var px=10;var Zr=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=b(Pt);afterRenderManager=b(Cu);zonelessEnabled=b(Wo);rootEffectScheduler=b(Vs);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new le;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=b(Gn);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Ee(n=>!n))}constructor(){b(Dt,{optional:!0})}whenStable(){let n;return new Promise(r=>{n=this.isStable.subscribe({next:o=>{o&&r()}})}).finally(()=>{n.unsubscribe()})}_injector=b(Ce);_rendererFactory=null;get injector(){return this._injector}bootstrap(n,r){return this.bootstrapImpl(n,r)}bootstrapImpl(n,r,o=we.NULL){return this._injector.get(be).run(()=>{W(q.BootstrapComponentStart);let s=n instanceof Au;if(!this._injector.get(zd).done){let p="";throw new _(405,p)}let a;s?a=n:a=this._injector.get(fi).resolveComponentFactory(n),this.componentTypes.push(a.componentType);let c=Yy(a)?void 0:this._injector.get(yn),l=r||a.selector,d=a.create(o,[],l,c),h=d.location.nativeElement,f=d.injector.get(Ru,null);return f?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),Qo(this.components,d),f?.unregisterApplication(h)}),this._loadComponent(d),W(q.BootstrapComponentEnd,d),d})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(q.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(_u.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw W(q.ChangeDetectionEnd),new _(101,!1);let n=M(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,M(n),this.afterTick.next(),W(q.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(Kn,null,{optional:!0}));let n=0;for(;this.dirtyFlags!==0&&n++$o(n))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(n){let r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){let r=n;Qo(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView);try{this.tick()}catch(o){this.internalErrorHandler(o)}this.components.push(n),this._injector.get(Wy,[]).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Qo(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new _(406,!1);let n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Qo(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Qy(e,t){let n=C(),r=Xe();if(Te(n,r,t)){let o=Y(),i=fn();if(Tu(i,o,n,e,t))Ot(i)&&ey(n,i.index);else{let u=Ue(i,n);ty(n[Z],u,null,i.value,e,t,null)}}return Qy}function Pu(e,t,n,r){let o=C(),i=Xe();if(Te(o,i,t)){let s=Y(),u=fn();OC(u,o,e,t,n,r)}return Pu}var BP=typeof document<"u"&&typeof document?.documentElement?.getAnimations=="function";function hx(){return C()[ve][ee]}var Ql=class{destroy(t){}updateValue(t,n){}swap(t,n){let r=Math.min(t,n),o=Math.max(t,n),i=this.detach(o);if(o-r>1){let s=this.detach(r);this.attach(r,i),this.attach(o,s)}else this.attach(r,i)}move(t,n){this.attach(n,this.detach(t))}};function El(e,t,n,r,o){return e===n&&Object.is(t,r)?1:Object.is(o(e,t),o(n,r))?-1:0}function gx(e,t,n,r){let o,i,s=0,u=e.length-1,a=void 0;if(Array.isArray(t)){M(r);let c=t.length-1;for(M(null);s<=u&&s<=c;){let l=e.at(s),d=t[s],h=El(s,l,s,d,n);if(h!==0){h<0&&e.updateValue(s,d),s++;continue}let f=e.at(u),p=t[c],g=El(u,f,c,p,n);if(g!==0){g<0&&e.updateValue(u,p),u--,c--;continue}let m=n(s,l),y=n(u,f),v=n(s,d);if(Object.is(v,y)){let w=n(c,p);Object.is(w,m)?(e.swap(s,u),e.updateValue(u,p),c--,u--):e.move(u,s),e.updateValue(s,d),s++;continue}if(o??=new lu,i??=qg(e,s,u,n),Kl(e,o,s,v))e.updateValue(s,d),s++,u++;else if(i.has(v))o.set(m,e.detach(s)),u--;else{let w=e.create(s,t[s]);e.attach(s,w),s++,u++}}for(;s<=c;)zg(e,o,n,s,t[s]),s++}else if(t!=null){M(r);let c=t[Symbol.iterator]();M(null);let l=c.next();for(;!l.done&&s<=u;){let d=e.at(s),h=l.value,f=El(s,d,s,h,n);if(f!==0)f<0&&e.updateValue(s,h),s++,l=c.next();else{o??=new lu,i??=qg(e,s,u,n);let p=n(s,h);if(Kl(e,o,s,p))e.updateValue(s,h),s++,u++,l=c.next();else if(!i.has(p))e.attach(s,e.create(s,h)),s++,u++,l=c.next();else{let g=n(s,d);o.set(g,e.detach(s)),u--}}}for(;!l.done;)zg(e,o,n,e.length,l.value),l=c.next()}for(;s<=u;)e.destroy(e.detach(u--));o?.forEach(c=>{e.destroy(c)})}function Kl(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function zg(e,t,n,r,o){if(Kl(e,t,r,n(r,o)))e.updateValue(r,o);else{let i=e.create(r,o);e.attach(r,i)}}function qg(e,t,n,r){let o=new Set;for(let i=t;i<=n;i++)o.add(r(i,e.at(i)));return o}var lu=class{kvMap=new Map;_vMap=void 0;has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;let n=this.kvMap.get(t);return this._vMap!==void 0&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);this._vMap===void 0&&(this._vMap=new Map);let o=this._vMap;for(;o.has(r);)r=o.get(r);o.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),this._vMap!==void 0){let o=this._vMap;for(;o.has(r);)r=o.get(r),t(r,n)}}};function qd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,256,s,u),Gd}function Gd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,512,s,u),Gd}function Wd(e,t){Ht("NgControlFlow");let n=C(),r=Xe(),o=n[r]!==fe?n[r]:-1,i=o!==-1?du(n,Q+o):void 0,s=0;if(Te(n,r,e)){let u=M(null);try{if(i!==void 0&&py(i,s),e!==-1){let a=Q+e,c=du(n,a),l=td(n[T],a),d=gy(c,l,n),h=li(n,l,t,{dehydratedView:d});di(c,h,s,Br(l,d))}}finally{M(u)}}else if(i!==void 0){let u=fy(i,s);u!==void 0&&(u[ee]=t)}}var Jl=class{lContainer;$implicit;$index;constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-te}};function mx(e){return e}function Lu(e,t){return t}var Xl=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}};function ju(e,t,n,r,o,i,s,u,a,c,l,d,h){Ht("NgControlFlow");let f=C(),p=Y(),g=a!==void 0,m=C(),y=u?s.bind(m[ve][ee]):s,v=new Xl(g,y);m[Q+e]=v,Vr(f,p,e+1,t,n,r,o,Fe(p.consts,i),256),g&&Vr(f,p,e+2,a,c,l,d,Fe(p.consts,h),512)}var ed=class extends Ql{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r}get length(){return this.lContainer.length-te}at(t){return this.getLView(t)[ee].$implicit}attach(t,n){let r=n[Ln];this.needsIndexUpdate||=t!==this.length,di(this.lContainer,n,t,Br(this.templateTNode,r)),yx(this.lContainer,t)}detach(t){return this.needsIndexUpdate||=t!==this.length-1,bx(this.lContainer,t),vx(this.lContainer,t)}create(t,n){let r=ru(this.lContainer,this.templateTNode.tView.ssrId);return li(this.hostLView,this.templateTNode,new Jl(this.lContainer,n,t),{dehydratedView:r})}destroy(t){wu(t[T],t)}updateValue(t,n){this.getLView(t)[ee].$implicit=n}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t0){let i=r[Rt];hC(i,o),Qn.delete(r[Ft]),o.detachedLeaveAnimationFns=void 0}}function bx(e,t){if(e.length<=te)return;let n=te+t,r=e[n],o=r?r[Hn]:void 0;o&&o.leave&&o.leave.size>0&&(o.detachedLeaveAnimationFns=[])}function vx(e,t){return ti(e,t)}function Dx(e,t){return fy(e,t)}function td(e,t){return Bo(e,t)}function Yr(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Yr}function nd(e,t,n,r,o){Tu(t,e,n,o?"class":"style",r)}function Qr(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Nd(s,o,2,t,Td,Fs(),n,r):i.data[s];if(Sd(u,o,e,t,Jy),Nr(u)){let a=o[T];Iu(a,o,u),ld(a,u,o)}return r!=null&&ci(o,u),Qr}function Kr(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),tl(n)&&nl(),Xc(),n.classesWithoutHost!=null&&QE(n)&&nd(e,n,C(),n.classesWithoutHost,!0),n.stylesWithoutHost!=null&&KE(n)&&nd(e,n,C(),n.stylesWithoutHost,!1),Kr}function Ky(e,t,n,r){return Qr(e,t,n,r),Kr(),Ky}function Zd(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Dw(s,i,2,t,n,r):i.data[s];return Sd(u,o,e,t,Jy),r!=null&&ci(o,u),Zd}function Yd(){let e=re(),t=Md(e);return tl(t)&&nl(),Xc(),Yd}function Vu(e,t,n,r){return Zd(e,t,n,r),Yd(),Vu}var Jy=(e,t,n,r,o)=>(qo(!0),Rm(t[Z],r,sg()));function Qd(e,t,n){let r=C(),o=r[T],i=e+Q,s=o.firstCreatePass?Nd(i,r,8,"ng-container",Td,Fs(),t,n):o.data[i];if(Sd(s,r,e,"ng-container",Ex),Nr(s)){let u=r[T];Iu(u,r,s),ld(u,s,r)}return n!=null&&ci(r,s),Qd}function Kd(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),Kd}function Jr(e,t,n){return Qd(e,t,n),Kd(),Jr}var Ex=(e,t,n,r,o)=>(qo(!0),U_(t[Z],""));function _x(){return C()}function Hu(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Xm(s,r,e,t,r[Z],n)}return Hu}var mi="en-US";var Cx=mi;function Xy(e){typeof e=="string"&&(Cx=e.toLowerCase().replace(/_/g,"-"))}function eb(e,t,n){let r=C(),o=Y(),i=re();return nb(o,r,r[Z],i,e,t,n),eb}function tb(e,t,n){let r=C(),o=Y(),i=re();return(i.type&3||n)&&_y(i,o,r,n,r[Z],e,t,Ys(i,r,t)),tb}function nb(e,t,n,r,o,i,s){let u=!0,a=null;if((r.type&3||s)&&(a??=Ys(r,t,i),_y(r,e,t,s,n,o,i,a)&&(u=!1)),u){let c=r.outputs?.[o],l=r.hostDirectiveOutputs?.[o];if(l&&l.length)for(let d=0;d>17&32767}function kx(e){return(e&2)==2}function Rx(e,t){return e&131071|t<<17}function rd(e){return e|2}function Hr(e){return(e&131068)>>2}function _l(e,t){return e&-131069|t<<2}function Fx(e){return(e&1)===1}function od(e){return e|1}function Ox(e,t,n,r,o,i){let s=i?t.classBindings:t.styleBindings,u=Jn(s),a=Hr(s);e[r]=n;let c=!1,l;if(Array.isArray(n)){let d=n;l=d[1],(l===null||xr(d,l)>0)&&(c=!0)}else l=n;if(o)if(a!==0){let h=Jn(e[u+1]);e[r+1]=zs(h,u),h!==0&&(e[h+1]=_l(e[h+1],r)),e[u+1]=Rx(e[u+1],r)}else e[r+1]=zs(u,0),u!==0&&(e[u+1]=_l(e[u+1],r)),u=r;else e[r+1]=zs(a,0),u===0?u=r:e[a+1]=_l(e[a+1],r),a=r;c&&(e[r+1]=rd(e[r+1])),Gg(e,l,r,!0),Gg(e,l,r,!1),Px(t,l,e,r,i),s=zs(u,a),i?t.classBindings=s:t.styleBindings=s}function Px(e,t,n,r,o){let i=o?e.residualClasses:e.residualStyles;i!=null&&typeof t=="string"&&xr(i,t)>=0&&(n[r+1]=od(n[r+1]))}function Gg(e,t,n,r){let o=e[n+1],i=t===null,s=r?Jn(o):Hr(o),u=!1;for(;s!==0&&(u===!1||i);){let a=e[s],c=e[s+1];Lx(a,t)&&(u=!0,e[s+1]=r?od(c):rd(c)),s=r?Jn(c):Hr(c)}u&&(e[n+1]=r?rd(o):od(o))}function Lx(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t=="string"?xr(e,t)>=0:!1}var ce={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function ub(e){return e.substring(ce.key,ce.keyEnd)}function jx(e){return e.substring(ce.value,ce.valueEnd)}function Bx(e){return lb(e),ab(e,$r(e,0,ce.textEnd))}function ab(e,t){let n=ce.textEnd;return n===t?-1:(t=ce.keyEnd=Hx(e,ce.key=t,n),$r(e,t,n))}function Vx(e){return lb(e),cb(e,$r(e,0,ce.textEnd))}function cb(e,t){let n=ce.textEnd,r=ce.key=$r(e,t,n);return n===r?-1:(r=ce.keyEnd=$x(e,r,n),r=Wg(e,r,n,58),r=ce.value=$r(e,r,n),r=ce.valueEnd=Ux(e,r,n),Wg(e,r,n,59))}function lb(e){ce.key=0,ce.keyEnd=0,ce.value=0,ce.valueEnd=0,ce.textEnd=e.length}function $r(e,t,n){for(;t32;)t++;return t}function $x(e,t,n){let r;for(;t=65&&(r&-33)<=90||r>=48&&r<=57);)t++;return t}function Wg(e,t,n,r){return t=$r(e,t,n),t32&&(u=s),i=o,o=r,r=a&-33}return u}function Zg(e,t,n,r){let o=-1,i=n;for(;i=0;n=cb(t,n))mb(e,ub(t),jx(t))}function bi(e){pb(Kx,qx,e,!0)}function qx(e,t){for(let n=Bx(t);n>=0;n=ab(t,n))Po(e,ub(t),!0)}function fb(e,t,n,r){let o=C(),i=Y(),s=Uo(2);if(i.firstUpdatePass&&gb(i,e,s,r),t!==fe&&Te(o,s,t)){let u=i.data[ze()];yb(i,u,o,o[Z],e,o[s+1]=Xx(t,n),r,s)}}function pb(e,t,n,r){let o=Y(),i=Uo(2);o.firstUpdatePass&&gb(o,null,i,r);let s=C();if(n!==fe&&Te(s,i,n)){let u=o.data[ze()];if(bb(u,r)&&!hb(o,i)){let a=r?u.classesWithoutHost:u.stylesWithoutHost;a!==null&&(n=_s(a,n||"")),nd(o,u,s,n,r)}else Jx(o,u,s,s[Z],s[i+1],s[i+1]=Qx(e,t,n),r,i)}}function hb(e,t){return t>=e.expandoStartIndex}function gb(e,t,n,r){let o=e.data;if(o[n+1]===null){let i=o[ze()],s=hb(e,n);bb(i,r)&&t===null&&!s&&(t=!1),t=Gx(o,i,t,r),Ox(o,i,t,n,s,r)}}function Gx(e,t,n,r){let o=X0(e),i=r?t.residualClasses:t.residualStyles;if(o===null)(r?t.classBindings:t.styleBindings)===0&&(n=Cl(null,e,t,n,r),n=ii(n,t.attrs,r),i=null);else{let s=t.directiveStylingLast;if(s===-1||e[s]!==o)if(n=Cl(o,e,t,n,r),i===null){let a=Wx(e,t,r);a!==void 0&&Array.isArray(a)&&(a=Cl(null,e,t,a[1],r),a=ii(a,t.attrs,r),Zx(e,t,r,a))}else i=Yx(e,t,r)}return i!==void 0&&(r?t.residualClasses=i:t.residualStyles=i),n}function Wx(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Hr(r)!==0)return e[Jn(r)]}function Zx(e,t,n,r){let o=n?t.classBindings:t.styleBindings;e[Jn(o)]=r}function Yx(e,t,n){let r,o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0;){let a=e[o],c=Array.isArray(a),l=c?a[1]:a,d=l===null,h=n[o+1];h===fe&&(h=d?ye:void 0);let f=d?Ms(h,r):l===r?h:void 0;if(c&&!fu(f)&&(f=Ms(a,r)),fu(f)&&(u=f,s))return u;let p=e[o+1];o=s?Jn(p):Hr(p)}if(t!==null){let a=i?t.residualClasses:t.residualStyles;a!=null&&(u=Ms(a,r))}return u}function fu(e){return e!==void 0}function Xx(e,t){return e==null||e===""||(typeof t=="string"?e=e+t:typeof e=="object"&&(e=kt(Pe(e)))),e}function bb(e,t){return(e.flags&(t?8:16))!==0}function eI(e,t=""){let n=C(),r=Y(),o=e+Q,i=r.firstCreatePass?er(r,o,1,t,null):r.data[o],s=tI(r,n,i,t,e);n[o]=s,Bs()&&xd(r,n,s,i),qn(i,!1)}var tI=(e,t,n,r,o)=>(qo(!0),H_(t[Z],r));function vb(e,t,n,r=""){return Te(e,Xe(),n)?t+Ne(n)+r:fe}function nI(e,t,n,r,o,i=""){let s=al(),u=iu(e,s,n,o);return Uo(2),u?t+Ne(n)+r+Ne(o)+i:fe}function rI(e,t,n,r,o,i,s,u,a,c=""){let l=al(),d=_w(e,l,n,o,s,a);return Uo(4),d?t+Ne(n)+r+Ne(o)+i+Ne(s)+u+Ne(a)+c:fe}function Db(e){return Jd("",e),Db}function Jd(e,t,n){let r=C(),o=vb(r,e,t,n);return o!==fe&&Xd(r,ze(),o),Jd}function Eb(e,t,n,r,o){let i=C(),s=nI(i,e,t,n,r,o);return s!==fe&&Xd(i,ze(),s),Eb}function _b(e,t,n,r,o,i,s,u,a){let c=C(),l=rI(c,e,t,n,r,o,i,s,u,a);return l!==fe&&Xd(c,ze(),l),_b}function Xd(e,t,n){let r=Wc(t,e);$_(e[Z],r,n)}function Cb(e,t,n){Hd(t)&&(t=t());let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Cb}function oI(e,t){let n=Hd(e);return n&&e.set(t),n}function wb(e,t){let n=C(),r=Y(),o=re();return nb(r,n,n[Z],o,e,t),wb}var xb={};function Uu(e){Ht("NgLet");let t=Y(),n=C(),r=e+Q,o=er(t,r,128,null,null);return qn(o,!1),Ho(t,n,r,xb),Uu}function zu(e){let t=Y(),n=C(),r=ze();return Ho(t,n,r,e),e}function qu(e){let t=sl(),n=Vo(t,Q+e);if(n===xb)throw new _(314,!1);return n}function iI(e){return Te(C(),Xe(),e)?Ne(e):fe}function sI(e,t,n=""){return vb(C(),e,t,n)}function Qg(e,t,n){let r=Y();r.firstCreatePass&&Ib(t,r.data,r.blueprint,Je(e),n)}function Ib(e,t,n,r,o){if(e=ue(e),Array.isArray(e))for(let i=0;i>20;if(Rn(e)||!e.multi){let f=new Yn(c,o,oe,null),p=xl(a,t,o?l:l+h,d);p===-1?(Tl(eu(u,s),i,a),wl(i,e,t.length),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(f),s.push(f)):(n[p]=f,s[p]=f)}else{let f=xl(a,t,l+h,d),p=xl(a,t,l,l+h),g=f>=0&&n[f],m=p>=0&&n[p];if(o&&!m||!o&&!g){Tl(eu(u,s),i,a);let y=cI(o?aI:uI,n.length,o,r,c,e);!o&&m&&(n[p].providerFactory=y),wl(i,e,t.length,0),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(y),s.push(y)}else{let y=Tb(n[o?p:f],c,!o&&r);wl(i,e,f>-1?f:p,y)}!o&&r&&m&&n[p].componentProviders++}}}function wl(e,t,n,r){let o=Rn(t),i=P0(t);if(o||i){let a=(i?ue(t.useClass):t).prototype.ngOnDestroy;if(a){let c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){let l=c.indexOf(n);l===-1?c.push(n,[r,a]):c[l+1].push(r,a)}else c.push(n,a)}}}function Tb(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function xl(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>Qg(r,o?o(e):e,!1),t&&(n.viewProvidersResolver=(r,o)=>Qg(r,o?o(t):t,!0))}}function dI(e,t){let n=Rr()+e,r=C();return r[n]===fe?Fd(r,n,t()):Ew(r,n)}function fI(e,t,n){return Mb(C(),Rr(),e,t,n)}function pI(e,t,n,r){return Ab(C(),Rr(),e,t,n,r)}function Sb(e,t){let n=e[t];return n===fe?void 0:n}function Mb(e,t,n,r,o,i){let s=t+n;return Te(e,s,o)?Fd(e,s+1,i?r.call(i,o):r(o)):Sb(e,s+1)}function Ab(e,t,n,r,o,i,s){let u=t+n;return iu(e,u,o,i)?Fd(e,u+2,s?r.call(s,o,i):r(o,i)):Sb(e,u+2)}function hI(e,t){let n=Y(),r,o=e+Q;n.firstCreatePass?(r=gI(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks??=[]).push(o,r.onDestroy)):r=n.data[o];let i=r.factory||(r.factory=sn(r.type,!0)),s,u=_e(oe);try{let a=Xs(!1),c=i();return Xs(a),Ho(n,C(),o,c),c}finally{_e(u)}}function gI(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function mI(e,t,n){let r=e+Q,o=C(),i=Vo(o,r);return Nb(o,r)?Mb(o,Rr(),t,i.transform,n,i):i.transform(n)}function yI(e,t,n,r){let o=e+Q,i=C(),s=Vo(i,o);return Nb(i,o)?Ab(i,Rr(),t,s.transform,n,r,s):s.transform(n,r)}function Nb(e,t){return e[T].data[t].pure}function bI(e,t){return Mu(e,t)}var pu=class{ngModuleFactory;componentFactories;constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}},vI=(()=>{class e{compileModuleSync(n){return new cu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){let r=this.compileModuleSync(n),o=Rc(n),i=jm(o.declarations).reduce((s,u)=>{let a=gt(u);return a&&s.push(new mn(a)),s},[]);return new pu(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var kb=(()=>{class e{applicationErrorHandler=b(Pt);appRef=b(Zr);taskService=b(Gn);ngZone=b(be);zonelessEnabled=b(Wo);tracing=b(Dt,{optional:!0});zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new X;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ko):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(b(gl,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let n=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(n);return}this.switchToMicrotaskScheduler(),this.taskService.remove(n)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let n=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(n)})})}notify(n){if(!this.zonelessEnabled&&n===5)return;switch(n){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2;break}case 12:{this.appRef.dirtyFlags|=16;break}case 13:{this.appRef.dirtyFlags|=2;break}case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let r=this.useMicrotaskScheduler?lg:fl;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>r(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>r(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(ko+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let n=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){this.applicationErrorHandler(r)}finally{this.taskService.remove(n),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let n=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Rb(){return[{provide:ft,useExisting:kb},{provide:be,useClass:Ro},{provide:Wo,useValue:!0}]}function DI(){return typeof $localize<"u"&&$localize.locale||mi}var Gu=new x("",{factory:()=>b(Gu,{optional:!0,skipSelf:!0})||DI()});var Wu=class{destroyed=!1;listeners=null;errorHandler=b(Ve,{optional:!0});destroyRef=b(Oe);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(t){if(this.destroyed)throw new _(953,!1);return(this.listeners??=[]).push(t),{unsubscribe:()=>{let n=this.listeners?.indexOf(t);n!==void 0&&n!==-1&&this.listeners?.splice(n,1)}}}emit(t){if(this.destroyed){console.warn(pt(953,!1));return}if(this.listeners===null)return;let n=M(null);try{for(let r of this.listeners)try{r(t)}catch(o){this.errorHandler?.handleError(o)}}finally{M(n)}}};function Me(e,t){return vo(e,t?.equal)}var EI=e=>e;function ef(e,t){if(typeof e=="function"){let n=hc(e,EI,t?.equal);return Fb(n,t?.debugName)}else{let n=hc(e.source,e.computation,e.equal);return Fb(n,e.debugName)}}function Fb(e,t){let n=e[ne],r=e;return r.set=o=>y0(n,o),r.update=o=>b0(n,o),r.asReadonly=Go.bind(e),r}function _I(e){let t=e.request,n=e.params??t??(()=>null);return new Zu(n,wI(e),e.defaultValue,e.equal?CI(e.equal):void 0,e.debugName,e.injector??b(we))}var tf=class{value;isLoading;constructor(t,n){this.value=t,this.value.set=this.set.bind(this),this.value.update=this.update.bind(this),this.value.asReadonly=Go,this.isLoading=Me(()=>this.status()==="loading"||this.status()==="reloading",void 0)}isError=Me(()=>this.status()==="error");update(t){this.set(t(de(this.value)))}isValueDefined=Me(()=>this.isError()?!1:this.value()!==void 0);hasValue(){return this.isValueDefined()}asReadonly(){return this}},Zu=class extends tf{loaderFn;equal;debugName;pendingTasks;state;extRequest;effectRef;pendingController;resolvePendingTask=void 0;destroyed=!1;unregisterOnDestroy;status;error;constructor(t,n,r,o,i,s){super(Me(()=>{let u=this.state().stream?.();if(!u||this.state().status==="loading"&&this.error())return r;if(!nf(u))throw new rf(this.error());return u.value},{equal:o}),i),this.loaderFn=n,this.equal=o,this.debugName=i,this.extRequest=ef({source:t,computation:u=>({request:u,reload:0})}),this.state=ef({source:this.extRequest,computation:(u,a)=>{let c=u.request===void 0?"idle":"loading";return a?{extRequest:u,status:c,previousStatus:Ob(a.value),stream:a.value.extRequest.request===u.request?a.value.stream:void 0}:{extRequest:u,status:c,previousStatus:"idle",stream:void 0}}}),this.effectRef=Zo(this.loadEffect.bind(this),{injector:s,manualCleanup:!0}),this.pendingTasks=s.get(Wn),this.unregisterOnDestroy=s.get(Oe).onDestroy(()=>this.destroy()),this.status=Me(()=>Ob(this.state()),void 0),this.error=Me(()=>{let u=this.state().stream?.();return u&&!nf(u)?u.error:void 0},void 0)}set(t){if(this.destroyed)return;let n=de(this.error),r=de(this.state);if(!n){let o=de(this.value);if(r.status==="local"&&(this.equal?this.equal(o,t):o===t))return}this.state.set({extRequest:r.extRequest,status:"local",previousStatus:"local",stream:pn({value:t},void 0)}),this.abortInProgressLoad()}reload(){let{status:t}=de(this.state);return t==="idle"||t==="loading"?!1:(this.extRequest.update(({request:n,reload:r})=>({request:n,reload:r+1})),!0)}destroy(){this.destroyed=!0,this.unregisterOnDestroy(),this.effectRef.destroy(),this.abortInProgressLoad(),this.state.set({extRequest:{request:void 0,reload:0},status:"idle",previousStatus:"idle",stream:void 0})}loadEffect(){return at(this,null,function*(){let t=this.extRequest(),{status:n,previousStatus:r}=de(this.state);if(t.request===void 0)return;if(n!=="loading")return;this.abortInProgressLoad();let o=this.resolvePendingTask=this.pendingTasks.add(),{signal:i}=this.pendingController=new AbortController;try{let s=yield de(()=>this.loaderFn({params:t.request,request:t.request,abortSignal:i,previous:{status:r}}));if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"resolved",stream:s})}catch(s){if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"error",stream:pn({error:sf(s)},void 0)})}finally{o?.(),o=void 0}})}abortInProgressLoad(){de(()=>this.pendingController?.abort()),this.pendingController=void 0,this.resolvePendingTask?.(),this.resolvePendingTask=void 0}};function CI(e){return(t,n)=>t===void 0||n===void 0?t===n:e(t,n)}function wI(e){return xI(e)?e.stream:t=>at(null,null,function*(){try{return pn({value:yield e.loader(t)},void 0)}catch(n){return pn({error:sf(n)},void 0)}})}function xI(e){return!!e.stream}function Ob(e){switch(e.status){case"loading":return e.extRequest.reload===0?"loading":"reloading";case"resolved":return nf(e.stream())?"resolved":"error";default:return e.status}}function nf(e){return e.error===void 0}function sf(e){return II(e)?e:new of(e)}function II(e){return e instanceof Error||typeof e=="object"&&typeof e.name=="string"&&typeof e.message=="string"}var rf=class extends Error{constructor(t){super(t.message,{cause:t})}},of=class extends Error{constructor(t){super(String(t),{cause:t})}};var qb=Symbol("InputSignalNode#UNSET"),LI=P(S({},Do),{transformFn:void 0,applyValueToInputSignal(e,t){xn(e,t)}});function Gb(e,t){let n=Object.create(LI);n.value=e,n.transformFn=t?.transform;function r(){if(Jt(n),n.value===qb){let o=null;throw new _(-950,o)}return n.value}return r[ne]=n,r}var Pb=class{attributeName;constructor(t){this.attributeName=t}__NG_ELEMENT_ID__=()=>ud(this.attributeName);toString(){return`HostAttributeToken ${this.attributeName}`}},iB=(()=>{let e=new x("");return e.__NG_ELEMENT_ID__=t=>{let n=re();if(n===null)throw new _(204,!1);if(n.type&2)return n.value;if(t&8)return null;throw new _(204,!1)},e})();function sB(e){return new Wu}function Lb(e,t){return Gb(e,t)}function jI(e){return Gb(qb,e)}var Ae=(Lb.required=jI,Lb);function jb(e,t){return jd(t)}function BI(e,t){return Bd(t)}var uB=(jb.required=BI,jb);function aB(e,t){return Ry(t)}function Bb(e,t){return jd(t)}function VI(e,t){return Bd(t)}var cB=(Bb.required=VI,Bb);var af=new x(""),HI=new x("");function vi(e){return!e.moduleRef}function $I(e){let t=vi(e)?e.r3Injector:e.moduleRef.injector,n=t.get(be);return n.run(()=>{vi(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Pt),o;if(n.runOutsideAngular(()=>{o=n.onError.subscribe({next:r})}),vi(e)){let i=()=>t.destroy(),s=e.platformInjector.get(af);s.add(i),t.onDestroy(()=>{o.unsubscribe(),s.delete(i)})}else{let i=()=>e.moduleRef.destroy(),s=e.platformInjector.get(af);s.add(i),e.moduleRef.onDestroy(()=>{Qo(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i)})}return zI(r,n,()=>{let i=t.get(Gn),s=i.add(),u=t.get(zd);return u.runInitializers(),u.donePromise.then(()=>{let a=t.get(Gu,mi);if(Xy(a||mi),!t.get(HI,!0))return vi(e)?t.get(Zr):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(vi(e)){let l=t.get(Zr);return e.rootComponent!==void 0&&l.bootstrap(e.rootComponent),l}else return UI?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>{i.remove(s)})})})}var UI;function zI(e,t,n){try{let r=n();return gi(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e(r)),r}}var Yu=null;function qI(e=[],t){return we.create({name:t,providers:[{provide:Lo,useValue:"platform"},{provide:af,useValue:new Set([()=>Yu=null])},...e]})}function GI(e=[]){if(Yu)return Yu;let t=qI(e);return Yu=t,Zy(),WI(t),t}function WI(e){let t=e.get(mu,null);Sr(e,()=>{t?.forEach(n=>n())})}var ZI=1e4;var lB=ZI-1e3;var yf=(()=>{class e{static __NG_ELEMENT_ID__=YI}return e})();function YI(e){return QI(re(),C(),(e&16)===16)}function QI(e,t,n){if(Ot(e)&&!n){let r=Re(e.index,t);return new hn(r,r)}else if(e.type&175){let r=t[ve];return new hn(r,t)}return null}var cf=class{constructor(){}supports(t){return Rd(t)}create(t){return new lf(t)}},KI=(e,t)=>t,lf=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(t){this._trackByFn=t||KI}forEachItem(t){let n;for(n=this._itHead;n!==null;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){let s=!r||n&&n.currentIndex{s=this._trackByFn(o,u),n===null||!Object.is(n.trackById,s)?(n=this._mismatch(n,u,s,o),r=!0):(r&&(n=this._verifyReinsertion(n,u,s,o)),Object.is(n.item,u)||this._addIdentityChange(n,u)),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;t!==null;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return t===null?i=this._itTail:(i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):(t=this._linkedRecords===null?null:this._linkedRecords.get(r,o),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new df(n,r),i,o)),t}_verifyReinsertion(t,n,r,o){let i=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return i!==null?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;t!==null;){let n=t._next;this._addToRemovals(this._unlink(t)),t=n}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(t);let o=t._prevRemoved,i=t._nextRemoved;return o===null?this._removalsHead=i:o._nextRemoved=i,i===null?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail===null?this._additionsTail=this._additionsHead=t:this._additionsTail=this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){let o=n===null?this._itHead:n._next;return t._next=o,t._prev=n,o===null?this._itTail=t:o._prev=t,n===null?this._itHead=t:n._next=t,this._linkedRecords===null&&(this._linkedRecords=new Qu),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){this._linkedRecords!==null&&this._linkedRecords.remove(t);let n=t._prev,r=t._next;return n===null?this._itHead=r:n._next=r,r===null?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail===null?this._movesTail=this._movesHead=t:this._movesTail=this._movesTail._nextMoved=t),t}_addToRemovals(t){return this._unlinkedRecords===null&&(this._unlinkedRecords=new Qu),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=t:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t,t}},df=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(t,n){this.item=t,this.trackById=n}},ff=class{_head=null;_tail=null;add(t){this._head===null?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;r!==null;r=r._nextDup)if((n===null||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){let n=t._prevDup,r=t._nextDup;return n===null?this._head=r:n._nextDup=r,r===null?this._tail=n:r._prevDup=n,this._head===null}},Qu=class{map=new Map;put(t){let n=t.trackById,r=this.map.get(n);r||(r=new ff,this.map.set(n,r)),r.add(t)}get(t,n){let r=t,o=this.map.get(r);return o?o.get(t,n):null}remove(t){let n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function Vb(e,t,n){let r=e.previousIndex;if(r===null)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{let i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;r!==null;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){let r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){let o=this._records.get(t);this._maybeAddToChanges(o,n);let i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}let r=new gf(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;t!==null;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;t!=null;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){this._additionsHead===null?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){this._changesHead===null?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}},gf=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(t){this.key=t}};function Hb(){return new bf([new cf])}var bf=(()=>{class e{factories;static \u0275prov=I({token:e,providedIn:"root",factory:Hb});constructor(n){this.factories=n}static create(n,r){if(r!=null){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||Hb())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r!=null)return r;throw new _(901,!1)}}return e})();function $b(){return new Ku([new pf])}var Ku=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:$b});factories;constructor(n){this.factories=n}static create(n,r){if(r){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||$b())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r)return r;throw new _(901,!1)}}return e})();var Wb=(()=>{class e{constructor(n){}static \u0275fac=function(r){return new(r||e)(A(Zr))};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function Zb(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:o}=e;W(q.BootstrapApplicationStart);try{let i=o?.injector??GI(r),s=[Rb(),fg,...n||[]],u=new oi({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1});return $I({r3Injector:u.injector,platformInjector:i,rootComponent:t})}catch(i){return Promise.reject(i)}finally{W(q.BootstrapApplicationEnd)}}function JI(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function XI(e,t=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):t}var uf=Symbol("NOT_SET"),Yb=new Set,e2=P(S({},Do),{kind:"afterRenderEffectPhase",consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:uf,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(Jt(c),c.value),c.signal[ne]=c,c.registerCleanupFn=l=>(c.cleanup??=new Set).add(l),this.nodes[u]=c,this.hooks[u]=l=>c.phaseFn(l)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let t of this.onDestroyFns)t();super.destroy();for(let t of this.nodes)if(t)try{for(let n of t.cleanup??Yb)n()}finally{en(t)}}};function dB(e,t){let n=t?.injector??b(we),r=n.get(ft),o=n.get(Cu),i=n.get(Dt,null,{optional:!0});o.impl??=n.get(Cd);let s=e;typeof s=="function"&&(s={mixedReadWrite:e});let u=n.get(Fr,null,{optional:!0}),a=new mf(o.impl,[s.earlyRead,s.write,s.mixedReadWrite,s.read],u?.view,r,n,i?.snapshot(null));return o.impl.register(a),a}function fB(e,t){let n=gt(e),r=t.elementInjector||Tr();return new mn(n).create(r,t.projectableNodes,t.hostElement,t.environmentInjector,t.directives,t.bindings)}function pB(e){let t=gt(e);if(!t)return null;let n=new mn(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}var Qb=null;function Et(){return Qb}function vf(e){Qb??=e}var Di=class{},vn=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(Kb),providedIn:"platform"})}return e})(),t2=new x(""),Kb=(()=>{class e extends vn{_location;_history;_doc=b(K);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Et().getBaseHref(this._doc)}onPopState(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>new e,providedIn:"platform"})}return e})();function Ju(e,t){return e?t?e.endsWith("/")?t.startsWith("/")?e+t.slice(1):e+t:t.startsWith("/")?e+t:`${e}/${t}`:e:t}function Jb(e){let t=e.search(/#|\?|$/);return e[t-1]==="/"?e.slice(0,t-1)+e.slice(t):e}function it(e){return e&&e[0]!=="?"?`?${e}`:e}var eo=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(e1),providedIn:"root"})}return e})(),Xu=new x(""),e1=(()=>{class e extends eo{_platformLocation;_baseHref;_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??b(K).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return Ju(this._baseHref,n)}path(n=!1){let r=this._platformLocation.pathname+it(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(Xu,8))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),t1=(()=>{class e{_subject=new le;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(n){this._locationStrategy=n;let r=this._locationStrategy.getBaseHref();this._basePath=o2(Jb(Xb(r))),this._locationStrategy.onPopState(o=>{this._subject.next({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+it(r))}normalize(n){return e.stripTrailingSlash(r2(this._basePath,Xb(n)))}prepareExternalUrl(n){return n&&n[0]!=="/"&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription??=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)}),()=>{let r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r??void 0,complete:o??void 0})}static normalizeQueryParams=it;static joinWithSlash=Ju;static stripTrailingSlash=Jb;static \u0275fac=function(r){return new(r||e)(A(eo))};static \u0275prov=I({token:e,factory:()=>n2(),providedIn:"root"})}return e})();function n2(){return new t1(A(eo))}function r2(e,t){if(!e||!t.startsWith(e))return t;let n=t.substring(e.length);return n===""||["/",";","?","#"].includes(n[0])?n:t}function Xb(e){return e.replace(/\/index.html$/,"")}function o2(e){if(new RegExp("^(https?:)?//").test(e)){let[,n]=e.split(/\/\/[^\/]+/);return n}return e}var i2=(()=>{class e extends eo{_platformLocation;_baseHref="";_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,r!=null&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash??"#";return r.length>0?r.substring(1):r}prepareExternalUrl(n){let r=Ju(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(Xu,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();var Df=/\s+/,n1=[],s2=(()=>{class e{_ngEl;_renderer;initialClasses=n1;rawClass;stateMap=new Map;constructor(n,r){this._ngEl=n,this._renderer=r}set klass(n){this.initialClasses=n!=null?n.trim().split(Df):n1}set ngClass(n){this.rawClass=typeof n=="string"?n.trim().split(Df):n}ngDoCheck(){for(let r of this.initialClasses)this._updateState(r,!0);let n=this.rawClass;if(Array.isArray(n)||n instanceof Set)for(let r of n)this._updateState(r,!0);else if(n!=null)for(let r of Object.keys(n))this._updateState(r,!!n[r]);this._applyStateDiff()}_updateState(n,r){let o=this.stateMap.get(n);o!==void 0?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(n,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(let n of this.stateMap){let r=n[0],o=n[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(n,r){n=n.trim(),n.length>0&&n.split(Df).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}})}return e})(),u2=(()=>{class e{_viewContainerRef;ngComponentOutlet=null;ngComponentOutletInputs;ngComponentOutletInjector;ngComponentOutletEnvironmentInjector;ngComponentOutletContent;ngComponentOutletNgModule;_componentRef;_moduleRef;_inputsUsed=new Map;get componentInstance(){return this._componentRef?.instance??null}constructor(n){this._viewContainerRef=n}_needToReCreateNgModuleInstance(n){return n.ngComponentOutletNgModule!==void 0}_needToReCreateComponentInstance(n){return n.ngComponentOutlet!==void 0||n.ngComponentOutletContent!==void 0||n.ngComponentOutletInjector!==void 0||n.ngComponentOutletEnvironmentInjector!==void 0||this._needToReCreateNgModuleInstance(n)}ngOnChanges(n){if(this._needToReCreateComponentInstance(n)&&(this._viewContainerRef.clear(),this._inputsUsed.clear(),this._componentRef=void 0,this.ngComponentOutlet)){let r=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;this._needToReCreateNgModuleInstance(n)&&(this._moduleRef?.destroy(),this.ngComponentOutletNgModule?this._moduleRef=Vd(this.ngComponentOutletNgModule,a2(r)):this._moduleRef=void 0),this._componentRef=this._viewContainerRef.createComponent(this.ngComponentOutlet,{injector:r,ngModuleRef:this._moduleRef,projectableNodes:this.ngComponentOutletContent,environmentInjector:this.ngComponentOutletEnvironmentInjector})}}ngDoCheck(){if(this._componentRef){if(this.ngComponentOutletInputs)for(let n of Object.keys(this.ngComponentOutletInputs))this._inputsUsed.set(n,!0);this._applyInputStateDiff(this._componentRef)}}ngOnDestroy(){this._moduleRef?.destroy()}_applyInputStateDiff(n){for(let[r,o]of this._inputsUsed)o?(n.setInput(r,this.ngComponentOutletInputs[r]),this._inputsUsed.set(r,!1)):(n.setInput(r,void 0),this._inputsUsed.delete(r))}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngComponentOutlet",""]],inputs:{ngComponentOutlet:"ngComponentOutlet",ngComponentOutletInputs:"ngComponentOutletInputs",ngComponentOutletInjector:"ngComponentOutletInjector",ngComponentOutletEnvironmentInjector:"ngComponentOutletEnvironmentInjector",ngComponentOutletContent:"ngComponentOutletContent",ngComponentOutletNgModule:"ngComponentOutletNgModule"},exportAs:["ngComponentOutlet"],features:[hu]})}return e})();function a2(e){return e.get(yn).injector}var ea=class{$implicit;ngForOf;index;count;constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},s1=(()=>{class e{_viewContainer;_template;_differs;set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}_ngForOf=null;_ngForOfDirty=!0;_differ=null;_trackByFn;constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let n=this._ngForOf;!this._differ&&n&&(this._differ=this._differs.find(n).create(this.ngForTrackBy))}if(this._differ){let n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){let r=this._viewContainer;n.forEachOperation((o,i,s)=>{if(o.previousIndex==null)r.createEmbeddedView(this._template,new ea(o.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)r.remove(i===null?void 0:i);else if(i!==null){let u=r.get(i);r.move(u,s),r1(u,o)}});for(let o=0,i=r.length;o{let i=r.get(o.currentIndex);r1(i,o)})}static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn),oe(bf))};static \u0275dir=ot({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}})}return e})();function r1(e,t){e.context.$implicit=t.item}var c2=(()=>{class e{_viewContainer;_context=new ta;_thenTemplateRef=null;_elseTemplateRef=null;_thenViewRef=null;_elseViewRef=null;constructor(n,r){this._viewContainer=n,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){o1(n,!1),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){o1(n,!1),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn))};static \u0275dir=ot({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}})}return e})(),ta=class{$implicit=null;ngIf=null};function o1(e,t){if(e&&!e.createEmbeddedView)throw new _(2020,!1)}var l2=(()=>{class e{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(n,r,o){this._ngEl=n,this._differs=r,this._renderer=o}set ngStyle(n){this._ngStyle=n,!this._differ&&n&&(this._differ=this._differs.find(n).create())}ngDoCheck(){if(this._differ){let n=this._differ.diff(this._ngStyle);n&&this._applyChanges(n)}}_setStyle(n,r){let[o,i]=n.split("."),s=o.indexOf("-")===-1?void 0:nt.DashCase;r!=null?this._renderer.setStyle(this._ngEl.nativeElement,o,i?`${r}${i}`:r,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(n){n.forEachRemovedItem(r=>this._setStyle(r.key,null)),n.forEachAddedItem(r=>this._setStyle(r.key,r.currentValue)),n.forEachChangedItem(r=>this._setStyle(r.key,r.currentValue))}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(Ku),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}})}return e})(),d2=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;constructor(n){this._viewContainerRef=n}ngOnChanges(n){if(this._shouldRecreateView(n)){let r=this._viewContainerRef;if(this._viewRef&&r.remove(r.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let o=this._createContextForwardProxy();this._viewRef=r.createEmbeddedView(this.ngTemplateOutlet,o,{injector:this.ngTemplateOutletInjector??void 0})}}_shouldRecreateView(n){return!!n.ngTemplateOutlet||!!n.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(n,r,o)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,r,o):!1,get:(n,r,o)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,r,o)}})}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},features:[hu]})}return e})();function f2(e,t){return new _(2100,!1)}var Ef=class{createSubscription(t,n,r){return de(()=>t.subscribe({next:n,error:r}))}dispose(t){de(()=>t.unsubscribe())}},_f=class{createSubscription(t,n,r){return t.then(o=>n?.(o),o=>r?.(o)),{unsubscribe:()=>{n=null,r=null}}}dispose(t){t.unsubscribe()}},p2=new _f,h2=new Ef,g2=(()=>{class e{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=b(Pt);constructor(n){this._ref=n}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(n){if(!this._obj){if(n)try{this.markForCheckOnValueUpdate=!1,this._subscribe(n)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return n!==this._obj?(this._dispose(),this.transform(n)):this._latestValue}_subscribe(n){this._obj=n,this._strategy=this._selectStrategy(n),this._subscription=this._strategy.createSubscription(n,r=>this._updateLatestValue(n,r),r=>this.applicationErrorHandler(r))}_selectStrategy(n){if(gi(n))return p2;if(Ou(n))return h2;throw f2(e,n)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(n,r){n===this._obj&&(this._latestValue=r,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static \u0275fac=function(r){return new(r||e)(oe(yf,16))};static \u0275pipe=ku({name:"async",type:e,pure:!1})}return e})();function m2(e,t){return{key:e,value:t}}var y2=(()=>{class e{differs;constructor(n){this.differs=n}differ;keyValues=[];compareFn=i1;transform(n,r=i1){if(!n||!(n instanceof Map)&&typeof n!="object")return null;this.differ??=this.differs.find(n).create();let o=this.differ.diff(n),i=r!==this.compareFn;return o&&(this.keyValues=[],o.forEachItem(s=>{this.keyValues.push(m2(s.key,s.currentValue))})),(o||i)&&(r&&this.keyValues.sort(r),this.compareFn=r),this.keyValues}static \u0275fac=function(r){return new(r||e)(oe(Ku,16))};static \u0275pipe=ku({name:"keyvalue",type:e,pure:!1})}return e})();function i1(e,t){let n=e.key,r=t.key;if(n===r)return 0;if(n==null)return 1;if(r==null)return-1;if(typeof n=="string"&&typeof r=="string")return n{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function Ei(e,t){t=encodeURIComponent(t);for(let n of e.split(";")){let r=n.indexOf("="),[o,i]=r==-1?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}var tr=class{};var xf="browser";function u1(e){return e===xf}var Z7=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new wf(b(K),window)})}return e})(),wf=class{document;window;offset=()=>[0,0];constructor(t,n){this.document=t,this.window=n}setOffset(t){Array.isArray(t)?this.offset=()=>t:this.offset=t}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(t,n){this.window.scrollTo(P(S({},n),{left:t[0],top:t[1]}))}scrollToAnchor(t,n){let r=b2(this.document,t);r&&(this.scrollToElement(r,n),r.focus())}setHistoryScrollRestoration(t){try{this.window.history.scrollRestoration=t}catch{console.warn(pt(2400,!1))}}scrollToElement(t,n){let r=t.getBoundingClientRect(),o=r.left+this.window.pageXOffset,i=r.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(P(S({},n),{left:o-s[0],top:i-s[1]}))}};function b2(e,t){let n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if(typeof e.createTreeWalker=="function"&&e.body&&typeof e.body.attachShadow=="function"){let r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT),o=r.currentNode;for(;o;){let i=o.shadowRoot;if(i){let s=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(s)return s}o=r.nextNode()}}return null}var ro={};lr(ro,{appendToAll:()=>E2,createThemeStyles:()=>_2,merge:()=>D2,structuralStyles:()=>C2,toProp:()=>je});var v2=` - &:not([disabled]) { - cursor: pointer; - opacity: var(--opacity, 0); - transition: opacity var(--speed, 0.2s) cubic-bezier(0, 0, 0.3, 1); - - &:hover, - &:focus { - opacity: 1; - } - }`,a1=` - ${new Array(21).fill(0).map((e,t)=>`.behavior-ho-${t*5} { - --opacity: ${t/20}; - ${v2} - }`).join(` -`)} - - .behavior-o-s { - overflow: scroll; - } - - .behavior-o-a { - overflow: auto; - } - - .behavior-o-h { - overflow: hidden; - } - - .behavior-sw-n { - scrollbar-width: none; - } -`;var c1=` - ${new Array(25).fill(0).map((e,t)=>` - .border-bw-${t} { border-width: ${t}px; } - .border-btw-${t} { border-top-width: ${t}px; } - .border-bbw-${t} { border-bottom-width: ${t}px; } - .border-blw-${t} { border-left-width: ${t}px; } - .border-brw-${t} { border-right-width: ${t}px; } - - .border-ow-${t} { outline-width: ${t}px; } - .border-br-${t} { border-radius: ${t*4}px; overflow: hidden;}`).join(` -`)} - - .border-br-50pc { - border-radius: 50%; - } - - .border-bs-s { - border-style: solid; - } -`;var If=[0,5,10,15,20,25,30,35,40,50,60,70,80,90,95,98,99,100];function D2(...e){let t={};for(let n of e)for(let[r,o]of Object.entries(n)){let i=r.split("-").with(-1,"").join("-"),s=Object.keys(t).filter(u=>u.startsWith(i));for(let u of s)delete t[u];t[r]=o}return t}function E2(e,t,...n){let r=structuredClone(e);for(let o of n)for(let i of Object.keys(o)){let s=i.split("-").with(-1,"").join("-");for(let[u,a]of Object.entries(r)){if(t.includes(u))continue;let c=!1;for(let l=0;l` - ${e.map(t=>{let n=Tf(t);return`.color-bc-${t} { border-color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` -`)} - - ${e.map(t=>{let n=Tf(t),r=[`.color-bgc-${t} { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`,`.color-bbgc-${t}::backdrop { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`];for(let o=.1;o<1;o+=.1)r.push(`.color-bbgc-${t}_${(o*100).toFixed(0)}::backdrop { - background-color: light-dark(oklch(from var(${je(t)}) l c h / calc(alpha * ${o.toFixed(1)})), oklch(from var(${je(n)}) l c h / calc(alpha * ${o.toFixed(1)})) ); - } - `);return r.join(` -`)}).join(` -`)} - - ${e.map(t=>{let n=Tf(t);return`.color-c-${t} { color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` -`)} - `,Tf=e=>{let t=e.match(/^([a-z]+)(\d+)$/);if(!t)return e;let[,n,r]=t,i=100-parseInt(r,10),s=If.reduce((u,a)=>Math.abs(a-i)If.map(t=>`${e}${t}`),l1=[to(no("p")),to(no("s")),to(no("t")),to(no("n")),to(no("nv")),to(no("e")),` - .color-bgc-transparent { - background-color: transparent; - } - - :host { - color-scheme: var(--color-scheme); - } - `];var d1=` - .g-icon { - font-family: "Material Symbols Outlined", "Google Symbols"; - font-weight: normal; - font-style: normal; - font-display: optional; - font-size: 20px; - width: 1em; - height: 1em; - user-select: none; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -webkit-font-feature-settings: "liga"; - -webkit-font-smoothing: antialiased; - overflow: hidden; - - font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 48, - "ROND" 100; - - &.filled { - font-variation-settings: "FILL" 1, "wght" 300, "GRAD" 0, "opsz" 48, - "ROND" 100; - } - - &.filled-heavy { - font-variation-settings: "FILL" 1, "wght" 700, "GRAD" 0, "opsz" 48, - "ROND" 100; - } - } -`;var f1=` - :host { - ${new Array(16).fill(0).map((e,t)=>`--g-${t+1}: ${(t+1)*4}px;`).join(` -`)} - } - - ${new Array(49).fill(0).map((e,t)=>{let n=t-24,r=n<0?`n${Math.abs(n)}`:n.toString();return` - .layout-p-${r} { --padding: ${n*4}px; padding: var(--padding); } - .layout-pt-${r} { padding-top: ${n*4}px; } - .layout-pr-${r} { padding-right: ${n*4}px; } - .layout-pb-${r} { padding-bottom: ${n*4}px; } - .layout-pl-${r} { padding-left: ${n*4}px; } - - .layout-m-${r} { --margin: ${n*4}px; margin: var(--margin); } - .layout-mt-${r} { margin-top: ${n*4}px; } - .layout-mr-${r} { margin-right: ${n*4}px; } - .layout-mb-${r} { margin-bottom: ${n*4}px; } - .layout-ml-${r} { margin-left: ${n*4}px; } - - .layout-t-${r} { top: ${n*4}px; } - .layout-r-${r} { right: ${n*4}px; } - .layout-b-${r} { bottom: ${n*4}px; } - .layout-l-${r} { left: ${n*4}px; }`}).join(` -`)} - - ${new Array(25).fill(0).map((e,t)=>` - .layout-g-${t} { gap: ${t*4}px; }`).join(` -`)} - - ${new Array(8).fill(0).map((e,t)=>` - .layout-grd-col${t+1} { grid-template-columns: ${"1fr ".repeat(t+1).trim()}; }`).join(` -`)} - - .layout-pos-a { - position: absolute; - } - - .layout-pos-rel { - position: relative; - } - - .layout-dsp-none { - display: none; - } - - .layout-dsp-block { - display: block; - } - - .layout-dsp-grid { - display: grid; - } - - .layout-dsp-iflex { - display: inline-flex; - } - - .layout-dsp-flexvert { - display: flex; - flex-direction: column; - } - - .layout-dsp-flexhor { - display: flex; - flex-direction: row; - } - - .layout-fw-w { - flex-wrap: wrap; - } - - .layout-al-fs { - align-items: start; - } - - .layout-al-fe { - align-items: end; - } - - .layout-al-c { - align-items: center; - } - - .layout-as-n { - align-self: normal; - } - - .layout-js-c { - justify-self: center; - } - - .layout-sp-c { - justify-content: center; - } - - .layout-sp-ev { - justify-content: space-evenly; - } - - .layout-sp-bt { - justify-content: space-between; - } - - .layout-sp-s { - justify-content: start; - } - - .layout-sp-e { - justify-content: end; - } - - .layout-ji-e { - justify-items: end; - } - - .layout-r-none { - resize: none; - } - - .layout-fs-c { - field-sizing: content; - } - - .layout-fs-n { - field-sizing: none; - } - - .layout-flx-0 { - flex: 0 0 auto; - } - - .layout-flx-1 { - flex: 1 0 auto; - } - - .layout-c-s { - contain: strict; - } - - /** Widths **/ - - ${new Array(10).fill(0).map((e,t)=>{let n=(t+1)*10;return`.layout-w-${n} { width: ${n}%; max-width: ${n}%; }`}).join(` -`)} - - ${new Array(16).fill(0).map((e,t)=>{let n=t*4;return`.layout-wp-${t} { width: ${n}px; }`}).join(` -`)} - - /** Heights **/ - - ${new Array(10).fill(0).map((e,t)=>{let n=(t+1)*10;return`.layout-h-${n} { height: ${n}%; }`}).join(` -`)} - - ${new Array(16).fill(0).map((e,t)=>{let n=t*4;return`.layout-hp-${t} { height: ${n}px; }`}).join(` -`)} - - .layout-el-cv { - & img, - & video { - width: 100%; - height: 100%; - object-fit: cover; - margin: 0; - } - } - - .layout-ar-sq { - aspect-ratio: 1 / 1; - } - - .layout-ex-fb { - margin: calc(var(--padding) * -1) 0 0 calc(var(--padding) * -1); - width: calc(100% + var(--padding) * 2); - height: calc(100% + var(--padding) * 2); - } -`;var p1=` - ${new Array(21).fill(0).map((e,t)=>`.opacity-el-${t*5} { opacity: ${t/20}; }`).join(` -`)} -`;var h1=` - :host { - --default-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - --default-font-family-mono: "Courier New", Courier, monospace; - } - - .typography-f-s { - font-family: var(--font-family, var(--default-font-family)); - font-optical-sizing: auto; - font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; - } - - .typography-f-sf { - font-family: var(--font-family-flex, var(--default-font-family)); - font-optical-sizing: auto; - } - - .typography-f-c { - font-family: var(--font-family-mono, var(--default-font-family)); - font-optical-sizing: auto; - font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; - } - - .typography-v-r { - font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0, "ROND" 100; - } - - .typography-ta-s { - text-align: start; - } - - .typography-ta-c { - text-align: center; - } - - .typography-fs-n { - font-style: normal; - } - - .typography-fs-i { - font-style: italic; - } - - .typography-sz-ls { - font-size: 11px; - line-height: 16px; - } - - .typography-sz-lm { - font-size: 12px; - line-height: 16px; - } - - .typography-sz-ll { - font-size: 14px; - line-height: 20px; - } - - .typography-sz-bs { - font-size: 12px; - line-height: 16px; - } - - .typography-sz-bm { - font-size: 14px; - line-height: 20px; - } - - .typography-sz-bl { - font-size: 16px; - line-height: 24px; - } - - .typography-sz-ts { - font-size: 14px; - line-height: 20px; - } - - .typography-sz-tm { - font-size: 16px; - line-height: 24px; - } - - .typography-sz-tl { - font-size: 22px; - line-height: 28px; - } - - .typography-sz-hs { - font-size: 24px; - line-height: 32px; - } - - .typography-sz-hm { - font-size: 28px; - line-height: 36px; - } - - .typography-sz-hl { - font-size: 32px; - line-height: 40px; - } - - .typography-sz-ds { - font-size: 36px; - line-height: 44px; - } - - .typography-sz-dm { - font-size: 45px; - line-height: 52px; - } - - .typography-sz-dl { - font-size: 57px; - line-height: 64px; - } - - .typography-ws-p { - white-space: pre-line; - } - - .typography-ws-nw { - white-space: nowrap; - } - - .typography-td-none { - text-decoration: none; - } - - /** Weights **/ - - ${new Array(9).fill(0).map((e,t)=>{let n=(t+1)*100;return`.typography-w-${n} { font-weight: ${n}; }`}).join(` -`)} -`;var C2=[a1,c1,l1,d1,f1,p1,h1].flat(1/0).join(` -`);var Zf={};lr(Zf,{isComponentArrayReference:()=>Mf,isObject:()=>$,isPath:()=>Sf,isResolvedAudioPlayer:()=>Af,isResolvedButton:()=>Nf,isResolvedCard:()=>kf,isResolvedCheckbox:()=>Rf,isResolvedColumn:()=>Ff,isResolvedDateTimeInput:()=>Of,isResolvedDivider:()=>Pf,isResolvedIcon:()=>jf,isResolvedImage:()=>Lf,isResolvedList:()=>Bf,isResolvedModal:()=>Vf,isResolvedMultipleChoice:()=>Hf,isResolvedRow:()=>$f,isResolvedSlider:()=>Uf,isResolvedTabs:()=>zf,isResolvedText:()=>qf,isResolvedTextField:()=>Gf,isResolvedVideo:()=>Wf,isValueMap:()=>x2});function x2(e){return $(e)&&"key"in e}function Sf(e,t){return e==="path"&&typeof t=="string"}function $(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Mf(e){return $(e)?"explicitList"in e||"template"in e:!1}function zt(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="string"||"literalString"in e)}function I2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="number"||"literalNumber"in e)}function T2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="boolean"||"literalBoolean"in e)}function Ut(e){return!(!$(e)||!("id"in e&&"type"in e&&"properties"in e))}function Af(e){return $(e)&&"url"in e&&zt(e.url)}function Nf(e){return $(e)&&"child"in e&&Ut(e.child)&&"action"in e}function kf(e){return $(e)?"child"in e?Ut(e.child):"children"in e?Array.isArray(e.children)&&e.children.every(Ut):!1:!1}function Rf(e){return $(e)&&"label"in e&&zt(e.label)&&"value"in e&&T2(e.value)}function Ff(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Of(e){return $(e)&&"value"in e&&zt(e.value)}function Pf(e){return $(e)}function Lf(e){return $(e)&&"url"in e&&zt(e.url)}function jf(e){return $(e)&&"name"in e&&zt(e.name)}function Bf(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Vf(e){return $(e)&&"entryPointChild"in e&&Ut(e.entryPointChild)&&"contentChild"in e&&Ut(e.contentChild)}function Hf(e){return $(e)&&"selections"in e}function $f(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Uf(e){return $(e)&&"value"in e&&I2(e.value)}function S2(e){return $(e)&&"title"in e&&zt(e.title)&&"child"in e&&Ut(e.child)}function zf(e){return $(e)&&"tabItems"in e&&Array.isArray(e.tabItems)&&e.tabItems.every(S2)}function qf(e){return $(e)&&"text"in e&&zt(e.text)}function Gf(e){return $(e)&&"label"in e&&zt(e.label)}function Wf(e){return $(e)&&"url"in e&&zt(e.url)}var na=(()=>{class e{static{this.DEFAULT_SURFACE_ID="@default"}#t=Map;#n=Array;#o=Set;#e=Object;#r;constructor(n={mapCtor:Map,arrayCtor:Array,setCtor:Set,objCtor:Object}){this.opts=n,this.#n=n.arrayCtor,this.#t=n.mapCtor,this.#o=n.setCtor,this.#e=n.objCtor,this.#r=new n.mapCtor}getSurfaces(){return this.#r}clearSurfaces(){this.#r.clear()}processMessages(n){for(let r of n)r.beginRendering&&this.#g(r.beginRendering,r.beginRendering.surfaceId),r.surfaceUpdate&&this.#m(r.surfaceUpdate,r.surfaceUpdate.surfaceId),r.dataModelUpdate&&this.#y(r.dataModelUpdate,r.dataModelUpdate.surfaceId),r.deleteSurface&&this.#b(r.deleteSurface)}getData(n,r,o=e.DEFAULT_SURFACE_ID){let i=this.#i(o);if(!i)return null;let s;return r==="."||r===""?s=n.dataContextPath??"/":s=this.resolvePath(r,n.dataContextPath),this.#p(i.dataModel,s)}setData(n,r,o,i=e.DEFAULT_SURFACE_ID){if(!n){console.warn("No component node set");return}let s=this.#i(i);if(!s)return;let u;r==="."||r===""?u=n.dataContextPath??"/":u=this.resolvePath(r,n.dataContextPath),this.#a(s.dataModel,u,o)}resolvePath(n,r){return n.startsWith("/")?n:r&&r!=="/"?r.endsWith("/")?`${r}${n}`:`${r}/${n}`:`/${n}`}#d(n){if(typeof n!="string")return n;let r=n.trim();if(r.startsWith("{")&&r.endsWith("}")||r.startsWith("[")&&r.endsWith("]"))try{return JSON.parse(n)}catch(o){return console.warn(`Failed to parse potential JSON string: "${n.substring(0,50)}..."`,o),n}return n}#u(n){let r=new this.#t;for(let o of n){if(!$(o)||!("key"in o))continue;let i=o.key,s=this.#h(o);if(!s)continue;let u=o[s];s==="valueMap"&&Array.isArray(u)?u=this.#u(u):typeof u=="string"&&(u=this.#d(u)),this.#a(r,i,u)}return r}#a(n,r,o){if(Array.isArray(o)&&(o.length===0||$(o[0])&&"key"in o[0]))if(o.length===1&&$(o[0])&&o[0].key==="."){let c=o[0],l=this.#h(c);l?(o=c[l],l==="valueMap"&&Array.isArray(o)?o=this.#u(o):typeof o=="string"&&(o=this.#d(o))):o=this.#u(o)}else o=this.#u(o);let i=this.#f(r).split("/").filter(c=>c);if(i.length===0){if(o instanceof Map||$(o)){!(o instanceof Map)&&$(o)&&(o=new this.#t(Object.entries(o))),n.clear();for(let[c,l]of o.entries())n.set(c,l)}else console.error("Cannot set root of DataModel to a non-Map value.");return}let s=n;for(let c=0;ci.length>0).join("/")}#p(n,r){let o=this.#f(r).split("/").filter(s=>s),i=n;for(let s of o){if(i==null)return null;if(i instanceof Map)i=i.get(s);else if(Array.isArray(i)&&/^\d+$/.test(s))i=i[parseInt(s,10)];else if($(i))i=i[s];else return null}return i}#i(n){let r=this.#r.get(n);return r||(r=new this.#e({rootComponentId:null,componentTree:null,dataModel:new this.#t,components:new this.#t,styles:new this.#e}),this.#r.set(n,r)),r}#g(n,r){let o=this.#i(r);o.rootComponentId=n.root,o.styles=n.styles??{},this.#c(o)}#m(n,r){let o=this.#i(r);for(let i of n.components)o.components.set(i.id,i);this.#c(o)}#y(n,r){let o=this.#i(r),i=n.path??"/";this.#a(o.dataModel,i,n.contents),this.#c(o)}#b(n){this.#r.delete(n.surfaceId)}#c(n){if(!n.rootComponentId){n.componentTree=null;return}let r=new this.#o;n.componentTree=this.#s(n.rootComponentId,n,r,"/","")}#h(n){return Object.keys(n).find(r=>r.startsWith("value"))}#s(n,r,o,i,s=""){let u=`${n}${s}`,{components:a}=r;if(!a.has(n))return null;if(o.has(u))throw new Error(`Circular dependency for component "${u}".`);o.add(u);let c=a.get(n),l=c.component??{},d=Object.keys(l)[0],h=l[d],f=new this.#e;if($(h))for(let[g,m]of Object.entries(h))f[g]=this.#l(m,r,o,i,s);o.delete(u);let p={id:u,dataContextPath:i,weight:c.weight??"initial"};switch(d){case"Text":if(!qf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Text",properties:f}));case"Image":if(!Lf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Image",properties:f}));case"Icon":if(!jf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Icon",properties:f}));case"Video":if(!Wf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Video",properties:f}));case"AudioPlayer":if(!Af(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"AudioPlayer",properties:f}));case"Row":if(!$f(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Row",properties:f}));case"Column":if(!Ff(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Column",properties:f}));case"List":if(!Bf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"List",properties:f}));case"Card":if(!kf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Card",properties:f}));case"Tabs":if(!zf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Tabs",properties:f}));case"Divider":if(!Pf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Divider",properties:f}));case"Modal":if(!Vf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Modal",properties:f}));case"Button":if(!Nf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Button",properties:f}));case"CheckBox":if(!Rf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"CheckBox",properties:f}));case"TextField":if(!Gf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"TextField",properties:f}));case"DateTimeInput":if(!Of(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"DateTimeInput",properties:f}));case"MultipleChoice":if(!Hf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"MultipleChoice",properties:f}));case"Slider":if(!Uf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Slider",properties:f}));default:return new this.#e(P(S({},p),{type:d,properties:f}))}}#l(n,r,o,i,s=""){if(typeof n=="string"&&r.components.has(n))return this.#s(n,r,o,i,s);if(Mf(n)){if(n.explicitList)return n.explicitList.map(u=>this.#s(u,r,o,i,s));if(n.template){let u=this.resolvePath(n.template.dataBinding,i),a=this.#p(r.dataModel,u),c=n.template;if(Array.isArray(a))return a.map((d,h)=>{let g=`:${[...i.split("/").filter(y=>/^\d+$/.test(y)),h].join(":")}`,m=`${u}/${h}`;return this.#s(c.componentId,r,o,m,g)});let l=this.#t;return a instanceof l?Array.from(a.keys(),d=>{let h=`:${d}`,f=`${u}/${d}`;return this.#s(c.componentId,r,o,f,h)}):new this.#n}}if(Array.isArray(n))return n.map(u=>this.#l(u,r,o,i,s));if($(n)){let u=new this.#e;for(let[a,c]of Object.entries(n)){let l=c;if(Sf(a,c)&&i!=="/"){l=c.replace(/^\.?\/item/,"").replace(/^\.?\/text/,"").replace(/^\.?\/label/,"").replace(/^\.?\//,""),u[a]=l;continue}u[a]=this.#l(l,r,o,i,s)}return u}return n}}return e})();var M2=Object.defineProperty,A2=(e,t,n)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yf=(e,t,n)=>(A2(e,typeof t!="symbol"?t+"":t,n),n),N2=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},Qf=(e,t)=>{if(Object(t)!==t)throw TypeError('Cannot use the "in" operator on this value');return e.has(t)},ra=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},g1=(e,t,n)=>(N2(e,t,"access private method"),n);function m1(e,t){return Object.is(e,t)}var se=null,_i=!1,oa=1,ia=Symbol("SIGNAL");function oo(e){let t=se;return se=e,t}function k2(){return se}function R2(){return _i}var tp={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function ua(e){if(_i)throw new Error("");if(se===null)return;se.consumerOnSignalRead(e);let t=se.nextProducerIndex++;if(io(se),te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function B2(e){io(e);for(let t=0;t0}function io(e){e.producerNode??(e.producerNode=[]),e.producerIndexOfThis??(e.producerIndexOfThis=[]),e.producerLastReadVersion??(e.producerLastReadVersion=[])}function np(e){e.liveConsumerNode??(e.liveConsumerNode=[]),e.liveConsumerIndexOfThis??(e.liveConsumerIndexOfThis=[])}function D1(e){if(y1(e),ua(e),e.value===ep)throw e.error;return e.value}function V2(e){let t=Object.create(H2);t.computation=e;let n=()=>D1(t);return n[ia]=t,n}var Kf=Symbol("UNSET"),Jf=Symbol("COMPUTING"),ep=Symbol("ERRORED"),H2=P(S({},tp),{value:Kf,dirty:!0,error:null,equal:m1,producerMustRecompute(e){return e.value===Kf||e.value===Jf},producerRecomputeValue(e){if(e.value===Jf)throw new Error("Detected cycle in computations.");let t=e.value;e.value=Jf;let n=L2(e),r,o=!1;try{r=e.computation.call(e.wrapper),o=t!==Kf&&t!==ep&&e.equal.call(e.wrapper,t,r)}catch(i){r=ep,e.error=i}finally{j2(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function $2(){throw new Error}var U2=$2;function z2(){U2()}function q2(e){let t=Object.create(Z2);t.value=e;let n=()=>(ua(t),t.value);return n[ia]=t,n}function G2(){return ua(this),this.value}function W2(e,t){O2()||z2(),e.equal.call(e.wrapper,e.value,t)||(e.value=t,Y2(e))}var Z2=P(S({},tp),{equal:m1,value:void 0});function Y2(e){e.version++,F2(),b1(e)}var pe=Symbol("node"),sa;(e=>{var t,n,r,o,i,s;class u{constructor(l,d={}){ra(this,n),Yf(this,t);let f=q2(l)[ia];if(this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.get");return G2.call(this[pe])}set(l){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.set");if(R2())throw new Error("Writes to signals not permitted during Watcher callback");let d=this[pe];W2(d,l)}}t=pe,n=new WeakSet,r=function(){},e.isState=c=>typeof c=="object"&&Qf(n,c),e.State=u;class a{constructor(l,d){ra(this,i),Yf(this,o);let f=V2(l)[ia];if(f.consumerAllowSignalWrites=!0,this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isComputed)(this))throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get");return D1(this[pe])}}o=pe,i=new WeakSet,s=function(){},e.isComputed=c=>typeof c=="object"&&Qf(i,c),e.Computed=a,(c=>{var l,d,h,f,p;function g(E){let N,O=null;try{O=oo(null),N=E()}finally{oo(O)}return N}c.untrack=g;function m(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called introspectSources without a Computed or Watcher argument");return((N=E[pe].producerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSources=m;function y(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called introspectSinks without a Signal argument");return((N=E[pe].liveConsumerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSinks=y;function v(E){if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called hasSinks without a Signal argument");let N=E[pe].liveConsumerNode;return N?N.length>0:!1}c.hasSinks=v;function w(E){if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called hasSources without a Computed or Watcher argument");let N=E[pe].producerNode;return N?N.length>0:!1}c.hasSources=w;class D{constructor(N){ra(this,d),ra(this,f),Yf(this,l);let O=Object.create(tp);O.wrapper=this,O.consumerMarkedDirty=N,O.consumerIsAlwaysLive=!0,O.consumerAllowSignalWrites=!1,O.producerNode=[],this[pe]=O}watch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");g1(this,f,p).call(this,N);let O=this[pe];O.dirty=!1;let J=oo(O);for(let ut of N)ua(ut[pe]);oo(J)}unwatch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");g1(this,f,p).call(this,N);let O=this[pe];io(O);for(let J=O.producerNode.length-1;J>=0;J--)if(N.includes(O.producerNode[J].wrapper)){aa(O.producerNode[J],O.producerIndexOfThis[J]);let ut=O.producerNode.length-1;if(O.producerNode[J]=O.producerNode[ut],O.producerIndexOfThis[J]=O.producerIndexOfThis[ut],O.producerNode.length--,O.producerIndexOfThis.length--,O.nextProducerIndex--,JO.dirty).map(O=>O.wrapper)}}l=pe,d=new WeakSet,h=function(){},f=new WeakSet,p=function(E){for(let N of E)if(!(0,e.isComputed)(N)&&!(0,e.isState)(N))throw new TypeError("Called watch/unwatch without a Computed or State argument")},e.isWatcher=E=>Qf(d,E),c.Watcher=D;function F(){var E;return(E=k2())==null?void 0:E.wrapper}c.currentComputed=F,c.watched=Symbol("watched"),c.unwatched=Symbol("unwatched")})(e.subtle||(e.subtle={}))})(sa||(sa={}));var qe=(e=null)=>new sa.State(e,{equals:()=>!1});var Q2=new Set([Symbol.iterator,"concat","entries","every","filter","find","findIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","slice","some","values"]),K2=new Set(["fill","push","unshift"]);function E1(e){if(typeof e=="symbol")return null;let t=Number(e);return isNaN(t)?null:t%1===0?t:null}var Ci=class e{static from(t,n,r){return n?new e(Array.from(t,n,r)):new e(Array.from(t))}static of(...t){return new e(t)}constructor(t=[]){let n=t.slice(),r=this,o=new Map,i=!1;return new Proxy(n,{get(s,u){let a=E1(u);if(a!==null)return r.#o(a),r.#t.get(),s[a];if(u==="length")return i?i=!1:r.#t.get(),s[u];if(K2.has(u)&&(i=!0),Q2.has(u)){let c=o.get(u);return c===void 0&&(c=(...l)=>(r.#t.get(),s[u](...l)),o.set(u,c)),c}return s[u]},set(s,u,a){s[u]=a;let c=E1(u);return c!==null?(r.#e(c),r.#t.set(null)):u==="length"&&r.#t.set(null),!0},getPrototypeOf(){return e.prototype}})}#t=qe();#n=new Map;#o(t){let n=this.#n.get(t);n===void 0&&(n=qe(),this.#n.set(t,n)),n.get()}#e(t){let n=this.#n.get(t);n&&n.set(null)}};Object.setPrototypeOf(Ci.prototype,Array.prototype);var wi=class{collection=qe();storages=new Map;vals;readStorageFor(t){let{storages:n}=this,r=n.get(t);r===void 0&&(r=qe(),n.set(t,r)),r.get()}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=t?new Map(t):new Map}get(t){return this.readStorageFor(t),this.vals.get(t)}has(t){return this.readStorageFor(t),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}set(t,n){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.set(t,n),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(wi.prototype,Map.prototype);var rp=class e{static fromEntries(t){return new e(Object.fromEntries(t))}#t=new Map;#n=qe();constructor(t={}){let n=Object.getPrototypeOf(t),r=Object.getOwnPropertyDescriptors(t),o=Object.create(n);for(let s in r)Object.defineProperty(o,s,r[s]);let i=this;return new Proxy(o,{get(s,u,a){return i.#o(u),Reflect.get(s,u,a)},has(s,u){return i.#o(u),u in s},ownKeys(s){return i.#n.get(),Reflect.ownKeys(s)},set(s,u,a,c){let l=Reflect.set(s,u,a,c);return i.#e(u),i.#r(),l},deleteProperty(s,u){return u in s&&(delete s[u],i.#e(u),i.#r()),!0},getPrototypeOf(){return e.prototype}})}#o(t){let n=this.#t.get(t);n===void 0&&(n=qe(),this.#t.set(t,n)),n.get()}#e(t){let n=this.#t.get(t);n&&n.set(null)}#r(){this.#n.set(null)}},_1=rp;var xi=class{collection=qe();storages=new Map;vals;storageFor(t){let n=this.storages,r=n.get(t);return r===void 0&&(r=qe(),n.set(t,r)),r}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=new Set(t)}has(t){return this.storageFor(t).get(),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}add(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.add(t),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(xi.prototype,Set.prototype);function C1(){return new na({arrayCtor:Ci,mapCtor:wi,objCtor:_1,setCtor:xi})}var w1={createSignalA2uiMessageProcessor:C1,A2uiMessageProcessor:na,Guards:Zf};var Ii=class{_doc;constructor(t){this._doc=t}manager},ca=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o,i){return n.addEventListener(r,o,i),()=>this.removeEventListener(n,r,o,i)}removeEventListener(n,r,o,i){return n.removeEventListener(r,o,i)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),fa=new x(""),up=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(n,r){this._zone=r,n.forEach(s=>{s.manager=this});let o=n.filter(s=>!(s instanceof ca));this._plugins=o.slice().reverse();let i=n.find(s=>s instanceof ca);i&&this._plugins.push(i)}addEventListener(n,r,o,i){return this._findPluginFor(r).addEventListener(n,r,o,i)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new _(5101,!1);return this._eventNameToPlugin.set(n,r),r}static \u0275fac=function(r){return new(r||e)(A(fa),A(be))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),op="ng-app-id";function x1(e){for(let t of e)t.remove()}function I1(e,t){let n=t.createElement("style");return n.textContent=e,n}function J2(e,t,n,r){let o=e.head?.querySelectorAll(`style[${op}="${t}"],link[${op}="${t}"]`);if(o)for(let i of o)i.removeAttribute(op),i instanceof HTMLLinkElement?r.set(i.href.slice(i.href.lastIndexOf("/")+1),{usage:0,elements:[i]}):i.textContent&&n.set(i.textContent,{usage:0,elements:[i]})}function sp(e,t){let n=t.createElement("link");return n.setAttribute("rel","stylesheet"),n.setAttribute("href",e),n}var ap=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,J2(n,r,this.inline,this.external),this.hosts.add(n.head)}addStyles(n,r){for(let o of n)this.addUsage(o,this.inline,I1);r?.forEach(o=>this.addUsage(o,this.external,sp))}removeStyles(n,r){for(let o of n)this.removeUsage(o,this.inline);r?.forEach(o=>this.removeUsage(o,this.external))}addUsage(n,r,o){let i=r.get(n);i?i.usage++:r.set(n,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,o(n,this.doc)))})}removeUsage(n,r){let o=r.get(n);o&&(o.usage--,o.usage<=0&&(x1(o.elements),r.delete(n)))}ngOnDestroy(){for(let[,{elements:n}]of[...this.inline,...this.external])x1(n);this.hosts.clear()}addHost(n){this.hosts.add(n);for(let[r,{elements:o}]of this.inline)o.push(this.addElement(n,I1(r,this.doc)));for(let[r,{elements:o}]of this.external)o.push(this.addElement(n,sp(r,this.doc)))}removeHost(n){this.hosts.delete(n)}addElement(n,r){return this.nonce&&r.setAttribute("nonce",this.nonce),n.appendChild(r)}static \u0275fac=function(r){return new(r||e)(A(K),A(gu),A(yu,8),A(Xn))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),ip={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},cp=/%COMP%/g;var S1="%COMP%",X2=`_nghost-${S1}`,eT=`_ngcontent-${S1}`,tT=!0,nT=new x("",{factory:()=>tT});function rT(e){return eT.replace(cp,e)}function oT(e){return X2.replace(cp,e)}function M1(e,t){return t.map(n=>n.replace(cp,e))}var lp=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(n,r,o,i,s,u,a=null,c=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.ngZone=u,this.nonce=a,this.tracingService=c,this.defaultRenderer=new Ti(n,s,u,this.tracingService)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;let o=this.getOrCreateRenderer(n,r);return o instanceof da?o.applyToHost(n):o instanceof Si&&o.applyStyles(),o}getOrCreateRenderer(n,r){let o=this.rendererByCompId,i=o.get(r.id);if(!i){let s=this.doc,u=this.ngZone,a=this.eventManager,c=this.sharedStylesHost,l=this.removeStylesOnCompDestroy,d=this.tracingService;switch(r.encapsulation){case tt.Emulated:i=new da(a,c,r,this.appId,l,s,u,d);break;case tt.ShadowDom:return new la(a,n,r,s,u,this.nonce,d,c);case tt.ExperimentalIsolatedShadowDom:return new la(a,n,r,s,u,this.nonce,d);default:i=new Si(a,c,r,l,s,u,d);break}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(n){this.rendererByCompId.delete(n)}static \u0275fac=function(r){return new(r||e)(A(up),A(ap),A(gu),A(nT),A(K),A(be),A(yu),A(Dt,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),Ti=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.tracingService=o}destroy(){}destroyNode=null;createElement(t,n){return n?this.doc.createElementNS(ip[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(T1(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(T1(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){n.remove()}selectRootElement(t,n){let r=typeof t=="string"?this.doc.querySelector(t):t;if(!r)throw new _(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;let i=ip[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){let o=ip[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(nt.DashCase|nt.Important)?t.style.setProperty(n,r,o&nt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&nt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t!=null&&(t[n]=r)}setValue(t,n){t.nodeValue=n}listen(t,n,r,o){if(typeof t=="string"&&(t=Et().getGlobalEventTarget(this.doc,t),!t))throw new _(5102,!1);let i=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(t,n,i)),this.eventManager.addEventListener(t,n,i,o)}decoratePreventDefault(t){return n=>{if(n==="__ngUnwrap__")return t;t(n)===!1&&n.preventDefault()}}};function T1(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var la=class extends Ti{hostEl;sharedStylesHost;shadowRoot;constructor(t,n,r,o,i,s,u,a){super(t,o,i,u),this.hostEl=n,this.sharedStylesHost=a,this.shadowRoot=n.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let c=r.styles;c=M1(r.id,c);for(let d of c){let h=document.createElement("style");s&&h.setAttribute("nonce",s),h.textContent=d,this.shadowRoot.appendChild(h)}let l=r.getExternalStyles?.();if(l)for(let d of l){let h=sp(d,o);s&&h.setAttribute("nonce",s),this.shadowRoot.appendChild(h)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(null,n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},Si=class extends Ti{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(t,n,r,o,i,s,u,a){super(t,i,s,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o;let c=r.styles;this.styles=a?M1(a,c):c,this.styleUrls=r.getExternalStyles?.(a)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&Qn.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},da=class extends Si{contentAttr;hostAttr;constructor(t,n,r,o,i,s,u,a){let c=o+"-"+r.id;super(t,n,r,i,s,u,a,c),this.contentAttr=rT(c),this.hostAttr=oT(c)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){let r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}};var pa=class e extends Di{supportsDOMEvents=!0;static makeCurrent(){vf(new e)}onAndCancel(t,n,r,o){return t.addEventListener(n,r,o),()=>{t.removeEventListener(n,r,o)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.remove()}createElement(t,n){return n=n||this.getDefaultDocument(),n.createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return n==="window"?window:n==="document"?t:n==="body"?t.body:null}getBaseHref(t){let n=iT();return n==null?null:sT(n)}resetBaseElement(){Mi=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return Ei(document.cookie,t)}},Mi=null;function iT(){return Mi=Mi||document.head.querySelector("base"),Mi?Mi.getAttribute("href"):null}function sT(e){return new URL(e,document.baseURI).pathname}var ha=class{addToWindow(t){xe.getAngularTestability=(r,o=!0)=>{let i=t.findTestabilityInTree(r,o);if(i==null)throw new _(5103,!1);return i},xe.getAllAngularTestabilities=()=>t.getAllTestabilities(),xe.getAllAngularRootElements=()=>t.getAllRootElements();let n=r=>{let o=xe.getAllAngularTestabilities(),i=o.length,s=function(){i--,i==0&&r()};o.forEach(u=>{u.whenStable(s)})};xe.frameworkStabilizers||(xe.frameworkStabilizers=[]),xe.frameworkStabilizers.push(n)}findTestabilityInTree(t,n,r){if(n==null)return null;let o=t.getTestability(n);return o??(r?Et().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},uT=(()=>{class e{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),A1=["alt","control","meta","shift"],aT={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cT={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},N1=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return e.parseEventName(n)!=null}addEventListener(n,r,o,i){let s=e.parseEventName(r),u=e.eventCallback(s.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Et().onAndCancel(n,s.domEventName,u,i))}static parseEventName(n){let r=n.toLowerCase().split("."),o=r.shift();if(r.length===0||!(o==="keydown"||o==="keyup"))return null;let i=e._normalizeKey(r.pop()),s="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),s="code."),A1.forEach(c=>{let l=r.indexOf(c);l>-1&&(r.splice(l,1),s+=c+".")}),s+=i,r.length!=0||i.length===0)return null;let a={};return a.domEventName=o,a.fullKey=s,a}static matchEventFullKeyCode(n,r){let o=aT[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),A1.forEach(s=>{if(s!==o){let u=cT[s];u(n)&&(i+=s+".")}}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return n==="esc"?"escape":n}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();function lT(e,t,n){return at(this,null,function*(){let r=S({rootComponent:e},dT(t,n));return Zb(r)})}function dT(e,t){return{platformRef:t?.platformRef,appProviders:[...k1,...e?.providers??[]],platformProviders:gT}}function fT(){pa.makeCurrent()}function pT(){return new Ve}function hT(){return cd(document),document}var gT=[{provide:Xn,useValue:xf},{provide:mu,useValue:fT,multi:!0},{provide:K,useFactory:hT}];var mT=[{provide:Fu,useClass:ha},{provide:Ru,useClass:hi},{provide:hi,useClass:hi}],k1=[{provide:Lo,useValue:"root"},{provide:Ve,useFactory:pT},{provide:fa,useClass:ca,multi:!0},{provide:fa,useClass:N1,multi:!0},lp,ap,up,{provide:Kn,useExisting:lp},{provide:tr,useClass:uT},[]],yT=(()=>{class e{constructor(){}static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[...k1,...mT],imports:[Cf,Wb]})}return e})();var Dn=class e{headers;normalizedNames=new Map;lazyInit;lazyUpdate=null;constructor(t){t?typeof t=="string"?this.lazyInit=()=>{this.headers=new Map,t.split(` -`).forEach(n=>{let r=n.indexOf(":");if(r>0){let o=n.slice(0,r),i=n.slice(r+1).trim();this.addHeaderEntry(o,i)}})}:typeof Headers<"u"&&t instanceof Headers?(this.headers=new Map,t.forEach((n,r)=>{this.addHeaderEntry(r,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(t).forEach(([n,r])=>{this.setHeaderEntries(n,r)})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();let n=this.headers.get(t.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,n){return this.clone({name:t,value:n,op:"a"})}set(t,n){return this.clone({name:t,value:n,op:"s"})}delete(t,n){return this.clone({name:t,value:n,op:"d"})}maybeSetNormalizedName(t,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,t)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(n=>{this.headers.set(n,t.headers.get(n)),this.normalizedNames.set(n,t.normalizedNames.get(n))})}clone(t){let n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n}applyUpdate(t){let n=t.name.toLowerCase();switch(t.op){case"a":case"s":let r=t.value;if(typeof r=="string"&&(r=[r]),r.length===0)return;this.maybeSetNormalizedName(t.name,n);let o=(t.op==="a"?this.headers.get(n):void 0)||[];o.push(...r),this.headers.set(n,o);break;case"d":let i=t.value;if(!i)this.headers.delete(n),this.normalizedNames.delete(n);else{let s=this.headers.get(n);if(!s)return;s=s.filter(u=>i.indexOf(u)===-1),s.length===0?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,s)}break}}addHeaderEntry(t,n){let r=t.toLowerCase();this.maybeSetNormalizedName(t,r),this.headers.has(r)?this.headers.get(r).push(n):this.headers.set(r,[n])}setHeaderEntries(t,n){let r=(Array.isArray(n)?n:[n]).map(i=>i.toString()),o=t.toLowerCase();this.headers.set(o,r),this.maybeSetNormalizedName(t,o)}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>t(this.normalizedNames.get(n),this.headers.get(n)))}};var ma=class{map=new Map;set(t,n){return this.map.set(t,n),this}get(t){return this.map.has(t)||this.map.set(t,t.defaultValue()),this.map.get(t)}delete(t){return this.map.delete(t),this}has(t){return this.map.has(t)}keys(){return this.map.keys()}},ya=class{encodeKey(t){return R1(t)}encodeValue(t){return R1(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}};function bT(e,t){let n=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(o=>{let i=o.indexOf("="),[s,u]=i==-1?[t.decodeKey(o),""]:[t.decodeKey(o.slice(0,i)),t.decodeValue(o.slice(i+1))],a=n.get(s)||[];a.push(u),n.set(s,a)}),n}var vT=/%(\d[a-f0-9])/gi,DT={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function R1(e){return encodeURIComponent(e).replace(vT,(t,n)=>DT[n]??t)}function ga(e){return`${e}`}var qt=class e{map;encoder;updates=null;cloneFrom=null;constructor(t={}){if(this.encoder=t.encoder||new ya,t.fromString){if(t.fromObject)throw new _(2805,!1);this.map=bT(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(n=>{let r=t.fromObject[n],o=Array.isArray(r)?r.map(ga):[ga(r)];this.map.set(n,o)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();let n=this.map.get(t);return n?n[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,n){return this.clone({param:t,value:n,op:"a"})}appendAll(t){let n=[];return Object.keys(t).forEach(r=>{let o=t[r];Array.isArray(o)?o.forEach(i=>{n.push({param:r,value:i,op:"a"})}):n.push({param:r,value:o,op:"a"})}),this.clone(n)}set(t,n){return this.clone({param:t,value:n,op:"s"})}delete(t,n){return this.clone({param:t,value:n,op:"d"})}toString(){return this.init(),this.keys().map(t=>{let n=this.encoder.encodeKey(t);return this.map.get(t).map(r=>n+"="+this.encoder.encodeValue(r)).join("&")}).filter(t=>t!=="").join("&")}clone(t){let n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(t),n}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":let n=(t.op==="a"?this.map.get(t.param):void 0)||[];n.push(ga(t.value)),this.map.set(t.param,n);break;case"d":if(t.value!==void 0){let r=this.map.get(t.param)||[],o=r.indexOf(ga(t.value));o!==-1&&r.splice(o,1),r.length>0?this.map.set(t.param,r):this.map.delete(t.param)}else{this.map.delete(t.param);break}}}),this.cloneFrom=this.updates=null)}};function ET(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function F1(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function O1(e){return typeof Blob<"u"&&e instanceof Blob}function P1(e){return typeof FormData<"u"&&e instanceof FormData}function _T(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var L1="Content-Type",j1="Accept",V1="text/plain",H1="application/json",CT=`${H1}, ${V1}, */*`,so=class e{url;body=null;headers;context;reportProgress=!1;withCredentials=!1;credentials;keepalive=!1;cache;priority;mode;redirect;referrer;integrity;referrerPolicy;responseType="json";method;params;urlWithParams;transferCache;timeout;constructor(t,n,r,o){this.url=n,this.method=t.toUpperCase();let i;if(ET(this.method)||o?(this.body=r!==void 0?r:null,i=o):i=r,i){if(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,this.keepalive=!!i.keepalive,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.context&&(this.context=i.context),i.params&&(this.params=i.params),i.priority&&(this.priority=i.priority),i.cache&&(this.cache=i.cache),i.credentials&&(this.credentials=i.credentials),typeof i.timeout=="number"){if(i.timeout<1||!Number.isInteger(i.timeout))throw new _(2822,"");this.timeout=i.timeout}i.mode&&(this.mode=i.mode),i.redirect&&(this.redirect=i.redirect),i.integrity&&(this.integrity=i.integrity),i.referrer&&(this.referrer=i.referrer),i.referrerPolicy&&(this.referrerPolicy=i.referrerPolicy),this.transferCache=i.transferCache}if(this.headers??=new Dn,this.context??=new ma,!this.params)this.params=new qt,this.urlWithParams=n;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=n;else{let u=n.indexOf("?"),a=u===-1?"?":uE.set(N,t.setHeaders[N]),w)),t.setParams&&(D=Object.keys(t.setParams).reduce((E,N)=>E.set(N,t.setParams[N]),D)),new e(n,r,m,{params:D,headers:w,context:F,reportProgress:v,responseType:o,withCredentials:y,transferCache:p,keepalive:i,cache:u,priority:s,timeout:g,mode:a,redirect:c,credentials:l,referrer:d,integrity:h,referrerPolicy:f})}},nr=(function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e})(nr||{}),ao=class{headers;status;statusText;url;ok;type;redirected;responseType;constructor(t,n=200,r="OK"){this.headers=t.headers||new Dn,this.status=t.status!==void 0?t.status:n,this.statusText=t.statusText||r,this.url=t.url||null,this.redirected=t.redirected,this.responseType=t.responseType,this.ok=this.status>=200&&this.status<300}},ba=class e extends ao{constructor(t={}){super(t)}type=nr.ResponseHeader;clone(t={}){return new e({headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},Ai=class e extends ao{body;constructor(t={}){super(t),this.body=t.body!==void 0?t.body:null}type=nr.Response;clone(t={}){return new e({body:t.body!==void 0?t.body:this.body,headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0,redirected:t.redirected??this.redirected,responseType:t.responseType??this.responseType})}},uo=class extends ao{name="HttpErrorResponse";message;error;ok=!1;constructor(t){super(t,0,"Unknown Error"),this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${t.url||"(unknown url)"}`:this.message=`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}},wT=200,xT=204;var IT=new x("");var TT=/^\)\]\}',?\n/;var fp=(()=>{class e{xhrFactory;tracingService=b(Dt,{optional:!0});constructor(n){this.xhrFactory=n}maybePropagateTrace(n){return this.tracingService?.propagate?this.tracingService.propagate(n):n}handle(n){if(n.method==="JSONP")throw new _(-2800,!1);let r=this.xhrFactory;return us(null).pipe(ps(()=>new B(i=>{let s=r.build();if(s.open(n.method,n.urlWithParams),n.withCredentials&&(s.withCredentials=!0),n.headers.forEach((m,y)=>s.setRequestHeader(m,y.join(","))),n.headers.has(j1)||s.setRequestHeader(j1,CT),!n.headers.has(L1)){let m=n.detectContentTypeHeader();m!==null&&s.setRequestHeader(L1,m)}if(n.timeout&&(s.timeout=n.timeout),n.responseType){let m=n.responseType.toLowerCase();s.responseType=m!=="json"?m:"text"}let u=n.serializeBody(),a=null,c=()=>{if(a!==null)return a;let m=s.statusText||"OK",y=new Dn(s.getAllResponseHeaders()),v=s.responseURL||n.url;return a=new ba({headers:y,status:s.status,statusText:m,url:v}),a},l=this.maybePropagateTrace(()=>{let{headers:m,status:y,statusText:v,url:w}=c(),D=null;y!==xT&&(D=typeof s.response>"u"?s.responseText:s.response),y===0&&(y=D?wT:0);let F=y>=200&&y<300;if(n.responseType==="json"&&typeof D=="string"){let E=D;D=D.replace(TT,"");try{D=D!==""?JSON.parse(D):null}catch(N){D=E,F&&(F=!1,D={error:N,text:D})}}F?(i.next(new Ai({body:D,headers:m,status:y,statusText:v,url:w||void 0})),i.complete()):i.error(new uo({error:D,headers:m,status:y,statusText:v,url:w||void 0}))}),d=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:m,status:s.status||0,statusText:s.statusText||"Unknown Error",url:y||void 0});i.error(v)}),h=d;n.timeout&&(h=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:new DOMException("Request timed out","TimeoutError"),status:s.status||0,statusText:s.statusText||"Request timeout",url:y||void 0});i.error(v)}));let f=!1,p=this.maybePropagateTrace(m=>{f||(i.next(c()),f=!0);let y={type:nr.DownloadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),n.responseType==="text"&&s.responseText&&(y.partialText=s.responseText),i.next(y)}),g=this.maybePropagateTrace(m=>{let y={type:nr.UploadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),i.next(y)});return s.addEventListener("load",l),s.addEventListener("error",d),s.addEventListener("timeout",h),s.addEventListener("abort",d),n.reportProgress&&(s.addEventListener("progress",p),u!==null&&s.upload&&s.upload.addEventListener("progress",g)),s.send(u),i.next({type:nr.Sent}),()=>{s.removeEventListener("error",d),s.removeEventListener("abort",d),s.removeEventListener("load",l),s.removeEventListener("timeout",h),n.reportProgress&&(s.removeEventListener("progress",p),u!==null&&s.upload&&s.upload.removeEventListener("progress",g)),s.readyState!==s.DONE&&s.abort()}})))}static \u0275fac=function(r){return new(r||e)(A(tr))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function $1(e,t){return t(e)}function ST(e,t){return(n,r)=>t.intercept(n,{handle:o=>e(o,r)})}function MT(e,t,n){return(r,o)=>Sr(n,()=>t(r,i=>e(i,o)))}var U1=new x(""),pp=new x("",{factory:()=>[]}),z1=new x(""),hp=new x("",{factory:()=>!0});function AT(){let e=null;return(t,n)=>{e===null&&(e=(b(U1,{optional:!0})??[]).reduceRight(ST,$1));let r=b(Wn);if(b(hp)){let i=r.add();return e(t,n).pipe(ds(i))}else return e(t,n)}}var gp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(fp),o},providedIn:"root"})}return e})();var va=(()=>{class e{backend;injector;chain=null;pendingTasks=b(Wn);contributeToStability=b(hp);constructor(n,r){this.backend=n,this.injector=r}handle(n){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(pp),...this.injector.get(z1,[])]));this.chain=r.reduceRight((o,i)=>MT(o,i,this.injector),$1)}if(this.contributeToStability){let r=this.pendingTasks.add();return this.chain(n,o=>this.backend.handle(o)).pipe(ds(r))}else return this.chain(n,r=>this.backend.handle(r))}static \u0275fac=function(r){return new(r||e)(A(gp),A(Ce))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),mp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(va),o},providedIn:"root"})}return e})();function dp(e,t){return{body:t,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,credentials:e.credentials,transferCache:e.transferCache,timeout:e.timeout,keepalive:e.keepalive,priority:e.priority,cache:e.cache,mode:e.mode,redirect:e.redirect,integrity:e.integrity,referrer:e.referrer,referrerPolicy:e.referrerPolicy}}var q1=(()=>{class e{handler;constructor(n){this.handler=n}request(n,r,o={}){let i;if(n instanceof so)i=n;else{let a;o.headers instanceof Dn?a=o.headers:a=new Dn(o.headers);let c;o.params&&(o.params instanceof qt?c=o.params:c=new qt({fromObject:o.params})),i=new so(n,r,o.body!==void 0?o.body:null,{headers:a,context:o.context,params:c,reportProgress:o.reportProgress,responseType:o.responseType||"json",withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive,priority:o.priority,cache:o.cache,mode:o.mode,redirect:o.redirect,credentials:o.credentials,referrer:o.referrer,referrerPolicy:o.referrerPolicy,integrity:o.integrity,timeout:o.timeout})}let s=us(i).pipe(lc(a=>this.handler.handle(a)));if(n instanceof so||o.observe==="events")return s;let u=s.pipe(on(a=>a instanceof Ai));switch(o.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof ArrayBuffer))throw new _(2806,!1);return a.body}));case"blob":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof Blob))throw new _(2807,!1);return a.body}));case"text":return u.pipe(Ee(a=>{if(a.body!==null&&typeof a.body!="string")throw new _(2808,!1);return a.body}));default:return u.pipe(Ee(a=>a.body))}case"response":return u;default:throw new _(2809,!1)}}delete(n,r={}){return this.request("DELETE",n,r)}get(n,r={}){return this.request("GET",n,r)}head(n,r={}){return this.request("HEAD",n,r)}jsonp(n,r){return this.request("JSONP",n,{params:new qt().append(r,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(n,r={}){return this.request("OPTIONS",n,r)}patch(n,r,o={}){return this.request("PATCH",n,dp(o,r))}post(n,r,o={}){return this.request("POST",n,dp(o,r))}put(n,r,o={}){return this.request("PUT",n,dp(o,r))}static \u0275fac=function(r){return new(r||e)(A(mp))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var NT=new x("",{factory:()=>!0}),kT="XSRF-TOKEN",RT=new x("",{factory:()=>kT}),FT="X-XSRF-TOKEN",OT=new x("",{factory:()=>FT}),PT=(()=>{class e{cookieName=b(RT);doc=b(K);lastCookieString="";lastToken=null;parseCount=0;getToken(){let n=this.doc.cookie||"";return n!==this.lastCookieString&&(this.parseCount++,this.lastToken=Ei(n,this.cookieName),this.lastCookieString=n),this.lastToken}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),G1=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(PT),o},providedIn:"root"})}return e})();function LT(e,t){if(!b(NT)||e.method==="GET"||e.method==="HEAD")return t(e);try{let o=b(vn).href,{origin:i}=new URL(o),{origin:s}=new URL(e.url,i);if(i!==s)return t(e)}catch{return t(e)}let n=b(G1).getToken(),r=b(OT);return n!=null&&!e.headers.has(r)&&(e=e.clone({headers:e.headers.set(r,n)})),t(e)}var yp=(function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e})(yp||{});function jT(e,t){return{\u0275kind:e,\u0275providers:t}}function W1(...e){let t=[q1,va,{provide:mp,useExisting:va},{provide:gp,useFactory:()=>b(IT,{optional:!0})??b(fp)},{provide:pp,useValue:LT,multi:!0}];for(let n of e)t.push(...n.\u0275providers);return Pn(t)}var B1=new x("");function Z1(){return jT(yp.LegacyInterceptors,[{provide:B1,useFactory:AT},{provide:pp,useExisting:B1,multi:!0}])}var BT=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[W1(Z1())]})}return e})();var s$=(()=>{class e{_doc;constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var bp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(VT),o},providedIn:"root"})}return e})(),VT=(()=>{class e extends bp{_doc;constructor(n){super(),this._doc=n}sanitize(n,r){if(r==null)return null;switch(n){case Le.NONE:return r;case Le.HTML:return Bt(r,"HTML")?Pe(r):Du(this._doc,String(r)).toString();case Le.STYLE:return Bt(r,"Style")?Pe(r):r;case Le.SCRIPT:if(Bt(r,"Script"))return Pe(r);throw new _(5200,!1);case Le.URL:return Bt(r,"URL")?Pe(r):ui(String(r));case Le.RESOURCE_URL:if(Bt(r,"ResourceURL"))return Pe(r);throw new _(5201,!1);default:throw new _(5202,!1)}}bypassSecurityTrustHtml(n){return dd(n)}bypassSecurityTrustStyle(n){return fd(n)}bypassSecurityTrustScript(n){return pd(n)}bypassSecurityTrustUrl(n){return hd(n)}bypassSecurityTrustResourceUrl(n){return gd(n)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Tp={};lr(Tp,{arrayReplaceAt:()=>Ip,assign:()=>fo,escapeHtml:()=>Zt,escapeRE:()=>CS,fromCodePoint:()=>Ri,has:()=>fS,isMdAsciiPunct:()=>sr,isPunctChar:()=>ir,isSpace:()=>H,isString:()=>Na,isValidEntityCode:()=>ka,isWhiteSpace:()=>or,lib:()=>wS,normalizeReference:()=>ur,unescapeAll:()=>Wt,unescapeMd:()=>yS});var wa={};lr(wa,{decode:()=>Ni,encode:()=>_a,format:()=>co,parse:()=>ki});var Y1={};function HT(e){let t=Y1[e];if(t)return t;t=Y1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);t.push(r)}for(let n=0;n=55296&&l<=57343?o+="\uFFFD\uFFFD\uFFFD":o+=String.fromCharCode(l),i+=6;continue}}if((u&248)===240&&i+91114111?o+="\uFFFD\uFFFD\uFFFD\uFFFD":(d-=65536,o+=String.fromCharCode(55296+(d>>10),56320+(d&1023))),i+=9;continue}}o+="\uFFFD"}return o})}Da.defaultChars=";/?:@&=+$,#";Da.componentChars="";var Ni=Da;var Q1={};function $T(e){let t=Q1[e];if(t)return t;t=Q1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);/^[0-9a-z]$/i.test(r)?t.push(r):t.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2))}for(let n=0;n"u"&&(n=!0);let r=$T(t),o="";for(let i=0,s=e.length;i=55296&&u<=57343){if(u>=55296&&u<=56319&&i+1=56320&&a<=57343){o+=encodeURIComponent(e[i]+e[i+1]),i++;continue}}o+="%EF%BF%BD";continue}o+=encodeURIComponent(e[i])}return o}Ea.defaultChars=";/?:@&=+$,-_.!~*'()#";Ea.componentChars="-_.!~*'()";var _a=Ea;function co(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function Ca(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var UT=/^([a-z0-9.+-]+:)/i,zT=/:[0-9]*$/,qT=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,GT=["<",">",'"',"`"," ","\r",` -`," "],WT=["{","}","|","\\","^","`"].concat(GT),ZT=["'"].concat(WT),K1=["%","/","?",";","#"].concat(ZT),J1=["/","?","#"],YT=255,X1=/^[+a-z0-9A-Z_-]{0,63}$/,QT=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,ev={javascript:!0,"javascript:":!0},tv={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function KT(e,t){if(e&&e instanceof Ca)return e;let n=new Ca;return n.parse(e,t),n}Ca.prototype.parse=function(e,t){let n,r,o,i=e;if(i=i.trim(),!t&&e.split("#").length===1){let c=qT.exec(i);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}let s=UT.exec(i);if(s&&(s=s[0],n=s.toLowerCase(),this.protocol=s,i=i.substr(s.length)),(t||s||i.match(/^\/\/[^@\/]+@[^@\/]+/))&&(o=i.substr(0,2)==="//",o&&!(s&&ev[s])&&(i=i.substr(2),this.slashes=!0)),!ev[s]&&(o||s&&!tv[s])){let c=-1;for(let p=0;p127?v+="x":v+=y[w];if(!v.match(X1)){let w=p.slice(0,g),D=p.slice(g+1),F=y.match(QT);F&&(w.push(F[1]),D.unshift(F[2])),D.length&&(i=D.join(".")+i),this.hostname=w.join(".");break}}}}this.hostname.length>YT&&(this.hostname=""),f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}let u=i.indexOf("#");u!==-1&&(this.hash=i.substr(u),i=i.slice(0,u));let a=i.indexOf("?");return a!==-1&&(this.search=i.substr(a),i=i.slice(0,a)),i&&(this.pathname=i),tv[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this};Ca.prototype.parseHost=function(e){let t=zT.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var ki=KT;var vp={};lr(vp,{Any:()=>xa,Cc:()=>Ia,Cf:()=>nv,P:()=>lo,S:()=>Ta,Z:()=>Sa});var xa=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;var Ia=/[\0-\x1F\x7F-\x9F]/;var nv=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;var lo=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;var Ta=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;var Sa=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var rv=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(e=>e.charCodeAt(0)));var ov=new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(e=>e.charCodeAt(0)));var Dp,JT=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Ep=(Dp=String.fromCodePoint)!==null&&Dp!==void 0?Dp:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function _p(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=JT.get(e))!==null&&t!==void 0?t:e}var ge=(function(e){return e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z",e})(ge||{}),XT=32,rr=(function(e){return e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE",e})(rr||{});function Cp(e){return e>=ge.ZERO&&e<=ge.NINE}function eS(e){return e>=ge.UPPER_A&&e<=ge.UPPER_F||e>=ge.LOWER_A&&e<=ge.LOWER_F}function tS(e){return e>=ge.UPPER_A&&e<=ge.UPPER_Z||e>=ge.LOWER_A&&e<=ge.LOWER_Z||Cp(e)}function nS(e){return e===ge.EQUALS||tS(e)}var he=(function(e){return e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity",e})(he||{}),Gt=(function(e){return e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute",e})(Gt||{}),Ma=class{constructor(t,n,r){this.decodeTree=t,this.emitCodePoint=n,this.errors=r,this.state=he.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Gt.Strict}startEntity(t){this.decodeMode=t,this.state=he.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,n){switch(this.state){case he.EntityStart:return t.charCodeAt(n)===ge.NUM?(this.state=he.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=he.NamedEntity,this.stateNamedEntity(t,n));case he.NumericStart:return this.stateNumericStart(t,n);case he.NumericDecimal:return this.stateNumericDecimal(t,n);case he.NumericHex:return this.stateNumericHex(t,n);case he.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|XT)===ge.LOWER_X?(this.state=he.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=he.NumericDecimal,this.stateNumericDecimal(t,n))}addToNumericResult(t,n,r,o){if(n!==r){let i=r-n;this.result=this.result*Math.pow(o,i)+parseInt(t.substr(n,i),o),this.consumed+=i}}stateNumericHex(t,n){let r=n;for(;n>14;for(;n>14,i!==0){if(s===ge.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Gt.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;let{result:n,decodeTree:r}=this,o=(r[n]&rr.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,o,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,r){let{decodeTree:o}=this;return this.emitCodePoint(n===1?o[t]&~rr.VALUE_LENGTH:o[t+1],r),n===3&&this.emitCodePoint(o[t+2],r),r}end(){var t;switch(this.state){case he.NamedEntity:return this.result!==0&&(this.decodeMode!==Gt.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case he.NumericDecimal:return this.emitNumericEntity(0,2);case he.NumericHex:return this.emitNumericEntity(0,3);case he.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case he.EntityStart:return 0}}};function iv(e){let t="",n=new Ma(e,r=>t+=Ep(r));return function(o,i){let s=0,u=0;for(;(u=o.indexOf("&",u))>=0;){t+=o.slice(s,u),n.startEntity(i);let c=n.write(o,u+1);if(c<0){s=u+n.end();break}s=u+c,u=c===0?s+1:s}let a=t+o.slice(s);return t="",a}}function rS(e,t,n,r){let o=(t&rr.BRANCH_LENGTH)>>7,i=t&rr.JUMP_TABLE;if(o===0)return i!==0&&r===i?n:-1;if(i){let a=r-i;return a<0||a>=o?-1:e[n+a]-1}let s=n,u=s+o-1;for(;s<=u;){let a=s+u>>>1,c=e[a];if(cr)u=a-1;else return e[a+o]}return-1}var oS=iv(rv),P$=iv(ov);function En(e,t=Gt.Legacy){return oS(e,t)}function Aa(e){for(let t=1;te.codePointAt(t):(e,t)=>(e.charCodeAt(t)&64512)===55296?(e.charCodeAt(t)-55296)*1024+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function wp(e,t){return function(r){let o,i=0,s="";for(;o=e.exec(r);)i!==o.index&&(s+=r.substring(i,o.index)),s+=t.get(o[0].charCodeAt(0)),i=o.index+1;return s+r.substring(i)}}var sv=wp(/[&<>'"]/g,sS),uv=wp(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),av=wp(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));function lS(e){return Object.prototype.toString.call(e)}function Na(e){return lS(e)==="[object String]"}var dS=Object.prototype.hasOwnProperty;function fS(e,t){return dS.call(e,t)}function fo(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){if(n){if(typeof n!="object")throw new TypeError(n+"must be object");Object.keys(n).forEach(function(r){e[r]=n[r]})}}),e}function Ip(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function ka(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function Ri(e){if(e>65535){e-=65536;let t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var dv=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,pS=/&([a-z#][a-z0-9]{1,31});/gi,hS=new RegExp(dv.source+"|"+pS.source,"gi"),gS=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function mS(e,t){if(t.charCodeAt(0)===35&&gS.test(t)){let r=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return ka(r)?Ri(r):e}let n=En(e);return n!==e?n:e}function yS(e){return e.indexOf("\\")<0?e:e.replace(dv,"$1")}function Wt(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(hS,function(t,n,r){return n||mS(t,r)})}var bS=/[&<>"]/,vS=/[&<>"]/g,DS={"&":"&","<":"<",">":">",'"':"""};function ES(e){return DS[e]}function Zt(e){return bS.test(e)?e.replace(vS,ES):e}var _S=/[.?*+^$[\]\\(){}|-]/g;function CS(e){return e.replace(_S,"\\$&")}function H(e){switch(e){case 9:case 32:return!0}return!1}function or(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function ir(e){return lo.test(e)||Ta.test(e)}function sr(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function ur(e){return e=e.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(e=e.replace(/ẞ/g,"\xDF")),e.toLowerCase().toUpperCase()}var wS={mdurl:wa,ucmicro:vp};var Np={};lr(Np,{parseLinkDestination:()=>Mp,parseLinkLabel:()=>Sp,parseLinkTitle:()=>Ap});function Sp(e,t,n){let r,o,i,s,u=e.posMax,a=e.pos;for(e.pos=t+1,r=1;e.pos32))return i;if(r===41){if(s===0)break;s--}o++}return t===o||s!==0||(i.str=Wt(e.slice(t,o)),i.pos=o,i.ok=!0),i}function Ap(e,t,n,r){let o,i=t,s={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)s.str=r.str,s.marker=r.marker;else{if(i>=n)return s;let u=e.charCodeAt(i);if(u!==34&&u!==39&&u!==40)return s;t++,i++,u===40&&(u=41),s.marker=u}for(;i"+Zt(i.content)+""};_t.code_block=function(e,t,n,r,o){let i=e[t];return""+Zt(e[t].content)+` -`};_t.fence=function(e,t,n,r,o){let i=e[t],s=i.info?Wt(i.info).trim():"",u="",a="";if(s){let l=s.split(/(\s+)/g);u=l[0],a=l.slice(2).join("")}let c;if(n.highlight?c=n.highlight(i.content,u,a)||Zt(i.content):c=Zt(i.content),c.indexOf("${c} -`}return`
${c}
-`};_t.image=function(e,t,n,r,o){let i=e[t];return i.attrs[i.attrIndex("alt")][1]=o.renderInlineAsText(i.children,n,r),o.renderToken(e,t,n)};_t.hardbreak=function(e,t,n){return n.xhtmlOut?`
-`:`
-`};_t.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?`
-`:`
-`:` -`};_t.text=function(e,t){return Zt(e[t].content)};_t.html_block=function(e,t){return e[t].content};_t.html_inline=function(e,t){return e[t].content};function po(){this.rules=fo({},_t)}po.prototype.renderAttrs=function(t){let n,r,o;if(!t.attrs)return"";for(o="",n=0,r=t.attrs.length;n -`:">",i};po.prototype.renderInline=function(e,t,n){let r="",o=this.rules;for(let i=0,s=e.length;i=0&&(r=this.attrs[n][1]),r};ho.prototype.attrJoin=function(t,n){let r=this.attrIndex(t);r<0?this.attrPush([t,n]):this.attrs[r][1]=this.attrs[r][1]+" "+n};var Yt=ho;function pv(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}pv.prototype.Token=Yt;var hv=pv;var xS=/\r\n?|\n/g,IS=/\0/g;function kp(e){let t;t=e.src.replace(xS,` -`),t=t.replace(IS,"\uFFFD"),e.src=t}function Rp(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}function Fp(e){let t=e.tokens;for(let n=0,r=t.length;n\s]/i.test(e)}function SS(e){return/^<\/a\s*>/i.test(e)}function Op(e){let t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n=0;s--){let u=o[s];if(u.type==="link_close"){for(s--;o[s].level!==u.level&&o[s].type!=="link_open";)s--;continue}if(u.type==="html_inline"&&(TS(u.content)&&i>0&&i--,SS(u.content)&&i++),!(i>0)&&u.type==="text"&&e.md.linkify.test(u.content)){let a=u.content,c=e.md.linkify.match(a),l=[],d=u.level,h=0;c.length>0&&c[0].index===0&&s>0&&o[s-1].type==="text_special"&&(c=c.slice(1));for(let f=0;fh){let F=new e.Token("text","",0);F.content=a.slice(h,y),F.level=d,l.push(F)}let v=new e.Token("link_open","a",1);v.attrs=[["href",g]],v.level=d++,v.markup="linkify",v.info="auto",l.push(v);let w=new e.Token("text","",0);w.content=m,w.level=d,l.push(w);let D=new e.Token("link_close","a",-1);D.level=--d,D.markup="linkify",D.info="auto",l.push(D),h=c[f].lastIndex}if(h=0;n--){let r=e[n];r.type==="text"&&!t&&(r.content=r.content.replace(AS,kS)),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function FS(e){let t=0;for(let n=e.length-1;n>=0;n--){let r=e[n];r.type==="text"&&!t&&gv.test(r.content)&&(r.content=r.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function Pp(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)e.tokens[t].type==="inline"&&(MS.test(e.tokens[t].content)&&RS(e.tokens[t].children),gv.test(e.tokens[t].content)&&FS(e.tokens[t].children))}var OS=/['"]/,mv=/['"]/g,yv="\u2019";function Ra(e,t,n){return e.slice(0,t)+n+e.slice(t+1)}function PS(e,t){let n,r=[];for(let o=0;o=0&&!(r[n].level<=s);n--);if(r.length=n+1,i.type!=="text")continue;let u=i.content,a=0,c=u.length;e:for(;a=0)p=u.charCodeAt(l.index-1);else for(n=o-1;n>=0&&!(e[n].type==="softbreak"||e[n].type==="hardbreak");n--)if(e[n].content){p=e[n].content.charCodeAt(e[n].content.length-1);break}let g=32;if(a=48&&p<=57&&(h=d=!1),d&&h&&(d=m,h=y),!d&&!h){f&&(i.content=Ra(i.content,l.index,yv));continue}if(h)for(n=r.length-1;n>=0;n--){let D=r[n];if(r[n].level=0;t--)e.tokens[t].type!=="inline"||!OS.test(e.tokens[t].content)||PS(e.tokens[t].children,e)}function jp(e){let t,n,r=e.tokens,o=r.length;for(let i=0;i0&&this.level++,this.tokens.push(r),r};Ct.prototype.isEmpty=function(t){return this.bMarks[t]+this.tShift[t]>=this.eMarks[t]};Ct.prototype.skipEmptyLines=function(t){for(let n=this.lineMax;tn;)if(!H(this.src.charCodeAt(--t)))return t+1;return t};Ct.prototype.skipChars=function(t,n){for(let r=this.src.length;tr;)if(n!==this.src.charCodeAt(--t))return t+1;return t};Ct.prototype.getLines=function(t,n,r,o){if(t>=n)return"";let i=new Array(n-t);for(let s=0,u=t;ur?i[s]=new Array(a-r+1).join(" ")+this.src.slice(l,d):i[s]=this.src.slice(l,d)}return i.join("")};Ct.prototype.Token=Yt;var vv=Ct;var LS=65536;function Hp(e,t){let n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function Dv(e){let t=[],n=e.length,r=0,o=e.charCodeAt(r),i=!1,s=0,u="";for(;rn)return!1;let o=t+1;if(e.sCount[o]=4)return!1;let i=e.bMarks[o]+e.tShift[o];if(i>=e.eMarks[o])return!1;let s=e.src.charCodeAt(i++);if(s!==124&&s!==45&&s!==58||i>=e.eMarks[o])return!1;let u=e.src.charCodeAt(i++);if(u!==124&&u!==45&&u!==58&&!H(u)||s===45&&H(u))return!1;for(;i=4)return!1;c=Dv(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop();let d=c.length;if(d===0||d!==l.length)return!1;if(r)return!0;let h=e.parentType;e.parentType="table";let f=e.md.block.ruler.getRules("blockquote"),p=e.push("table_open","table",1),g=[t,0];p.map=g;let m=e.push("thead_open","thead",1);m.map=[t,t+1];let y=e.push("tr_open","tr",1);y.map=[t,t+1];for(let D=0;D=4||(c=Dv(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop(),w+=d-c.length,w>LS))break;if(o===t+2){let E=e.push("tbody_open","tbody",1);E.map=v=[t+2,0]}let F=e.push("tr_open","tr",1);F.map=[o,o+1];for(let E=0;E=4){r++,o=r;continue}break}e.line=o;let i=e.push("code_block","code",0);return i.content=e.getLines(t,o,4+e.blkIndent,!1)+` -`,i.map=[t,e.line],!0}function zp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||o+3>i)return!1;let s=e.src.charCodeAt(o);if(s!==126&&s!==96)return!1;let u=o;o=e.skipChars(o,s);let a=o-u;if(a<3)return!1;let c=e.src.slice(u,o),l=e.src.slice(o,i);if(s===96&&l.indexOf(String.fromCharCode(s))>=0)return!1;if(r)return!0;let d=t,h=!1;for(;d++,!(d>=n||(o=u=e.bMarks[d]+e.tShift[d],i=e.eMarks[d],o=4)&&(o=e.skipChars(o,s),!(o-u=4||e.src.charCodeAt(o)!==62)return!1;if(r)return!0;let u=[],a=[],c=[],l=[],d=e.md.block.ruler.getRules("blockquote"),h=e.parentType;e.parentType="blockquote";let f=!1,p;for(p=t;p=i)break;if(e.src.charCodeAt(o++)===62&&!w){let F=e.sCount[p]+1,E,N;e.src.charCodeAt(o)===32?(o++,F++,N=!1,E=!0):e.src.charCodeAt(o)===9?(E=!0,(e.bsCount[p]+F)%4===3?(o++,F++,N=!1):N=!0):E=!1;let O=F;for(u.push(e.bMarks[p]),e.bMarks[p]=o;o=i,a.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(E?1:0),c.push(e.sCount[p]),e.sCount[p]=O-F,l.push(e.tShift[p]),e.tShift[p]=o-e.bMarks[p];continue}if(f)break;let D=!1;for(let F=0,E=d.length;F";let y=[t,0];m.map=y,e.md.block.tokenize(e,t,p);let v=e.push("blockquote_close","blockquote",-1);v.markup=">",e.lineMax=s,e.parentType=h,y[1]=e.line;for(let w=0;w=4)return!1;let i=e.bMarks[t]+e.tShift[t],s=e.src.charCodeAt(i++);if(s!==42&&s!==45&&s!==95)return!1;let u=1;for(;i=r)return-1;let i=e.src.charCodeAt(o++);if(i<48||i>57)return-1;for(;;){if(o>=r)return-1;if(i=e.src.charCodeAt(o++),i>=48&&i<=57){if(o-n>=10)return-1;continue}if(i===41||i===46)break;return-1}return o=4||e.listIndent>=0&&e.sCount[a]-e.listIndent>=4&&e.sCount[a]=e.blkIndent&&(l=!0);let d,h,f;if((f=_v(e,a))>=0){if(d=!0,s=e.bMarks[a]+e.tShift[a],h=Number(e.src.slice(s,f-1)),l&&h!==1)return!1}else if((f=Ev(e,a))>=0)d=!1;else return!1;if(l&&e.skipSpaces(f)>=e.eMarks[a])return!1;if(r)return!0;let p=e.src.charCodeAt(f-1),g=e.tokens.length;d?(u=e.push("ordered_list_open","ol",1),h!==1&&(u.attrs=[["start",h]])):u=e.push("bullet_list_open","ul",1);let m=[a,0];u.map=m,u.markup=String.fromCharCode(p);let y=!1,v=e.md.block.ruler.getRules("list"),w=e.parentType;for(e.parentType="list";a=o?N=1:N=F-D,N>4&&(N=1);let O=D+N;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(p);let J=[a,0];u.map=J,d&&(u.info=e.src.slice(s,f-1));let ut=e.tight,mo=e.tShift[a],Pi=e.sCount[a],Yv=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=O,e.tight=!0,e.tShift[a]=E-e.bMarks[a],e.sCount[a]=F,E>=o&&e.isEmpty(a+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,a,n,!0),(!e.tight||y)&&(c=!1),y=e.line-a>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=Yv,e.tShift[a]=mo,e.sCount[a]=Pi,e.tight=ut,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(p),a=e.line,J[1]=a,a>=n||e.sCount[a]=4)break;let wh=!1;for(let cr=0,Qv=v.length;cr=4||e.src.charCodeAt(o)!==91)return!1;function u(v){let w=e.lineMax;if(v>=w||e.isEmpty(v))return null;let D=!1;if(e.sCount[v]-e.blkIndent>3&&(D=!0),e.sCount[v]<0&&(D=!0),!D){let N=e.md.block.ruler.getRules("reference"),O=e.parentType;e.parentType="reference";let J=!1;for(let ut=0,mo=N.length;ut"u"&&(e.env.references={}),typeof e.env.references[y]>"u"&&(e.env.references[y]={title:m,href:d}),e.line=s),!0):!1}var Cv=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"];var BS="[a-zA-Z_:][a-zA-Z0-9:._-]*",VS="[^\"'=<>`\\x00-\\x20]+",HS="'[^']*'",$S='"[^"]*"',US="(?:"+VS+"|"+HS+"|"+$S+")",zS="(?:\\s+"+BS+"(?:\\s*=\\s*"+US+")?)",wv="<[A-Za-z][A-Za-z0-9\\-]*"+zS+"*\\s*\\/?>",xv="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",qS="",GS="<[?][\\s\\S]*?[?]>",WS="]*>",ZS="",Iv=new RegExp("^(?:"+wv+"|"+xv+"|"+qS+"|"+GS+"|"+WS+"|"+ZS+")"),Tv=new RegExp("^(?:"+wv+"|"+xv+")");var go=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(Tv.source+"\\s*$"),/^$/,!1]];function Yp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(o)!==60)return!1;let s=e.src.slice(o,i),u=0;for(;u=4)return!1;let s=e.src.charCodeAt(o);if(s!==35||o>=i)return!1;let u=1;for(s=e.src.charCodeAt(++o);s===35&&o6||oo&&H(e.src.charCodeAt(a-1))&&(i=a),e.line=t+1;let c=e.push("heading_open","h"+String(u),1);c.markup="########".slice(0,u),c.map=[t,e.line];let l=e.push("inline","",0);l.content=e.src.slice(o,i).trim(),l.map=[t,e.line],l.children=[];let d=e.push("heading_close","h"+String(u),-1);return d.markup="########".slice(0,u),!0}function Kp(e,t,n){let r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;let o=e.parentType;e.parentType="paragraph";let i=0,s,u=t+1;for(;u3)continue;if(e.sCount[u]>=e.blkIndent){let f=e.bMarks[u]+e.tShift[u],p=e.eMarks[u];if(f=p))){i=s===61?1:2;break}}if(e.sCount[u]<0)continue;let h=!1;for(let f=0,p=r.length;f3||e.sCount[i]<0)continue;let c=!1;for(let l=0,d=r.length;l=n||e.sCount[s]=i){e.line=n;break}let a=e.line,c=!1;for(let l=0;l=e.line)throw new Error("block rule didn't increment state.line");break}if(!c)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),s=e.line,s0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r};Fi.prototype.scanDelims=function(e,t){let n=this.posMax,r=this.src.charCodeAt(e),o=e>0?this.src.charCodeAt(e-1):32,i=e;for(;i0)return!1;let n=e.pos,r=e.posMax;if(n+3>r||e.src.charCodeAt(n)!==58||e.src.charCodeAt(n+1)!==47||e.src.charCodeAt(n+2)!==47)return!1;let o=e.pending.match(QS);if(!o)return!1;let i=o[1],s=e.md.linkify.matchAtStart(e.src.slice(n-i.length));if(!s)return!1;let u=s.url;if(u.length<=i.length)return!1;u=u.replace(/\*+$/,"");let a=e.md.normalizeLink(u);if(!e.md.validateLink(a))return!1;if(!t){e.pending=e.pending.slice(0,-i.length);let c=e.push("link_open","a",1);c.attrs=[["href",a]],c.markup="linkify",c.info="auto";let l=e.push("text","",0);l.content=e.md.normalizeLinkText(u);let d=e.push("link_close","a",-1);d.markup="linkify",d.info="auto"}return e.pos+=u.length-i.length,!0}function th(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==10)return!1;let r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&e.pending.charCodeAt(r)===32)if(r>=1&&e.pending.charCodeAt(r-1)===32){let i=r-1;for(;i>=1&&e.pending.charCodeAt(i-1)===32;)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n?@[]^_`{|}~-".split("").forEach(function(e){nh[e.charCodeAt(0)]=1});function rh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==92||(n++,n>=r))return!1;let o=e.src.charCodeAt(n);if(o===10){for(t||e.push("hardbreak","br",0),n++;n=55296&&o<=56319&&n+1=56320&&u<=57343&&(i+=e.src[n+1],n++)}let s="\\"+i;if(!t){let u=e.push("text_special","",0);o<256&&nh[o]!==0?u.content=i:u.content=s,u.markup=s,u.info="escape"}return e.pos=n+1,!0}function oh(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==96)return!1;let o=n;n++;let i=e.posMax;for(;n=0;r--){let o=t[r];if(o.marker!==95&&o.marker!==42||o.end===-1)continue;let i=t[o.end],s=r>0&&t[r-1].end===o.end+1&&t[r-1].marker===o.marker&&t[r-1].token===o.token-1&&t[o.end+1].token===i.token+1,u=String.fromCharCode(o.marker),a=e.tokens[o.token];a.type=s?"strong_open":"em_open",a.tag=s?"strong":"em",a.nesting=1,a.markup=s?u+u:u,a.content="";let c=e.tokens[i.token];c.type=s?"strong_close":"em_close",c.tag=s?"strong":"em",c.nesting=-1,c.markup=s?u+u:u,c.content="",s&&(e.tokens[t[r-1].token].content="",e.tokens[t[o.end+1].token].content="",r--)}}function eM(e){let t=e.tokens_meta,n=e.tokens_meta.length;Nv(e,e.delimiters);for(let r=0;r=d)return!1;if(a=p,o=e.md.helpers.parseLinkDestination(e.src,p,e.posMax),o.ok){for(s=e.md.normalizeLink(o.str),e.md.validateLink(s)?p=o.pos:s="",a=p;p=d||e.src.charCodeAt(p)!==41)&&(c=!0),p++}if(c){if(typeof e.env.references>"u")return!1;if(p=0?r=e.src.slice(a,p++):p=f+1):p=f+1,r||(r=e.src.slice(h,f)),i=e.env.references[ur(r)],!i)return e.pos=l,!1;s=i.href,u=i.title}if(!t){e.pos=h,e.posMax=f;let g=e.push("link_open","a",1),m=[["href",s]];g.attrs=m,u&&m.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=p,e.posMax=d,!0}function ah(e,t){let n,r,o,i,s,u,a,c,l="",d=e.pos,h=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91)return!1;let f=e.pos+2,p=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(p<0)return!1;if(i=p+1,i=h)return!1;for(c=i,u=e.md.helpers.parseLinkDestination(e.src,i,e.posMax),u.ok&&(l=e.md.normalizeLink(u.str),e.md.validateLink(l)?i=u.pos:l=""),c=i;i=h||e.src.charCodeAt(i)!==41)return e.pos=d,!1;i++}else{if(typeof e.env.references>"u")return!1;if(i=0?o=e.src.slice(c,i++):i=p+1):i=p+1,o||(o=e.src.slice(f,p)),s=e.env.references[ur(o)],!s)return e.pos=d,!1;l=s.href,a=s.title}if(!t){r=e.src.slice(f,p);let g=[];e.md.inline.parse(r,e.md,e.env,g);let m=e.push("image","img",0),y=[["src",l],["alt",""]];m.attrs=y,m.children=g,m.content=r,a&&y.push(["title",a])}return e.pos=i,e.posMax=h,!0}var tM=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,nM=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;function ch(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==60)return!1;let r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;let s=e.src.charCodeAt(n);if(s===60)return!1;if(s===62)break}let i=e.src.slice(r+1,n);if(nM.test(i)){let s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}if(tM.test(i)){let s=e.md.normalizeLink("mailto:"+i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}return!1}function rM(e){return/^\s]/i.test(e)}function oM(e){return/^<\/a\s*>/i.test(e)}function iM(e){let t=e|32;return t>=97&&t<=122}function lh(e,t){if(!e.md.options.html)return!1;let n=e.posMax,r=e.pos;if(e.src.charCodeAt(r)!==60||r+2>=n)return!1;let o=e.src.charCodeAt(r+1);if(o!==33&&o!==63&&o!==47&&!iM(o))return!1;let i=e.src.slice(r).match(Iv);if(!i)return!1;if(!t){let s=e.push("html_inline","",0);s.content=i[0],rM(s.content)&&e.linkLevel++,oM(s.content)&&e.linkLevel--}return e.pos+=i[0].length,!0}var sM=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,uM=/^&([a-z][a-z0-9]{1,31});/i;function dh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==38||n+1>=r)return!1;if(e.src.charCodeAt(n+1)===35){let i=e.src.slice(n).match(sM);if(i){if(!t){let s=i[1][0].toLowerCase()==="x"?parseInt(i[1].slice(1),16):parseInt(i[1],10),u=e.push("text_special","",0);u.content=ka(s)?Ri(s):Ri(65533),u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}else{let i=e.src.slice(n).match(uM);if(i){let s=En(i[0]);if(s!==i[0]){if(!t){let u=e.push("text_special","",0);u.content=s,u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}}return!1}function kv(e){let t={},n=e.length;if(!n)return;let r=0,o=-2,i=[];for(let s=0;sa;c-=i[c]+1){let d=e[c];if(d.marker===u.marker&&d.open&&d.end<0){let h=!1;if((d.close||u.open)&&(d.length+u.length)%3===0&&(d.length%3!==0||u.length%3!==0)&&(h=!0),!h){let f=c>0&&!e[c-1].open?i[c-1]+1:0;i[s]=s-c+f,i[c]=f,u.open=!1,d.end=s,d.close=!1,l=-1,o=-2;break}}}l!==-1&&(t[u.marker][(u.open?3:0)+(u.length||0)%3]=l)}}function fh(e){let t=e.tokens_meta,n=e.tokens_meta.length;kv(e.delimiters);for(let r=0;r0&&r++,o[t].type==="text"&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;s||e.pos++,i[t]=e.pos};Oi.prototype.tokenize=function(e){let t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}}if(s){if(e.pos>=r)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};Oi.prototype.parse=function(e,t,n,r){let o=new this.State(e,t,n,r);this.tokenize(o);let i=this.ruler2.getRules(""),s=i.length;for(let u=0;u|$))",t.tpl_email_fuzzy="(^|"+n+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}function mh(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){n&&Object.keys(n).forEach(function(r){e[r]=n[r]})}),e}function La(e){return Object.prototype.toString.call(e)}function aM(e){return La(e)==="[object String]"}function cM(e){return La(e)==="[object Object]"}function lM(e){return La(e)==="[object RegExp]"}function Ov(e){return La(e)==="[object Function]"}function dM(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var Lv={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function fM(e){return Object.keys(e||{}).reduce(function(t,n){return t||Lv.hasOwnProperty(n)},!1)}var pM={"http:":{validate:function(e,t,n){let r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){let r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){let r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},hM="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",gM="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function mM(e){e.__index__=-1,e.__text_cache__=""}function yM(e){return function(t,n){let r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}function Pv(){return function(e,t){t.normalize(e)}}function Pa(e){let t=e.re=Fv(e.__opts__),n=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||n.push(hM),n.push(t.src_xn),t.src_tlds=n.join("|");function r(u){return u.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");let o=[];e.__compiled__={};function i(u,a){throw new Error('(LinkifyIt) Invalid schema "'+u+'": '+a)}Object.keys(e.__schemas__).forEach(function(u){let a=e.__schemas__[u];if(a===null)return;let c={validate:null,link:null};if(e.__compiled__[u]=c,cM(a)){lM(a.validate)?c.validate=yM(a.validate):Ov(a.validate)?c.validate=a.validate:i(u,a),Ov(a.normalize)?c.normalize=a.normalize:a.normalize?i(u,a):c.normalize=Pv();return}if(aM(a)){o.push(u);return}i(u,a)}),o.forEach(function(u){e.__compiled__[e.__schemas__[u]]&&(e.__compiled__[u].validate=e.__compiled__[e.__schemas__[u]].validate,e.__compiled__[u].normalize=e.__compiled__[e.__schemas__[u]].normalize)}),e.__compiled__[""]={validate:null,normalize:Pv()};let s=Object.keys(e.__compiled__).filter(function(u){return u.length>0&&e.__compiled__[u]}).map(dM).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),mM(e)}function bM(e,t){let n=e.__index__,r=e.__last_index__,o=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=o,this.text=o,this.url=o}function yh(e,t){let n=new bM(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function Be(e,t){if(!(this instanceof Be))return new Be(e,t);t||fM(e)&&(t=e,e={}),this.__opts__=mh({},Lv,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=mh({},pM,e),this.__compiled__={},this.__tlds__=gM,this.__tlds_replaced__=!1,this.re={},Pa(this)}Be.prototype.add=function(t,n){return this.__schemas__[t]=n,Pa(this),this};Be.prototype.set=function(t){return this.__opts__=mh(this.__opts__,t),this};Be.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;let n,r,o,i,s,u,a,c,l;if(this.re.schema_test.test(t)){for(a=this.re.schema_search,a.lastIndex=0;(n=a.exec(t))!==null;)if(i=this.testSchemaAt(t,n[2],a.lastIndex),i){this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+i;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=t.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(o=t.match(this.re.email_fuzzy))!==null&&(s=o.index+o[1].length,u=o.index+o[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=u))),this.__index__>=0};Be.prototype.pretest=function(t){return this.re.pretest.test(t)};Be.prototype.testSchemaAt=function(t,n,r){return this.__compiled__[n.toLowerCase()]?this.__compiled__[n.toLowerCase()].validate(t,r,this):0};Be.prototype.match=function(t){let n=[],r=0;this.__index__>=0&&this.__text_cache__===t&&(n.push(yh(this,r)),r=this.__last_index__);let o=r?t.slice(r):t;for(;this.test(o);)n.push(yh(this,r)),o=o.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};Be.prototype.matchAtStart=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return null;let n=this.re.schema_at_start.exec(t);if(!n)return null;let r=this.testSchemaAt(t,n[2],n[0].length);return r?(this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+r,yh(this,0)):null};Be.prototype.tlds=function(t,n){return t=Array.isArray(t)?t:[t],n?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(r,o,i){return r!==i[o-1]}).reverse(),Pa(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,Pa(this),this)};Be.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};Be.prototype.onCompile=function(){};var jv=Be;var vM=/^xn--/,DM=/[^\0-\x7F]/,EM=/[\x2E\u3002\uFF0E\uFF61]/g,_M={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},bh=35,wt=Math.floor,vh=String.fromCharCode;function _n(e){throw new RangeError(_M[e])}function CM(e,t){let n=[],r=e.length;for(;r--;)n[r]=t(e[r]);return n}function Vv(e,t){let n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(EM,".");let o=e.split("."),i=CM(o,t).join(".");return r+i}function Hv(e){let t=[],n=0,r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),xM=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:36},Bv=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},$v=function(e,t,n){let r=0;for(e=n?wt(e/700):e>>1,e+=wt(e/t);e>bh*26>>1;r+=36)e=wt(e/bh);return wt(r+(bh+1)*e/(e+38))},Uv=function(e){let t=[],n=e.length,r=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&_n("not-basic"),t.push(e.charCodeAt(u));for(let u=s>0?s+1:0;u=n&&_n("invalid-input");let h=xM(e.charCodeAt(u++));h>=36&&_n("invalid-input"),h>wt((2147483647-r)/l)&&_n("overflow"),r+=h*l;let f=d<=i?1:d>=i+26?26:d-i;if(hwt(2147483647/p)&&_n("overflow"),l*=p}let c=t.length+1;i=$v(r-a,c,a==0),wt(r/c)>2147483647-o&&_n("overflow"),o+=wt(r/c),r%=c,t.splice(r++,0,o)}return String.fromCodePoint(...t)},zv=function(e){let t=[];e=Hv(e);let n=e.length,r=128,o=0,i=72;for(let a of e)a<128&&t.push(vh(a));let s=t.length,u=s;for(s&&t.push("-");u=r&&lwt((2147483647-o)/c)&&_n("overflow"),o+=(a-r)*c,r=a;for(let l of e)if(l2147483647&&_n("overflow"),l===r){let d=o;for(let h=36;;h+=36){let f=h<=i?1:h>=i+26?26:h-i;if(d=0))try{t.hostname=Dh.toASCII(t.hostname)}catch{}return _a(co(t))}function FM(e){let t=ki(e,!0);if(t.hostname&&(!t.protocol||Zv.indexOf(t.protocol)>=0))try{t.hostname=Dh.toUnicode(t.hostname)}catch{}return Ni(co(t),Ni.defaultChars+"%")}function Ge(e,t){if(!(this instanceof Ge))return new Ge(e,t);t||Na(e)||(t=e||{},e="default"),this.inline=new Rv,this.block=new Sv,this.core=new bv,this.renderer=new fv,this.linkify=new jv,this.validateLink=kM,this.normalizeLink=RM,this.normalizeLinkText=FM,this.utils=Tp,this.helpers=fo({},Np),this.options={},this.configure(e),t&&this.set(t)}Ge.prototype.set=function(e){return fo(this.options,e),this};Ge.prototype.configure=function(e){let t=this;if(Na(e)){let n=e;if(e=MM[n],!e)throw new Error('Wrong `markdown-it` preset "'+n+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};Ge.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this};Ge.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this};Ge.prototype.use=function(e){let t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};Ge.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");let n=new this.core.State(e,this,t);return this.core.process(n),n.tokens};Ge.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};Ge.prototype.parseInline=function(e,t){let n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens};Ge.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Eh=Ge;function OM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function PM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function LM(e,t){if(e&1&&Jr(0,0),e&2){yi();let n=qu(0),r=qu(1);Yr("surfaceId",n)("component",r.componentTree)}}var jM=new x("Catalog"),BM=(()=>{class e extends w1.A2uiMessageProcessor{events=new le;setData(n,r,o,i){return super.setData(n,r,o,i??void 0)}dispatch(n){let r=new le;return this.events.next({message:n,completion:r}),sc(r)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),VM=new x("Theme"),HM=0,_h=(()=>{class e{processor=b(BM);theme=b(VM);surfaceId=Ae.required();component=Ae.required();weight=Ae.required();sendAction(n){let r=this.component(),o=this.surfaceId()??void 0,i={};if(n.context){for(let u of n.context)if(u.value.literalBoolean)i[u.key]=u.value.literalBoolean;else if(u.value.literalNumber)i[u.key]=u.value.literalNumber;else if(u.value.literalString)i[u.key]=u.value.literalString;else if(u.value.path){let a=this.processor.resolvePath(u.value.path,r.dataContextPath),c=this.processor.getData(r,a,o);i[u.key]=c}}let s={userAction:{name:n.name,sourceComponentId:r.id,surfaceId:o,timestamp:new Date().toISOString(),context:i}};return this.processor.dispatch(s)}resolvePrimitive(n){let r=this.component(),o=this.surfaceId();return!n||typeof n!="object"?null:n.literal!=null?n.literal:n.path?this.processor.getData(r,n.path,o??void 0):"literalString"in n?n.literalString:"literalNumber"in n?n.literalNumber:"literalBoolean"in n?n.literalBoolean:null}getUniqueId(n){return`${n}-${HM++}`}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,hostVars:2,hostBindings:function(r,o){r&2&&$u("--weight",o.weight())},inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"],weight:[1,"weight"]}})}return e})(),Ch=(()=>{class e{viewContainerRef=b(rt);catalog=b(jM);static hasInsertedStyles=!1;currentRef=null;isDestroyed=!1;surfaceId=Ae.required();component=Ae.required();constructor(){Zo(()=>{let o=this.surfaceId(),i=this.component();de(()=>this.render(o,i))});let n=b(Xn),r=b(K);if(!e.hasInsertedStyles&&u1(n)){let o=r.createElement("style");o.textContent=ro.structuralStyles,r.head.appendChild(o),e.hasInsertedStyles=!0}}ngOnDestroy(){this.isDestroyed=!0,this.clear()}render(n,r){return at(this,null,function*(){let o=this.catalog[r.type],i=null,s=null;if(typeof o=="function"?i=yield o():typeof o=="object"&&(i=yield o.type(),s=o.bindings(r)),this.clear(),i&&!this.isDestroyed){let u=[U("surfaceId",()=>n),U("component",()=>r),U("weight",()=>r.weight??"initial")];s&&u.push(...s),this.currentRef=this.viewContainerRef.createComponent(i,{bindings:u,injector:this.viewContainerRef.injector})}})}clear(){this.currentRef?.destroy(),this.currentRef=null}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,selectors:[["ng-container","a2ui-renderer",""]],inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"]}})}return e})();var $M=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Row),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-row"]],hostVars:2,hostBindings:function(r,o){r&2&&Pu("alignment",o.alignment())("distribution",o.distribution())},inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,OM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Row),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:row;width:100%;min-height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),UM=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Column),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-column"]],inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,PM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Column),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:100%;height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),zM=(()=>{class e{originalClassMap=new Map;sanitizer=b(bp);markdownIt=Eh({highlight:(n,r)=>{if(r==="html"){let o=document.createElement("iframe");return o.classList.add("html-view"),o.srcdoc=n,o.sandbox="",o.innerHTML}return n}});render(n,r){r&&this.applyTagClassMap(r);let o=this.markdownIt.render(n);return this.unapplyTagClassMap(),this.sanitizer.sanitize(Le.HTML,o)}applyTagClassMap(n){Object.entries(n).forEach(([r,o])=>{let i;switch(r){case"p":i="paragraph";break;case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":i="heading";break;case"ul":i="bullet_list";break;case"ol":i="ordered_list";break;case"li":i="list_item";break;case"a":i="link";break;case"strong":i="strong";break;case"em":i="em";break}if(!i)return;let s=`${i}_open`,u=this.markdownIt.renderer.rules[s];this.originalClassMap.set(s,u),this.markdownIt.renderer.rules[s]=(a,c,l,d,h)=>{let f=a[c];for(let p of o)f.attrJoin("class",p);return u?u.call(this,a,c,l,d,h):h.renderToken(a,c,l)}})}unapplyTagClassMap(){for(let[n,r]of this.originalClassMap)this.markdownIt.renderer.rules[n]=r;this.originalClassMap.clear()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),qM=(()=>{class e extends _h{markdownRenderer=b(zM);text=Ae.required();usageHint=Ae.required();resolvedText=Me(()=>{let n=this.usageHint(),r=super.resolvePrimitive(this.text());if(r==null)return"(empty)";switch(n){case"h1":r=`# ${r}`;break;case"h2":r=`## ${r}`;break;case"h3":r=`### ${r}`;break;case"h4":r=`#### ${r}`;break;case"h5":r=`##### ${r}`;break;case"caption":r=`*${r}*`;break;default:r=String(r);break}return this.markdownRenderer.render(r,ro.appendToAll(this.theme.markdown,["ol","ul","li"],{}))});classes=Me(()=>{let n=this.usageHint();return ro.merge(this.theme.components.Text.all,n?this.theme.components.Text[n]:{})});additionalStyles=Me(()=>{let n=this.usageHint(),r=this.theme.additionalStyles?.Text;if(!r)return null;let o={};return this.areHintedStyles(r)?o=r[n??"body"]:o=r,o});areHintedStyles(n){return typeof n!="object"||!n||Array.isArray(n)?!1:["h1","h2","h3","h4","h5","h6","caption","body"].every(o=>o in n)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-text"]],inputs:{text:[1,"text"],usageHint:[1,"usageHint"]},features:[Wr],decls:1,vars:5,consts:[[3,"innerHTML"]],template:function(r,o){r&1&&Vu(0,"section",0),r&2&&(Xr(o.additionalStyles()),bi(o.classes()),Hu("innerHTML",o.resolvedText(),md))},styles:[`a2ui-text{display:block;flex:var(--weight)}a2ui-text h1,a2ui-text h2,a2ui-text h3,a2ui-text h4,a2ui-text h5{line-height:inherit;font:inherit} -`],encapsulation:2})}return e})(),Oq={Row:{type:()=>$M,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},Column:{type:()=>UM,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},List:{type:()=>import("./chunk-7MR4QDTO.js").then(e=>e.List),bindings:e=>{let t=e.properties;return[U("direction",()=>t.direction??"vertical")]}},Card:()=>import("./chunk-A6XEKK5I.js").then(e=>e.Card),Image:{type:()=>import("./chunk-HAQR6HJ6.js").then(e=>e.Image),bindings:e=>{let t=e.properties;return[U("url",()=>t.url),U("usageHint",()=>t.usageHint)]}},Icon:{type:()=>import("./chunk-4MSGFQCD.js").then(e=>e.Icon),bindings:e=>{let t=e.properties;return[U("name",()=>t.name)]}},Video:{type:()=>import("./chunk-IXLBQLFI.js").then(e=>e.Video),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},AudioPlayer:{type:()=>import("./chunk-AK5ESGDJ.js").then(e=>e.Audio),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},Text:{type:()=>qM,bindings:e=>{let t=e.properties;return[U("text",()=>t.text),U("usageHint",()=>t.usageHint||null)]}},Button:{type:()=>import("./chunk-CHLIPOEM.js").then(e=>e.Button),bindings:e=>{let t=e.properties;return[U("action",()=>t.action)]}},Divider:()=>import("./chunk-VPVAD56Y.js").then(e=>e.Divider),MultipleChoice:{type:()=>import("./chunk-RUWE7IJV.js").then(e=>e.MultipleChoice),bindings:e=>{let t=e.properties;return[U("options",()=>t.options||[]),U("value",()=>t.selections),U("description",()=>"Select an item")]}},TextField:{type:()=>import("./chunk-UATSMTT5.js").then(e=>e.TextField),bindings:e=>{let t=e.properties;return[U("text",()=>t.text??null),U("label",()=>t.label),U("inputType",()=>t.type)]}},DateTimeInput:{type:()=>import("./chunk-RLBEOMT4.js").then(e=>e.DatetimeInput),bindings:e=>{let t=e.properties;return[U("enableDate",()=>t.enableDate),U("enableTime",()=>t.enableTime),U("value",()=>t.value)]}},CheckBox:{type:()=>import("./chunk-M3M3P5CP.js").then(e=>e.Checkbox),bindings:e=>{let t=e.properties;return[U("label",()=>t.label),U("value",()=>t.value)]}},Slider:{type:()=>import("./chunk-XB75PFJS.js").then(e=>e.Slider),bindings:e=>{let t=e.properties;return[U("value",()=>t.value),U("minValue",()=>t.minValue),U("maxValue",()=>t.maxValue),U("label",()=>"")]}},Tabs:{type:()=>import("./chunk-HYLIZOX5.js").then(e=>e.Tabs),bindings:e=>{let t=e.properties;return[U("tabs",()=>t.tabItems)]}},Modal:{type:()=>import("./chunk-BWFUMX67.js").then(e=>e.Modal),bindings:()=>[]}},Pq=(()=>{class e{surfaceId=Ae.required();surface=Ae.required();styles=Me(()=>{let n=this.surface(),r={};if(n?.styles)for(let[o,i]of Object.entries(n.styles))switch(o){case"primaryColor":{r["--p-100"]="#ffffff",r["--p-99"]=`color-mix(in srgb, ${i} 2%, white 98%)`,r["--p-98"]=`color-mix(in srgb, ${i} 4%, white 96%)`,r["--p-95"]=`color-mix(in srgb, ${i} 10%, white 90%)`,r["--p-90"]=`color-mix(in srgb, ${i} 20%, white 80%)`,r["--p-80"]=`color-mix(in srgb, ${i} 40%, white 60%)`,r["--p-70"]=`color-mix(in srgb, ${i} 60%, white 40%)`,r["--p-60"]=`color-mix(in srgb, ${i} 80%, white 20%)`,r["--p-50"]=i,r["--p-40"]=`color-mix(in srgb, ${i} 80%, black 20%)`,r["--p-35"]=`color-mix(in srgb, ${i} 70%, black 30%)`,r["--p-30"]=`color-mix(in srgb, ${i} 60%, black 40%)`,r["--p-25"]=`color-mix(in srgb, ${i} 50%, black 50%)`,r["--p-20"]=`color-mix(in srgb, ${i} 40%, black 60%)`,r["--p-15"]=`color-mix(in srgb, ${i} 30%, black 70%)`,r["--p-10"]=`color-mix(in srgb, ${i} 20%, black 80%)`,r["--p-5"]=`color-mix(in srgb, ${i} 10%, black 90%)`,r["--0"]="#00000";break}case"font":{r["--font-family"]=i,r["--font-family-flex"]=i;break}}return r});static \u0275fac=function(r){return new(r||e)};static \u0275cmp=Gr({type:e,selectors:[["a2ui-surface"]],hostVars:2,hostBindings:function(r,o){r&2&&Xr(o.styles())},inputs:{surfaceId:[1,"surfaceId"],surface:[1,"surface"]},decls:3,vars:3,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){if(r&1&&(Uu(0)(1),qd(2,LM,1,2,"ng-container",0)),r&2){let i=zu(o.surfaceId());qr();let s=zu(o.surface());qr(),Wd(i&&s?2:-1)}},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;min-height:0;max-height:100%;flex-direction:column;gap:16px}"]})}return e})();export{X as a,Sn as b,uD as c,B as d,tc as e,le as f,zi as g,Eo as h,Co as i,pD as j,Dr as k,hD as l,St as m,ZN as n,Io as o,lt as p,us as q,_D as r,CD as s,An as t,sc as u,Ee as v,ND as w,Mt as x,To as y,ls as z,RD as A,FD as B,uc as C,ac as D,HD as E,$D as F,on as G,zD as H,qD as I,cc as J,lc as K,u0 as L,dc as M,GD as N,c0 as O,ds as P,YD as Q,QD as R,d0 as S,fs as T,f0 as U,p0 as V,h0 as W,ps as X,KD as Y,JD as Z,g0 as _,XD as $,_ as aa,pt as ba,Cs as ca,I as da,ht as ea,rE as fa,x as ga,A as ha,b as ia,R0 as ja,Ce as ka,Sr as la,CE as ma,G0 as na,W0 as oa,og as pa,ig as qa,we as ra,K as sa,Oe as ta,Gn as ua,At as va,be as wa,Ve as xa,Pt as ya,pn as za,Zo as Aa,de as Ba,hu as Ca,Ur as Da,jt as Ea,tu as Fa,gu as Ga,Xn as Ha,g_ as Ia,yu as Ja,wm as Ka,Le as La,md as Ma,G_ as Na,W_ as Oa,Z_ as Pa,qr as Qa,Ht as Ra,dC as Sa,gn as Ta,Kn as Ua,pi as Va,oe as Wa,lw as Xa,rt as Ya,yn as Za,Oy as _a,Py as $a,Gr as ab,$t as bb,ot as cb,ex as db,Wr as eb,Hy as fb,$y as gb,Uy as hb,zy as ib,gi as jb,fx as kb,Wy as lb,Zr as mb,Qy as nb,Pu as ob,hx as pb,qd as qb,Gd as rb,Wd as sb,mx as tb,Lu as ub,ju as vb,Bu as wb,Yr as xb,Qr as yb,Kr as zb,Ky as Ab,Zd as Bb,Yd as Cb,Vu as Db,Qd as Eb,Kd as Fb,Jr as Gb,_x as Hb,Hu as Ib,eb as Jb,tb as Kb,yi as Lb,xx as Mb,Ix as Nb,rb as Ob,ob as Pb,Sx as Qb,Mx as Rb,ib as Sb,sb as Tb,Ax as Ub,Nx as Vb,$u as Wb,db as Xb,Xr as Yb,bi as Zb,eI as _b,Db as $b,Jd as ac,Eb as bc,_b as cc,Cb as dc,oI as ec,wb as fc,Uu as gc,zu as hc,qu as ic,iI as jc,sI as kc,lI as lc,dI as mc,fI as nc,pI as oc,hI as pc,mI as qc,yI as rc,bI as sc,vI as tc,Wu as uc,Me as vc,_I as wc,sf as xc,Pb as yc,iB as zc,sB as Ac,Ae as Bc,uB as Cc,aB as Dc,cB as Ec,yf as Fc,bf as Gc,JI as Hc,XI as Ic,dB as Jc,fB as Kc,pB as Lc,Et as Mc,t2 as Nc,eo as Oc,e1 as Pc,t1 as Qc,i2 as Rc,s2 as Sc,u2 as Tc,s1 as Uc,c2 as Vc,l2 as Wc,d2 as Xc,g2 as Yc,y2 as Zc,Cf as _c,u1 as $c,Z7 as ad,ro as bd,lp as cd,lT as dd,yT as ed,q1 as fd,BT as gd,s$ as hd,bp as id,jM as jd,BM as kd,VM as ld,_h as md,Ch as nd,Oq as od,Pq as pd}; diff --git a/src/google/adk/cli/browser/chunk-A6XEKK5I.js b/src/google/adk/cli/browser/chunk-CD6LWQYN.js similarity index 82% rename from src/google/adk/cli/browser/chunk-A6XEKK5I.js rename to src/google/adk/cli/browser/chunk-CD6LWQYN.js index a2032f5271..1f6f58a36f 100644 --- a/src/google/adk/cli/browser/chunk-A6XEKK5I.js +++ b/src/google/adk/cli/browser/chunk-CD6LWQYN.js @@ -1,2 +1,2 @@ -import{Da as o,Gb as h,Lb as y,Qa as a,Yb as C,Zb as g,ab as c,eb as d,md as _,nc as v,nd as w,ub as s,vb as l,wb as p,xb as m,yb as u,zb as f}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var D=e=>[e];function M(e,F){if(e&1&&h(0,0),e&2){let i=F.$implicit,n=y();m("surfaceId",n.surfaceId())("component",i)}}var T=(()=>{class e extends _{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=c({type:e,selectors:[["a2ui-card"]],features:[d],decls:3,vars:6,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,t){if(n&1&&(u(0,"section"),l(1,M,1,2,"ng-container",0,s),f()),n&2){let r=t.component().properties,I=r.children||v(4,D,r.child);C(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Card),g(t.theme.components.Card),a(),p(I)}},dependencies:[w],styles:[`a2ui-card{display:block;flex:var(--weight);min-height:0;overflow:auto}a2ui-card>section{height:100%;width:100%;min-height:0;overflow:auto}a2ui-card>section>*{height:100%;width:100%} +import{$a as c,Ca as o,Gb as h,Lb as y,Pa as a,Yb as C,Zb as g,eb as d,nc as v,pd as _,qd as w,ub as s,vb as l,wb as p,xb as m,yb as u,zb as f}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var D=e=>[e];function M(e,F){if(e&1&&h(0,0),e&2){let i=F.$implicit,n=y();m("surfaceId",n.surfaceId())("component",i)}}var T=(()=>{class e extends _{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=c({type:e,selectors:[["a2ui-card"]],features:[d],decls:3,vars:6,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,t){if(n&1&&(u(0,"section"),l(1,M,1,2,"ng-container",0,s),f()),n&2){let r=t.component().properties,I=r.children||v(4,D,r.child);C(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Card),g(t.theme.components.Card),a(),p(I)}},dependencies:[w],styles:[`a2ui-card{display:block;flex:var(--weight);min-height:0;overflow:auto}a2ui-card>section{height:100%;width:100%;min-height:0;overflow:auto}a2ui-card>section>*{height:100%;width:100%} `],encapsulation:2})}return e})();export{T as Card}; diff --git a/src/google/adk/cli/browser/chunk-RUWE7IJV.js b/src/google/adk/cli/browser/chunk-DTNGXRUJ.js similarity index 89% rename from src/google/adk/cli/browser/chunk-RUWE7IJV.js rename to src/google/adk/cli/browser/chunk-DTNGXRUJ.js index 92ced3a3df..d76f6df711 100644 --- a/src/google/adk/cli/browser/chunk-RUWE7IJV.js +++ b/src/google/adk/cli/browser/chunk-DTNGXRUJ.js @@ -1 +1 @@ -import{$b as u,Bb as l,Bc as c,Cb as a,Da as m,Ib as r,Kb as M,Lb as C,Qa as n,Yb as y,Zb as s,_b as d,ab as h,eb as v,md as b,vb as g,vc as _,wb as f}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var D=(i,p)=>p.value;function P(i,p){if(i&1&&(l(0,"option",2),d(1),a()),i&2){let t=p.$implicit,o=C();r("value",t.value),n(),u(o.resolvePrimitive(t.label))}}var x=(()=>{class i extends b{options=c.required();value=c.required();description=c.required();selectId=super.getUniqueId("a2ui-multiple-choice");selectValue=_(()=>super.resolvePrimitive(this.value()));handleChange(t){let o=this.value()?.path;!(t.target instanceof HTMLSelectElement)||!t.target.value||!o||this.processor.setData(this.component(),this.processor.resolvePath(o,this.component().dataContextPath),t.target.value)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=h({type:i,selectors:[["a2ui-multiple-choice"]],inputs:{options:[1,"options"],value:[1,"value"],description:[1,"description"]},features:[v],decls:6,vars:12,consts:[[3,"for"],[3,"change","id","value"],[3,"value"]],template:function(o,e){o&1&&(l(0,"section")(1,"label",0),d(2),a(),l(3,"select",1),M("change",function(E){return e.handleChange(E)}),g(4,P,2,2,"option",2,D),a()()),o&2&&(s(e.theme.components.MultipleChoice.container),n(),s(e.theme.components.MultipleChoice.label),r("htmlFor",e.selectId),n(),u(e.description()),n(),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.MultipleChoice),s(e.theme.components.MultipleChoice.element),r("id",e.selectId)("value",e.selectValue()),n(),f(e.options()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}select[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}"]})}return i})();export{x as MultipleChoice}; +import{$a as h,$b as u,Bb as l,Ca as m,Cb as a,Cc as c,Ib as r,Kb as M,Lb as C,Pa as n,Yb as y,Zb as s,_b as d,eb as v,pd as b,vb as g,wb as f,wc as _}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var D=(i,p)=>p.value;function P(i,p){if(i&1&&(l(0,"option",2),d(1),a()),i&2){let t=p.$implicit,o=C();r("value",t.value),n(),u(o.resolvePrimitive(t.label))}}var x=(()=>{class i extends b{options=c.required();value=c.required();description=c.required();selectId=super.getUniqueId("a2ui-multiple-choice");selectValue=_(()=>super.resolvePrimitive(this.value()));handleChange(t){let o=this.value()?.path;!(t.target instanceof HTMLSelectElement)||!t.target.value||!o||this.processor.setData(this.component(),this.processor.resolvePath(o,this.component().dataContextPath),t.target.value)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=h({type:i,selectors:[["a2ui-multiple-choice"]],inputs:{options:[1,"options"],value:[1,"value"],description:[1,"description"]},features:[v],decls:6,vars:12,consts:[[3,"for"],[3,"change","id","value"],[3,"value"]],template:function(o,e){o&1&&(l(0,"section")(1,"label",0),d(2),a(),l(3,"select",1),M("change",function(E){return e.handleChange(E)}),g(4,P,2,2,"option",2,D),a()()),o&2&&(s(e.theme.components.MultipleChoice.container),n(),s(e.theme.components.MultipleChoice.label),r("htmlFor",e.selectId),n(),u(e.description()),n(),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.MultipleChoice),s(e.theme.components.MultipleChoice.element),r("id",e.selectId)("value",e.selectValue()),n(),f(e.options()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}select[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}"]})}return i})();export{x as MultipleChoice}; diff --git a/src/google/adk/cli/browser/chunk-EN473UE3.js b/src/google/adk/cli/browser/chunk-EN473UE3.js new file mode 100644 index 0000000000..93e3c9916d --- /dev/null +++ b/src/google/adk/cli/browser/chunk-EN473UE3.js @@ -0,0 +1,439 @@ +import{a as M,b as P,e as xr,g as vt}from"./chunk-W7GRJBO5.js";var De=null,ts=!1,lc=1,JD=null,se=Symbol("SIGNAL");function I(e){let t=De;return De=e,t}function ns(){return De}var an={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function cn(e){if(ts)throw new Error("");if(De===null)return;De.consumerOnSignalRead(e);let t=De.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=De.recomputing;if(r&&(n=t!==void 0?t.nextProducer:De.producers,n!==void 0&&n.producer===e)){De.producersTail=n,n.lastReadVersion=e.version;return}let o=e.consumersTail;if(o!==void 0&&o.consumer===De&&(!r||eE(o,De)))return;let i=Sr(De),s={producer:e,consumer:De,nextProducer:n,prevConsumer:o,lastReadVersion:e.version,nextConsumer:void 0};De.producersTail=s,t!==void 0?t.nextProducer=s:De.producers=s,i&&c0(e,s)}function s0(){lc++}function Ln(e){if(!(Sr(e)&&!e.dirty)&&!(!e.dirty&&e.lastCleanEpoch===lc)){if(!e.producerMustRecompute(e)&&!Tr(e)){Ir(e);return}e.producerRecomputeValue(e),Ir(e)}}function dc(e){if(e.consumers===void 0)return;let t=ts;ts=!0;try{for(let n=e.consumers;n!==void 0;n=n.nextConsumer){let r=n.consumer;r.dirty||XD(r)}}finally{ts=t}}function fc(){return De?.consumerAllowSignalWrites!==!1}function XD(e){e.dirty=!0,dc(e),e.consumerMarkedDirty?.(e)}function Ir(e){e.dirty=!1,e.lastCleanEpoch=lc}function Lt(e){return e&&u0(e),I(e)}function u0(e){e.producersTail=void 0,e.recomputing=!0}function ln(e,t){I(t),e&&a0(e)}function a0(e){e.recomputing=!1;let t=e.producersTail,n=t!==void 0?t.nextProducer:e.producers;if(n!==void 0){if(Sr(e))do n=pc(n);while(n!==void 0);t!==void 0?t.nextProducer=void 0:e.producers=void 0}}function Tr(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let n=t.producer,r=t.lastReadVersion;if(r!==n.version||(Ln(n),r!==n.version))return!0}return!1}function dn(e){if(Sr(e)){let t=e.producers;for(;t!==void 0;)t=pc(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function c0(e,t){let n=e.consumersTail,r=Sr(e);if(n!==void 0?(t.nextConsumer=n.nextConsumer,n.nextConsumer=t):(t.nextConsumer=void 0,e.consumers=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let o=e.producers;o!==void 0;o=o.nextProducer)c0(o.producer,o)}function pc(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,o=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r!==void 0?r.prevConsumer=o:t.consumersTail=o,o!==void 0)o.nextConsumer=r;else if(t.consumers=r,!Sr(t)){let i=t.producers;for(;i!==void 0;)i=pc(i)}return n}function Sr(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function ko(e){JD?.(e)}function eE(e,t){let n=t.producersTail;if(n!==void 0){let r=t.producers;do{if(r===e)return!0;if(r===n)break;r=r.nextProducer}while(r!==void 0)}return!1}function Ro(e,t){return Object.is(e,t)}function Fo(e,t){let n=Object.create(tE);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(Ln(n),cn(n),n.value===Dt)throw n.error;return n.value};return r[se]=n,ko(n),r}var un=Symbol("UNSET"),Pn=Symbol("COMPUTING"),Dt=Symbol("ERRORED"),tE=P(M({},an),{value:un,dirty:!0,error:null,equal:Ro,kind:"computed",producerMustRecompute(e){return e.value===un||e.value===Pn},producerRecomputeValue(e){if(e.value===Pn)throw new Error("");let t=e.value;e.value=Pn;let n=Lt(e),r,o=!1;try{r=e.computation(),I(null),o=t!==un&&t!==Dt&&r!==Dt&&e.equal(t,r)}catch(i){r=Dt,e.error=i}finally{ln(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function nE(){throw new Error}var l0=nE;function d0(e){l0(e)}function hc(e){l0=e}var rE=null;function gc(e,t){let n=Object.create(Oo);n.value=e,t!==void 0&&(n.equal=t);let r=()=>f0(n);return r[se]=n,ko(n),[r,s=>jn(n,s),s=>rs(n,s)]}function f0(e){return cn(e),e.value}function jn(e,t){fc()||d0(e),e.equal(e.value,t)||(e.value=t,oE(e))}function rs(e,t){fc()||d0(e),jn(e,t(e.value))}var Oo=P(M({},an),{equal:Ro,value:void 0,kind:"signal"});function oE(e){e.version++,s0(),dc(e),rE?.(e)}var mc=P(M({},an),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:"effect"});function yc(e){if(e.dirty=!1,e.version>0&&!Tr(e))return;e.version++;let t=Lt(e);try{e.cleanup(),e.fn()}finally{ln(e,t)}}function R(e){return typeof e=="function"}function Mr(e){let n=e(r=>{Error.call(r),r.stack=new Error().stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var os=Mr(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription: +${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` + `)}`:"",this.name="UnsubscriptionError",this.errors=n});function Bn(e,t){if(e){let n=e.indexOf(t);0<=n&&e.splice(n,1)}}var ne=class e{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;let{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(let i of n)i.remove(this);else n.remove(this);let{initialTeardown:r}=this;if(R(r))try{r()}catch(i){t=i instanceof os?i.errors:[i]}let{_finalizers:o}=this;if(o){this._finalizers=null;for(let i of o)try{p0(i)}catch(s){t=t??[],s instanceof os?t=[...t,...s.errors]:t.push(s)}}if(t)throw new os(t)}}add(t){var n;if(t&&t!==this)if(this.closed)p0(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}}_hasParent(t){let{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){let{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){let{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&Bn(n,t)}remove(t){let{_finalizers:n}=this;n&&Bn(n,t),t instanceof e&&t._removeParent(this)}};ne.EMPTY=(()=>{let e=new ne;return e.closed=!0,e})();var bc=ne.EMPTY;function is(e){return e instanceof ne||e&&"closed"in e&&R(e.remove)&&R(e.add)&&R(e.unsubscribe)}function p0(e){R(e)?e():e.unsubscribe()}var et={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var Ar={setTimeout(e,t,...n){let{delegate:r}=Ar;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){let{delegate:t}=Ar;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function ss(e){Ar.setTimeout(()=>{let{onUnhandledError:t}=et;if(t)t(e);else throw e})}function jt(){}var h0=vc("C",void 0,void 0);function g0(e){return vc("E",void 0,e)}function m0(e){return vc("N",e,void 0)}function vc(e,t,n){return{kind:e,value:t,error:n}}var Vn=null;function Nr(e){if(et.useDeprecatedSynchronousErrorHandling){let t=!Vn;if(t&&(Vn={errorThrown:!1,error:null}),e(),t){let{errorThrown:n,error:r}=Vn;if(Vn=null,n)throw r}}else e()}function y0(e){et.useDeprecatedSynchronousErrorHandling&&Vn&&(Vn.errorThrown=!0,Vn.error=e)}var Hn=class extends ne{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,is(t)&&t.add(this)):this.destination=uE}static create(t,n,r){return new tt(t,n,r)}next(t){this.isStopped?Ec(m0(t),this):this._next(t)}error(t){this.isStopped?Ec(g0(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Ec(h0,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},iE=Function.prototype.bind;function Dc(e,t){return iE.call(e,t)}var Cc=class{constructor(t){this.partialObserver=t}next(t){let{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){us(r)}}error(t){let{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){us(r)}else us(t)}complete(){let{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){us(n)}}},tt=class extends Hn{constructor(t,n,r){super();let o;if(R(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&et.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&Dc(t.next,i),error:t.error&&Dc(t.error,i),complete:t.complete&&Dc(t.complete,i)}):o=t}this.destination=new Cc(o)}};function us(e){et.useDeprecatedSynchronousErrorHandling?y0(e):ss(e)}function sE(e){throw e}function Ec(e,t){let{onStoppedNotification:n}=et;n&&Ar.setTimeout(()=>n(e,t))}var uE={closed:!0,next:jt,error:sE,complete:jt};var kr=typeof Symbol=="function"&&Symbol.observable||"@@observable";function Te(e){return e}function aE(...e){return _c(e)}function _c(e){return e.length===0?Te:e.length===1?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}var B=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){let r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){let i=lE(n)?n:new tt(n,r,o);return Nr(()=>{let{operator:s,source:u}=this;i.add(s?s.call(i,u):u?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return r=b0(r),new r((o,i)=>{let s=new tt({next:u=>{try{n(u)}catch(a){i(a),s.unsubscribe()}},error:i,complete:o});this.subscribe(s)})}_subscribe(n){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(n)}[kr](){return this}pipe(...n){return _c(n)(this)}toPromise(n){return n=b0(n),new n((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function b0(e){var t;return(t=e??et.Promise)!==null&&t!==void 0?t:Promise}function cE(e){return e&&R(e.next)&&R(e.error)&&R(e.complete)}function lE(e){return e&&e instanceof Hn||cE(e)&&is(e)}function wc(e){return R(e?.lift)}function j(e){return t=>{if(wc(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function F(e,t,n,r,o){return new xc(e,t,n,r,o)}var xc=class extends Hn{constructor(t,n,r,o,i,s){super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?function(u){try{n(u)}catch(a){t.error(a)}}:super._next,this._error=o?function(u){try{o(u)}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:n}=this;super.unsubscribe(),!n&&((t=this.onFinalize)===null||t===void 0||t.call(this))}}};function v0(){return j((e,t)=>{let n=null;e._refCount++;let r=F(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount){n=null;return}let o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}var Ic=class extends B{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,wc(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){let t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;let{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new ne;let n=this.getSubject();t.add(this.source.subscribe(F(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=ne.EMPTY)}return t}refCount(){return v0()(this)}};var Rr={schedule(e){let t=requestAnimationFrame,n=cancelAnimationFrame,{delegate:r}=Rr;r&&(t=r.requestAnimationFrame,n=r.cancelAnimationFrame);let o=t(i=>{n=void 0,e(i)});return new ne(()=>n?.(o))},requestAnimationFrame(...e){let{delegate:t}=Rr;return(t?.requestAnimationFrame||requestAnimationFrame)(...e)},cancelAnimationFrame(...e){let{delegate:t}=Rr;return(t?.cancelAnimationFrame||cancelAnimationFrame)(...e)},delegate:void 0};var D0=Mr(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var he=(()=>{class e extends B{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){let r=new as(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new D0}next(n){Nr(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(n)}})}error(n){Nr(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;let{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){Nr(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){let{hasError:r,isStopped:o,observers:i}=this;return r||o?bc:(this.currentObservers=null,i.push(n),new ne(()=>{this.currentObservers=null,Bn(i,n)}))}_checkFinalizedStatuses(n){let{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){let n=new B;return n.source=this,n}}return e.create=(t,n)=>new as(t,n),e})(),as=class extends he{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.next)===null||r===void 0||r.call(n,t)}error(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.error)===null||r===void 0||r.call(n,t)}complete(){var t,n;(n=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||n===void 0||n.call(t)}_subscribe(t){var n,r;return(r=(n=this.source)===null||n===void 0?void 0:n.subscribe(t))!==null&&r!==void 0?r:bc}};var Po=class extends he{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){let n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){let{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}};var Lo={now(){return(Lo.delegate||Date).now()},delegate:void 0};var jo=class extends he{constructor(t=1/0,n=1/0,r=Lo){super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n)}next(t){let{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=this;n||(r.push(t),!o&&r.push(i.now()+s)),this._trimBuffer(),super.next(t)}_subscribe(t){this._throwIfClosed(),this._trimBuffer();let n=this._innerSubscribe(t),{_infiniteTimeWindow:r,_buffer:o}=this,i=o.slice();for(let s=0;sE0(t)&&e()),t},clearImmediate(e){E0(e)}};var{setImmediate:fE,clearImmediate:pE}=C0,Vo={setImmediate(...e){let{delegate:t}=Vo;return(t?.setImmediate||fE)(...e)},clearImmediate(e){let{delegate:t}=Vo;return(t?.clearImmediate||pE)(e)},delegate:void 0};var ls=class extends fn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=Vo.setImmediate(t.flush.bind(t,void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(Vo.clearImmediate(n),t._scheduled===n&&(t._scheduled=void 0))}};var Fr=class e{constructor(t,n=e.now){this.schedulerActionCtor=t,this.now=n}schedule(t,n=0,r){return new this.schedulerActionCtor(this,t).schedule(r,n)}};Fr.now=Lo.now;var pn=class extends Fr{constructor(t,n=Fr.now){super(t,n),this.actions=[],this._active=!1}flush(t){let{actions:n}=this;if(this._active){n.push(t);return}let r;this._active=!0;do if(r=t.execute(t.state,t.delay))break;while(t=n.shift());if(this._active=!1,r){for(;t=n.shift();)t.unsubscribe();throw r}}};var ds=class extends pn{flush(t){this._active=!0;let n=this._scheduled;this._scheduled=void 0;let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var hE=new ds(ls);var Or=new pn(fn),Mc=Or;var fs=class extends fn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=Rr.requestAnimationFrame(()=>t.flush(void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&n===t._scheduled&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(Rr.cancelAnimationFrame(n),t._scheduled=void 0)}};var ps=class extends pn{flush(t){this._active=!0;let n;t?n=t.id:(n=this._scheduled,this._scheduled=void 0);let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var gE=new ps(fs);var Bt=new B(e=>e.complete());function hs(e){return e&&R(e.schedule)}function Ac(e){return e[e.length-1]}function hn(e){return R(Ac(e))?e.pop():void 0}function Et(e){return hs(Ac(e))?e.pop():void 0}function _0(e,t){return typeof Ac(e)=="number"?e.pop():t}function E3(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var u=e.length-1;u>=0;u--)(s=e[u])&&(i=(o<3?s(i):o>3?s(t,n,i):s(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}function x0(e,t,n,r){function o(i){return i instanceof n?i:new n(function(s){s(i)})}return new(n||(n=Promise))(function(i,s){function u(l){try{c(r.next(l))}catch(d){s(d)}}function a(l){try{c(r.throw(l))}catch(d){s(d)}}function c(l){l.done?i(l.value):o(l.value).then(u,a)}c((r=r.apply(e,t||[])).next())})}function w0(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function $n(e){return this instanceof $n?(this.v=e,this):new $n(e)}function I0(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),u("next"),u("throw"),u("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(p){return Promise.resolve(p).then(f,d)}}function u(f,p){r[f]&&(o[f]=function(m){return new Promise(function(g,y){i.push([f,m,g,y])>1||a(f,m)})},p&&(o[f]=p(o[f])))}function a(f,p){try{c(r[f](p))}catch(m){h(i[0][3],m)}}function c(f){f.value instanceof $n?Promise.resolve(f.value.v).then(l,d):h(i[0][2],f)}function l(f){a("next",f)}function d(f){a("throw",f)}function h(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}function T0(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof w0=="function"?w0(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(u,a){s=e[i](s),o(u,a,s.done,s.value)})}}function o(i,s,u,a){Promise.resolve(a).then(function(c){i({value:c,done:u})},s)}}var Pr=e=>e&&typeof e.length=="number"&&typeof e!="function";function gs(e){return R(e?.then)}function ms(e){return R(e[kr])}function ys(e){return Symbol.asyncIterator&&R(e?.[Symbol.asyncIterator])}function bs(e){return new TypeError(`You provided ${e!==null&&typeof e=="object"?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function mE(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var vs=mE();function Ds(e){return R(e?.[vs])}function Es(e){return I0(this,arguments,function*(){let n=e.getReader();try{for(;;){let{value:r,done:o}=yield $n(n.read());if(o)return yield $n(void 0);yield yield $n(r)}}finally{n.releaseLock()}})}function Cs(e){return R(e?.getReader)}function z(e){if(e instanceof B)return e;if(e!=null){if(ms(e))return yE(e);if(Pr(e))return bE(e);if(gs(e))return vE(e);if(ys(e))return S0(e);if(Ds(e))return DE(e);if(Cs(e))return EE(e)}throw bs(e)}function yE(e){return new B(t=>{let n=e[kr]();if(R(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function bE(e){return new B(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,ss)})}function DE(e){return new B(t=>{for(let n of e)if(t.next(n),t.closed)return;t.complete()})}function S0(e){return new B(t=>{CE(e,t).catch(n=>t.error(n))})}function EE(e){return S0(Es(e))}function CE(e,t){var n,r,o,i;return x0(this,void 0,void 0,function*(){try{for(n=T0(e);r=yield n.next(),!r.done;){let s=r.value;if(t.next(s),t.closed)return}}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})}function Fe(e,t,n,r=0,o=!1){let i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function Ho(e,t=0){return j((n,r)=>{n.subscribe(F(r,o=>Fe(r,e,()=>r.next(o),t),()=>Fe(r,e,()=>r.complete(),t),o=>Fe(r,e,()=>r.error(o),t)))})}function _s(e,t=0){return j((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function M0(e,t){return z(e).pipe(_s(t),Ho(t))}function A0(e,t){return z(e).pipe(_s(t),Ho(t))}function N0(e,t){return new B(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function k0(e,t){return new B(n=>{let r;return Fe(n,t,()=>{r=e[vs](),Fe(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){n.error(s);return}i?n.complete():n.next(o)},0,!0)}),()=>R(r?.return)&&r.return()})}function ws(e,t){if(!e)throw new Error("Iterable cannot be null");return new B(n=>{Fe(n,t,()=>{let r=e[Symbol.asyncIterator]();Fe(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function R0(e,t){return ws(Es(e),t)}function F0(e,t){if(e!=null){if(ms(e))return M0(e,t);if(Pr(e))return N0(e,t);if(gs(e))return A0(e,t);if(ys(e))return ws(e,t);if(Ds(e))return k0(e,t);if(Cs(e))return R0(e,t)}throw bs(e)}function Ct(e,t){return t?F0(e,t):z(e)}function xs(...e){let t=Et(e);return Ct(e,t)}function _E(e,t){let n=R(e)?e:()=>e,r=o=>o.error(n());return new B(t?o=>t.schedule(r,0,o):r)}function wE(e){return!!e&&(e instanceof B||R(e.lift)&&R(e.subscribe))}var Un=Mr(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function Nc(e,t){let n=typeof t=="object";return new Promise((r,o)=>{let i=new tt({next:s=>{r(s),i.unsubscribe()},error:o,complete:()=>{n?r(t.defaultValue):o(new Un)}});e.subscribe(i)})}function O0(e){return e instanceof Date&&!isNaN(e)}function Se(e,t){return j((n,r)=>{let o=0;n.subscribe(F(r,i=>{r.next(e.call(t,i,o++))}))})}var{isArray:xE}=Array;function IE(e,t){return xE(t)?e(...t):e(t)}function Lr(e){return Se(t=>IE(e,t))}var{isArray:TE}=Array,{getPrototypeOf:SE,prototype:ME,keys:AE}=Object;function Is(e){if(e.length===1){let t=e[0];if(TE(t))return{args:t,keys:null};if(NE(t)){let n=AE(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}function NE(e){return e&&typeof e=="object"&&SE(e)===ME}function Ts(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}function kE(...e){let t=Et(e),n=hn(e),{args:r,keys:o}=Is(e);if(r.length===0)return Ct([],t);let i=new B(RE(r,t,o?s=>Ts(o,s):Te));return n?i.pipe(Lr(n)):i}function RE(e,t,n=Te){return r=>{P0(t,()=>{let{length:o}=e,i=new Array(o),s=o,u=o;for(let a=0;a{let c=Ct(e[a],t),l=!1;c.subscribe(F(r,d=>{i[a]=d,l||(l=!0,u--),u||r.next(n(i.slice()))},()=>{--s||r.complete()}))},r)},r)}}function P0(e,t,n){e?Fe(n,e,t):t()}function L0(e,t,n,r,o,i,s,u){let a=[],c=0,l=0,d=!1,h=()=>{d&&!a.length&&!c&&t.complete()},f=m=>c{i&&t.next(m),c++;let g=!1;z(n(m,l++)).subscribe(F(t,y=>{o?.(y),i?f(y):t.next(y)},()=>{g=!0},void 0,()=>{if(g)try{for(c--;a.length&&cp(y)):p(y)}h()}catch(y){t.error(y)}}))};return e.subscribe(F(t,f,()=>{d=!0,h()})),()=>{u?.()}}function Vt(e,t,n=1/0){return R(t)?Vt((r,o)=>Se((i,s)=>t(r,i,o,s))(z(e(r,o))),n):(typeof t=="number"&&(n=t),j((r,o)=>L0(r,o,e,n)))}function $o(e=1/0){return Vt(Te,e)}function j0(){return $o(1)}function Ss(...e){return j0()(Ct(e,Et(e)))}function FE(e){return new B(t=>{z(e()).subscribe(t)})}function OE(...e){let t=hn(e),{args:n,keys:r}=Is(e),o=new B(i=>{let{length:s}=n;if(!s){i.complete();return}let u=new Array(s),a=s,c=s;for(let l=0;l{d||(d=!0,c--),u[l]=h},()=>a--,void 0,()=>{(!a||!d)&&(c||i.next(r?Ts(r,u):u),i.complete())}))}});return t?o.pipe(Lr(t)):o}var PE=["addListener","removeListener"],LE=["addEventListener","removeEventListener"],jE=["on","off"];function kc(e,t,n,r){if(R(n)&&(r=n,n=void 0),r)return kc(e,t,n).pipe(Lr(r));let[o,i]=HE(e)?LE.map(s=>u=>e[s](t,u,n)):BE(e)?PE.map(B0(e,t)):VE(e)?jE.map(B0(e,t)):[];if(!o&&Pr(e))return Vt(s=>kc(s,t,n))(z(e));if(!o)throw new TypeError("Invalid event target");return new B(s=>{let u=(...a)=>s.next(1i(u)})}function B0(e,t){return n=>r=>e[n](t,r)}function BE(e){return R(e.addListener)&&R(e.removeListener)}function VE(e){return R(e.on)&&R(e.off)}function HE(e){return R(e.addEventListener)&&R(e.removeEventListener)}function Rc(e=0,t,n=Mc){let r=-1;return t!=null&&(hs(t)?n=t:r=t),new B(o=>{let i=O0(e)?+e-n.now():e;i<0&&(i=0);let s=0;return n.schedule(function(){o.closed||(o.next(s++),0<=r?this.schedule(void 0,r):o.complete())},i)})}function $E(...e){let t=Et(e),n=_0(e,1/0),r=e;return r.length?r.length===1?z(r[0]):$o(n)(Ct(r,t)):Bt}var UE=new B(jt);var{isArray:zE}=Array;function V0(e){return e.length===1&&zE(e[0])?e[0]:e}function gn(e,t){return j((n,r)=>{let o=0;n.subscribe(F(r,i=>e.call(t,i,o++)&&r.next(i)))})}function qE(...e){let t=hn(e),n=V0(e);return n.length?new B(r=>{let o=n.map(()=>[]),i=n.map(()=>!1);r.add(()=>{o=i=null});for(let s=0;!r.closed&&s{if(o[s].push(u),o.every(a=>a.length)){let a=o.map(c=>c.shift());r.next(t?t(...a):a),o.some((c,l)=>!c.length&&i[l])&&r.complete()}},()=>{i[s]=!0,!o[s].length&&r.complete()}));return()=>{o=i=null}}):Bt}function H0(e){return j((t,n)=>{let r=!1,o=null,i=null,s=!1,u=()=>{if(i?.unsubscribe(),i=null,r){r=!1;let c=o;o=null,n.next(c)}s&&n.complete()},a=()=>{i=null,s&&n.complete()};t.subscribe(F(n,c=>{r=!0,o=c,i||z(e(c)).subscribe(i=F(n,u,a))},()=>{s=!0,(!r||!i||i.closed)&&n.complete()}))})}function GE(e,t=Or){return H0(()=>Rc(e,t))}function Fc(e){return j((t,n)=>{let r=null,o=!1,i;r=t.subscribe(F(n,void 0,void 0,s=>{i=z(e(s,Fc(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function Oc(e,t){return R(t)?Vt(e,t,1):Vt(e,1)}function $0(e,t=Or){return j((n,r)=>{let o=null,i=null,s=null,u=()=>{if(o){o.unsubscribe(),o=null;let c=i;i=null,r.next(c)}};function a(){let c=s+e,l=t.now();if(l{i=c,s=t.now(),o||(o=t.schedule(a,e),r.add(o))},()=>{u(),r.complete()},void 0,()=>{i=o=null}))})}function U0(e){return j((t,n)=>{let r=!1;t.subscribe(F(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function Pc(e){return e<=0?()=>Bt:j((t,n)=>{let r=0;t.subscribe(F(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function WE(e){return Se(()=>e)}function z0(e,t=Te){return e=e??ZE,j((n,r)=>{let o,i=!0;n.subscribe(F(r,s=>{let u=t(s);(i||!e(o,u))&&(i=!1,o=u,r.next(s))}))})}function ZE(e,t){return e===t}function q0(e=YE){return j((t,n)=>{let r=!1;t.subscribe(F(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function YE(){return new Un}function Ms(e){return j((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}function QE(e,t){let n=arguments.length>=2;return r=>r.pipe(e?gn((o,i)=>e(o,i,r)):Te,Pc(1),n?U0(t):q0(()=>new Un))}function KE(e){return e<=0?()=>Bt:j((t,n)=>{let r=[];t.subscribe(F(n,o=>{r.push(o),e{for(let o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function G0(){return j((e,t)=>{let n,r=!1;e.subscribe(F(t,o=>{let i=n;n=o,r&&t.next([i,o]),r=!0}))})}function As(e={}){let{connector:t=()=>new he,resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s,u,a,c=0,l=!1,d=!1,h=()=>{u?.unsubscribe(),u=void 0},f=()=>{h(),s=a=void 0,l=d=!1},p=()=>{let m=s;f(),m?.unsubscribe()};return j((m,g)=>{c++,!d&&!l&&h();let y=a=a??t();g.add(()=>{c--,c===0&&!d&&!l&&(u=Lc(p,o))}),y.subscribe(g),!s&&c>0&&(s=new tt({next:v=>y.next(v),error:v=>{d=!0,h(),u=Lc(f,n,v),y.error(v)},complete:()=>{l=!0,h(),u=Lc(f,r),y.complete()}}),z(m).subscribe(s))})(i)}}function Lc(e,t,...n){if(t===!0){e();return}if(t===!1)return;let r=new tt({next:()=>{r.unsubscribe(),e()}});return z(t(...n)).subscribe(r)}function W0(e,t,n){let r,o=!1;return e&&typeof e=="object"?{bufferSize:r=1/0,windowTime:t=1/0,refCount:o=!1,scheduler:n}=e:r=e??1/0,As({connector:()=>new jo(r,t,n),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:o})}function Z0(e){return gn((t,n)=>e<=n)}function Y0(...e){let t=Et(e);return j((n,r)=>{(t?Ss(e,n,t):Ss(e,n)).subscribe(r)})}function Ns(e,t){return j((n,r)=>{let o=null,i=0,s=!1,u=()=>s&&!o&&r.complete();n.subscribe(F(r,a=>{o?.unsubscribe();let c=0,l=i++;z(e(a,l)).subscribe(o=F(r,d=>r.next(t?t(a,d,l,c++):d),()=>{o=null,u()}))},()=>{s=!0,u()}))})}function JE(e){return j((t,n)=>{z(e).subscribe(F(n,()=>n.complete(),jt)),!n.closed&&t.subscribe(n)})}function XE(e,t=!1){return j((n,r)=>{let o=0;n.subscribe(F(r,i=>{let s=e(i,o++);(s||t)&&r.next(i),!s&&r.complete()}))})}function Q0(e,t,n){let r=R(e)||t||n?{next:e,error:t,complete:n}:e;return r?j((o,i)=>{var s;(s=r.subscribe)===null||s===void 0||s.call(r);let u=!0;o.subscribe(F(i,a=>{var c;(c=r.next)===null||c===void 0||c.call(r,a),i.next(a)},()=>{var a;u=!1,(a=r.complete)===null||a===void 0||a.call(r),i.complete()},a=>{var c;u=!1,(c=r.error)===null||c===void 0||c.call(r,a),i.error(a)},()=>{var a,c;u&&((a=r.unsubscribe)===null||a===void 0||a.call(r)),(c=r.finalize)===null||c===void 0||c.call(r)}))}):Te}function eC(...e){let t=hn(e);return j((n,r)=>{let o=e.length,i=new Array(o),s=e.map(()=>!1),u=!1;for(let a=0;a{i[a]=c,!u&&!s[a]&&(s[a]=!0,(u=s.every(Te))&&(s=null))},jt));n.subscribe(F(r,a=>{if(u){let c=[a,...i];r.next(t?t(...c):c)}}))})}var jc;function ks(){return jc}function _t(e){let t=jc;return jc=e,t}var K0=Symbol("NotFound");function jr(e){return e===K0||e?.name==="\u0275NotFound"}function Bc(e,t,n){let r=Object.create(tC);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(Ln(r),cn(r),r.value===Dt)throw r.error;return r.value};return i[se]=r,ko(r),i}function J0(e,t){Ln(e),jn(e,t),Ir(e)}function X0(e,t){if(Ln(e),e.value===Dt)throw e.error;rs(e,t),Ir(e)}var tC=P(M({},an),{value:un,dirty:!0,error:null,equal:Ro,kind:"linkedSignal",producerMustRecompute(e){return e.value===un||e.value===Pn},producerRecomputeValue(e){if(e.value===Pn)throw new Error("");let t=e.value;e.value=Pn;let n=Lt(e),r;try{let o=e.source(),i=t===un||t===Dt?void 0:{source:e.sourceValue,value:t};r=e.computation(o,i),e.sourceValue=o}catch(o){r=Dt,e.error=o}finally{ln(e,n)}if(t!==un&&r!==Dt&&e.equal(t,r)){e.value=t;return}e.value=r,e.version++}});function eg(e){let t=I(null);try{return e()}finally{I(t)}}var Bs="https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss",D=class extends Error{code;constructor(t,n){super(xt(t,n)),this.code=t}};function nC(e){return`NG0${Math.abs(e)}`}function xt(e,t){return`${nC(e)}${t?": "+t:""}`}var fe=globalThis;function W(e){for(let t in e)if(e[t]===W)return t;throw Error("")}function ig(e,t){for(let n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function Yo(e){if(typeof e=="string")return e;if(Array.isArray(e))return`[${e.map(Yo).join(", ")}]`;if(e==null)return""+e;let t=e.overriddenName||e.name;if(t)return`${t}`;let n=e.toString();if(n==null)return""+n;let r=n.indexOf(` +`);return r>=0?n.slice(0,r):n}function Vs(e,t){return e?t?`${e} ${t}`:e:t||""}var rC=W({__forward_ref__:W});function Hs(e){return e.__forward_ref__=Hs,e}function le(e){return Jc(e)?e():e}function Jc(e){return typeof e=="function"&&e.hasOwnProperty(rC)&&e.__forward_ref__===Hs}function T(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function It(e){return{providers:e.providers||[],imports:e.imports||[]}}function Qo(e){return iC(e,$s)}function oC(e){return Qo(e)!==null}function iC(e,t){return e.hasOwnProperty(t)&&e[t]||null}function sC(e){let t=e?.[$s]??null;return t||null}function Hc(e){return e&&e.hasOwnProperty(Fs)?e[Fs]:null}var $s=W({\u0275prov:W}),Fs=W({\u0275inj:W}),x=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(t,n){this._desc=t,this.\u0275prov=void 0,typeof n=="number"?this.__NG_ELEMENT_ID__=n:n!==void 0&&(this.\u0275prov=T({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Xc(e){return e&&!!e.\u0275providers}var el=W({\u0275cmp:W}),tl=W({\u0275dir:W}),nl=W({\u0275pipe:W}),rl=W({\u0275mod:W}),zo=W({\u0275fac:W}),Zn=W({__NG_ELEMENT_ID__:W}),tg=W({__NG_ENV_ID__:W});function ol(e){return zs(e,"@NgModule"),e[rl]||null}function Tt(e){return zs(e,"@Component"),e[el]||null}function Us(e){return zs(e,"@Directive"),e[tl]||null}function sg(e){return zs(e,"@Pipe"),e[nl]||null}function zs(e,t){if(e==null)throw new D(-919,!1)}function vn(e){return typeof e=="string"?e:e==null?"":String(e)}var ug=W({ngErrorCode:W}),uC=W({ngErrorMessage:W}),aC=W({ngTokenPath:W});function il(e,t){return ag("",-200,t)}function qs(e,t){throw new D(-201,!1)}function ag(e,t,n){let r=new D(t,e);return r[ug]=t,r[uC]=e,n&&(r[aC]=n),r}function cC(e){return e[ug]}var $c;function cg(){return $c}function Me(e){let t=$c;return $c=e,t}function sl(e,t,n){let r=Qo(e);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;qs(e,"")}var lC={},zn=lC,dC="__NG_DI_FLAG__",Uc=class{injector;constructor(t){this.injector=t}retrieve(t,n){let r=qn(n)||0;try{return this.injector.get(t,r&8?null:zn,r)}catch(o){if(jr(o))return o;throw o}}};function fC(e,t=0){let n=ks();if(n===void 0)throw new D(-203,!1);if(n===null)return sl(e,void 0,t);{let r=pC(t),o=n.retrieve(e,r);if(jr(o)){if(r.optional)return null;throw o}return o}}function A(e,t=0){return(cg()||fC)(le(e),t)}function b(e,t){return A(e,qn(t))}function qn(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function pC(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function zc(e){let t=[];for(let n=0;nArray.isArray(n)?Gs(n,t):t(n))}function ul(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ko(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function fg(e,t){let n=[];for(let r=0;rt;){let i=o-2;e[o]=e[i],o--}e[t]=n,e[t+1]=r}}function Jo(e,t,n){let r=Vr(e,t);return r>=0?e[r|1]=n:(r=~r,pg(e,r,t,n)),r}function Ws(e,t){let n=Vr(e,t);if(n>=0)return e[n|1]}function Vr(e,t){return gC(e,t,1)}function gC(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){let i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<{n.push(s)};return Gs(t,s=>{let u=s;Os(u,i,[],r)&&(o||=[],o.push(u))}),o!==void 0&&gg(o,i),n}function gg(e,t){for(let n=0;n{t(i,r)})}}function Os(e,t,n,r){if(e=le(e),!e)return!1;let o=null,i=Hc(e),s=!i&&Tt(e);if(!i&&!s){let a=e.ngModule;if(i=Hc(a),i)o=a;else return!1}else{if(s&&!s.standalone)return!1;o=e}let u=r.has(o);if(s){if(u)return!1;if(r.add(o),s.dependencies){let a=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let c of a)Os(c,t,n,r)}}else if(i){if(i.imports!=null&&!u){r.add(o);let c;Gs(i.imports,l=>{Os(l,t,n,r)&&(c||=[],c.push(l))}),c!==void 0&&gg(c,t)}if(!u){let c=mn(o)||(()=>new o);t({provide:o,useFactory:c,deps:Ee},o),t({provide:cl,useValue:o,multi:!0},o),t({provide:Hr,useValue:()=>A(o),multi:!0},o)}let a=i.providers;if(a!=null&&!u){let c=e;dl(a,l=>{t(l,c)})}}else return!1;return o!==e&&e.providers!==void 0}function dl(e,t){for(let n of e)Xc(n)&&(n=n.\u0275providers),Array.isArray(n)?dl(n,t):t(n)}var mC=W({provide:String,useValue:W});function mg(e){return e!==null&&typeof e=="object"&&mC in e}function yC(e){return!!(e&&e.useExisting)}function bC(e){return!!(e&&e.useFactory)}function Gn(e){return typeof e=="function"}function yg(e){return!!e.useClass}var Xo=new x(""),Rs={},ng={},Vc;function $r(){return Vc===void 0&&(Vc=new qo),Vc}var Ae=class{},Wn=class extends Ae{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,Gc(t,s=>this.processProvider(s)),this.records.set(al,Br(void 0,this)),o.has("environment")&&this.records.set(Ae,Br(void 0,this));let i=this.records.get(Xo);i!=null&&typeof i.value=="string"&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(cl,Ee,{self:!0}))}retrieve(t,n){let r=qn(n)||0;try{return this.get(t,zn,r)}catch(o){if(jr(o))return o;throw o}}destroy(){Uo(this),this._destroyed=!0;let t=I(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let n=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of n)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),I(t)}}onDestroy(t){return Uo(this),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){Uo(this);let n=_t(this),r=Me(void 0),o;try{return t()}finally{_t(n),Me(r)}}get(t,n=zn,r){if(Uo(this),t.hasOwnProperty(tg))return t[tg](this);let o=qn(r),i,s=_t(this),u=Me(void 0);try{if(!(o&4)){let c=this.records.get(t);if(c===void 0){let l=_C(t)&&Qo(t);l&&this.injectableDefInScope(l)?c=Br(qc(t),Rs):c=null,this.records.set(t,c)}if(c!=null)return this.hydrate(t,c,o)}let a=o&2?$r():this.parent;return n=o&8&&n===zn?null:n,a.get(t,n)}catch(a){let c=cC(a);throw c===-200||c===-201?new D(c,null):a}finally{Me(u),_t(s)}}resolveInjectorInitializers(){let t=I(null),n=_t(this),r=Me(void 0),o;try{let i=this.get(Hr,Ee,{self:!0});for(let s of i)s()}finally{_t(n),Me(r),I(t)}}toString(){return"R3Injector[...]"}processProvider(t){t=le(t);let n=Gn(t)?t:le(t&&t.provide),r=DC(t);if(!Gn(t)&&t.multi===!0){let o=this.records.get(n);o||(o=Br(void 0,Rs,!0),o.factory=()=>zc(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n,r){let o=I(null);try{if(n.value===ng)throw il("");return n.value===Rs&&(n.value=ng,n.value=n.factory(void 0,r)),typeof n.value=="object"&&n.value&&CC(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}finally{I(o)}}injectableDefInScope(t){if(!t.providedIn)return!1;let n=le(t.providedIn);return typeof n=="string"?n==="any"||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){let n=this._onDestroyHooks.indexOf(t);n!==-1&&this._onDestroyHooks.splice(n,1)}};function qc(e){let t=Qo(e),n=t!==null?t.factory:mn(e);if(n!==null)return n;if(e instanceof x)throw new D(-204,!1);if(e instanceof Function)return vC(e);throw new D(-204,!1)}function vC(e){if(e.length>0)throw new D(-204,!1);let n=sC(e);return n!==null?()=>n.factory(e):()=>new e}function DC(e){if(mg(e))return Br(void 0,e.useValue);{let t=fl(e);return Br(t,Rs)}}function fl(e,t,n){let r;if(Gn(e)){let o=le(e);return mn(o)||qc(o)}else if(mg(e))r=()=>le(e.useValue);else if(bC(e))r=()=>e.useFactory(...zc(e.deps||[]));else if(yC(e))r=(o,i)=>A(le(e.useExisting),i!==void 0&&i&8?8:void 0);else{let o=le(e&&(e.useClass||e.provide));if(EC(e))r=()=>new o(...zc(e.deps));else return mn(o)||qc(o)}return r}function Uo(e){if(e.destroyed)throw new D(-205,!1)}function Br(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function EC(e){return!!e.deps}function CC(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function _C(e){return typeof e=="function"||typeof e=="object"&&e.ngMetadataName==="InjectionToken"}function Gc(e,t){for(let n of e)Array.isArray(n)?Gc(n,t):n&&Xc(n)?Gc(n.\u0275providers,t):t(n)}function Ur(e,t){let n;e instanceof Wn?(Uo(e),n=e):n=new Uc(e);let r,o=_t(n),i=Me(void 0);try{return t()}finally{_t(o),Me(i)}}function Zs(){return cg()!==void 0||ks()!=null}function wC(e){if(!Zs())throw new D(-203,!1)}var rt=0,S=1,L=2,de=3,Ze=4,Ne=5,Qn=6,zr=7,re=8,Ut=9,ot=10,Z=11,qr=12,pl=13,Kn=14,_e=15,Dn=16,Jn=17,St=18,zt=19,hl=20,$t=21,Ys=22,yn=23,Be=24,Xn=25,En=26,K=27,bg=1,gl=6,Cn=7,ei=8,er=9,oe=10;function qt(e){return Array.isArray(e)&&typeof e[bg]=="object"}function it(e){return Array.isArray(e)&&e[bg]===!0}function ml(e){return(e.flags&4)!==0}function Mt(e){return e.componentOffset>-1}function Gr(e){return(e.flags&1)===1}function st(e){return!!e.template}function Wr(e){return(e[L]&512)!==0}function tr(e){return(e[L]&256)===256}var yl="svg",vg="math";function Ye(e){for(;Array.isArray(e);)e=e[rt];return e}function bl(e,t){return Ye(t[e])}function Qe(e,t){return Ye(t[e.index])}function Qs(e,t){return e.data[t]}function ti(e,t){return e[t]}function ni(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function Ve(e,t){let n=t[e];return qt(n)?n:n[rt]}function Dg(e){return(e[L]&4)===4}function Ks(e){return(e[L]&128)===128}function Eg(e){return it(e[de])}function He(e,t){return t==null?null:e[t]}function vl(e){e[Jn]=0}function Dl(e){e[L]&1024||(e[L]|=1024,Ks(e)&&nr(e))}function Cg(e,t){for(;e>0;)t=t[Kn],e--;return t}function ri(e){return!!(e[L]&9216||e[Be]?.dirty)}function Js(e){e[ot].changeDetectionScheduler?.notify(8),e[L]&64&&(e[L]|=1024),ri(e)&&nr(e)}function nr(e){e[ot].changeDetectionScheduler?.notify(0);let t=bn(e);for(;t!==null&&!(t[L]&8192||(t[L]|=8192,!Ks(t)));)t=bn(t)}function El(e,t){if(tr(e))throw new D(911,!1);e[$t]===null&&(e[$t]=[]),e[$t].push(t)}function _g(e,t){if(e[$t]===null)return;let n=e[$t].indexOf(t);n!==-1&&e[$t].splice(n,1)}function bn(e){let t=e[de];return it(t)?t[de]:t}function Cl(e){return e[zr]??=[]}function _l(e){return e.cleanup??=[]}function wg(e,t,n,r){let o=Cl(t);o.push(n),e.firstCreatePass&&_l(e).push(r,o.length-1)}var V={lFrame:Lg(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var Wc=!1;function xg(){return V.lFrame.elementDepthCount}function Ig(){V.lFrame.elementDepthCount++}function wl(){V.lFrame.elementDepthCount--}function Xs(){return V.bindingsEnabled}function xl(){return V.skipHydrationRootTNode!==null}function Il(e){return V.skipHydrationRootTNode===e}function Tl(){V.skipHydrationRootTNode=null}function w(){return V.lFrame.lView}function G(){return V.lFrame.tView}function Tg(e){return V.lFrame.contextLView=e,e[re]}function Sg(e){return V.lFrame.contextLView=null,e}function ue(){let e=Sl();for(;e!==null&&e.type===64;)e=e.parent;return e}function Sl(){return V.lFrame.currentTNode}function Mg(){let e=V.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function rr(e,t){let n=V.lFrame;n.currentTNode=e,n.isParent=t}function Ml(){return V.lFrame.isParent}function Al(){V.lFrame.isParent=!1}function Nl(){return V.lFrame.contextLView}function kl(){return Wc}function Go(e){let t=Wc;return Wc=e,t}function Zr(){let e=V.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Ag(){return V.lFrame.bindingIndex}function Ng(e){return V.lFrame.bindingIndex=e}function ut(){return V.lFrame.bindingIndex++}function eu(e){let t=V.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function kg(){return V.lFrame.inI18n}function Rg(e,t){let n=V.lFrame;n.bindingIndex=n.bindingRootIndex=e,tu(t)}function Fg(){return V.lFrame.currentDirectiveIndex}function tu(e){V.lFrame.currentDirectiveIndex=e}function Og(e){let t=V.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function nu(){return V.lFrame.currentQueryIndex}function oi(e){V.lFrame.currentQueryIndex=e}function xC(e){let t=e[S];return t.type===2?t.declTNode:t.type===1?e[Ne]:null}function Rl(e,t,n){if(n&4){let o=t,i=e;for(;o=o.parent,o===null&&!(n&1);)if(o=xC(i),o===null||(i=i[Kn],o.type&10))break;if(o===null)return!1;t=o,e=i}let r=V.lFrame=Pg();return r.currentTNode=t,r.lView=e,!0}function ru(e){let t=Pg(),n=e[S];V.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Pg(){let e=V.lFrame,t=e===null?null:e.child;return t===null?Lg(e):t}function Lg(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function jg(){let e=V.lFrame;return V.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var Fl=jg;function ou(){let e=jg();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Bg(e){return(V.lFrame.contextLView=Cg(e,V.lFrame.contextLView))[re]}function at(){return V.lFrame.selectedIndex}function _n(e){V.lFrame.selectedIndex=e}function wn(){let e=V.lFrame;return Qs(e.tView,e.selectedIndex)}function Vg(){V.lFrame.currentNamespace=yl}function Hg(){IC()}function IC(){V.lFrame.currentNamespace=null}function $g(){return V.lFrame.currentNamespace}var Ug=!0;function iu(){return Ug}function ii(e){Ug=e}function Zc(e,t=null,n=null,r){let o=Ol(e,t,n,r);return o.resolveInjectorInitializers(),o}function Ol(e,t=null,n=null,r,o=new Set){let i=[n||Ee,hg(e)],s;return new Wn(i,t||$r(),s||null,o)}var me=class e{static THROW_IF_NOT_FOUND=zn;static NULL=new qo;static create(t,n){if(Array.isArray(t))return Zc({name:""},n,t,"");{let r=t.name??"";return Zc({name:r},t.parent,t.providers,r)}}static \u0275prov=T({token:e,providedIn:"any",factory:()=>A(al)});static __NG_ELEMENT_ID__=-1},X=new x(""),$e=(()=>{class e{static __NG_ELEMENT_ID__=TC;static __NG_ENV_ID__=n=>n}return e})(),Ps=class extends $e{_lView;constructor(t){super(),this._lView=t}get destroyed(){return tr(this._lView)}onDestroy(t){let n=this._lView;return El(n,t),()=>_g(n,t)}};function TC(){return new Ps(w())}var zg=!1,qg=new x(""),or=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Po(!1);debugTaskTracker=b(qg,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new B(n=>{n.next(!1),n.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let n=this.taskId++;return this.pendingTasks.add(n),this.debugTaskTracker?.add(n),n}has(n){return this.pendingTasks.has(n)}remove(n){this.pendingTasks.delete(n),this.debugTaskTracker?.remove(n),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=T({token:e,providedIn:"root",factory:()=>new e})}return e})(),Yc=class extends he{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(t=!1){super(),this.__isAsync=t,Zs()&&(this.destroyRef=b($e,{optional:!0})??void 0,this.pendingTasks=b(or,{optional:!0})??void 0)}emit(t){let n=I(null);try{super.next(t)}finally{I(n)}}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&typeof t=="object"){let a=t;o=a.next?.bind(a),i=a.error?.bind(a),s=a.complete?.bind(a)}this.__isAsync&&(i=this.wrapInTimeout(i),o&&(o=this.wrapInTimeout(o)),s&&(s=this.wrapInTimeout(s)));let u=super.subscribe({next:o,error:i,complete:s});return t instanceof ne&&t.add(u),u}wrapInTimeout(t){return n=>{let r=this.pendingTasks?.add();setTimeout(()=>{try{t(n)}finally{r!==void 0&&this.pendingTasks?.remove(r)}})}}},Ht=Yc;function Ls(...e){}function Pl(e){let t,n;function r(){e=Ls;try{n!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch(o){}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame=="function"&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function Gg(e){return queueMicrotask(()=>e()),()=>{e=Ls}}var Ll="isAngularZone",Wo=Ll+"_ID",SC=0,Ce=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Ht(!1);onMicrotaskEmpty=new Ht(!1);onStable=new Ht(!1);onError=new Ht(!1);constructor(t){let{enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:o=!1,scheduleInRootZone:i=zg}=t;if(typeof Zone>"u")throw new D(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!o&&r,s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,NC(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(Ll)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new D(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new D(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){let i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,MC,Ls,Ls);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}},MC={};function jl(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function AC(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){Pl(()=>{e.callbackScheduled=!1,Qc(e),e.isCheckStableRunning=!0,jl(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Qc(e)}function NC(e){let t=()=>{AC(e)},n=SC++;e._inner=e._inner.fork({name:"angular",properties:{[Ll]:!0,[Wo]:n,[Wo+n]:!0},onInvokeTask:(r,o,i,s,u,a)=>{if(kC(a))return r.invokeTask(i,s,u,a);try{return rg(e),r.invokeTask(i,s,u,a)}finally{(e.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&t(),og(e)}},onInvoke:(r,o,i,s,u,a,c)=>{try{return rg(e),r.invoke(i,s,u,a,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!RC(a)&&t(),og(e)}},onHasTask:(r,o,i,s)=>{r.hasTask(i,s),o===i&&(s.change=="microTask"?(e._hasPendingMicrotasks=s.microTask,Qc(e),jl(e)):s.change=="macroTask"&&(e.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,o,i,s)=>(r.handleError(i,s),e.runOutsideAngular(()=>e.onError.emit(s)),!1)})}function Qc(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function rg(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function og(e){e._nesting--,jl(e)}var Zo=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Ht;onMicrotaskEmpty=new Ht;onStable=new Ht;onError=new Ht;run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}};function kC(e){return Wg(e,"__ignore_ng_zone__")}function RC(e){return Wg(e,"__scheduler_tick__")}function Wg(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var We=class{_console=console;handleError(t){this._console.error("ERROR",t)}},Gt=new x("",{factory:()=>{let e=b(Ce),t=b(Ae),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(We),n.handleError(r))})}}}),Zg={provide:Hr,useValue:()=>{let e=b(We,{optional:!0})},multi:!0};function xn(e,t){let[n,r,o]=gc(e,t?.equal),i=n,s=i[se];return i.set=r,i.update=o,i.asReadonly=si.bind(i),i}function si(){let e=this[se];if(e.readonlyFn===void 0){let t=()=>this();t[se]=e,e.readonlyFn=t}return e.readonlyFn}var Yr=(()=>{class e{view;node;constructor(n,r){this.view=n,this.node=r}static __NG_ELEMENT_ID__=FC}return e})();function FC(){return new Yr(w(),ue())}var wt=class{},ui=new x("",{factory:()=>!0});var Bl=new x(""),ir=(()=>{class e{internalPendingTasks=b(or);scheduler=b(wt);errorHandler=b(Gt);add(){let n=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(n)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(n))}}run(n){let r=this.add();n().catch(this.errorHandler).finally(r)}static \u0275prov=T({token:e,providedIn:"root",factory:()=>new e})}return e})(),su=(()=>{class e{static \u0275prov=T({token:e,providedIn:"root",factory:()=>new Kc})}return e})(),Kc=class{dirtyEffectCount=0;queues=new Map;add(t){this.enqueue(t),this.schedule(t)}schedule(t){t.dirty&&this.dirtyEffectCount++}remove(t){let n=t.zone,r=this.queues.get(n);r.has(t)&&(r.delete(t),t.dirty&&this.dirtyEffectCount--)}enqueue(t){let n=t.zone;this.queues.has(n)||this.queues.set(n,new Set);let r=this.queues.get(n);r.has(t)||r.add(t)}flush(){for(;this.dirtyEffectCount>0;){let t=!1;for(let[n,r]of this.queues)n===null?t||=this.flushQueue(r):t||=n.run(()=>this.flushQueue(r));t||(this.dirtyEffectCount=0)}}flushQueue(t){let n=!1;for(let r of t)r.dirty&&(this.dirtyEffectCount--,n=!0,r.run());return n}},js=class{[se];constructor(t){this[se]=t}destroy(){this[se].destroy()}};function ai(e,t){let n=t?.injector??b(me),r=t?.manualCleanup!==!0?n.get($e):null,o,i=n.get(Yr,null,{optional:!0}),s=n.get(wt);return i!==null?(o=LC(i.view,s,e),r instanceof Ps&&r._lView===i.view&&(r=null)):o=jC(e,n.get(su),s),o.injector=n,r!==null&&(o.onDestroyFns=[r.onDestroy(()=>o.destroy())]),new js(o)}var Yg=P(M({},mc),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Go(!1);try{yc(this)}finally{Go(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=I(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],I(e)}}}),OC=P(M({},Yg),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(dn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}}),PC=P(M({},Yg),{consumerMarkedDirty(){this.view[L]|=8192,nr(this.view),this.notifier.notify(13)},destroy(){if(dn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[yn]?.delete(this)}});function LC(e,t,n){let r=Object.create(PC);return r.view=e,r.zone=typeof Zone<"u"?Zone.current:null,r.notifier=t,r.fn=Qg(r,n),e[yn]??=new Set,e[yn].add(r),r.consumerMarkedDirty(r),r}function jC(e,t,n){let r=Object.create(OC);return r.fn=Qg(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function Qg(e,t){return()=>{t(n=>(e.cleanupFns??=[]).push(n))}}function Di(e){return{toString:e}.toString()}function qC(e){return typeof e=="function"}function Om(e,t,n,r){t!==null?t.applyValueToInputSignal(t,r):e[n]=r}var gu=class{previousValue;currentValue;firstChange;constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}},Fu=(()=>{let e=()=>Pm;return e.ngInherit=!0,e})();function Pm(e){return e.type.prototype.ngOnChanges&&(e.setInput=WC),GC}function GC(){let e=jm(this),t=e?.current;if(t){let n=e.previous;if(n===nt)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function WC(e,t,n,r,o){let i=this.declaredInputs[r],s=jm(e)||ZC(e,{previous:nt,current:null}),u=s.current||(s.current={}),a=s.previous,c=a[i];u[i]=new gu(c&&c.currentValue,n,a===nt),Om(e,t,o,n)}var Lm="__ngSimpleChanges__";function jm(e){return e[Lm]||null}function ZC(e,t){return e[Lm]=t}var Kg=[];var Y=function(e,t=null,n){for(let r=0;r=r)break}else t[a]<0&&(e[Jn]+=65536),(u>14>16&&(e[L]&3)===t&&(e[L]+=16384,Jg(u,i)):Jg(u,i)}var Kr=-1,ar=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r,o){this.factory=t,this.name=o,this.canSeeViewProviders=n,this.injectImpl=r}};function KC(e){return(e.flags&8)!==0}function JC(e){return(e.flags&16)!==0}function XC(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}function yu(e,t){let n=t_(e),r=t;for(;n>0;)r=r[Kn],n--;return r}var Kl=!0;function bu(e){let t=Kl;return Kl=e,t}var n_=256,Um=n_-1,zm=5,r_=0,At={};function o_(e,t,n){let r;typeof n=="string"?r=n.charCodeAt(0)||0:n.hasOwnProperty(Zn)&&(r=n[Zn]),r==null&&(r=n[Zn]=r_++);let o=r&Um,i=1<>zm)]|=i}function vu(e,t){let n=qm(e,t);if(n!==-1)return n;let r=t[S];r.firstCreatePass&&(e.injectorIndex=t.length,Hl(r.data,e),Hl(t,null),Hl(r.blueprint,null));let o=Fd(e,t),i=e.injectorIndex;if($m(o)){let s=mu(o),u=yu(o,t),a=u[S].data;for(let c=0;c<8;c++)t[i+c]=u[s+c]|a[s+c]}return t[i+8]=o,i}function Hl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function qm(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function Fd(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;o!==null;){if(r=Qm(o),r===null)return Kr;if(n++,o=o[Kn],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Kr}function Jl(e,t,n){o_(e,t,n)}function i_(e,t){if(t==="class")return e.classes;if(t==="style")return e.styles;let n=e.attrs;if(n){let r=n.length,o=0;for(;o>20,d=r?u:u+l,h=o?u+l:c;for(let f=d;f=a&&p.type===n)return f}if(o){let f=s[a];if(f&&st(f)&&f.type===n)return a}return null}function fi(e,t,n,r,o){let i=e[n],s=t.data;if(i instanceof ar){let u=i;if(u.resolving)throw il("");let a=bu(u.canSeeViewProviders);u.resolving=!0;let c=s[n].type||s[n],l,d=u.injectImpl?Me(u.injectImpl):null,h=Rl(e,r,0);try{i=e[n]=u.factory(void 0,o,s,e,r),t.firstCreatePass&&n>=r.directiveStart&&YC(n,s[n],t)}finally{d!==null&&Me(d),bu(a),u.resolving=!1,Fl()}}return i}function u_(e){if(typeof e=="string")return e.charCodeAt(0)||0;let t=e.hasOwnProperty(Zn)?e[Zn]:void 0;return typeof t=="number"?t>=0?t&Um:a_:t}function em(e,t,n){let r=1<>zm)]&r)}function tm(e,t){return!(e&2)&&!(e&1&&t)}var sr=class{_tNode;_lView;constructor(t,n){this._tNode=t,this._lView=n}get(t,n,r){return Zm(this._tNode,this._lView,t,qn(r),n)}};function a_(){return new sr(ue(),w())}function pr(e){return Di(()=>{let t=e.prototype.constructor,n=t[zo]||Xl(t),r=Object.prototype,o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){let i=o[zo]||Xl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Xl(e){return Jc(e)?()=>{let t=Xl(le(e));return t&&t()}:mn(e)}function c_(e,t,n,r,o){let i=e,s=t;for(;i!==null&&s!==null&&s[L]&2048&&!Wr(s);){let u=Ym(i,s,n,r|2,At);if(u!==At)return u;let a=i.parent;if(!a){let c=s[hl];if(c){let l=c.get(n,At,r&-5);if(l!==At)return l}a=Qm(s),s=s[Kn]}i=a}return o}function Qm(e){let t=e[S],n=t.type;return n===2?t.declTNode:n===1?e[Ne]:null}function Od(e){return i_(ue(),e)}function l_(){return oo(ue(),w())}function oo(e,t){return new Zt(Qe(e,t))}var Zt=(()=>{class e{nativeElement;constructor(n){this.nativeElement=n}static __NG_ELEMENT_ID__=l_}return e})();function Km(e){return e instanceof Zt?e.nativeElement:e}function d_(){return this._results[Symbol.iterator]()}var Du=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new he}constructor(t=!1){this._emitDistinctChangesOnly=t}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;let r=dg(t);(this._changesDetected=!lg(this._results,r,n))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(t){this._onDirty=t}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=d_};function Jm(e){return(e.flags&128)===128}var Pd=(function(e){return e[e.OnPush=0]="OnPush",e[e.Eager=1]="Eager",e[e.Default=1]="Default",e})(Pd||{}),Xm=new Map,f_=0;function p_(){return f_++}function h_(e){Xm.set(e[zt],e)}function ed(e){Xm.delete(e[zt])}var nm="__ngContext__";function Xr(e,t){qt(t)?(e[nm]=t[zt],h_(t)):e[nm]=t}function ey(e){return ny(e[qr])}function ty(e){return ny(e[Ze])}function ny(e){for(;e!==null&&!it(e);)e=e[Ze];return e}var td;function Ld(e){td=e}function ry(){if(td!==void 0)return td;if(typeof document<"u")return document;throw new D(210,!1)}var Ou=new x("",{factory:()=>g_}),g_="ng";var Pu=new x(""),hr=new x("",{providedIn:"platform",factory:()=>"unknown"}),m_=new x(""),Lu=new x("",{factory:()=>b(X).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var oy="r";var iy="di";var sy=!1,uy=new x("",{factory:()=>sy});var ay=new x("");var y_=(e,t,n,r)=>{};function b_(e,t,n,r){y_(e,t,n,r)}function ju(e){return(e.flags&32)===32}var v_=()=>null;function cy(e,t,n=!1){return v_(e,t,n)}function ly(e,t){let n=e.contentQueries;if(n!==null){let r=I(null);try{for(let o=0;oe,createScript:e=>e,createScriptURL:e=>e})}catch(e){}return uu}function Bu(e){return D_()?.createHTML(e)||e}var au;function E_(){if(au===void 0&&(au=null,fe.trustedTypes))try{au=fe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch(e){}return au}function rm(e){return E_()?.createHTML(e)||e}var Wt=class{changingThisBreaksApplicationSecurity;constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Bs})`}},rd=class extends Wt{getTypeName(){return"HTML"}},od=class extends Wt{getTypeName(){return"Style"}},id=class extends Wt{getTypeName(){return"Script"}},sd=class extends Wt{getTypeName(){return"URL"}},ud=class extends Wt{getTypeName(){return"ResourceURL"}};function Ue(e){return e instanceof Wt?e.changingThisBreaksApplicationSecurity:e}function Yt(e,t){let n=dy(e);if(n!=null&&n!==t){if(n==="ResourceURL"&&t==="URL")return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Bs})`)}return n===t}function dy(e){return e instanceof Wt&&e.getTypeName()||null}function Bd(e){return new rd(e)}function Vd(e){return new od(e)}function Hd(e){return new id(e)}function $d(e){return new sd(e)}function Ud(e){return new ud(e)}function C_(e){let t=new cd(e);return __()?new ad(t):t}var ad=class{inertDocumentHelper;constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{let n=new window.DOMParser().parseFromString(Bu(t),"text/html").body;return n===null?this.inertDocumentHelper.getInertBodyElement(t):(n.firstChild?.remove(),n)}catch(n){return null}}},cd=class{defaultDoc;inertDocument;constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){let n=this.inertDocument.createElement("template");return n.innerHTML=Bu(t),n}};function __(){try{return!!new window.DOMParser().parseFromString(Bu(""),"text/html")}catch(e){return!1}}var w_=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function Ei(e){return e=String(e),e.match(w_)?e:"unsafe:"+e}function Qt(e){let t={};for(let n of e.split(","))t[n]=!0;return t}function Ci(...e){let t={};for(let n of e)for(let r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}var fy=Qt("area,br,col,hr,img,wbr"),py=Qt("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),hy=Qt("rp,rt"),x_=Ci(hy,py),I_=Ci(py,Qt("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),T_=Ci(hy,Qt("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),om=Ci(fy,I_,T_,x_),gy=Qt("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),S_=Qt("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),M_=Qt("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),A_=Ci(gy,S_,M_),N_=Qt("script,style,template");var ld=class{sanitizedSomething=!1;buf=[];sanitizeChildren(t){let n=t.firstChild,r=!0,o=[];for(;n;){if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild){o.push(n),n=F_(n);continue}for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=R_(n);if(i){n=i;break}n=o.pop()}}return this.buf.join("")}startElement(t){let n=im(t).toLowerCase();if(!om.hasOwnProperty(n))return this.sanitizedSomething=!0,!N_.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);let r=t.attributes;for(let o=0;o"),!0}endElement(t){let n=im(t).toLowerCase();om.hasOwnProperty(n)&&!fy.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(sm(t))}};function k_(e,t){return(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function R_(e){let t=e.nextSibling;if(t&&e!==t.previousSibling)throw my(t);return t}function F_(e){let t=e.firstChild;if(t&&k_(e,t))throw my(t);return t}function im(e){let t=e.nodeName;return typeof t=="string"?t:"FORM"}function my(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var O_=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,P_=/([^\#-~ |!])/g;function sm(e){return e.replace(/&/g,"&").replace(O_,function(t){let n=t.charCodeAt(0),r=t.charCodeAt(1);return"&#"+((n-55296)*1024+(r-56320)+65536)+";"}).replace(P_,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}var cu;function Vu(e,t){let n=null;try{cu=cu||C_(e);let r=t?String(t):"";n=cu.getInertBodyElement(r);let o=5,i=r;do{if(o===0)throw new Error("Failed to sanitize html because the input is unstable");o--,r=i,i=n.innerHTML,n=cu.getInertBodyElement(r)}while(r!==i);let u=new ld().sanitizeChildren(um(n)||n);return Bu(u)}finally{if(n){let r=um(n)||n;for(;r.firstChild;)r.firstChild.remove()}}}function um(e){return"content"in e&&L_(e)?e.content:null}function L_(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var j_=/^>|^->||--!>|)/g,V_="\u200B$1\u200B";function H_(e){return e.replace(j_,t=>t.replace(B_,V_))}function $_(e,t){return e.createText(t)}function U_(e,t,n){e.setValue(t,n)}function z_(e,t){return e.createComment(H_(t))}function yy(e,t,n){return e.createElement(t,n)}function Eu(e,t,n,r,o){e.insertBefore(t,n,r,o)}function by(e,t,n){e.appendChild(t,n)}function am(e,t,n,r,o){r!==null?Eu(e,t,n,r,o):by(e,t,n)}function vy(e,t,n,r){e.removeChild(null,t,n,r)}function q_(e,t,n){e.setAttribute(t,"style",n)}function G_(e,t,n){n===""?e.removeAttribute(t,"class"):e.setAttribute(t,"class",n)}function Dy(e,t,n){let{mergedAttrs:r,classes:o,styles:i}=n;r!==null&&XC(e,t,r),o!==null&&G_(e,t,o),i!==null&&q_(e,t,i)}var ze=(function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e})(ze||{});function zd(e){let t=Ey();return t?rm(t.sanitize(ze.HTML,e)||""):Yt(e,"HTML")?rm(Ue(e)):Vu(ry(),vn(e))}function W_(e){let t=Ey();return t?t.sanitize(ze.URL,e)||"":Yt(e,"URL")?Ue(e):Ei(vn(e))}function Ey(){let e=w();return e&&e[ot].sanitizer}function Z_(e){return e.ownerDocument.defaultView}function Y_(e){return e.ownerDocument}function Cy(e){return e instanceof Function?e():e}function Q_(e,t,n){let r=e.length;for(;;){let o=e.indexOf(t,n);if(o===-1)return o;if(o===0||e.charCodeAt(o-1)<=32){let i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}var _y="ng-template";function K_(e,t,n,r){let o=0;if(r){for(;o-1){let i;for(;++oi?d="":d=o[l+1].toLowerCase(),r&2&&c!==d){if(ct(r))return!1;s=!0}}}}return ct(r)||s}function ct(e){return(e&1)===0}function ew(e,t,n,r){if(t===null)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else r&8?o+="."+s:r&4&&(o+=" "+s);else o!==""&&!ct(s)&&(t+=cm(i,o),o=""),r=s,i=i||!ct(r);n++}return o!==""&&(t+=cm(i,o)),t}function sw(e){return e.map(iw).join(",")}function uw(e){let t=[],n=[],r=1,o=2;for(;r=0;i--){let s=n[i],u=s.parentNode;s===t?(n.splice(i,1),fd.add(s),s.dispatchEvent(new CustomEvent("animationend",{detail:{cancel:!0}}))):(o&&s===o||u&&r&&u!==r)&&(n.splice(i,1),s.dispatchEvent(new CustomEvent("animationend",{detail:{cancel:!0}})),s.parentNode?.removeChild(s))}}function pw(e,t){let n=dd.get(e);n?n.includes(t)||n.push(t):dd.set(e,[t])}var cr=new Set,$u=(function(e){return e[e.CHANGE_DETECTION=0]="CHANGE_DETECTION",e[e.AFTER_NEXT_RENDER=1]="AFTER_NEXT_RENDER",e})($u||{}),ft=new x(""),lm=new Set;function Nt(e){lm.has(e)||(lm.add(e),performance?.mark?.("mark_feature_usage",{detail:{feature:e}}))}var Uu=(()=>{class e{impl=null;execute(){this.impl?.execute()}static \u0275prov=T({token:e,providedIn:"root",factory:()=>new e})}return e})(),Qd=[0,1,2,3],Kd=(()=>{class e{ngZone=b(Ce);scheduler=b(wt);errorHandler=b(We,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){b(ft,{optional:!0})}execute(){let n=this.sequences.size>0;n&&Y(q.AfterRenderHooksStart),this.executing=!0;for(let r of Qd)for(let o of this.sequences)if(!(o.erroredOrDestroyed||!o.hooks[r]))try{o.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let i=o.hooks[r];return i(o.pipelinedValue)},o.snapshot))}catch(i){o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(let r of this.sequences)r.afterRun(),r.once&&(this.sequences.delete(r),r.destroy());for(let r of this.deferredRegistrations)this.sequences.add(r);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),n&&Y(q.AfterRenderHooksEnd)}register(n){let{view:r}=n;r!==void 0?((r[Xn]??=[]).push(n),nr(r),r[L]|=8192):this.executing?this.deferredRegistrations.add(n):this.addSequence(n)}addSequence(n){this.sequences.add(n),this.scheduler.notify(7)}unregister(n){this.executing&&this.sequences.has(n)?(n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(this.sequences.delete(n),this.deferredRegistrations.delete(n))}maybeTrace(n,r){return r?r.run($u.AFTER_NEXT_RENDER,n):n()}static \u0275prov=T({token:e,providedIn:"root",factory:()=>new e})}return e})(),pi=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(t,n,r,o,i,s=null){this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let t=this.view?.[Xn];t&&(this.view[Xn]=t.filter(n=>n!==this))}};function hw(e,t){let n=t?.injector??b(me);return Nt("NgAfterNextRender"),mw(e,n,t,!0)}function gw(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function mw(e,t,n,r){let o=t.get(Uu);o.impl??=t.get(Kd);let i=t.get(ft,null,{optional:!0}),s=n?.manualCleanup!==!0?t.get($e):null,u=t.get(Yr,null,{optional:!0}),a=new pi(o.impl,gw(e),u?.view,r,s,i?.snapshot(null));return o.impl.register(a),a}var Sy=new x("",{factory:()=>({queue:new Set,isScheduled:!1,scheduler:null,injector:b(Ae)})});function My(e,t,n){let r=e.get(Sy);if(Array.isArray(t))for(let o of t)r.queue.add(o),n?.detachedLeaveAnimationFns?.push(o);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function yw(e,t){let n=e.get(Sy);if(t.detachedLeaveAnimationFns){for(let r of t.detachedLeaveAnimationFns)n.queue.delete(r);t.detachedLeaveAnimationFns=void 0}}function bw(e,t){for(let[n,r]of t)My(e,r.animateFns)}function dm(e,t,n,r){let o=e?.[En]?.enter;t!==null&&o&&o.has(n.index)&&bw(r,o)}function Qr(e,t,n,r,o,i,s,u){if(o!=null){let a,c=!1;it(o)?a=o:qt(o)&&(c=!0,o=o[rt]);let l=Ye(o);e===0&&r!==null?(dm(u,r,i,n),s==null?by(t,r,l):Eu(t,r,l,s||null,!0)):e===1&&r!==null?(dm(u,r,i,n),Eu(t,r,l,s||null,!0),fw(i,l)):e===2?(u?.[En]?.leave?.has(i.index)&&pw(i,l),fm(u,i,n,d=>{if(fd.has(l)){fd.delete(l);return}vy(t,l,c,d)})):e===3&&fm(u,i,n,()=>{t.destroyNode(l)}),a!=null&&Mw(t,e,n,a,i,r,s)}}function vw(e,t){Ay(e,t),t[rt]=null,t[Ne]=null}function Dw(e,t,n,r,o,i){r[rt]=o,r[Ne]=t,qu(e,r,n,1,o,i)}function Ay(e,t){t[ot].changeDetectionScheduler?.notify(9),qu(e,t,t[Z],2,null,null)}function Ew(e){let t=e[qr];if(!t)return $l(e[S],e);for(;t;){let n=null;if(qt(t))n=t[qr];else{let r=t[oe];r&&(n=r)}if(!n){for(;t&&!t[Ze]&&t!==e;)qt(t)&&$l(t[S],t),t=t[de];t===null&&(t=e),qt(t)&&$l(t[S],t),n=t&&t[Ze]}t=n}}function Jd(e,t){let n=e[er],r=n.indexOf(t);n.splice(r,1)}function zu(e,t){if(tr(t))return;let n=t[Z];n.destroyNode&&qu(e,t,n,3,null,null),Ew(t)}function $l(e,t){if(tr(t))return;let n=I(null);try{t[L]&=-129,t[L]|=256,t[Be]&&dn(t[Be]),ww(e,t),_w(e,t),t[S].type===1&&t[Z].destroy();let r=t[Dn];if(r!==null&&it(t[de])){r!==t[de]&&Jd(r,t);let o=t[St];o!==null&&o.detachView(e)}ed(t)}finally{I(n)}}function fm(e,t,n,r){let o=e?.[En];if(o==null||o.leave==null||!o.leave.has(t.index))return r(!1);e&&cr.add(e[zt]),My(n,()=>{if(o.leave&&o.leave.has(t.index)){let s=o.leave.get(t.index),u=[];if(s){for(let a=0;a{e[En].running=void 0,cr.delete(e[zt]),t(!0)});return}t(!1)}function _w(e,t){let n=e.cleanup,r=t[zr];if(n!==null)for(let s=0;s=0?r[u]():r[-u].unsubscribe(),s+=2}else{let u=r[n[s+1]];n[s].call(u)}r!==null&&(t[zr]=null);let o=t[$t];if(o!==null){t[$t]=null;for(let s=0;sK&&Ty(e,t,K,!1);let u=s?q.TemplateUpdateStart:q.TemplateCreateStart;Y(u,o,n),n(r,o)}finally{_n(i);let u=s?q.TemplateUpdateEnd:q.TemplateCreateEnd;Y(u,o,n)}}function Gu(e,t,n){Ow(e,t,n),(n.flags&64)===64&&Pw(e,t,n)}function _i(e,t,n=Qe){let r=t.localNames;if(r!==null){let o=t.index+1;for(let i=0;inull;function Fw(e){return e==="class"?"className":e==="for"?"htmlFor":e==="formaction"?"formAction":e==="innerHtml"?"innerHTML":e==="readonly"?"readOnly":e==="tabindex"?"tabIndex":e}function Py(e,t,n,r,o,i){let s=t[S];if(Wu(e,s,t,n,r)){Mt(e)&&jy(t,e.index);return}e.type&3&&(n=Fw(n)),Ly(e,t,n,r,o,i)}function Ly(e,t,n,r,o,i){if(e.type&3){let s=Qe(e,t);r=i!=null?i(r,e.value||"",n):r,o.setProperty(s,n,r)}else e.type&12}function jy(e,t){let n=Ve(t,e);n[L]&16||(n[L]|=64)}function Ow(e,t,n){let r=n.directiveStart,o=n.directiveEnd;Mt(n)&&lw(t,n,e.data[r+n.componentOffset]),e.firstCreatePass||vu(n,t);let i=n.initialInputs;for(let s=r;s=u&&f<=a){let p=t.data[f],m=d[h+1];In(p,n[f],m,i),c=!0}else if(f>a)break}}return s!==null&&r.inputs.hasOwnProperty(o)&&(In(r,n[s],o,i),c=!0),c}function $w(e,t){let n=Ve(t,e),r=n[S];Uw(r,n);let o=n[rt];o!==null&&n[Qn]===null&&(n[Qn]=cy(o,n[Ut])),Y(q.ComponentStart);try{of(r,n,n[re])}finally{Y(q.ComponentEnd,n[re])}}function Uw(e,t){for(let n=t.length;n{nr(e.lView)},consumerOnSignalRead(){this.lView[Be]=this}});function Yw(e){let t=e[Be]??Object.create(Qw);return t.lView=e,t}var Qw=P(M({},an),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{let t=bn(e.lView);for(;t&&!Uy(t[S]);)t=bn(t);t&&Dl(t)},consumerOnSignalRead(){this.lView[Be]=this}});function Uy(e){return e.type!==2}function zy(e){if(e[yn]===null)return;let t=!0;for(;t;){let n=!1;for(let r of e[yn])r.dirty&&(n=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));t=n&&!!(e[L]&8192)}}var Kw=100;function qy(e,t=0){let r=e[ot].rendererFactory,o=!1;o||r.begin?.();try{Jw(e,t)}finally{o||r.end?.()}}function Jw(e,t){let n=kl();try{Go(!0),hd(e,t);let r=0;for(;ri(e);){if(r===Kw)throw new D(103,!1);r++,hd(e,1)}}finally{Go(n)}}function Xw(e,t,n,r){if(tr(t))return;let o=t[L],i=!1,s=!1;ru(t);let u=!0,a=null,c=null;i||(Uy(e)?(c=qw(t),a=Lt(c)):ns()===null?(u=!1,c=Yw(t),a=Lt(c)):t[Be]&&(dn(t[Be]),t[Be]=null));try{vl(t),Ng(e.bindingStartIndex),n!==null&&Oy(e,t,n,2,r);let l=(o&3)===3;if(!i)if(l){let f=e.preOrderCheckHooks;f!==null&&du(t,f,null)}else{let f=e.preOrderHooks;f!==null&&fu(t,f,0,null),Vl(t,0)}if(s||ex(t),zy(t),Gy(t,0),e.contentQueries!==null&&ly(e,t),!i)if(l){let f=e.contentCheckHooks;f!==null&&du(t,f)}else{let f=e.contentHooks;f!==null&&fu(t,f,1),Vl(t,1)}nx(e,t);let d=e.components;d!==null&&Zy(t,d,0);let h=e.viewQuery;if(h!==null&&nd(2,h,r),!i)if(l){let f=e.viewCheckHooks;f!==null&&du(t,f)}else{let f=e.viewHooks;f!==null&&fu(t,f,2),Vl(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[Ys]){for(let f of t[Ys])f();t[Ys]=null}i||(Hy(t),t[L]&=-73)}catch(l){throw i||nr(t),l}finally{c!==null&&(ln(c,a),u&&Ww(c)),ou()}}function Gy(e,t){for(let n=ey(e);n!==null;n=ty(n))for(let r=oe;r0&&(e[n-1][Ze]=r[Ze]);let i=Ko(e,oe+t);vw(r[S],r);let s=i[St];s!==null&&s.detachView(i[S]),r[de]=null,r[Ze]=null,r[L]&=-129}return r}function rx(e,t,n,r){let o=oe+r,i=n.length;r>0&&(n[o-1][Ze]=t),r-1&&(gi(t,r),Ko(n,r))}this._attachedToViewContainer=!1}zu(this._lView[S],this._lView)}onDestroy(t){El(this._lView,t)}markForCheck(){Zu(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[L]&=-129}reattach(){Js(this._lView),this._lView[L]|=128}detectChanges(){this._lView[L]|=1024,qy(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new D(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let t=Wr(this._lView),n=this._lView[Dn];n!==null&&!t&&Jd(n,this._lView),Ay(this._lView[S],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new D(902,!1);this._appRef=t;let n=Wr(this._lView),r=this._lView[Dn];r!==null&&!n&&Jy(r,this._lView),Js(this._lView)}};var Sn=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=ox;constructor(n,r,o){this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,r){return this.createEmbeddedViewImpl(n,r)}createEmbeddedViewImpl(n,r,o){let i=wi(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o});return new Tn(i)}}return e})();function ox(){return Yu(ue(),w())}function Yu(e,t){return e.type&4?new Sn(t,e,oo(e,t)):null}function gr(e,t,n,r,o){let i=e.data[t];if(i===null)i=ix(e,t,n,r,o),kg()&&(i.flags|=32);else if(i.type&64){i.type=n,i.value=r,i.attrs=o;let s=Mg();i.injectorIndex=s===null?-1:s.injectorIndex}return rr(i,!0),i}function ix(e,t,n,r,o){let i=Sl(),s=Ml(),u=s?i:i&&i.parent,a=e.data[t]=ux(e,u,n,t,r,o);return sx(e,a,i,s),a}function sx(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function ux(e,t,n,r,o,i){let s=t?t.injectorIndex:-1,u=0;return xl()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function ax(e){let t=e[gl]??[],r=e[de][Z],o=[];for(let i of t)i.data[iy]!==void 0?o.push(i):cx(i,r);e[gl]=o}function cx(e,t){let n=0,r=e.firstChild;if(r){let o=e.data[oy];for(;nnull,dx=()=>null;function Cu(e,t){return lx(e,t)}function Xy(e,t,n){return dx(e,t,n)}var eb=class{},Qu=class{},gd=class{resolveComponentFactory(t){throw new D(917,!1)}},Ii=class{static NULL=new gd},lr=class{},Ti=(()=>{class e{destroyNode=null;static __NG_ELEMENT_ID__=()=>fx()}return e})();function fx(){let e=w(),t=ue(),n=Ve(t.index,e);return(qt(n)?n:e)[Z]}var tb=(()=>{class e{static \u0275prov=T({token:e,providedIn:"root",factory:()=>null})}return e})();var hu={},md=class{injector;parentInjector;constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){let o=this.injector.get(t,hu,r);return o!==hu||n===hu?o:this.parentInjector.get(t,n,r)}};function _u(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(t!==null)for(let s=0;s0&&(n.directiveToIndex=new Map);for(let h=0;h0;){let n=e[--t];if(typeof n=="number"&&n<0)return n}return 0}function Ex(e,t,n){if(n){if(t.exportAs)for(let r=0;rr(Ye(m[e.index])):e.index;sb(p,t,n,i,u,f,!1)}}return c}function xx(e){return e.startsWith("animation")||e.startsWith("transition")}function Ix(e,t,n,r){let o=e.cleanup;if(o!=null)for(let i=0;ia?u[a]:null}typeof s=="string"&&(i+=2)}return null}function sb(e,t,n,r,o,i,s){let u=t.firstCreatePass?_l(t):null,a=Cl(n),c=a.length;a.push(o,i),u&&u.push(r,e,c,(c+1)*(s?-1:1))}function wu(e,t,n,r,o,i){let s=t[n],u=t[S],c=u.data[n].outputs[r],d=s[c].subscribe(i);sb(e.index,u,t,o,i,d,!0)}function Tx(){let e=w(),t=G(),n=ue();if(t.firstCreatePass&&Mx(t,n),n.controlDirectiveIndex===-1)return;Nt("NgSignalForms");let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new xu(e,t,n))}function Sx(){let e=w(),t=G(),n=wn();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,o=e[n.controlDirectiveIndex];r.update(o,new xu(e,t,n))}var xu=class{lView;tView;tNode;hasPassThrough;constructor(t,n,r){this.lView=t,this.tView=n,this.tNode=r,this.hasPassThrough=!!(r.flags&4096)}get customControl(){return this.tNode.customControlIndex!==-1?this.lView[this.tNode.customControlIndex]:void 0}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(t,n){ub(this.tView.data[this.tNode.customControlIndex],t)&&wu(this.tNode,this.lView,this.tNode.customControlIndex,t,t,ur(this.tNode,this.lView,n))}listenToCustomControlModel(t){let n=this.tNode.flags&1024?"valueChange":"checkedChange";wu(this.tNode,this.lView,this.tNode.customControlIndex,n,n,ur(this.tNode,this.lView,t))}listenToDom(t,n){lf(this.tNode,this.tView,this.lView,void 0,this.lView[Z],t,n,ur(this.tNode,this.lView,n))}setInputOnDirectives(t,n){let r=this.tNode.inputs?.[t],o=this.tNode.hostDirectiveInputs?.[t];if(!r&&!o)return!1;if(r)for(let i of r){let s=this.tView.data[i],u=this.lView[i];In(s,u,t,n)}if(o)for(let i=0;i1){t.flags|=4096;return}Ax(e,t)}function Ax(e,t){for(let n=t.directiveStart;n{Tx()},update:()=>{Dm(r.targetIdx,e,t()),Sx()}};return r}let n={[mi]:vm,update:()=>Dm(n.targetIdx,e,t())};return n}function ab(e){return e.debugInfo?.className||e.type.name||null}var Iu=class extends Ii{ngModule;constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){let n=Tt(t);return new Mn(n,this.ngModule)}};function kx(e){return Object.keys(e).map(t=>{let[n,r,o]=e[t],i={propName:n,templateName:t,isSignal:(r&Hu.SignalBased)!==0};return o&&(i.transform=o),i})}function Rx(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Fx(e,t,n){let r=t instanceof Ae?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new md(n,r):n}function Ox(e){let t=e.get(lr,null);if(t===null)throw new D(407,!1);let n=e.get(tb,null),r=e.get(wt,null),o=e.get(ft,null,{optional:!0});return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1,tracingService:o}}function Px(e,t){let n=cb(e);return yy(t,n,n==="svg"?yl:n==="math"?vg:null)}function cb(e){return(e.selectors[0][0]||"div").toLowerCase()}var Mn=class extends Qu{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=kx(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Rx(this.componentDef.outputs),this.cachedOutputs}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=sw(t.selectors),this.ngContentSelectors=t.ngContentSelectors??[],this.isBoundToModule=!!n}create(t,n,r,o,i,s){Y(q.DynamicComponentStart);let u=I(null);try{let a=this.componentDef,c=Fx(a,o||this.ngModule,t),l=Ox(c),d=l.tracingService;return d&&d.componentCreate?d.componentCreate(ab(a),()=>this.createComponentRef(l,c,n,r,i,s)):this.createComponentRef(l,c,n,r,i,s)}finally{I(u)}}createComponentRef(t,n,r,o,i,s){let u=this.componentDef,a=Lx(o,u,s,i),c=t.rendererFactory.createRenderer(null,u),l=o?Nw(c,o,u.encapsulation,n):Px(u,c),d=s?.some(Em)||i?.some(p=>typeof p!="function"&&p.bindings.some(Em)),h=Wd(null,a,null,512|xy(u),null,null,t,c,n,null,cy(l,n,!0));h[K]=l,ru(h);let f=null;try{let p=sf(K,h,2,"#host",()=>a.directiveRegistry,!0,0);Dy(c,l,p),Xr(l,h),Gu(a,h,p),jd(a,p,h),uf(a,p),r!==void 0&&Bx(p,this.ngContentSelectors,r),f=Ve(p.index,h),h[re]=f[re],of(a,h,null)}catch(p){throw f!==null&&ed(f),ed(h),p}finally{Y(q.DynamicComponentEnd),ou()}return new Tu(this.componentType,h,!!d)}};function Lx(e,t,n,r){let o=e?["ng-version","21.2.4"]:uw(t.selectors[0]),i=null,s=null,u=0;if(n)for(let l of n)u+=l[mi].requiredVars,l.create&&(l.targetIdx=0,(i??=[]).push(l)),l.update&&(l.targetIdx=0,(s??=[]).push(l));if(r)for(let l=0;l{if(n&1&&e)for(let r of e)r.create();if(n&2&&t)for(let r of t)r.update()}}function Em(e){let t=e[mi].kind;return t==="input"||t==="twoWay"}var Tu=class extends eb{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(t,n,r){super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=Qs(n[S],K),this.location=oo(this._tNode,n),this.instance=Ve(this._tNode.index,n)[re],this.hostView=this.changeDetectorRef=new Tn(n,void 0),this.componentType=t}setInput(t,n){this._hasInputBindings;let r=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(t)&&Object.is(this.previousInputValues.get(t),n))return;let o=this._rootLView,i=Wu(r,o[S],o,t,n);this.previousInputValues.set(t,n);let s=Ve(r.index,o);Zu(s,1)}get injector(){return new sr(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}};function Bx(e,t,n){let r=e.projection=[];for(let o=0;o{class e{static __NG_ELEMENT_ID__=Vx}return e})();function Vx(){let e=ue();return lb(e,w())}var yd=class e extends pt{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return oo(this._hostTNode,this._hostLView)}get injector(){return new sr(this._hostTNode,this._hostLView)}get parentInjector(){let t=Fd(this._hostTNode,this._hostLView);if($m(t)){let n=yu(t,this._hostLView),r=mu(t),o=n[S].data[r+8];return new sr(o,n)}else return new sr(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){let n=Cm(this._lContainer);return n!==null&&n[t]||null}get length(){return this._lContainer.length-oe}createEmbeddedView(t,n,r){let o,i;typeof r=="number"?o=r:r!=null&&(o=r.index,i=r.injector);let s=Cu(this._lContainer,t.ssrId),u=t.createEmbeddedViewImpl(n||{},i,s);return this.insertImpl(u,o,eo(this._hostTNode,s)),u}createComponent(t,n,r,o,i,s,u){let a=t&&!qC(t),c;if(a)c=n;else{let g=n||{};c=g.index,r=g.injector,o=g.projectableNodes,i=g.environmentInjector||g.ngModuleRef,s=g.directives,u=g.bindings}let l=a?t:new Mn(Tt(t)),d=r||this.parentInjector;if(!i&&l.ngModule==null){let y=(a?d:this.parentInjector).get(Ae,null);y&&(i=y)}let h=Tt(l.componentType??{}),f=Cu(this._lContainer,h?.id??null),p=f?.firstChild??null,m=l.create(d,o,p,i,s,u);return this.insertImpl(m.hostView,c,eo(this._hostTNode,f)),m}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){let o=t._lView;if(Eg(o)){let u=this.indexOf(t);if(u!==-1)this.detach(u);else{let a=o[de],c=new e(a,a[Ne],a[de]);c.detach(c.indexOf(t))}}let i=this._adjustIndex(n),s=this._lContainer;return xi(s,o,i,r),t.attachToViewContainerRef(),ul(Ul(s),i,t),t}move(t,n){return this.insert(t,n)}indexOf(t){let n=Cm(this._lContainer);return n!==null?n.indexOf(t):-1}remove(t){let n=this._adjustIndex(t,-1),r=gi(this._lContainer,n);r&&(Ko(Ul(this._lContainer),n),zu(r[S],r))}detach(t){let n=this._adjustIndex(t,-1),r=gi(this._lContainer,n);return r&&Ko(Ul(this._lContainer),n)!=null?new Tn(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Cm(e){return e[ei]}function Ul(e){return e[ei]||(e[ei]=[])}function lb(e,t){let n,r=t[e.index];return it(r)?n=r:(n=Yy(r,t,null,e),t[e.index]=n,Zd(t,n)),$x(n,t,e,r),new yd(n,e,t)}function Hx(e,t){let n=e[Z],r=n.createComment(""),o=Qe(t,e),i=n.parentNode(o);return Eu(n,i,r,n.nextSibling(o),!1),r}var $x=qx,Ux=()=>!1;function zx(e,t,n){return Ux(e,t,n)}function qx(e,t,n,r){if(e[Cn])return;let o;n.type&8?o=Ye(r):o=Hx(t,n),e[Cn]=o}var bd=class e{queryList;matches=null;constructor(t){this.queryList=t}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},vd=class e{queries;constructor(t=[]){this.queries=t}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries!==null?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(s[u/2]);else{let c=i[u+1],l=t[-a];for(let d=oe;dt.trim())}function gb(e,t,n){e.queries===null&&(e.queries=new Dd),e.queries.track(new Ed(t,n))}function Kx(e,t){let n=e.contentQueries||(e.contentQueries=[]),r=n.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}function ff(e,t){return e.queries.getByIndex(t)}function mb(e,t){let n=e[S],r=ff(n,t);return r.crossesNgTemplate?Cd(n,e,t,[]):db(n,e,r,t)}function pf(e,t,n){let r,o=Fo(()=>{r._dirtyCounter();let i=Jx(r,e);if(t&&i===void 0)throw new D(-951,!1);return i});return r=o[se],r._dirtyCounter=xn(0),r._flatValue=void 0,o}function hf(e){return pf(!0,!1,e)}function gf(e){return pf(!0,!0,e)}function yb(e){return pf(!1,!1,e)}function bb(e,t){let n=e[se];n._lView=w(),n._queryIndex=t,n._queryList=df(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(r=>r+1))}function Jx(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[L]&4)return t?void 0:Ee;let o=df(n,r),i=mb(n,r);return o.reset(i,Km),t?o.first:o._changesDetected||e._flatValue===void 0?e._flatValue=o.toArray():e._flatValue}var An=class{},vb=class{};function mf(e,t){return new yi(e,t??null,[])}var yi=class extends An{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];componentFactoryResolver=new Iu(this);constructor(t,n,r,o=!0){super(),this.ngModuleType=t,this._parent=n;let i=ol(t);this._bootstrapComponents=Cy(i.bootstrap),this._r3Injector=Ol(t,n,[{provide:An,useValue:this},{provide:Ii,useValue:this.componentFactoryResolver},...r],Yo(t),new Set(["environment"])),o&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}},Mu=class extends vb{moduleType;constructor(t){super(),this.moduleType=t}create(t){return new yi(this.moduleType,t,[])}};var bi=class extends An{injector;componentFactoryResolver=new Iu(this);instance=null;constructor(t){super();let n=new Wn([...t.providers,{provide:An,useValue:this},{provide:Ii,useValue:this.componentFactoryResolver}],t.parent||$r(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}};function Db(e,t,n=null){return new bi({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Xx=(()=>{class e{_injector;cachedInjectors=new Map;constructor(n){this._injector=n}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){let r=ll(!1,n.type),o=r.length>0?Db([r],this._injector,""):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(let n of this.cachedInjectors.values())n!==null&&n.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=T({token:e,providedIn:"environment",factory:()=>new e(A(Ae))})}return e})();function so(e){return Di(()=>{let t=Eb(e),n=P(M({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Pd.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?o=>o.get(Xx).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||lt.Emulated,styles:e.styles||Ee,_:null,schemas:e.schemas||null,tView:null,id:""});t.standalone&&Nt("NgStandalone"),Cb(n);let r=e.dependencies;return n.directiveDefs=_m(r,eI),n.pipeDefs=_m(r,sg),n.id=rI(n),n})}function eI(e){return Tt(e)||Us(e)}function Kt(e){return Di(()=>({type:e.type,bootstrap:e.bootstrap||Ee,declarations:e.declarations||Ee,imports:e.imports||Ee,exports:e.exports||Ee,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function tI(e,t){if(e==null)return nt;let n={};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r],i,s,u,a;Array.isArray(o)?(u=o[0],i=o[1],s=o[2]??i,a=o[3]||null):(i=o,s=o,u=Hu.None,a=null),n[i]=[r,u,a],t[i]=s}return n}function nI(e){if(e==null)return nt;let t={};for(let n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ht(e){return Di(()=>{let t=Eb(e);return Cb(t),t})}function uo(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function Eb(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||nt,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Ee,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,inputs:tI(e.inputs,t),outputs:nI(e.outputs),debugInfo:null}}function Cb(e){e.features?.forEach(t=>t(e))}function _m(e,t){return e?()=>{let n=typeof e=="function"?e():e,r=[];for(let o of n){let i=t(o);i!==null&&r.push(i)}return r}:null}function rI(e){let t=0,n=typeof e.consts=="function"?"":e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let i of r.join("|"))t=Math.imul(31,t)+i.charCodeAt(0)<<0;return t+=2147483648,"c"+t}function oI(e){let t=n=>{let r=Array.isArray(e);n.hostDirectives===null?(n.resolveHostDirectives=iI,n.hostDirectives=r?e.map(_d):[e]):r?n.hostDirectives.unshift(...e.map(_d)):n.hostDirectives.unshift(e)};return t.ngInherit=!0,t}function iI(e){let t=[],n=!1,r=null,o=null;for(let i=0;i=0;r--){let o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=Jr(o.hostAttrs,n=Jr(n,o.hostAttrs))}}function zl(e){return e===nt?{}:e===Ee?[]:e}function lI(e,t){let n=e.viewQuery;n?e.viewQuery=(r,o)=>{t(r,o),n(r,o)}:e.viewQuery=t}function dI(e,t){let n=e.contentQueries;n?e.contentQueries=(r,o,i)=>{t(r,o,i),n(r,o,i)}:e.contentQueries=t}function fI(e,t){let n=e.hostBindings;n?e.hostBindings=(r,o)=>{t(r,o),n(r,o)}:e.hostBindings=t}function wb(e,t,n,r,o,i,s,u){if(n.firstCreatePass){e.mergedAttrs=Jr(e.mergedAttrs,e.attrs);let l=e.tView=Gd(2,e,o,i,s,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),l.queries=n.queries.embeddedTView(e))}u&&(e.flags|=u),rr(e,!1);let a=hI(n,t,e,r);iu()&&Xd(n,t,a,e),Xr(a,t);let c=Yy(a,t,a,e);t[r+K]=c,Zd(t,c),zx(c,e,t)}function pI(e,t,n,r,o,i,s,u,a,c,l){let d=n+K,h;return t.firstCreatePass?(h=gr(t,d,4,s||null,u||null),Xs()&&nb(t,e,h,He(t.consts,c),tf),Bm(t,h)):h=t.data[d],wb(h,e,t,n,r,o,i,a),Gr(h)&&Gu(t,e,h),c!=null&&_i(e,h,l),h}function to(e,t,n,r,o,i,s,u,a,c,l){let d=n+K,h;if(t.firstCreatePass){if(h=gr(t,d,4,s||null,u||null),c!=null){let f=He(t.consts,c);h.localNames=[];for(let p=0;p{class e{log(n){console.log(n)}warn(n){console.warn(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function yf(e){return typeof e=="function"&&e[se]!==void 0}function bf(e){return yf(e)&&typeof e.set=="function"}var Ju=new x(""),Xu=new x(""),Si=(()=>{class e{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;constructor(n,r,o){this._ngZone=n,this.registry=r,Zs()&&(this._destroyRef=b($e,{optional:!0})??void 0),vf||(Mb(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this._taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){let n=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),r=this._ngZone.runOutsideAngular(()=>this._ngZone.onStable.subscribe({next:()=>{Ce.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}}));this._destroyRef?.onDestroy(()=>{n.unsubscribe(),r.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb()}});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>r.updateCb&&r.updateCb(n)?(clearTimeout(r.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n()},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this._taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static \u0275fac=function(r){return new(r||e)(A(Ce),A(Sb),A(Xu))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),Sb=(()=>{class e{_applications=new Map;registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return vf?.findTestabilityInTree(this,n,r)??null}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function Mb(e){vf=e}var vf;function Mi(e){return!!e&&typeof e.then=="function"}function ea(e){return!!e&&typeof e.subscribe=="function"}var Df=new x("");function mI(e){return Yn([{provide:Df,multi:!0,useValue:e}])}var Ef=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r});appInits=b(Df,{optional:!0})??[];injector=b(me);constructor(){}runInitializers(){if(this.initialized)return;let n=[];for(let o of this.appInits){let i=Ur(this.injector,o);if(Mi(i))n.push(i);else if(ea(i)){let s=new Promise((u,a)=>{i.subscribe({complete:u,error:a})});n.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),n.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Ab=new x("");function Nb(){hc(()=>{let e="";throw new D(600,e)})}function kb(e){return e.isBoundToModule}var yI=10;var co=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=b(Gt);afterRenderManager=b(Uu);zonelessEnabled=b(ui);rootEffectScheduler=b(su);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new he;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=b(or);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Se(n=>!n))}constructor(){b(ft,{optional:!0})}whenStable(){let n;return new Promise(r=>{n=this.isStable.subscribe({next:o=>{o&&r()}})}).finally(()=>{n.unsubscribe()})}_injector=b(Ae);_rendererFactory=null;get injector(){return this._injector}bootstrap(n,r){return this.bootstrapImpl(n,r)}bootstrapImpl(n,r,o=me.NULL){return this._injector.get(Ce).run(()=>{Y(q.BootstrapComponentStart);let s=n instanceof Qu;if(!this._injector.get(Ef).done){let p="";throw new D(405,p)}let a;s?a=n:a=this._injector.get(Ii).resolveComponentFactory(n),this.componentTypes.push(a.componentType);let c=kb(a)?void 0:this._injector.get(An),l=r||a.selector,d=a.create(o,[],l,c),h=d.location.nativeElement,f=d.injector.get(Ju,null);return f?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),di(this.components,d),f?.unregisterApplication(h)}),this._loadComponent(d),Y(q.BootstrapComponentEnd,d),d})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Y(q.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run($u.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw Y(q.ChangeDetectionEnd),new D(101,!1);let n=I(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,I(n),this.afterTick.next(),Y(q.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(lr,null,{optional:!0}));let n=0;for(;this.dirtyFlags!==0&&n++ri(n))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(n){let r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){let r=n;di(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView);try{this.tick()}catch(o){this.internalErrorHandler(o)}this.components.push(n),this._injector.get(Ab,[]).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>di(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new D(406,!1);let n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function di(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Rb(e,t){let n=w(),r=ut();if(ke(n,r,t)){let o=G(),i=wn();if(Wu(i,o,n,e,t))Mt(i)&&jy(n,i.index);else{let u=Qe(i,n);By(n[Z],u,null,i.value,e,t,null)}}return Rb}function ta(e,t,n,r){let o=w(),i=ut();if(ke(o,i,t)){let s=G(),u=wn();jw(u,o,e,t,n,r)}return ta}function bI(){return w()[_e][re]}var wd=class{destroy(t){}updateValue(t,n){}swap(t,n){let r=Math.min(t,n),o=Math.max(t,n),i=this.detach(o);if(o-r>1){let s=this.detach(r);this.attach(r,i),this.attach(o,s)}else this.attach(r,i)}move(t,n){this.attach(n,this.detach(t))}};function ql(e,t,n,r,o){return e===n&&Object.is(t,r)?1:Object.is(o(e,t),o(n,r))?-1:0}function vI(e,t,n,r){let o,i,s=0,u=e.length-1,a=void 0;if(Array.isArray(t)){I(r);let c=t.length-1;for(I(null);s<=u&&s<=c;){let l=e.at(s),d=t[s],h=ql(s,l,s,d,n);if(h!==0){h<0&&e.updateValue(s,d),s++;continue}let f=e.at(u),p=t[c],m=ql(u,f,c,p,n);if(m!==0){m<0&&e.updateValue(u,p),u--,c--;continue}let g=n(s,l),y=n(u,f),v=n(s,d);if(Object.is(v,y)){let _=n(c,p);Object.is(_,g)?(e.swap(s,u),e.updateValue(u,p),c--,u--):e.move(u,s),e.updateValue(s,d),s++;continue}if(o??=new Au,i??=Tm(e,s,u,n),xd(e,o,s,v))e.updateValue(s,d),s++,u++;else if(i.has(v))o.set(g,e.detach(s)),u--;else{let _=e.create(s,t[s]);e.attach(s,_),s++,u++}}for(;s<=c;)Im(e,o,n,s,t[s]),s++}else if(t!=null){I(r);let c=t[Symbol.iterator]();I(null);let l=c.next();for(;!l.done&&s<=u;){let d=e.at(s),h=l.value,f=ql(s,d,s,h,n);if(f!==0)f<0&&e.updateValue(s,h),s++,l=c.next();else{o??=new Au,i??=Tm(e,s,u,n);let p=n(s,h);if(xd(e,o,s,p))e.updateValue(s,h),s++,u++,l=c.next();else if(!i.has(p))e.attach(s,e.create(s,h)),s++,u++,l=c.next();else{let m=n(s,d);o.set(m,e.detach(s)),u--}}}for(;!l.done;)Im(e,o,n,e.length,l.value),l=c.next()}for(;s<=u;)e.destroy(e.detach(u--));o?.forEach(c=>{e.destroy(c)})}function xd(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Im(e,t,n,r,o){if(xd(e,t,r,n(r,o)))e.updateValue(r,o);else{let i=e.create(r,o);e.attach(r,i)}}function Tm(e,t,n,r){let o=new Set;for(let i=t;i<=n;i++)o.add(r(i,e.at(i)));return o}var Au=class{kvMap=new Map;_vMap=void 0;has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;let n=this.kvMap.get(t);return this._vMap!==void 0&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);this._vMap===void 0&&(this._vMap=new Map);let o=this._vMap;for(;o.has(r);)r=o.get(r);o.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),this._vMap!==void 0){let o=this._vMap;for(;o.has(r);)r=o.get(r),t(r,n)}}};function Cf(e,t,n,r,o,i,s,u){Nt("NgControlFlow");let a=w(),c=G(),l=He(c.consts,i);return to(a,c,e,t,n,r,o,l,256,s,u),_f}function _f(e,t,n,r,o,i,s,u){Nt("NgControlFlow");let a=w(),c=G(),l=He(c.consts,i);return to(a,c,e,t,n,r,o,l,512,s,u),_f}function wf(e,t){Nt("NgControlFlow");let n=w(),r=ut(),o=n[r]!==we?n[r]:-1,i=o!==-1?Nu(n,K+o):void 0,s=0;if(ke(n,r,e)){let u=I(null);try{if(i!==void 0&&Ky(i,s),e!==-1){let a=K+e,c=Nu(n,a),l=Md(n[S],a),d=Xy(c,l,n),h=wi(n,l,t,{dehydratedView:d});xi(c,h,s,eo(l,d))}}finally{I(u)}}else if(i!==void 0){let u=Qy(i,s);u!==void 0&&(u[re]=t)}}var Id=class{lContainer;$implicit;$index;constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-oe}};function DI(e){return e}function na(e,t){return t}var Td=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}};function ra(e,t,n,r,o,i,s,u,a,c,l,d,h){Nt("NgControlFlow");let f=w(),p=G(),m=a!==void 0,g=w(),y=u?s.bind(g[_e][re]):s,v=new Td(m,y);g[K+e]=v,to(f,p,e+1,t,n,r,o,He(p.consts,i),256),m&&to(f,p,e+2,a,c,l,d,He(p.consts,h),512)}var Sd=class extends wd{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r}get length(){return this.lContainer.length-oe}at(t){return this.getLView(t)[re].$implicit}attach(t,n){let r=n[Qn];this.needsIndexUpdate||=t!==this.length,xi(this.lContainer,n,t,eo(this.templateTNode,r)),EI(this.lContainer,t)}detach(t){return this.needsIndexUpdate||=t!==this.length-1,CI(this.lContainer,t),_I(this.lContainer,t)}create(t,n){let r=Cu(this.lContainer,this.templateTNode.tView.ssrId);return wi(this.hostLView,this.templateTNode,new Id(this.lContainer,n,t),{dehydratedView:r})}destroy(t){zu(t[S],t)}updateValue(t,n){this.getLView(t)[re].$implicit=n}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t0){let i=r[Ut];yw(i,o),cr.delete(r[zt]),o.detachedLeaveAnimationFns=void 0}}function CI(e,t){if(e.length<=oe)return;let n=oe+t,r=e[n],o=r?r[En]:void 0;o&&o.leave&&o.leave.size>0&&(o.detachedLeaveAnimationFns=[])}function _I(e,t){return gi(e,t)}function wI(e,t){return Qy(e,t)}function Md(e,t){return Qs(e,t)}function lo(e,t,n){let r=w(),o=ut();if(ke(r,o,t)){let i=G(),s=wn();Py(s,r,e,t,r[Z],n)}return lo}function Ad(e,t,n,r,o){Wu(t,e,n,o?"class":"style",r)}function dr(e,t,n,r){let o=w(),i=o[S],s=e+K,u=i.firstCreatePass?sf(s,o,2,t,tf,Xs(),n,r):i.data[s];if(Mt(u)){let a=o[ot].tracingService;if(a&&a.componentCreate){let c=i.data[u.directiveStart+u.componentOffset];return a.componentCreate(ab(c),()=>(Sm(e,t,o,u,r),dr))}}return Sm(e,t,o,u,r),dr}function Sm(e,t,n,r,o){if(nf(r,n,e,t,Ob),Gr(r)){let i=n[S];Gu(i,n,r),jd(i,r,n)}o!=null&&_i(n,r)}function fo(){let e=G(),t=ue(),n=rf(t);return e.firstCreatePass&&uf(e,n),Il(n)&&Tl(),wl(),n.classesWithoutHost!=null&&KC(n)&&Ad(e,n,w(),n.classesWithoutHost,!0),n.stylesWithoutHost!=null&&JC(n)&&Ad(e,n,w(),n.stylesWithoutHost,!1),fo}function Fb(e,t,n,r){return dr(e,t,n,r),fo(),Fb}function xf(e,t,n,r){let o=w(),i=o[S],s=e+K,u=i.firstCreatePass?_x(s,i,2,t,n,r):i.data[s];return nf(u,o,e,t,Ob),r!=null&&_i(o,u),xf}function If(){let e=ue(),t=rf(e);return Il(t)&&Tl(),wl(),If}function ia(e,t,n,r){return xf(e,t,n,r),If(),ia}var Ob=(e,t,n,r,o)=>(ii(!0),yy(t[Z],r,$g()));function Tf(e,t,n){let r=w(),o=r[S],i=e+K,s=o.firstCreatePass?sf(i,r,8,"ng-container",tf,Xs(),t,n):o.data[i];if(nf(s,r,e,"ng-container",xI),Gr(s)){let u=r[S];Gu(u,r,s),jd(u,s,r)}return n!=null&&_i(r,s),Tf}function Sf(){let e=G(),t=ue(),n=rf(t);return e.firstCreatePass&&uf(e,n),Sf}function po(e,t,n){return Tf(e,t,n),Sf(),po}var xI=(e,t,n,r,o)=>(ii(!0),z_(t[Z],""));function II(){return w()}function sa(e,t,n){let r=w(),o=ut();if(ke(r,o,t)){let i=G(),s=wn();Ly(s,r,e,t,r[Z],n)}return sa}var ci=void 0;function TI(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,"").length;return t===1&&n===0?1:5}var SI=["en",[["a","p"],["AM","PM"]],[["AM","PM"]],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],ci,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],ci,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm\u202Fa","h:mm:ss\u202Fa","h:mm:ss\u202Fa z","h:mm:ss\u202Fa zzzz"],["{1}, {0}",ci,ci,ci],[".",",",";","%","+","-","E","\xD7","\u2030","\u221E","NaN",":"],["#,##0.###","#,##0%","\xA4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",TI],Gl={};function Oe(e){let t=MI(e),n=Mm(t);if(n)return n;let r=t.split("-")[0];if(n=Mm(r),n)return n;if(r==="en")return SI;throw new D(701,!1)}function Mm(e){return e in Gl||(Gl[e]=fe.ng&&fe.ng.common&&fe.ng.common.locales&&fe.ng.common.locales[e]),Gl[e]}var ie=(function(e){return e[e.LocaleId=0]="LocaleId",e[e.DayPeriodsFormat=1]="DayPeriodsFormat",e[e.DayPeriodsStandalone=2]="DayPeriodsStandalone",e[e.DaysFormat=3]="DaysFormat",e[e.DaysStandalone=4]="DaysStandalone",e[e.MonthsFormat=5]="MonthsFormat",e[e.MonthsStandalone=6]="MonthsStandalone",e[e.Eras=7]="Eras",e[e.FirstDayOfWeek=8]="FirstDayOfWeek",e[e.WeekendRange=9]="WeekendRange",e[e.DateFormat=10]="DateFormat",e[e.TimeFormat=11]="TimeFormat",e[e.DateTimeFormat=12]="DateTimeFormat",e[e.NumberSymbols=13]="NumberSymbols",e[e.NumberFormats=14]="NumberFormats",e[e.CurrencyCode=15]="CurrencyCode",e[e.CurrencySymbol=16]="CurrencySymbol",e[e.CurrencyName=17]="CurrencyName",e[e.Currencies=18]="Currencies",e[e.Directionality=19]="Directionality",e[e.PluralCase=20]="PluralCase",e[e.ExtraData=21]="ExtraData",e})(ie||{});function MI(e){return e.toLowerCase().replace(/_/g,"-")}var Ai="en-US";var AI=Ai;function Pb(e){typeof e=="string"&&(AI=e.toLowerCase().replace(/_/g,"-"))}function Lb(e,t,n){let r=w(),o=G(),i=ue();return Bb(o,r,r[Z],i,e,t,n),Lb}function jb(e,t,n){let r=w(),o=G(),i=ue();return(i.type&3||n)&&lf(i,o,r,n,r[Z],e,t,ur(i,r,t)),jb}function Bb(e,t,n,r,o,i,s){let u=!0,a=null;if((r.type&3||s)&&(a??=ur(r,t,i),lf(r,e,t,s,n,o,i,a)&&(u=!1)),u){let c=r.outputs?.[o],l=r.hostDirectiveOutputs?.[o];if(l&&l.length)for(let d=0;d>17&32767}function BI(e){return(e&2)==2}function VI(e,t){return e&131071|t<<17}function Nd(e){return e|2}function no(e){return(e&131068)>>2}function Wl(e,t){return e&-131069|t<<2}function HI(e){return(e&1)===1}function kd(e){return e|1}function $I(e,t,n,r,o,i){let s=i?t.classBindings:t.styleBindings,u=fr(s),a=no(s);e[r]=n;let c=!1,l;if(Array.isArray(n)){let d=n;l=d[1],(l===null||Vr(d,l)>0)&&(c=!0)}else l=n;if(o)if(a!==0){let h=fr(e[u+1]);e[r+1]=lu(h,u),h!==0&&(e[h+1]=Wl(e[h+1],r)),e[u+1]=VI(e[u+1],r)}else e[r+1]=lu(u,0),u!==0&&(e[u+1]=Wl(e[u+1],r)),u=r;else e[r+1]=lu(a,0),u===0?u=r:e[a+1]=Wl(e[a+1],r),a=r;c&&(e[r+1]=Nd(e[r+1])),Am(e,l,r,!0),Am(e,l,r,!1),UI(t,l,e,r,i),s=lu(u,a),i?t.classBindings=s:t.styleBindings=s}function UI(e,t,n,r,o){let i=o?e.residualClasses:e.residualStyles;i!=null&&typeof t=="string"&&Vr(i,t)>=0&&(n[r+1]=kd(n[r+1]))}function Am(e,t,n,r){let o=e[n+1],i=t===null,s=r?fr(o):no(o),u=!1;for(;s!==0&&(u===!1||i);){let a=e[s],c=e[s+1];zI(a,t)&&(u=!0,e[s+1]=r?kd(c):Nd(c)),s=r?fr(c):no(c)}u&&(e[n+1]=r?Nd(o):kd(o))}function zI(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t=="string"?Vr(e,t)>=0:!1}var pe={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function zb(e){return e.substring(pe.key,pe.keyEnd)}function qI(e){return e.substring(pe.value,pe.valueEnd)}function GI(e){return Wb(e),qb(e,ro(e,0,pe.textEnd))}function qb(e,t){let n=pe.textEnd;return n===t?-1:(t=pe.keyEnd=ZI(e,pe.key=t,n),ro(e,t,n))}function WI(e){return Wb(e),Gb(e,ro(e,0,pe.textEnd))}function Gb(e,t){let n=pe.textEnd,r=pe.key=ro(e,t,n);return n===r?-1:(r=pe.keyEnd=YI(e,r,n),r=Nm(e,r,n,58),r=pe.value=ro(e,r,n),r=pe.valueEnd=QI(e,r,n),Nm(e,r,n,59))}function Wb(e){pe.key=0,pe.keyEnd=0,pe.value=0,pe.valueEnd=0,pe.textEnd=e.length}function ro(e,t,n){for(;t32;)t++;return t}function YI(e,t,n){let r;for(;t=65&&(r&-33)<=90||r>=48&&r<=57);)t++;return t}function Nm(e,t,n,r){return t=ro(e,t,n),t32&&(u=s),i=o,o=r,r=a&-33}return u}function km(e,t,n,r){let o=-1,i=n;for(;i=0;n=Gb(t,n))Xb(e,zb(t),qI(t))}function ki(e){Qb(o2,JI,e,!0)}function JI(e,t){for(let n=GI(t);n>=0;n=qb(t,n))Jo(e,zb(t),!0)}function Yb(e,t,n,r){let o=w(),i=G(),s=eu(2);if(i.firstUpdatePass&&Jb(i,e,s,r),t!==we&&ke(o,s,t)){let u=i.data[at()];e1(i,u,o,o[Z],e,o[s+1]=s2(t,n),r,s)}}function Qb(e,t,n,r){let o=G(),i=eu(2);o.firstUpdatePass&&Jb(o,null,i,r);let s=w();if(n!==we&&ke(s,i,n)){let u=o.data[at()];if(t1(u,r)&&!Kb(o,i)){let a=r?u.classesWithoutHost:u.stylesWithoutHost;a!==null&&(n=Vs(a,n||"")),Ad(o,u,s,n,r)}else i2(o,u,s,s[Z],s[i+1],s[i+1]=r2(e,t,n),r,i)}}function Kb(e,t){return t>=e.expandoStartIndex}function Jb(e,t,n,r){let o=e.data;if(o[n+1]===null){let i=o[at()],s=Kb(e,n);t1(i,r)&&t===null&&!s&&(t=!1),t=XI(o,i,t,r),$I(o,i,t,n,s,r)}}function XI(e,t,n,r){let o=Og(e),i=r?t.residualClasses:t.residualStyles;if(o===null)(r?t.classBindings:t.styleBindings)===0&&(n=Zl(null,e,t,n,r),n=vi(n,t.attrs,r),i=null);else{let s=t.directiveStylingLast;if(s===-1||e[s]!==o)if(n=Zl(o,e,t,n,r),i===null){let a=e2(e,t,r);a!==void 0&&Array.isArray(a)&&(a=Zl(null,e,t,a[1],r),a=vi(a,t.attrs,r),t2(e,t,r,a))}else i=n2(e,t,r)}return i!==void 0&&(r?t.residualClasses=i:t.residualStyles=i),n}function e2(e,t,n){let r=n?t.classBindings:t.styleBindings;if(no(r)!==0)return e[fr(r)]}function t2(e,t,n,r){let o=n?t.classBindings:t.styleBindings;e[fr(o)]=r}function n2(e,t,n){let r,o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0;){let a=e[o],c=Array.isArray(a),l=c?a[1]:a,d=l===null,h=n[o+1];h===we&&(h=d?Ee:void 0);let f=d?Ws(h,r):l===r?h:void 0;if(c&&!ku(f)&&(f=Ws(a,r)),ku(f)&&(u=f,s))return u;let p=e[o+1];o=s?fr(p):no(p)}if(t!==null){let a=i?t.residualClasses:t.residualStyles;a!=null&&(u=Ws(a,r))}return u}function ku(e){return e!==void 0}function s2(e,t){return e==null||e===""||(typeof t=="string"?e=e+t:typeof e=="object"&&(e=Yo(Ue(e)))),e}function t1(e,t){return(e.flags&(t?8:16))!==0}function u2(e,t=""){let n=w(),r=G(),o=e+K,i=r.firstCreatePass?gr(r,o,1,t,null):r.data[o],s=a2(r,n,i,t);n[o]=s,iu()&&Xd(r,n,s,i),rr(i,!1)}var a2=(e,t,n,r)=>(ii(!0),$_(t[Z],r));function n1(e,t,n,r=""){return ke(e,ut(),n)?t+vn(n)+r:we}function r1(e,t,n,r,o,i=""){let s=Ag(),u=ib(e,s,n,o);return eu(2),u?t+vn(n)+r+vn(o)+i:we}function o1(e){return Mf("",e),o1}function Mf(e,t,n){let r=w(),o=n1(r,e,t,n);return o!==we&&s1(r,at(),o),Mf}function i1(e,t,n,r,o){let i=w(),s=r1(i,e,t,n,r,o);return s!==we&&s1(i,at(),s),i1}function s1(e,t,n){let r=bl(t,e);U_(e[Z],r,n)}function u1(e,t,n){bf(t)&&(t=t());let r=w(),o=ut();if(ke(r,o,t)){let i=G(),s=wn();Py(s,r,e,t,r[Z],n)}return u1}function c2(e,t){let n=bf(e);return n&&e.set(t),n}function a1(e,t){let n=w(),r=G(),o=ue();return Bb(r,n,n[Z],o,e,t),a1}var c1={};function aa(e){Nt("NgLet");let t=G(),n=w(),r=e+K,o=gr(t,r,128,null,null);return rr(o,!1),ni(t,n,r,c1),aa}function ca(e){let t=G(),n=w(),r=at();return ni(t,n,r,e),e}function la(e){let t=Nl(),n=ti(t,K+e);if(n===c1)throw new D(314,!1);return n}function l2(e){return ke(w(),ut(),e)?vn(e):we}function d2(e,t,n=""){return n1(w(),e,t,n)}function f2(e,t,n,r,o=""){return r1(w(),e,t,n,r,o)}function Fm(e,t,n){let r=G();r.firstCreatePass&&l1(t,r.data,r.blueprint,st(e),n)}function l1(e,t,n,r,o){if(e=le(e),Array.isArray(e))for(let i=0;i>20;if(Gn(e)||!e.multi){let f=new ar(c,o,ee,null),p=Ql(a,t,o?l:l+h,d);p===-1?(Jl(vu(u,s),i,a),Yl(i,e,t.length),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(f),s.push(f)):(n[p]=f,s[p]=f)}else{let f=Ql(a,t,l+h,d),p=Ql(a,t,l,l+h),m=f>=0&&n[f],g=p>=0&&n[p];if(o&&!g||!o&&!m){Jl(vu(u,s),i,a);let y=g2(o?h2:p2,n.length,o,r,c,e);!o&&g&&(n[p].providerFactory=y),Yl(i,e,t.length,0),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(y),s.push(y)}else{let y=d1(n[o?p:f],c,!o&&r);Yl(i,e,f>-1?f:p,y)}!o&&r&&g&&n[p].componentProviders++}}}function Yl(e,t,n,r){let o=Gn(t),i=yg(t);if(o||i){let a=(i?le(t.useClass):t).prototype.ngOnDestroy;if(a){let c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){let l=c.indexOf(n);l===-1?c.push(n,[r,a]):c[l+1].push(r,a)}else c.push(n,a)}}}function d1(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function Ql(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>Fm(r,o?o(e):e,!1),t&&(n.viewProvidersResolver=(r,o)=>Fm(r,o?o(t):t,!0))}}function y2(e,t){let n=Zr()+e,r=w();return r[n]===we?cf(r,n,t()):wx(r,n)}function b2(e,t,n){return p1(w(),Zr(),e,t,n)}function v2(e,t,n,r){return h1(w(),Zr(),e,t,n,r)}function f1(e,t){let n=e[t];return n===we?void 0:n}function p1(e,t,n,r,o,i){let s=t+n;return ke(e,s,o)?cf(e,s+1,i?r.call(i,o):r(o)):f1(e,s+1)}function h1(e,t,n,r,o,i,s){let u=t+n;return ib(e,u,o,i)?cf(e,u+2,s?r.call(s,o,i):r(o,i)):f1(e,u+2)}function D2(e,t){let n=G(),r,o=e+K;n.firstCreatePass?(r=E2(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks??=[]).push(o,r.onDestroy)):r=n.data[o];let i=r.factory||(r.factory=mn(r.type,!0)),s,u=Me(ee);try{let a=bu(!1),c=i();return bu(a),ni(n,w(),o,c),c}finally{Me(u)}}function E2(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function C2(e,t,n){let r=e+K,o=w(),i=ti(o,r);return g1(o,r)?p1(o,Zr(),t,i.transform,n,i):i.transform(n)}function _2(e,t,n,r){let o=e+K,i=w(),s=ti(i,o);return g1(i,o)?h1(i,Zr(),t,s.transform,n,r,s):s.transform(n,r)}function g1(e,t){return e[S].data[t].pure}function w2(e,t){return Yu(e,t)}var Ru=class{ngModuleFactory;componentFactories;constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}},x2=(()=>{class e{compileModuleSync(n){return new Mu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){let r=this.compileModuleSync(n),o=ol(n),i=Cy(o.declarations).reduce((s,u)=>{let a=Tt(u);return a&&s.push(new Mn(a)),s},[]);return new Ru(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var m1=(()=>{class e{applicationErrorHandler=b(Gt);appRef=b(co);taskService=b(or);ngZone=b(Ce);zonelessEnabled=b(ui);tracing=b(ft,{optional:!0});zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new ne;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Wo):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(b(Bl,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let n=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(n);return}this.switchToMicrotaskScheduler(),this.taskService.remove(n)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let n=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(n)})})}notify(n){if(!this.zonelessEnabled&&n===5)return;switch(n){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2;break}case 12:{this.appRef.dirtyFlags|=16;break}case 13:{this.appRef.dirtyFlags|=2;break}case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let r=this.useMicrotaskScheduler?Gg:Pl;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>r(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>r(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(Wo+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let n=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){this.applicationErrorHandler(r)}finally{this.taskService.remove(n),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let n=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function y1(){return[{provide:wt,useExisting:m1},{provide:Ce,useClass:Zo},{provide:ui,useValue:!0}]}function I2(){return typeof $localize<"u"&&$localize.locale||Ai}var go=new x("",{factory:()=>b(go,{optional:!0,skipSelf:!0})||I2()});var da=class{destroyed=!1;listeners=null;errorHandler=b(We,{optional:!0});destroyRef=b($e);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(t){if(this.destroyed)throw new D(953,!1);return(this.listeners??=[]).push(t),{unsubscribe:()=>{let n=this.listeners?.indexOf(t);n!==void 0&&n!==-1&&this.listeners?.splice(n,1)}}}emit(t){if(this.destroyed){console.warn(xt(953,!1));return}if(this.listeners===null)return;let n=I(null);try{for(let r of this.listeners)try{r(t)}catch(o){this.errorHandler?.handleError(o)}}finally{I(n)}}};function xe(e){return eg(e)}function Re(e,t){return Fo(e,t?.equal)}var T2=e=>e;function Af(e,t){if(typeof e=="function"){let n=Bc(e,T2,t?.equal);return b1(n,t?.debugName)}else{let n=Bc(e.source,e.computation,e.equal);return b1(n,e.debugName)}}function b1(e,t){let n=e[se],r=e;return r.set=o=>J0(n,o),r.update=o=>X0(n,o),r.asReadonly=si.bind(e),r}function S2(e){let t=e.request,n=e.params??t??(()=>null);return new fa(n,A2(e),e.defaultValue,e.equal?M2(e.equal):void 0,e.debugName,e.injector??b(me))}var Nf=class{value;isLoading;constructor(t,n){this.value=t,this.value.set=this.set.bind(this),this.value.update=this.update.bind(this),this.value.asReadonly=si,this.isLoading=Re(()=>this.status()==="loading"||this.status()==="reloading",void 0)}isError=Re(()=>this.status()==="error");update(t){this.set(t(xe(this.value)))}isValueDefined=Re(()=>this.isError()?!1:this.value()!==void 0);_snapshot;get snapshot(){return this._snapshot??=Re(()=>{let t=this.status();return t==="error"?{status:"error",error:this.error()}:{status:t,value:this.value()}})}hasValue(){return this.isValueDefined()}asReadonly(){return this}},fa=class extends Nf{loaderFn;equal;debugName;pendingTasks;state;extRequest;effectRef;pendingController;resolvePendingTask=void 0;destroyed=!1;unregisterOnDestroy;status;error;constructor(t,n,r,o,i,s,u){super(Re(()=>{let a=this.state().stream?.();if(!a||this.state().status==="loading"&&this.error())return r;if(!kf(a))throw new pa(this.error());return a.value},{equal:o}),i),this.loaderFn=n,this.equal=o,this.debugName=i,this.extRequest=Af({source:t,computation:a=>({request:a,reload:0})}),this.state=Af({source:this.extRequest,computation:(a,c)=>{if(c){let l=a.request===void 0?"idle":"loading";return{extRequest:a,status:l,previousStatus:v1(c.value),stream:c.value.extRequest.request===a.request?c.value.stream:void 0}}else{let l=u?.(a.request);u=void 0;let d=a.request===void 0?"idle":l?"resolved":"loading";return{extRequest:a,status:d,previousStatus:"idle",stream:l}}}}),this.effectRef=ai(this.loadEffect.bind(this),{injector:s,manualCleanup:!0}),this.pendingTasks=s.get(ir),this.unregisterOnDestroy=s.get($e).onDestroy(()=>this.destroy()),this.status=Re(()=>v1(this.state()),void 0),this.error=Re(()=>{let a=this.state().stream?.();return a&&!kf(a)?a.error:void 0},void 0)}set(t){if(this.destroyed)return;let n=xe(this.error),r=xe(this.state);if(!n){let o=xe(this.value);if(r.status==="local"&&(this.equal?this.equal(o,t):o===t))return}this.state.set({extRequest:r.extRequest,status:"local",previousStatus:"local",stream:xn({value:t},void 0)}),this.abortInProgressLoad()}reload(){let{status:t}=xe(this.state);return t==="idle"||t==="loading"?!1:(this.extRequest.update(({request:n,reload:r})=>({request:n,reload:r+1})),!0)}destroy(){this.destroyed=!0,this.unregisterOnDestroy(),this.effectRef.destroy(),this.abortInProgressLoad(),this.state.set({extRequest:{request:void 0,reload:0},status:"idle",previousStatus:"idle",stream:void 0})}loadEffect(){return vt(this,null,function*(){let t=this.extRequest(),{status:n,previousStatus:r}=xe(this.state);if(t.request===void 0)return;if(n!=="loading")return;this.abortInProgressLoad();let o=this.resolvePendingTask=this.pendingTasks.add(),{signal:i}=this.pendingController=new AbortController;try{let s=yield xe(()=>this.loaderFn({params:t.request,abortSignal:i,previous:{status:r}}));if(i.aborted||xe(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"resolved",stream:s})}catch(s){if(i.aborted||xe(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"error",stream:xn({error:Ff(s)},void 0)})}finally{o?.(),o=void 0}})}abortInProgressLoad(){xe(()=>this.pendingController?.abort()),this.pendingController=void 0,this.resolvePendingTask?.(),this.resolvePendingTask=void 0}};function M2(e){return(t,n)=>t===void 0||n===void 0?t===n:e(t,n)}function A2(e){return N2(e)?e.stream:t=>vt(null,null,function*(){try{return xn({value:yield e.loader(t)},void 0)}catch(n){return xn({error:Ff(n)},void 0)}})}function N2(e){return!!e.stream}function v1(e){switch(e.status){case"loading":return e.extRequest.reload===0?"loading":"reloading";case"resolved":return kf(e.stream())?"resolved":"error";default:return e.status}}function kf(e){return e.error===void 0}function Ff(e){return k2(e)?e:new Rf(e)}function k2(e){return e instanceof Error||typeof e=="object"&&typeof e.name=="string"&&typeof e.message=="string"}var pa=class extends Error{constructor(t){super(t.message,{cause:t})}},Rf=class extends Error{constructor(t){super(String(t),{cause:t})}};var M1=Symbol("InputSignalNode#UNSET"),V2=P(M({},Oo),{transformFn:void 0,applyValueToInputSignal(e,t){jn(e,t)}});function A1(e,t){let n=Object.create(V2);n.value=e,n.transformFn=t?.transform;function r(){if(cn(n),n.value===M1){let o=null;throw new D(-950,o)}return n.value}return r[se]=n,r}var D1=class{attributeName;constructor(t){this.attributeName=t}__NG_ELEMENT_ID__=()=>Od(this.attributeName);toString(){return`HostAttributeToken ${this.attributeName}`}},F7=(()=>{let e=new x("");return e.__NG_ELEMENT_ID__=t=>{let n=ue();if(n===null)throw new D(-204,!1);if(n.type&2)return n.value;if(t&8)return null;throw new D(-204,!1)},e})();function O7(e){return new da}function E1(e,t){return A1(e,t)}function H2(e){return A1(M1,e)}var Pe=(E1.required=H2,E1);function C1(e,t){return hf(t)}function $2(e,t){return gf(t)}var P7=(C1.required=$2,C1);function L7(e,t){return yb(t)}function _1(e,t){return hf(t)}function U2(e,t){return gf(t)}var j7=(_1.required=U2,_1);var Pf=new x(""),z2=new x("");function Ri(e){return!e.moduleRef}function q2(e){let t=Ri(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Ce);return n.run(()=>{Ri(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Gt),o;if(n.runOutsideAngular(()=>{o=n.onError.subscribe({next:r})}),Ri(e)){let i=()=>t.destroy(),s=e.platformInjector.get(Pf);s.add(i),t.onDestroy(()=>{o.unsubscribe(),s.delete(i)})}else{let i=()=>e.moduleRef.destroy(),s=e.platformInjector.get(Pf);s.add(i),e.moduleRef.onDestroy(()=>{di(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i)})}return W2(r,n,()=>{let i=t.get(or),s=i.add(),u=t.get(Ef);return u.runInitializers(),u.donePromise.then(()=>{let a=t.get(go,Ai);if(Pb(a||Ai),!t.get(z2,!0))return Ri(e)?t.get(co):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Ri(e)){let l=t.get(co);return e.rootComponent!==void 0&&l.bootstrap(e.rootComponent),l}else return G2?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>{i.remove(s)})})})}var G2;function W2(e,t,n){try{let r=n();return Mi(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e(r)),r}}var ha=null;function Z2(e=[],t){return me.create({name:t,providers:[{provide:Xo,useValue:"platform"},{provide:Pf,useValue:new Set([()=>ha=null])},...e]})}function Y2(e=[]){if(ha)return ha;let t=Z2(e);return ha=t,Nb(),Q2(t),t}function Q2(e){let t=e.get(Pu,null);Ur(e,()=>{t?.forEach(n=>n())})}var K2=1e4;var B7=K2-1e3;var qf=(()=>{class e{static __NG_ELEMENT_ID__=J2}return e})();function J2(e){return X2(ue(),w(),(e&16)===16)}function X2(e,t,n){if(Mt(e)&&!n){let r=Ve(e.index,t);return new Tn(r,r)}else if(e.type&175){let r=t[_e];return new Tn(r,t)}return null}var Lf=class{supports(t){return af(t)}create(t){return new jf(t)}},eT=(e,t)=>t,jf=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(t){this._trackByFn=t||eT}forEachItem(t){let n;for(n=this._itHead;n!==null;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){let s=!r||n&&n.currentIndex{s=this._trackByFn(o,u),n===null||!Object.is(n.trackById,s)?(n=this._mismatch(n,u,s,o),r=!0):(r&&(n=this._verifyReinsertion(n,u,s,o)),Object.is(n.item,u)||this._addIdentityChange(n,u)),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;t!==null;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return t===null?i=this._itTail:(i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):(t=this._linkedRecords===null?null:this._linkedRecords.get(r,o),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new Bf(n,r),i,o)),t}_verifyReinsertion(t,n,r,o){let i=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return i!==null?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;t!==null;){let n=t._next;this._addToRemovals(this._unlink(t)),t=n}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(t);let o=t._prevRemoved,i=t._nextRemoved;return o===null?this._removalsHead=i:o._nextRemoved=i,i===null?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail===null?this._additionsTail=this._additionsHead=t:this._additionsTail=this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){let o=n===null?this._itHead:n._next;return t._next=o,t._prev=n,o===null?this._itTail=t:o._prev=t,n===null?this._itHead=t:n._next=t,this._linkedRecords===null&&(this._linkedRecords=new ga),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){this._linkedRecords!==null&&this._linkedRecords.remove(t);let n=t._prev,r=t._next;return n===null?this._itHead=r:n._next=r,r===null?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail===null?this._movesTail=this._movesHead=t:this._movesTail=this._movesTail._nextMoved=t),t}_addToRemovals(t){return this._unlinkedRecords===null&&(this._unlinkedRecords=new ga),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=t:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t,t}},Bf=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(t,n){this.item=t,this.trackById=n}},Vf=class{_head=null;_tail=null;add(t){this._head===null?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;r!==null;r=r._nextDup)if((n===null||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){let n=t._prevDup,r=t._nextDup;return n===null?this._head=r:n._nextDup=r,r===null?this._tail=n:r._prevDup=n,this._head===null}},ga=class{map=new Map;put(t){let n=t.trackById,r=this.map.get(n);r||(r=new Vf,this.map.set(n,r)),r.add(t)}get(t,n){let r=t,o=this.map.get(r);return o?o.get(t,n):null}remove(t){let n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function w1(e,t,n){let r=e.previousIndex;if(r===null)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{let i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;r!==null;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){let r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){let o=this._records.get(t);this._maybeAddToChanges(o,n);let i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}let r=new Uf(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;t!==null;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;t!=null;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){this._additionsHead===null?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){this._changesHead===null?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}},Uf=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(t){this.key=t}};function x1(){return new Gf([new Lf])}var Gf=(()=>{class e{factories;static \u0275prov=T({token:e,providedIn:"root",factory:x1});constructor(n){this.factories=n}static create(n,r){if(r!=null){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||x1())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r!=null)return r;throw new D(901,!1)}}return e})();function I1(){return new ma([new Hf])}var ma=(()=>{class e{static \u0275prov=T({token:e,providedIn:"root",factory:I1});factories;constructor(n){this.factories=n}static create(n,r){if(r){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||I1())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r)return r;throw new D(901,!1)}}return e})();var N1=(()=>{class e{constructor(n){}static \u0275fac=function(r){return new(r||e)(A(co))};static \u0275mod=Kt({type:e});static \u0275inj=It({})}return e})();function k1(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:o}=e;Y(q.BootstrapApplicationStart);try{let i=o?.injector??Y2(r),s=[y1(),Zg,...n||[]],u=new bi({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1});return q2({r3Injector:u.injector,platformInjector:i,rootComponent:t})}catch(i){return Promise.reject(i)}finally{Y(q.BootstrapApplicationEnd)}}function tT(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function nT(e,t=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):t}var Of=Symbol("NOT_SET"),R1=new Set,rT=P(M({},Oo),{kind:"afterRenderEffectPhase",consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Of,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(cn(c),c.value),c.signal[se]=c,c.registerCleanupFn=l=>(c.cleanup??=new Set).add(l),this.nodes[u]=c,this.hooks[u]=l=>c.phaseFn(l)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let t of this.onDestroyFns)t();super.destroy();for(let t of this.nodes)if(t)try{for(let n of t.cleanup??R1)n()}finally{dn(t)}}};function V7(e,t){let n=t?.injector??b(me),r=n.get(wt),o=n.get(Uu),i=n.get(ft,null,{optional:!0});o.impl??=n.get(Kd);let s=e;typeof s=="function"&&(s={mixedReadWrite:e});let u=n.get(Yr,null,{optional:!0}),a=new zf(o.impl,[s.earlyRead,s.write,s.mixedReadWrite,s.read],u?.view,r,n,i?.snapshot(null));return o.impl.register(a),a}function H7(e,t){let n=Tt(e),r=t.elementInjector||$r();return new Mn(n).create(r,t.projectableNodes,t.hostElement,t.environmentInjector,t.directives,t.bindings)}function $7(e){let t=Tt(e);if(!t)return null;let n=new Mn(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}var bo={};xr(bo,{appendToAll:()=>sT,createThemeStyles:()=>uT,merge:()=>iT,structuralStyles:()=>aT,toProp:()=>qe});var oT=` + &:not([disabled]) { + cursor: pointer; + opacity: var(--opacity, 0); + transition: opacity var(--speed, 0.2s) cubic-bezier(0, 0, 0.3, 1); + + &:hover, + &:focus { + opacity: 1; + } + }`,F1=` + ${new Array(21).fill(0).map((e,t)=>`.behavior-ho-${t*5} { + --opacity: ${t/20}; + ${oT} + }`).join(` +`)} + + .behavior-o-s { + overflow: scroll; + } + + .behavior-o-a { + overflow: auto; + } + + .behavior-o-h { + overflow: hidden; + } + + .behavior-sw-n { + scrollbar-width: none; + } +`;var O1=` + ${new Array(25).fill(0).map((e,t)=>` + .border-bw-${t} { border-width: ${t}px; } + .border-btw-${t} { border-top-width: ${t}px; } + .border-bbw-${t} { border-bottom-width: ${t}px; } + .border-blw-${t} { border-left-width: ${t}px; } + .border-brw-${t} { border-right-width: ${t}px; } + + .border-ow-${t} { outline-width: ${t}px; } + .border-br-${t} { border-radius: ${t*4}px; overflow: hidden;}`).join(` +`)} + + .border-br-50pc { + border-radius: 50%; + } + + .border-bs-s { + border-style: solid; + } +`;var Wf=[0,5,10,15,20,25,30,35,40,50,60,70,80,90,95,98,99,100];function iT(...e){let t={};for(let n of e)for(let[r,o]of Object.entries(n)){let i=r.split("-").with(-1,"").join("-"),s=Object.keys(t).filter(u=>u.startsWith(i));for(let u of s)delete t[u];t[r]=o}return t}function sT(e,t,...n){let r=structuredClone(e);for(let o of n)for(let i of Object.keys(o)){let s=i.split("-").with(-1,"").join("-");for(let[u,a]of Object.entries(r)){if(t.includes(u))continue;let c=!1;for(let l=0;l` + ${e.map(t=>{let n=Zf(t);return`.color-bc-${t} { border-color: light-dark(var(${qe(t)}), var(${qe(n)})); }`}).join(` +`)} + + ${e.map(t=>{let n=Zf(t),r=[`.color-bgc-${t} { background-color: light-dark(var(${qe(t)}), var(${qe(n)})); }`,`.color-bbgc-${t}::backdrop { background-color: light-dark(var(${qe(t)}), var(${qe(n)})); }`];for(let o=.1;o<1;o+=.1)r.push(`.color-bbgc-${t}_${(o*100).toFixed(0)}::backdrop { + background-color: light-dark(oklch(from var(${qe(t)}) l c h / calc(alpha * ${o.toFixed(1)})), oklch(from var(${qe(n)}) l c h / calc(alpha * ${o.toFixed(1)})) ); + } + `);return r.join(` +`)}).join(` +`)} + + ${e.map(t=>{let n=Zf(t);return`.color-c-${t} { color: light-dark(var(${qe(t)}), var(${qe(n)})); }`}).join(` +`)} + `,Zf=e=>{let t=e.match(/^([a-z]+)(\d+)$/);if(!t)return e;let[,n,r]=t,i=100-parseInt(r,10),s=Wf.reduce((u,a)=>Math.abs(a-i)Wf.map(t=>`${e}${t}`),P1=[mo(yo("p")),mo(yo("s")),mo(yo("t")),mo(yo("n")),mo(yo("nv")),mo(yo("e")),` + .color-bgc-transparent { + background-color: transparent; + } + + :host { + color-scheme: var(--color-scheme); + } + `];var L1=` + .g-icon { + font-family: "Material Symbols Outlined", "Google Symbols"; + font-weight: normal; + font-style: normal; + font-display: optional; + font-size: 20px; + width: 1em; + height: 1em; + user-select: none; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: "liga"; + -webkit-font-smoothing: antialiased; + overflow: hidden; + + font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 48, + "ROND" 100; + + &.filled { + font-variation-settings: "FILL" 1, "wght" 300, "GRAD" 0, "opsz" 48, + "ROND" 100; + } + + &.filled-heavy { + font-variation-settings: "FILL" 1, "wght" 700, "GRAD" 0, "opsz" 48, + "ROND" 100; + } + } +`;var j1=` + :host { + ${new Array(16).fill(0).map((e,t)=>`--g-${t+1}: ${(t+1)*4}px;`).join(` +`)} + } + + ${new Array(49).fill(0).map((e,t)=>{let n=t-24,r=n<0?`n${Math.abs(n)}`:n.toString();return` + .layout-p-${r} { --padding: ${n*4}px; padding: var(--padding); } + .layout-pt-${r} { padding-top: ${n*4}px; } + .layout-pr-${r} { padding-right: ${n*4}px; } + .layout-pb-${r} { padding-bottom: ${n*4}px; } + .layout-pl-${r} { padding-left: ${n*4}px; } + + .layout-m-${r} { --margin: ${n*4}px; margin: var(--margin); } + .layout-mt-${r} { margin-top: ${n*4}px; } + .layout-mr-${r} { margin-right: ${n*4}px; } + .layout-mb-${r} { margin-bottom: ${n*4}px; } + .layout-ml-${r} { margin-left: ${n*4}px; } + + .layout-t-${r} { top: ${n*4}px; } + .layout-r-${r} { right: ${n*4}px; } + .layout-b-${r} { bottom: ${n*4}px; } + .layout-l-${r} { left: ${n*4}px; }`}).join(` +`)} + + ${new Array(25).fill(0).map((e,t)=>` + .layout-g-${t} { gap: ${t*4}px; }`).join(` +`)} + + ${new Array(8).fill(0).map((e,t)=>` + .layout-grd-col${t+1} { grid-template-columns: ${"1fr ".repeat(t+1).trim()}; }`).join(` +`)} + + .layout-pos-a { + position: absolute; + } + + .layout-pos-rel { + position: relative; + } + + .layout-dsp-none { + display: none; + } + + .layout-dsp-block { + display: block; + } + + .layout-dsp-grid { + display: grid; + } + + .layout-dsp-iflex { + display: inline-flex; + } + + .layout-dsp-flexvert { + display: flex; + flex-direction: column; + } + + .layout-dsp-flexhor { + display: flex; + flex-direction: row; + } + + .layout-fw-w { + flex-wrap: wrap; + } + + .layout-al-fs { + align-items: start; + } + + .layout-al-fe { + align-items: end; + } + + .layout-al-c { + align-items: center; + } + + .layout-as-n { + align-self: normal; + } + + .layout-js-c { + justify-self: center; + } + + .layout-sp-c { + justify-content: center; + } + + .layout-sp-ev { + justify-content: space-evenly; + } + + .layout-sp-bt { + justify-content: space-between; + } + + .layout-sp-s { + justify-content: start; + } + + .layout-sp-e { + justify-content: end; + } + + .layout-ji-e { + justify-items: end; + } + + .layout-r-none { + resize: none; + } + + .layout-fs-c { + field-sizing: content; + } + + .layout-fs-n { + field-sizing: none; + } + + .layout-flx-0 { + flex: 0 0 auto; + } + + .layout-flx-1 { + flex: 1 0 auto; + } + + .layout-c-s { + contain: strict; + } + + /** Widths **/ + + ${new Array(10).fill(0).map((e,t)=>{let n=(t+1)*10;return`.layout-w-${n} { width: ${n}%; max-width: ${n}%; }`}).join(` +`)} + + ${new Array(16).fill(0).map((e,t)=>{let n=t*4;return`.layout-wp-${t} { width: ${n}px; }`}).join(` +`)} + + /** Heights **/ + + ${new Array(10).fill(0).map((e,t)=>{let n=(t+1)*10;return`.layout-h-${n} { height: ${n}%; }`}).join(` +`)} + + ${new Array(16).fill(0).map((e,t)=>{let n=t*4;return`.layout-hp-${t} { height: ${n}px; }`}).join(` +`)} + + .layout-el-cv { + & img, + & video { + width: 100%; + height: 100%; + object-fit: cover; + margin: 0; + } + } + + .layout-ar-sq { + aspect-ratio: 1 / 1; + } + + .layout-ex-fb { + margin: calc(var(--padding) * -1) 0 0 calc(var(--padding) * -1); + width: calc(100% + var(--padding) * 2); + height: calc(100% + var(--padding) * 2); + } +`;var B1=` + ${new Array(21).fill(0).map((e,t)=>`.opacity-el-${t*5} { opacity: ${t/20}; }`).join(` +`)} +`;var V1=` + :host { + --default-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + --default-font-family-mono: "Courier New", Courier, monospace; + } + + .typography-f-s { + font-family: var(--font-family, var(--default-font-family)); + font-optical-sizing: auto; + font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; + } + + .typography-f-sf { + font-family: var(--font-family-flex, var(--default-font-family)); + font-optical-sizing: auto; + } + + .typography-f-c { + font-family: var(--font-family-mono, var(--default-font-family)); + font-optical-sizing: auto; + font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; + } + + .typography-v-r { + font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0, "ROND" 100; + } + + .typography-ta-s { + text-align: start; + } + + .typography-ta-c { + text-align: center; + } + + .typography-fs-n { + font-style: normal; + } + + .typography-fs-i { + font-style: italic; + } + + .typography-sz-ls { + font-size: 11px; + line-height: 16px; + } + + .typography-sz-lm { + font-size: 12px; + line-height: 16px; + } + + .typography-sz-ll { + font-size: 14px; + line-height: 20px; + } + + .typography-sz-bs { + font-size: 12px; + line-height: 16px; + } + + .typography-sz-bm { + font-size: 14px; + line-height: 20px; + } + + .typography-sz-bl { + font-size: 16px; + line-height: 24px; + } + + .typography-sz-ts { + font-size: 14px; + line-height: 20px; + } + + .typography-sz-tm { + font-size: 16px; + line-height: 24px; + } + + .typography-sz-tl { + font-size: 22px; + line-height: 28px; + } + + .typography-sz-hs { + font-size: 24px; + line-height: 32px; + } + + .typography-sz-hm { + font-size: 28px; + line-height: 36px; + } + + .typography-sz-hl { + font-size: 32px; + line-height: 40px; + } + + .typography-sz-ds { + font-size: 36px; + line-height: 44px; + } + + .typography-sz-dm { + font-size: 45px; + line-height: 52px; + } + + .typography-sz-dl { + font-size: 57px; + line-height: 64px; + } + + .typography-ws-p { + white-space: pre-line; + } + + .typography-ws-nw { + white-space: nowrap; + } + + .typography-td-none { + text-decoration: none; + } + + /** Weights **/ + + ${new Array(9).fill(0).map((e,t)=>{let n=(t+1)*100;return`.typography-w-${n} { font-weight: ${n}; }`}).join(` +`)} +`;var aT=[F1,O1,P1,L1,j1,B1,V1].flat(1/0).join(` +`);var gp={};xr(gp,{isComponentArrayReference:()=>Qf,isObject:()=>$,isPath:()=>Yf,isResolvedAudioPlayer:()=>Kf,isResolvedButton:()=>Jf,isResolvedCard:()=>Xf,isResolvedCheckbox:()=>ep,isResolvedColumn:()=>tp,isResolvedDateTimeInput:()=>np,isResolvedDivider:()=>rp,isResolvedIcon:()=>ip,isResolvedImage:()=>op,isResolvedList:()=>sp,isResolvedModal:()=>up,isResolvedMultipleChoice:()=>ap,isResolvedRow:()=>cp,isResolvedSlider:()=>lp,isResolvedTabs:()=>dp,isResolvedText:()=>fp,isResolvedTextField:()=>pp,isResolvedVideo:()=>hp,isValueMap:()=>lT});function lT(e){return $(e)&&"key"in e}function Yf(e,t){return e==="path"&&typeof t=="string"}function $(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Qf(e){return $(e)?"explicitList"in e||"template"in e:!1}function Xt(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="string"||"literalString"in e)}function dT(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="number"||"literalNumber"in e)}function fT(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="boolean"||"literalBoolean"in e)}function Jt(e){return!(!$(e)||!("id"in e&&"type"in e&&"properties"in e))}function Kf(e){return $(e)&&"url"in e&&Xt(e.url)}function Jf(e){return $(e)&&"child"in e&&Jt(e.child)&&"action"in e}function Xf(e){return $(e)?"child"in e?Jt(e.child):"children"in e?Array.isArray(e.children)&&e.children.every(Jt):!1:!1}function ep(e){return $(e)&&"label"in e&&Xt(e.label)&&"value"in e&&fT(e.value)}function tp(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Jt)}function np(e){return $(e)&&"value"in e&&Xt(e.value)}function rp(e){return $(e)}function op(e){return $(e)&&"url"in e&&Xt(e.url)}function ip(e){return $(e)&&"name"in e&&Xt(e.name)}function sp(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Jt)}function up(e){return $(e)&&"entryPointChild"in e&&Jt(e.entryPointChild)&&"contentChild"in e&&Jt(e.contentChild)}function ap(e){return $(e)&&"selections"in e}function cp(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Jt)}function lp(e){return $(e)&&"value"in e&&dT(e.value)}function pT(e){return $(e)&&"title"in e&&Xt(e.title)&&"child"in e&&Jt(e.child)}function dp(e){return $(e)&&"tabItems"in e&&Array.isArray(e.tabItems)&&e.tabItems.every(pT)}function fp(e){return $(e)&&"text"in e&&Xt(e.text)}function pp(e){return $(e)&&"label"in e&&Xt(e.label)}function hp(e){return $(e)&&"url"in e&&Xt(e.url)}var ya=(()=>{class e{static{this.DEFAULT_SURFACE_ID="@default"}constructor(n={mapCtor:Map,arrayCtor:Array,setCtor:Set,objCtor:Object}){this.opts=n,this.mapCtor=Map,this.arrayCtor=Array,this.setCtor=Set,this.objCtor=Object,this.arrayCtor=n.arrayCtor,this.mapCtor=n.mapCtor,this.setCtor=n.setCtor,this.objCtor=n.objCtor,this.surfaces=new n.mapCtor}getSurfaces(){return this.surfaces}clearSurfaces(){this.surfaces.clear()}processMessages(n){for(let r of n)r.beginRendering&&this.handleBeginRendering(r.beginRendering,r.beginRendering.surfaceId),r.surfaceUpdate&&this.handleSurfaceUpdate(r.surfaceUpdate,r.surfaceUpdate.surfaceId),r.dataModelUpdate&&this.handleDataModelUpdate(r.dataModelUpdate,r.dataModelUpdate.surfaceId),r.deleteSurface&&this.handleDeleteSurface(r.deleteSurface)}getData(n,r,o=e.DEFAULT_SURFACE_ID){let i=this.getOrCreateSurface(o);if(!i)return null;let s;return r==="."||r===""?s=n.dataContextPath??"/":s=this.resolvePath(r,n.dataContextPath),this.getDataByPath(i.dataModel,s)}setData(n,r,o,i=e.DEFAULT_SURFACE_ID){if(!n){console.warn("No component node set");return}let s=this.getOrCreateSurface(i);if(!s)return;let u;r==="."||r===""?u=n.dataContextPath??"/":u=this.resolvePath(r,n.dataContextPath),this.setDataByPath(s.dataModel,u,o)}resolvePath(n,r){return n.startsWith("/")?n:r&&r!=="/"?r.endsWith("/")?`${r}${n}`:`${r}/${n}`:`/${n}`}parseIfJsonString(n){if(typeof n!="string")return n;let r=n.trim();if(r.startsWith("{")&&r.endsWith("}")||r.startsWith("[")&&r.endsWith("]"))try{return JSON.parse(n)}catch(o){return console.warn(`Failed to parse potential JSON string: "${n.substring(0,50)}..."`,o),n}return n}convertKeyValueArrayToMap(n){let r=new this.mapCtor;for(let o of n){if(!$(o)||!("key"in o))continue;let i=o.key,s=this.findValueKey(o);if(!s)continue;let u=o[s];s==="valueMap"&&Array.isArray(u)?u=this.convertKeyValueArrayToMap(u):typeof u=="string"&&(u=this.parseIfJsonString(u)),this.setDataByPath(r,i,u)}return r}setDataByPath(n,r,o){if(Array.isArray(o)&&(o.length===0||$(o[0])&&"key"in o[0]))if(o.length===1&&$(o[0])&&o[0].key==="."){let c=o[0],l=this.findValueKey(c);l?(o=c[l],l==="valueMap"&&Array.isArray(o)?o=this.convertKeyValueArrayToMap(o):typeof o=="string"&&(o=this.parseIfJsonString(o))):o=this.convertKeyValueArrayToMap(o)}else o=this.convertKeyValueArrayToMap(o);let i=this.normalizePath(r).split("/").filter(c=>c);if(i.length===0){if(o instanceof Map||$(o)){!(o instanceof Map)&&$(o)&&(o=new this.mapCtor(Object.entries(o))),n.clear();for(let[c,l]of o.entries())n.set(c,l)}else console.error("Cannot set root of DataModel to a non-Map value.");return}let s=n;for(let c=0;ci.length>0).join("/")}getDataByPath(n,r){let o=this.normalizePath(r).split("/").filter(s=>s),i=n;for(let s of o){if(i==null)return null;if(i instanceof Map)i=i.get(s);else if(Array.isArray(i)&&/^\d+$/.test(s))i=i[parseInt(s,10)];else if($(i))i=i[s];else return null}return i}getOrCreateSurface(n){let r=this.surfaces.get(n);return r||(r=new this.objCtor({rootComponentId:null,componentTree:null,dataModel:new this.mapCtor,components:new this.mapCtor,styles:new this.objCtor}),this.surfaces.set(n,r)),r}handleBeginRendering(n,r){let o=this.getOrCreateSurface(r);o.rootComponentId=n.root,o.styles=n.styles??{},this.rebuildComponentTree(o)}handleSurfaceUpdate(n,r){let o=this.getOrCreateSurface(r);for(let i of n.components)o.components.set(i.id,i);this.rebuildComponentTree(o)}handleDataModelUpdate(n,r){let o=this.getOrCreateSurface(r),i=n.path??"/";this.setDataByPath(o.dataModel,i,n.contents),this.rebuildComponentTree(o)}handleDeleteSurface(n){this.surfaces.delete(n.surfaceId)}rebuildComponentTree(n){if(!n.rootComponentId){n.componentTree=null;return}let r=new this.setCtor;n.componentTree=this.buildNodeRecursive(n.rootComponentId,n,r,"/","")}findValueKey(n){return Object.keys(n).find(r=>r.startsWith("value"))}buildNodeRecursive(n,r,o,i,s=""){let u=`${n}${s}`,{components:a}=r;if(!a.has(n))return null;if(o.has(u))throw new Error(`Circular dependency for component "${u}".`);o.add(u);let c=a.get(n),l=c.component??{},d=Object.keys(l)[0],h=l[d],f=new this.objCtor;if($(h))for(let[m,g]of Object.entries(h))f[m]=this.resolvePropertyValue(g,r,o,i,s);o.delete(u);let p={id:u,dataContextPath:i,weight:c.weight??"initial"};switch(d){case"Text":if(!fp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Text",properties:f}));case"Image":if(!op(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Image",properties:f}));case"Icon":if(!ip(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Icon",properties:f}));case"Video":if(!hp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Video",properties:f}));case"AudioPlayer":if(!Kf(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"AudioPlayer",properties:f}));case"Row":if(!cp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Row",properties:f}));case"Column":if(!tp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Column",properties:f}));case"List":if(!sp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"List",properties:f}));case"Card":if(!Xf(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Card",properties:f}));case"Tabs":if(!dp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Tabs",properties:f}));case"Divider":if(!rp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Divider",properties:f}));case"Modal":if(!up(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Modal",properties:f}));case"Button":if(!Jf(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Button",properties:f}));case"CheckBox":if(!ep(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"CheckBox",properties:f}));case"TextField":if(!pp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"TextField",properties:f}));case"DateTimeInput":if(!np(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"DateTimeInput",properties:f}));case"MultipleChoice":if(!ap(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"MultipleChoice",properties:f}));case"Slider":if(!lp(f))throw new Error(`Invalid data; expected ${d}`);return new this.objCtor(P(M({},p),{type:"Slider",properties:f}));default:return new this.objCtor(P(M({},p),{type:d,properties:f}))}}resolvePropertyValue(n,r,o,i,s=""){if(typeof n=="string"&&r.components.has(n))return this.buildNodeRecursive(n,r,o,i,s);if(Qf(n)){if(n.explicitList)return n.explicitList.map(u=>this.buildNodeRecursive(u,r,o,i,s));if(n.template){let u=this.resolvePath(n.template.dataBinding,i),a=this.getDataByPath(r.dataModel,u),c=n.template;if(Array.isArray(a))return a.map((d,h)=>{let m=`:${[...i.split("/").filter(y=>/^\d+$/.test(y)),h].join(":")}`,g=`${u}/${h}`;return this.buildNodeRecursive(c.componentId,r,o,g,m)});let l=this.mapCtor;return a instanceof l?Array.from(a.keys(),d=>{let h=`:${d}`,f=`${u}/${d}`;return this.buildNodeRecursive(c.componentId,r,o,f,h)}):new this.arrayCtor}}if(Array.isArray(n))return n.map(u=>this.resolvePropertyValue(u,r,o,i,s));if($(n)){let u=new this.objCtor;for(let[a,c]of Object.entries(n)){let l=c;if(Yf(a,c)&&i!=="/"){l=c.replace(/^\.?\/item/,"").replace(/^\.?\/text/,"").replace(/^\.?\/label/,"").replace(/^\.?\//,""),u[a]=l;continue}u[a]=this.resolvePropertyValue(l,r,o,i,s)}return u}return n}}return e})();var hT=Object.defineProperty,gT=(e,t,n)=>t in e?hT(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mp=(e,t,n)=>(gT(e,typeof t!="symbol"?t+"":t,n),n),mT=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},yp=(e,t)=>{if(Object(t)!==t)throw TypeError('Cannot use the "in" operator on this value');return e.has(t)},ba=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},H1=(e,t,n)=>(mT(e,t,"access private method"),n);function $1(e,t){return Object.is(e,t)}var ae=null,Fi=!1,va=1,Da=Symbol("SIGNAL");function vo(e){let t=ae;return ae=e,t}function yT(){return ae}function bT(){return Fi}var Cp={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Ca(e){if(Fi)throw new Error("");if(ae===null)return;ae.consumerOnSignalRead(e);let t=ae.nextProducerIndex++;if(Do(ae),te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function wT(e){Do(e);for(let t=0;t0}function Do(e){e.producerNode??(e.producerNode=[]),e.producerIndexOfThis??(e.producerIndexOfThis=[]),e.producerLastReadVersion??(e.producerLastReadVersion=[])}function _p(e){e.liveConsumerNode??(e.liveConsumerNode=[]),e.liveConsumerIndexOfThis??(e.liveConsumerIndexOfThis=[])}function G1(e){if(U1(e),Ca(e),e.value===Ep)throw e.error;return e.value}function xT(e){let t=Object.create(IT);t.computation=e;let n=()=>G1(t);return n[Da]=t,n}var bp=Symbol("UNSET"),vp=Symbol("COMPUTING"),Ep=Symbol("ERRORED"),IT=P(M({},Cp),{value:bp,dirty:!0,error:null,equal:$1,producerMustRecompute(e){return e.value===bp||e.value===vp},producerRecomputeValue(e){if(e.value===vp)throw new Error("Detected cycle in computations.");let t=e.value;e.value=vp;let n=CT(e),r,o=!1;try{r=e.computation.call(e.wrapper),o=t!==bp&&t!==Ep&&e.equal.call(e.wrapper,t,r)}catch(i){r=Ep,e.error=i}finally{_T(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function TT(){throw new Error}var ST=TT;function MT(){ST()}function AT(e){let t=Object.create(RT);t.value=e;let n=()=>(Ca(t),t.value);return n[Da]=t,n}function NT(){return Ca(this),this.value}function kT(e,t){DT()||MT(),e.equal.call(e.wrapper,e.value,t)||(e.value=t,FT(e))}var RT=P(M({},Cp),{equal:$1,value:void 0});function FT(e){e.version++,vT(),z1(e)}var ye=Symbol("node"),Ea;(e=>{var t,n,r,o,i,s;class u{constructor(l,d={}){ba(this,n),mp(this,t);let f=AT(l)[Da];if(this[ye]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.get");return NT.call(this[ye])}set(l){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.set");if(bT())throw new Error("Writes to signals not permitted during Watcher callback");let d=this[ye];kT(d,l)}}t=ye,n=new WeakSet,r=function(){},e.isState=c=>typeof c=="object"&&yp(n,c),e.State=u;class a{constructor(l,d){ba(this,i),mp(this,o);let f=xT(l)[Da];if(f.consumerAllowSignalWrites=!0,this[ye]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isComputed)(this))throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get");return G1(this[ye])}}o=ye,i=new WeakSet,s=function(){},e.isComputed=c=>typeof c=="object"&&yp(i,c),e.Computed=a,(c=>{var l,d,h,f,p;function m(C){let k,O=null;try{O=vo(null),k=C()}finally{vo(O)}return k}c.untrack=m;function g(C){var k;if(!(0,e.isComputed)(C)&&!(0,e.isWatcher)(C))throw new TypeError("Called introspectSources without a Computed or Watcher argument");return((k=C[ye].producerNode)==null?void 0:k.map(O=>O.wrapper))??[]}c.introspectSources=g;function y(C){var k;if(!(0,e.isComputed)(C)&&!(0,e.isState)(C))throw new TypeError("Called introspectSinks without a Signal argument");return((k=C[ye].liveConsumerNode)==null?void 0:k.map(O=>O.wrapper))??[]}c.introspectSinks=y;function v(C){if(!(0,e.isComputed)(C)&&!(0,e.isState)(C))throw new TypeError("Called hasSinks without a Signal argument");let k=C[ye].liveConsumerNode;return k?k.length>0:!1}c.hasSinks=v;function _(C){if(!(0,e.isComputed)(C)&&!(0,e.isWatcher)(C))throw new TypeError("Called hasSources without a Computed or Watcher argument");let k=C[ye].producerNode;return k?k.length>0:!1}c.hasSources=_;class E{constructor(k){ba(this,d),ba(this,f),mp(this,l);let O=Object.create(Cp);O.wrapper=this,O.consumerMarkedDirty=k,O.consumerIsAlwaysLive=!0,O.consumerAllowSignalWrites=!1,O.producerNode=[],this[ye]=O}watch(...k){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");H1(this,f,p).call(this,k);let O=this[ye];O.dirty=!1;let te=vo(O);for(let bt of k)Ca(bt[ye]);vo(te)}unwatch(...k){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");H1(this,f,p).call(this,k);let O=this[ye];Do(O);for(let te=O.producerNode.length-1;te>=0;te--)if(k.includes(O.producerNode[te].wrapper)){_a(O.producerNode[te],O.producerIndexOfThis[te]);let bt=O.producerNode.length-1;if(O.producerNode[te]=O.producerNode[bt],O.producerIndexOfThis[te]=O.producerIndexOfThis[bt],O.producerNode.length--,O.producerIndexOfThis.length--,O.nextProducerIndex--,teO.dirty).map(O=>O.wrapper)}}l=ye,d=new WeakSet,h=function(){},f=new WeakSet,p=function(C){for(let k of C)if(!(0,e.isComputed)(k)&&!(0,e.isState)(k))throw new TypeError("Called watch/unwatch without a Computed or State argument")},e.isWatcher=C=>yp(d,C),c.Watcher=E;function N(){var C;return(C=yT())==null?void 0:C.wrapper}c.currentComputed=N,c.watched=Symbol("watched"),c.unwatched=Symbol("unwatched")})(e.subtle||(e.subtle={}))})(Ea||(Ea={}));var Ke=(e=null)=>new Ea.State(e,{equals:()=>!1});var OT=new Set([Symbol.iterator,"concat","entries","every","filter","find","findIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","slice","some","values"]),PT=new Set(["fill","push","unshift"]);function W1(e){if(typeof e=="symbol")return null;let t=Number(e);return isNaN(t)?null:t%1===0?t:null}var Oi=class e{static from(t,n,r){return n?new e(Array.from(t,n,r)):new e(Array.from(t))}static of(...t){return new e(t)}constructor(t=[]){let n=t.slice(),r=this,o=new Map,i=!1;return new Proxy(n,{get(s,u){let a=W1(u);if(a!==null)return r.#n(a),r.#e.get(),s[a];if(u==="length")return i?i=!1:r.#e.get(),s[u];if(PT.has(u)&&(i=!0),OT.has(u)){let c=o.get(u);return c===void 0&&(c=(...l)=>(r.#e.get(),s[u](...l)),o.set(u,c)),c}return s[u]},set(s,u,a){s[u]=a;let c=W1(u);return c!==null?(r.#r(c),r.#e.set(null)):u==="length"&&r.#e.set(null),!0},getPrototypeOf(){return e.prototype}})}#e=Ke();#t=new Map;#n(t){let n=this.#t.get(t);n===void 0&&(n=Ke(),this.#t.set(t,n)),n.get()}#r(t){let n=this.#t.get(t);n&&n.set(null)}};Object.setPrototypeOf(Oi.prototype,Array.prototype);var Pi=class{collection=Ke();storages=new Map;vals;readStorageFor(t){let{storages:n}=this,r=n.get(t);r===void 0&&(r=Ke(),n.set(t,r)),r.get()}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=t?new Map(t):new Map}get(t){return this.readStorageFor(t),this.vals.get(t)}has(t){return this.readStorageFor(t),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}set(t,n){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.set(t,n),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(Pi.prototype,Map.prototype);var wp=class e{static fromEntries(t){return new e(Object.fromEntries(t))}#e=new Map;#t=Ke();constructor(t={}){let n=Object.getPrototypeOf(t),r=Object.getOwnPropertyDescriptors(t),o=Object.create(n);for(let s in r)Object.defineProperty(o,s,r[s]);let i=this;return new Proxy(o,{get(s,u,a){return i.#n(u),Reflect.get(s,u,a)},has(s,u){return i.#n(u),u in s},ownKeys(s){return i.#t.get(),Reflect.ownKeys(s)},set(s,u,a,c){let l=Reflect.set(s,u,a,c);return i.#r(u),i.#o(),l},deleteProperty(s,u){return u in s&&(delete s[u],i.#r(u),i.#o()),!0},getPrototypeOf(){return e.prototype}})}#n(t){let n=this.#e.get(t);n===void 0&&(n=Ke(),this.#e.set(t,n)),n.get()}#r(t){let n=this.#e.get(t);n&&n.set(null)}#o(){this.#t.set(null)}},Z1=wp;var Li=class{collection=Ke();storages=new Map;vals;storageFor(t){let n=this.storages,r=n.get(t);return r===void 0&&(r=Ke(),n.set(t,r)),r}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=new Set(t)}has(t){return this.storageFor(t).get(),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}add(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.add(t),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(Li.prototype,Set.prototype);function Y1(){return new ya({arrayCtor:Oi,mapCtor:Pi,objCtor:Z1,setCtor:Li})}var Q1={createSignalA2uiMessageProcessor:Y1,A2uiMessageProcessor:ya,Guards:gp};var K1=null;function kt(){return K1}function xp(e){K1??=e}var ji=class{},kn=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:()=>b(J1),providedIn:"platform"})}return e})(),LT=new x(""),J1=(()=>{class e extends kn{_location;_history;_doc=b(X);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return kt().getBaseHref(this._doc)}onPopState(n){let r=kt().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){let r=kt().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:()=>new e,providedIn:"platform"})}return e})();function wa(e,t){return e?t?e.endsWith("/")?t.startsWith("/")?e+t.slice(1):e+t:t.startsWith("/")?e+t:`${e}/${t}`:e:t}function X1(e){let t=e.search(/#|\?|$/);return e[t-1]==="/"?e.slice(0,t-1)+e.slice(t):e}function gt(e){return e&&e[0]!=="?"?`?${e}`:e}var Eo=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:()=>b(tv),providedIn:"root"})}return e})(),xa=new x(""),tv=(()=>{class e extends Eo{_platformLocation;_baseHref;_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??b(X).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return wa(this._baseHref,n)}path(n=!1){let r=this._platformLocation.pathname+gt(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+gt(i));this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+gt(i));this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(kn),A(xa,8))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var nv=(()=>{class e{_subject=new he;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(n){this._locationStrategy=n;let r=this._locationStrategy.getBaseHref();this._basePath=VT(X1(ev(r))),this._locationStrategy.onPopState(o=>{this._subject.next({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+gt(r))}normalize(n){return e.stripTrailingSlash(BT(this._basePath,ev(n)))}prepareExternalUrl(n){return n&&n[0]!=="/"&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+gt(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+gt(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription??=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)}),()=>{let r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r??void 0,complete:o??void 0})}static normalizeQueryParams=gt;static joinWithSlash=wa;static stripTrailingSlash=X1;static \u0275fac=function(r){return new(r||e)(A(Eo))};static \u0275prov=T({token:e,factory:()=>jT(),providedIn:"root"})}return e})();function jT(){return new nv(A(Eo))}function BT(e,t){if(!e||!t.startsWith(e))return t;let n=t.substring(e.length);return n===""||["/",";","?","#"].includes(n[0])?n:t}function ev(e){return e.replace(/\/index.html$/,"")}function VT(e){if(new RegExp("^(https?:)?//").test(e)){let[,n]=e.split(/\/\/[^\/]+/);return n}return e}var HT=(()=>{class e extends Eo{_platformLocation;_baseHref="";_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,r!=null&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash??"#";return r.length>0?r.substring(1):r}prepareExternalUrl(n){let r=wa(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+gt(i))||this._platformLocation.pathname;this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+gt(i))||this._platformLocation.pathname;this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(kn),A(xa,8))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})();var Fp=(function(e){return e[e.Decimal=0]="Decimal",e[e.Percent=1]="Percent",e[e.Currency=2]="Currency",e[e.Scientific=3]="Scientific",e})(Fp||{});var Ie=(function(e){return e[e.Format=0]="Format",e[e.Standalone=1]="Standalone",e})(Ie||{}),Q=(function(e){return e[e.Narrow=0]="Narrow",e[e.Abbreviated=1]="Abbreviated",e[e.Wide=2]="Wide",e[e.Short=3]="Short",e})(Q||{}),Le=(function(e){return e[e.Short=0]="Short",e[e.Medium=1]="Medium",e[e.Long=2]="Long",e[e.Full=3]="Full",e})(Le||{}),je={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function cv(e){return Oe(e)[ie.LocaleId]}function lv(e,t,n){let r=Oe(e),o=[r[ie.DayPeriodsFormat],r[ie.DayPeriodsStandalone]],i=Je(o,t);return Je(i,n)}function dv(e,t,n){let r=Oe(e),o=[r[ie.DaysFormat],r[ie.DaysStandalone]],i=Je(o,t);return Je(i,n)}function fv(e,t,n){let r=Oe(e),o=[r[ie.MonthsFormat],r[ie.MonthsStandalone]],i=Je(o,t);return Je(i,n)}function pv(e,t){let r=Oe(e)[ie.Eras];return Je(r,t)}function Bi(e,t){let n=Oe(e);return Je(n[ie.DateFormat],t)}function Vi(e,t){let n=Oe(e);return Je(n[ie.TimeFormat],t)}function Hi(e,t){let r=Oe(e)[ie.DateTimeFormat];return Je(r,t)}function Rt(e,t){let n=Oe(e),r=n[ie.NumberSymbols][t];if(typeof r>"u"){if(t===je.CurrencyDecimal)return n[ie.NumberSymbols][je.Decimal];if(t===je.CurrencyGroup)return n[ie.NumberSymbols][je.Group]}return r}function hv(e,t){return Oe(e)[ie.NumberFormats][t]}function gv(e){if(!e[ie.ExtraData])throw new D(2303,!1)}function mv(e){let t=Oe(e);return gv(t),(t[ie.ExtraData][2]||[]).map(r=>typeof r=="string"?Ip(r):[Ip(r[0]),Ip(r[1])])}function yv(e,t,n){let r=Oe(e);gv(r);let o=[r[ie.ExtraData][0],r[ie.ExtraData][1]],i=Je(o,t)||[];return Je(i,n)||[]}function Je(e,t){for(let n=t;n>-1;n--)if(typeof e[n]<"u")return e[n];throw new D(2304,!1)}function Ip(e){let[t,n]=e.split(":");return{hours:+t,minutes:+n}}var $T=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Ia={},UT=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;function bv(e,t,n,r){let o=JT(e);t=en(n,t)||t;let s=[],u;for(;t;)if(u=UT.exec(t),u){s=s.concat(u.slice(1));let l=s.pop();if(!l)break;t=l}else{s.push(t);break}let a=o.getTimezoneOffset();r&&(a=Dv(r,a),o=KT(o,r));let c="";return s.forEach(l=>{let d=YT(l);c+=d?d(o,n,a):l==="''"?"'":l.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),c}function Na(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function en(e,t){let n=cv(e);if(Ia[n]??={},Ia[n][t])return Ia[n][t];let r="";switch(t){case"shortDate":r=Bi(e,Le.Short);break;case"mediumDate":r=Bi(e,Le.Medium);break;case"longDate":r=Bi(e,Le.Long);break;case"fullDate":r=Bi(e,Le.Full);break;case"shortTime":r=Vi(e,Le.Short);break;case"mediumTime":r=Vi(e,Le.Medium);break;case"longTime":r=Vi(e,Le.Long);break;case"fullTime":r=Vi(e,Le.Full);break;case"short":let o=en(e,"shortTime"),i=en(e,"shortDate");r=Ta(Hi(e,Le.Short),[o,i]);break;case"medium":let s=en(e,"mediumTime"),u=en(e,"mediumDate");r=Ta(Hi(e,Le.Medium),[s,u]);break;case"long":let a=en(e,"longTime"),c=en(e,"longDate");r=Ta(Hi(e,Le.Long),[a,c]);break;case"full":let l=en(e,"fullTime"),d=en(e,"fullDate");r=Ta(Hi(e,Le.Full),[l,d]);break}return r&&(Ia[n][t]=r),r}function Ta(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(n,r){return t!=null&&r in t?t[r]:n})),e}function mt(e,t,n="-",r,o){let i="";(e<0||o&&e<=0)&&(o?e=-e+1:(e=-e,i=n));let s=String(e);for(;s.length0||u>-n)&&(u+=n),e===3)u===0&&n===-12&&(u=12);else if(e===6)return zT(u,t);let a=Rt(s,je.MinusSign);return mt(u,t,a,r,o)}}function qT(e,t){switch(e){case 0:return t.getFullYear();case 1:return t.getMonth();case 2:return t.getDate();case 3:return t.getHours();case 4:return t.getMinutes();case 5:return t.getSeconds();case 6:return t.getMilliseconds();case 7:return t.getDay();default:throw new D(2301,!1)}}function J(e,t,n=Ie.Format,r=!1){return function(o,i){return GT(o,i,e,t,n,r)}}function GT(e,t,n,r,o,i){switch(n){case 2:return fv(t,o,r)[e.getMonth()];case 1:return dv(t,o,r)[e.getDay()];case 0:let s=e.getHours(),u=e.getMinutes();if(i){let c=mv(t),l=yv(t,o,r),d=c.findIndex(h=>{if(Array.isArray(h)){let[f,p]=h,m=s>=f.hours&&u>=f.minutes,g=s0?Math.floor(o/60):Math.ceil(o/60);switch(e){case 0:return(o>=0?"+":"")+mt(s,2,i)+mt(Math.abs(o%60),2,i);case 1:return"GMT"+(o>=0?"+":"")+mt(s,1,i);case 2:return"GMT"+(o>=0?"+":"")+mt(s,2,i)+":"+mt(Math.abs(o%60),2,i);case 3:return r===0?"Z":(o>=0?"+":"")+mt(s,2,i)+":"+mt(Math.abs(o%60),2,i);default:throw new D(2310,!1)}}}var WT=0,Aa=4;function ZT(e){let t=Na(e,WT,1).getDay();return Na(e,0,1+(t<=Aa?Aa:Aa+7)-t)}function vv(e){let t=e.getDay(),n=t===0?-3:Aa-t;return Na(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Tp(e,t=!1){return function(n,r){let o;if(t){let i=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,s=n.getDate();o=1+Math.floor((s+i)/7)}else{let i=vv(n),s=ZT(i.getFullYear()),u=i.getTime()-s.getTime();o=1+Math.round(u/6048e5)}return mt(o,e,Rt(r,je.MinusSign))}}function Ma(e,t=!1){return function(n,r){let i=vv(n).getFullYear();return mt(i,e,Rt(r,je.MinusSign),t)}}var Sp={};function YT(e){if(Sp[e])return Sp[e];let t;switch(e){case"G":case"GG":case"GGG":t=J(3,Q.Abbreviated);break;case"GGGG":t=J(3,Q.Wide);break;case"GGGGG":t=J(3,Q.Narrow);break;case"y":t=ce(0,1,0,!1,!0);break;case"yy":t=ce(0,2,0,!0,!0);break;case"yyy":t=ce(0,3,0,!1,!0);break;case"yyyy":t=ce(0,4,0,!1,!0);break;case"Y":t=Ma(1);break;case"YY":t=Ma(2,!0);break;case"YYY":t=Ma(3);break;case"YYYY":t=Ma(4);break;case"M":case"L":t=ce(1,1,1);break;case"MM":case"LL":t=ce(1,2,1);break;case"MMM":t=J(2,Q.Abbreviated);break;case"MMMM":t=J(2,Q.Wide);break;case"MMMMM":t=J(2,Q.Narrow);break;case"LLL":t=J(2,Q.Abbreviated,Ie.Standalone);break;case"LLLL":t=J(2,Q.Wide,Ie.Standalone);break;case"LLLLL":t=J(2,Q.Narrow,Ie.Standalone);break;case"w":t=Tp(1);break;case"ww":t=Tp(2);break;case"W":t=Tp(1,!0);break;case"d":t=ce(2,1);break;case"dd":t=ce(2,2);break;case"c":case"cc":t=ce(7,1);break;case"ccc":t=J(1,Q.Abbreviated,Ie.Standalone);break;case"cccc":t=J(1,Q.Wide,Ie.Standalone);break;case"ccccc":t=J(1,Q.Narrow,Ie.Standalone);break;case"cccccc":t=J(1,Q.Short,Ie.Standalone);break;case"E":case"EE":case"EEE":t=J(1,Q.Abbreviated);break;case"EEEE":t=J(1,Q.Wide);break;case"EEEEE":t=J(1,Q.Narrow);break;case"EEEEEE":t=J(1,Q.Short);break;case"a":case"aa":case"aaa":t=J(0,Q.Abbreviated);break;case"aaaa":t=J(0,Q.Wide);break;case"aaaaa":t=J(0,Q.Narrow);break;case"b":case"bb":case"bbb":t=J(0,Q.Abbreviated,Ie.Standalone,!0);break;case"bbbb":t=J(0,Q.Wide,Ie.Standalone,!0);break;case"bbbbb":t=J(0,Q.Narrow,Ie.Standalone,!0);break;case"B":case"BB":case"BBB":t=J(0,Q.Abbreviated,Ie.Format,!0);break;case"BBBB":t=J(0,Q.Wide,Ie.Format,!0);break;case"BBBBB":t=J(0,Q.Narrow,Ie.Format,!0);break;case"h":t=ce(3,1,-12);break;case"hh":t=ce(3,2,-12);break;case"H":t=ce(3,1);break;case"HH":t=ce(3,2);break;case"m":t=ce(4,1);break;case"mm":t=ce(4,2);break;case"s":t=ce(5,1);break;case"ss":t=ce(5,2);break;case"S":t=ce(6,1);break;case"SS":t=ce(6,2);break;case"SSS":t=ce(6,3);break;case"Z":case"ZZ":case"ZZZ":t=Sa(0);break;case"ZZZZZ":t=Sa(3);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":t=Sa(1);break;case"OOOO":case"ZZZZ":case"zzzz":t=Sa(2);break;default:return null}return Sp[e]=t,t}function Dv(e,t){e=e.replace(/:/g,"");let n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function QT(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function KT(e,t,n){let o=e.getTimezoneOffset(),i=Dv(t,o);return QT(e,-1*(i-o))}function JT(e){if(rv(e))return e;if(typeof e=="number"&&!isNaN(e))return new Date(e);if(typeof e=="string"){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[o,i=1,s=1]=e.split("-").map(u=>+u);return Na(o,i-1,s)}let n=parseFloat(e);if(!isNaN(e-n))return new Date(n);let r;if(r=e.match($T))return XT(r)}let t=new Date(e);if(!rv(t))throw new D(2311,!1);return t}function XT(e){let t=new Date(0),n=0,r=0,o=e[8]?t.setUTCFullYear:t.setFullYear,i=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11])),o.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));let s=Number(e[4]||0)-n,u=Number(e[5]||0)-r,a=Number(e[6]||0),c=Math.floor(parseFloat("0."+(e[7]||0))*1e3);return i.call(t,s,u,a,c),t}function rv(e){return e instanceof Date&&!isNaN(e.valueOf())}var eS=/^(\d+)?\.((\d+)(-(\d+))?)?$/,ov=22,ka=".",$i="0",tS=";",nS=",",Mp="#";function rS(e,t,n,r,o,i,s=!1){let u="",a=!1;if(!isFinite(e))u=Rt(n,je.Infinity);else{let c=sS(e);s&&(c=iS(c));let l=t.minInt,d=t.minFrac,h=t.maxFrac;if(i){let v=i.match(eS);if(v===null)throw new D(2306,!1);let _=v[1],E=v[3],N=v[5];_!=null&&(l=Ap(_)),E!=null&&(d=Ap(E)),N!=null?h=Ap(N):E!=null&&d>h&&(h=d)}uS(c,d,h);let f=c.digits,p=c.integerLen,m=c.exponent,g=[];for(a=f.every(v=>!v);p0?g=f.splice(p,f.length):(g=f,f=[0]);let y=[];for(f.length>=t.lgSize&&y.unshift(f.splice(-t.lgSize,f.length).join(""));f.length>t.gSize;)y.unshift(f.splice(-t.gSize,f.length).join(""));f.length&&y.unshift(f.join("")),u=y.join(Rt(n,r)),g.length&&(u+=Rt(n,o)+g.join("")),m&&(u+=Rt(n,je.Exponential)+"+"+m)}return e<0&&!a?u=t.negPre+u+t.negSuf:u=t.posPre+u+t.posSuf,u}function Ev(e,t,n){let r=hv(t,Fp.Decimal),o=oS(r,Rt(t,je.MinusSign));return rS(e,o,t,je.Group,je.Decimal,n)}function oS(e,t="-"){let n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},r=e.split(tS),o=r[0],i=r[1],s=o.indexOf(ka)!==-1?o.split(ka):[o.substring(0,o.lastIndexOf($i)+1),o.substring(o.lastIndexOf($i)+1)],u=s[0],a=s[1]||"";n.posPre=u.substring(0,u.indexOf(Mp));for(let l=0;l-1&&(t=t.replace(ka,"")),(i=t.search(/e/i))>0?(o<0&&(o=i),o+=+t.slice(i+1),t=t.substring(0,i)):o<0&&(o=t.length),i=0;t.charAt(i)===$i;i++);if(i===(u=t.length))r=[0],o=1;else{for(u--;t.charAt(u)===$i;)u--;for(o-=i,r=[],s=0;i<=u;i++,s++)r[s]=Number(t.charAt(i))}return o>ov&&(r=r.splice(0,ov-1),n=o-1,o=1),{digits:r,exponent:n,integerLen:o}}function uS(e,t,n){if(t>n)throw new D(2307,!1);let r=e.digits,o=r.length-e.integerLen,i=Math.min(Math.max(t,o),n),s=i+e.integerLen,u=r[s];if(s>0){r.splice(Math.max(e.integerLen,s));for(let d=s;d=5)if(s-1<0){for(let d=0;d>s;d--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[s-1]++;for(;o=c?p.pop():a=!1),h>=10?1:0},0);l&&(r.unshift(l),e.integerLen++)}function Ap(e){let t=parseInt(e);if(isNaN(t))throw new D(2305,!1);return t}var Np=/\s+/,iv=[],aS=(()=>{class e{_ngEl;_renderer;initialClasses=iv;rawClass;stateMap=new Map;constructor(n,r){this._ngEl=n,this._renderer=r}set klass(n){this.initialClasses=n!=null?n.trim().split(Np):iv}set ngClass(n){this.rawClass=typeof n=="string"?n.trim().split(Np):n}ngDoCheck(){for(let r of this.initialClasses)this._updateState(r,!0);let n=this.rawClass;if(Array.isArray(n)||n instanceof Set)for(let r of n)this._updateState(r,!0);else if(n!=null)for(let r of Object.keys(n))this._updateState(r,!!n[r]);this._applyStateDiff()}_updateState(n,r){let o=this.stateMap.get(n);o!==void 0?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(n,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(let n of this.stateMap){let r=n[0],o=n[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(n,r){n=n.trim(),n.length>0&&n.split(Np).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static \u0275fac=function(r){return new(r||e)(ee(Zt),ee(Ti))};static \u0275dir=ht({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}})}return e})(),cS=(()=>{class e{_viewContainerRef;ngComponentOutlet=null;ngComponentOutletInputs;ngComponentOutletInjector;ngComponentOutletEnvironmentInjector;ngComponentOutletContent;ngComponentOutletNgModule;_componentRef;_moduleRef;_inputsUsed=new Map;get componentInstance(){return this._componentRef?.instance??null}constructor(n){this._viewContainerRef=n}_needToReCreateNgModuleInstance(n){return n.ngComponentOutletNgModule!==void 0}_needToReCreateComponentInstance(n){return n.ngComponentOutlet!==void 0||n.ngComponentOutletContent!==void 0||n.ngComponentOutletInjector!==void 0||n.ngComponentOutletEnvironmentInjector!==void 0||this._needToReCreateNgModuleInstance(n)}ngOnChanges(n){if(this._needToReCreateComponentInstance(n)&&(this._viewContainerRef.clear(),this._inputsUsed.clear(),this._componentRef=void 0,this.ngComponentOutlet)){let r=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;this._needToReCreateNgModuleInstance(n)&&(this._moduleRef?.destroy(),this.ngComponentOutletNgModule?this._moduleRef=mf(this.ngComponentOutletNgModule,lS(r)):this._moduleRef=void 0),this._componentRef=this._viewContainerRef.createComponent(this.ngComponentOutlet,{injector:r,ngModuleRef:this._moduleRef,projectableNodes:this.ngComponentOutletContent,environmentInjector:this.ngComponentOutletEnvironmentInjector})}}ngDoCheck(){if(this._componentRef){if(this.ngComponentOutletInputs)for(let n of Object.keys(this.ngComponentOutletInputs))this._inputsUsed.set(n,!0);this._applyInputStateDiff(this._componentRef)}}ngOnDestroy(){this._moduleRef?.destroy()}_applyInputStateDiff(n){for(let[r,o]of this._inputsUsed)o?(n.setInput(r,this.ngComponentOutletInputs[r]),this._inputsUsed.set(r,!1)):(n.setInput(r,void 0),this._inputsUsed.delete(r))}static \u0275fac=function(r){return new(r||e)(ee(pt))};static \u0275dir=ht({type:e,selectors:[["","ngComponentOutlet",""]],inputs:{ngComponentOutlet:"ngComponentOutlet",ngComponentOutletInputs:"ngComponentOutletInputs",ngComponentOutletInjector:"ngComponentOutletInjector",ngComponentOutletEnvironmentInjector:"ngComponentOutletEnvironmentInjector",ngComponentOutletContent:"ngComponentOutletContent",ngComponentOutletNgModule:"ngComponentOutletNgModule"},exportAs:["ngComponentOutlet"],features:[Fu]})}return e})();function lS(e){return e.get(An).injector}var Ra=class{$implicit;ngForOf;index;count;constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},Cv=(()=>{class e{_viewContainer;_template;_differs;set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}_ngForOf=null;_ngForOfDirty=!0;_differ=null;_trackByFn;constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let n=this._ngForOf;!this._differ&&n&&(this._differ=this._differs.find(n).create(this.ngForTrackBy))}if(this._differ){let n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){let r=this._viewContainer;n.forEachOperation((o,i,s)=>{if(o.previousIndex==null)r.createEmbeddedView(this._template,new Ra(o.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)r.remove(i===null?void 0:i);else if(i!==null){let u=r.get(i);r.move(u,s),sv(u,o)}});for(let o=0,i=r.length;o{let i=r.get(o.currentIndex);sv(i,o)})}static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(ee(pt),ee(Sn),ee(Gf))};static \u0275dir=ht({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}})}return e})();function sv(e,t){e.context.$implicit=t.item}var dS=(()=>{class e{_viewContainer;_context=new Fa;_thenTemplateRef=null;_elseTemplateRef=null;_thenViewRef=null;_elseViewRef=null;constructor(n,r){this._viewContainer=n,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){uv(n,!1),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){uv(n,!1),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(ee(pt),ee(Sn))};static \u0275dir=ht({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}})}return e})(),Fa=class{$implicit=null;ngIf=null};function uv(e,t){if(e&&!e.createEmbeddedView)throw new D(2020,!1)}var fS=(()=>{class e{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(n,r,o){this._ngEl=n,this._differs=r,this._renderer=o}set ngStyle(n){this._ngStyle=n,!this._differ&&n&&(this._differ=this._differs.find(n).create())}ngDoCheck(){if(this._differ){let n=this._differ.diff(this._ngStyle);n&&this._applyChanges(n)}}_setStyle(n,r){let[o,i]=n.split("."),s=o.indexOf("-")===-1?void 0:dt.DashCase;r!=null?this._renderer.setStyle(this._ngEl.nativeElement,o,i?`${r}${i}`:r,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(n){n.forEachRemovedItem(r=>this._setStyle(r.key,null)),n.forEachAddedItem(r=>this._setStyle(r.key,r.currentValue)),n.forEachChangedItem(r=>this._setStyle(r.key,r.currentValue))}static \u0275fac=function(r){return new(r||e)(ee(Zt),ee(ma),ee(Ti))};static \u0275dir=ht({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}})}return e})(),pS=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=b(me);constructor(n){this._viewContainerRef=n}ngOnChanges(n){if(this._shouldRecreateView(n)){let r=this._viewContainerRef;if(this._viewRef&&r.remove(r.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let o=this._createContextForwardProxy();this._viewRef=r.createEmbeddedView(this.ngTemplateOutlet,o,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector==="outlet"?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(n){return!!n.ngTemplateOutlet||!!n.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(n,r,o)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,r,o):!1,get:(n,r,o)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,r,o)}})}static \u0275fac=function(r){return new(r||e)(ee(pt))};static \u0275dir=ht({type:e,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},features:[Fu]})}return e})();function Op(e,t){return new D(2100,!1)}var kp=class{createSubscription(t,n,r){return xe(()=>t.subscribe({next:n,error:r}))}dispose(t){xe(()=>t.unsubscribe())}},Rp=class{createSubscription(t,n,r){return t.then(o=>n?.(o),o=>r?.(o)),{unsubscribe:()=>{n=null,r=null}}}dispose(t){t.unsubscribe()}},hS=new Rp,gS=new kp,mS=(()=>{class e{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=b(Gt);constructor(n){this._ref=n}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(n){if(!this._obj){if(n)try{this.markForCheckOnValueUpdate=!1,this._subscribe(n)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return n!==this._obj?(this._dispose(),this.transform(n)):this._latestValue}_subscribe(n){this._obj=n,this._strategy=this._selectStrategy(n),this._subscription=this._strategy.createSubscription(n,r=>this._updateLatestValue(n,r),r=>this.applicationErrorHandler(r))}_selectStrategy(n){if(Mi(n))return hS;if(ea(n))return gS;throw Op(e,n)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(n,r){n===this._obj&&(this._latestValue=r,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static \u0275fac=function(r){return new(r||e)(ee(qf,16))};static \u0275pipe=uo({name:"async",type:e,pure:!1})}return e})();var yS="mediumDate",_v=new x(""),wv=new x(""),bS=(()=>{class e{locale;defaultTimezone;defaultOptions;constructor(n,r,o){this.locale=n,this.defaultTimezone=r,this.defaultOptions=o}transform(n,r,o,i){if(n==null||n===""||n!==n)return null;try{let s=r??this.defaultOptions?.dateFormat??yS,u=o??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return bv(n,s,i||this.locale,u)}catch(s){throw Op(e,s.message)}}static \u0275fac=function(r){return new(r||e)(ee(go,16),ee(_v,24),ee(wv,24))};static \u0275pipe=uo({name:"date",type:e,pure:!0})}return e})();function vS(e,t){return{key:e,value:t}}var DS=(()=>{class e{differs;constructor(n){this.differs=n}differ;keyValues=[];compareFn=av;transform(n,r=av){if(!n||!(n instanceof Map)&&typeof n!="object")return null;this.differ??=this.differs.find(n).create();let o=this.differ.diff(n),i=r!==this.compareFn;return o&&(this.keyValues=[],o.forEachItem(s=>{this.keyValues.push(vS(s.key,s.currentValue))})),(o||i)&&(r&&this.keyValues.sort(r),this.compareFn=r),this.keyValues}static \u0275fac=function(r){return new(r||e)(ee(ma,16))};static \u0275pipe=uo({name:"keyvalue",type:e,pure:!1})}return e})();function av(e,t){let n=e.key,r=t.key;if(n===r)return 0;if(n==null)return 1;if(r==null)return-1;if(typeof n=="string"&&typeof r=="string")return n{class e{_locale;constructor(n){this._locale=n}transform(n,r,o){if(!CS(n))return null;o||=this._locale;try{let i=_S(n);return Ev(i,o,r)}catch(i){throw Op(e,i.message)}}static \u0275fac=function(r){return new(r||e)(ee(go,16))};static \u0275pipe=uo({name:"number",type:e,pure:!0})}return e})();function CS(e){return!(e==null||e===""||e!==e)}function _S(e){if(typeof e=="string"&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if(typeof e!="number")throw new D(2309,!1);return e}var Pp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Kt({type:e});static \u0275inj=It({})}return e})();function Ui(e,t){t=encodeURIComponent(t);for(let n of e.split(";")){let r=n.indexOf("="),[o,i]=r==-1?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}var mr=class{};var jp="browser";function xv(e){return e===jp}var GH=(()=>{class e{static \u0275prov=T({token:e,providedIn:"root",factory:()=>new Lp(b(X),window)})}return e})(),Lp=class{document;window;offset=()=>[0,0];constructor(t,n){this.document=t,this.window=n}setOffset(t){Array.isArray(t)?this.offset=()=>t:this.offset=t}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(t,n){this.window.scrollTo(P(M({},n),{left:t[0],top:t[1]}))}scrollToAnchor(t,n){let r=wS(this.document,t);r&&(this.scrollToElement(r,n),r.focus())}setHistoryScrollRestoration(t){try{this.window.history.scrollRestoration=t}catch(n){console.warn(xt(2400,!1))}}scrollToElement(t,n){let r=t.getBoundingClientRect(),o=r.left+this.window.pageXOffset,i=r.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(P(M({},n),{left:o-s[0],top:i-s[1]}))}};function wS(e,t){let n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if(typeof e.createTreeWalker=="function"&&e.body&&typeof e.body.attachShadow=="function"){let r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT),o=r.currentNode;for(;o;){let i=o.shadowRoot;if(i){let s=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(s)return s}o=r.nextNode()}}return null}var zi=class{_doc;constructor(t){this._doc=t}manager},Oa=(()=>{class e extends zi{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o,i){return n.addEventListener(r,o,i),()=>this.removeEventListener(n,r,o,i)}removeEventListener(n,r,o,i){return n.removeEventListener(r,o,i)}static \u0275fac=function(r){return new(r||e)(A(X))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),ja=new x(""),$p=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(n,r){this._zone=r,n.forEach(s=>{s.manager=this});let o=n.filter(s=>!(s instanceof Oa));this._plugins=o.slice().reverse();let i=n.find(s=>s instanceof Oa);i&&this._plugins.push(i)}addEventListener(n,r,o,i){return this._findPluginFor(r).addEventListener(n,r,o,i)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new D(5101,!1);return this._eventNameToPlugin.set(n,r),r}static \u0275fac=function(r){return new(r||e)(A(ja),A(Ce))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),Bp="ng-app-id";function Iv(e){for(let t of e)t.remove()}function Tv(e,t){let n=t.createElement("style");return n.textContent=e,n}function xS(e,t,n,r){let o=e.head?.querySelectorAll(`style[${Bp}="${t}"],link[${Bp}="${t}"]`);if(o)for(let i of o)i.removeAttribute(Bp),i instanceof HTMLLinkElement?r.set(i.href.slice(i.href.lastIndexOf("/")+1),{usage:0,elements:[i]}):i.textContent&&n.set(i.textContent,{usage:0,elements:[i]})}function Hp(e,t){let n=t.createElement("link");return n.setAttribute("rel","stylesheet"),n.setAttribute("href",e),n}var Up=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,xS(n,r,this.inline,this.external),this.hosts.add(n.head)}addStyles(n,r){for(let o of n)this.addUsage(o,this.inline,Tv);r?.forEach(o=>this.addUsage(o,this.external,Hp))}removeStyles(n,r){for(let o of n)this.removeUsage(o,this.inline);r?.forEach(o=>this.removeUsage(o,this.external))}addUsage(n,r,o){let i=r.get(n);i?i.usage++:r.set(n,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,o(n,this.doc)))})}removeUsage(n,r){let o=r.get(n);o&&(o.usage--,o.usage<=0&&(Iv(o.elements),r.delete(n)))}ngOnDestroy(){for(let[,{elements:n}]of[...this.inline,...this.external])Iv(n);this.hosts.clear()}addHost(n){this.hosts.add(n);for(let[r,{elements:o}]of this.inline)o.push(this.addElement(n,Tv(r,this.doc)));for(let[r,{elements:o}]of this.external)o.push(this.addElement(n,Hp(r,this.doc)))}removeHost(n){this.hosts.delete(n)}addElement(n,r){return this.nonce&&r.setAttribute("nonce",this.nonce),n.appendChild(r)}static \u0275fac=function(r){return new(r||e)(A(X),A(Ou),A(Lu,8),A(hr))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),Vp={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},zp=/%COMP%/g;var Mv="%COMP%",IS=`_nghost-${Mv}`,TS=`_ngcontent-${Mv}`,SS=!0,MS=new x("",{factory:()=>SS});function AS(e){return TS.replace(zp,e)}function NS(e){return IS.replace(zp,e)}function Av(e,t){return t.map(n=>n.replace(zp,e))}var qp=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(n,r,o,i,s,u,a=null,c=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.ngZone=u,this.nonce=a,this.tracingService=c,this.defaultRenderer=new qi(n,s,u,this.tracingService)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;let o=this.getOrCreateRenderer(n,r);return o instanceof La?o.applyToHost(n):o instanceof Gi&&o.applyStyles(),o}getOrCreateRenderer(n,r){let o=this.rendererByCompId,i=o.get(r.id);if(!i){let s=this.doc,u=this.ngZone,a=this.eventManager,c=this.sharedStylesHost,l=this.removeStylesOnCompDestroy,d=this.tracingService;switch(r.encapsulation){case lt.Emulated:i=new La(a,c,r,this.appId,l,s,u,d);break;case lt.ShadowDom:return new Pa(a,n,r,s,u,this.nonce,d,c);case lt.ExperimentalIsolatedShadowDom:return new Pa(a,n,r,s,u,this.nonce,d);default:i=new Gi(a,c,r,l,s,u,d);break}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(n){this.rendererByCompId.delete(n)}static \u0275fac=function(r){return new(r||e)(A($p),A(Up),A(Ou),A(MS),A(X),A(Ce),A(Lu),A(ft,8))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),qi=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.tracingService=o}destroy(){}destroyNode=null;createElement(t,n){return n?this.doc.createElementNS(Vp[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(Sv(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(Sv(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){n.remove()}selectRootElement(t,n){let r=typeof t=="string"?this.doc.querySelector(t):t;if(!r)throw new D(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;let i=Vp[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){let o=Vp[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(dt.DashCase|dt.Important)?t.style.setProperty(n,r,o&dt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&dt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t!=null&&(t[n]=r)}setValue(t,n){t.nodeValue=n}listen(t,n,r,o){if(typeof t=="string"&&(t=kt().getGlobalEventTarget(this.doc,t),!t))throw new D(5102,!1);let i=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(t,n,i)),this.eventManager.addEventListener(t,n,i,o)}decoratePreventDefault(t){return n=>{if(n==="__ngUnwrap__")return t;t(n)===!1&&n.preventDefault()}}};function Sv(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var Pa=class extends qi{hostEl;sharedStylesHost;shadowRoot;constructor(t,n,r,o,i,s,u,a){super(t,o,i,u),this.hostEl=n,this.sharedStylesHost=a,this.shadowRoot=n.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let c=r.styles;c=Av(r.id,c);for(let d of c){let h=document.createElement("style");s&&h.setAttribute("nonce",s),h.textContent=d,this.shadowRoot.appendChild(h)}let l=r.getExternalStyles?.();if(l)for(let d of l){let h=Hp(d,o);s&&h.setAttribute("nonce",s),this.shadowRoot.appendChild(h)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(null,n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},Gi=class extends qi{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(t,n,r,o,i,s,u,a){super(t,i,s,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o;let c=r.styles;this.styles=a?Av(a,c):c,this.styleUrls=r.getExternalStyles?.(a)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&cr.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},La=class extends Gi{contentAttr;hostAttr;constructor(t,n,r,o,i,s,u,a){let c=o+"-"+r.id;super(t,n,r,i,s,u,a,c),this.contentAttr=AS(c),this.hostAttr=NS(c)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){let r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}};var Ba=class e extends ji{supportsDOMEvents=!0;static makeCurrent(){xp(new e)}onAndCancel(t,n,r,o){return t.addEventListener(n,r,o),()=>{t.removeEventListener(n,r,o)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.remove()}createElement(t,n){return n=n||this.getDefaultDocument(),n.createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return n==="window"?window:n==="document"?t:n==="body"?t.body:null}getBaseHref(t){let n=kS();return n==null?null:RS(n)}resetBaseElement(){Wi=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return Ui(document.cookie,t)}},Wi=null;function kS(){return Wi=Wi||document.head.querySelector("base"),Wi?Wi.getAttribute("href"):null}function RS(e){return new URL(e,document.baseURI).pathname}var Va=class{addToWindow(t){fe.getAngularTestability=(r,o=!0)=>{let i=t.findTestabilityInTree(r,o);if(i==null)throw new D(5103,!1);return i},fe.getAllAngularTestabilities=()=>t.getAllTestabilities(),fe.getAllAngularRootElements=()=>t.getAllRootElements();let n=r=>{let o=fe.getAllAngularTestabilities(),i=o.length,s=function(){i--,i==0&&r()};o.forEach(u=>{u.whenStable(s)})};fe.frameworkStabilizers||(fe.frameworkStabilizers=[]),fe.frameworkStabilizers.push(n)}findTestabilityInTree(t,n,r){if(n==null)return null;let o=t.getTestability(n);return o??(r?kt().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},FS=(()=>{class e{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})(),Nv=["alt","control","meta","shift"],OS={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},PS={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},kv=(()=>{class e extends zi{constructor(n){super(n)}supports(n){return e.parseEventName(n)!=null}addEventListener(n,r,o,i){let s=e.parseEventName(r),u=e.eventCallback(s.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>kt().onAndCancel(n,s.domEventName,u,i))}static parseEventName(n){let r=n.toLowerCase().split("."),o=r.shift();if(r.length===0||!(o==="keydown"||o==="keyup"))return null;let i=e._normalizeKey(r.pop()),s="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),s="code."),Nv.forEach(c=>{let l=r.indexOf(c);l>-1&&(r.splice(l,1),s+=c+".")}),s+=i,r.length!=0||i.length===0)return null;let a={};return a.domEventName=o,a.fullKey=s,a}static matchEventFullKeyCode(n,r){let o=OS[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),Nv.forEach(s=>{if(s!==o){let u=PS[s];u(n)&&(i+=s+".")}}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return n==="esc"?"escape":n}static \u0275fac=function(r){return new(r||e)(A(X))};static \u0275prov=T({token:e,factory:e.\u0275fac})}return e})();function LS(e,t,n){return vt(this,null,function*(){let r=M({rootComponent:e},jS(t,n));return k1(r)})}function jS(e,t){return{platformRef:t?.platformRef,appProviders:[...Rv,...e?.providers??[]],platformProviders:$S}}function BS(){Ba.makeCurrent()}function VS(){return new We}function HS(){return Ld(document),document}var $S=[{provide:hr,useValue:jp},{provide:Pu,useValue:BS,multi:!0},{provide:X,useFactory:HS}];var US=[{provide:Xu,useClass:Va},{provide:Ju,useClass:Si},{provide:Si,useClass:Si}],Rv=[{provide:Xo,useValue:"root"},{provide:We,useFactory:VS},{provide:ja,useClass:Oa,multi:!0},{provide:ja,useClass:kv,multi:!0},qp,Up,$p,{provide:lr,useExisting:qp},{provide:mr,useClass:FS},[]],zS=(()=>{class e{constructor(){}static \u0275fac=function(r){return new(r||e)};static \u0275mod=Kt({type:e});static \u0275inj=It({providers:[...Rv,...US],imports:[Pp,N1]})}return e})();var Rn=class e{headers;normalizedNames=new Map;lazyInit;lazyUpdate=null;constructor(t){t?typeof t=="string"?this.lazyInit=()=>{this.headers=new Map,t.split(` +`).forEach(n=>{let r=n.indexOf(":");if(r>0){let o=n.slice(0,r),i=n.slice(r+1).trim();this.addHeaderEntry(o,i)}})}:typeof Headers<"u"&&t instanceof Headers?(this.headers=new Map,t.forEach((n,r)=>{this.addHeaderEntry(r,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(t).forEach(([n,r])=>{this.setHeaderEntries(n,r)})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();let n=this.headers.get(t.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,n){return this.clone({name:t,value:n,op:"a"})}set(t,n){return this.clone({name:t,value:n,op:"s"})}delete(t,n){return this.clone({name:t,value:n,op:"d"})}maybeSetNormalizedName(t,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,t)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(n=>{this.headers.set(n,t.headers.get(n)),this.normalizedNames.set(n,t.normalizedNames.get(n))})}clone(t){let n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n}applyUpdate(t){let n=t.name.toLowerCase();switch(t.op){case"a":case"s":let r=t.value;if(typeof r=="string"&&(r=[r]),r.length===0)return;this.maybeSetNormalizedName(t.name,n);let o=(t.op==="a"?this.headers.get(n):void 0)||[];o.push(...r),this.headers.set(n,o);break;case"d":let i=t.value;if(!i)this.headers.delete(n),this.normalizedNames.delete(n);else{let s=this.headers.get(n);if(!s)return;s=s.filter(u=>i.indexOf(u)===-1),s.length===0?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,s)}break}}addHeaderEntry(t,n){let r=t.toLowerCase();this.maybeSetNormalizedName(t,r),this.headers.has(r)?this.headers.get(r).push(n):this.headers.set(r,[n])}setHeaderEntries(t,n){let r=(Array.isArray(n)?n:[n]).map(i=>i.toString()),o=t.toLowerCase();this.headers.set(o,r),this.maybeSetNormalizedName(t,o)}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>t(this.normalizedNames.get(n),this.headers.get(n)))}};var $a=class{map=new Map;set(t,n){return this.map.set(t,n),this}get(t){return this.map.has(t)||this.map.set(t,t.defaultValue()),this.map.get(t)}delete(t){return this.map.delete(t),this}has(t){return this.map.has(t)}keys(){return this.map.keys()}},Ua=class{encodeKey(t){return Fv(t)}encodeValue(t){return Fv(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}};function qS(e,t){let n=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(o=>{let i=o.indexOf("="),[s,u]=i==-1?[t.decodeKey(o),""]:[t.decodeKey(o.slice(0,i)),t.decodeValue(o.slice(i+1))],a=n.get(s)||[];a.push(u),n.set(s,a)}),n}var GS=/%(\d[a-f0-9])/gi,WS={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function Fv(e){return encodeURIComponent(e).replace(GS,(t,n)=>WS[n]??t)}function Ha(e){return`${e}`}var tn=class e{map;encoder;updates=null;cloneFrom=null;constructor(t={}){if(this.encoder=t.encoder||new Ua,t.fromString){if(t.fromObject)throw new D(2805,!1);this.map=qS(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(n=>{let r=t.fromObject[n],o=Array.isArray(r)?r.map(Ha):[Ha(r)];this.map.set(n,o)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();let n=this.map.get(t);return n?n[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,n){return this.clone({param:t,value:n,op:"a"})}appendAll(t){let n=[];return Object.keys(t).forEach(r=>{let o=t[r];Array.isArray(o)?o.forEach(i=>{n.push({param:r,value:i,op:"a"})}):n.push({param:r,value:o,op:"a"})}),this.clone(n)}set(t,n){return this.clone({param:t,value:n,op:"s"})}delete(t,n){return this.clone({param:t,value:n,op:"d"})}toString(){return this.init(),this.keys().map(t=>{let n=this.encoder.encodeKey(t);return this.map.get(t).map(r=>n+"="+this.encoder.encodeValue(r)).join("&")}).filter(t=>t!=="").join("&")}clone(t){let n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(t),n}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":let n=(t.op==="a"?this.map.get(t.param):void 0)||[];n.push(Ha(t.value)),this.map.set(t.param,n);break;case"d":if(t.value!==void 0){let r=this.map.get(t.param)||[],o=r.indexOf(Ha(t.value));o!==-1&&r.splice(o,1),r.length>0?this.map.set(t.param,r):this.map.delete(t.param)}else{this.map.delete(t.param);break}}}),this.cloneFrom=this.updates=null)}};function ZS(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function Ov(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function Pv(e){return typeof Blob<"u"&&e instanceof Blob}function Lv(e){return typeof FormData<"u"&&e instanceof FormData}function YS(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var jv="Content-Type",Bv="Accept",Hv="text/plain",$v="application/json",QS=`${$v}, ${Hv}, */*`,Co=class e{url;body=null;headers;context;reportProgress=!1;withCredentials=!1;credentials;keepalive=!1;cache;priority;mode;redirect;referrer;integrity;referrerPolicy;responseType="json";method;params;urlWithParams;transferCache;timeout;constructor(t,n,r,o){this.url=n,this.method=t.toUpperCase();let i;if(ZS(this.method)||o?(this.body=r!==void 0?r:null,i=o):i=r,i){if(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,this.keepalive=!!i.keepalive,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.context&&(this.context=i.context),i.params&&(this.params=i.params),i.priority&&(this.priority=i.priority),i.cache&&(this.cache=i.cache),i.credentials&&(this.credentials=i.credentials),typeof i.timeout=="number"){if(i.timeout<1||!Number.isInteger(i.timeout))throw new D(2822,"");this.timeout=i.timeout}i.mode&&(this.mode=i.mode),i.redirect&&(this.redirect=i.redirect),i.integrity&&(this.integrity=i.integrity),i.referrer&&(this.referrer=i.referrer),i.referrerPolicy&&(this.referrerPolicy=i.referrerPolicy),this.transferCache=i.transferCache}if(this.headers??=new Rn,this.context??=new $a,!this.params)this.params=new tn,this.urlWithParams=n;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=n;else{let u=n.indexOf("?"),a=u===-1?"?":uC.set(k,t.setHeaders[k]),_)),t.setParams&&(E=Object.keys(t.setParams).reduce((C,k)=>C.set(k,t.setParams[k]),E)),new e(n,r,g,{params:E,headers:_,context:N,reportProgress:v,responseType:o,withCredentials:y,transferCache:p,keepalive:i,cache:u,priority:s,timeout:m,mode:a,redirect:c,credentials:l,referrer:d,integrity:h,referrerPolicy:f})}},yr=(function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e})(yr||{}),wo=class{headers;status;statusText;url;ok;type;redirected;responseType;constructor(t,n=200,r="OK"){this.headers=t.headers||new Rn,this.status=t.status!==void 0?t.status:n,this.statusText=t.statusText||r,this.url=t.url||null,this.redirected=t.redirected,this.responseType=t.responseType,this.ok=this.status>=200&&this.status<300}},za=class e extends wo{constructor(t={}){super(t)}type=yr.ResponseHeader;clone(t={}){return new e({headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},Zi=class e extends wo{body;constructor(t={}){super(t),this.body=t.body!==void 0?t.body:null}type=yr.Response;clone(t={}){return new e({body:t.body!==void 0?t.body:this.body,headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0,redirected:t.redirected??this.redirected,responseType:t.responseType??this.responseType})}},_o=class extends wo{name="HttpErrorResponse";message;error;ok=!1;constructor(t){super(t,0,"Unknown Error"),this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${t.url||"(unknown url)"}`:this.message=`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}},KS=200,JS=204;var XS=new x("");var eM=/^\)\]\}',?\n/;var Wp=(()=>{class e{xhrFactory;tracingService=b(ft,{optional:!0});constructor(n){this.xhrFactory=n}maybePropagateTrace(n){return this.tracingService?.propagate?this.tracingService.propagate(n):n}handle(n){if(n.method==="JSONP")throw new D(-2800,!1);let r=this.xhrFactory;return xs(null).pipe(Ns(()=>new B(i=>{let s=r.build();if(s.open(n.method,n.urlWithParams),n.withCredentials&&(s.withCredentials=!0),n.headers.forEach((g,y)=>s.setRequestHeader(g,y.join(","))),n.headers.has(Bv)||s.setRequestHeader(Bv,QS),!n.headers.has(jv)){let g=n.detectContentTypeHeader();g!==null&&s.setRequestHeader(jv,g)}if(n.timeout&&(s.timeout=n.timeout),n.responseType){let g=n.responseType.toLowerCase();s.responseType=g!=="json"?g:"text"}let u=n.serializeBody(),a=null,c=()=>{if(a!==null)return a;let g=s.statusText||"OK",y=new Rn(s.getAllResponseHeaders()),v=s.responseURL||n.url;return a=new za({headers:y,status:s.status,statusText:g,url:v}),a},l=this.maybePropagateTrace(()=>{let{headers:g,status:y,statusText:v,url:_}=c(),E=null;y!==JS&&(E=typeof s.response>"u"?s.responseText:s.response),y===0&&(y=E?KS:0);let N=y>=200&&y<300;if(n.responseType==="json"&&typeof E=="string"){let C=E;E=E.replace(eM,"");try{E=E!==""?JSON.parse(E):null}catch(k){E=C,N&&(N=!1,E={error:k,text:E})}}N?(i.next(new Zi({body:E,headers:g,status:y,statusText:v,url:_||void 0})),i.complete()):i.error(new _o({error:E,headers:g,status:y,statusText:v,url:_||void 0}))}),d=this.maybePropagateTrace(g=>{let{url:y}=c(),v=new _o({error:g,status:s.status||0,statusText:s.statusText||"Unknown Error",url:y||void 0});i.error(v)}),h=d;n.timeout&&(h=this.maybePropagateTrace(g=>{let{url:y}=c(),v=new _o({error:new DOMException("Request timed out","TimeoutError"),status:s.status||0,statusText:s.statusText||"Request timeout",url:y||void 0});i.error(v)}));let f=!1,p=this.maybePropagateTrace(g=>{f||(i.next(c()),f=!0);let y={type:yr.DownloadProgress,loaded:g.loaded};g.lengthComputable&&(y.total=g.total),n.responseType==="text"&&s.responseText&&(y.partialText=s.responseText),i.next(y)}),m=this.maybePropagateTrace(g=>{let y={type:yr.UploadProgress,loaded:g.loaded};g.lengthComputable&&(y.total=g.total),i.next(y)});return s.addEventListener("load",l),s.addEventListener("error",d),s.addEventListener("timeout",h),s.addEventListener("abort",d),n.reportProgress&&(s.addEventListener("progress",p),u!==null&&s.upload&&s.upload.addEventListener("progress",m)),s.send(u),i.next({type:yr.Sent}),()=>{s.removeEventListener("error",d),s.removeEventListener("abort",d),s.removeEventListener("load",l),s.removeEventListener("timeout",h),n.reportProgress&&(s.removeEventListener("progress",p),u!==null&&s.upload&&s.upload.removeEventListener("progress",m)),s.readyState!==s.DONE&&s.abort()}})))}static \u0275fac=function(r){return new(r||e)(A(mr))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Uv(e,t){return t(e)}function tM(e,t){return(n,r)=>t.intercept(n,{handle:o=>e(o,r)})}function nM(e,t,n){return(r,o)=>Ur(n,()=>t(r,i=>e(i,o)))}var zv=new x(""),Zp=new x("",{factory:()=>[]}),qv=new x(""),Yp=new x("",{factory:()=>!0});function rM(){let e=null;return(t,n)=>{e===null&&(e=(b(zv,{optional:!0})??[]).reduceRight(tM,Uv));let r=b(ir);if(b(Yp)){let i=r.add();return e(t,n).pipe(Ms(i))}else return e(t,n)}}var Qp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(Wp),o},providedIn:"root"})}return e})();var qa=(()=>{class e{backend;injector;chain=null;pendingTasks=b(ir);contributeToStability=b(Yp);constructor(n,r){this.backend=n,this.injector=r}handle(n){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(Zp),...this.injector.get(qv,[])]));this.chain=r.reduceRight((o,i)=>nM(o,i,this.injector),Uv)}if(this.contributeToStability){let r=this.pendingTasks.add();return this.chain(n,o=>this.backend.handle(o)).pipe(Ms(r))}else return this.chain(n,r=>this.backend.handle(r))}static \u0275fac=function(r){return new(r||e)(A(Qp),A(Ae))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Kp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(qa),o},providedIn:"root"})}return e})();function Gp(e,t){return{body:t,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,credentials:e.credentials,transferCache:e.transferCache,timeout:e.timeout,keepalive:e.keepalive,priority:e.priority,cache:e.cache,mode:e.mode,redirect:e.redirect,integrity:e.integrity,referrer:e.referrer,referrerPolicy:e.referrerPolicy}}var Gv=(()=>{class e{handler;constructor(n){this.handler=n}request(n,r,o={}){let i;if(n instanceof Co)i=n;else{let a;o.headers instanceof Rn?a=o.headers:a=new Rn(o.headers);let c;o.params&&(o.params instanceof tn?c=o.params:c=new tn({fromObject:o.params})),i=new Co(n,r,o.body!==void 0?o.body:null,{headers:a,context:o.context,params:c,reportProgress:o.reportProgress,responseType:o.responseType||"json",withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive,priority:o.priority,cache:o.cache,mode:o.mode,redirect:o.redirect,credentials:o.credentials,referrer:o.referrer,referrerPolicy:o.referrerPolicy,integrity:o.integrity,timeout:o.timeout})}let s=xs(i).pipe(Oc(a=>this.handler.handle(a)));if(n instanceof Co||o.observe==="events")return s;let u=s.pipe(gn(a=>a instanceof Zi));switch(o.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return u.pipe(Se(a=>{if(a.body!==null&&!(a.body instanceof ArrayBuffer))throw new D(2806,!1);return a.body}));case"blob":return u.pipe(Se(a=>{if(a.body!==null&&!(a.body instanceof Blob))throw new D(2807,!1);return a.body}));case"text":return u.pipe(Se(a=>{if(a.body!==null&&typeof a.body!="string")throw new D(2808,!1);return a.body}));default:return u.pipe(Se(a=>a.body))}case"response":return u;default:throw new D(2809,!1)}}delete(n,r={}){return this.request("DELETE",n,r)}get(n,r={}){return this.request("GET",n,r)}head(n,r={}){return this.request("HEAD",n,r)}jsonp(n,r){return this.request("JSONP",n,{params:new tn().append(r,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(n,r={}){return this.request("OPTIONS",n,r)}patch(n,r,o={}){return this.request("PATCH",n,Gp(o,r))}post(n,r,o={}){return this.request("POST",n,Gp(o,r))}put(n,r,o={}){return this.request("PUT",n,Gp(o,r))}static \u0275fac=function(r){return new(r||e)(A(Kp))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var oM=new x("",{factory:()=>!0}),iM="XSRF-TOKEN",sM=new x("",{factory:()=>iM}),uM="X-XSRF-TOKEN",aM=new x("",{factory:()=>uM}),cM=(()=>{class e{cookieName=b(sM);doc=b(X);lastCookieString="";lastToken=null;parseCount=0;getToken(){let n=this.doc.cookie||"";return n!==this.lastCookieString&&(this.parseCount++,this.lastToken=Ui(n,this.cookieName),this.lastCookieString=n),this.lastToken}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Wv=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(cM),o},providedIn:"root"})}return e})();function lM(e,t){if(!b(oM)||e.method==="GET"||e.method==="HEAD")return t(e);try{let o=b(kn).href,{origin:i}=new URL(o),{origin:s}=new URL(e.url,i);if(i!==s)return t(e)}catch(o){return t(e)}let n=b(Wv).getToken(),r=b(aM);return n!=null&&!e.headers.has(r)&&(e=e.clone({headers:e.headers.set(r,n)})),t(e)}var Jp=(function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e})(Jp||{});function dM(e,t){return{\u0275kind:e,\u0275providers:t}}function Zv(...e){let t=[Gv,qa,{provide:Kp,useExisting:qa},{provide:Qp,useFactory:()=>b(XS,{optional:!0})??b(Wp)},{provide:Zp,useValue:lM,multi:!0}];for(let n of e)t.push(...n.\u0275providers);return Yn(t)}var Vv=new x("");function Yv(){return dM(Jp.LegacyInterceptors,[{provide:Vv,useFactory:rM},{provide:Zp,useExisting:Vv,multi:!0}])}var fM=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Kt({type:e});static \u0275inj=It({providers:[Zv(Yv())]})}return e})();var cU=(()=>{class e{_doc;constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static \u0275fac=function(r){return new(r||e)(A(X))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Xp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(pM),o},providedIn:"root"})}return e})(),pM=(()=>{class e extends Xp{_doc;constructor(n){super(),this._doc=n}sanitize(n,r){if(r==null)return null;switch(n){case ze.NONE:return r;case ze.HTML:return Yt(r,"HTML")?Ue(r):Vu(this._doc,String(r)).toString();case ze.STYLE:return Yt(r,"Style")?Ue(r):r;case ze.SCRIPT:if(Yt(r,"Script"))return Ue(r);throw new D(5200,!1);case ze.URL:return Yt(r,"URL")?Ue(r):Ei(String(r));case ze.RESOURCE_URL:if(Yt(r,"ResourceURL"))return Ue(r);throw new D(5201,!1);default:throw new D(5202,!1)}}bypassSecurityTrustHtml(n){return Bd(n)}bypassSecurityTrustStyle(n){return Vd(n)}bypassSecurityTrustScript(n){return Hd(n)}bypassSecurityTrustUrl(n){return $d(n)}bypassSecurityTrustResourceUrl(n){return Ud(n)}static \u0275fac=function(r){return new(r||e)(A(X))};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var ah={};xr(ah,{arrayReplaceAt:()=>uh,assign:()=>To,escapeHtml:()=>on,escapeRE:()=>QM,fromCodePoint:()=>Ki,has:()=>BM,isMdAsciiPunct:()=>Er,isPunctChar:()=>Dr,isSpace:()=>H,isString:()=>rc,isValidEntityCode:()=>oc,isWhiteSpace:()=>vr,lib:()=>KM,normalizeReference:()=>Cr,unescapeAll:()=>rn,unescapeMd:()=>zM});var Qa={};xr(Qa,{decode:()=>Yi,encode:()=>Za,format:()=>xo,parse:()=>Qi});var Qv={};function hM(e){let t=Qv[e];if(t)return t;t=Qv[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);t.push(r)}for(let n=0;n=55296&&l<=57343?o+="\uFFFD\uFFFD\uFFFD":o+=String.fromCharCode(l),i+=6;continue}}if((u&248)===240&&i+91114111?o+="\uFFFD\uFFFD\uFFFD\uFFFD":(d-=65536,o+=String.fromCharCode(55296+(d>>10),56320+(d&1023))),i+=9;continue}}o+="\uFFFD"}return o})}Ga.defaultChars=";/?:@&=+$,#";Ga.componentChars="";var Yi=Ga;var Kv={};function gM(e){let t=Kv[e];if(t)return t;t=Kv[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);/^[0-9a-z]$/i.test(r)?t.push(r):t.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2))}for(let n=0;n"u"&&(n=!0);let r=gM(t),o="";for(let i=0,s=e.length;i=55296&&u<=57343){if(u>=55296&&u<=56319&&i+1=56320&&a<=57343){o+=encodeURIComponent(e[i]+e[i+1]),i++;continue}}o+="%EF%BF%BD";continue}o+=encodeURIComponent(e[i])}return o}Wa.defaultChars=";/?:@&=+$,-_.!~*'()#";Wa.componentChars="-_.!~*'()";var Za=Wa;function xo(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function Ya(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var mM=/^([a-z0-9.+-]+:)/i,yM=/:[0-9]*$/,bM=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,vM=["<",">",'"',"`"," ","\r",` +`," "],DM=["{","}","|","\\","^","`"].concat(vM),EM=["'"].concat(DM),Jv=["%","/","?",";","#"].concat(EM),Xv=["/","?","#"],CM=255,eD=/^[+a-z0-9A-Z_-]{0,63}$/,_M=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,tD={javascript:!0,"javascript:":!0},nD={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function wM(e,t){if(e&&e instanceof Ya)return e;let n=new Ya;return n.parse(e,t),n}Ya.prototype.parse=function(e,t){let n,r,o,i=e;if(i=i.trim(),!t&&e.split("#").length===1){let c=bM.exec(i);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}let s=mM.exec(i);if(s&&(s=s[0],n=s.toLowerCase(),this.protocol=s,i=i.substr(s.length)),(t||s||i.match(/^\/\/[^@\/]+@[^@\/]+/))&&(o=i.substr(0,2)==="//",o&&!(s&&tD[s])&&(i=i.substr(2),this.slashes=!0)),!tD[s]&&(o||s&&!nD[s])){let c=-1;for(let p=0;p127?v+="x":v+=y[_];if(!v.match(eD)){let _=p.slice(0,m),E=p.slice(m+1),N=y.match(_M);N&&(_.push(N[1]),E.unshift(N[2])),E.length&&(i=E.join(".")+i),this.hostname=_.join(".");break}}}}this.hostname.length>CM&&(this.hostname=""),f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}let u=i.indexOf("#");u!==-1&&(this.hash=i.substr(u),i=i.slice(0,u));let a=i.indexOf("?");return a!==-1&&(this.search=i.substr(a),i=i.slice(0,a)),i&&(this.pathname=i),nD[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this};Ya.prototype.parseHost=function(e){let t=yM.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Qi=wM;var eh={};xr(eh,{Any:()=>Ka,Cc:()=>Ja,Cf:()=>rD,P:()=>Io,S:()=>Xa,Z:()=>ec});var Ka=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;var Ja=/[\0-\x1F\x7F-\x9F]/;var rD=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;var Io=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;var Xa=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;var ec=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var oD=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(e=>e.charCodeAt(0)));var iD=new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(e=>e.charCodeAt(0)));var th,xM=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),nh=(th=String.fromCodePoint)!==null&&th!==void 0?th:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function rh(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=xM.get(e))!==null&&t!==void 0?t:e}var ve=(function(e){return e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z",e})(ve||{}),IM=32,br=(function(e){return e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE",e})(br||{});function oh(e){return e>=ve.ZERO&&e<=ve.NINE}function TM(e){return e>=ve.UPPER_A&&e<=ve.UPPER_F||e>=ve.LOWER_A&&e<=ve.LOWER_F}function SM(e){return e>=ve.UPPER_A&&e<=ve.UPPER_Z||e>=ve.LOWER_A&&e<=ve.LOWER_Z||oh(e)}function MM(e){return e===ve.EQUALS||SM(e)}var be=(function(e){return e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity",e})(be||{}),nn=(function(e){return e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute",e})(nn||{}),tc=class{constructor(t,n,r){this.decodeTree=t,this.emitCodePoint=n,this.errors=r,this.state=be.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=nn.Strict}startEntity(t){this.decodeMode=t,this.state=be.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,n){switch(this.state){case be.EntityStart:return t.charCodeAt(n)===ve.NUM?(this.state=be.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=be.NamedEntity,this.stateNamedEntity(t,n));case be.NumericStart:return this.stateNumericStart(t,n);case be.NumericDecimal:return this.stateNumericDecimal(t,n);case be.NumericHex:return this.stateNumericHex(t,n);case be.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|IM)===ve.LOWER_X?(this.state=be.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=be.NumericDecimal,this.stateNumericDecimal(t,n))}addToNumericResult(t,n,r,o){if(n!==r){let i=r-n;this.result=this.result*Math.pow(o,i)+parseInt(t.substr(n,i),o),this.consumed+=i}}stateNumericHex(t,n){let r=n;for(;n>14;for(;n>14,i!==0){if(s===ve.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==nn.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;let{result:n,decodeTree:r}=this,o=(r[n]&br.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,o,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,r){let{decodeTree:o}=this;return this.emitCodePoint(n===1?o[t]&~br.VALUE_LENGTH:o[t+1],r),n===3&&this.emitCodePoint(o[t+2],r),r}end(){var t;switch(this.state){case be.NamedEntity:return this.result!==0&&(this.decodeMode!==nn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case be.NumericDecimal:return this.emitNumericEntity(0,2);case be.NumericHex:return this.emitNumericEntity(0,3);case be.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case be.EntityStart:return 0}}};function sD(e){let t="",n=new tc(e,r=>t+=nh(r));return function(o,i){let s=0,u=0;for(;(u=o.indexOf("&",u))>=0;){t+=o.slice(s,u),n.startEntity(i);let c=n.write(o,u+1);if(c<0){s=u+n.end();break}s=u+c,u=c===0?s+1:s}let a=t+o.slice(s);return t="",a}}function AM(e,t,n,r){let o=(t&br.BRANCH_LENGTH)>>7,i=t&br.JUMP_TABLE;if(o===0)return i!==0&&r===i?n:-1;if(i){let a=r-i;return a<0||a>=o?-1:e[n+a]-1}let s=n,u=s+o-1;for(;s<=u;){let a=s+u>>>1,c=e[a];if(cr)u=a-1;else return e[a+o]}return-1}var NM=sD(oD),BU=sD(iD);function Fn(e,t=nn.Legacy){return NM(e,t)}function nc(e){for(let t=1;te.codePointAt(t):(e,t)=>(e.charCodeAt(t)&64512)===55296?(e.charCodeAt(t)-55296)*1024+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function ih(e,t){return function(r){let o,i=0,s="";for(;o=e.exec(r);)i!==o.index&&(s+=r.substring(i,o.index)),s+=t.get(o[0].charCodeAt(0)),i=o.index+1;return s+r.substring(i)}}var uD=ih(/[&<>'"]/g,RM),aD=ih(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),cD=ih(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));function LM(e){return Object.prototype.toString.call(e)}function rc(e){return LM(e)==="[object String]"}var jM=Object.prototype.hasOwnProperty;function BM(e,t){return jM.call(e,t)}function To(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){if(n){if(typeof n!="object")throw new TypeError(n+"must be object");Object.keys(n).forEach(function(r){e[r]=n[r]})}}),e}function uh(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function oc(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function Ki(e){if(e>65535){e-=65536;let t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var fD=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,VM=/&([a-z#][a-z0-9]{1,31});/gi,HM=new RegExp(fD.source+"|"+VM.source,"gi"),$M=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function UM(e,t){if(t.charCodeAt(0)===35&&$M.test(t)){let r=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return oc(r)?Ki(r):e}let n=Fn(e);return n!==e?n:e}function zM(e){return e.indexOf("\\")<0?e:e.replace(fD,"$1")}function rn(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(HM,function(t,n,r){return n||UM(t,r)})}var qM=/[&<>"]/,GM=/[&<>"]/g,WM={"&":"&","<":"<",">":">",'"':"""};function ZM(e){return WM[e]}function on(e){return qM.test(e)?e.replace(GM,ZM):e}var YM=/[.?*+^$[\]\\(){}|-]/g;function QM(e){return e.replace(YM,"\\$&")}function H(e){switch(e){case 9:case 32:return!0}return!1}function vr(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function Dr(e){return Io.test(e)||Xa.test(e)}function Er(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function Cr(e){return e=e.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(e=e.replace(/ẞ/g,"\xDF")),e.toLowerCase().toUpperCase()}var KM={mdurl:Qa,ucmicro:eh};var fh={};xr(fh,{parseLinkDestination:()=>lh,parseLinkLabel:()=>ch,parseLinkTitle:()=>dh});function ch(e,t,n){let r,o,i,s,u=e.posMax,a=e.pos;for(e.pos=t+1,r=1;e.pos32))return i;if(r===41){if(s===0)break;s--}o++}return t===o||s!==0||(i.str=rn(e.slice(t,o)),i.pos=o,i.ok=!0),i}function dh(e,t,n,r){let o,i=t,s={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)s.str=r.str,s.marker=r.marker;else{if(i>=n)return s;let u=e.charCodeAt(i);if(u!==34&&u!==39&&u!==40)return s;t++,i++,u===40&&(u=41),s.marker=u}for(;i"+on(i.content)+""};Ft.code_block=function(e,t,n,r,o){let i=e[t];return""+on(e[t].content)+` +`};Ft.fence=function(e,t,n,r,o){let i=e[t],s=i.info?rn(i.info).trim():"",u="",a="";if(s){let l=s.split(/(\s+)/g);u=l[0],a=l.slice(2).join("")}let c;if(n.highlight?c=n.highlight(i.content,u,a)||on(i.content):c=on(i.content),c.indexOf("${c} +`}return`
${c}
+`};Ft.image=function(e,t,n,r,o){let i=e[t];return i.attrs[i.attrIndex("alt")][1]=o.renderInlineAsText(i.children,n,r),o.renderToken(e,t,n)};Ft.hardbreak=function(e,t,n){return n.xhtmlOut?`
+`:`
+`};Ft.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?`
+`:`
+`:` +`};Ft.text=function(e,t){return on(e[t].content)};Ft.html_block=function(e,t){return e[t].content};Ft.html_inline=function(e,t){return e[t].content};function So(){this.rules=To({},Ft)}So.prototype.renderAttrs=function(t){let n,r,o;if(!t.attrs)return"";for(o="",n=0,r=t.attrs.length;n +`:">",i};So.prototype.renderInline=function(e,t,n){let r="",o=this.rules;for(let i=0,s=e.length;i=0&&(r=this.attrs[n][1]),r};Mo.prototype.attrJoin=function(t,n){let r=this.attrIndex(t);r<0?this.attrPush([t,n]):this.attrs[r][1]=this.attrs[r][1]+" "+n};var sn=Mo;function hD(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}hD.prototype.Token=sn;var gD=hD;var JM=/\r\n?|\n/g,XM=/\0/g;function ph(e){let t;t=e.src.replace(JM,` +`),t=t.replace(XM,"\uFFFD"),e.src=t}function hh(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}function gh(e){let t=e.tokens;for(let n=0,r=t.length;n\s]/i.test(e)}function tA(e){return/^<\/a\s*>/i.test(e)}function mh(e){let t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n=0;s--){let u=o[s];if(u.type==="link_close"){for(s--;o[s].level!==u.level&&o[s].type!=="link_open";)s--;continue}if(u.type==="html_inline"&&(eA(u.content)&&i>0&&i--,tA(u.content)&&i++),!(i>0)&&u.type==="text"&&e.md.linkify.test(u.content)){let a=u.content,c=e.md.linkify.match(a),l=[],d=u.level,h=0;c.length>0&&c[0].index===0&&s>0&&o[s-1].type==="text_special"&&(c=c.slice(1));for(let f=0;fh){let N=new e.Token("text","",0);N.content=a.slice(h,y),N.level=d,l.push(N)}let v=new e.Token("link_open","a",1);v.attrs=[["href",m]],v.level=d++,v.markup="linkify",v.info="auto",l.push(v);let _=new e.Token("text","",0);_.content=g,_.level=d,l.push(_);let E=new e.Token("link_close","a",-1);E.level=--d,E.markup="linkify",E.info="auto",l.push(E),h=c[f].lastIndex}if(h=0;n--){let r=e[n];r.type==="text"&&!t&&(r.content=r.content.replace(rA,iA)),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function uA(e){let t=0;for(let n=e.length-1;n>=0;n--){let r=e[n];r.type==="text"&&!t&&mD.test(r.content)&&(r.content=r.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function yh(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)e.tokens[t].type==="inline"&&(nA.test(e.tokens[t].content)&&sA(e.tokens[t].children),mD.test(e.tokens[t].content)&&uA(e.tokens[t].children))}var aA=/['"]/,yD=/['"]/g,bD="\u2019";function ic(e,t,n){return e.slice(0,t)+n+e.slice(t+1)}function cA(e,t){let n,r=[];for(let o=0;o=0&&!(r[n].level<=s);n--);if(r.length=n+1,i.type!=="text")continue;let u=i.content,a=0,c=u.length;e:for(;a=0)p=u.charCodeAt(l.index-1);else for(n=o-1;n>=0&&!(e[n].type==="softbreak"||e[n].type==="hardbreak");n--)if(e[n].content){p=e[n].content.charCodeAt(e[n].content.length-1);break}let m=32;if(a=48&&p<=57&&(h=d=!1),d&&h&&(d=g,h=y),!d&&!h){f&&(i.content=ic(i.content,l.index,bD));continue}if(h)for(n=r.length-1;n>=0;n--){let E=r[n];if(r[n].level=0;t--)e.tokens[t].type!=="inline"||!aA.test(e.tokens[t].content)||cA(e.tokens[t].children,e)}function vh(e){let t,n,r=e.tokens,o=r.length;for(let i=0;i0&&this.level++,this.tokens.push(r),r};Ot.prototype.isEmpty=function(t){return this.bMarks[t]+this.tShift[t]>=this.eMarks[t]};Ot.prototype.skipEmptyLines=function(t){for(let n=this.lineMax;tn;)if(!H(this.src.charCodeAt(--t)))return t+1;return t};Ot.prototype.skipChars=function(t,n){for(let r=this.src.length;tr;)if(n!==this.src.charCodeAt(--t))return t+1;return t};Ot.prototype.getLines=function(t,n,r,o){if(t>=n)return"";let i=new Array(n-t);for(let s=0,u=t;ur?i[s]=new Array(a-r+1).join(" ")+this.src.slice(l,d):i[s]=this.src.slice(l,d)}return i.join("")};Ot.prototype.Token=sn;var DD=Ot;var lA=65536;function Ch(e,t){let n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function ED(e){let t=[],n=e.length,r=0,o=e.charCodeAt(r),i=!1,s=0,u="";for(;rn)return!1;let o=t+1;if(e.sCount[o]=4)return!1;let i=e.bMarks[o]+e.tShift[o];if(i>=e.eMarks[o])return!1;let s=e.src.charCodeAt(i++);if(s!==124&&s!==45&&s!==58||i>=e.eMarks[o])return!1;let u=e.src.charCodeAt(i++);if(u!==124&&u!==45&&u!==58&&!H(u)||s===45&&H(u))return!1;for(;i=4)return!1;c=ED(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop();let d=c.length;if(d===0||d!==l.length)return!1;if(r)return!0;let h=e.parentType;e.parentType="table";let f=e.md.block.ruler.getRules("blockquote"),p=e.push("table_open","table",1),m=[t,0];p.map=m;let g=e.push("thead_open","thead",1);g.map=[t,t+1];let y=e.push("tr_open","tr",1);y.map=[t,t+1];for(let E=0;E=4||(c=ED(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop(),_+=d-c.length,_>lA))break;if(o===t+2){let C=e.push("tbody_open","tbody",1);C.map=v=[t+2,0]}let N=e.push("tr_open","tr",1);N.map=[o,o+1];for(let C=0;C=4){r++,o=r;continue}break}e.line=o;let i=e.push("code_block","code",0);return i.content=e.getLines(t,o,4+e.blkIndent,!1)+` +`,i.map=[t,e.line],!0}function xh(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||o+3>i)return!1;let s=e.src.charCodeAt(o);if(s!==126&&s!==96)return!1;let u=o;o=e.skipChars(o,s);let a=o-u;if(a<3)return!1;let c=e.src.slice(u,o),l=e.src.slice(o,i);if(s===96&&l.indexOf(String.fromCharCode(s))>=0)return!1;if(r)return!0;let d=t,h=!1;for(;d++,!(d>=n||(o=u=e.bMarks[d]+e.tShift[d],i=e.eMarks[d],o=4)&&(o=e.skipChars(o,s),!(o-u=4||e.src.charCodeAt(o)!==62)return!1;if(r)return!0;let u=[],a=[],c=[],l=[],d=e.md.block.ruler.getRules("blockquote"),h=e.parentType;e.parentType="blockquote";let f=!1,p;for(p=t;p=i)break;if(e.src.charCodeAt(o++)===62&&!_){let N=e.sCount[p]+1,C,k;e.src.charCodeAt(o)===32?(o++,N++,k=!1,C=!0):e.src.charCodeAt(o)===9?(C=!0,(e.bsCount[p]+N)%4===3?(o++,N++,k=!1):k=!0):C=!1;let O=N;for(u.push(e.bMarks[p]),e.bMarks[p]=o;o=i,a.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(C?1:0),c.push(e.sCount[p]),e.sCount[p]=O-N,l.push(e.tShift[p]),e.tShift[p]=o-e.bMarks[p];continue}if(f)break;let E=!1;for(let N=0,C=d.length;N";let y=[t,0];g.map=y,e.md.block.tokenize(e,t,p);let v=e.push("blockquote_close","blockquote",-1);v.markup=">",e.lineMax=s,e.parentType=h,y[1]=e.line;for(let _=0;_=4)return!1;let i=e.bMarks[t]+e.tShift[t],s=e.src.charCodeAt(i++);if(s!==42&&s!==45&&s!==95)return!1;let u=1;for(;i=r)return-1;let i=e.src.charCodeAt(o++);if(i<48||i>57)return-1;for(;;){if(o>=r)return-1;if(i=e.src.charCodeAt(o++),i>=48&&i<=57){if(o-n>=10)return-1;continue}if(i===41||i===46)break;return-1}return o=4||e.listIndent>=0&&e.sCount[a]-e.listIndent>=4&&e.sCount[a]=e.blkIndent&&(l=!0);let d,h,f;if((f=_D(e,a))>=0){if(d=!0,s=e.bMarks[a]+e.tShift[a],h=Number(e.src.slice(s,f-1)),l&&h!==1)return!1}else if((f=CD(e,a))>=0)d=!1;else return!1;if(l&&e.skipSpaces(f)>=e.eMarks[a])return!1;if(r)return!0;let p=e.src.charCodeAt(f-1),m=e.tokens.length;d?(u=e.push("ordered_list_open","ol",1),h!==1&&(u.attrs=[["start",h]])):u=e.push("bullet_list_open","ul",1);let g=[a,0];u.map=g,u.markup=String.fromCharCode(p);let y=!1,v=e.md.block.ruler.getRules("list"),_=e.parentType;for(e.parentType="list";a=o?k=1:k=N-E,k>4&&(k=1);let O=E+k;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(p);let te=[a,0];u.map=te,d&&(u.info=e.src.slice(s,f-1));let bt=e.tight,No=e.tShift[a],es=e.sCount[a],QD=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=O,e.tight=!0,e.tShift[a]=C-e.bMarks[a],e.sCount[a]=N,C>=o&&e.isEmpty(a+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,a,n,!0),(!e.tight||y)&&(c=!1),y=e.line-a>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=QD,e.tShift[a]=No,e.sCount[a]=es,e.tight=bt,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(p),a=e.line,te[1]=a,a>=n||e.sCount[a]=4)break;let i0=!1;for(let wr=0,KD=v.length;wr=4||e.src.charCodeAt(o)!==91)return!1;function u(v){let _=e.lineMax;if(v>=_||e.isEmpty(v))return null;let E=!1;if(e.sCount[v]-e.blkIndent>3&&(E=!0),e.sCount[v]<0&&(E=!0),!E){let k=e.md.block.ruler.getRules("reference"),O=e.parentType;e.parentType="reference";let te=!1;for(let bt=0,No=k.length;bt"u"&&(e.env.references={}),typeof e.env.references[y]>"u"&&(e.env.references[y]={title:g,href:d}),e.line=s),!0):!1}var wD=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"];var fA="[a-zA-Z_:][a-zA-Z0-9:._-]*",pA="[^\"'=<>`\\x00-\\x20]+",hA="'[^']*'",gA='"[^"]*"',mA="(?:"+pA+"|"+hA+"|"+gA+")",yA="(?:\\s+"+fA+"(?:\\s*=\\s*"+mA+")?)",xD="<[A-Za-z][A-Za-z0-9\\-]*"+yA+"*\\s*\\/?>",ID="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",bA="",vA="<[?][\\s\\S]*?[?]>",DA="]*>",EA="",TD=new RegExp("^(?:"+xD+"|"+ID+"|"+bA+"|"+vA+"|"+DA+"|"+EA+")"),SD=new RegExp("^(?:"+xD+"|"+ID+")");var Ao=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(SD.source+"\\s*$"),/^$/,!1]];function Ah(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(o)!==60)return!1;let s=e.src.slice(o,i),u=0;for(;u=4)return!1;let s=e.src.charCodeAt(o);if(s!==35||o>=i)return!1;let u=1;for(s=e.src.charCodeAt(++o);s===35&&o6||oo&&H(e.src.charCodeAt(a-1))&&(i=a),e.line=t+1;let c=e.push("heading_open","h"+String(u),1);c.markup="########".slice(0,u),c.map=[t,e.line];let l=e.push("inline","",0);l.content=e.src.slice(o,i).trim(),l.map=[t,e.line],l.children=[];let d=e.push("heading_close","h"+String(u),-1);return d.markup="########".slice(0,u),!0}function kh(e,t,n){let r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;let o=e.parentType;e.parentType="paragraph";let i=0,s,u=t+1;for(;u3)continue;if(e.sCount[u]>=e.blkIndent){let f=e.bMarks[u]+e.tShift[u],p=e.eMarks[u];if(f=p))){i=s===61?1:2;break}}if(e.sCount[u]<0)continue;let h=!1;for(let f=0,p=r.length;f3||e.sCount[i]<0)continue;let c=!1;for(let l=0,d=r.length;l=n||e.sCount[s]=i){e.line=n;break}let a=e.line,c=!1;for(let l=0;l=e.line)throw new Error("block rule didn't increment state.line");break}if(!c)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),s=e.line,s0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r};Ji.prototype.scanDelims=function(e,t){let n=this.posMax,r=this.src.charCodeAt(e),o=e>0?this.src.charCodeAt(e-1):32,i=e;for(;i0)return!1;let n=e.pos,r=e.posMax;if(n+3>r||e.src.charCodeAt(n)!==58||e.src.charCodeAt(n+1)!==47||e.src.charCodeAt(n+2)!==47)return!1;let o=e.pending.match(_A);if(!o)return!1;let i=o[1],s=e.md.linkify.matchAtStart(e.src.slice(n-i.length));if(!s)return!1;let u=s.url;if(u.length<=i.length)return!1;let a=u.length;for(;a>0&&u.charCodeAt(a-1)===42;)a--;a!==u.length&&(u=u.slice(0,a));let c=e.md.normalizeLink(u);if(!e.md.validateLink(c))return!1;if(!t){e.pending=e.pending.slice(0,-i.length);let l=e.push("link_open","a",1);l.attrs=[["href",c]],l.markup="linkify",l.info="auto";let d=e.push("text","",0);d.content=e.md.normalizeLinkText(u);let h=e.push("link_close","a",-1);h.markup="linkify",h.info="auto"}return e.pos+=u.length-i.length,!0}function Ph(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==10)return!1;let r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&e.pending.charCodeAt(r)===32)if(r>=1&&e.pending.charCodeAt(r-1)===32){let i=r-1;for(;i>=1&&e.pending.charCodeAt(i-1)===32;)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n?@[]^_`{|}~-".split("").forEach(function(e){Lh[e.charCodeAt(0)]=1});function jh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==92||(n++,n>=r))return!1;let o=e.src.charCodeAt(n);if(o===10){for(t||e.push("hardbreak","br",0),n++;n=55296&&o<=56319&&n+1=56320&&u<=57343&&(i+=e.src[n+1],n++)}let s="\\"+i;if(!t){let u=e.push("text_special","",0);o<256&&Lh[o]!==0?u.content=i:u.content=s,u.markup=s,u.info="escape"}return e.pos=n+1,!0}function Bh(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==96)return!1;let o=n;n++;let i=e.posMax;for(;n=0;r--){let o=t[r];if(o.marker!==95&&o.marker!==42||o.end===-1)continue;let i=t[o.end],s=r>0&&t[r-1].end===o.end+1&&t[r-1].marker===o.marker&&t[r-1].token===o.token-1&&t[o.end+1].token===i.token+1,u=String.fromCharCode(o.marker),a=e.tokens[o.token];a.type=s?"strong_open":"em_open",a.tag=s?"strong":"em",a.nesting=1,a.markup=s?u+u:u,a.content="";let c=e.tokens[i.token];c.type=s?"strong_close":"em_close",c.tag=s?"strong":"em",c.nesting=-1,c.markup=s?u+u:u,c.content="",s&&(e.tokens[t[r-1].token].content="",e.tokens[t[o.end+1].token].content="",r--)}}function TA(e){let t=e.tokens_meta,n=e.tokens_meta.length;kD(e,e.delimiters);for(let r=0;r=d)return!1;if(a=p,o=e.md.helpers.parseLinkDestination(e.src,p,e.posMax),o.ok){for(s=e.md.normalizeLink(o.str),e.md.validateLink(s)?p=o.pos:s="",a=p;p=d||e.src.charCodeAt(p)!==41)&&(c=!0),p++}if(c){if(typeof e.env.references>"u")return!1;if(p=0?r=e.src.slice(a,p++):p=f+1):p=f+1,r||(r=e.src.slice(h,f)),i=e.env.references[Cr(r)],!i)return e.pos=l,!1;s=i.href,u=i.title}if(!t){e.pos=h,e.posMax=f;let m=e.push("link_open","a",1),g=[["href",s]];m.attrs=g,u&&g.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=p,e.posMax=d,!0}function Uh(e,t){let n,r,o,i,s,u,a,c,l="",d=e.pos,h=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91)return!1;let f=e.pos+2,p=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(p<0)return!1;if(i=p+1,i=h)return!1;for(c=i,u=e.md.helpers.parseLinkDestination(e.src,i,e.posMax),u.ok&&(l=e.md.normalizeLink(u.str),e.md.validateLink(l)?i=u.pos:l=""),c=i;i=h||e.src.charCodeAt(i)!==41)return e.pos=d,!1;i++}else{if(typeof e.env.references>"u")return!1;if(i=0?o=e.src.slice(c,i++):i=p+1):i=p+1,o||(o=e.src.slice(f,p)),s=e.env.references[Cr(o)],!s)return e.pos=d,!1;l=s.href,a=s.title}if(!t){r=e.src.slice(f,p);let m=[];e.md.inline.parse(r,e.md,e.env,m);let g=e.push("image","img",0),y=[["src",l],["alt",""]];g.attrs=y,g.children=m,g.content=r,a&&y.push(["title",a])}return e.pos=i,e.posMax=h,!0}var SA=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,MA=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;function zh(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==60)return!1;let r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;let s=e.src.charCodeAt(n);if(s===60)return!1;if(s===62)break}let i=e.src.slice(r+1,n);if(MA.test(i)){let s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}if(SA.test(i)){let s=e.md.normalizeLink("mailto:"+i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}return!1}function AA(e){return/^\s]/i.test(e)}function NA(e){return/^<\/a\s*>/i.test(e)}function kA(e){let t=e|32;return t>=97&&t<=122}function qh(e,t){if(!e.md.options.html)return!1;let n=e.posMax,r=e.pos;if(e.src.charCodeAt(r)!==60||r+2>=n)return!1;let o=e.src.charCodeAt(r+1);if(o!==33&&o!==63&&o!==47&&!kA(o))return!1;let i=e.src.slice(r).match(TD);if(!i)return!1;if(!t){let s=e.push("html_inline","",0);s.content=i[0],AA(s.content)&&e.linkLevel++,NA(s.content)&&e.linkLevel--}return e.pos+=i[0].length,!0}var RA=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,FA=/^&([a-z][a-z0-9]{1,31});/i;function Gh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==38||n+1>=r)return!1;if(e.src.charCodeAt(n+1)===35){let i=e.src.slice(n).match(RA);if(i){if(!t){let s=i[1][0].toLowerCase()==="x"?parseInt(i[1].slice(1),16):parseInt(i[1],10),u=e.push("text_special","",0);u.content=oc(s)?Ki(s):Ki(65533),u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}else{let i=e.src.slice(n).match(FA);if(i){let s=Fn(i[0]);if(s!==i[0]){if(!t){let u=e.push("text_special","",0);u.content=s,u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}}return!1}function RD(e){let t={},n=e.length;if(!n)return;let r=0,o=-2,i=[];for(let s=0;sa;c-=i[c]+1){let d=e[c];if(d.marker===u.marker&&d.open&&d.end<0){let h=!1;if((d.close||u.open)&&(d.length+u.length)%3===0&&(d.length%3!==0||u.length%3!==0)&&(h=!0),!h){let f=c>0&&!e[c-1].open?i[c-1]+1:0;i[s]=s-c+f,i[c]=f,u.open=!1,d.end=s,d.close=!1,l=-1,o=-2;break}}}l!==-1&&(t[u.marker][(u.open?3:0)+(u.length||0)%3]=l)}}function Wh(e){let t=e.tokens_meta,n=e.tokens_meta.length;RD(e.delimiters);for(let r=0;r0&&r++,o[t].type==="text"&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;s||e.pos++,i[t]=e.pos};Xi.prototype.tokenize=function(e){let t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}}if(s){if(e.pos>=r)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};Xi.prototype.parse=function(e,t,n,r){let o=new this.State(e,t,n,r);this.tokenize(o);let i=this.ruler2.getRules(""),s=i.length;for(let u=0;u|$))",t.tpl_email_fuzzy="(^|"+n+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}function Kh(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){n&&Object.keys(n).forEach(function(r){e[r]=n[r]})}),e}function cc(e){return Object.prototype.toString.call(e)}function OA(e){return cc(e)==="[object String]"}function PA(e){return cc(e)==="[object Object]"}function LA(e){return cc(e)==="[object RegExp]"}function PD(e){return cc(e)==="[object Function]"}function jA(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var jD={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function BA(e){return Object.keys(e||{}).reduce(function(t,n){return t||jD.hasOwnProperty(n)},!1)}var VA={"http:":{validate:function(e,t,n){let r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){let r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){let r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},HA="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",$A="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function UA(e){e.__index__=-1,e.__text_cache__=""}function zA(e){return function(t,n){let r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}function LD(){return function(e,t){t.normalize(e)}}function ac(e){let t=e.re=OD(e.__opts__),n=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||n.push(HA),n.push(t.src_xn),t.src_tlds=n.join("|");function r(u){return u.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");let o=[];e.__compiled__={};function i(u,a){throw new Error('(LinkifyIt) Invalid schema "'+u+'": '+a)}Object.keys(e.__schemas__).forEach(function(u){let a=e.__schemas__[u];if(a===null)return;let c={validate:null,link:null};if(e.__compiled__[u]=c,PA(a)){LA(a.validate)?c.validate=zA(a.validate):PD(a.validate)?c.validate=a.validate:i(u,a),PD(a.normalize)?c.normalize=a.normalize:a.normalize?i(u,a):c.normalize=LD();return}if(OA(a)){o.push(u);return}i(u,a)}),o.forEach(function(u){e.__compiled__[e.__schemas__[u]]&&(e.__compiled__[u].validate=e.__compiled__[e.__schemas__[u]].validate,e.__compiled__[u].normalize=e.__compiled__[e.__schemas__[u]].normalize)}),e.__compiled__[""]={validate:null,normalize:LD()};let s=Object.keys(e.__compiled__).filter(function(u){return u.length>0&&e.__compiled__[u]}).map(jA).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),UA(e)}function qA(e,t){let n=e.__index__,r=e.__last_index__,o=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=o,this.text=o,this.url=o}function Jh(e,t){let n=new qA(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function Ge(e,t){if(!(this instanceof Ge))return new Ge(e,t);t||BA(e)&&(t=e,e={}),this.__opts__=Kh({},jD,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=Kh({},VA,e),this.__compiled__={},this.__tlds__=$A,this.__tlds_replaced__=!1,this.re={},ac(this)}Ge.prototype.add=function(t,n){return this.__schemas__[t]=n,ac(this),this};Ge.prototype.set=function(t){return this.__opts__=Kh(this.__opts__,t),this};Ge.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;let n,r,o,i,s,u,a,c,l;if(this.re.schema_test.test(t)){for(a=this.re.schema_search,a.lastIndex=0;(n=a.exec(t))!==null;)if(i=this.testSchemaAt(t,n[2],a.lastIndex),i){this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+i;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=t.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(o=t.match(this.re.email_fuzzy))!==null&&(s=o.index+o[1].length,u=o.index+o[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=u))),this.__index__>=0};Ge.prototype.pretest=function(t){return this.re.pretest.test(t)};Ge.prototype.testSchemaAt=function(t,n,r){return this.__compiled__[n.toLowerCase()]?this.__compiled__[n.toLowerCase()].validate(t,r,this):0};Ge.prototype.match=function(t){let n=[],r=0;this.__index__>=0&&this.__text_cache__===t&&(n.push(Jh(this,r)),r=this.__last_index__);let o=r?t.slice(r):t;for(;this.test(o);)n.push(Jh(this,r)),o=o.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};Ge.prototype.matchAtStart=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return null;let n=this.re.schema_at_start.exec(t);if(!n)return null;let r=this.testSchemaAt(t,n[2],n[0].length);return r?(this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+r,Jh(this,0)):null};Ge.prototype.tlds=function(t,n){return t=Array.isArray(t)?t:[t],n?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(r,o,i){return r!==i[o-1]}).reverse(),ac(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,ac(this),this)};Ge.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};Ge.prototype.onCompile=function(){};var BD=Ge;var GA=/^xn--/,WA=/[^\0-\x7F]/,ZA=/[\x2E\u3002\uFF0E\uFF61]/g,YA={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Xh=35,Pt=Math.floor,e0=String.fromCharCode;function On(e){throw new RangeError(YA[e])}function QA(e,t){let n=[],r=e.length;for(;r--;)n[r]=t(e[r]);return n}function HD(e,t){let n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(ZA,".");let o=e.split("."),i=QA(o,t).join(".");return r+i}function $D(e){let t=[],n=0,r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),JA=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:36},VD=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},UD=function(e,t,n){let r=0;for(e=n?Pt(e/700):e>>1,e+=Pt(e/t);e>Xh*26>>1;r+=36)e=Pt(e/Xh);return Pt(r+(Xh+1)*e/(e+38))},zD=function(e){let t=[],n=e.length,r=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&On("not-basic"),t.push(e.charCodeAt(u));for(let u=s>0?s+1:0;u=n&&On("invalid-input");let h=JA(e.charCodeAt(u++));h>=36&&On("invalid-input"),h>Pt((2147483647-r)/l)&&On("overflow"),r+=h*l;let f=d<=i?1:d>=i+26?26:d-i;if(hPt(2147483647/p)&&On("overflow"),l*=p}let c=t.length+1;i=UD(r-a,c,a==0),Pt(r/c)>2147483647-o&&On("overflow"),o+=Pt(r/c),r%=c,t.splice(r++,0,o)}return String.fromCodePoint(...t)},qD=function(e){let t=[];e=$D(e);let n=e.length,r=128,o=0,i=72;for(let a of e)a<128&&t.push(e0(a));let s=t.length,u=s;for(s&&t.push("-");u=r&&lPt((2147483647-o)/c)&&On("overflow"),o+=(a-r)*c,r=a;for(let l of e)if(l2147483647&&On("overflow"),l===r){let d=o;for(let h=36;;h+=36){let f=h<=i?1:h>=i+26?26:h-i;if(d=0))try{t.hostname=t0.toASCII(t.hostname)}catch(n){}return Za(xo(t))}function uN(e){let t=Qi(e,!0);if(t.hostname&&(!t.protocol||YD.indexOf(t.protocol)>=0))try{t.hostname=t0.toUnicode(t.hostname)}catch(n){}return Yi(xo(t),Yi.defaultChars+"%")}function Xe(e,t){if(!(this instanceof Xe))return new Xe(e,t);t||rc(e)||(t=e||{},e="default"),this.inline=new FD,this.block=new MD,this.core=new vD,this.renderer=new pD,this.linkify=new BD,this.validateLink=iN,this.normalizeLink=sN,this.normalizeLinkText=uN,this.utils=ah,this.helpers=To({},fh),this.options={},this.configure(e),t&&this.set(t)}Xe.prototype.set=function(e){return To(this.options,e),this};Xe.prototype.configure=function(e){let t=this;if(rc(e)){let n=e;if(e=nN[n],!e)throw new Error('Wrong `markdown-it` preset "'+n+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};Xe.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this};Xe.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this};Xe.prototype.use=function(e){let t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};Xe.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");let n=new this.core.State(e,this,t);return this.core.process(n),n.tokens};Xe.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};Xe.prototype.parseInline=function(e,t){let n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens};Xe.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var n0=Xe;function aN(e,t){if(e&1&&po(0,0),e&2){let n=t.$implicit,r=Ni();lo("surfaceId",r.surfaceId())("component",n)}}function cN(e,t){if(e&1&&po(0,0),e&2){let n=t.$implicit,r=Ni();lo("surfaceId",r.surfaceId())("component",n)}}function lN(e,t){if(e&1&&po(0,0),e&2){Ni();let n=la(0),r=la(1);lo("surfaceId",n)("component",r.componentTree)}}var dN=new x("Catalog"),fN=(()=>{class e extends Q1.A2uiMessageProcessor{events=new he;setData(n,r,o,i){return super.setData(n,r,o,i??void 0)}dispatch(n){let r=new he;return this.events.next({message:n,completion:r}),Nc(r)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=pr(e)))(o||e)}})();static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),pN=new x("Theme"),hN=0,r0=(()=>{class e{processor=b(fN);theme=b(pN);surfaceId=Pe.required();component=Pe.required();weight=Pe.required();sendAction(n){let r=this.component(),o=this.surfaceId()??void 0,i={};if(n.context){for(let u of n.context)if(u.value.literalBoolean)i[u.key]=u.value.literalBoolean;else if(u.value.literalNumber)i[u.key]=u.value.literalNumber;else if(u.value.literalString)i[u.key]=u.value.literalString;else if(u.value.path){let a=this.processor.resolvePath(u.value.path,r.dataContextPath),c=this.processor.getData(r,a,o);i[u.key]=c}}let s={userAction:{name:n.name,sourceComponentId:r.id,surfaceId:o,timestamp:new Date().toISOString(),context:i}};return this.processor.dispatch(s)}resolvePrimitive(n){let r=this.component(),o=this.surfaceId();return!n||typeof n!="object"?null:n.literal!=null?n.literal:n.path?this.processor.getData(r,n.path,o??void 0):"literalString"in n?n.literalString:"literalNumber"in n?n.literalNumber:"literalBoolean"in n?n.literalBoolean:null}getUniqueId(n){return`${n}-${hN++}`}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ht({type:e,hostVars:2,hostBindings:function(r,o){r&2&&ua("--weight",o.weight())},inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"],weight:[1,"weight"]}})}return e})(),o0=(()=>{class e{viewContainerRef=b(pt);catalog=b(dN);static hasInsertedStyles=!1;currentRef=null;isDestroyed=!1;surfaceId=Pe.required();component=Pe.required();constructor(){ai(()=>{let o=this.surfaceId(),i=this.component();xe(()=>this.render(o,i))});let n=b(hr),r=b(X);if(!e.hasInsertedStyles&&xv(n)){let o=r.createElement("style");o.textContent=bo.structuralStyles,r.head.appendChild(o),e.hasInsertedStyles=!0}}ngOnDestroy(){this.isDestroyed=!0,this.clear()}render(n,r){return vt(this,null,function*(){let o=this.catalog[r.type],i=null,s=null;if(typeof o=="function"?i=yield o():typeof o=="object"&&(i=yield o.type(),s=o.bindings(r)),this.clear(),i&&!this.isDestroyed){let u=[U("surfaceId",()=>n),U("component",()=>r),U("weight",()=>r.weight??"initial")];s&&u.push(...s),this.currentRef=this.viewContainerRef.createComponent(i,{bindings:u,injector:this.viewContainerRef.injector})}})}clear(){this.currentRef?.destroy(),this.currentRef=null}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ht({type:e,selectors:[["ng-container","a2ui-renderer",""]],inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"]}})}return e})();var gN=(()=>{class e extends r0{alignment=Pe("stretch");distribution=Pe("start");classes=Re(()=>P(M({},this.theme.components.Row),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=pr(e)))(o||e)}})();static \u0275cmp=so({type:e,selectors:[["a2ui-row"]],hostVars:2,hostBindings:function(r,o){r&2&&ta("alignment",o.alignment())("distribution",o.distribution())},inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[ao],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(dr(0,"section"),ra(1,aN,1,2,"ng-container",0,na),fo()),r&2&&(ho(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Row),ki(o.classes()),io(),oa(o.component().properties.children))},dependencies:[o0],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:row;width:100%;min-height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),mN=(()=>{class e extends r0{alignment=Pe("stretch");distribution=Pe("start");classes=Re(()=>P(M({},this.theme.components.Column),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=pr(e)))(o||e)}})();static \u0275cmp=so({type:e,selectors:[["a2ui-column"]],inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[ao],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(dr(0,"section"),ra(1,cN,1,2,"ng-container",0,na),fo()),r&2&&(ho(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Column),ki(o.classes()),io(),oa(o.component().properties.children))},dependencies:[o0],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:100%;height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),yN=(()=>{class e{originalClassMap=new Map;sanitizer=b(Xp);markdownIt=n0({highlight:(n,r)=>{if(r==="html"){let o=document.createElement("iframe");return o.classList.add("html-view"),o.srcdoc=n,o.sandbox="",o.innerHTML}return n}});render(n,r){r&&this.applyTagClassMap(r);let o=this.markdownIt.render(n);return this.unapplyTagClassMap(),this.sanitizer.sanitize(ze.HTML,o)}applyTagClassMap(n){Object.entries(n).forEach(([r,o])=>{let i;switch(r){case"p":i="paragraph";break;case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":i="heading";break;case"ul":i="bullet_list";break;case"ol":i="ordered_list";break;case"li":i="list_item";break;case"a":i="link";break;case"strong":i="strong";break;case"em":i="em";break}if(!i)return;let s=`${i}_open`,u=this.markdownIt.renderer.rules[s];this.originalClassMap.set(s,u),this.markdownIt.renderer.rules[s]=(a,c,l,d,h)=>{let f=a[c];for(let p of o)f.attrJoin("class",p);return u?u.call(this,a,c,l,d,h):h.renderToken(a,c,l)}})}unapplyTagClassMap(){for(let[n,r]of this.originalClassMap)this.markdownIt.renderer.rules[n]=r;this.originalClassMap.clear()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=T({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),bN=(()=>{class e extends r0{markdownRenderer=b(yN);text=Pe.required();usageHint=Pe.required();resolvedText=Re(()=>{let n=this.usageHint(),r=super.resolvePrimitive(this.text());if(r==null)return"(empty)";switch(n){case"h1":r=`# ${r}`;break;case"h2":r=`## ${r}`;break;case"h3":r=`### ${r}`;break;case"h4":r=`#### ${r}`;break;case"h5":r=`##### ${r}`;break;case"caption":r=`*${r}*`;break;default:r=String(r);break}return this.markdownRenderer.render(r,bo.appendToAll(this.theme.markdown,["ol","ul","li"],{}))});classes=Re(()=>{let n=this.usageHint();return bo.merge(this.theme.components.Text.all,n?this.theme.components.Text[n]:{})});additionalStyles=Re(()=>{let n=this.usageHint(),r=this.theme.additionalStyles?.Text;if(!r)return null;let o={};return this.areHintedStyles(r)?o=r[n??"body"]:o=r,o});areHintedStyles(n){return typeof n!="object"||!n||Array.isArray(n)?!1:["h1","h2","h3","h4","h5","h6","caption","body"].every(o=>o in n)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=pr(e)))(o||e)}})();static \u0275cmp=so({type:e,selectors:[["a2ui-text"]],inputs:{text:[1,"text"],usageHint:[1,"usageHint"]},features:[ao],decls:1,vars:5,consts:[[3,"innerHTML"]],template:function(r,o){r&1&&ia(0,"section",0),r&2&&(ho(o.additionalStyles()),ki(o.classes()),sa("innerHTML",o.resolvedText(),zd))},styles:[`a2ui-text{display:block;flex:var(--weight)}a2ui-text h1,a2ui-text h2,a2ui-text h3,a2ui-text h4,a2ui-text h5{line-height:inherit;font:inherit} +`],encapsulation:2})}return e})(),jG={Row:{type:()=>gN,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},Column:{type:()=>mN,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},List:{type:()=>import("./chunk-4S2CIXCW.js").then(e=>e.List),bindings:e=>{let t=e.properties;return[U("direction",()=>t.direction??"vertical")]}},Card:()=>import("./chunk-CD6LWQYN.js").then(e=>e.Card),Image:{type:()=>import("./chunk-7P7JIWGK.js").then(e=>e.Image),bindings:e=>{let t=e.properties;return[U("url",()=>t.url),U("usageHint",()=>t.usageHint)]}},Icon:{type:()=>import("./chunk-VUI6RO2X.js").then(e=>e.Icon),bindings:e=>{let t=e.properties;return[U("name",()=>t.name)]}},Video:{type:()=>import("./chunk-5VJ6OSLK.js").then(e=>e.Video),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},AudioPlayer:{type:()=>import("./chunk-NK4C5UIR.js").then(e=>e.Audio),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},Text:{type:()=>bN,bindings:e=>{let t=e.properties;return[U("text",()=>t.text),U("usageHint",()=>t.usageHint||null)]}},Button:{type:()=>import("./chunk-2VKC3BHH.js").then(e=>e.Button),bindings:e=>{let t=e.properties;return[U("action",()=>t.action)]}},Divider:()=>import("./chunk-2MVVEOIQ.js").then(e=>e.Divider),MultipleChoice:{type:()=>import("./chunk-DTNGXRUJ.js").then(e=>e.MultipleChoice),bindings:e=>{let t=e.properties;return[U("options",()=>t.options||[]),U("value",()=>t.selections),U("description",()=>"Select an item")]}},TextField:{type:()=>import("./chunk-HCQ2TSHS.js").then(e=>e.TextField),bindings:e=>{let t=e.properties;return[U("text",()=>t.text??null),U("label",()=>t.label),U("inputType",()=>t.type)]}},DateTimeInput:{type:()=>import("./chunk-PR5T53UC.js").then(e=>e.DatetimeInput),bindings:e=>{let t=e.properties;return[U("enableDate",()=>t.enableDate),U("enableTime",()=>t.enableTime),U("value",()=>t.value)]}},CheckBox:{type:()=>import("./chunk-A2SOFJNC.js").then(e=>e.Checkbox),bindings:e=>{let t=e.properties;return[U("label",()=>t.label),U("value",()=>t.value)]}},Slider:{type:()=>import("./chunk-GGOEHXD2.js").then(e=>e.Slider),bindings:e=>{let t=e.properties;return[U("value",()=>t.value),U("minValue",()=>t.minValue),U("maxValue",()=>t.maxValue),U("label",()=>"")]}},Tabs:{type:()=>import("./chunk-JUJUP2UX.js").then(e=>e.Tabs),bindings:e=>{let t=e.properties;return[U("tabs",()=>t.tabItems)]}},Modal:{type:()=>import("./chunk-WXV43367.js").then(e=>e.Modal),bindings:()=>[]}},BG=(()=>{class e{surfaceId=Pe.required();surface=Pe.required();styles=Re(()=>{let n=this.surface(),r={};if(n?.styles)for(let[o,i]of Object.entries(n.styles))switch(o){case"primaryColor":{r["--p-100"]="#ffffff",r["--p-99"]=`color-mix(in srgb, ${i} 2%, white 98%)`,r["--p-98"]=`color-mix(in srgb, ${i} 4%, white 96%)`,r["--p-95"]=`color-mix(in srgb, ${i} 10%, white 90%)`,r["--p-90"]=`color-mix(in srgb, ${i} 20%, white 80%)`,r["--p-80"]=`color-mix(in srgb, ${i} 40%, white 60%)`,r["--p-70"]=`color-mix(in srgb, ${i} 60%, white 40%)`,r["--p-60"]=`color-mix(in srgb, ${i} 80%, white 20%)`,r["--p-50"]=i,r["--p-40"]=`color-mix(in srgb, ${i} 80%, black 20%)`,r["--p-35"]=`color-mix(in srgb, ${i} 70%, black 30%)`,r["--p-30"]=`color-mix(in srgb, ${i} 60%, black 40%)`,r["--p-25"]=`color-mix(in srgb, ${i} 50%, black 50%)`,r["--p-20"]=`color-mix(in srgb, ${i} 40%, black 60%)`,r["--p-15"]=`color-mix(in srgb, ${i} 30%, black 70%)`,r["--p-10"]=`color-mix(in srgb, ${i} 20%, black 80%)`,r["--p-5"]=`color-mix(in srgb, ${i} 10%, black 90%)`,r["--0"]="#00000";break}case"font":{r["--font-family"]=i,r["--font-family-flex"]=i;break}}return r});static \u0275fac=function(r){return new(r||e)};static \u0275cmp=so({type:e,selectors:[["a2ui-surface"]],hostVars:2,hostBindings:function(r,o){r&2&&ho(o.styles())},inputs:{surfaceId:[1,"surfaceId"],surface:[1,"surface"]},decls:3,vars:3,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){if(r&1&&(aa(0)(1),Cf(2,lN,1,2,"ng-container",0)),r&2){let i=ca(o.surfaceId());io();let s=ca(o.surface());io(),wf(i&&s?2:-1)}},dependencies:[o0],styles:["[_nghost-%COMP%]{display:flex;min-height:0;max-height:100%;flex-direction:column;gap:16px}"]})}return e})();export{ne as a,Hn as b,aE as c,B as d,Ic as e,he as f,as as g,Po as h,jo as i,hE as j,Or as k,gE as l,Bt as m,E3 as n,Ho as o,Ct as p,xs as q,_E as r,wE as s,Un as t,Nc as u,Se as v,kE as w,Vt as x,$o as y,Ss as z,FE as A,OE as B,kc as C,Rc as D,$E as E,UE as F,gn as G,qE as H,GE as I,Fc as J,Oc as K,$0 as L,Pc as M,WE as N,z0 as O,Ms as P,QE as Q,KE as R,G0 as S,As as T,W0 as U,Z0 as V,Y0 as W,Ns as X,JE as Y,XE as Z,Q0 as _,eC as $,D as aa,xt as ba,Hs as ca,T as da,It as ea,oC as fa,x as ga,A as ha,b as ia,hg as ja,Ae as ka,Ur as la,wC as ma,Tg as na,Sg as oa,Vg as pa,Hg as qa,me as ra,X as sa,$e as ta,or as ua,Ht as va,Ce as wa,We as xa,Gt as ya,xn as za,ai as Aa,Fu as Ba,pr as Ca,Zt as Da,Du as Ea,Ou as Fa,hr as Ga,m_ as Ha,Lu as Ia,ay as Ja,ze as Ka,zd as La,W_ as Ma,Z_ as Na,Y_ as Oa,io as Pa,Nt as Qa,hw as Ra,Sn as Sa,lr as Ta,Ti as Ua,ee as Va,px as Wa,pt as Xa,An as Ya,vb as Za,Db as _a,so as $a,Kt as ab,ht as bb,uo as cb,oI as db,ao as eb,xb as fb,Ib as gb,Tb as hb,yf as ib,Mi as jb,mI as kb,Ab as lb,co as mb,Rb as nb,ta as ob,bI as pb,Cf as qb,_f as rb,wf as sb,DI as tb,na as ub,ra as vb,oa as wb,lo as xb,dr as yb,fo as zb,Fb as Ab,xf as Bb,If as Cb,ia as Db,Tf as Eb,Sf as Fb,po as Gb,II as Hb,sa as Ib,Lb as Jb,jb as Kb,Ni as Lb,kI as Mb,RI as Nb,Vb as Ob,Hb as Pb,OI as Qb,PI as Rb,$b as Sb,Ub as Tb,LI as Ub,jI as Vb,ua as Wb,Zb as Xb,ho as Yb,ki as Zb,u2 as _b,o1 as $b,Mf as ac,i1 as bc,u1 as cc,c2 as dc,a1 as ec,aa as fc,ca as gc,la as hc,l2 as ic,d2 as jc,f2 as kc,m2 as lc,y2 as mc,b2 as nc,v2 as oc,D2 as pc,C2 as qc,_2 as rc,w2 as sc,x2 as tc,da as uc,xe as vc,Re as wc,S2 as xc,Ff as yc,D1 as zc,F7 as Ac,O7 as Bc,Pe as Cc,P7 as Dc,L7 as Ec,j7 as Fc,qf as Gc,Gf as Hc,tT as Ic,nT as Jc,V7 as Kc,H7 as Lc,$7 as Mc,bo as Nc,kt as Oc,LT as Pc,Eo as Qc,tv as Rc,nv as Sc,HT as Tc,aS as Uc,cS as Vc,Cv as Wc,dS as Xc,fS as Yc,pS as Zc,mS as _c,bS as $c,DS as ad,ES as bd,Pp as cd,xv as dd,GH as ed,qp as fd,LS as gd,zS as hd,Gv as id,fM as jd,cU as kd,Xp as ld,dN as md,fN as nd,pN as od,r0 as pd,o0 as qd,jG as rd,BG as sd}; diff --git a/src/google/adk/cli/browser/chunk-XB75PFJS.js b/src/google/adk/cli/browser/chunk-GGOEHXD2.js similarity index 87% rename from src/google/adk/cli/browser/chunk-XB75PFJS.js rename to src/google/adk/cli/browser/chunk-GGOEHXD2.js index 2c2d9b8430..3ea6428185 100644 --- a/src/google/adk/cli/browser/chunk-XB75PFJS.js +++ b/src/google/adk/cli/browser/chunk-GGOEHXD2.js @@ -1 +1 @@ -import{Bb as r,Bc as n,Cb as u,Da as m,Ib as d,Kb as c,Qa as l,Yb as v,Zb as o,_b as g,ab as s,ac as f,eb as p,md as b,vc as h}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var M=["a2ui-slider",""],E=(()=>{class a extends b{value=n.required();label=n("");minValue=n.required();maxValue=n.required();inputId=super.getUniqueId("a2ui-slider");resolvedValue=h(()=>super.resolvePrimitive(this.value())??0);handleInput(t){let i=this.value()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.valueAsNumber,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(a)))(e||a)}})();static \u0275cmp=s({type:a,selectors:[["","a2ui-slider",""]],inputs:{value:[1,"value"],label:[1,"label"],minValue:[1,"minValue"],maxValue:[1,"maxValue"]},features:[p],attrs:M,decls:4,vars:14,consts:[[3,"for"],["autocomplete","off","type","range",3,"input","value","min","max","id"]],template:function(i,e){i&1&&(r(0,"section")(1,"label",0),g(2),u(),r(3,"input",1),c("input",function(y){return e.handleInput(y)}),u()()),i&2&&(o(e.theme.components.Slider.container),l(),o(e.theme.components.Slider.label),d("htmlFor",e.inputId),l(),f(" ",e.label()," "),l(),v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Slider),o(e.theme.components.Slider.element),d("value",e.resolvedValue())("min",e.minValue())("max",e.maxValue())("id",e.inputId))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return a})();export{E as Slider}; +import{$a as s,Bb as r,Ca as m,Cb as u,Cc as n,Ib as d,Kb as c,Pa as l,Yb as v,Zb as o,_b as g,ac as f,eb as p,pd as b,wc as h}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var M=["a2ui-slider",""],E=(()=>{class a extends b{value=n.required();label=n("");minValue=n.required();maxValue=n.required();inputId=super.getUniqueId("a2ui-slider");resolvedValue=h(()=>super.resolvePrimitive(this.value())??0);handleInput(t){let i=this.value()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.valueAsNumber,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(a)))(e||a)}})();static \u0275cmp=s({type:a,selectors:[["","a2ui-slider",""]],inputs:{value:[1,"value"],label:[1,"label"],minValue:[1,"minValue"],maxValue:[1,"maxValue"]},features:[p],attrs:M,decls:4,vars:14,consts:[[3,"for"],["autocomplete","off","type","range",3,"input","value","min","max","id"]],template:function(i,e){i&1&&(r(0,"section")(1,"label",0),g(2),u(),r(3,"input",1),c("input",function(y){return e.handleInput(y)}),u()()),i&2&&(o(e.theme.components.Slider.container),l(),o(e.theme.components.Slider.label),d("htmlFor",e.inputId),l(),f(" ",e.label()," "),l(),v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Slider),o(e.theme.components.Slider.element),d("value",e.resolvedValue())("min",e.minValue())("max",e.maxValue())("id",e.inputId))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return a})();export{E as Slider}; diff --git a/src/google/adk/cli/browser/chunk-HCQ2TSHS.js b/src/google/adk/cli/browser/chunk-HCQ2TSHS.js new file mode 100644 index 0000000000..35318987da --- /dev/null +++ b/src/google/adk/cli/browser/chunk-HCQ2TSHS.js @@ -0,0 +1 @@ +import{$a as c,$b as M,Bb as l,Ca as m,Cb as d,Cc as r,Ib as p,Kb as g,Lb as h,Pa as o,Yb as x,Zb as a,_b as y,eb as b,fc as T,gc as _,hc as C,pd as F,qb as v,sb as f,wc as s}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function P(n,D){if(n&1&&(l(0,"label",2),y(1),d()),n&2){let t=h(),i=C(0);a(t.theme.components.TextField.label),p("htmlFor",t.inputId),o(),M(i)}}var S=(()=>{class n extends F{text=r.required();label=r.required();inputType=r.required();inputValue=s(()=>super.resolvePrimitive(this.text())||"");resolvedLabel=s(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-input");handleInput(t){let i=this.text()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.value,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(n)))(e||n)}})();static \u0275cmp=c({type:n,selectors:[["a2ui-text-field"]],inputs:{text:[1,"text"],label:[1,"label"],inputType:[1,"inputType"]},features:[b],decls:4,vars:11,consts:[[3,"for","class"],["autocomplete","off","placeholder","Please enter a value",3,"input","id","value","type"],[3,"for"]],template:function(i,e){if(i&1&&(T(0),l(1,"section"),v(2,P,2,4,"label",0),l(3,"input",1),g("input",function(I){return e.handleInput(I)}),d()()),i&2){let u=_(e.resolvedLabel());o(),a(e.theme.components.TextField.container),o(),f(u?2:-1),o(),x(e.theme.additionalStyles==null?null:e.theme.additionalStyles.TextField),a(e.theme.components.TextField.element),p("id",e.inputId)("value",e.inputValue())("type",e.inputType()==="number"?"number":"text")}},styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%], input[_ngcontent-%COMP%], label[_ngcontent-%COMP%]{box-sizing:border-box}input[_ngcontent-%COMP%]{display:block;width:100%}label[_ngcontent-%COMP%]{display:block;margin-bottom:4px}"]})}return n})();export{S as TextField}; diff --git a/src/google/adk/cli/browser/chunk-HYLIZOX5.js b/src/google/adk/cli/browser/chunk-JUJUP2UX.js similarity index 80% rename from src/google/adk/cli/browser/chunk-HYLIZOX5.js rename to src/google/adk/cli/browser/chunk-JUJUP2UX.js index 460e433783..213e1f61d8 100644 --- a/src/google/adk/cli/browser/chunk-HYLIZOX5.js +++ b/src/google/adk/cli/browser/chunk-JUJUP2UX.js @@ -1 +1 @@ -import{Bc as w,Da as _,Gb as I,Hb as g,Jb as T,Lb as c,Qa as a,Yb as C,Zb as r,_b as M,ab as f,ac as D,bd as E,eb as h,gc as F,hc as k,ic as S,md as L,na as p,nd as N,oa as u,ub as x,vb as v,vc as $,wb as y,xb as d,yb as l,za as b,zb as o}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function B(n,m){if(n&1){let t=g();l(0,"button",2),T("click",function(){let e=p(t).$index,i=c();return u(i.selectedIndex.set(e))}),M(1),o()}if(n&2){let t=m.$implicit,s=m.$index,e=c(),i=S(0);r(e.buttonClasses()[i]),d("disabled",i===s),a(),D(" ",e.resolvePrimitive(t.title)," ")}}var z=(()=>{class n extends L{selectedIndex=b(0);tabs=w.required();buttonClasses=$(()=>{let t=this.selectedIndex();return this.tabs().map((s,e)=>e===t?E.merge(this.theme.components.Tabs.controls.all,this.theme.components.Tabs.controls.selected):this.theme.components.Tabs.controls.all)});static \u0275fac=(()=>{let t;return function(e){return(t||(t=_(n)))(e||n)}})();static \u0275cmp=f({type:n,selectors:[["a2ui-tabs"]],inputs:{tabs:[1,"tabs"]},features:[h],decls:6,vars:9,consts:[[3,"disabled","class"],["a2ui-renderer","",3,"surfaceId","component"],[3,"click","disabled"]],template:function(s,e){if(s&1&&(F(0),l(1,"section")(2,"div"),v(3,B,2,4,"button",0,x),o(),I(5,1),o()),s&2){let i=e.tabs(),V=k(e.selectedIndex());a(),C(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Tabs),r(e.theme.components.Tabs.container),a(),r(e.theme.components.Tabs.element),a(),y(i),a(2),d("surfaceId",e.surfaceId())("component",i[V].child)}},dependencies:[N],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}"]})}return n})();export{z as Tabs}; +import{$a as f,Ca as _,Cc as w,Gb as I,Hb as g,Jb as T,Lb as c,Nc as E,Pa as a,Yb as C,Zb as r,_b as M,ac as D,eb as h,fc as F,gc as k,hc as S,na as p,oa as u,pd as L,qd as N,ub as x,vb as v,wb as y,wc as $,xb as d,yb as l,za as b,zb as o}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function B(n,m){if(n&1){let t=g();l(0,"button",2),T("click",function(){let e=p(t).$index,i=c();return u(i.selectedIndex.set(e))}),M(1),o()}if(n&2){let t=m.$implicit,s=m.$index,e=c(),i=S(0);r(e.buttonClasses()[i]),d("disabled",i===s),a(),D(" ",e.resolvePrimitive(t.title)," ")}}var z=(()=>{class n extends L{selectedIndex=b(0);tabs=w.required();buttonClasses=$(()=>{let t=this.selectedIndex();return this.tabs().map((s,e)=>e===t?E.merge(this.theme.components.Tabs.controls.all,this.theme.components.Tabs.controls.selected):this.theme.components.Tabs.controls.all)});static \u0275fac=(()=>{let t;return function(e){return(t||(t=_(n)))(e||n)}})();static \u0275cmp=f({type:n,selectors:[["a2ui-tabs"]],inputs:{tabs:[1,"tabs"]},features:[h],decls:6,vars:9,consts:[[3,"disabled","class"],["a2ui-renderer","",3,"surfaceId","component"],[3,"click","disabled"]],template:function(s,e){if(s&1&&(F(0),l(1,"section")(2,"div"),v(3,B,2,4,"button",0,x),o(),I(5,1),o()),s&2){let i=e.tabs(),V=k(e.selectedIndex());a(),C(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Tabs),r(e.theme.components.Tabs.container),a(),r(e.theme.components.Tabs.element),a(),y(i),a(2),d("surfaceId",e.surfaceId())("component",i[V].child)}},dependencies:[N],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}"]})}return n})();export{z as Tabs}; diff --git a/src/google/adk/cli/browser/chunk-AK5ESGDJ.js b/src/google/adk/cli/browser/chunk-NK4C5UIR.js similarity index 81% rename from src/google/adk/cli/browser/chunk-AK5ESGDJ.js rename to src/google/adk/cli/browser/chunk-NK4C5UIR.js index 29ffacad65..c9900496b7 100644 --- a/src/google/adk/cli/browser/chunk-AK5ESGDJ.js +++ b/src/google/adk/cli/browser/chunk-NK4C5UIR.js @@ -1 +1 @@ -import{Bb as c,Bc as M,Cb as u,Da as r,Db as m,Ib as p,Lb as v,Qa as n,Yb as f,Zb as y,ab as l,eb as d,gc as g,hc as h,ic as x,md as _,qb as a,sb as s,vc as C}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function D(e,P){if(e&1&&(c(0,"section"),m(1,"audio",1),u()),e&2){let t=v(),o=x(0);f(t.theme.additionalStyles==null?null:t.theme.additionalStyles.AudioPlayer),y(t.theme.components.AudioPlayer),n(),p("src",o)}}var w=(()=>{class e extends _{url=M.required();resolvedUrl=C(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(i){return(t||(t=r(e)))(i||e)}})();static \u0275cmp=l({type:e,selectors:[["a2ui-audio"]],inputs:{url:[1,"url"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(o,i){if(o&1&&(g(0),a(1,D,2,5,"section",0)),o&2){let b=h(i.resolvedUrl());n(),s(b?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}audio[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{w as Audio}; +import{$a as l,Bb as c,Ca as r,Cb as u,Cc as M,Db as m,Ib as p,Lb as v,Pa as n,Yb as f,Zb as y,eb as d,fc as g,gc as h,hc as x,pd as _,qb as a,sb as s,wc as C}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function D(e,P){if(e&1&&(c(0,"section"),m(1,"audio",1),u()),e&2){let t=v(),o=x(0);f(t.theme.additionalStyles==null?null:t.theme.additionalStyles.AudioPlayer),y(t.theme.components.AudioPlayer),n(),p("src",o)}}var w=(()=>{class e extends _{url=M.required();resolvedUrl=C(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(i){return(t||(t=r(e)))(i||e)}})();static \u0275cmp=l({type:e,selectors:[["a2ui-audio"]],inputs:{url:[1,"url"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(o,i){if(o&1&&(g(0),a(1,D,2,5,"section",0)),o&2){let b=h(i.resolvedUrl());n(),s(b?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}audio[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{w as Audio}; diff --git a/src/google/adk/cli/browser/chunk-RLBEOMT4.js b/src/google/adk/cli/browser/chunk-PR5T53UC.js similarity index 91% rename from src/google/adk/cli/browser/chunk-RLBEOMT4.js rename to src/google/adk/cli/browser/chunk-PR5T53UC.js index 1379101957..de6da3695c 100644 --- a/src/google/adk/cli/browser/chunk-RLBEOMT4.js +++ b/src/google/adk/cli/browser/chunk-PR5T53UC.js @@ -1 +1 @@ -import{$b as M,Bb as s,Bc as l,Cb as m,Da as g,Ib as d,Kb as y,Qa as u,Yb as T,Zb as r,_b as I,ab as f,eb as D,md as N,ob as v,vc as o}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var S=(()=>{class i extends N{value=l.required();enableDate=l.required();enableTime=l.required();inputId=super.getUniqueId("a2ui-datetime-input");inputType=o(()=>{let t=this.enableDate(),n=this.enableTime();return t&&n?"datetime-local":t?"date":n?"time":"datetime-local"});label=o(()=>{let t=this.inputType();return t==="date"?"Date":t==="time"?"Time":"Date & Time"});inputValue=o(()=>{let t=this.inputType(),n=super.resolvePrimitive(this.value())||"",e=n?new Date(n):null;if(!e||isNaN(e.getTime()))return"";let p=this.padNumber(e.getFullYear()),a=this.padNumber(e.getMonth()),c=this.padNumber(e.getDate()),b=this.padNumber(e.getHours()),h=this.padNumber(e.getMinutes());return t==="date"?`${p}-${a}-${c}`:t==="time"?`${b}:${h}`:`${p}-${a}-${c}T${b}:${h}`});handleInput(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.value,this.surfaceId())}padNumber(t){return t.toString().padStart(2,"0")}static \u0275fac=(()=>{let t;return function(e){return(t||(t=g(i)))(e||i)}})();static \u0275cmp=f({type:i,selectors:[["a2ui-datetime-input"]],inputs:{value:[1,"value"],enableDate:[1,"enableDate"],enableTime:[1,"enableTime"]},features:[D],decls:4,vars:13,consts:[[3,"for"],["autocomplete","off",3,"input","id","value"]],template:function(n,e){n&1&&(s(0,"section")(1,"label",0),I(2),m(),s(3,"input",1),y("input",function(a){return e.handleInput(a)}),m()()),n&2&&(r(e.theme.components.DateTimeInput.container),u(),r(e.theme.components.DateTimeInput.label),d("htmlFor",e.inputId),u(),M(e.label()),u(),T(e.theme.additionalStyles==null?null:e.theme.additionalStyles.DateTimeInput),r(e.theme.components.DateTimeInput.element),d("id",e.inputId)("value",e.inputValue()),v("type",e.inputType()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return i})();export{S as DatetimeInput}; +import{$a as f,$b as M,Bb as s,Ca as g,Cb as m,Cc as l,Ib as d,Kb as y,Pa as u,Yb as T,Zb as r,_b as I,eb as D,ob as v,pd as N,wc as o}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var S=(()=>{class i extends N{value=l.required();enableDate=l.required();enableTime=l.required();inputId=super.getUniqueId("a2ui-datetime-input");inputType=o(()=>{let t=this.enableDate(),n=this.enableTime();return t&&n?"datetime-local":t?"date":n?"time":"datetime-local"});label=o(()=>{let t=this.inputType();return t==="date"?"Date":t==="time"?"Time":"Date & Time"});inputValue=o(()=>{let t=this.inputType(),n=super.resolvePrimitive(this.value())||"",e=n?new Date(n):null;if(!e||isNaN(e.getTime()))return"";let p=this.padNumber(e.getFullYear()),a=this.padNumber(e.getMonth()),c=this.padNumber(e.getDate()),b=this.padNumber(e.getHours()),h=this.padNumber(e.getMinutes());return t==="date"?`${p}-${a}-${c}`:t==="time"?`${b}:${h}`:`${p}-${a}-${c}T${b}:${h}`});handleInput(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.value,this.surfaceId())}padNumber(t){return t.toString().padStart(2,"0")}static \u0275fac=(()=>{let t;return function(e){return(t||(t=g(i)))(e||i)}})();static \u0275cmp=f({type:i,selectors:[["a2ui-datetime-input"]],inputs:{value:[1,"value"],enableDate:[1,"enableDate"],enableTime:[1,"enableTime"]},features:[D],decls:4,vars:13,consts:[[3,"for"],["autocomplete","off",3,"input","id","value"]],template:function(n,e){n&1&&(s(0,"section")(1,"label",0),I(2),m(),s(3,"input",1),y("input",function(a){return e.handleInput(a)}),m()()),n&2&&(r(e.theme.components.DateTimeInput.container),u(),r(e.theme.components.DateTimeInput.label),d("htmlFor",e.inputId),u(),M(e.label()),u(),T(e.theme.additionalStyles==null?null:e.theme.additionalStyles.DateTimeInput),r(e.theme.components.DateTimeInput.element),d("id",e.inputId)("value",e.inputValue()),v("type",e.inputType()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return i})();export{S as DatetimeInput}; diff --git a/src/google/adk/cli/browser/chunk-UATSMTT5.js b/src/google/adk/cli/browser/chunk-UATSMTT5.js deleted file mode 100644 index 9a18a187be..0000000000 --- a/src/google/adk/cli/browser/chunk-UATSMTT5.js +++ /dev/null @@ -1 +0,0 @@ -import{$b as C,Bb as l,Bc as r,Cb as s,Da as b,Hb as x,Ib as p,Kb as y,Lb as M,Qa as o,Yb as _,Zb as a,_b as T,ab as g,eb as v,gc as F,hc as I,ic as P,md as D,na as m,oa as c,qb as f,sb as h,vc as u}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function E(n,O){if(n&1&&(l(0,"label",2),T(1),s()),n&2){let t=M(),i=P(0);a(t.theme.components.TextField.label),p("htmlFor",t.inputId),o(),C(i)}}var k=(()=>{class n extends D{text=r.required();label=r.required();inputType=r.required();inputValue=u(()=>super.resolvePrimitive(this.text())||"");resolvedLabel=u(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-input");handleInput(t){let i=this.text()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.value,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=b(n)))(e||n)}})();static \u0275cmp=g({type:n,selectors:[["a2ui-text-field"]],inputs:{text:[1,"text"],label:[1,"label"],inputType:[1,"inputType"]},features:[v],decls:4,vars:11,consts:[[3,"for","class"],["autocomplete","off","placeholder","Please enter a value",3,"input","id","value","type"],[3,"for"]],template:function(i,e){if(i&1){let d=x();F(0),l(1,"section"),f(2,E,2,4,"label",0),l(3,"input",1),y("input",function(L){return m(d),c(e.handleInput(L))}),s()()}if(i&2){let d=I(e.resolvedLabel());o(),a(e.theme.components.TextField.container),o(),h(d?2:-1),o(),_(e.theme.additionalStyles==null?null:e.theme.additionalStyles.TextField),a(e.theme.components.TextField.element),p("id",e.inputId)("value",e.inputValue())("type",e.inputType()==="number"?"number":"text")}},styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%], input[_ngcontent-%COMP%], label[_ngcontent-%COMP%]{box-sizing:border-box}input[_ngcontent-%COMP%]{display:block;width:100%}label[_ngcontent-%COMP%]{display:block;margin-bottom:4px}"]})}return n})();export{k as TextField}; diff --git a/src/google/adk/cli/browser/chunk-4MSGFQCD.js b/src/google/adk/cli/browser/chunk-VUI6RO2X.js similarity index 80% rename from src/google/adk/cli/browser/chunk-4MSGFQCD.js rename to src/google/adk/cli/browser/chunk-VUI6RO2X.js index 644f65e1d1..de3dd9600a 100644 --- a/src/google/adk/cli/browser/chunk-4MSGFQCD.js +++ b/src/google/adk/cli/browser/chunk-VUI6RO2X.js @@ -1 +1 @@ -import{$b as y,Bb as m,Bc as I,Cb as d,Da as a,Lb as p,Qa as i,Yb as u,Zb as v,_b as f,ab as s,eb as r,gc as g,hc as h,ic as x,md as M,qb as c,sb as l,vc as C}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function _(e,D){if(e&1&&(m(0,"section")(1,"span",1),f(2),d()()),e&2){let t=p(),n=x(0);u(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Icon),v(t.theme.components.Icon),i(2),y(n)}}var S=(()=>{class e extends M{name=I.required();resolvedName=C(()=>this.resolvePrimitive(this.name()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=a(e)))(o||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-icon"]],inputs:{name:[1,"name"]},features:[r],decls:2,vars:2,consts:[[3,"class","style"],[1,"g-icon"]],template:function(n,o){if(n&1&&(g(0),c(1,_,3,5,"section",0)),n&2){let N=h(o.resolvedName());i(),l(N?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}"]})}return e})();export{S as Icon}; +import{$a as s,$b as y,Bb as m,Ca as a,Cb as d,Cc as I,Lb as p,Pa as i,Yb as u,Zb as v,_b as f,eb as r,fc as g,gc as h,hc as x,pd as M,qb as c,sb as l,wc as C}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";function _(e,D){if(e&1&&(m(0,"section")(1,"span",1),f(2),d()()),e&2){let t=p(),n=x(0);u(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Icon),v(t.theme.components.Icon),i(2),y(n)}}var S=(()=>{class e extends M{name=I.required();resolvedName=C(()=>this.resolvePrimitive(this.name()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=a(e)))(o||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-icon"]],inputs:{name:[1,"name"]},features:[r],decls:2,vars:2,consts:[[3,"class","style"],[1,"g-icon"]],template:function(n,o){if(n&1&&(g(0),c(1,_,3,5,"section",0)),n&2){let N=h(o.resolvedName());i(),l(N?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}"]})}return e})();export{S as Icon}; diff --git a/src/google/adk/cli/browser/chunk-BWFUMX67.js b/src/google/adk/cli/browser/chunk-WXV43367.js similarity index 88% rename from src/google/adk/cli/browser/chunk-BWFUMX67.js rename to src/google/adk/cli/browser/chunk-WXV43367.js index cf3e47dd03..7108b16993 100644 --- a/src/google/adk/cli/browser/chunk-BWFUMX67.js +++ b/src/google/adk/cli/browser/chunk-WXV43367.js @@ -1 +1 @@ -import{Aa as f,Cc as k,Gb as m,Hb as p,Jb as d,Lb as o,Qa as r,Tb as w,Ub as v,Yb as y,Zb as u,_b as D,ab as C,eb as M,md as b,na as a,nd as P,oa as c,qb as x,sb as h,xb as g,yb as l,za as _,zb as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var V=["dialog"];function S(t,E){if(t&1){let e=p();l(0,"dialog",2,0),d("click",function(i){a(e);let O=o();return c(O.handleDialogClick(i))}),l(2,"section")(3,"div",3)(4,"button",2),d("click",function(){a(e);let i=o();return c(i.closeDialog())}),l(5,"span",4),D(6,"close"),s()()(),m(7,5),s()()}if(t&2){let e=o();u(e.theme.components.Modal.backdrop),r(2),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Modal),u(e.theme.components.Modal.element),r(5),g("surfaceId",e.surfaceId())("component",e.component().properties.contentChild)}}function T(t,E){if(t&1){let e=p();l(0,"section",2),d("click",function(){a(e);let i=o();return c(i.showDialog.set(!0))}),m(1,5),s()}if(t&2){let e=o();r(),g("surfaceId",e.surfaceId())("component",e.component().properties.entryPointChild)}}var j=(()=>{class t extends b{showDialog=_(!1);dialog=k("dialog");constructor(){super(),f(()=>{let e=this.dialog();e&&!e.nativeElement.open&&e.nativeElement.showModal()})}handleDialogClick(e){e.target instanceof HTMLDialogElement&&this.closeDialog()}closeDialog(){let e=this.dialog();e&&(e.nativeElement.open||e.nativeElement.close(),this.showDialog.set(!1))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=C({type:t,selectors:[["a2ui-modal"]],viewQuery:function(n,i){n&1&&w(i.dialog,V,5),n&2&&v()},features:[M],decls:2,vars:1,consts:[["dialog",""],[3,"class"],[3,"click"],[1,"controls"],[1,"g-icon"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,i){n&1&&x(0,S,8,8,"dialog",1)(1,T,2,2,"section"),n&2&&h(i.showDialog()?0:1)},dependencies:[P],styles:["dialog[_ngcontent-%COMP%]{padding:0;border:none;background:none}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%]{display:flex;justify-content:end;margin-bottom:4px}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:0;background:none;width:20px;height:20px;pointer:cursor;border:none;cursor:pointer}"]})}return t})();export{j as Modal}; +import{$a as C,Aa as f,Dc as k,Gb as m,Hb as p,Jb as d,Lb as o,Pa as r,Tb as w,Ub as v,Yb as y,Zb as u,_b as D,eb as M,na as a,oa as c,pd as b,qb as x,qd as P,sb as h,xb as g,yb as l,za as _,zb as s}from"./chunk-EN473UE3.js";import"./chunk-W7GRJBO5.js";var V=["dialog"];function S(t,E){if(t&1){let e=p();l(0,"dialog",2,0),d("click",function(i){a(e);let O=o();return c(O.handleDialogClick(i))}),l(2,"section")(3,"div",3)(4,"button",2),d("click",function(){a(e);let i=o();return c(i.closeDialog())}),l(5,"span",4),D(6,"close"),s()()(),m(7,5),s()()}if(t&2){let e=o();u(e.theme.components.Modal.backdrop),r(2),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Modal),u(e.theme.components.Modal.element),r(5),g("surfaceId",e.surfaceId())("component",e.component().properties.contentChild)}}function T(t,E){if(t&1){let e=p();l(0,"section",2),d("click",function(){a(e);let i=o();return c(i.showDialog.set(!0))}),m(1,5),s()}if(t&2){let e=o();r(),g("surfaceId",e.surfaceId())("component",e.component().properties.entryPointChild)}}var j=(()=>{class t extends b{showDialog=_(!1);dialog=k("dialog");constructor(){super(),f(()=>{let e=this.dialog();e&&!e.nativeElement.open&&e.nativeElement.showModal()})}handleDialogClick(e){e.target instanceof HTMLDialogElement&&this.closeDialog()}closeDialog(){let e=this.dialog();e&&(e.nativeElement.open||e.nativeElement.close(),this.showDialog.set(!1))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=C({type:t,selectors:[["a2ui-modal"]],viewQuery:function(n,i){n&1&&w(i.dialog,V,5),n&2&&v()},features:[M],decls:2,vars:1,consts:[["dialog",""],[3,"class"],[3,"click"],[1,"controls"],[1,"g-icon"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,i){n&1&&x(0,S,8,8,"dialog",1)(1,T,2,2,"section"),n&2&&h(i.showDialog()?0:1)},dependencies:[P],styles:["dialog[_ngcontent-%COMP%]{padding:0;border:none;background:none}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%]{display:flex;justify-content:end;margin-bottom:4px}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:0;background:none;width:20px;height:20px;pointer:cursor;border:none;cursor:pointer}"]})}return t})();export{j as Modal}; diff --git a/src/google/adk/cli/browser/index.html b/src/google/adk/cli/browser/index.html index 653a24e2a9..29d886ea3b 100644 --- a/src/google/adk/cli/browser/index.html +++ b/src/google/adk/cli/browser/index.html @@ -24,11 +24,11 @@ - + - - + + - + diff --git a/src/google/adk/cli/browser/main-3OBAHHYV.js b/src/google/adk/cli/browser/main-3OBAHHYV.js new file mode 100644 index 0000000000..f6d7fd37a9 --- /dev/null +++ b/src/google/adk/cli/browser/main-3OBAHHYV.js @@ -0,0 +1,4155 @@ +import{$ as RQ,$a as SA,$b as lA,$c as nL,A as Lc,Aa as Ao,Ab as QA,Ac as ZF,B as qC,Ba as Yt,Bb as wn,Bc as ui,C as Gc,Ca as bi,Cb as Gn,Cc as me,D as Y3,Da as ce,Db as Kn,Dc as So,E as Ki,Ea as xg,Eb as Dl,Ec as XF,F as _F,Fa as P3,Fb as yl,Fc as J0,G as gt,Ga as j3,Gb as sn,Gc as wt,H as RF,Ha as qI,Hb as hA,Hc as ZI,I as jI,Ia as TF,Ib as ha,Ic as Be,J as Po,Ja as JF,Jb as U,Jc as Cn,K as xQ,Ka as _g,Kb as qd,Kc as $F,L as Ls,La as Kc,Lb as p,Lc as tp,M as uo,Ma as Go,Mb as Rt,Mc as AL,N as _Q,Na as ZC,Nb as Ve,Nc as Ts,O as kg,Oa as Pd,Ob as jo,Oc as Ab,P as H3,Pa as u,Pb as Jt,Pc as eL,Q as $n,Qa as q3,Qb as ae,Qc as eb,R as Vv,Ra as Hn,Rb as re,Rc as tL,S as VC,Sa as ao,Sb as ep,Sc as Uc,T as WC,Ta as Kr,Tb as ns,Tc as iL,U as Gs,Ua as Pi,Ub as ur,Uc as zl,V as wl,Va as ct,Vb as Qi,Vc as Tc,W as Sn,Wa as V3,Wb as ut,Wc as A2,X as Ei,Xa as Mo,Xb as RA,Xc as Js,Y as Qt,Ya as Zv,Yb as zF,Yc as Vd,Z as NF,Za as OF,Zb as ro,Zc as Jc,_ as Ii,_a as W3,_b as y,_c as os,a as bo,aa as Mt,ab as Ze,ac as ue,ad as oL,b as bF,ba as FF,bb as VA,bc as ba,bd as ip,c as MF,ca as Ja,cb as Xv,cc as wi,cd as si,d as vi,da as qA,db as Z3,dc as di,dd as O0,e as SF,ea as We,eb as mt,ec as Di,ed as tb,f as ie,fa as LF,fb as Et,fc as ta,fd as aL,g as kF,ga as kA,gb as X3,gc as ga,gd as rL,h as ei,ha as Lo,hb as YF,hc as zn,hd as sL,i as Sg,ia as w,ib as VI,ic as XC,id as fr,j as jv,ja as GF,jb as $3,jc as NQ,jd as lL,k as U3,ka as Gr,kb as $v,kc as PF,kd as gL,l as Yd,la as Xa,lb as HF,lc as Bt,ld as e2,m as ar,ma as KF,mb as K0,mc as Rg,md as cL,n as kQ,na as T,nb as Ap,nc as Ks,nd as CL,o as Hd,oa as J,ob as te,oc as U0,od as IL,p as Lr,pa as Ct,pb as jd,pc as Ht,q as oe,qa as rr,qb as O,qc as ri,r as T3,ra as Dt,rb as WI,rc as T0,rd as dL,s as zd,sa as ti,sb as Y,sc as $C,sd as BL,t as xF,ta as sr,tb as ws,tc as jF,u as J3,ua as UF,ub as hi,uc as qF,v as we,va as LA,vb as Je,vc as ca,w as Qr,wa as qe,wb as Oe,wc as pe,x as Fc,xa as z3,xb as H,xc as VF,y as qv,ya as Wv,yb as B,yc as WF,z as O3,za as bA,zb as Q,zc as Us}from"./chunk-EN473UE3.js";import{a as gA,b as Ye,c as vF,d as G3,f as K3,g as lt,h as Ce}from"./chunk-W7GRJBO5.js";var cO=G3(f9=>{"use strict";var gO={b:"\b",f:"\f",n:` +`,r:"\r",t:" ",'"':'"',"/":"/","\\":"\\"},V0A=97;f9.parse=function(t,e,A){var i={},n=0,o=0,a=0,r=A&&A.bigint&&typeof BigInt<"u";return{data:s("",!0),pointers:i};function s(P,W){l();var eA;k(P,"value");var Z=E();switch(Z){case"t":h("rue"),eA=!0;break;case"f":h("alse"),eA=!1;break;case"n":h("ull"),eA=null;break;case'"':eA=g();break;case"[":eA=I(P);break;case"{":eA=d(P);break;default:f(),"-0123456789".indexOf(Z)>=0?eA=C():x()}return k(P,"valueEnd"),l(),W&&aNumber.MAX_SAFE_INTEGER||eA="a"&&eA<="f"?W+=eA.charCodeAt()-V0A+10:eA>="0"&&eA<="9"?W+=+eA:F()}return String.fromCharCode(W)}function v(){for(var P="";t[a]>="0"&&t[a]<="9";)P+=E();if(P.length)return P;z(),x()}function k(P,W){S(P,W,b())}function S(P,W,eA){i[P]=i[P]||{},i[P][W]=eA}function b(){return{line:n,column:o,pos:a}}function x(){throw new SyntaxError("Unexpected token "+t[a]+" in JSON at position "+a)}function F(){f(),x()}function z(){if(a>=t.length)throw new SyntaxError("Unexpected end of JSON input")}};f9.stringify=function(t,e,A){if(!t8(t))return;var i=0,n,o,a=typeof A=="object"?A.space:A;switch(typeof a){case"number":var r=a>10?10:a<0?0:Math.floor(a);a=r&&S(r," "),n=r,o=r;break;case"string":a=a.slice(0,10),n=0,o=0;for(var s=0;s=0}var Z0A=/"|\\/g,X0A=/[\b]/g,$0A=/\f/g,ACA=/\n/g,eCA=/\r/g,tCA=/\t/g;function i8(t){return t=t.replace(Z0A,"\\$&").replace($0A,"\\f").replace(X0A,"\\b").replace(ACA,"\\n").replace(eCA,"\\r").replace(tCA,"\\t"),'"'+t+'"'}var iCA=/~/g,nCA=/\//g;function u9(t){return t.replace(iCA,"~0").replace(nCA,"~1")}});var Rz=G3((oBe,_z)=>{"use strict";var xz=function(t,e){var A,i,n=1,o=0,a=0,r=String.alphabet;function s(l,g,C){if(C){for(A=g;C=s(l,A),C<76&&C>65;)++A;return+l.slice(g-1,A)}return C=r&&r.indexOf(l.charAt(g)),C>-1?C+76:(C=l.charCodeAt(g)||0,C<45||C>127?C:C<46?65:C<48?C-1:C<58?C+18:C<65?C-11:C<91?C+11:C<97?C-37:C<123?C+5:C-63)}if((t+="")!=(e+="")){for(;n;)if(i=s(t,o++),n=s(e,a++),i<76&&n<76&&i>66&&n>66&&(i=s(t,o,o),n=s(e,a,o=A),a=A),i!=n)return i{"use strict";(function(t){"use strict";function e(j){return j!==null?Object.prototype.toString.call(j)==="[object Array]":!1}function A(j){return j!==null?Object.prototype.toString.call(j)==="[object Object]":!1}function i(j,$){if(j===$)return!0;var oA=Object.prototype.toString.call(j);if(oA!==Object.prototype.toString.call($))return!1;if(e(j)===!0){if(j.length!==$.length)return!1;for(var sA=0;sA",9:"Array"},k="EOF",S="UnquotedIdentifier",b="QuotedIdentifier",x="Rbracket",F="Rparen",z="Comma",P="Colon",W="Rbrace",eA="Number",Z="Current",EA="Expref",X="Pipe",iA="Or",AA="And",IA="EQ",aA="GT",rA="LT",uA="GTE",UA="LTE",$A="NE",zA="Flatten",pA="Star",PA="Filter",Ue="Dot",_e="Not",YA="Lbrace",fA="Lbracket",XA="Lparen",DA="Literal",ee={".":Ue,"*":pA,",":z,":":P,"{":YA,"}":W,"]":x,"(":XA,")":F,"@":Z},NA={"<":!0,">":!0,"=":!0,"!":!0},ke={" ":!0," ":!0,"\n":!0};function HA(j){return j>="a"&&j<="z"||j>="A"&&j<="Z"||j==="_"}function vA(j){return j>="0"&&j<="9"||j==="-"}function Gt(j){return j>="a"&&j<="z"||j>="A"&&j<="Z"||j>="0"&&j<="9"||j==="_"}function ft(){}ft.prototype={tokenize:function(j){var $=[];this._current=0;for(var oA,sA,TA;this._current")return j[this._current]==="="?(this._current++,{type:uA,value:">=",start:$}):{type:aA,value:">",start:$};if(oA==="="&&j[this._current]==="=")return this._current++,{type:IA,value:"==",start:$}},_consumeLiteral:function(j){this._current++;for(var $=this._current,oA=j.length,sA;j[this._current]!=="`"&&this._current=0)return!0;if(oA.indexOf(j)>=0)return!0;if(sA.indexOf(j[0])>=0)try{return JSON.parse(j),!0}catch(TA){return!1}else return!1}};var he={};he[k]=0,he[S]=0,he[b]=0,he[x]=0,he[F]=0,he[z]=0,he[W]=0,he[eA]=0,he[Z]=0,he[EA]=0,he[X]=1,he[iA]=2,he[AA]=3,he[IA]=5,he[aA]=5,he[rA]=5,he[uA]=5,he[UA]=5,he[$A]=5,he[zA]=9,he[pA]=20,he[PA]=21,he[Ue]=40,he[_e]=45,he[YA]=50,he[fA]=55,he[XA]=60;function Ot(){}Ot.prototype={parse:function(j){this._loadTokens(j),this.index=0;var $=this.expression(0);if(this._lookahead(0)!==k){var oA=this._lookaheadToken(0),sA=new Error("Unexpected token type: "+oA.type+", value: "+oA.value);throw sA.name="ParserError",sA}return $},_loadTokens:function(j){var $=new ft,oA=$.tokenize(j);oA.push({type:k,value:"",start:j.length}),this.tokens=oA},expression:function(j){var $=this._lookaheadToken(0);this._advance();for(var oA=this.nud($),sA=this._lookahead(0);j=0)return this.expression(j);if($===fA)return this._match(fA),this._parseMultiselectList();if($===YA)return this._match(YA),this._parseMultiselectHash()},_parseProjectionRHS:function(j){var $;if(he[this._lookahead(0)]<10)$={type:"Identity"};else if(this._lookahead(0)===fA)$=this.expression(j);else if(this._lookahead(0)===PA)$=this.expression(j);else if(this._lookahead(0)===Ue)this._match(Ue),$=this._parseDotRHS(j);else{var oA=this._lookaheadToken(0),sA=new Error("Sytanx error, unexpected token: "+oA.value+"("+oA.type+")");throw sA.name="ParserError",sA}return $},_parseMultiselectList:function(){for(var j=[];this._lookahead(0)!==x;){var $=this.expression(0);if(j.push($),this._lookahead(0)===z&&(this._match(z),this._lookahead(0)===x))throw new Error("Unexpected token Rbracket")}return this._match(x),{type:"MultiSelectList",children:j}},_parseMultiselectHash:function(){for(var j=[],$=[S,b],oA,sA,TA,de;;){if(oA=this._lookaheadToken(0),$.indexOf(oA.type)<0)throw new Error("Expecting an identifier token, got: "+oA.type);if(sA=oA.value,this._advance(),this._match(P),TA=this.expression(0),de={type:"KeyValuePair",name:sA,value:TA},j.push(de),this._lookahead(0)===z)this._match(z);else if(this._lookahead(0)===W){this._match(W);break}}return{type:"MultiSelectHash",children:j}}};function He(j){this.runtime=j}He.prototype={search:function(j,$){return this.visit(j,$)},visit:function(j,$){var oA,sA,TA,de,Qe,GA,OA,ht,tt,ze;switch(j.type){case"Field":return $!==null&&A($)?(GA=$[j.name],GA===void 0?null:GA):null;case"Subexpression":for(TA=this.visit(j.children[0],$),ze=1;ze0)for(ze=hn;zeKe;ze+=nn)TA.push($[ze]);return TA;case"Projection":var Si=this.visit(j.children[0],$);if(!e(Si))return null;for(tt=[],ze=0;zeQe;break;case uA:TA=de>=Qe;break;case rA:TA=de=j&&($=oA<0?j-1:j),$}};function je(j){this._interpreter=j,this.functionTable={abs:{_func:this._functionAbs,_signature:[{types:[s]}]},avg:{_func:this._functionAvg,_signature:[{types:[f]}]},ceil:{_func:this._functionCeil,_signature:[{types:[s]}]},contains:{_func:this._functionContains,_signature:[{types:[g,C]},{types:[l]}]},ends_with:{_func:this._functionEndsWith,_signature:[{types:[g]},{types:[g]}]},floor:{_func:this._functionFloor,_signature:[{types:[s]}]},length:{_func:this._functionLength,_signature:[{types:[g,C,I]}]},map:{_func:this._functionMap,_signature:[{types:[h]},{types:[C]}]},max:{_func:this._functionMax,_signature:[{types:[f,m]}]},merge:{_func:this._functionMerge,_signature:[{types:[I],variadic:!0}]},max_by:{_func:this._functionMaxBy,_signature:[{types:[C]},{types:[h]}]},sum:{_func:this._functionSum,_signature:[{types:[f]}]},starts_with:{_func:this._functionStartsWith,_signature:[{types:[g]},{types:[g]}]},min:{_func:this._functionMin,_signature:[{types:[f,m]}]},min_by:{_func:this._functionMinBy,_signature:[{types:[C]},{types:[h]}]},type:{_func:this._functionType,_signature:[{types:[l]}]},keys:{_func:this._functionKeys,_signature:[{types:[I]}]},values:{_func:this._functionValues,_signature:[{types:[I]}]},sort:{_func:this._functionSort,_signature:[{types:[m,f]}]},sort_by:{_func:this._functionSortBy,_signature:[{types:[C]},{types:[h]}]},join:{_func:this._functionJoin,_signature:[{types:[g]},{types:[m]}]},reverse:{_func:this._functionReverse,_signature:[{types:[g,C]}]},to_array:{_func:this._functionToArray,_signature:[{types:[l]}]},to_string:{_func:this._functionToString,_signature:[{types:[l]}]},to_number:{_func:this._functionToNumber,_signature:[{types:[l]}]},not_null:{_func:this._functionNotNull,_signature:[{types:[l],variadic:!0}]}}}je.prototype={callFunction:function(j,$){var oA=this.functionTable[j];if(oA===void 0)throw new Error("Unknown function: "+j+"()");return this._validateArgs(j,$,oA._signature),oA._func.call(this,$)},_validateArgs:function(j,$,oA){var sA;if(oA[oA.length-1].variadic){if($.length=0;TA--)sA+=oA[TA];return sA}else{var de=j[0].slice(0);return de.reverse(),de}},_functionAbs:function(j){return Math.abs(j[0])},_functionCeil:function(j){return Math.ceil(j[0])},_functionAvg:function(j){for(var $=0,oA=j[0],sA=0;sA=0},_functionFloor:function(j){return Math.floor(j[0])},_functionLength:function(j){return A(j[0])?Object.keys(j[0]).length:j[0].length},_functionMap:function(j){for(var $=[],oA=this._interpreter,sA=j[0],TA=j[1],de=0;de0){var $=this._getTypeName(j[0][0]);if($===s)return Math.max.apply(Math,j[0]);for(var oA=j[0],sA=oA[0],TA=1;TA0){var $=this._getTypeName(j[0][0]);if($===s)return Math.min.apply(Math,j[0]);for(var oA=j[0],sA=oA[0],TA=1;TATe?1:zeTA&&(TA=Qe,de=oA[GA]);return de},_functionMinBy:function(j){for(var $=j[1],oA=j[0],sA=this.createKeyFunction($,[s,g]),TA=1/0,de,Qe,GA=0;GA"u"?H8.jmespath={}:H8)});var ktA=G3((Wwe,Yy)=>{"use strict";var QSA=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};var kt=(function(t){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,A=0,i={},n={manual:t.Prism&&t.Prism.manual,disableWorkerMessageHandler:t.Prism&&t.Prism.disableWorkerMessageHandler,util:{encode:function E(f){return f instanceof o?new o(f.type,E(f.content),f.alias):Array.isArray(f)?f.map(E):f.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(v){var E=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(v.stack)||[])[1];if(E){var f=document.getElementsByTagName("script");for(var m in f)if(f[m].src==E)return f[m]}return null}},isActive:function(E,f,m){for(var v="no-"+f;E;){var k=E.classList;if(k.contains(f))return!0;if(k.contains(v))return!1;E=E.parentElement}return!!m}},languages:{plain:i,plaintext:i,text:i,txt:i,extend:function(E,f){var m=n.util.clone(n.languages[E]);for(var v in f)m[v]=f[v];return m},insertBefore:function(E,f,m,v){v=v||n.languages;var k=v[E],S={};for(var b in k)if(k.hasOwnProperty(b)){if(b==f)for(var x in m)m.hasOwnProperty(x)&&(S[x]=m[x]);m.hasOwnProperty(b)||(S[b]=k[b])}var F=v[E];return v[E]=S,n.languages.DFS(n.languages,function(z,P){P===F&&z!=E&&(this[z]=S)}),S},DFS:function E(f,m,v,k){k=k||{};var S=n.util.objId;for(var b in f)if(f.hasOwnProperty(b)){m.call(f,b,f[b],v||b);var x=f[b],F=n.util.type(x);F==="Object"&&!k[S(x)]?(k[S(x)]=!0,E(x,m,null,k)):F==="Array"&&!k[S(x)]&&(k[S(x)]=!0,E(x,m,b,k))}}},plugins:{},highlightAll:function(E,f){n.highlightAllUnder(document,E,f)},highlightAllUnder:function(E,f,m){var v={callback:m,container:E,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};n.hooks.run("before-highlightall",v),v.elements=Array.prototype.slice.apply(v.container.querySelectorAll(v.selector)),n.hooks.run("before-all-elements-highlight",v);for(var k=0,S;S=v.elements[k++];)n.highlightElement(S,f===!0,v.callback)},highlightElement:function(E,f,m){var v=n.util.getLanguage(E),k=n.languages[v];n.util.setLanguage(E,v);var S=E.parentElement;S&&S.nodeName.toLowerCase()==="pre"&&n.util.setLanguage(S,v);var b=E.textContent,x={element:E,language:v,grammar:k,code:b};function F(P){x.highlightedCode=P,n.hooks.run("before-insert",x),x.element.innerHTML=x.highlightedCode,n.hooks.run("after-highlight",x),n.hooks.run("complete",x),m&&m.call(x.element)}if(n.hooks.run("before-sanity-check",x),S=x.element.parentElement,S&&S.nodeName.toLowerCase()==="pre"&&!S.hasAttribute("tabindex")&&S.setAttribute("tabindex","0"),!x.code){n.hooks.run("complete",x),m&&m.call(x.element);return}if(n.hooks.run("before-highlight",x),!x.grammar){F(n.util.encode(x.code));return}if(f&&t.Worker){var z=new Worker(n.filename);z.onmessage=function(P){F(P.data)},z.postMessage(JSON.stringify({language:x.language,code:x.code,immediateClose:!0}))}else F(n.highlight(x.code,x.grammar,x.language))},highlight:function(E,f,m){var v={code:E,grammar:f,language:m};if(n.hooks.run("before-tokenize",v),!v.grammar)throw new Error('The language "'+v.language+'" has no grammar.');return v.tokens=n.tokenize(v.code,v.grammar),n.hooks.run("after-tokenize",v),o.stringify(n.util.encode(v.tokens),v.language)},tokenize:function(E,f){var m=f.rest;if(m){for(var v in m)f[v]=m[v];delete f.rest}var k=new s;return l(k,k.head,E),r(E,k,f,k.head,0),C(k)},hooks:{all:{},add:function(E,f){var m=n.hooks.all;m[E]=m[E]||[],m[E].push(f)},run:function(E,f){var m=n.hooks.all[E];if(!(!m||!m.length))for(var v=0,k;k=m[v++];)k(f)}},Token:o};t.Prism=n;function o(E,f,m,v){this.type=E,this.content=f,this.alias=m,this.length=(v||"").length|0}o.stringify=function E(f,m){if(typeof f=="string")return f;if(Array.isArray(f)){var v="";return f.forEach(function(F){v+=E(F,m)}),v}var k={type:f.type,content:E(f.content,m),tag:"span",classes:["token",f.type],attributes:{},language:m},S=f.alias;S&&(Array.isArray(S)?Array.prototype.push.apply(k.classes,S):k.classes.push(S)),n.hooks.run("wrap",k);var b="";for(var x in k.attributes)b+=" "+x+'="'+(k.attributes[x]||"").replace(/"/g,""")+'"';return"<"+k.tag+' class="'+k.classes.join(" ")+'"'+b+">"+k.content+""};function a(E,f,m,v){E.lastIndex=f;var k=E.exec(m);if(k&&v&&k[1]){var S=k[1].length;k.index+=S,k[0]=k[0].slice(S)}return k}function r(E,f,m,v,k,S){for(var b in m)if(!(!m.hasOwnProperty(b)||!m[b])){var x=m[b];x=Array.isArray(x)?x:[x];for(var F=0;F=S.reach);AA+=iA.value.length,iA=iA.next){var IA=iA.value;if(f.length>E.length)return;if(!(IA instanceof o)){var aA=1,rA;if(eA){if(rA=a(X,AA,E,W),!rA||rA.index>=E.length)break;var zA=rA.index,uA=rA.index+rA[0].length,UA=AA;for(UA+=iA.value.length;zA>=UA;)iA=iA.next,UA+=iA.value.length;if(UA-=iA.value.length,AA=UA,iA.value instanceof o)continue;for(var $A=iA;$A!==f.tail&&(UAS.reach&&(S.reach=_e);var YA=iA.prev;PA&&(YA=l(f,YA,PA),AA+=PA.length),g(f,YA,aA);var fA=new o(b,P?n.tokenize(pA,P):pA,Z,pA);if(iA=l(f,YA,fA),Ue&&l(f,iA,Ue),aA>1){var XA={cause:b+","+F,reach:_e};r(E,f,m,iA.prev,AA,XA),S&&XA.reach>S.reach&&(S.reach=XA.reach)}}}}}}function s(){var E={value:null,prev:null,next:null},f={value:null,prev:E,next:null};E.next=f,this.head=E,this.tail=f,this.length=0}function l(E,f,m){var v=f.next,k={value:m,prev:f,next:v};return f.next=k,v.prev=k,E.length++,k}function g(E,f,m){for(var v=f.next,k=0;k/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]};kt.languages.markup.tag.inside["attr-value"].inside.entity=kt.languages.markup.entity;kt.languages.markup.doctype.inside["internal-subset"].inside=kt.languages.markup;kt.hooks.add("wrap",function(t){t.type==="entity"&&(t.attributes.title=t.content.replace(/&/,"&"))});Object.defineProperty(kt.languages.markup.tag,"addInlined",{value:function(e,A){var i={};i["language-"+A]={pattern:/(^$)/i,lookbehind:!0,inside:kt.languages[A]},i.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:i}};n["language-"+A]={pattern:/[\s\S]+/,inside:kt.languages[A]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},kt.languages.insertBefore("markup","cdata",o)}});Object.defineProperty(kt.languages.markup.tag,"addAttribute",{value:function(t,e){kt.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+t+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:kt.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}});kt.languages.html=kt.languages.markup;kt.languages.mathml=kt.languages.markup;kt.languages.svg=kt.languages.markup;kt.languages.xml=kt.languages.extend("markup",{});kt.languages.ssml=kt.languages.xml;kt.languages.atom=kt.languages.xml;kt.languages.rss=kt.languages.xml;(function(t){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var A=t.languages.markup;A&&(A.tag.addInlined("style","css"),A.tag.addAttribute("style","css"))})(kt);kt.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};kt.languages.javascript=kt.languages.extend("clike",{"class-name":[kt.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/});kt.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;kt.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:kt.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:kt.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:kt.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:kt.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:kt.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});kt.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:kt.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}});kt.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}});kt.languages.markup&&(kt.languages.markup.tag.addInlined("script","javascript"),kt.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript"));kt.languages.js=kt.languages.javascript;(function(){if(typeof kt>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var t="Loading\u2026",e=function(I,d){return"\u2716 Error "+I+" while fetching file: "+d},A="\u2716 Error: File does not exist or is empty",i={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},n="data-src-status",o="loading",a="loaded",r="failed",s="pre[data-src]:not(["+n+'="'+a+'"]):not(['+n+'="'+o+'"])';function l(I,d,h){var E=new XMLHttpRequest;E.open("GET",I,!0),E.onreadystatechange=function(){E.readyState==4&&(E.status<400&&E.responseText?d(E.responseText):E.status>=400?h(e(E.status,E.statusText)):h(A))},E.send(null)}function g(I){var d=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(I||"");if(d){var h=Number(d[1]),E=d[2],f=d[3];return E?f?[h,Number(f)]:[h,void 0]:[h,h]}}kt.hooks.add("before-highlightall",function(I){I.selector+=", "+s}),kt.hooks.add("before-sanity-check",function(I){var d=I.element;if(d.matches(s)){I.code="",d.setAttribute(n,o);var h=d.appendChild(document.createElement("CODE"));h.textContent=t;var E=d.getAttribute("data-src"),f=I.language;if(f==="none"){var m=(/\.(\w+)$/.exec(E)||[,"none"])[1];f=i[m]||m}kt.util.setLanguage(h,f),kt.util.setLanguage(d,f);var v=kt.plugins.autoloader;v&&v.loadLanguages(f),l(E,function(k){d.setAttribute(n,a);var S=g(d.getAttribute("data-range"));if(S){var b=k.split(/\r\n?|\n/g),x=S[0],F=S[1]==null?b.length:S[1];x<0&&(x+=b.length),x=Math.max(0,Math.min(x-1,b.length)),F<0&&(F+=b.length),F=Math.max(0,Math.min(F,b.length)),k=b.slice(x,F).join(` +`),d.hasAttribute("data-start")||d.setAttribute("data-start",String(x+1))}h.textContent=k,kt.highlightElement(h)},function(k){d.setAttribute(n,r),h.textContent=k})}}),kt.plugins.fileHighlight={highlight:function(d){for(var h=(d||document).querySelectorAll(s),E=0,f;f=h[E++];)kt.highlightElement(f)}};var C=!1;kt.fileHighlight=function(){C||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),C=!0),kt.plugins.fileHighlight.highlight.apply(this,arguments)}})()});var wL=(()=>{class t{_renderer;_elementRef;onChange=A=>{};onTouched=()=>{};constructor(A,i){this._renderer=A,this._elementRef=i}setProperty(A,i){this._renderer.setProperty(this._elementRef.nativeElement,A,i)}registerOnTouched(A){this.onTouched=A}registerOnChange(A){this.onChange=A}setDisabledState(A){this.setProperty("disabled",A)}static \u0275fac=function(i){return new(i||t)(ct(Pi),ct(ce))};static \u0275dir=VA({type:t})}return t})(),ab=(()=>{class t extends wL{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,features:[mt]})}return t})(),as=new kA(""),GiA={provide:as,useExisting:Ja(()=>rb),multi:!0},rb=(()=>{class t extends ab{writeValue(A){this.setProperty("checked",A)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(i,n){i&1&&U("change",function(a){return n.onChange(a.target.checked)})("blur",function(){return n.onTouched()})},standalone:!1,features:[Bt([GiA]),mt]})}return t})(),KiA={provide:as,useExisting:Ja(()=>Dn),multi:!0};function UiA(){let t=Ab()?Ab().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}var TiA=new kA(""),Dn=(()=>{class t extends wL{_compositionMode;_composing=!1;constructor(A,i,n){super(A,i),this._compositionMode=n,this._compositionMode==null&&(this._compositionMode=!UiA())}writeValue(A){let i=A??"";this.setProperty("value",i)}_handleInput(A){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(A)}_compositionStart(){this._composing=!0}_compositionEnd(A){this._composing=!1,this._compositionMode&&this.onChange(A)}static \u0275fac=function(i){return new(i||t)(ct(Pi),ct(ce),ct(TiA,8))};static \u0275dir=VA({type:t,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,n){i&1&&U("input",function(a){return n._handleInput(a.target.value)})("blur",function(){return n.onTouched()})("compositionstart",function(){return n._compositionStart()})("compositionend",function(a){return n._compositionEnd(a.target.value)})},standalone:!1,features:[Bt([KiA]),mt]})}return t})();function sb(t){return t==null||lb(t)===0}function lb(t){return t==null?null:Array.isArray(t)||typeof t=="string"?t.length:t instanceof Set?t.size:null}var Oc=new kA(""),OQ=new kA(""),JiA=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Ys=class{static min(e){return DL(e)}static max(e){return OiA(e)}static required(e){return YiA(e)}static requiredTrue(e){return HiA(e)}static email(e){return ziA(e)}static minLength(e){return PiA(e)}static maxLength(e){return jiA(e)}static pattern(e){return qiA(e)}static nullValidator(e){return op()}static compose(e){return kL(e)}static composeAsync(e){return xL(e)}};function DL(t){return e=>{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A>t?{max:{max:t,actual:e.value}}:null}}function YiA(t){return sb(t.value)?{required:!0}:null}function HiA(t){return t.value===!0?null:{required:!0}}function ziA(t){return sb(t.value)||JiA.test(t.value)?null:{email:!0}}function PiA(t){return e=>{let A=e.value?.length??lb(e.value);return A===null||A===0?null:A{let A=e.value?.length??lb(e.value);return A!==null&&A>t?{maxlength:{requiredLength:t,actualLength:A}}:null}}function qiA(t){if(!t)return op;let e,A;return typeof t=="string"?(A="",t.charAt(0)!=="^"&&(A+="^"),A+=t,t.charAt(t.length-1)!=="$"&&(A+="$"),e=new RegExp(A)):(A=t.toString(),e=t),i=>{if(sb(i.value))return null;let n=i.value;return e.test(n)?null:{pattern:{requiredPattern:A,actualValue:n}}}}function op(t){return null}function yL(t){return t!=null}function vL(t){return $3(t)?Lr(t):t}function bL(t){let e={};return t.forEach(A=>{e=A!=null?gA(gA({},e),A):e}),Object.keys(e).length===0?null:e}function ML(t,e){return e.map(A=>A(t))}function ViA(t){return!t.validate}function SL(t){return t.map(e=>ViA(e)?e:A=>e.validate(A))}function kL(t){if(!t)return null;let e=t.filter(yL);return e.length==0?null:function(A){return bL(ML(A,e))}}function gb(t){return t!=null?kL(SL(t)):null}function xL(t){if(!t)return null;let e=t.filter(yL);return e.length==0?null:function(A){let i=ML(A,e).map(vL);return qC(i).pipe(we(bL))}}function cb(t){return t!=null?xL(SL(t)):null}function EL(t,e){return t===null?[e]:Array.isArray(t)?[...t,e]:[t,e]}function _L(t){return t._rawValidators}function RL(t){return t._rawAsyncValidators}function ib(t){return t?Array.isArray(t)?t:[t]:[]}function ap(t,e){return Array.isArray(t)?t.includes(e):t===e}function hL(t,e){let A=ib(e);return ib(t).forEach(n=>{ap(A,n)||A.push(n)}),A}function QL(t,e){return ib(e).filter(A=>!ap(t,A))}var rp=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(e){this._rawValidators=e||[],this._composedValidatorFn=gb(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=cb(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control?.reset(e)}hasError(e,A){return this.control?this.control.hasError(e,A):!1}getError(e,A){return this.control?this.control.getError(e,A):null}},Y0=class extends rp{name;get formDirective(){return null}get path(){return null}},Hs=class extends rp{_parent=null;name=null;valueAccessor=null},sp=class{_cd;constructor(e){this._cd=e}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}};var yn=(()=>{class t extends sp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(ct(Hs,2))};static \u0275dir=VA({type:t,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,n){i&2&&RA("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)},standalone:!1,features:[mt]})}return t})(),NL=(()=>{class t extends sp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(ct(Y0,10))};static \u0275dir=VA({type:t,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["","formArray",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,n){i&2&&RA("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)("ng-submitted",n.isSubmitted)},standalone:!1,features:[mt]})}return t})();var FQ="VALID",np="INVALID",Wd="PENDING",LQ="DISABLED",t2=class{},lp=class extends t2{value;source;constructor(e,A){super(),this.value=e,this.source=A}},KQ=class extends t2{pristine;source;constructor(e,A){super(),this.pristine=e,this.source=A}},UQ=class extends t2{touched;source;constructor(e,A){super(),this.touched=e,this.source=A}},Zd=class extends t2{status;source;constructor(e,A){super(),this.status=e,this.source=A}},gp=class extends t2{source;constructor(e){super(),this.source=e}},TQ=class extends t2{source;constructor(e){super(),this.source=e}};function Cb(t){return(dp(t)?t.validators:t)||null}function WiA(t){return Array.isArray(t)?gb(t):t||null}function Ib(t,e){return(dp(e)?e.asyncValidators:t)||null}function ZiA(t){return Array.isArray(t)?cb(t):t||null}function dp(t){return t!=null&&!Array.isArray(t)&&typeof t=="object"}function FL(t,e,A){let i=t.controls;if(!(e?Object.keys(i):i).length)throw new Mt(1e3,"");if(!i[A])throw new Mt(1001,"")}function LL(t,e,A){t._forEachChild((i,n)=>{if(A[n]===void 0)throw new Mt(1002,"")})}var Xd=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,A){this._assignValidators(e),this._assignAsyncValidators(A)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return ca(this.statusReactive)}set status(e){ca(()=>this.statusReactive.set(e))}_status=pe(()=>this.statusReactive());statusReactive=bA(void 0);get valid(){return this.status===FQ}get invalid(){return this.status===np}get pending(){return this.status==Wd}get disabled(){return this.status===LQ}get enabled(){return this.status!==LQ}errors;get pristine(){return ca(this.pristineReactive)}set pristine(e){ca(()=>this.pristineReactive.set(e))}_pristine=pe(()=>this.pristineReactive());pristineReactive=bA(!0);get dirty(){return!this.pristine}get touched(){return ca(this.touchedReactive)}set touched(e){ca(()=>this.touchedReactive.set(e))}_touched=pe(()=>this.touchedReactive());touchedReactive=bA(!1);get untouched(){return!this.touched}_events=new ie;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(hL(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(hL(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(QL(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(QL(e,this._rawAsyncValidators))}hasValidator(e){return ap(this._rawValidators,e)}hasAsyncValidator(e){return ap(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let A=this.touched===!1;this.touched=!0;let i=e.sourceControl??this;e.onlySelf||this._parent?.markAsTouched(Ye(gA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new UQ(!0,i))}markAllAsDirty(e={}){this.markAsDirty({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsDirty(e))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsTouched(e))}markAsUntouched(e={}){let A=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:i})}),e.onlySelf||this._parent?._updateTouched(e,i),A&&e.emitEvent!==!1&&this._events.next(new UQ(!1,i))}markAsDirty(e={}){let A=this.pristine===!0;this.pristine=!1;let i=e.sourceControl??this;e.onlySelf||this._parent?.markAsDirty(Ye(gA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new KQ(!1,i))}markAsPristine(e={}){let A=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),e.onlySelf||this._parent?._updatePristine(e,i),A&&e.emitEvent!==!1&&this._events.next(new KQ(!0,i))}markAsPending(e={}){this.status=Wd;let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new Zd(this.status,A)),this.statusChanges.emit(this.status)),e.onlySelf||this._parent?.markAsPending(Ye(gA({},e),{sourceControl:A}))}disable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=LQ,this.errors=null,this._forEachChild(n=>{n.disable(Ye(gA({},e),{onlySelf:!0}))}),this._updateValue();let i=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new lp(this.value,i)),this._events.next(new Zd(this.status,i)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Ye(gA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(n=>n(!0))}enable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=FQ,this._forEachChild(i=>{i.enable(Ye(gA({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(Ye(gA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(i=>i(!1))}_updateAncestors(e,A){e.onlySelf||(this._parent?.updateValueAndValidity(e),e.skipPristineCheck||this._parent?._updatePristine({},A),this._parent?._updateTouched({},A))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let i=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===FQ||this.status===Wd)&&this._runAsyncValidator(i,e.emitEvent)}let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new lp(this.value,A)),this._events.next(new Zd(this.status,A)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),e.onlySelf||this._parent?.updateValueAndValidity(Ye(gA({},e),{sourceControl:A}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(A=>A._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?LQ:FQ}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,A){if(this.asyncValidator){this.status=Wd,this._hasOwnPendingAsyncValidator={emitEvent:A!==!1,shouldHaveEmitted:e!==!1};let i=vL(this.asyncValidator(this));this._asyncValidationSubscription=i.subscribe(n=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(n,{emitEvent:A,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,A={}){this.errors=e,this._updateControlsErrors(A.emitEvent!==!1,this,A.shouldHaveEmitted)}get(e){let A=e;return A==null||(Array.isArray(A)||(A=A.split(".")),A.length===0)?null:A.reduce((i,n)=>i&&i._find(n),this)}getError(e,A){let i=A?this.get(A):this;return i?.errors?i.errors[e]:null}hasError(e,A){return!!this.getError(e,A)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,A,i){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||i)&&this._events.next(new Zd(this.status,A)),this._parent&&this._parent._updateControlsErrors(e,A,i)}_initObservables(){this.valueChanges=new LA,this.statusChanges=new LA}_calculateStatus(){return this._allControlsDisabled()?LQ:this.errors?np:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Wd)?Wd:this._anyControlsHaveStatus(np)?np:FQ}_anyControlsHaveStatus(e){return this._anyControls(A=>A.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,A){let i=!this._anyControlsDirty(),n=this.pristine!==i;this.pristine=i,e.onlySelf||this._parent?._updatePristine(e,A),n&&this._events.next(new KQ(this.pristine,A))}_updateTouched(e={},A){this.touched=this._anyControlsTouched(),this._events.next(new UQ(this.touched,A)),e.onlySelf||this._parent?._updateTouched(e,A)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){dp(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){return!e&&!!this._parent?.dirty&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=WiA(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=ZiA(this._rawAsyncValidators)}},$d=class extends Xd{constructor(e,A,i){super(Cb(A),Ib(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(e,A){return this.controls[e]?this.controls[e]:(this.controls[e]=A,A.setParent(this),A._registerOnCollectionChange(this._onCollectionChange),A)}addControl(e,A,i={}){this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}removeControl(e,A={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}setControl(e,A,i={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],A&&this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}contains(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled}setValue(e,A={}){LL(this,!0,e),Object.keys(e).forEach(i=>{FL(this,!0,i),this.controls[i].setValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(Object.keys(e).forEach(i=>{let n=this.controls[i];n&&n.patchValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e={},A={}){this._forEachChild((i,n)=>{i.reset(e?e[n]:null,Ye(gA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new TQ(this))}getRawValue(){return this._reduceChildren({},(e,A,i)=>(e[i]=A.getRawValue(),e))}_syncPendingControls(){let e=this._reduceChildren(!1,(A,i)=>i._syncPendingControls()?!0:A);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){Object.keys(this.controls).forEach(A=>{let i=this.controls[A];i&&e(i,A)})}_setUpControls(){this._forEachChild(e=>{e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(e){for(let[A,i]of Object.entries(this.controls))if(this.contains(A)&&e(i))return!0;return!1}_reduceValue(){let e={};return this._reduceChildren(e,(A,i,n)=>((i.enabled||this.disabled)&&(A[n]=i.value),A))}_reduceChildren(e,A){let i=e;return this._forEachChild((n,o)=>{i=A(i,n,o)}),i}_allControlsDisabled(){for(let e of Object.keys(this.controls))if(this.controls[e].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(e){return this.controls.hasOwnProperty(e)?this.controls[e]:null}};var nb=class extends $d{};var AB=new kA("",{factory:()=>Bp}),Bp="always";function GL(t,e){return[...e.path,t]}function JQ(t,e,A=Bp){db(t,e),e.valueAccessor.writeValue(t.value),(t.disabled||A==="always")&&e.valueAccessor.setDisabledState?.(t.disabled),$iA(t,e),enA(t,e),AnA(t,e),XiA(t,e)}function cp(t,e,A=!0){let i=()=>{};e?.valueAccessor?.registerOnChange(i),e?.valueAccessor?.registerOnTouched(i),Ip(t,e),t&&(e._invokeOnDestroyCallbacks(),t._registerOnCollectionChange(()=>{}))}function Cp(t,e){t.forEach(A=>{A.registerOnValidatorChange&&A.registerOnValidatorChange(e)})}function XiA(t,e){if(e.valueAccessor.setDisabledState){let A=i=>{e.valueAccessor.setDisabledState(i)};t.registerOnDisabledChange(A),e._registerOnDestroy(()=>{t._unregisterOnDisabledChange(A)})}}function db(t,e){let A=_L(t);e.validator!==null?t.setValidators(EL(A,e.validator)):typeof A=="function"&&t.setValidators([A]);let i=RL(t);e.asyncValidator!==null?t.setAsyncValidators(EL(i,e.asyncValidator)):typeof i=="function"&&t.setAsyncValidators([i]);let n=()=>t.updateValueAndValidity();Cp(e._rawValidators,n),Cp(e._rawAsyncValidators,n)}function Ip(t,e){let A=!1;if(t!==null){if(e.validator!==null){let n=_L(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.validator);o.length!==n.length&&(A=!0,t.setValidators(o))}}if(e.asyncValidator!==null){let n=RL(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.asyncValidator);o.length!==n.length&&(A=!0,t.setAsyncValidators(o))}}}let i=()=>{};return Cp(e._rawValidators,i),Cp(e._rawAsyncValidators,i),A}function $iA(t,e){e.valueAccessor.registerOnChange(A=>{t._pendingValue=A,t._pendingChange=!0,t._pendingDirty=!0,t.updateOn==="change"&&KL(t,e)})}function AnA(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,t.updateOn==="blur"&&t._pendingChange&&KL(t,e),t.updateOn!=="submit"&&t.markAsTouched()})}function KL(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function enA(t,e){let A=(i,n)=>{e.valueAccessor.writeValue(i),n&&e.viewToModelUpdate(i)};t.registerOnChange(A),e._registerOnDestroy(()=>{t._unregisterOnChange(A)})}function UL(t,e){t==null,db(t,e)}function tnA(t,e){return Ip(t,e)}function Bb(t,e){if(!t.hasOwnProperty("model"))return!1;let A=t.model;return A.isFirstChange()?!0:!Object.is(e,A.currentValue)}function inA(t){return Object.getPrototypeOf(t.constructor)===ab}function TL(t,e){t._syncPendingControls(),e.forEach(A=>{let i=A.control;i.updateOn==="submit"&&i._pendingChange&&(A.viewToModelUpdate(i._pendingValue),i._pendingChange=!1)})}function Eb(t,e){if(!e)return null;Array.isArray(e);let A,i,n;return e.forEach(o=>{o.constructor===Dn?A=o:inA(o)?i=o:n=o}),n||i||A||null}function nnA(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}var onA={provide:Y0,useExisting:Ja(()=>eB)},GQ=Promise.resolve(),eB=(()=>{class t extends Y0{callSetDisabledState;get submitted(){return ca(this.submittedReactive)}_submitted=pe(()=>this.submittedReactive());submittedReactive=bA(!1);_directives=new Set;form;ngSubmit=new LA;options;constructor(A,i,n){super(),this.callSetDisabledState=n,this.form=new $d({},gb(A),cb(i))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(A){GQ.then(()=>{let i=this._findContainer(A.path);A.control=i.registerControl(A.name,A.control),JQ(A.control,A,this.callSetDisabledState),A.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(A)})}getControl(A){return this.form.get(A.path)}removeControl(A){GQ.then(()=>{this._findContainer(A.path)?.removeControl(A.name),this._directives.delete(A)})}addFormGroup(A){GQ.then(()=>{let i=this._findContainer(A.path),n=new $d({});UL(n,A),i.registerControl(A.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(A){GQ.then(()=>{this._findContainer(A.path)?.removeControl?.(A.name)})}getFormGroup(A){return this.form.get(A.path)}updateModel(A,i){GQ.then(()=>{this.form.get(A.path).setValue(i)})}setValue(A){this.control.setValue(A)}onSubmit(A){return this.submittedReactive.set(!0),TL(this.form,this._directives),this.ngSubmit.emit(A),this.form._events.next(new gp(this.control)),A?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(A=void 0){this.form.reset(A),this.submittedReactive.set(!1)}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.form._updateOn=this.options.updateOn)}_findContainer(A){return A.pop(),A.length?this.form.get(A):this.form}static \u0275fac=function(i){return new(i||t)(ct(Oc,10),ct(OQ,10),ct(AB,8))};static \u0275dir=VA({type:t,selectors:[["form",3,"ngNoForm","",3,"formGroup","",3,"formArray",""],["ng-form"],["","ngForm",""]],hostBindings:function(i,n){i&1&&U("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{options:[0,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[Bt([onA]),mt]})}return t})();function uL(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}function fL(t){return typeof t=="object"&&t!==null&&Object.keys(t).length===2&&"value"in t&&"disabled"in t}var Os=class extends Xd{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,A,i){super(Cb(A),Ib(i,A)),this._applyFormState(e),this._setUpdateStrategy(A),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),dp(A)&&(A.nonNullable||A.initialValueIsDefault)&&(fL(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,A={}){this.value=this._pendingValue=e,this._onChange.length&&A.emitModelToViewChange!==!1&&this._onChange.forEach(i=>i(this.value,A.emitViewToModelChange!==!1)),this.updateValueAndValidity(A)}patchValue(e,A={}){this.setValue(e,A)}reset(e=this.defaultValue,A={}){this._applyFormState(e),this.markAsPristine(A),this.markAsUntouched(A),this.setValue(this.value,A),A.overwriteDefaultValue&&(this.defaultValue=this.value),this._pendingChange=!1,A?.emitEvent!==!1&&this._events.next(new TQ(this))}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){uL(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){uL(this._onDisabledChange,e)}_forEachChild(e){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(e){fL(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}};var anA=t=>t instanceof Os;var rnA={provide:Hs,useExisting:Ja(()=>ko)},pL=Promise.resolve(),ko=(()=>{class t extends Hs{_changeDetectorRef;callSetDisabledState;control=new Os;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new LA;constructor(A,i,n,o,a,r){super(),this._changeDetectorRef=a,this.callSetDisabledState=r,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=Eb(this,o)}ngOnChanges(A){if(this._checkForErrors(),!this._registered||"name"in A){if(this._registered&&(this._checkName(),this.formDirective)){let i=A.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in A&&this._updateDisabled(A),Bb(A,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective?.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){JQ(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(A){pL.then(()=>{this.control.setValue(A,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(A){let i=A.isDisabled.currentValue,n=i!==0&&Be(i);pL.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(A){return this._parent?GL(A,this._parent):[A]}static \u0275fac=function(i){return new(i||t)(ct(Y0,9),ct(Oc,10),ct(OQ,10),ct(as,10),ct(wt,8),ct(AB,8))};static \u0275dir=VA({type:t,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[Bt([rnA]),mt,Yt]})}return t})();var JL=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1})}return t})(),snA={provide:as,useExisting:Ja(()=>YQ),multi:!0},YQ=(()=>{class t extends ab{writeValue(A){let i=A??"";this.setProperty("value",i)}registerOnChange(A){this.onChange=i=>{A(i==""?null:parseFloat(i))}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(i,n){i&1&&U("input",function(a){return n.onChange(a.target.value)})("blur",function(){return n.onTouched()})},standalone:!1,features:[Bt([snA]),mt]})}return t})();var ob=class extends Xd{constructor(e,A,i){super(Cb(A),Ib(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;at(e){return this.controls[this._adjustIndex(e)]}push(e,A={}){Array.isArray(e)?e.forEach(i=>{this.controls.push(i),this._registerControl(i)}):(this.controls.push(e),this._registerControl(e)),this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}insert(e,A,i={}){this.controls.splice(e,0,A),this._registerControl(A),this.updateValueAndValidity({emitEvent:i.emitEvent})}removeAt(e,A={}){let i=this._adjustIndex(e);i<0&&(i=0),this.controls[i]&&this.controls[i]._registerOnCollectionChange(()=>{}),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:A.emitEvent})}setControl(e,A,i={}){let n=this._adjustIndex(e);n<0&&(n=0),this.controls[n]&&this.controls[n]._registerOnCollectionChange(()=>{}),this.controls.splice(n,1),A&&(this.controls.splice(n,0,A),this._registerControl(A)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(e,A={}){LL(this,!1,e),e.forEach((i,n)=>{FL(this,!1,n),this.at(n).setValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(e.forEach((i,n)=>{this.at(n)&&this.at(n).patchValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e=[],A={}){this._forEachChild((i,n)=>{i.reset(e[n],Ye(gA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new TQ(this))}getRawValue(){return this.controls.map(e=>e.getRawValue())}clear(e={}){this.controls.length<1||(this._forEachChild(A=>A._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:e.emitEvent}))}_adjustIndex(e){return e<0?e+this.length:e}_syncPendingControls(){let e=this.controls.reduce((A,i)=>i._syncPendingControls()?!0:A,!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){this.controls.forEach((A,i)=>{e(A,i)})}_updateValue(){this.value=this.controls.filter(e=>e.enabled||this.disabled).map(e=>e.value)}_anyControls(e){return this.controls.some(A=>A.enabled&&e(A))}_setUpControls(){this._forEachChild(e=>this._registerControl(e))}_allControlsDisabled(){for(let e of this.controls)if(e.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)}_find(e){return this.at(e)??null}};var lnA=(()=>{class t extends Y0{callSetDisabledState;get submitted(){return ca(this._submittedReactive)}set submitted(A){this._submittedReactive.set(A)}_submitted=pe(()=>this._submittedReactive());_submittedReactive=bA(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];constructor(A,i,n){super(),this.callSetDisabledState=n,this._setValidators(A),this._setAsyncValidators(i)}ngOnChanges(A){this.onChanges(A)}ngOnDestroy(){this.onDestroy()}onChanges(A){this._checkFormPresent(),A.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}onDestroy(){this.form&&(Ip(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get path(){return[]}addControl(A){let i=this.form.get(A.path);return JQ(i,A,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(A),i}getControl(A){return this.form.get(A.path)}removeControl(A){cp(A.control||null,A,!1),nnA(this.directives,A)}addFormGroup(A){this._setUpFormContainer(A)}removeFormGroup(A){this._cleanUpFormContainer(A)}getFormGroup(A){return this.form.get(A.path)}getFormArray(A){return this.form.get(A.path)}addFormArray(A){this._setUpFormContainer(A)}removeFormArray(A){this._cleanUpFormContainer(A)}updateModel(A,i){this.form.get(A.path).setValue(i)}onReset(){this.resetForm()}resetForm(A=void 0,i={}){this.form.reset(A,i),this._submittedReactive.set(!1)}onSubmit(A){return this.submitted=!0,TL(this.form,this.directives),this.ngSubmit.emit(A),this.form._events.next(new gp(this.control)),A?.target?.method==="dialog"}_updateDomValue(){this.directives.forEach(A=>{let i=A.control,n=this.form.get(A.path);i!==n&&(cp(i||null,A),anA(n)&&(JQ(n,A,this.callSetDisabledState),A.control=n))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(A){let i=this.form.get(A.path);UL(i,A),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(A){let i=this.form?.get(A.path);i&&tnA(i,A)&&i.updateValueAndValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm?._registerOnCollectionChange(()=>{})}_updateValidators(){db(this.form,this),this._oldForm&&Ip(this._oldForm,this)}_checkFormPresent(){this.form}static \u0275fac=function(i){return new(i||t)(ct(Oc,10),ct(OQ,10),ct(AB,8))};static \u0275dir=VA({type:t,features:[mt,Yt]})}return t})();var hb=new kA(""),gnA={provide:Hs,useExisting:Ja(()=>XI)},XI=(()=>{class t extends Hs{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(A){}model;update=new LA;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this._setValidators(A),this._setAsyncValidators(i),this.valueAccessor=Eb(this,n)}ngOnChanges(A){if(this._isControlChanged(A)){let i=A.form.previousValue;i&&cp(i,this,!1),JQ(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}Bb(A,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&cp(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_isControlChanged(A){return A.hasOwnProperty("form")}static \u0275fac=function(i){return new(i||t)(ct(Oc,10),ct(OQ,10),ct(as,10),ct(hb,8),ct(AB,8))};static \u0275dir=VA({type:t,selectors:[["","formControl",""]],inputs:{form:[0,"formControl","form"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],standalone:!1,features:[Bt([gnA]),mt,Yt]})}return t})();var cnA={provide:Hs,useExisting:Ja(()=>Qb)},Qb=(()=>{class t extends Hs{_ngModelWarningConfig;_added=!1;viewModel;control;name=null;set isDisabled(A){}model;update=new LA;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=a,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=Eb(this,o)}ngOnChanges(A){this._added||this._setUpControl(),Bb(A,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective?.removeControl(this)}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}get path(){return GL(this.name==null?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_setUpControl(){this.control=this.formDirective.addControl(this),this._added=!0}static \u0275fac=function(i){return new(i||t)(ct(Y0,13),ct(Oc,10),ct(OQ,10),ct(as,10),ct(hb,8))};static \u0275dir=VA({type:t,selectors:[["","formControlName",""]],inputs:{name:[0,"formControlName","name"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},standalone:!1,features:[Bt([cnA]),mt,Yt]})}return t})();var CnA={provide:Y0,useExisting:Ja(()=>i2)},i2=(()=>{class t extends lnA{form=null;ngSubmit=new LA;get control(){return this.form}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","formGroup",""]],hostBindings:function(i,n){i&1&&U("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{form:[0,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[Bt([CnA]),mt]})}return t})();function InA(t){return typeof t=="number"?t:parseFloat(t)}var dnA=(()=>{class t{_validator=op;_onChange;_enabled;ngOnChanges(A){if(this.inputName in A){let i=this.normalizeInput(A[this.inputName].currentValue);this._enabled=this.enabled(i),this._validator=this._enabled?this.createValidator(i):op,this._onChange?.()}}validate(A){return this._validator(A)}registerOnValidatorChange(A){this._onChange=A}enabled(A){return A!=null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,features:[Yt]})}return t})();var BnA={provide:Oc,useExisting:Ja(()=>ub),multi:!0},ub=(()=>{class t extends dnA{min;inputName="min";normalizeInput=A=>InA(A);createValidator=A=>DL(A);static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(i,n){i&2&&te("min",n._enabled?n.min:null)},inputs:{min:"min"},standalone:!1,features:[Bt([BnA]),mt]})}return t})();var OL=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();function mL(t){return!!t&&(t.asyncValidators!==void 0||t.validators!==void 0||t.updateOn!==void 0)}var YL=(()=>{class t{useNonNullable=!1;get nonNullable(){let A=new t;return A.useNonNullable=!0,A}group(A,i=null){let n=this._reduceControls(A),o={};return mL(i)?o=i:i!==null&&(o.validators=i.validator,o.asyncValidators=i.asyncValidator),new $d(n,o)}record(A,i=null){let n=this._reduceControls(A);return new nb(n,i)}control(A,i,n){let o={};return this.useNonNullable?(mL(i)?o=i:(o.validators=i,o.asyncValidators=n),new Os(A,Ye(gA({},o),{nonNullable:!0}))):new Os(A,i,n)}array(A,i,n){let o=A.map(a=>this._createControl(a));return new ob(o,i,n)}_reduceControls(A){let i={};return Object.keys(A).forEach(n=>{i[n]=this._createControl(A[n])}),i}_createControl(A){if(A instanceof Os)return A;if(A instanceof Xd)return A;if(Array.isArray(A)){let i=A[0],n=A.length>1?A[1]:null,o=A.length>2?A[2]:null;return this.control(i,n,o)}else return this.control(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var ln=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:AB,useValue:A.callSetDisabledState??Bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[OL]})}return t})(),n2=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:hb,useValue:A.warnOnNgModelWithFormControl??"always"},{provide:AB,useValue:A.callSetDisabledState??Bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[OL]})}return t})();function $I(t){return t.buttons===0||t.detail===0}function A1(t){let e=t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0];return!!e&&e.identifier===-1&&(e.radiusX==null||e.radiusX===1)&&(e.radiusY==null||e.radiusY===1)}var fb;function HL(){if(fb==null){let t=typeof document<"u"?document.head:null;fb=!!(t&&(t.createShadowRoot||t.attachShadow))}return fb}function pb(t){if(HL()){let e=t.getRootNode?t.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&e instanceof ShadowRoot)return e}return null}function HQ(){let t=typeof document<"u"&&document?document.activeElement:null;for(;t&&t.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}function Ur(t){return t.composedPath?t.composedPath()[0]:t.target}var mb;try{mb=typeof Intl<"u"&&Intl.v8BreakIterator}catch(t){mb=!1}var li=(()=>{class t{_platformId=w(j3);isBrowser=this._platformId?O0(this._platformId):typeof document=="object"&&!!document;EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent);TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent);BLINK=this.isBrowser&&!!(window.chrome||mb)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT;WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT;IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window);FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent);ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT;SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT;constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var zQ;function zL(){if(zQ==null&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>zQ=!0}))}finally{zQ=zQ||!1}return zQ}function tB(t){return zL()?t:!!t.capture}function zs(t,e=0){return Ep(t)?Number(t):arguments.length===2?e:0}function Ep(t){return!isNaN(parseFloat(t))&&!isNaN(Number(t))}function Ds(t){return t instanceof ce?t.nativeElement:t}var PL=new kA("cdk-input-modality-detector-options"),jL={ignoreKeys:[18,17,224,91,16]},qL=650,wb={passive:!0,capture:!0},VL=(()=>{class t{_platform=w(li);_listenerCleanups;modalityDetected;modalityChanged;get mostRecentModality(){return this._modality.value}_mostRecentTarget=null;_modality=new ei(null);_options;_lastTouchMs=0;_onKeydown=A=>{this._options?.ignoreKeys?.some(i=>i===A.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=Ur(A))};_onMousedown=A=>{Date.now()-this._lastTouchMs{if(A1(A)){this._modality.next("keyboard");return}this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=Ur(A)};constructor(){let A=w(qe),i=w(ti),n=w(PL,{optional:!0});if(this._options=gA(gA({},jL),n),this.modalityDetected=this._modality.pipe(wl(1)),this.modalityChanged=this.modalityDetected.pipe(kg()),this._platform.isBrowser){let o=w(Kr).createRenderer(null,null);this._listenerCleanups=A.runOutsideAngular(()=>[o.listen(i,"keydown",this._onKeydown,wb),o.listen(i,"mousedown",this._onMousedown,wb),o.listen(i,"touchstart",this._onTouchstart,wb)])}}ngOnDestroy(){this._modality.complete(),this._listenerCleanups?.forEach(A=>A())}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),PQ=(function(t){return t[t.IMMEDIATE=0]="IMMEDIATE",t[t.EVENTUAL=1]="EVENTUAL",t})(PQ||{}),WL=new kA("cdk-focus-monitor-default-options"),hp=tB({passive:!0,capture:!0}),$a=(()=>{class t{_ngZone=w(qe);_platform=w(li);_inputModalityDetector=w(VL);_origin=null;_lastFocusOrigin=null;_windowFocused=!1;_windowFocusTimeoutId;_originTimeoutId;_originFromTouchInteraction=!1;_elementInfo=new Map;_monitoredElementCount=0;_rootNodeFocusListenerCount=new Map;_detectionMode;_windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=setTimeout(()=>this._windowFocused=!1)};_document=w(ti);_stopInputModalityDetector=new ie;constructor(){let A=w(WL,{optional:!0});this._detectionMode=A?.detectionMode||PQ.IMMEDIATE}_rootNodeFocusAndBlurListener=A=>{let i=Ur(A);for(let n=i;n;n=n.parentElement)A.type==="focus"?this._onFocus(A,n):this._onBlur(A,n)};monitor(A,i=!1){let n=Ds(A);if(!this._platform.isBrowser||n.nodeType!==1)return oe();let o=pb(n)||this._document,a=this._elementInfo.get(n);if(a)return i&&(a.checkChildren=!0),a.subject;let r={checkChildren:i,subject:new ie,rootNode:o};return this._elementInfo.set(n,r),this._registerGlobalListeners(r),r.subject}stopMonitoring(A){let i=Ds(A),n=this._elementInfo.get(i);n&&(n.subject.complete(),this._setClasses(i),this._elementInfo.delete(i),this._removeGlobalListeners(n))}focusVia(A,i,n){let o=Ds(A),a=this._document.activeElement;o===a?this._getClosestElementsInfo(o).forEach(([r,s])=>this._originChanged(r,i,s)):(this._setOrigin(i),typeof o.focus=="function"&&o.focus(n))}ngOnDestroy(){this._elementInfo.forEach((A,i)=>this.stopMonitoring(i))}_getWindow(){return this._document.defaultView||window}_getFocusOrigin(A){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(A)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:A&&this._isLastInteractionFromInputLabel(A)?"mouse":"program"}_shouldBeAttributedToTouch(A){return this._detectionMode===PQ.EVENTUAL||!!A?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(A,i){A.classList.toggle("cdk-focused",!!i),A.classList.toggle("cdk-touch-focused",i==="touch"),A.classList.toggle("cdk-keyboard-focused",i==="keyboard"),A.classList.toggle("cdk-mouse-focused",i==="mouse"),A.classList.toggle("cdk-program-focused",i==="program")}_setOrigin(A,i=!1){this._ngZone.runOutsideAngular(()=>{if(this._origin=A,this._originFromTouchInteraction=A==="touch"&&i,this._detectionMode===PQ.IMMEDIATE){clearTimeout(this._originTimeoutId);let n=this._originFromTouchInteraction?qL:1;this._originTimeoutId=setTimeout(()=>this._origin=null,n)}})}_onFocus(A,i){let n=this._elementInfo.get(i),o=Ur(A);!n||!n.checkChildren&&i!==o||this._originChanged(i,this._getFocusOrigin(o),n)}_onBlur(A,i){let n=this._elementInfo.get(i);!n||n.checkChildren&&A.relatedTarget instanceof Node&&i.contains(A.relatedTarget)||(this._setClasses(i),this._emitOrigin(n,null))}_emitOrigin(A,i){A.subject.observers.length&&this._ngZone.run(()=>A.subject.next(i))}_registerGlobalListeners(A){if(!this._platform.isBrowser)return;let i=A.rootNode,n=this._rootNodeFocusListenerCount.get(i)||0;n||this._ngZone.runOutsideAngular(()=>{i.addEventListener("focus",this._rootNodeFocusAndBlurListener,hp),i.addEventListener("blur",this._rootNodeFocusAndBlurListener,hp)}),this._rootNodeFocusListenerCount.set(i,n+1),++this._monitoredElementCount===1&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(Qt(this._stopInputModalityDetector)).subscribe(o=>{this._setOrigin(o,!0)}))}_removeGlobalListeners(A){let i=A.rootNode;if(this._rootNodeFocusListenerCount.has(i)){let n=this._rootNodeFocusListenerCount.get(i);n>1?this._rootNodeFocusListenerCount.set(i,n-1):(i.removeEventListener("focus",this._rootNodeFocusAndBlurListener,hp),i.removeEventListener("blur",this._rootNodeFocusAndBlurListener,hp),this._rootNodeFocusListenerCount.delete(i))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(A,i,n){this._setClasses(A,i),this._emitOrigin(n,i),this._lastFocusOrigin=i}_getClosestElementsInfo(A){let i=[];return this._elementInfo.forEach((n,o)=>{(o===A||n.checkChildren&&o.contains(A))&&i.push([o,n])}),i}_isLastInteractionFromInputLabel(A){let{_mostRecentTarget:i,mostRecentModality:n}=this._inputModalityDetector;if(n!=="mouse"||!i||i===A||A.nodeName!=="INPUT"&&A.nodeName!=="TEXTAREA"||A.disabled)return!1;let o=A.labels;if(o){for(let a=0;a{class t{_elementRef=w(ce);_focusMonitor=w($a);_monitorSubscription;_focusOrigin=null;cdkFocusChange=new LA;constructor(){}get focusOrigin(){return this._focusOrigin}ngAfterViewInit(){let A=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(A,A.nodeType===1&&A.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(i=>{this._focusOrigin=i,this.cdkFocusChange.emit(i)})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkMonitorElementFocus",""],["","cdkMonitorSubtreeFocus",""]],outputs:{cdkFocusChange:"cdkFocusChange"},exportAs:["cdkMonitorFocus"]})}return t})();var Qp=new WeakMap,eo=(()=>{class t{_appRef;_injector=w(Dt);_environmentInjector=w(Gr);load(A){let i=this._appRef=this._appRef||this._injector.get(K0),n=Qp.get(i);n||(n={loaders:new Set,refs:[]},Qp.set(i,n),i.onDestroy(()=>{Qp.get(i)?.refs.forEach(o=>o.destroy()),Qp.delete(i)})),n.loaders.has(A)||(n.loaders.add(A),n.refs.push(tp(A,{environmentInjector:this._environmentInjector})))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var o2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["ng-component"]],exportAs:["cdkVisuallyHidden"],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0} +`],encapsulation:2,changeDetection:0})}return t})(),up;function EnA(){if(up===void 0&&(up=null,typeof window<"u")){let t=window;t.trustedTypes!==void 0&&(up=t.trustedTypes.createPolicy("angular#components",{createHTML:e=>e}))}return up}function e1(t){return EnA()?.createHTML(t)||t}function ZL(t,e,A){let i=A.sanitize(_g.HTML,e);t.innerHTML=e1(i||"")}function iB(t){return Array.isArray(t)?t:[t]}var XL=new Set,t1,nB=(()=>{class t{_platform=w(li);_nonce=w(TF,{optional:!0});_matchMedia;constructor(){this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):QnA}matchMedia(A){return(this._platform.WEBKIT||this._platform.BLINK)&&hnA(A,this._nonce),this._matchMedia(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function hnA(t,e){if(!XL.has(t))try{t1||(t1=document.createElement("style"),e&&t1.setAttribute("nonce",e),t1.setAttribute("type","text/css"),document.head.appendChild(t1)),t1.sheet&&(t1.sheet.insertRule(`@media ${t} {body{ }}`,0),XL.add(t))}catch(A){console.error(A)}}function QnA(t){return{matches:t==="all"||t==="",media:t,addListener:()=>{},removeListener:()=>{}}}var jQ=(()=>{class t{_mediaMatcher=w(nB);_zone=w(qe);_queries=new Map;_destroySubject=new ie;constructor(){}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(A){return $L(iB(A)).some(n=>this._registerQuery(n).mql.matches)}observe(A){let n=$L(iB(A)).map(a=>this._registerQuery(a).observable),o=Qr(n);return o=O3(o.pipe(uo(1)),o.pipe(wl(1),Ls(0))),o.pipe(we(a=>{let r={matches:!1,breakpoints:{}};return a.forEach(({matches:s,query:l})=>{r.matches=r.matches||s,r.breakpoints[l]=s}),r}))}_registerQuery(A){if(this._queries.has(A))return this._queries.get(A);let i=this._mediaMatcher.matchMedia(A),o={observable:new vi(a=>{let r=s=>this._zone.run(()=>a.next(s));return i.addListener(r),()=>{i.removeListener(r)}}).pipe(Sn(i),we(({matches:a})=>({query:A,matches:a})),Qt(this._destroySubject)),mql:i};return this._queries.set(A,o),o}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function $L(t){return t.map(e=>e.split(",")).reduce((e,A)=>e.concat(A)).map(e=>e.trim())}function unA(t){if(t.type==="characterData"&&t.target instanceof Comment)return!0;if(t.type==="childList"){for(let e=0;e{class t{create(A){return typeof MutationObserver>"u"?null:new MutationObserver(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),eG=(()=>{class t{_mutationObserverFactory=w(AG);_observedElements=new Map;_ngZone=w(qe);constructor(){}ngOnDestroy(){this._observedElements.forEach((A,i)=>this._cleanupObserver(i))}observe(A){let i=Ds(A);return new vi(n=>{let a=this._observeElement(i).pipe(we(r=>r.filter(s=>!unA(s))),gt(r=>!!r.length)).subscribe(r=>{this._ngZone.run(()=>{n.next(r)})});return()=>{a.unsubscribe(),this._unobserveElement(i)}})}_observeElement(A){return this._ngZone.runOutsideAngular(()=>{if(this._observedElements.has(A))this._observedElements.get(A).count++;else{let i=new ie,n=this._mutationObserverFactory.create(o=>i.next(o));n&&n.observe(A,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(A,{observer:n,stream:i,count:1})}return this._observedElements.get(A).stream})}_unobserveElement(A){this._observedElements.has(A)&&(this._observedElements.get(A).count--,this._observedElements.get(A).count||this._cleanupObserver(A))}_cleanupObserver(A){if(this._observedElements.has(A)){let{observer:i,stream:n}=this._observedElements.get(A);i&&i.disconnect(),n.complete(),this._observedElements.delete(A)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),tG=(()=>{class t{_contentObserver=w(eG);_elementRef=w(ce);event=new LA;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._disabled?this._unsubscribe():this._subscribe()}_disabled=!1;get debounce(){return this._debounce}set debounce(A){this._debounce=zs(A),this._subscribe()}_debounce;_currentSubscription=null;constructor(){}ngAfterContentInit(){!this._currentSubscription&&!this.disabled&&this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();let A=this._contentObserver.observe(this._elementRef);this._currentSubscription=(this.debounce?A.pipe(Ls(this.debounce)):A).subscribe(this.event)}_unsubscribe(){this._currentSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkObserveContent",""]],inputs:{disabled:[2,"cdkObserveContentDisabled","disabled",Be],debounce:"debounce"},outputs:{event:"cdkObserveContent"},exportAs:["cdkObserveContent"]})}return t})(),fp=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({providers:[AG]})}return t})();var oB=(()=>{class t{_platform=w(li);constructor(){}isDisabled(A){return A.hasAttribute("disabled")}isVisible(A){return pnA(A)&&getComputedStyle(A).visibility==="visible"}isTabbable(A){if(!this._platform.isBrowser)return!1;let i=fnA(SnA(A));if(i&&(iG(i)===-1||!this.isVisible(i)))return!1;let n=A.nodeName.toLowerCase(),o=iG(A);return A.hasAttribute("contenteditable")?o!==-1:n==="iframe"||n==="object"||this._platform.WEBKIT&&this._platform.IOS&&!bnA(A)?!1:n==="audio"?A.hasAttribute("controls")?o!==-1:!1:n==="video"?o===-1?!1:o!==null?!0:this._platform.FIREFOX||A.hasAttribute("controls"):A.tabIndex>=0}isFocusable(A,i){return MnA(A)&&!this.isDisabled(A)&&(i?.ignoreVisibility||this.isVisible(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function fnA(t){try{return t.frameElement}catch(e){return null}}function pnA(t){return!!(t.offsetWidth||t.offsetHeight||typeof t.getClientRects=="function"&&t.getClientRects().length)}function mnA(t){let e=t.nodeName.toLowerCase();return e==="input"||e==="select"||e==="button"||e==="textarea"}function wnA(t){return ynA(t)&&t.type=="hidden"}function DnA(t){return vnA(t)&&t.hasAttribute("href")}function ynA(t){return t.nodeName.toLowerCase()=="input"}function vnA(t){return t.nodeName.toLowerCase()=="a"}function aG(t){if(!t.hasAttribute("tabindex")||t.tabIndex===void 0)return!1;let e=t.getAttribute("tabindex");return!!(e&&!isNaN(parseInt(e,10)))}function iG(t){if(!aG(t))return null;let e=parseInt(t.getAttribute("tabindex")||"",10);return isNaN(e)?-1:e}function bnA(t){let e=t.nodeName.toLowerCase(),A=e==="input"&&t.type;return A==="text"||A==="password"||e==="select"||e==="textarea"}function MnA(t){return wnA(t)?!1:mnA(t)||DnA(t)||t.hasAttribute("contenteditable")||aG(t)}function SnA(t){return t.ownerDocument&&t.ownerDocument.defaultView||window}var pp=class{_element;_checker;_ngZone;_document;_injector;_startAnchor=null;_endAnchor=null;_hasAttached=!1;startAnchorListener=()=>this.focusLastTabbableElement();endAnchorListener=()=>this.focusFirstTabbableElement();get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_enabled=!0;constructor(e,A,i,n,o=!1,a){this._element=e,this._checker=A,this._ngZone=i,this._document=n,this._injector=a,o||this.attachAnchors()}destroy(){let e=this._startAnchor,A=this._endAnchor;e&&(e.removeEventListener("focus",this.startAnchorListener),e.remove()),A&&(A.removeEventListener("focus",this.endAnchorListener),A.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return this._hasAttached?!0:(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusInitialElement(e)))})}focusFirstTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusFirstTabbableElement(e)))})}focusLastTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusLastTabbableElement(e)))})}_getRegionBoundary(e){let A=this._element.querySelectorAll(`[cdk-focus-region-${e}], [cdkFocusRegion${e}], [cdk-focus-${e}]`);return e=="start"?A.length?A[0]:this._getFirstTabbableElement(this._element):A.length?A[A.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(e){let A=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(A){if(!this._checker.isFocusable(A)){let i=this._getFirstTabbableElement(A);return i?.focus(e),!!i}return A.focus(e),!0}return this.focusFirstTabbableElement(e)}focusFirstTabbableElement(e){let A=this._getRegionBoundary("start");return A&&A.focus(e),!!A}focusLastTabbableElement(e){let A=this._getRegionBoundary("end");return A&&A.focus(e),!!A}hasAttached(){return this._hasAttached}_getFirstTabbableElement(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;let A=e.children;for(let i=0;i=0;i--){let n=A[i].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(A[i]):null;if(n)return n}return null}_createAnchor(){let e=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,e),e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e.setAttribute("aria-hidden","true"),e}_toggleAnchorTabIndex(e,A){e?A.setAttribute("tabindex","0"):A.removeAttribute("tabindex")}toggleAnchors(e){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_executeOnStable(e){this._injector?Hn(e,{injector:this._injector}):setTimeout(e)}},qQ=(()=>{class t{_checker=w(oB);_ngZone=w(qe);_document=w(ti);_injector=w(Dt);constructor(){w(eo).load(o2)}create(A,i=!1){return new pp(A,this._checker,this._ngZone,this._document,i,this._injector)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var rG=new kA("liveAnnouncerElement",{providedIn:"root",factory:()=>null}),sG=new kA("LIVE_ANNOUNCER_DEFAULT_OPTIONS"),knA=0,VQ=(()=>{class t{_ngZone=w(qe);_defaultOptions=w(sG,{optional:!0});_liveElement;_document=w(ti);_sanitizer=w(e2);_previousTimeout;_currentPromise;_currentResolve;constructor(){let A=w(rG,{optional:!0});this._liveElement=A||this._createLiveElement()}announce(A,...i){let n=this._defaultOptions,o,a;return i.length===1&&typeof i[0]=="number"?a=i[0]:[o,a]=i,this.clear(),clearTimeout(this._previousTimeout),o||(o=n&&n.politeness?n.politeness:"polite"),a==null&&n&&(a=n.duration),this._liveElement.setAttribute("aria-live",o),this._liveElement.id&&this._exposeAnnouncerToModals(this._liveElement.id),this._ngZone.runOutsideAngular(()=>(this._currentPromise||(this._currentPromise=new Promise(r=>this._currentResolve=r)),clearTimeout(this._previousTimeout),this._previousTimeout=setTimeout(()=>{!A||typeof A=="string"?this._liveElement.textContent=A:ZL(this._liveElement,A,this._sanitizer),typeof a=="number"&&(this._previousTimeout=setTimeout(()=>this.clear(),a)),this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0},100),this._currentPromise))}clear(){this._liveElement&&(this._liveElement.textContent="")}ngOnDestroy(){clearTimeout(this._previousTimeout),this._liveElement?.remove(),this._liveElement=null,this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0}_createLiveElement(){let A="cdk-live-announcer-element",i=this._document.getElementsByClassName(A),n=this._document.createElement("div");for(let o=0;o .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{class t{_platform=w(li);_hasCheckedHighContrastMode=!1;_document=w(ti);_breakpointSubscription;constructor(){this._breakpointSubscription=w(jQ).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return a2.NONE;let A=this._document.createElement("div");A.style.backgroundColor="rgb(1,2,3)",A.style.position="absolute",this._document.body.appendChild(A);let i=this._document.defaultView||window,n=i&&i.getComputedStyle?i.getComputedStyle(A):null,o=(n&&n.backgroundColor||"").replace(/ /g,"");switch(A.remove(),o){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return a2.WHITE_ON_BLACK;case"rgb(255,255,255)":case"rgb(255,250,239)":return a2.BLACK_ON_WHITE}return a2.NONE}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){let A=this._document.body.classList;A.remove(yb,nG,oG),this._hasCheckedHighContrastMode=!0;let i=this.getHighContrastMode();i===a2.BLACK_ON_WHITE?A.add(yb,nG):i===a2.WHITE_ON_BLACK&&A.add(yb,oG)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),WQ=(()=>{class t{constructor(){w(lG)._applyBodyHighContrastModeCssClasses()}static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fp]})}return t})();var vb={},In=class t{_appId=w(P3);static _infix=`a${Math.floor(Math.random()*1e5).toString()}`;getId(e,A=!1){return this._appId!=="ng"&&(e+=this._appId),vb.hasOwnProperty(e)||(vb[e]=0),`${e}${A?t._infix+"-":""}${vb[e]++}`}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var xnA=200,mp=class{_letterKeyStream=new ie;_items=[];_selectedItemIndex=-1;_pressedLetters=[];_skipPredicateFn;_selectedItem=new ie;selectedItem=this._selectedItem;constructor(e,A){let i=typeof A?.debounceInterval=="number"?A.debounceInterval:xnA;A?.skipPredicate&&(this._skipPredicateFn=A.skipPredicate),this.setItems(e),this._setupKeyHandler(i)}destroy(){this._pressedLetters=[],this._letterKeyStream.complete(),this._selectedItem.complete()}setCurrentSelectedItemIndex(e){this._selectedItemIndex=e}setItems(e){this._items=e}handleKey(e){let A=e.keyCode;e.key&&e.key.length===1?this._letterKeyStream.next(e.key.toLocaleUpperCase()):(A>=65&&A<=90||A>=48&&A<=57)&&this._letterKeyStream.next(String.fromCharCode(A))}isTyping(){return this._pressedLetters.length>0}reset(){this._pressedLetters=[]}_setupKeyHandler(e){this._letterKeyStream.pipe(Ii(A=>this._pressedLetters.push(A)),Ls(e),gt(()=>this._pressedLetters.length>0),we(()=>this._pressedLetters.join("").toLocaleUpperCase())).subscribe(A=>{for(let i=1;it[A]):t.altKey||t.shiftKey||t.ctrlKey||t.metaKey}var aB=class{_items;_activeItemIndex=bA(-1);_activeItem=bA(null);_wrap=!1;_typeaheadSubscription=bo.EMPTY;_itemChangesSubscription;_vertical=!0;_horizontal=null;_allowedModifierKeys=[];_homeAndEnd=!1;_pageUpAndDown={enabled:!1,delta:10};_effectRef;_typeahead;_skipPredicateFn=e=>e.disabled;constructor(e,A){this._items=e,e instanceof xg?this._itemChangesSubscription=e.changes.subscribe(i=>this._itemsChanged(i.toArray())):VI(e)&&(this._effectRef=Ao(()=>this._itemsChanged(e()),{injector:A}))}tabOut=new ie;change=new ie;skipPredicate(e){return this._skipPredicateFn=e,this}withWrap(e=!0){return this._wrap=e,this}withVerticalOrientation(e=!0){return this._vertical=e,this}withHorizontalOrientation(e){return this._horizontal=e,this}withAllowedModifierKeys(e){return this._allowedModifierKeys=e,this}withTypeAhead(e=200){this._typeaheadSubscription.unsubscribe();let A=this._getItemsArray();return this._typeahead=new mp(A,{debounceInterval:typeof e=="number"?e:void 0,skipPredicate:i=>this._skipPredicateFn(i)}),this._typeaheadSubscription=this._typeahead.selectedItem.subscribe(i=>{this.setActiveItem(i)}),this}cancelTypeahead(){return this._typeahead?.reset(),this}withHomeAndEnd(e=!0){return this._homeAndEnd=e,this}withPageUpDown(e=!0,A=10){return this._pageUpAndDown={enabled:e,delta:A},this}setActiveItem(e){let A=this._activeItem();this.updateActiveItem(e),this._activeItem()!==A&&this.change.next(this._activeItemIndex())}onKeydown(e){let A=e.keyCode,n=["altKey","ctrlKey","metaKey","shiftKey"].every(o=>!e[o]||this._allowedModifierKeys.indexOf(o)>-1);switch(A){case 9:this.tabOut.next();return;case 40:if(this._vertical&&n){this.setNextItemActive();break}else return;case 38:if(this._vertical&&n){this.setPreviousItemActive();break}else return;case 39:if(this._horizontal&&n){this._horizontal==="rtl"?this.setPreviousItemActive():this.setNextItemActive();break}else return;case 37:if(this._horizontal&&n){this._horizontal==="rtl"?this.setNextItemActive():this.setPreviousItemActive();break}else return;case 36:if(this._homeAndEnd&&n){this.setFirstItemActive();break}else return;case 35:if(this._homeAndEnd&&n){this.setLastItemActive();break}else return;case 33:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()-this._pageUpAndDown.delta;this._setActiveItemByIndex(o>0?o:0,1);break}else return;case 34:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()+this._pageUpAndDown.delta,a=this._getItemsArray().length;this._setActiveItemByIndex(o-1&&i!==this._activeItemIndex()&&(this._activeItemIndex.set(i),this._typeahead?.setCurrentSelectedItemIndex(i))}}};var ZQ=class extends aB{setActiveItem(e){this.activeItem&&this.activeItem.setInactiveStyles(),super.setActiveItem(e),this.activeItem&&this.activeItem.setActiveStyles()}};var H0=class extends aB{_origin="program";setFocusOrigin(e){return this._origin=e,this}setActiveItem(e){super.setActiveItem(e),this.activeItem&&this.activeItem.focus(this._origin)}};var CG=" ";function Sb(t,e,A){let i=Dp(t,e);A=A.trim(),!i.some(n=>n.trim()===A)&&(i.push(A),t.setAttribute(e,i.join(CG)))}function yp(t,e,A){let i=Dp(t,e);A=A.trim();let n=i.filter(o=>o!==A);n.length?t.setAttribute(e,n.join(CG)):t.removeAttribute(e)}function Dp(t,e){return t.getAttribute(e)?.match(/\S+/g)??[]}var IG="cdk-describedby-message",wp="cdk-describedby-host",Mb=0,dG=(()=>{class t{_platform=w(li);_document=w(ti);_messageRegistry=new Map;_messagesContainer=null;_id=`${Mb++}`;constructor(){w(eo).load(o2),this._id=w(P3)+"-"+Mb++}describe(A,i,n){if(!this._canBeDescribed(A,i))return;let o=bb(i,n);typeof i!="string"?(cG(i,this._id),this._messageRegistry.set(o,{messageElement:i,referenceCount:0})):this._messageRegistry.has(o)||this._createMessageElement(i,n),this._isElementDescribedByMessage(A,o)||this._addMessageReference(A,o)}removeDescription(A,i,n){if(!i||!this._isElementNode(A))return;let o=bb(i,n);if(this._isElementDescribedByMessage(A,o)&&this._removeMessageReference(A,o),typeof i=="string"){let a=this._messageRegistry.get(o);a&&a.referenceCount===0&&this._deleteMessageElement(o)}this._messagesContainer?.childNodes.length===0&&(this._messagesContainer.remove(),this._messagesContainer=null)}ngOnDestroy(){let A=this._document.querySelectorAll(`[${wp}="${this._id}"]`);for(let i=0;in.indexOf(IG)!=0);A.setAttribute("aria-describedby",i.join(" "))}_addMessageReference(A,i){let n=this._messageRegistry.get(i);Sb(A,"aria-describedby",n.messageElement.id),A.setAttribute(wp,this._id),n.referenceCount++}_removeMessageReference(A,i){let n=this._messageRegistry.get(i);n.referenceCount--,yp(A,"aria-describedby",n.messageElement.id),A.removeAttribute(wp)}_isElementDescribedByMessage(A,i){let n=Dp(A,"aria-describedby"),o=this._messageRegistry.get(i),a=o&&o.messageElement.id;return!!a&&n.indexOf(a)!=-1}_canBeDescribed(A,i){if(!this._isElementNode(A))return!1;if(i&&typeof i=="object")return!0;let n=i==null?"":`${i}`.trim(),o=A.getAttribute("aria-label");return n?!o||o.trim()!==n:!1}_isElementNode(A){return A.nodeType===this._document.ELEMENT_NODE}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function bb(t,e){return typeof t=="string"?`${e||""}/${t}`:t}function cG(t,e){t.id||(t.id=`${IG}-${e}-${Mb++}`)}var Ng=(function(t){return t[t.NORMAL=0]="NORMAL",t[t.NEGATED=1]="NEGATED",t[t.INVERTED=2]="INVERTED",t})(Ng||{}),vp,r1;function bp(){if(r1==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return r1=!1,r1;if(document.documentElement?.style&&"scrollBehavior"in document.documentElement.style)r1=!0;else{let t=Element.prototype.scrollTo;t?r1=!/\{\s*\[native code\]\s*\}/.test(t.toString()):r1=!1}}return r1}function rB(){if(typeof document!="object"||!document)return Ng.NORMAL;if(vp==null){let t=document.createElement("div"),e=t.style;t.dir="rtl",e.width="1px",e.overflow="auto",e.visibility="hidden",e.pointerEvents="none",e.position="absolute";let A=document.createElement("div"),i=A.style;i.width="2px",i.height="1px",t.appendChild(A),document.body.appendChild(t),vp=Ng.NORMAL,t.scrollLeft===0&&(t.scrollLeft=1,vp=t.scrollLeft===0?Ng.NEGATED:Ng.INVERTED),t.remove()}return vp}function kb(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}var sB,BG=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"];function xb(){if(sB)return sB;if(typeof document!="object"||!document)return sB=new Set(BG),sB;let t=document.createElement("input");return sB=new Set(BG.filter(e=>(t.setAttribute("type",e),t.type===e))),sB}var EG={XSmall:"(max-width: 599.98px)",Small:"(min-width: 600px) and (max-width: 959.98px)",Medium:"(min-width: 960px) and (max-width: 1279.98px)",Large:"(min-width: 1280px) and (max-width: 1919.98px)",XLarge:"(min-width: 1920px)",Handset:"(max-width: 599.98px) and (orientation: portrait), (max-width: 959.98px) and (orientation: landscape)",Tablet:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",Web:"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)",HandsetPortrait:"(max-width: 599.98px) and (orientation: portrait)",TabletPortrait:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)",WebPortrait:"(min-width: 840px) and (orientation: portrait)",HandsetLandscape:"(max-width: 959.98px) and (orientation: landscape)",TabletLandscape:"(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",WebLandscape:"(min-width: 1280px) and (orientation: landscape)"};var RnA=new kA("MATERIAL_ANIMATIONS"),hG=null;function XQ(){return w(RnA,{optional:!0})?.animationsDisabled||w(qI,{optional:!0})==="NoopAnimations"?"di-disabled":(hG??=w(nB).matchMedia("(prefers-reduced-motion)").matches,hG?"reduced-motion":"enabled")}function An(){return XQ()!=="enabled"}function Oa(t){return t==null?"":typeof t=="string"?t:`${t}px`}function mr(t){return t!=null&&`${t}`!="false"}var ys=(function(t){return t[t.FADING_IN=0]="FADING_IN",t[t.VISIBLE=1]="VISIBLE",t[t.FADING_OUT=2]="FADING_OUT",t[t.HIDDEN=3]="HIDDEN",t})(ys||{}),_b=class{_renderer;element;config;_animationForciblyDisabledThroughCss;state=ys.HIDDEN;constructor(e,A,i,n=!1){this._renderer=e,this.element=A,this.config=i,this._animationForciblyDisabledThroughCss=n}fadeOut(){this._renderer.fadeOutRipple(this)}},QG=tB({passive:!0,capture:!0}),Rb=class{_events=new Map;addHandler(e,A,i,n){let o=this._events.get(A);if(o){let a=o.get(i);a?a.add(n):o.set(i,new Set([n]))}else this._events.set(A,new Map([[i,new Set([n])]])),e.runOutsideAngular(()=>{document.addEventListener(A,this._delegateEventHandler,QG)})}removeHandler(e,A,i){let n=this._events.get(e);if(!n)return;let o=n.get(A);o&&(o.delete(i),o.size===0&&n.delete(A),n.size===0&&(this._events.delete(e),document.removeEventListener(e,this._delegateEventHandler,QG)))}_delegateEventHandler=e=>{let A=Ur(e);A&&this._events.get(e.type)?.forEach((i,n)=>{(n===A||n.contains(A))&&i.forEach(o=>o.handleEvent(e))})}},$Q={enterDuration:225,exitDuration:150},NnA=800,uG=tB({passive:!0,capture:!0}),fG=["mousedown","touchstart"],pG=["mouseup","mouseleave","touchend","touchcancel"],FnA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["ng-component"]],hostAttrs:["mat-ripple-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface) 10%, transparent))}@media(forced-colors: active){.mat-ripple-element{display:none}}.cdk-drag-preview .mat-ripple-element,.cdk-drag-placeholder .mat-ripple-element{display:none} +`],encapsulation:2,changeDetection:0})}return t})(),Au=class t{_target;_ngZone;_platform;_containerElement;_triggerElement=null;_isPointerDown=!1;_activeRipples=new Map;_mostRecentTransientRipple=null;_lastTouchStartEvent;_pointerUpEventsRegistered=!1;_containerRect=null;static _eventManager=new Rb;constructor(e,A,i,n,o){this._target=e,this._ngZone=A,this._platform=n,n.isBrowser&&(this._containerElement=Ds(i)),o&&o.get(eo).load(FnA)}fadeInRipple(e,A,i={}){let n=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),o=gA(gA({},$Q),i.animation);i.centered&&(e=n.left+n.width/2,A=n.top+n.height/2);let a=i.radius||LnA(e,A,n),r=e-n.left,s=A-n.top,l=o.enterDuration,g=document.createElement("div");g.classList.add("mat-ripple-element"),g.style.left=`${r-a}px`,g.style.top=`${s-a}px`,g.style.height=`${a*2}px`,g.style.width=`${a*2}px`,i.color!=null&&(g.style.backgroundColor=i.color),g.style.transitionDuration=`${l}ms`,this._containerElement.appendChild(g);let C=window.getComputedStyle(g),I=C.transitionProperty,d=C.transitionDuration,h=I==="none"||d==="0s"||d==="0s, 0s"||n.width===0&&n.height===0,E=new _b(this,g,i,h);g.style.transform="scale3d(1, 1, 1)",E.state=ys.FADING_IN,i.persistent||(this._mostRecentTransientRipple=E);let f=null;return!h&&(l||o.exitDuration)&&this._ngZone.runOutsideAngular(()=>{let m=()=>{f&&(f.fallbackTimer=null),clearTimeout(k),this._finishRippleTransition(E)},v=()=>this._destroyRipple(E),k=setTimeout(v,l+100);g.addEventListener("transitionend",m),g.addEventListener("transitioncancel",v),f={onTransitionEnd:m,onTransitionCancel:v,fallbackTimer:k}}),this._activeRipples.set(E,f),(h||!l)&&this._finishRippleTransition(E),E}fadeOutRipple(e){if(e.state===ys.FADING_OUT||e.state===ys.HIDDEN)return;let A=e.element,i=gA(gA({},$Q),e.config.animation);A.style.transitionDuration=`${i.exitDuration}ms`,A.style.opacity="0",e.state=ys.FADING_OUT,(e._animationForciblyDisabledThroughCss||!i.exitDuration)&&this._finishRippleTransition(e)}fadeOutAll(){this._getActiveRipples().forEach(e=>e.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(e=>{e.config.persistent||e.fadeOut()})}setupTriggerEvents(e){let A=Ds(e);!this._platform.isBrowser||!A||A===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=A,fG.forEach(i=>{t._eventManager.addHandler(this._ngZone,i,A,this)}))}handleEvent(e){e.type==="mousedown"?this._onMousedown(e):e.type==="touchstart"?this._onTouchStart(e):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{pG.forEach(A=>{this._triggerElement.addEventListener(A,this,uG)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(e){e.state===ys.FADING_IN?this._startFadeOutTransition(e):e.state===ys.FADING_OUT&&this._destroyRipple(e)}_startFadeOutTransition(e){let A=e===this._mostRecentTransientRipple,{persistent:i}=e.config;e.state=ys.VISIBLE,!i&&(!A||!this._isPointerDown)&&e.fadeOut()}_destroyRipple(e){let A=this._activeRipples.get(e)??null;this._activeRipples.delete(e),this._activeRipples.size||(this._containerRect=null),e===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),e.state=ys.HIDDEN,A!==null&&(e.element.removeEventListener("transitionend",A.onTransitionEnd),e.element.removeEventListener("transitioncancel",A.onTransitionCancel),A.fallbackTimer!==null&&clearTimeout(A.fallbackTimer)),e.element.remove()}_onMousedown(e){let A=$I(e),i=this._lastTouchStartEvent&&Date.now(){let A=e.state===ys.VISIBLE||e.config.terminateOnPointerUp&&e.state===ys.FADING_IN;!e.config.persistent&&A&&e.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){let e=this._triggerElement;e&&(fG.forEach(A=>t._eventManager.removeHandler(A,e,this)),this._pointerUpEventsRegistered&&(pG.forEach(A=>e.removeEventListener(A,this,uG)),this._pointerUpEventsRegistered=!1))}};function LnA(t,e,A){let i=Math.max(Math.abs(t-A.left),Math.abs(t-A.right)),n=Math.max(Math.abs(e-A.top),Math.abs(e-A.bottom));return Math.sqrt(i*i+n*n)}var r2=new kA("mat-ripple-global-options"),rs=(()=>{class t{_elementRef=w(ce);_animationsDisabled=An();color;unbounded=!1;centered=!1;radius=0;animation;get disabled(){return this._disabled}set disabled(A){A&&this.fadeOutAllNonPersistent(),this._disabled=A,this._setupTriggerEventsIfEnabled()}_disabled=!1;get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(A){this._trigger=A,this._setupTriggerEventsIfEnabled()}_trigger;_rippleRenderer;_globalOptions;_isInitialized=!1;constructor(){let A=w(qe),i=w(li),n=w(r2,{optional:!0}),o=w(Dt);this._globalOptions=n||{},this._rippleRenderer=new Au(this,A,this._elementRef,i,o)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:gA(gA(gA({},this._globalOptions.animation),this._animationsDisabled?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(A,i=0,n){return typeof A=="number"?this._rippleRenderer.fadeInRipple(A,i,gA(gA({},this.rippleConfig),n)):this._rippleRenderer.fadeInRipple(0,0,gA(gA({},this.rippleConfig),A))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mat-ripple-unbounded",n.unbounded)},inputs:{color:[0,"matRippleColor","color"],unbounded:[0,"matRippleUnbounded","unbounded"],centered:[0,"matRippleCentered","centered"],radius:[0,"matRippleRadius","radius"],animation:[0,"matRippleAnimation","animation"],disabled:[0,"matRippleDisabled","disabled"],trigger:[0,"matRippleTrigger","trigger"]},exportAs:["matRipple"]})}return t})();var GnA={capture:!0},KnA=["focus","mousedown","mouseenter","touchstart"],Nb="mat-ripple-loader-uninitialized",Fb="mat-ripple-loader-class-name",mG="mat-ripple-loader-centered",Mp="mat-ripple-loader-disabled",Sp=(()=>{class t{_document=w(ti);_animationsDisabled=An();_globalRippleOptions=w(r2,{optional:!0});_platform=w(li);_ngZone=w(qe);_injector=w(Dt);_eventCleanups;_hosts=new Map;constructor(){let A=w(Kr).createRenderer(null,null);this._eventCleanups=this._ngZone.runOutsideAngular(()=>KnA.map(i=>A.listen(this._document,i,this._onInteraction,GnA)))}ngOnDestroy(){let A=this._hosts.keys();for(let i of A)this.destroyRipple(i);this._eventCleanups.forEach(i=>i())}configureRipple(A,i){A.setAttribute(Nb,this._globalRippleOptions?.namespace??""),(i.className||!A.hasAttribute(Fb))&&A.setAttribute(Fb,i.className||""),i.centered&&A.setAttribute(mG,""),i.disabled&&A.setAttribute(Mp,"")}setDisabled(A,i){let n=this._hosts.get(A);n?(n.target.rippleDisabled=i,!i&&!n.hasSetUpEvents&&(n.hasSetUpEvents=!0,n.renderer.setupTriggerEvents(A))):i?A.setAttribute(Mp,""):A.removeAttribute(Mp)}_onInteraction=A=>{let i=Ur(A);if(i instanceof HTMLElement){let n=i.closest(`[${Nb}="${this._globalRippleOptions?.namespace??""}"]`);n&&this._createRipple(n)}};_createRipple(A){if(!this._document||this._hosts.has(A))return;A.querySelector(".mat-ripple")?.remove();let i=this._document.createElement("span");i.classList.add("mat-ripple",A.getAttribute(Fb)),A.append(i);let n=this._globalRippleOptions,o=this._animationsDisabled?0:n?.animation?.enterDuration??$Q.enterDuration,a=this._animationsDisabled?0:n?.animation?.exitDuration??$Q.exitDuration,r={rippleDisabled:this._animationsDisabled||n?.disabled||A.hasAttribute(Mp),rippleConfig:{centered:A.hasAttribute(mG),terminateOnPointerUp:n?.terminateOnPointerUp,animation:{enterDuration:o,exitDuration:a}}},s=new Au(r,this._ngZone,i,this._platform,this._injector),l=!r.rippleDisabled;l&&s.setupTriggerEvents(A),this._hosts.set(A,{target:r,renderer:s,hasSetUpEvents:l}),A.removeAttribute(Nb)}destroyRipple(A){let i=this._hosts.get(A);i&&(i.renderer._removeTriggerEvents(),this._hosts.delete(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var lr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["structural-styles"]],decls:0,vars:0,template:function(i,n){},styles:[`.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border-width:var(--mat-focus-indicator-border-width, 3px);border-style:var(--mat-focus-indicator-border-style, solid);border-color:var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus-visible::before{content:""}@media(forced-colors: active){html{--mat-focus-indicator-display: block}} +`],encapsulation:2,changeDetection:0})}return t})();var UnA=["mat-icon-button",""],TnA=["*"],JnA=new kA("MAT_BUTTON_CONFIG");function wG(t){return t==null?void 0:Cn(t)}var Lb=(()=>{class t{_elementRef=w(ce);_ngZone=w(qe);_animationsDisabled=An();_config=w(JnA,{optional:!0});_focusMonitor=w($a);_cleanupClick;_renderer=w(Pi);_rippleLoader=w(Sp);_isAnchor;_isFab=!1;color;get disableRipple(){return this._disableRipple}set disableRipple(A){this._disableRipple=A,this._updateRippleDisabled()}_disableRipple=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._updateRippleDisabled()}_disabled=!1;ariaDisabled;disabledInteractive;tabIndex;set _tabindex(A){this.tabIndex=A}constructor(){w(eo).load(lr);let A=this._elementRef.nativeElement;this._isAnchor=A.tagName==="A",this.disabledInteractive=this._config?.disabledInteractive??!1,this.color=this._config?.color??null,this._rippleLoader?.configureRipple(A,{className:"mat-mdc-button-ripple"})}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0),this._isAnchor&&this._setupAsAnchor()}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement)}focus(A="program",i){A?this._focusMonitor.focusVia(this._elementRef.nativeElement,A,i):this._elementRef.nativeElement.focus(i)}_getAriaDisabled(){return this.ariaDisabled!=null?this.ariaDisabled:this._isAnchor?this.disabled||null:this.disabled&&this.disabledInteractive?!0:null}_getDisabledAttribute(){return this.disabledInteractive||!this.disabled?null:!0}_updateRippleDisabled(){this._rippleLoader?.setDisabled(this._elementRef.nativeElement,this.disableRipple||this.disabled)}_getTabIndex(){return this._isAnchor?this.disabled&&!this.disabledInteractive?-1:this.tabIndex:this.tabIndex}_setupAsAnchor(){this._cleanupClick=this._ngZone.runOutsideAngular(()=>this._renderer.listen(this._elementRef.nativeElement,"click",A=>{this.disabled&&(A.preventDefault(),A.stopImmediatePropagation())}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,hostAttrs:[1,"mat-mdc-button-base"],hostVars:13,hostBindings:function(i,n){i&2&&(te("disabled",n._getDisabledAttribute())("aria-disabled",n._getAriaDisabled())("tabindex",n._getTabIndex()),ro(n.color?"mat-"+n.color:""),RA("mat-mdc-button-disabled",n.disabled)("mat-mdc-button-disabled-interactive",n.disabledInteractive)("mat-unthemed",!n.color)("_mat-animation-noopable",n._animationsDisabled))},inputs:{color:"color",disableRipple:[2,"disableRipple","disableRipple",Be],disabled:[2,"disabled","disabled",Be],ariaDisabled:[2,"aria-disabled","ariaDisabled",Be],disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be],tabIndex:[2,"tabIndex","tabIndex",wG],_tabindex:[2,"tabindex","_tabindex",wG]}})}return t})(),ji=(()=>{class t extends Lb{constructor(){super(),this._rippleLoader.configureRipple(this._elementRef.nativeElement,{centered:!0})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["button","mat-icon-button",""],["a","mat-icon-button",""],["button","matIconButton",""],["a","matIconButton",""]],hostAttrs:[1,"mdc-icon-button","mat-mdc-icon-button"],exportAs:["matButton","matAnchor"],features:[mt],attrs:UnA,ngContentSelectors:TnA,decls:4,vars:0,consts:[[1,"mat-mdc-button-persistent-ripple","mdc-icon-button__ripple"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Rt(),Kn(0,"span",0),Ve(1),Kn(2,"span",1)(3,"span",2))},styles:[`.mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));flex-shrink:0;text-align:center;width:var(--mat-icon-button-state-layer-size, 40px);height:var(--mat-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mat-icon-button-state-layer-size, 40px) - var(--mat-icon-button-icon-size, 24px)) / 2);font-size:var(--mat-icon-button-icon-size, 24px);color:var(--mat-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-icon-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-icon-button-touch-target-size, 48px);display:var(--mat-icon-button-touch-target-display, block);left:50%;width:var(--mat-icon-button-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mat-icon-button-icon-size, 24px);height:var(--mat-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%))}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1} +`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} +`],encapsulation:2,changeDetection:0})}return t})();var OnA=new kA("cdk-dir-doc",{providedIn:"root",factory:()=>w(ti)}),YnA=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function DG(t){let e=t?.toLowerCase()||"";return e==="auto"&&typeof navigator<"u"&&navigator?.language?YnA.test(navigator.language)?"rtl":"ltr":e==="rtl"?"rtl":"ltr"}var fo=(()=>{class t{get value(){return this.valueSignal()}valueSignal=bA("ltr");change=new LA;constructor(){let A=w(OnA,{optional:!0});if(A){let i=A.body?A.body.dir:null,n=A.documentElement?A.documentElement.dir:null;this.valueSignal.set(DG(i||n||"ltr"))}}ngOnDestroy(){this.change.complete()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var fi=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();var Yc=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var HnA=["matButton",""],znA=[[["",8,"material-icons",3,"iconPositionEnd",""],["mat-icon",3,"iconPositionEnd",""],["","matButtonIcon","",3,"iconPositionEnd",""]],"*",[["","iconPositionEnd","",8,"material-icons"],["mat-icon","iconPositionEnd",""],["","matButtonIcon","","iconPositionEnd",""]]],PnA=[".material-icons:not([iconPositionEnd]), mat-icon:not([iconPositionEnd]), [matButtonIcon]:not([iconPositionEnd])","*",".material-icons[iconPositionEnd], mat-icon[iconPositionEnd], [matButtonIcon][iconPositionEnd]"];var yG=new Map([["text",["mat-mdc-button"]],["filled",["mdc-button--unelevated","mat-mdc-unelevated-button"]],["elevated",["mdc-button--raised","mat-mdc-raised-button"]],["outlined",["mdc-button--outlined","mat-mdc-outlined-button"]],["tonal",["mat-tonal-button"]]]),pi=(()=>{class t extends Lb{get appearance(){return this._appearance}set appearance(A){this.setAppearance(A||this._config?.defaultAppearance||"text")}_appearance=null;constructor(){super();let A=jnA(this._elementRef.nativeElement);A&&this.setAppearance(A)}setAppearance(A){if(A===this._appearance)return;let i=this._elementRef.nativeElement.classList,n=this._appearance?yG.get(this._appearance):null,o=yG.get(A);n&&i.remove(...n),i.add(...o),this._appearance=A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["button","matButton",""],["a","matButton",""],["button","mat-button",""],["button","mat-raised-button",""],["button","mat-flat-button",""],["button","mat-stroked-button",""],["a","mat-button",""],["a","mat-raised-button",""],["a","mat-flat-button",""],["a","mat-stroked-button",""]],hostAttrs:[1,"mdc-button"],inputs:{appearance:[0,"matButton","appearance"]},exportAs:["matButton","matAnchor"],features:[mt],attrs:HnA,ngContentSelectors:PnA,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Rt(znA),Kn(0,"span",0),Ve(1),wn(2,"span",1),Ve(3,1),Gn(),Ve(4,2),Kn(5,"span",2)(6,"span",3)),i&2&&RA("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[`.mat-mdc-button-base{text-decoration:none}.mat-mdc-button-base .mat-icon{min-height:fit-content;flex-shrink:0}@media(hover: none){.mat-mdc-button-base:hover>span.mat-mdc-button-persistent-ripple::before{opacity:0}}.mdc-button{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:rgba(0,0,0,0);padding:0 8px}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button[hidden]{display:none}.mdc-button .mdc-button__label{position:relative}.mat-mdc-button{padding:0 var(--mat-button-text-horizontal-padding, 12px);height:var(--mat-button-text-container-height, 40px);font-family:var(--mat-button-text-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-text-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-text-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-text-label-text-transform);font-weight:var(--mat-button-text-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-button,.mat-mdc-button .mdc-button__ripple{border-radius:var(--mat-button-text-container-shape, var(--mat-sys-corner-full))}.mat-mdc-button:not(:disabled){color:var(--mat-button-text-label-text-color, var(--mat-sys-primary))}.mat-mdc-button[disabled],.mat-mdc-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-text-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-button:has(.material-icons,mat-icon,[matButtonIcon]){padding:0 var(--mat-button-text-with-icon-horizontal-padding, 16px)}.mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}[dir=rtl] .mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}.mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}[dir=rtl] .mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}.mat-mdc-button .mat-ripple-element{background-color:var(--mat-button-text-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-state-layer-color, var(--mat-sys-primary))}.mat-mdc-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-text-touch-target-size, 48px);display:var(--mat-button-text-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-filled-container-height, 40px);font-family:var(--mat-button-filled-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-filled-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-filled-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-filled-label-text-transform);font-weight:var(--mat-button-filled-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-filled-horizontal-padding, 24px)}.mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}.mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}.mat-mdc-unelevated-button .mat-ripple-element{background-color:var(--mat-button-filled-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-state-layer-color, var(--mat-sys-on-primary))}.mat-mdc-unelevated-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-unelevated-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-unelevated-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-unelevated-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-unelevated-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-filled-touch-target-size, 48px);display:var(--mat-button-filled-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button:not(:disabled){color:var(--mat-button-filled-label-text-color, var(--mat-sys-on-primary));background-color:var(--mat-button-filled-container-color, var(--mat-sys-primary))}.mat-mdc-unelevated-button,.mat-mdc-unelevated-button .mdc-button__ripple{border-radius:var(--mat-button-filled-container-shape, var(--mat-sys-corner-full))}.mat-mdc-unelevated-button[disabled],.mat-mdc-unelevated-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-raised-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);box-shadow:var(--mat-button-protected-container-elevation-shadow, var(--mat-sys-level1));height:var(--mat-button-protected-container-height, 40px);font-family:var(--mat-button-protected-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-protected-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-protected-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-protected-label-text-transform);font-weight:var(--mat-button-protected-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-protected-horizontal-padding, 24px)}.mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}[dir=rtl] .mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}.mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}[dir=rtl] .mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}.mat-mdc-raised-button .mat-ripple-element{background-color:var(--mat-button-protected-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-state-layer-color, var(--mat-sys-primary))}.mat-mdc-raised-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-raised-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-raised-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-raised-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-raised-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-protected-touch-target-size, 48px);display:var(--mat-button-protected-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-raised-button:not(:disabled){color:var(--mat-button-protected-label-text-color, var(--mat-sys-primary));background-color:var(--mat-button-protected-container-color, var(--mat-sys-surface))}.mat-mdc-raised-button,.mat-mdc-raised-button .mdc-button__ripple{border-radius:var(--mat-button-protected-container-shape, var(--mat-sys-corner-full))}@media(hover: hover){.mat-mdc-raised-button:hover{box-shadow:var(--mat-button-protected-hover-container-elevation-shadow, var(--mat-sys-level2))}}.mat-mdc-raised-button:focus{box-shadow:var(--mat-button-protected-focus-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button:active,.mat-mdc-raised-button:focus:active{box-shadow:var(--mat-button-protected-pressed-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button[disabled],.mat-mdc-raised-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-protected-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-raised-button[disabled].mat-mdc-button-disabled,.mat-mdc-raised-button.mat-mdc-button-disabled.mat-mdc-button-disabled{box-shadow:var(--mat-button-protected-disabled-container-elevation-shadow, var(--mat-sys-level0))}.mat-mdc-raised-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-outlined-button{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-outlined-container-height, 40px);font-family:var(--mat-button-outlined-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-outlined-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-outlined-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-outlined-label-text-transform);font-weight:var(--mat-button-outlined-label-text-weight, var(--mat-sys-label-large-weight));border-radius:var(--mat-button-outlined-container-shape, var(--mat-sys-corner-full));border-width:var(--mat-button-outlined-outline-width, 1px);padding:0 var(--mat-button-outlined-horizontal-padding, 24px)}.mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}[dir=rtl] .mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}.mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}[dir=rtl] .mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}.mat-mdc-outlined-button .mat-ripple-element{background-color:var(--mat-button-outlined-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-state-layer-color, var(--mat-sys-primary))}.mat-mdc-outlined-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-outlined-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-outlined-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-outlined-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-outlined-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-outlined-touch-target-size, 48px);display:var(--mat-button-outlined-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-outlined-button:not(:disabled){color:var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));border-color:var(--mat-button-outlined-outline-color, var(--mat-sys-outline))}.mat-mdc-outlined-button[disabled],.mat-mdc-outlined-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:var(--mat-button-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-tonal-container-height, 40px);font-family:var(--mat-button-tonal-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-tonal-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-tonal-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-tonal-label-text-transform);font-weight:var(--mat-button-tonal-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-tonal-horizontal-padding, 24px)}.mat-tonal-button:not(:disabled){color:var(--mat-button-tonal-label-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-tonal-container-color, var(--mat-sys-secondary-container))}.mat-tonal-button,.mat-tonal-button .mdc-button__ripple{border-radius:var(--mat-button-tonal-container-shape, var(--mat-sys-corner-full))}.mat-tonal-button[disabled],.mat-tonal-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-tonal-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-tonal-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-tonal-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}[dir=rtl] .mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}.mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}[dir=rtl] .mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}.mat-tonal-button .mat-ripple-element{background-color:var(--mat-button-tonal-ripple-color, color-mix(in srgb, var(--mat-sys-on-secondary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-tonal-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-tonal-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-tonal-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-tonal-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-tonal-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-tonal-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-tonal-touch-target-size, 48px);display:var(--mat-button-tonal-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-button,.mat-mdc-unelevated-button,.mat-mdc-raised-button,.mat-mdc-outlined-button,.mat-tonal-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-button .mdc-button__label,.mat-mdc-button .mat-icon,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-unelevated-button .mat-icon,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-raised-button .mat-icon,.mat-mdc-outlined-button .mdc-button__label,.mat-mdc-outlined-button .mat-icon,.mat-tonal-button .mdc-button__label,.mat-tonal-button .mat-icon{z-index:1;position:relative}.mat-mdc-button .mat-focus-indicator,.mat-mdc-unelevated-button .mat-focus-indicator,.mat-mdc-raised-button .mat-focus-indicator,.mat-mdc-outlined-button .mat-focus-indicator,.mat-tonal-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-unelevated-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-raised-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-outlined-button:focus-visible>.mat-focus-indicator::before,.mat-tonal-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-button._mat-animation-noopable,.mat-mdc-unelevated-button._mat-animation-noopable,.mat-mdc-raised-button._mat-animation-noopable,.mat-mdc-outlined-button._mat-animation-noopable,.mat-tonal-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon,.mat-mdc-raised-button>.mat-icon,.mat-mdc-outlined-button>.mat-icon,.mat-tonal-button>.mat-icon{display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px}.mat-mdc-unelevated-button .mat-focus-indicator::before,.mat-tonal-button .mat-focus-indicator::before,.mat-mdc-raised-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-outlined-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)} +`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} +`],encapsulation:2,changeDetection:0})}return t})();function jnA(t){return t.hasAttribute("mat-raised-button")?"elevated":t.hasAttribute("mat-stroked-button")?"outlined":t.hasAttribute("mat-flat-button")?"filled":t.hasAttribute("mat-button")?"text":null}var qi=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Yc,fi]})}return t})();var Gb=class{_box;_destroyed=new ie;_resizeSubject=new ie;_resizeObserver;_elementObservables=new Map;constructor(e){this._box=e,typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(A=>this._resizeSubject.next(A)))}observe(e){return this._elementObservables.has(e)||this._elementObservables.set(e,new vi(A=>{let i=this._resizeSubject.subscribe(A);return this._resizeObserver?.observe(e,{box:this._box}),()=>{this._resizeObserver?.unobserve(e),i.unsubscribe(),this._elementObservables.delete(e)}}).pipe(gt(A=>A.some(i=>i.target===e)),Gs({bufferSize:1,refCount:!0}),Qt(this._destroyed))),this._elementObservables.get(e)}destroy(){this._destroyed.next(),this._destroyed.complete(),this._resizeSubject.complete(),this._elementObservables.clear()}},kp=(()=>{class t{_cleanupErrorListener;_observers=new Map;_ngZone=w(qe);constructor(){typeof ResizeObserver<"u"}ngOnDestroy(){for(let[,A]of this._observers)A.destroy();this._observers.clear(),this._cleanupErrorListener?.()}observe(A,i){let n=i?.box||"content-box";return this._observers.has(n)||this._observers.set(n,new Gb(n)),this._observers.get(n).observe(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var qnA=["notch"],VnA=["matFormFieldNotchedOutline",""],WnA=["*"],vG=["iconPrefixContainer"],bG=["textPrefixContainer"],MG=["iconSuffixContainer"],SG=["textSuffixContainer"],ZnA=["textField"],XnA=["*",[["mat-label"]],[["","matPrefix",""],["","matIconPrefix",""]],[["","matTextPrefix",""]],[["","matTextSuffix",""]],[["","matSuffix",""],["","matIconSuffix",""]],[["mat-error"],["","matError",""]],[["mat-hint",3,"align","end"]],[["mat-hint","align","end"]]],$nA=["*","mat-label","[matPrefix], [matIconPrefix]","[matTextPrefix]","[matTextSuffix]","[matSuffix], [matIconSuffix]","mat-error, [matError]","mat-hint:not([align='end'])","mat-hint[align='end']"];function AoA(t,e){t&1&&QA(0,"span",21)}function eoA(t,e){if(t&1&&(B(0,"label",20),Ve(1,1),O(2,AoA,1,0,"span",21),Q()),t&2){let A=p(2);H("floating",A._shouldLabelFloat())("monitorResize",A._hasOutline())("id",A._labelId),te("for",A._control.disableAutomaticLabeling?null:A._control.id),u(2),Y(!A.hideRequiredMarker&&A._control.required?2:-1)}}function toA(t,e){if(t&1&&O(0,eoA,3,5,"label",20),t&2){let A=p();Y(A._hasFloatingLabel()?0:-1)}}function ioA(t,e){t&1&&QA(0,"div",7)}function noA(t,e){}function ooA(t,e){if(t&1&&Et(0,noA,0,0,"ng-template",13),t&2){p(2);let A=Qi(1);H("ngTemplateOutlet",A)}}function aoA(t,e){if(t&1&&(B(0,"div",9),O(1,ooA,1,1,null,13),Q()),t&2){let A=p();H("matFormFieldNotchedOutlineOpen",A._shouldLabelFloat()),u(),Y(A._forceDisplayInfixLabel()?-1:1)}}function roA(t,e){t&1&&(B(0,"div",10,2),Ve(2,2),Q())}function soA(t,e){t&1&&(B(0,"div",11,3),Ve(2,3),Q())}function loA(t,e){}function goA(t,e){if(t&1&&Et(0,loA,0,0,"ng-template",13),t&2){p();let A=Qi(1);H("ngTemplateOutlet",A)}}function coA(t,e){t&1&&(B(0,"div",14,4),Ve(2,4),Q())}function CoA(t,e){t&1&&(B(0,"div",15,5),Ve(2,5),Q())}function IoA(t,e){t&1&&QA(0,"div",16)}function doA(t,e){t&1&&(B(0,"div",18),Ve(1,6),Q())}function BoA(t,e){if(t&1&&(B(0,"mat-hint",22),y(1),Q()),t&2){let A=p(2);H("id",A._hintLabelId),u(),lA(A.hintLabel)}}function EoA(t,e){if(t&1&&(B(0,"div",19),O(1,BoA,2,2,"mat-hint",22),Ve(2,7),QA(3,"div",23),Ve(4,8),Q()),t&2){let A=p();u(),Y(A.hintLabel?1:-1)}}var vs=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-label"]]})}return t})(),LG=new kA("MatError"),Kb=(()=>{class t{id=w(In).getId("mat-mdc-error-");constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-error"],["","matError",""]],hostAttrs:[1,"mat-mdc-form-field-error","mat-mdc-form-field-bottom-align"],hostVars:1,hostBindings:function(i,n){i&2&&ha("id",n.id)},inputs:{id:"id"},features:[Bt([{provide:LG,useExisting:t}])]})}return t})(),s1=(()=>{class t{align="start";id=w(In).getId("mat-mdc-hint-");static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-hint"]],hostAttrs:[1,"mat-mdc-form-field-hint","mat-mdc-form-field-bottom-align"],hostVars:4,hostBindings:function(i,n){i&2&&(ha("id",n.id),te("align",null),RA("mat-mdc-form-field-hint-end",n.align==="end"))},inputs:{align:"align",id:"id"}})}return t})(),GG=new kA("MatPrefix"),Ub=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matPrefix",""],["","matIconPrefix",""],["","matTextPrefix",""]],inputs:{_isTextSelector:[0,"matTextPrefix","_isTextSelector"]},features:[Bt([{provide:GG,useExisting:t}])]})}return t})(),KG=new kA("MatSuffix"),Tb=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matSuffix",""],["","matIconSuffix",""],["","matTextSuffix",""]],inputs:{_isTextSelector:[0,"matTextSuffix","_isTextSelector"]},features:[Bt([{provide:KG,useExisting:t}])]})}return t})(),UG=new kA("FloatingLabelParent"),kG=(()=>{class t{_elementRef=w(ce);get floating(){return this._floating}set floating(A){this._floating=A,this.monitorResize&&this._handleResize()}_floating=!1;get monitorResize(){return this._monitorResize}set monitorResize(A){this._monitorResize=A,this._monitorResize?this._subscribeToResize():this._resizeSubscription.unsubscribe()}_monitorResize=!1;_resizeObserver=w(kp);_ngZone=w(qe);_parent=w(UG);_resizeSubscription=new bo;constructor(){}ngOnDestroy(){this._resizeSubscription.unsubscribe()}getWidth(){return hoA(this._elementRef.nativeElement)}get element(){return this._elementRef.nativeElement}_handleResize(){setTimeout(()=>this._parent._handleLabelResized())}_subscribeToResize(){this._resizeSubscription.unsubscribe(),this._ngZone.runOutsideAngular(()=>{this._resizeSubscription=this._resizeObserver.observe(this._elementRef.nativeElement,{box:"border-box"}).subscribe(()=>this._handleResize())})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["label","matFormFieldFloatingLabel",""]],hostAttrs:[1,"mdc-floating-label","mat-mdc-floating-label"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mdc-floating-label--float-above",n.floating)},inputs:{floating:"floating",monitorResize:"monitorResize"}})}return t})();function hoA(t){let e=t;if(e.offsetParent!==null)return e.scrollWidth;let A=e.cloneNode(!0);A.style.setProperty("position","absolute"),A.style.setProperty("transform","translate(-9999px, -9999px)"),document.documentElement.appendChild(A);let i=A.scrollWidth;return A.remove(),i}var xG="mdc-line-ripple--active",xp="mdc-line-ripple--deactivating",_G=(()=>{class t{_elementRef=w(ce);_cleanupTransitionEnd;constructor(){let A=w(qe),i=w(Pi);A.runOutsideAngular(()=>{this._cleanupTransitionEnd=i.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionEnd)})}activate(){let A=this._elementRef.nativeElement.classList;A.remove(xp),A.add(xG)}deactivate(){this._elementRef.nativeElement.classList.add(xp)}_handleTransitionEnd=A=>{let i=this._elementRef.nativeElement.classList,n=i.contains(xp);A.propertyName==="opacity"&&n&&i.remove(xG,xp)};ngOnDestroy(){this._cleanupTransitionEnd()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["div","matFormFieldLineRipple",""]],hostAttrs:[1,"mdc-line-ripple"]})}return t})(),RG=(()=>{class t{_elementRef=w(ce);_ngZone=w(qe);open=!1;_notch;ngAfterViewInit(){let A=this._elementRef.nativeElement,i=A.querySelector(".mdc-floating-label");i?(A.classList.add("mdc-notched-outline--upgraded"),typeof requestAnimationFrame=="function"&&(i.style.transitionDuration="0s",this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>i.style.transitionDuration="")}))):A.classList.add("mdc-notched-outline--no-label")}_setNotchWidth(A){let i=this._notch.nativeElement;!this.open||!A?i.style.width="":i.style.width=`calc(${A}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + 9px)`}_setMaxWidth(A){this._notch.nativeElement.style.setProperty("--mat-form-field-notch-max-width",`calc(100% - ${A}px)`)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["div","matFormFieldNotchedOutline",""]],viewQuery:function(i,n){if(i&1&&Jt(qnA,5),i&2){let o;ae(o=re())&&(n._notch=o.first)}},hostAttrs:[1,"mdc-notched-outline"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mdc-notched-outline--notched",n.open)},inputs:{open:[0,"matFormFieldNotchedOutlineOpen","open"]},attrs:VnA,ngContentSelectors:WnA,decls:5,vars:0,consts:[["notch",""],[1,"mat-mdc-notch-piece","mdc-notched-outline__leading"],[1,"mat-mdc-notch-piece","mdc-notched-outline__notch"],[1,"mat-mdc-notch-piece","mdc-notched-outline__trailing"]],template:function(i,n){i&1&&(Rt(),Kn(0,"div",1),wn(1,"div",2,0),Ve(3),Gn(),Kn(4,"div",3))},encapsulation:2,changeDetection:0})}return t})(),eu=(()=>{class t{value=null;stateChanges;id;placeholder;ngControl=null;focused=!1;empty=!1;shouldLabelFloat=!1;required=!1;disabled=!1;errorState=!1;controlType;autofilled;userAriaDescribedBy;disableAutomaticLabeling;describedByIds;static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t})}return t})();var tu=new kA("MatFormField"),QoA=new kA("MAT_FORM_FIELD_DEFAULT_OPTIONS"),NG="fill",uoA="auto",FG="fixed",foA="translateY(-50%)",Ko=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_platform=w(li);_idGenerator=w(In);_ngZone=w(qe);_defaults=w(QoA,{optional:!0});_currentDirection;_textField;_iconPrefixContainer;_textPrefixContainer;_iconSuffixContainer;_textSuffixContainer;_floatingLabel;_notchedOutline;_lineRipple;_iconPrefixContainerSignal=So("iconPrefixContainer");_textPrefixContainerSignal=So("textPrefixContainer");_iconSuffixContainerSignal=So("iconSuffixContainer");_textSuffixContainerSignal=So("textSuffixContainer");_prefixSuffixContainers=pe(()=>[this._iconPrefixContainerSignal(),this._textPrefixContainerSignal(),this._iconSuffixContainerSignal(),this._textSuffixContainerSignal()].map(A=>A?.nativeElement).filter(A=>A!==void 0));_formFieldControl;_prefixChildren;_suffixChildren;_errorChildren;_hintChildren;_labelChild=J0(vs);get hideRequiredMarker(){return this._hideRequiredMarker}set hideRequiredMarker(A){this._hideRequiredMarker=mr(A)}_hideRequiredMarker=!1;color="primary";get floatLabel(){return this._floatLabel||this._defaults?.floatLabel||uoA}set floatLabel(A){A!==this._floatLabel&&(this._floatLabel=A,this._changeDetectorRef.markForCheck())}_floatLabel;get appearance(){return this._appearanceSignal()}set appearance(A){let i=A||this._defaults?.appearance||NG;this._appearanceSignal.set(i)}_appearanceSignal=bA(NG);get subscriptSizing(){return this._subscriptSizing||this._defaults?.subscriptSizing||FG}set subscriptSizing(A){this._subscriptSizing=A||this._defaults?.subscriptSizing||FG}_subscriptSizing=null;get hintLabel(){return this._hintLabel}set hintLabel(A){this._hintLabel=A,this._processHints()}_hintLabel="";_hasIconPrefix=!1;_hasTextPrefix=!1;_hasIconSuffix=!1;_hasTextSuffix=!1;_labelId=this._idGenerator.getId("mat-mdc-form-field-label-");_hintLabelId=this._idGenerator.getId("mat-mdc-hint-");_describedByIds;get _control(){return this._explicitFormFieldControl||this._formFieldControl}set _control(A){this._explicitFormFieldControl=A}_destroyed=new ie;_isFocused=null;_explicitFormFieldControl;_previousControl=null;_previousControlValidatorFn=null;_stateChanges;_valueChanges;_describedByChanges;_outlineLabelOffsetResizeObserver=null;_animationsDisabled=An();constructor(){let A=this._defaults,i=w(fo);A&&(A.appearance&&(this.appearance=A.appearance),this._hideRequiredMarker=!!A?.hideRequiredMarker,A.color&&(this.color=A.color)),Ao(()=>this._currentDirection=i.valueSignal()),this._syncOutlineLabelOffset()}ngAfterViewInit(){this._updateFocusState(),this._animationsDisabled||this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-form-field-animations-enabled")},300)}),this._changeDetectorRef.detectChanges()}ngAfterContentInit(){this._assertFormFieldControl(),this._initializeSubscript(),this._initializePrefixAndSuffix()}ngAfterContentChecked(){this._assertFormFieldControl(),this._control!==this._previousControl&&(this._initializeControl(this._previousControl),this._control.ngControl&&this._control.ngControl.control&&(this._previousControlValidatorFn=this._control.ngControl.control.validator),this._previousControl=this._control),this._control.ngControl&&this._control.ngControl.control&&this._control.ngControl.control.validator!==this._previousControlValidatorFn&&this._changeDetectorRef.markForCheck()}ngOnDestroy(){this._outlineLabelOffsetResizeObserver?.disconnect(),this._stateChanges?.unsubscribe(),this._valueChanges?.unsubscribe(),this._describedByChanges?.unsubscribe(),this._destroyed.next(),this._destroyed.complete()}getLabelId=pe(()=>this._hasFloatingLabel()?this._labelId:null);getConnectedOverlayOrigin(){return this._textField||this._elementRef}_animateAndLockLabel(){this._hasFloatingLabel()&&(this.floatLabel="always")}_initializeControl(A){let i=this._control,n="mat-mdc-form-field-type-";A&&this._elementRef.nativeElement.classList.remove(n+A.controlType),i.controlType&&this._elementRef.nativeElement.classList.add(n+i.controlType),this._stateChanges?.unsubscribe(),this._stateChanges=i.stateChanges.subscribe(()=>{this._updateFocusState(),this._changeDetectorRef.markForCheck()}),this._describedByChanges?.unsubscribe(),this._describedByChanges=i.stateChanges.pipe(Sn([void 0,void 0]),we(()=>[i.errorState,i.userAriaDescribedBy]),VC(),gt(([[o,a],[r,s]])=>o!==r||a!==s)).subscribe(()=>this._syncDescribedByIds()),this._valueChanges?.unsubscribe(),i.ngControl&&i.ngControl.valueChanges&&(this._valueChanges=i.ngControl.valueChanges.pipe(Qt(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()))}_checkPrefixAndSuffixTypes(){this._hasIconPrefix=!!this._prefixChildren.find(A=>!A._isText),this._hasTextPrefix=!!this._prefixChildren.find(A=>A._isText),this._hasIconSuffix=!!this._suffixChildren.find(A=>!A._isText),this._hasTextSuffix=!!this._suffixChildren.find(A=>A._isText)}_initializePrefixAndSuffix(){this._checkPrefixAndSuffixTypes(),Ki(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(()=>{this._checkPrefixAndSuffixTypes(),this._changeDetectorRef.markForCheck()})}_initializeSubscript(){this._hintChildren.changes.subscribe(()=>{this._processHints(),this._changeDetectorRef.markForCheck()}),this._errorChildren.changes.subscribe(()=>{this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),this._validateHints(),this._syncDescribedByIds()}_assertFormFieldControl(){this._control}_updateFocusState(){let A=this._control.focused;A&&!this._isFocused?(this._isFocused=!0,this._lineRipple?.activate()):!A&&(this._isFocused||this._isFocused===null)&&(this._isFocused=!1,this._lineRipple?.deactivate()),this._elementRef.nativeElement.classList.toggle("mat-focused",A),this._textField?.nativeElement.classList.toggle("mdc-text-field--focused",A)}_syncOutlineLabelOffset(){$F({earlyRead:()=>{if(this._appearanceSignal()!=="outline")return this._outlineLabelOffsetResizeObserver?.disconnect(),null;if(globalThis.ResizeObserver){this._outlineLabelOffsetResizeObserver||=new globalThis.ResizeObserver(()=>{this._writeOutlinedLabelStyles(this._getOutlinedLabelOffset())});for(let A of this._prefixSuffixContainers())this._outlineLabelOffsetResizeObserver.observe(A,{box:"border-box"})}return this._getOutlinedLabelOffset()},write:A=>this._writeOutlinedLabelStyles(A())})}_shouldAlwaysFloat(){return this.floatLabel==="always"}_hasOutline(){return this.appearance==="outline"}_forceDisplayInfixLabel(){return!this._platform.isBrowser&&this._prefixChildren.length&&!this._shouldLabelFloat()}_hasFloatingLabel=pe(()=>!!this._labelChild());_shouldLabelFloat(){return this._hasFloatingLabel()?this._control.shouldLabelFloat||this._shouldAlwaysFloat():!1}_shouldForward(A){let i=this._control?this._control.ngControl:null;return i&&i[A]}_getSubscriptMessageType(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"}_handleLabelResized(){this._refreshOutlineNotchWidth()}_refreshOutlineNotchWidth(){!this._hasOutline()||!this._floatingLabel||!this._shouldLabelFloat()?this._notchedOutline?._setNotchWidth(0):this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth())}_processHints(){this._validateHints(),this._syncDescribedByIds()}_validateHints(){this._hintChildren}_syncDescribedByIds(){if(this._control){let A=[];if(this._control.userAriaDescribedBy&&typeof this._control.userAriaDescribedBy=="string"&&A.push(...this._control.userAriaDescribedBy.split(" ")),this._getSubscriptMessageType()==="hint"){let o=this._hintChildren?this._hintChildren.find(r=>r.align==="start"):null,a=this._hintChildren?this._hintChildren.find(r=>r.align==="end"):null;o?A.push(o.id):this._hintLabel&&A.push(this._hintLabelId),a&&A.push(a.id)}else this._errorChildren&&A.push(...this._errorChildren.map(o=>o.id));let i=this._control.describedByIds,n;if(i){let o=this._describedByIds||A;n=A.concat(i.filter(a=>a&&!o.includes(a)))}else n=A;this._control.setDescribedByIds(n),this._describedByIds=A}}_getOutlinedLabelOffset(){if(!this._hasOutline()||!this._floatingLabel)return null;if(!this._iconPrefixContainer&&!this._textPrefixContainer)return["",null];if(!this._isAttachedToDom())return null;let A=this._iconPrefixContainer?.nativeElement,i=this._textPrefixContainer?.nativeElement,n=this._iconSuffixContainer?.nativeElement,o=this._textSuffixContainer?.nativeElement,a=A?.getBoundingClientRect().width??0,r=i?.getBoundingClientRect().width??0,s=n?.getBoundingClientRect().width??0,l=o?.getBoundingClientRect().width??0,g=this._currentDirection==="rtl"?"-1":"1",C=`${a+r}px`,d=`calc(${g} * (${C} + var(--mat-mdc-form-field-label-offset-x, 0px)))`,h=`var(--mat-mdc-form-field-label-transform, ${foA} translateX(${d}))`,E=a+r+s+l;return[h,E]}_writeOutlinedLabelStyles(A){if(A!==null){let[i,n]=A;this._floatingLabel&&(this._floatingLabel.element.style.transform=i),n!==null&&this._notchedOutline?._setMaxWidth(n)}}_isAttachedToDom(){let A=this._elementRef.nativeElement;if(A.getRootNode){let i=A.getRootNode();return i&&i!==A}return document.documentElement.contains(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-form-field"]],contentQueries:function(i,n,o){if(i&1&&(ep(o,n._labelChild,vs,5),jo(o,eu,5)(o,GG,5)(o,KG,5)(o,LG,5)(o,s1,5)),i&2){ur();let a;ae(a=re())&&(n._formFieldControl=a.first),ae(a=re())&&(n._prefixChildren=a),ae(a=re())&&(n._suffixChildren=a),ae(a=re())&&(n._errorChildren=a),ae(a=re())&&(n._hintChildren=a)}},viewQuery:function(i,n){if(i&1&&(ns(n._iconPrefixContainerSignal,vG,5)(n._textPrefixContainerSignal,bG,5)(n._iconSuffixContainerSignal,MG,5)(n._textSuffixContainerSignal,SG,5),Jt(ZnA,5)(vG,5)(bG,5)(MG,5)(SG,5)(kG,5)(RG,5)(_G,5)),i&2){ur(4);let o;ae(o=re())&&(n._textField=o.first),ae(o=re())&&(n._iconPrefixContainer=o.first),ae(o=re())&&(n._textPrefixContainer=o.first),ae(o=re())&&(n._iconSuffixContainer=o.first),ae(o=re())&&(n._textSuffixContainer=o.first),ae(o=re())&&(n._floatingLabel=o.first),ae(o=re())&&(n._notchedOutline=o.first),ae(o=re())&&(n._lineRipple=o.first)}},hostAttrs:[1,"mat-mdc-form-field"],hostVars:38,hostBindings:function(i,n){i&2&&RA("mat-mdc-form-field-label-always-float",n._shouldAlwaysFloat())("mat-mdc-form-field-has-icon-prefix",n._hasIconPrefix)("mat-mdc-form-field-has-icon-suffix",n._hasIconSuffix)("mat-form-field-invalid",n._control.errorState)("mat-form-field-disabled",n._control.disabled)("mat-form-field-autofilled",n._control.autofilled)("mat-form-field-appearance-fill",n.appearance=="fill")("mat-form-field-appearance-outline",n.appearance=="outline")("mat-form-field-hide-placeholder",n._hasFloatingLabel()&&!n._shouldLabelFloat())("mat-primary",n.color!=="accent"&&n.color!=="warn")("mat-accent",n.color==="accent")("mat-warn",n.color==="warn")("ng-untouched",n._shouldForward("untouched"))("ng-touched",n._shouldForward("touched"))("ng-pristine",n._shouldForward("pristine"))("ng-dirty",n._shouldForward("dirty"))("ng-valid",n._shouldForward("valid"))("ng-invalid",n._shouldForward("invalid"))("ng-pending",n._shouldForward("pending"))},inputs:{hideRequiredMarker:"hideRequiredMarker",color:"color",floatLabel:"floatLabel",appearance:"appearance",subscriptSizing:"subscriptSizing",hintLabel:"hintLabel"},exportAs:["matFormField"],features:[Bt([{provide:tu,useExisting:t},{provide:UG,useExisting:t}])],ngContentSelectors:$nA,decls:18,vars:21,consts:[["labelTemplate",""],["textField",""],["iconPrefixContainer",""],["textPrefixContainer",""],["textSuffixContainer",""],["iconSuffixContainer",""],[1,"mat-mdc-text-field-wrapper","mdc-text-field",3,"click"],[1,"mat-mdc-form-field-focus-overlay"],[1,"mat-mdc-form-field-flex"],["matFormFieldNotchedOutline","",3,"matFormFieldNotchedOutlineOpen"],[1,"mat-mdc-form-field-icon-prefix"],[1,"mat-mdc-form-field-text-prefix"],[1,"mat-mdc-form-field-infix"],[3,"ngTemplateOutlet"],[1,"mat-mdc-form-field-text-suffix"],[1,"mat-mdc-form-field-icon-suffix"],["matFormFieldLineRipple",""],["aria-atomic","true","aria-live","polite",1,"mat-mdc-form-field-subscript-wrapper","mat-mdc-form-field-bottom-align"],[1,"mat-mdc-form-field-error-wrapper"],[1,"mat-mdc-form-field-hint-wrapper"],["matFormFieldFloatingLabel","",3,"floating","monitorResize","id"],["aria-hidden","true",1,"mat-mdc-form-field-required-marker","mdc-floating-label--required"],[3,"id"],[1,"mat-mdc-form-field-hint-spacer"]],template:function(i,n){if(i&1&&(Rt(XnA),Et(0,toA,1,1,"ng-template",null,0,$C),B(2,"div",6,1),U("click",function(a){return n._control.onContainerClick(a)}),O(4,ioA,1,0,"div",7),B(5,"div",8),O(6,aoA,2,2,"div",9),O(7,roA,3,0,"div",10),O(8,soA,3,0,"div",11),B(9,"div",12),O(10,goA,1,1,null,13),Ve(11),Q(),O(12,coA,3,0,"div",14),O(13,CoA,3,0,"div",15),Q(),O(14,IoA,1,0,"div",16),Q(),B(15,"div",17),O(16,doA,2,0,"div",18)(17,EoA,5,1,"div",19),Q()),i&2){let o;u(2),RA("mdc-text-field--filled",!n._hasOutline())("mdc-text-field--outlined",n._hasOutline())("mdc-text-field--no-label",!n._hasFloatingLabel())("mdc-text-field--disabled",n._control.disabled)("mdc-text-field--invalid",n._control.errorState),u(2),Y(!n._hasOutline()&&!n._control.disabled?4:-1),u(2),Y(n._hasOutline()?6:-1),u(),Y(n._hasIconPrefix?7:-1),u(),Y(n._hasTextPrefix?8:-1),u(2),Y(!n._hasOutline()||n._forceDisplayInfixLabel()?10:-1),u(2),Y(n._hasTextSuffix?12:-1),u(),Y(n._hasIconSuffix?13:-1),u(),Y(n._hasOutline()?-1:14),u(),RA("mat-mdc-form-field-subscript-dynamic-size",n.subscriptSizing==="dynamic");let a=n._getSubscriptMessageType();u(),Y((o=a)==="error"?16:o==="hint"?17:-1)}},dependencies:[kG,RG,Jc,_G,s1],styles:[`.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator,.mdc-text-field__input::-webkit-search-cancel-button{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-filled-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-filled-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-outlined-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mat-form-field-outlined-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)} +`],encapsulation:2,changeDetection:0})}return t})();var Ya=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fp,Ko,fi]})}return t})();var TG=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-text-field-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms} +`],encapsulation:2,changeDetection:0})}return t})(),poA={passive:!0},JG=(()=>{class t{_platform=w(li);_ngZone=w(qe);_renderer=w(Kr).createRenderer(null,null);_styleLoader=w(eo);_monitoredElements=new Map;constructor(){}monitor(A){if(!this._platform.isBrowser)return ar;this._styleLoader.load(TG);let i=Ds(A),n=this._monitoredElements.get(i);if(n)return n.subject;let o=new ie,a="cdk-text-field-autofilled",r=l=>{l.animationName==="cdk-text-field-autofill-start"&&!i.classList.contains(a)?(i.classList.add(a),this._ngZone.run(()=>o.next({target:l.target,isAutofilled:!0}))):l.animationName==="cdk-text-field-autofill-end"&&i.classList.contains(a)&&(i.classList.remove(a),this._ngZone.run(()=>o.next({target:l.target,isAutofilled:!1})))},s=this._ngZone.runOutsideAngular(()=>(i.classList.add("cdk-text-field-autofill-monitored"),this._renderer.listen(i,"animationstart",r,poA)));return this._monitoredElements.set(i,{subject:o,unlisten:s}),o}stopMonitoring(A){let i=Ds(A),n=this._monitoredElements.get(i);n&&(n.unlisten(),n.subject.complete(),i.classList.remove("cdk-text-field-autofill-monitored"),i.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(i))}ngOnDestroy(){this._monitoredElements.forEach((A,i)=>this.stopMonitoring(i))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var _p=(()=>{class t{_elementRef=w(ce);_platform=w(li);_ngZone=w(qe);_renderer=w(Pi);_resizeEvents=new ie;_previousValue;_initialHeight;_destroyed=new ie;_listenerCleanups;_minRows;_maxRows;_enabled=!0;_previousMinRows=-1;_textareaElement;get minRows(){return this._minRows}set minRows(A){this._minRows=zs(A),this._setMinHeight()}get maxRows(){return this._maxRows}set maxRows(A){this._maxRows=zs(A),this._setMaxHeight()}get enabled(){return this._enabled}set enabled(A){this._enabled!==A&&((this._enabled=A)?this.resizeToFitContent(!0):this.reset())}get placeholder(){return this._textareaElement.placeholder}set placeholder(A){this._cachedPlaceholderHeight=void 0,A?this._textareaElement.setAttribute("placeholder",A):this._textareaElement.removeAttribute("placeholder"),this._cacheTextareaPlaceholderHeight()}_cachedLineHeight;_cachedPlaceholderHeight;_document=w(ti);_hasFocus=!1;_isViewInited=!1;constructor(){w(eo).load(TG),this._textareaElement=this._elementRef.nativeElement}_setMinHeight(){let A=this.minRows&&this._cachedLineHeight?`${this.minRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.minHeight=A)}_setMaxHeight(){let A=this.maxRows&&this._cachedLineHeight?`${this.maxRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.maxHeight=A)}ngAfterViewInit(){this._platform.isBrowser&&(this._initialHeight=this._textareaElement.style.height,this.resizeToFitContent(),this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[this._renderer.listen("window","resize",()=>this._resizeEvents.next()),this._renderer.listen(this._textareaElement,"focus",this._handleFocusEvent),this._renderer.listen(this._textareaElement,"blur",this._handleFocusEvent)],this._resizeEvents.pipe(jI(16)).subscribe(()=>{this._cachedLineHeight=this._cachedPlaceholderHeight=void 0,this.resizeToFitContent(!0)})}),this._isViewInited=!0,this.resizeToFitContent(!0))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A()),this._resizeEvents.complete(),this._destroyed.next(),this._destroyed.complete()}_cacheTextareaLineHeight(){if(this._cachedLineHeight)return;let A=this._textareaElement.cloneNode(!1),i=A.style;A.rows=1,i.position="absolute",i.visibility="hidden",i.border="none",i.padding="0",i.height="",i.minHeight="",i.maxHeight="",i.top=i.bottom=i.left=i.right="auto",i.overflow="hidden",this._textareaElement.parentNode.appendChild(A),this._cachedLineHeight=A.clientHeight,A.remove(),this._setMinHeight(),this._setMaxHeight()}_measureScrollHeight(){let A=this._textareaElement,i=A.style.marginBottom||"",n=this._platform.FIREFOX,o=this._hasFocus,a=n?"cdk-textarea-autosize-measuring-firefox":"cdk-textarea-autosize-measuring";o&&(A.style.marginBottom=`${A.clientHeight}px`),A.classList.add(a);let r=A.scrollHeight-4;return A.classList.remove(a),o&&(A.style.marginBottom=i),r}_cacheTextareaPlaceholderHeight(){if(!this._isViewInited||this._cachedPlaceholderHeight!=null)return;if(!this.placeholder){this._cachedPlaceholderHeight=0;return}let A=this._textareaElement.value;this._textareaElement.value=this._textareaElement.placeholder,this._cachedPlaceholderHeight=this._measureScrollHeight(),this._textareaElement.value=A}_handleFocusEvent=A=>{this._hasFocus=A.type==="focus"};ngDoCheck(){this._platform.isBrowser&&this.resizeToFitContent()}resizeToFitContent(A=!1){if(!this._enabled||(this._cacheTextareaLineHeight(),this._cacheTextareaPlaceholderHeight(),!this._cachedLineHeight))return;let i=this._elementRef.nativeElement,n=i.value;if(!A&&this._minRows===this._previousMinRows&&n===this._previousValue)return;let o=this._measureScrollHeight(),a=Math.max(o,this._cachedPlaceholderHeight||0);i.style.height=`${a}px`,this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>this._scrollToCaretPosition(i)):setTimeout(()=>this._scrollToCaretPosition(i))}),this._previousValue=n,this._previousMinRows=this._minRows}reset(){this._initialHeight!==void 0&&(this._textareaElement.style.height=this._initialHeight)}_noopInputHandler(){}_scrollToCaretPosition(A){let{selectionStart:i,selectionEnd:n}=A;!this._destroyed.isStopped&&this._hasFocus&&A.setSelectionRange(i,n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["textarea","cdkTextareaAutosize",""]],hostAttrs:["rows","1",1,"cdk-textarea-autosize"],hostBindings:function(i,n){i&1&&U("input",function(){return n._noopInputHandler()})},inputs:{minRows:[0,"cdkAutosizeMinRows","minRows"],maxRows:[0,"cdkAutosizeMaxRows","maxRows"],enabled:[2,"cdkTextareaAutosize","enabled",Be],placeholder:"placeholder"},exportAs:["cdkTextareaAutosize"]})}return t})(),lB=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();var YG=new kA("MAT_INPUT_VALUE_ACCESSOR");var gB=(()=>{class t{isErrorState(A,i){return!!(A&&A.invalid&&(A.touched||i&&i.submitted))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var cB=class{_defaultMatcher;ngControl;_parentFormGroup;_parentForm;_stateChanges;errorState=!1;matcher;constructor(e,A,i,n,o){this._defaultMatcher=e,this.ngControl=A,this._parentFormGroup=i,this._parentForm=n,this._stateChanges=o}updateErrorState(){let e=this.errorState,A=this._parentFormGroup||this._parentForm,i=this.matcher||this._defaultMatcher,n=this.ngControl?this.ngControl.control:null,o=i?.isErrorState(n,A)??!1;o!==e&&(this.errorState=o,this._stateChanges.next())}};var moA=["button","checkbox","file","hidden","image","radio","range","reset","submit"],woA=new kA("MAT_INPUT_CONFIG"),ua=(()=>{class t{_elementRef=w(ce);_platform=w(li);ngControl=w(Hs,{optional:!0,self:!0});_autofillMonitor=w(JG);_ngZone=w(qe);_formField=w(tu,{optional:!0});_renderer=w(Pi);_uid=w(In).getId("mat-input-");_previousNativeValue;_inputValueAccessor;_signalBasedValueAccessor;_previousPlaceholder=null;_errorStateTracker;_config=w(woA,{optional:!0});_cleanupIosKeyup;_cleanupWebkitWheel;_isServer=!1;_isNativeSelect=!1;_isTextarea=!1;_isInFormField=!1;focused=!1;stateChanges=new ie;controlType="mat-input";autofilled=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=mr(A),this.focused&&(this.focused=!1,this.stateChanges.next())}_disabled=!1;get id(){return this._id}set id(A){this._id=A||this._uid}_id;placeholder;name;get required(){return this._required??this.ngControl?.control?.hasValidator(Ys.required)??!1}set required(A){this._required=mr(A)}_required;get type(){return this._type}set type(A){this._type=A||"text",this._validateType(),!this._isTextarea&&xb().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}_type="text";get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}userAriaDescribedBy;get value(){return this._signalBasedValueAccessor?this._signalBasedValueAccessor.value():this._inputValueAccessor.value}set value(A){A!==this.value&&(this._signalBasedValueAccessor?this._signalBasedValueAccessor.value.set(A):this._inputValueAccessor.value=A,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(A){this._readonly=mr(A)}_readonly=!1;disabledInteractive;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}_neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(A=>xb().has(A));constructor(){let A=w(eB,{optional:!0}),i=w(i2,{optional:!0}),n=w(gB),o=w(YG,{optional:!0,self:!0}),a=this._elementRef.nativeElement,r=a.nodeName.toLowerCase();o?VI(o.value)?this._signalBasedValueAccessor=o:this._inputValueAccessor=o:this._inputValueAccessor=a,this._previousNativeValue=this.value,this.id=this.id,this._platform.IOS&&this._ngZone.runOutsideAngular(()=>{this._cleanupIosKeyup=this._renderer.listen(a,"keyup",this._iOSKeyupListener)}),this._errorStateTracker=new cB(n,this.ngControl,i,A,this.stateChanges),this._isServer=!this._platform.isBrowser,this._isNativeSelect=r==="select",this._isTextarea=r==="textarea",this._isInFormField=!!this._formField,this.disabledInteractive=this._config?.disabledInteractive||!1,this._isNativeSelect&&(this.controlType=a.multiple?"mat-native-select-multiple":"mat-native-select"),this._signalBasedValueAccessor&&Ao(()=>{this._signalBasedValueAccessor.value(),this.stateChanges.next()})}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(A=>{this.autofilled=A.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement),this._cleanupIosKeyup?.(),this._cleanupWebkitWheel?.()}ngDoCheck(){this.ngControl&&(this.updateErrorState(),this.ngControl.disabled!==null&&this.ngControl.disabled!==this.disabled&&(this.disabled=this.ngControl.disabled,this.stateChanges.next())),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(A){this._elementRef.nativeElement.focus(A)}updateErrorState(){this._errorStateTracker.updateErrorState()}_focusChanged(A){if(A!==this.focused){if(!this._isNativeSelect&&A&&this.disabled&&this.disabledInteractive){let i=this._elementRef.nativeElement;i.type==="number"?(i.type="text",i.setSelectionRange(0,0),i.type="number"):i.setSelectionRange(0,0)}this.focused=A,this.stateChanges.next()}}_onInput(){}_dirtyCheckNativeValue(){let A=this._elementRef.nativeElement.value;this._previousNativeValue!==A&&(this._previousNativeValue=A,this.stateChanges.next())}_dirtyCheckPlaceholder(){let A=this._getPlaceholder();if(A!==this._previousPlaceholder){let i=this._elementRef.nativeElement;this._previousPlaceholder=A,A?i.setAttribute("placeholder",A):i.removeAttribute("placeholder")}}_getPlaceholder(){return this.placeholder||null}_validateType(){moA.indexOf(this._type)>-1}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let A=this._elementRef.nativeElement.validity;return A&&A.badInput}get empty(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()&&!this.autofilled}get shouldLabelFloat(){if(this._isNativeSelect){let A=this._elementRef.nativeElement,i=A.options[0];return this.focused||A.multiple||!this.empty||!!(A.selectedIndex>-1&&i&&i.label)}else return this.focused&&!this.disabled||!this.empty}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(){this.focused||this.focus()}_isInlineSelect(){let A=this._elementRef.nativeElement;return this._isNativeSelect&&(A.multiple||A.size>1)}_iOSKeyupListener=A=>{let i=A.target;!i.value&&i.selectionStart===0&&i.selectionEnd===0&&(i.setSelectionRange(1,1),i.setSelectionRange(0,0))};_getReadonlyAttribute(){return this._isNativeSelect?null:this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["input","matInput",""],["textarea","matInput",""],["select","matNativeControl",""],["input","matNativeControl",""],["textarea","matNativeControl",""]],hostAttrs:[1,"mat-mdc-input-element"],hostVars:21,hostBindings:function(i,n){i&1&&U("focus",function(){return n._focusChanged(!0)})("blur",function(){return n._focusChanged(!1)})("input",function(){return n._onInput()}),i&2&&(ha("id",n.id)("disabled",n.disabled&&!n.disabledInteractive)("required",n.required),te("name",n.name||null)("readonly",n._getReadonlyAttribute())("aria-disabled",n.disabled&&n.disabledInteractive?"true":null)("aria-invalid",n.empty&&n.required?null:n.errorState)("aria-required",n.required)("id",n.id),RA("mat-input-server",n._isServer)("mat-mdc-form-field-textarea-control",n._isInFormField&&n._isTextarea)("mat-mdc-form-field-input-control",n._isInFormField)("mat-mdc-input-disabled-interactive",n.disabledInteractive)("mdc-text-field__input",n._isInFormField)("mat-mdc-native-select-inline",n._isInlineSelect()))},inputs:{disabled:"disabled",id:"id",placeholder:"placeholder",name:"name",required:"required",type:"type",errorStateMatcher:"errorStateMatcher",userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],value:"value",readonly:"readonly",disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be]},exportAs:["matInput"],features:[Bt([{provide:eu,useExisting:t}]),Yt]})}return t})(),Ps=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Ya,Ya,lB,fi]})}return t})();var rn=(function(t){return t[t.State=0]="State",t[t.Transition=1]="Transition",t[t.Sequence=2]="Sequence",t[t.Group=3]="Group",t[t.Animate=4]="Animate",t[t.Keyframes=5]="Keyframes",t[t.Style=6]="Style",t[t.Trigger=7]="Trigger",t[t.Reference=8]="Reference",t[t.AnimateChild=9]="AnimateChild",t[t.AnimateRef=10]="AnimateRef",t[t.Query=11]="Query",t[t.Stagger=12]="Stagger",t})(rn||{}),Fg="*";function HG(t,e=null){return{type:rn.Sequence,steps:t,options:e}}function Jb(t){return{type:rn.Style,styles:t,offset:null}}var z0=class{_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_originalOnDoneFns=[];_originalOnStartFns=[];_started=!1;_destroyed=!1;_finished=!1;_position=0;parentPlayer=null;totalTime;constructor(e=0,A=0){this.totalTime=e+A}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},IB=class{_onDoneFns=[];_onStartFns=[];_finished=!1;_started=!1;_destroyed=!1;_onDestroyFns=[];parentPlayer=null;totalTime=0;players;constructor(e){this.players=e;let A=0,i=0,n=0,o=this.players.length;o==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(a=>{a.onDone(()=>{++A==o&&this._onFinish()}),a.onDestroy(()=>{++i==o&&this._onDestroy()}),a.onStart(()=>{++n==o&&this._onStart()})}),this.totalTime=this.players.reduce((a,r)=>Math.max(a,r.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){let A=e*this.totalTime;this.players.forEach(i=>{let n=i.totalTime?Math.min(1,A/i.totalTime):1;i.setPosition(n)})}getPosition(){let e=this.players.reduce((A,i)=>A===null||i.totalTime>A.totalTime?i:A,null);return e!=null?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},iu="!";function zG(t){return new Mt(3e3,!1)}function DoA(){return new Mt(3100,!1)}function yoA(){return new Mt(3101,!1)}function voA(t){return new Mt(3001,!1)}function boA(t){return new Mt(3003,!1)}function MoA(t){return new Mt(3004,!1)}function jG(t,e){return new Mt(3005,!1)}function qG(){return new Mt(3006,!1)}function VG(){return new Mt(3007,!1)}function WG(t,e){return new Mt(3008,!1)}function ZG(t){return new Mt(3002,!1)}function XG(t,e,A,i,n){return new Mt(3010,!1)}function $G(){return new Mt(3011,!1)}function AK(){return new Mt(3012,!1)}function eK(){return new Mt(3200,!1)}function tK(){return new Mt(3202,!1)}function iK(){return new Mt(3013,!1)}function nK(t){return new Mt(3014,!1)}function oK(t){return new Mt(3015,!1)}function aK(t){return new Mt(3016,!1)}function rK(t,e){return new Mt(3404,!1)}function SoA(t){return new Mt(3502,!1)}function sK(t){return new Mt(3503,!1)}function lK(){return new Mt(3300,!1)}function gK(t){return new Mt(3504,!1)}function cK(t){return new Mt(3301,!1)}function CK(t,e){return new Mt(3302,!1)}function IK(t){return new Mt(3303,!1)}function dK(t,e){return new Mt(3400,!1)}function BK(t){return new Mt(3401,!1)}function EK(t){return new Mt(3402,!1)}function hK(t,e){return new Mt(3505,!1)}function P0(t){switch(t.length){case 0:return new z0;case 1:return t[0];default:return new IB(t)}}function zb(t,e,A=new Map,i=new Map){let n=[],o=[],a=-1,r=null;if(e.forEach(s=>{let l=s.get("offset"),g=l==a,C=g&&r||new Map;s.forEach((I,d)=>{let h=d,E=I;if(d!=="offset")switch(h=t.normalizePropertyName(h,n),E){case iu:E=A.get(d);break;case Fg:E=i.get(d);break;default:E=t.normalizeStyleValue(d,h,E,n);break}C.set(h,E)}),g||o.push(C),r=C,a=l}),n.length)throw SoA(n);return o}function Rp(t,e,A,i){switch(e){case"start":t.onStart(()=>i(A&&Ob(A,"start",t)));break;case"done":t.onDone(()=>i(A&&Ob(A,"done",t)));break;case"destroy":t.onDestroy(()=>i(A&&Ob(A,"destroy",t)));break}}function Ob(t,e,A){let i=A.totalTime,n=!!A.disabled,o=Np(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,i??t.totalTime,n),a=t._data;return a!=null&&(o._data=a),o}function Np(t,e,A,i,n="",o=0,a){return{element:t,triggerName:e,fromState:A,toState:i,phaseName:n,totalTime:o,disabled:!!a}}function js(t,e,A){let i=t.get(e);return i||t.set(e,i=A),i}function Pb(t){let e=t.indexOf(":"),A=t.substring(1,e),i=t.slice(e+1);return[A,i]}var koA=typeof document>"u"?null:document.documentElement;function Fp(t){let e=t.parentNode||t.host||null;return e===koA?null:e}function xoA(t){return t.substring(1,6)=="ebkit"}var g1=null,PG=!1;function QK(t){g1||(g1=_oA()||{},PG=g1.style?"WebkitAppearance"in g1.style:!1);let e=!0;return g1.style&&!xoA(t)&&(e=t in g1.style,!e&&PG&&(e="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in g1.style)),e}function _oA(){return typeof document<"u"?document.body:null}function jb(t,e){for(;e;){if(e===t)return!0;e=Fp(e)}return!1}function qb(t,e,A){if(A)return Array.from(t.querySelectorAll(e));let i=t.querySelector(e);return i?[i]:[]}var RoA=1e3,Vb="{{",NoA="}}",Wb="ng-enter",Lp="ng-leave",nu="ng-trigger",ou=".ng-trigger",Zb="ng-animating",Gp=".ng-animating";function Hc(t){if(typeof t=="number")return t;let e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:Yb(parseFloat(e[1]),e[2])}function Yb(t,e){return e==="s"?t*RoA:t}function au(t,e,A){return t.hasOwnProperty("duration")?t:LoA(t,e,A)}var FoA=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function LoA(t,e,A){let i,n=0,o="";if(typeof t=="string"){let a=t.match(FoA);if(a===null)return e.push(zG(t)),{duration:0,delay:0,easing:""};i=Yb(parseFloat(a[1]),a[2]);let r=a[3];r!=null&&(n=Yb(parseFloat(r),a[4]));let s=a[5];s&&(o=s)}else i=t;if(!A){let a=!1,r=e.length;i<0&&(e.push(DoA()),a=!0),n<0&&(e.push(yoA()),a=!0),a&&e.splice(r,0,zG(t))}return{duration:i,delay:n,easing:o}}function uK(t){return t.length?t[0]instanceof Map?t:t.map(e=>new Map(Object.entries(e))):[]}function Lg(t,e,A){e.forEach((i,n)=>{let o=Kp(n);A&&!A.has(n)&&A.set(n,t.style[o]),t.style[o]=i})}function s2(t,e){e.forEach((A,i)=>{let n=Kp(i);t.style[n]=""})}function dB(t){return Array.isArray(t)?t.length==1?t[0]:HG(t):t}function fK(t,e,A){let i=e.params||{},n=Xb(t);n.length&&n.forEach(o=>{i.hasOwnProperty(o)||A.push(voA(o))})}var Hb=new RegExp(`${Vb}\\s*(.+?)\\s*${NoA}`,"g");function Xb(t){let e=[];if(typeof t=="string"){let A;for(;A=Hb.exec(t);)e.push(A[1]);Hb.lastIndex=0}return e}function BB(t,e,A){let i=`${t}`,n=i.replace(Hb,(o,a)=>{let r=e[a];return r==null&&(A.push(boA(a)),r=""),r.toString()});return n==i?t:n}var GoA=/-+([a-z0-9])/g;function Kp(t){return t.replace(GoA,(...e)=>e[1].toUpperCase())}function pK(t,e){return t===0||e===0}function mK(t,e,A){if(A.size&&e.length){let i=e[0],n=[];if(A.forEach((o,a)=>{i.has(a)||n.push(a),i.set(a,o)}),n.length)for(let o=1;oa.set(r,Up(t,r)))}}return e}function qs(t,e,A){switch(e.type){case rn.Trigger:return t.visitTrigger(e,A);case rn.State:return t.visitState(e,A);case rn.Transition:return t.visitTransition(e,A);case rn.Sequence:return t.visitSequence(e,A);case rn.Group:return t.visitGroup(e,A);case rn.Animate:return t.visitAnimate(e,A);case rn.Keyframes:return t.visitKeyframes(e,A);case rn.Style:return t.visitStyle(e,A);case rn.Reference:return t.visitReference(e,A);case rn.AnimateChild:return t.visitAnimateChild(e,A);case rn.AnimateRef:return t.visitAnimateRef(e,A);case rn.Query:return t.visitQuery(e,A);case rn.Stagger:return t.visitStagger(e,A);default:throw MoA(e.type)}}function Up(t,e){return window.getComputedStyle(t)[e]}var B7=(()=>{class t{validateStyleProperty(A){return QK(A)}containsElement(A,i){return jb(A,i)}getParentElement(A){return Fp(A)}query(A,i,n){return qb(A,i,n)}computeStyle(A,i,n){return n||""}animate(A,i,n,o,a,r=[],s){return new z0(n,o)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac})}return t})(),C1=class{static NOOP=new B7},I1=class{};var KoA=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),Hp=class extends I1{normalizePropertyName(e,A){return Kp(e)}normalizeStyleValue(e,A,i,n){let o="",a=i.toString().trim();if(KoA.has(A)&&i!==0&&i!=="0")if(typeof i=="number")o="px";else{let r=i.match(/^[+-]?[\d\.]+([a-z]*)$/);r&&r[1].length==0&&n.push(jG(e,i))}return a+o}};var zp="*";function UoA(t,e){let A=[];return typeof t=="string"?t.split(/\s*,\s*/).forEach(i=>ToA(i,A,e)):A.push(t),A}function ToA(t,e,A){if(t[0]==":"){let s=JoA(t,A);if(typeof s=="function"){e.push(s);return}t=s}let i=t.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(i==null||i.length<4)return A.push(oK(t)),e;let n=i[1],o=i[2],a=i[3];e.push(wK(n,a));let r=n==zp&&a==zp;o[0]=="<"&&!r&&e.push(wK(a,n))}function JoA(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(A,i)=>parseFloat(i)>parseFloat(A);case":decrement":return(A,i)=>parseFloat(i) *"}}var Tp=new Set(["true","1"]),Jp=new Set(["false","0"]);function wK(t,e){let A=Tp.has(t)||Jp.has(t),i=Tp.has(e)||Jp.has(e);return(n,o)=>{let a=t==zp||t==n,r=e==zp||e==o;return!a&&A&&typeof n=="boolean"&&(a=n?Tp.has(t):Jp.has(t)),!r&&i&&typeof o=="boolean"&&(r=o?Tp.has(e):Jp.has(e)),a&&r}}var RK=":self",OoA=new RegExp(`s*${RK}s*,?`,"g");function NK(t,e,A,i){return new n7(t).build(e,A,i)}var DK="",n7=class{_driver;constructor(e){this._driver=e}build(e,A,i){let n=new o7(A);return this._resetContextStyleTimingState(n),qs(this,dB(e),n)}_resetContextStyleTimingState(e){e.currentQuerySelector=DK,e.collectedStyles=new Map,e.collectedStyles.set(DK,new Map),e.currentTime=0}visitTrigger(e,A){let i=A.queryCount=0,n=A.depCount=0,o=[],a=[];return e.name.charAt(0)=="@"&&A.errors.push(qG()),e.definitions.forEach(r=>{if(this._resetContextStyleTimingState(A),r.type==rn.State){let s=r,l=s.name;l.toString().split(/\s*,\s*/).forEach(g=>{s.name=g,o.push(this.visitState(s,A))}),s.name=l}else if(r.type==rn.Transition){let s=this.visitTransition(r,A);i+=s.queryCount,n+=s.depCount,a.push(s)}else A.errors.push(VG())}),{type:rn.Trigger,name:e.name,states:o,transitions:a,queryCount:i,depCount:n,options:null}}visitState(e,A){let i=this.visitStyle(e.styles,A),n=e.options&&e.options.params||null;if(i.containsDynamicStyles){let o=new Set,a=n||{};i.styles.forEach(r=>{r instanceof Map&&r.forEach(s=>{Xb(s).forEach(l=>{a.hasOwnProperty(l)||o.add(l)})})}),o.size&&A.errors.push(WG(e.name,[...o.values()]))}return{type:rn.State,name:e.name,style:i,options:n?{params:n}:null}}visitTransition(e,A){A.queryCount=0,A.depCount=0;let i=qs(this,dB(e.animation),A),n=UoA(e.expr,A.errors);return{type:rn.Transition,matchers:n,animation:i,queryCount:A.queryCount,depCount:A.depCount,options:c1(e.options)}}visitSequence(e,A){return{type:rn.Sequence,steps:e.steps.map(i=>qs(this,i,A)),options:c1(e.options)}}visitGroup(e,A){let i=A.currentTime,n=0,o=e.steps.map(a=>{A.currentTime=i;let r=qs(this,a,A);return n=Math.max(n,A.currentTime),r});return A.currentTime=n,{type:rn.Group,steps:o,options:c1(e.options)}}visitAnimate(e,A){let i=PoA(e.timings,A.errors);A.currentAnimateTimings=i;let n,o=e.styles?e.styles:Jb({});if(o.type==rn.Keyframes)n=this.visitKeyframes(o,A);else{let a=e.styles,r=!1;if(!a){r=!0;let l={};i.easing&&(l.easing=i.easing),a=Jb(l)}A.currentTime+=i.duration+i.delay;let s=this.visitStyle(a,A);s.isEmptyStep=r,n=s}return A.currentAnimateTimings=null,{type:rn.Animate,timings:i,style:n,options:null}}visitStyle(e,A){let i=this._makeStyleAst(e,A);return this._validateStyleAst(i,A),i}_makeStyleAst(e,A){let i=[],n=Array.isArray(e.styles)?e.styles:[e.styles];for(let r of n)typeof r=="string"?r===Fg?i.push(r):A.errors.push(ZG(r)):i.push(new Map(Object.entries(r)));let o=!1,a=null;return i.forEach(r=>{if(r instanceof Map&&(r.has("easing")&&(a=r.get("easing"),r.delete("easing")),!o)){for(let s of r.values())if(s.toString().indexOf(Vb)>=0){o=!0;break}}}),{type:rn.Style,styles:i,easing:a,offset:e.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(e,A){let i=A.currentAnimateTimings,n=A.currentTime,o=A.currentTime;i&&o>0&&(o-=i.duration+i.delay),e.styles.forEach(a=>{typeof a!="string"&&a.forEach((r,s)=>{let l=A.collectedStyles.get(A.currentQuerySelector),g=l.get(s),C=!0;g&&(o!=n&&o>=g.startTime&&n<=g.endTime&&(A.errors.push(XG(s,g.startTime,g.endTime,o,n)),C=!1),o=g.startTime),C&&l.set(s,{startTime:o,endTime:n}),A.options&&fK(r,A.options,A.errors)})})}visitKeyframes(e,A){let i={type:rn.Keyframes,styles:[],options:null};if(!A.currentAnimateTimings)return A.errors.push($G()),i;let n=1,o=0,a=[],r=!1,s=!1,l=0,g=e.steps.map(m=>{let v=this._makeStyleAst(m,A),k=v.offset!=null?v.offset:zoA(v.styles),S=0;return k!=null&&(o++,S=v.offset=k),s=s||S<0||S>1,r=r||S0&&o{let k=I>0?v==d?1:I*v:a[v],S=k*f;A.currentTime=h+E.delay+S,E.duration=S,this._validateStyleAst(m,A),m.offset=k,i.styles.push(m)}),i}visitReference(e,A){return{type:rn.Reference,animation:qs(this,dB(e.animation),A),options:c1(e.options)}}visitAnimateChild(e,A){return A.depCount++,{type:rn.AnimateChild,options:c1(e.options)}}visitAnimateRef(e,A){return{type:rn.AnimateRef,animation:this.visitReference(e.animation,A),options:c1(e.options)}}visitQuery(e,A){let i=A.currentQuerySelector,n=e.options||{};A.queryCount++,A.currentQuery=e;let[o,a]=YoA(e.selector);A.currentQuerySelector=i.length?i+" "+o:o,js(A.collectedStyles,A.currentQuerySelector,new Map);let r=qs(this,dB(e.animation),A);return A.currentQuery=null,A.currentQuerySelector=i,{type:rn.Query,selector:o,limit:n.limit||0,optional:!!n.optional,includeSelf:a,animation:r,originalSelector:e.selector,options:c1(e.options)}}visitStagger(e,A){A.currentQuery||A.errors.push(iK());let i=e.timings==="full"?{duration:0,delay:0,easing:"full"}:au(e.timings,A.errors,!0);return{type:rn.Stagger,animation:qs(this,dB(e.animation),A),timings:i,options:null}}};function YoA(t){let e=!!t.split(/\s*,\s*/).find(A=>A==RK);return e&&(t=t.replace(OoA,"")),t=t.replace(/@\*/g,ou).replace(/@\w+/g,A=>ou+"-"+A.slice(1)).replace(/:animating/g,Gp),[t,e]}function HoA(t){return t?gA({},t):null}var o7=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(e){this.errors=e}};function zoA(t){if(typeof t=="string")return null;let e=null;if(Array.isArray(t))t.forEach(A=>{if(A instanceof Map&&A.has("offset")){let i=A;e=parseFloat(i.get("offset")),i.delete("offset")}});else if(t instanceof Map&&t.has("offset")){let A=t;e=parseFloat(A.get("offset")),A.delete("offset")}return e}function PoA(t,e){if(t.hasOwnProperty("duration"))return t;if(typeof t=="number"){let o=au(t,e).duration;return $b(o,0,"")}let A=t;if(A.split(/\s+/).some(o=>o.charAt(0)=="{"&&o.charAt(1)=="{")){let o=$b(0,0,"");return o.dynamic=!0,o.strValue=A,o}let n=au(A,e);return $b(n.duration,n.delay,n.easing)}function c1(t){return t?(t=gA({},t),t.params&&(t.params=HoA(t.params))):t={},t}function $b(t,e,A){return{duration:t,delay:e,easing:A}}function E7(t,e,A,i,n,o,a=null,r=!1){return{type:1,element:t,keyframes:e,preStyleProps:A,postStyleProps:i,duration:n,delay:o,totalTime:n+o,easing:a,subTimeline:r}}var su=class{_map=new Map;get(e){return this._map.get(e)||[]}append(e,A){let i=this._map.get(e);i||this._map.set(e,i=[]),i.push(...A)}has(e){return this._map.has(e)}clear(){this._map.clear()}},joA=1,qoA=":enter",VoA=new RegExp(qoA,"g"),WoA=":leave",ZoA=new RegExp(WoA,"g");function FK(t,e,A,i,n,o=new Map,a=new Map,r,s,l=[]){return new a7().buildKeyframes(t,e,A,i,n,o,a,r,s,l)}var a7=class{buildKeyframes(e,A,i,n,o,a,r,s,l,g=[]){l=l||new su;let C=new r7(e,A,l,n,o,g,[]);C.options=s;let I=s.delay?Hc(s.delay):0;C.currentTimeline.delayNextStep(I),C.currentTimeline.setStyles([a],null,C.errors,s),qs(this,i,C);let d=C.timelines.filter(h=>h.containsAnimation());if(d.length&&r.size){let h;for(let E=d.length-1;E>=0;E--){let f=d[E];if(f.element===A){h=f;break}}h&&!h.allowOnlyTimelineStyles()&&h.setStyles([r],null,C.errors,s)}return d.length?d.map(h=>h.buildKeyframes()):[E7(A,[],[],[],0,I,"",!1)]}visitTrigger(e,A){}visitState(e,A){}visitTransition(e,A){}visitAnimateChild(e,A){let i=A.subInstructions.get(A.element);if(i){let n=A.createSubContext(e.options),o=A.currentTimeline.currentTime,a=this._visitSubInstructions(i,n,n.options);o!=a&&A.transformIntoNewTimeline(a)}A.previousNode=e}visitAnimateRef(e,A){let i=A.createSubContext(e.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],A,i),this.visitReference(e.animation,i),A.transformIntoNewTimeline(i.currentTimeline.currentTime),A.previousNode=e}_applyAnimationRefDelays(e,A,i){for(let n of e){let o=n?.delay;if(o){let a=typeof o=="number"?o:Hc(BB(o,n?.params??{},A.errors));i.delayNextStep(a)}}}_visitSubInstructions(e,A,i){let o=A.currentTimeline.currentTime,a=i.duration!=null?Hc(i.duration):null,r=i.delay!=null?Hc(i.delay):null;return a!==0&&e.forEach(s=>{let l=A.appendInstructionToTimeline(s,a,r);o=Math.max(o,l.duration+l.delay)}),o}visitReference(e,A){A.updateOptions(e.options,!0),qs(this,e.animation,A),A.previousNode=e}visitSequence(e,A){let i=A.subContextCount,n=A,o=e.options;if(o&&(o.params||o.delay)&&(n=A.createSubContext(o),n.transformIntoNewTimeline(),o.delay!=null)){n.previousNode.type==rn.Style&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=Pp);let a=Hc(o.delay);n.delayNextStep(a)}e.steps.length&&(e.steps.forEach(a=>qs(this,a,n)),n.currentTimeline.applyStylesToKeyframe(),n.subContextCount>i&&n.transformIntoNewTimeline()),A.previousNode=e}visitGroup(e,A){let i=[],n=A.currentTimeline.currentTime,o=e.options&&e.options.delay?Hc(e.options.delay):0;e.steps.forEach(a=>{let r=A.createSubContext(e.options);o&&r.delayNextStep(o),qs(this,a,r),n=Math.max(n,r.currentTimeline.currentTime),i.push(r.currentTimeline)}),i.forEach(a=>A.currentTimeline.mergeTimelineCollectedStyles(a)),A.transformIntoNewTimeline(n),A.previousNode=e}_visitTiming(e,A){if(e.dynamic){let i=e.strValue,n=A.params?BB(i,A.params,A.errors):i;return au(n,A.errors)}else return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,A){let i=A.currentAnimateTimings=this._visitTiming(e.timings,A),n=A.currentTimeline;i.delay&&(A.incrementTime(i.delay),n.snapshotCurrentStyles());let o=e.style;o.type==rn.Keyframes?this.visitKeyframes(o,A):(A.incrementTime(i.duration),this.visitStyle(o,A),n.applyStylesToKeyframe()),A.currentAnimateTimings=null,A.previousNode=e}visitStyle(e,A){let i=A.currentTimeline,n=A.currentAnimateTimings;!n&&i.hasCurrentStyleProperties()&&i.forwardFrame();let o=n&&n.easing||e.easing;e.isEmptyStep?i.applyEmptyStep(o):i.setStyles(e.styles,o,A.errors,A.options),A.previousNode=e}visitKeyframes(e,A){let i=A.currentAnimateTimings,n=A.currentTimeline.duration,o=i.duration,r=A.createSubContext().currentTimeline;r.easing=i.easing,e.styles.forEach(s=>{let l=s.offset||0;r.forwardTime(l*o),r.setStyles(s.styles,s.easing,A.errors,A.options),r.applyStylesToKeyframe()}),A.currentTimeline.mergeTimelineCollectedStyles(r),A.transformIntoNewTimeline(n+o),A.previousNode=e}visitQuery(e,A){let i=A.currentTimeline.currentTime,n=e.options||{},o=n.delay?Hc(n.delay):0;o&&(A.previousNode.type===rn.Style||i==0&&A.currentTimeline.hasCurrentStyleProperties())&&(A.currentTimeline.snapshotCurrentStyles(),A.previousNode=Pp);let a=i,r=A.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!n.optional,A.errors);A.currentQueryTotal=r.length;let s=null;r.forEach((l,g)=>{A.currentQueryIndex=g;let C=A.createSubContext(e.options,l);o&&C.delayNextStep(o),l===A.element&&(s=C.currentTimeline),qs(this,e.animation,C),C.currentTimeline.applyStylesToKeyframe();let I=C.currentTimeline.currentTime;a=Math.max(a,I)}),A.currentQueryIndex=0,A.currentQueryTotal=0,A.transformIntoNewTimeline(a),s&&(A.currentTimeline.mergeTimelineCollectedStyles(s),A.currentTimeline.snapshotCurrentStyles()),A.previousNode=e}visitStagger(e,A){let i=A.parentContext,n=A.currentTimeline,o=e.timings,a=Math.abs(o.duration),r=a*(A.currentQueryTotal-1),s=a*A.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":s=r-s;break;case"full":s=i.currentStaggerTime;break}let g=A.currentTimeline;s&&g.delayNextStep(s);let C=g.currentTime;qs(this,e.animation,A),A.previousNode=e,i.currentStaggerTime=n.currentTime-C+(n.startTime-i.currentTimeline.startTime)}},Pp={},r7=class t{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=Pp;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(e,A,i,n,o,a,r,s){this._driver=e,this.element=A,this.subInstructions=i,this._enterClassName=n,this._leaveClassName=o,this.errors=a,this.timelines=r,this.currentTimeline=s||new jp(this._driver,A,0),r.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,A){if(!e)return;let i=e,n=this.options;i.duration!=null&&(n.duration=Hc(i.duration)),i.delay!=null&&(n.delay=Hc(i.delay));let o=i.params;if(o){let a=n.params;a||(a=this.options.params={}),Object.keys(o).forEach(r=>{(!A||!a.hasOwnProperty(r))&&(a[r]=BB(o[r],a,this.errors))})}}_copyOptions(){let e={};if(this.options){let A=this.options.params;if(A){let i=e.params={};Object.keys(A).forEach(n=>{i[n]=A[n]})}}return e}createSubContext(e=null,A,i){let n=A||this.element,o=new t(this._driver,n,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(n,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(e),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(e){return this.previousNode=Pp,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,A,i){let n={duration:A??e.duration,delay:this.currentTimeline.currentTime+(i??0)+e.delay,easing:""},o=new s7(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,n,e.stretchStartingKeyframe);return this.timelines.push(o),n}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,A,i,n,o,a){let r=[];if(n&&r.push(this.element),e.length>0){e=e.replace(VoA,"."+this._enterClassName),e=e.replace(ZoA,"."+this._leaveClassName);let s=i!=1,l=this._driver.query(this.element,e,s);i!==0&&(l=i<0?l.slice(l.length+i,l.length):l.slice(0,i)),r.push(...l)}return!o&&r.length==0&&a.push(nK(A)),r}},jp=class t{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(e,A,i,n){this._driver=e,this.element=A,this.startTime=i,this._elementTimelineStylesLookup=n,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(A),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(A,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){let A=this._keyframes.size===1&&this._pendingStyles.size;this.duration||A?(this.forwardTime(this.currentTime+e),A&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,A){return this.applyStylesToKeyframe(),new t(this._driver,e,A||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=joA,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,A){this._localTimelineStyles.set(e,A),this._globalTimelineStyles.set(e,A),this._styleSummary.set(e,{time:this.currentTime,value:A})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[A,i]of this._globalTimelineStyles)this._backFill.set(A,i||Fg),this._currentKeyframe.set(A,Fg);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,A,i,n){A&&this._previousKeyframe.set("easing",A);let o=n&&n.params||{},a=XoA(e,this._globalTimelineStyles);for(let[r,s]of a){let l=BB(s,o,i);this._pendingStyles.set(r,l),this._localTimelineStyles.has(r)||this._backFill.set(r,this._globalTimelineStyles.get(r)??Fg),this._updateStyle(r,l)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((e,A)=>{this._currentKeyframe.set(A,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,A)=>{this._currentKeyframe.has(A)||this._currentKeyframe.set(A,e)}))}snapshotCurrentStyles(){for(let[e,A]of this._localTimelineStyles)this._pendingStyles.set(e,A),this._updateStyle(e,A)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let e=[];for(let A in this._currentKeyframe)e.push(A);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((A,i)=>{let n=this._styleSummary.get(i);(!n||A.time>n.time)&&this._updateStyle(i,A.value)})}buildKeyframes(){this.applyStylesToKeyframe();let e=new Set,A=new Set,i=this._keyframes.size===1&&this.duration===0,n=[];this._keyframes.forEach((r,s)=>{let l=new Map([...this._backFill,...r]);l.forEach((g,C)=>{g===iu?e.add(C):g===Fg&&A.add(C)}),i||l.set("offset",s/this.duration),n.push(l)});let o=[...e.values()],a=[...A.values()];if(i){let r=n[0],s=new Map(r);r.set("offset",0),s.set("offset",1),n=[r,s]}return E7(this.element,n,o,a,this.duration,this.startTime,this.easing,!1)}},s7=class extends jp{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(e,A,i,n,o,a,r=!1){super(e,A,a.delay),this.keyframes=i,this.preStyleProps=n,this.postStyleProps=o,this._stretchStartingKeyframe=r,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:A,duration:i,easing:n}=this.timings;if(this._stretchStartingKeyframe&&A){let o=[],a=i+A,r=A/a,s=new Map(e[0]);s.set("offset",0),o.push(s);let l=new Map(e[0]);l.set("offset",yK(r)),o.push(l);let g=e.length-1;for(let C=1;C<=g;C++){let I=new Map(e[C]),d=I.get("offset"),h=A+d*i;I.set("offset",yK(h/a)),o.push(I)}i=a,A=0,n="",e=o}return E7(this.element,e,this.preStyleProps,this.postStyleProps,i,A,n,!0)}};function yK(t,e=3){let A=Math.pow(10,e-1);return Math.round(t*A)/A}function XoA(t,e){let A=new Map,i;return t.forEach(n=>{if(n==="*"){i??=e.keys();for(let o of i)A.set(o,Fg)}else for(let[o,a]of n)A.set(o,a)}),A}function vK(t,e,A,i,n,o,a,r,s,l,g,C,I){return{type:0,element:t,triggerName:e,isRemovalTransition:n,fromState:A,fromStyles:o,toState:i,toStyles:a,timelines:r,queriedElements:s,preStyleProps:l,postStyleProps:g,totalTime:C,errors:I}}var A7={},qp=class{_triggerName;ast;_stateStyles;constructor(e,A,i){this._triggerName=e,this.ast=A,this._stateStyles=i}match(e,A,i,n){return $oA(this.ast.matchers,e,A,i,n)}buildStyles(e,A,i){let n=this._stateStyles.get("*");return e!==void 0&&(n=this._stateStyles.get(e?.toString())||n),n?n.buildStyles(A,i):new Map}build(e,A,i,n,o,a,r,s,l,g){let C=[],I=this.ast.options&&this.ast.options.params||A7,d=r&&r.params||A7,h=this.buildStyles(i,d,C),E=s&&s.params||A7,f=this.buildStyles(n,E,C),m=new Set,v=new Map,k=new Map,S=n==="void",b={params:LK(E,I),delay:this.ast.options?.delay},x=g?[]:FK(e,A,this.ast.animation,o,a,h,f,b,l,C),F=0;return x.forEach(z=>{F=Math.max(z.duration+z.delay,F)}),C.length?vK(A,this._triggerName,i,n,S,h,f,[],[],v,k,F,C):(x.forEach(z=>{let P=z.element,W=js(v,P,new Set);z.preStyleProps.forEach(Z=>W.add(Z));let eA=js(k,P,new Set);z.postStyleProps.forEach(Z=>eA.add(Z)),P!==A&&m.add(P)}),vK(A,this._triggerName,i,n,S,h,f,x,[...m.values()],v,k,F))}};function $oA(t,e,A,i,n){return t.some(o=>o(e,A,i,n))}function LK(t,e){let A=gA({},e);return Object.entries(t).forEach(([i,n])=>{n!=null&&(A[i]=n)}),A}var l7=class{styles;defaultParams;normalizer;constructor(e,A,i){this.styles=e,this.defaultParams=A,this.normalizer=i}buildStyles(e,A){let i=new Map,n=LK(e,this.defaultParams);return this.styles.styles.forEach(o=>{typeof o!="string"&&o.forEach((a,r)=>{a&&(a=BB(a,n,A));let s=this.normalizer.normalizePropertyName(r,A);a=this.normalizer.normalizeStyleValue(r,s,a,A),i.set(r,a)})}),i}};function AaA(t,e,A){return new g7(t,e,A)}var g7=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(e,A,i){this.name=e,this.ast=A,this._normalizer=i,A.states.forEach(n=>{let o=n.options&&n.options.params||{};this.states.set(n.name,new l7(n.style,o,i))}),bK(this.states,"true","1"),bK(this.states,"false","0"),A.transitions.forEach(n=>{this.transitionFactories.push(new qp(e,n,this.states))}),this.fallbackTransition=eaA(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,A,i,n){return this.transitionFactories.find(a=>a.match(e,A,i,n))||null}matchStyles(e,A,i){return this.fallbackTransition.buildStyles(e,A,i)}};function eaA(t,e,A){let i=[(a,r)=>!0],n={type:rn.Sequence,steps:[],options:null},o={type:rn.Transition,animation:n,matchers:i,options:null,queryCount:0,depCount:0};return new qp(t,o,e)}function bK(t,e,A){t.has(e)?t.has(A)||t.set(A,t.get(e)):t.has(A)&&t.set(e,t.get(A))}var taA=new su,c7=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(e,A,i){this.bodyNode=e,this._driver=A,this._normalizer=i}register(e,A){let i=[],n=[],o=NK(this._driver,A,i,n);if(i.length)throw sK(i);this._animations.set(e,o)}_buildPlayer(e,A,i){let n=e.element,o=zb(this._normalizer,e.keyframes,A,i);return this._driver.animate(n,o,e.duration,e.delay,e.easing,[],!0)}create(e,A,i={}){let n=[],o=this._animations.get(e),a,r=new Map;if(o?(a=FK(this._driver,A,o,Wb,Lp,new Map,new Map,i,taA,n),a.forEach(g=>{let C=js(r,g.element,new Map);g.postStyleProps.forEach(I=>C.set(I,null))})):(n.push(lK()),a=[]),n.length)throw gK(n);r.forEach((g,C)=>{g.forEach((I,d)=>{g.set(d,this._driver.computeStyle(C,d,Fg))})});let s=a.map(g=>{let C=r.get(g.element);return this._buildPlayer(g,new Map,C)}),l=P0(s);return this._playersById.set(e,l),l.onDestroy(()=>this.destroy(e)),this.players.push(l),l}destroy(e){let A=this._getPlayer(e);A.destroy(),this._playersById.delete(e);let i=this.players.indexOf(A);i>=0&&this.players.splice(i,1)}_getPlayer(e){let A=this._playersById.get(e);if(!A)throw cK(e);return A}listen(e,A,i,n){let o=Np(A,"","","");return Rp(this._getPlayer(e),i,o,n),()=>{}}command(e,A,i,n){if(i=="register"){this.register(e,n[0]);return}if(i=="create"){let a=n[0]||{};this.create(e,A,a);return}let o=this._getPlayer(e);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(n[0]));break;case"destroy":this.destroy(e);break}}},MK="ng-animate-queued",iaA=".ng-animate-queued",e7="ng-animate-disabled",naA=".ng-animate-disabled",oaA="ng-star-inserted",aaA=".ng-star-inserted",raA=[],GK={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},saA={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},Gg="__ng_removed",lu=class{namespaceId;value;options;get params(){return this.options.params}constructor(e,A=""){this.namespaceId=A;let i=e&&e.hasOwnProperty("value"),n=i?e.value:e;if(this.value=gaA(n),i){let o=e,{value:a}=o,r=vF(o,["value"]);this.options=r}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){let A=e.params;if(A){let i=this.options.params;Object.keys(A).forEach(n=>{i[n]==null&&(i[n]=A[n])})}}},ru="void",t7=new lu(ru),C7=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(e,A,i){this.id=e,this.hostElement=A,this._engine=i,this._hostClassName="ng-tns-"+e,Pl(A,this._hostClassName)}listen(e,A,i,n){if(!this._triggers.has(A))throw CK(i,A);if(i==null||i.length==0)throw IK(A);if(!caA(i))throw dK(i,A);let o=js(this._elementListeners,e,[]),a={name:A,phase:i,callback:n};o.push(a);let r=js(this._engine.statesByElement,e,new Map);return r.has(A)||(Pl(e,nu),Pl(e,nu+"-"+A),r.set(A,t7)),()=>{this._engine.afterFlush(()=>{let s=o.indexOf(a);s>=0&&o.splice(s,1),this._triggers.has(A)||r.delete(A)})}}register(e,A){return this._triggers.has(e)?!1:(this._triggers.set(e,A),!0)}_getTrigger(e){let A=this._triggers.get(e);if(!A)throw BK(e);return A}trigger(e,A,i,n=!0){let o=this._getTrigger(A),a=new gu(this.id,A,e),r=this._engine.statesByElement.get(e);r||(Pl(e,nu),Pl(e,nu+"-"+A),this._engine.statesByElement.set(e,r=new Map));let s=r.get(A),l=new lu(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&s&&l.absorbOptions(s.options),r.set(A,l),s||(s=t7),!(l.value===ru)&&s.value===l.value){if(!daA(s.params,l.params)){let E=[],f=o.matchStyles(s.value,s.params,E),m=o.matchStyles(l.value,l.params,E);E.length?this._engine.reportError(E):this._engine.afterFlush(()=>{s2(e,f),Lg(e,m)})}return}let I=js(this._engine.playersByElement,e,[]);I.forEach(E=>{E.namespaceId==this.id&&E.triggerName==A&&E.queued&&E.destroy()});let d=o.matchTransition(s.value,l.value,e,l.params),h=!1;if(!d){if(!n)return;d=o.fallbackTransition,h=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:A,transition:d,fromState:s,toState:l,player:a,isFallbackTransition:h}),h||(Pl(e,MK),a.onStart(()=>{EB(e,MK)})),a.onDone(()=>{let E=this.players.indexOf(a);E>=0&&this.players.splice(E,1);let f=this._engine.playersByElement.get(e);if(f){let m=f.indexOf(a);m>=0&&f.splice(m,1)}}),this.players.push(a),I.push(a),a}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(A=>A.delete(e)),this._elementListeners.forEach((A,i)=>{this._elementListeners.set(i,A.filter(n=>n.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);let A=this._engine.playersByElement.get(e);A&&(A.forEach(i=>i.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,A){let i=this._engine.driver.query(e,ou,!0);i.forEach(n=>{if(n[Gg])return;let o=this._engine.fetchNamespacesByElement(n);o.size?o.forEach(a=>a.triggerLeaveAnimation(n,A,!1,!0)):this.clearElementCache(n)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(n=>this.clearElementCache(n)))}triggerLeaveAnimation(e,A,i,n){let o=this._engine.statesByElement.get(e),a=new Map;if(o){let r=[];if(o.forEach((s,l)=>{if(a.set(l,s.value),this._triggers.has(l)){let g=this.trigger(e,l,ru,n);g&&r.push(g)}}),r.length)return this._engine.markElementAsRemoved(this.id,e,!0,A,a),i&&P0(r).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){let A=this._elementListeners.get(e),i=this._engine.statesByElement.get(e);if(A&&i){let n=new Set;A.forEach(o=>{let a=o.name;if(n.has(a))return;n.add(a);let s=this._triggers.get(a).fallbackTransition,l=i.get(a)||t7,g=new lu(ru),C=new gu(this.id,a,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:a,transition:s,fromState:l,toState:g,player:C,isFallbackTransition:!0})})}}removeNode(e,A){let i=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,A),this.triggerLeaveAnimation(e,A,!0))return;let n=!1;if(i.totalAnimations){let o=i.players.length?i.playersByQueriedElement.get(e):[];if(o&&o.length)n=!0;else{let a=e;for(;a=a.parentNode;)if(i.statesByElement.get(a)){n=!0;break}}}if(this.prepareLeaveAnimationListeners(e),n)i.markElementAsRemoved(this.id,e,!1,A);else{let o=e[Gg];(!o||o===GK)&&(i.afterFlush(()=>this.clearElementCache(e)),i.destroyInnerAnimations(e),i._onRemovalComplete(e,A))}}insertNode(e,A){Pl(e,this._hostClassName)}drainQueuedTransitions(e){let A=[];return this._queue.forEach(i=>{let n=i.player;if(n.destroyed)return;let o=i.element,a=this._elementListeners.get(o);a&&a.forEach(r=>{if(r.name==i.triggerName){let s=Np(o,i.triggerName,i.fromState.value,i.toState.value);s._data=e,Rp(i.player,r.phase,s,r.callback)}}),n.markedForDestroy?this._engine.afterFlush(()=>{n.destroy()}):A.push(i)}),this._queue=[],A.sort((i,n)=>{let o=i.transition.ast.depCount,a=n.transition.ast.depCount;return o==0||a==0?o-a:this._engine.driver.containsElement(i.element,n.element)?1:-1})}destroy(e){this.players.forEach(A=>A.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}},I7=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(e,A)=>{};_onRemovalComplete(e,A){this.onRemovalComplete(e,A)}constructor(e,A,i){this.bodyNode=e,this.driver=A,this._normalizer=i}get queuedPlayers(){let e=[];return this._namespaceList.forEach(A=>{A.players.forEach(i=>{i.queued&&e.push(i)})}),e}createNamespace(e,A){let i=new C7(e,A,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,A)?this._balanceNamespaceList(i,A):(this.newHostElements.set(A,i),this.collectEnterElement(A)),this._namespaceLookup[e]=i}_balanceNamespaceList(e,A){let i=this._namespaceList,n=this.namespacesByHostElement;if(i.length-1>=0){let a=!1,r=this.driver.getParentElement(A);for(;r;){let s=n.get(r);if(s){let l=i.indexOf(s);i.splice(l+1,0,e),a=!0;break}r=this.driver.getParentElement(r)}a||i.unshift(e)}else i.push(e);return n.set(A,e),e}register(e,A){let i=this._namespaceLookup[e];return i||(i=this.createNamespace(e,A)),i}registerTrigger(e,A,i){let n=this._namespaceLookup[e];n&&n.register(A,i)&&this.totalAnimations++}destroy(e,A){e&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let i=this._fetchNamespace(e);this.namespacesByHostElement.delete(i.hostElement);let n=this._namespaceList.indexOf(i);n>=0&&this._namespaceList.splice(n,1),i.destroy(A),delete this._namespaceLookup[e]}))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){let A=new Set,i=this.statesByElement.get(e);if(i){for(let n of i.values())if(n.namespaceId){let o=this._fetchNamespace(n.namespaceId);o&&A.add(o)}}return A}trigger(e,A,i,n){if(Op(A)){let o=this._fetchNamespace(e);if(o)return o.trigger(A,i,n),!0}return!1}insertNode(e,A,i,n){if(!Op(A))return;let o=A[Gg];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;let a=this.collectedLeaveElements.indexOf(A);a>=0&&this.collectedLeaveElements.splice(a,1)}if(e){let a=this._fetchNamespace(e);a&&a.insertNode(A,i)}n&&this.collectEnterElement(A)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,A){A?this.disabledNodes.has(e)||(this.disabledNodes.add(e),Pl(e,e7)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),EB(e,e7))}removeNode(e,A,i){if(Op(A)){let n=e?this._fetchNamespace(e):null;n?n.removeNode(A,i):this.markElementAsRemoved(e,A,!1,i);let o=this.namespacesByHostElement.get(A);o&&o.id!==e&&o.removeNode(A,i)}else this._onRemovalComplete(A,i)}markElementAsRemoved(e,A,i,n,o){this.collectedLeaveElements.push(A),A[Gg]={namespaceId:e,setForRemoval:n,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:o}}listen(e,A,i,n,o){return Op(A)?this._fetchNamespace(e).listen(A,i,n,o):()=>{}}_buildInstruction(e,A,i,n,o){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,i,n,e.fromState.options,e.toState.options,A,o)}destroyInnerAnimations(e){let A=this.driver.query(e,ou,!0);A.forEach(i=>this.destroyActiveAnimationsForElement(i)),this.playersByQueriedElement.size!=0&&(A=this.driver.query(e,Gp,!0),A.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(e){let A=this.playersByElement.get(e);A&&A.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(e){let A=this.playersByQueriedElement.get(e);A&&A.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return P0(this.players).onDone(()=>e());e()})}processLeaveNode(e){let A=e[Gg];if(A&&A.setForRemoval){if(e[Gg]=GK,A.namespaceId){this.destroyInnerAnimations(e);let i=this._fetchNamespace(A.namespaceId);i&&i.clearElementCache(e)}this._onRemovalComplete(e,A.setForRemoval)}e.classList?.contains(e7)&&this.markElementAsDisabled(e,!1),this.driver.query(e,naA,!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(e=-1){let A=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,n)=>this._balanceNamespaceList(i,n)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;ii()),this._flushFns=[],this._whenQuietFns.length){let i=this._whenQuietFns;this._whenQuietFns=[],A.length?P0(A).onDone(()=>{i.forEach(n=>n())}):i.forEach(n=>n())}}reportError(e){throw EK(e)}_flushAnimations(e,A){let i=new su,n=[],o=new Map,a=[],r=new Map,s=new Map,l=new Map,g=new Set;this.disabledNodes.forEach(AA=>{g.add(AA);let IA=this.driver.query(AA,iaA,!0);for(let aA=0;aA{let aA=Wb+E++;h.set(IA,aA),AA.forEach(rA=>Pl(rA,aA))});let f=[],m=new Set,v=new Set;for(let AA=0;AAm.add(rA)):v.add(IA))}let k=new Map,S=xK(I,Array.from(m));S.forEach((AA,IA)=>{let aA=Lp+E++;k.set(IA,aA),AA.forEach(rA=>Pl(rA,aA))}),e.push(()=>{d.forEach((AA,IA)=>{let aA=h.get(IA);AA.forEach(rA=>EB(rA,aA))}),S.forEach((AA,IA)=>{let aA=k.get(IA);AA.forEach(rA=>EB(rA,aA))}),f.forEach(AA=>{this.processLeaveNode(AA)})});let b=[],x=[];for(let AA=this._namespaceList.length-1;AA>=0;AA--)this._namespaceList[AA].drainQueuedTransitions(A).forEach(aA=>{let rA=aA.player,uA=aA.element;if(b.push(rA),this.collectedEnterElements.length){let _e=uA[Gg];if(_e&&_e.setForMove){if(_e.previousTriggersValues&&_e.previousTriggersValues.has(aA.triggerName)){let YA=_e.previousTriggersValues.get(aA.triggerName),fA=this.statesByElement.get(aA.element);if(fA&&fA.has(aA.triggerName)){let XA=fA.get(aA.triggerName);XA.value=YA,fA.set(aA.triggerName,XA)}}rA.destroy();return}}let UA=!C||!this.driver.containsElement(C,uA),$A=k.get(uA),zA=h.get(uA),pA=this._buildInstruction(aA,i,zA,$A,UA);if(pA.errors&&pA.errors.length){x.push(pA);return}if(UA){rA.onStart(()=>s2(uA,pA.fromStyles)),rA.onDestroy(()=>Lg(uA,pA.toStyles)),n.push(rA);return}if(aA.isFallbackTransition){rA.onStart(()=>s2(uA,pA.fromStyles)),rA.onDestroy(()=>Lg(uA,pA.toStyles)),n.push(rA);return}let PA=[];pA.timelines.forEach(_e=>{_e.stretchStartingKeyframe=!0,this.disabledNodes.has(_e.element)||PA.push(_e)}),pA.timelines=PA,i.append(uA,pA.timelines);let Ue={instruction:pA,player:rA,element:uA};a.push(Ue),pA.queriedElements.forEach(_e=>js(r,_e,[]).push(rA)),pA.preStyleProps.forEach((_e,YA)=>{if(_e.size){let fA=s.get(YA);fA||s.set(YA,fA=new Set),_e.forEach((XA,DA)=>fA.add(DA))}}),pA.postStyleProps.forEach((_e,YA)=>{let fA=l.get(YA);fA||l.set(YA,fA=new Set),_e.forEach((XA,DA)=>fA.add(DA))})});if(x.length){let AA=[];x.forEach(IA=>{AA.push(hK(IA.triggerName,IA.errors))}),b.forEach(IA=>IA.destroy()),this.reportError(AA)}let F=new Map,z=new Map;a.forEach(AA=>{let IA=AA.element;i.has(IA)&&(z.set(IA,IA),this._beforeAnimationBuild(AA.player.namespaceId,AA.instruction,F))}),n.forEach(AA=>{let IA=AA.element;this._getPreviousPlayers(IA,!1,AA.namespaceId,AA.triggerName,null).forEach(rA=>{js(F,IA,[]).push(rA),rA.destroy()})});let P=f.filter(AA=>_K(AA,s,l)),W=new Map;kK(W,this.driver,v,l,Fg).forEach(AA=>{_K(AA,s,l)&&P.push(AA)});let Z=new Map;d.forEach((AA,IA)=>{kK(Z,this.driver,new Set(AA),s,iu)}),P.forEach(AA=>{let IA=W.get(AA),aA=Z.get(AA);W.set(AA,new Map([...IA?.entries()??[],...aA?.entries()??[]]))});let EA=[],X=[],iA={};a.forEach(AA=>{let{element:IA,player:aA,instruction:rA}=AA;if(i.has(IA)){if(g.has(IA)){aA.onDestroy(()=>Lg(IA,rA.toStyles)),aA.disabled=!0,aA.overrideTotalTime(rA.totalTime),n.push(aA);return}let uA=iA;if(z.size>1){let $A=IA,zA=[];for(;$A=$A.parentNode;){let pA=z.get($A);if(pA){uA=pA;break}zA.push($A)}zA.forEach(pA=>z.set(pA,uA))}let UA=this._buildAnimation(aA.namespaceId,rA,F,o,Z,W);if(aA.setRealPlayer(UA),uA===iA)EA.push(aA);else{let $A=this.playersByElement.get(uA);$A&&$A.length&&(aA.parentPlayer=P0($A)),n.push(aA)}}else s2(IA,rA.fromStyles),aA.onDestroy(()=>Lg(IA,rA.toStyles)),X.push(aA),g.has(IA)&&n.push(aA)}),X.forEach(AA=>{let IA=o.get(AA.element);if(IA&&IA.length){let aA=P0(IA);AA.setRealPlayer(aA)}}),n.forEach(AA=>{AA.parentPlayer?AA.syncPlayerEvents(AA.parentPlayer):AA.destroy()});for(let AA=0;AA!UA.destroyed);uA.length?CaA(this,IA,uA):this.processLeaveNode(IA)}return f.length=0,EA.forEach(AA=>{this.players.push(AA),AA.onDone(()=>{AA.destroy();let IA=this.players.indexOf(AA);this.players.splice(IA,1)}),AA.play()}),EA}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,A,i,n,o){let a=[];if(A){let r=this.playersByQueriedElement.get(e);r&&(a=r)}else{let r=this.playersByElement.get(e);if(r){let s=!o||o==ru;r.forEach(l=>{l.queued||!s&&l.triggerName!=n||a.push(l)})}}return(i||n)&&(a=a.filter(r=>!(i&&i!=r.namespaceId||n&&n!=r.triggerName))),a}_beforeAnimationBuild(e,A,i){let n=A.triggerName,o=A.element,a=A.isRemovalTransition?void 0:e,r=A.isRemovalTransition?void 0:n;for(let s of A.timelines){let l=s.element,g=l!==o,C=js(i,l,[]);this._getPreviousPlayers(l,g,a,r,A.toState).forEach(d=>{let h=d.getRealPlayer();h.beforeDestroy&&h.beforeDestroy(),d.destroy(),C.push(d)})}s2(o,A.fromStyles)}_buildAnimation(e,A,i,n,o,a){let r=A.triggerName,s=A.element,l=[],g=new Set,C=new Set,I=A.timelines.map(h=>{let E=h.element;g.add(E);let f=E[Gg];if(f&&f.removedBeforeQueried)return new z0(h.duration,h.delay);let m=E!==s,v=IaA((i.get(E)||raA).map(F=>F.getRealPlayer())).filter(F=>{let z=F;return z.element?z.element===E:!1}),k=o.get(E),S=a.get(E),b=zb(this._normalizer,h.keyframes,k,S),x=this._buildPlayer(h,b,v);if(h.subTimeline&&n&&C.add(E),m){let F=new gu(e,r,E);F.setRealPlayer(x),l.push(F)}return x});l.forEach(h=>{js(this.playersByQueriedElement,h.element,[]).push(h),h.onDone(()=>laA(this.playersByQueriedElement,h.element,h))}),g.forEach(h=>Pl(h,Zb));let d=P0(I);return d.onDestroy(()=>{g.forEach(h=>EB(h,Zb)),Lg(s,A.toStyles)}),C.forEach(h=>{js(n,h,[]).push(d)}),d}_buildPlayer(e,A,i){return A.length>0?this.driver.animate(e.element,A,e.duration,e.delay,e.easing,i):new z0(e.duration,e.delay)}},gu=class{namespaceId;triggerName;element;_player=new z0;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(e,A,i){this.namespaceId=e,this.triggerName=A,this.element=i}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((A,i)=>{A.forEach(n=>Rp(e,i,void 0,n))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){let A=this._player;A.triggerCallback&&e.onStart(()=>A.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,A){js(this._queuedCallbacks,e,[]).push(A)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){let A=this._player;A.triggerCallback&&A.triggerCallback(e)}};function laA(t,e,A){let i=t.get(e);if(i){if(i.length){let n=i.indexOf(A);i.splice(n,1)}i.length==0&&t.delete(e)}return i}function gaA(t){return t??null}function Op(t){return t&&t.nodeType===1}function caA(t){return t=="start"||t=="done"}function SK(t,e){let A=t.style.display;return t.style.display=e??"none",A}function kK(t,e,A,i,n){let o=[];A.forEach(s=>o.push(SK(s)));let a=[];i.forEach((s,l)=>{let g=new Map;s.forEach(C=>{let I=e.computeStyle(l,C,n);g.set(C,I),(!I||I.length==0)&&(l[Gg]=saA,a.push(l))}),t.set(l,g)});let r=0;return A.forEach(s=>SK(s,o[r++])),a}function xK(t,e){let A=new Map;if(t.forEach(r=>A.set(r,[])),e.length==0)return A;let i=1,n=new Set(e),o=new Map;function a(r){if(!r)return i;let s=o.get(r);if(s)return s;let l=r.parentNode;return A.has(l)?s=l:n.has(l)?s=i:s=a(l),o.set(r,s),s}return e.forEach(r=>{let s=a(r);s!==i&&A.get(s).push(r)}),A}function Pl(t,e){t.classList?.add(e)}function EB(t,e){t.classList?.remove(e)}function CaA(t,e,A){P0(A).onDone(()=>t.processLeaveNode(e))}function IaA(t){let e=[];return KK(t,e),e}function KK(t,e){for(let A=0;An.add(o)):e.set(t,i),A.delete(t),!0}var hB=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(e,A)=>{};constructor(e,A,i){this._driver=A,this._normalizer=i,this._transitionEngine=new I7(e.body,A,i),this._timelineEngine=new c7(e.body,A,i),this._transitionEngine.onRemovalComplete=(n,o)=>this.onRemovalComplete(n,o)}registerTrigger(e,A,i,n,o){let a=e+"-"+n,r=this._triggerCache[a];if(!r){let s=[],l=[],g=NK(this._driver,o,s,l);if(s.length)throw rK(n,s);r=AaA(n,g,this._normalizer),this._triggerCache[a]=r}this._transitionEngine.registerTrigger(A,n,r)}register(e,A){this._transitionEngine.register(e,A)}destroy(e,A){this._transitionEngine.destroy(e,A)}onInsert(e,A,i,n){this._transitionEngine.insertNode(e,A,i,n)}onRemove(e,A,i){this._transitionEngine.removeNode(e,A,i)}disableAnimations(e,A){this._transitionEngine.markElementAsDisabled(e,A)}process(e,A,i,n){if(i.charAt(0)=="@"){let[o,a]=Pb(i),r=n;this._timelineEngine.command(o,A,a,r)}else this._transitionEngine.trigger(e,A,i,n)}listen(e,A,i,n,o){if(i.charAt(0)=="@"){let[a,r]=Pb(i);return this._timelineEngine.listen(a,A,r,o)}return this._transitionEngine.listen(e,A,i,n,o)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(e){this._transitionEngine.afterFlushAnimationsDone(e)}};function BaA(t,e){let A=null,i=null;return Array.isArray(e)&&e.length?(A=i7(e[0]),e.length>1&&(i=i7(e[e.length-1]))):e instanceof Map&&(A=i7(e)),A||i?new EaA(t,A,i):null}var EaA=(()=>{class t{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(A,i,n){this._element=A,this._startStyles=i,this._endStyles=n;let o=t.initialStylesByElement.get(A);o||t.initialStylesByElement.set(A,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Lg(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Lg(this._element,this._initialStyles),this._endStyles&&(Lg(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(s2(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(s2(this._element,this._endStyles),this._endStyles=null),Lg(this._element,this._initialStyles),this._state=3)}}return t})();function i7(t){let e=null;return t.forEach((A,i)=>{haA(i)&&(e=e||new Map,e.set(i,A))}),e}function haA(t){return t==="display"||t==="position"}var Vp=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(e,A,i,n){this.element=e,this.keyframes=A,this.options=i,this._specialStyles=n,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let e=this.keyframes,A=this._triggerWebAnimation(this.element,e,this.options);if(!A)return this._onFinish(),null;this.domPlayer=A,this._finalKeyframe=e.length?e[e.length-1]:new Map;let i=()=>this._onFinish();return A.addEventListener("finish",i),this.onDestroy(()=>{A.removeEventListener("finish",i)}),A}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(e){let A=[];return e.forEach(i=>{A.push(Object.fromEntries(i))}),A}_triggerWebAnimation(e,A,i){let n=this._convertKeyframesToObject(A);try{return e.animate(n,i)}catch(o){return null}}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){let e=this._buildPlayer();e&&(this.hasStarted()||(this._onStartFns.forEach(A=>A()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),e.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=e*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,n)=>{n!=="offset"&&e.set(n,this._finished?i:Up(this.element,n))}),this.currentSnapshot=e}triggerCallback(e){let A=e==="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},Wp=class{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}containsElement(e,A){return jb(e,A)}getParentElement(e){return Fp(e)}query(e,A,i){return qb(e,A,i)}computeStyle(e,A,i){return Up(e,A)}animate(e,A,i,n,o,a=[]){let r=n==0?"both":"forwards",s={duration:i,delay:n,fill:r};o&&(s.easing=o);let l=new Map,g=a.filter(d=>d instanceof Vp);pK(i,n)&&g.forEach(d=>{d.currentSnapshot.forEach((h,E)=>l.set(E,h))});let C=uK(A).map(d=>new Map(d));C=mK(e,C,l);let I=BaA(e,C);return new Vp(e,C,s,I)}};var Yp="@",UK="@.disabled",Zp=class{namespaceId;delegate;engine;_onDestroy;\u0275type=0;constructor(e,A,i,n){this.namespaceId=e,this.delegate=A,this.engine=i,this._onDestroy=n}get data(){return this.delegate.data}destroyNode(e){this.delegate.destroyNode?.(e)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(e,A){return this.delegate.createElement(e,A)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,A){this.delegate.appendChild(e,A),this.engine.onInsert(this.namespaceId,A,e,!1)}insertBefore(e,A,i,n=!0){this.delegate.insertBefore(e,A,i),this.engine.onInsert(this.namespaceId,A,e,n)}removeChild(e,A,i,n){if(n){this.delegate.removeChild(e,A,i,n);return}this.parentNode(A)&&this.engine.onRemove(this.namespaceId,A,this.delegate)}selectRootElement(e,A){return this.delegate.selectRootElement(e,A)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,A,i,n){this.delegate.setAttribute(e,A,i,n)}removeAttribute(e,A,i){this.delegate.removeAttribute(e,A,i)}addClass(e,A){this.delegate.addClass(e,A)}removeClass(e,A){this.delegate.removeClass(e,A)}setStyle(e,A,i,n){this.delegate.setStyle(e,A,i,n)}removeStyle(e,A,i){this.delegate.removeStyle(e,A,i)}setProperty(e,A,i){A.charAt(0)==Yp&&A==UK?this.disableAnimations(e,!!i):this.delegate.setProperty(e,A,i)}setValue(e,A){this.delegate.setValue(e,A)}listen(e,A,i,n){return this.delegate.listen(e,A,i,n)}disableAnimations(e,A){this.engine.disableAnimations(e,A)}},d7=class extends Zp{factory;constructor(e,A,i,n,o){super(A,i,n,o),this.factory=e,this.namespaceId=A}setProperty(e,A,i){A.charAt(0)==Yp?A.charAt(1)=="."&&A==UK?(i=i===void 0?!0:!!i,this.disableAnimations(e,i)):this.engine.process(this.namespaceId,e,A.slice(1),i):this.delegate.setProperty(e,A,i)}listen(e,A,i,n){if(A.charAt(0)==Yp){let o=QaA(e),a=A.slice(1),r="";return a.charAt(0)!=Yp&&([a,r]=uaA(a)),this.engine.listen(this.namespaceId,o,a,r,s=>{let l=s._data||-1;this.factory.scheduleListenerCallback(l,i,s)})}return this.delegate.listen(e,A,i,n)}};function QaA(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}function uaA(t){let e=t.indexOf("."),A=t.substring(0,e),i=t.slice(e+1);return[A,i]}var Xp=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(e,A,i){this.delegate=e,this.engine=A,this._zone=i,A.onRemovalComplete=(n,o)=>{o?.removeChild(null,n)}}createRenderer(e,A){let n=this.delegate.createRenderer(e,A);if(!e||!A?.data?.animation){let l=this._rendererCache,g=l.get(n);if(!g){let C=()=>l.delete(n);g=new Zp("",n,this.engine,C),l.set(n,g)}return g}let o=A.id,a=A.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);let r=l=>{Array.isArray(l)?l.forEach(r):this.engine.registerTrigger(o,a,e,l.name,l)};return A.data.animation.forEach(r),new d7(this,a,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(e,A,i){if(e>=0&&eA(i));return}let n=this._animationCallbacksBuffer;n.length==0&&queueMicrotask(()=>{this._zone.run(()=>{n.forEach(o=>{let[a,r]=o;a(r)}),this._animationCallbacksBuffer=[]})}),n.push([A,i])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(e){this.engine.flush(),this.delegate.componentReplaced?.(e)}};var paA=(()=>{class t extends hB{constructor(A,i,n){super(A,i,n)}ngOnDestroy(){this.flush()}static \u0275fac=function(i){return new(i||t)(Lo(ti),Lo(C1),Lo(I1))};static \u0275prov=qA({token:t,factory:t.\u0275fac})}return t})();function maA(){return new Hp}function waA(){return new Xp(w(aL),w(hB),w(qe))}var TK=[{provide:I1,useFactory:maA},{provide:hB,useClass:paA},{provide:Kr,useFactory:waA}],oYA=[{provide:C1,useClass:B7},{provide:qI,useValue:"NoopAnimations"},...TK],DaA=[{provide:C1,useFactory:()=>new Wp},{provide:qI,useFactory:()=>"BrowserAnimations"},...TK];function JK(){return q3("NgEagerAnimations"),[...DaA]}function wr(t){t||(t=w(sr));let e=new vi(A=>{if(t.destroyed){A.next();return}return t.onDestroy(A.next.bind(A))});return A=>A.pipe(Qt(e))}var h7=class{source;destroyed=!1;destroyRef=w(sr);constructor(e){this.source=e,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}subscribe(e){if(this.destroyed)throw new Mt(953,!1);let A=this.source.pipe(wr(this.destroyRef)).subscribe({next:i=>e(i)});return{unsubscribe:()=>A.unsubscribe()}}};function kn(t,e){return new h7(t)}function po(t,e){let A=e?.injector??w(Dt),i=new Sg(1),n=Ao(()=>{let o;try{o=t()}catch(a){ca(()=>i.error(a));return}ca(()=>i.next(o))},{injector:A,manualCleanup:!0});return A.get(sr).onDestroy(()=>{n.destroy(),i.complete()}),i.asObservable()}function Ar(t,e){let i=!e?.manualCleanup?e?.injector?.get(sr)??w(sr):null,n=yaA(e?.equal),o;e?.requireSync?o=bA({kind:0},{equal:n}):o=bA({kind:1,value:e?.initialValue},{equal:n});let a,r=t.subscribe({next:s=>o.set({kind:1,value:s}),error:s=>{o.set({kind:2,error:s}),a?.()},complete:()=>{a?.()}});if(e?.requireSync&&o().kind===0)throw new Mt(601,!1);return a=i?.onDestroy(r.unsubscribe.bind(r)),pe(()=>{let s=o();switch(s.kind){case 1:return s.value;case 2:throw s.error;case 0:throw new Mt(601,!1)}},{equal:e?.equal})}function yaA(t=Object.is){return(e,A)=>e.kind===1&&A.kind===1&&t(e.value,A.value)}function $p(t){return VF(Ye(gA({},t),{loader:void 0,stream:e=>{let A,i=()=>A?.unsubscribe();e.abortSignal.addEventListener("abort",i);let n=bA({value:void 0}),o,a=new Promise(l=>o=l);function r(l){n.set(l),o?.(n),o=void 0}let s=t.stream;if(s===void 0)throw new Mt(990,!1);return A=s(e).subscribe({next:l=>r({value:l}),error:l=>{r({error:WF(l)}),e.abortSignal.removeEventListener("abort",i)},complete:()=>{o&&r({error:new Mt(991,!1)}),e.abortSignal.removeEventListener("abort",i)}}),a}}))}function p7(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var E1=p7();function qK(t){E1=t}var d1={exec:()=>null};function Un(t,e=""){let A=typeof t=="string"?t:t.source,i={replace:(n,o)=>{let a=typeof o=="string"?o:o.source;return a=a.replace(bs.caret,"$1"),A=A.replace(n,a),i},getRegex:()=>new RegExp(A,e)};return i}var vaA=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}>`)},baA=/^(?:[ \t]*(?:\n|$))+/,MaA=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,SaA=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,du=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,kaA=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,m7=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,VK=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,WK=Un(VK).replace(/bull/g,m7).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),xaA=Un(VK).replace(/bull/g,m7).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),w7=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,_aA=/^[^\n]+/,D7=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,RaA=Un(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",D7).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),NaA=Un(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,m7).getRegex(),im="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",y7=/|$))/,FaA=Un("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",y7).replace("tag",im).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ZK=Un(w7).replace("hr",du).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",im).getRegex(),LaA=Un(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ZK).getRegex(),v7={blockquote:LaA,code:MaA,def:RaA,fences:SaA,heading:kaA,hr:du,html:FaA,lheading:WK,list:NaA,newline:baA,paragraph:ZK,table:d1,text:_aA},OK=Un("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",du).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",im).getRegex(),GaA=Ye(gA({},v7),{lheading:xaA,table:OK,paragraph:Un(w7).replace("hr",du).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",OK).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",im).getRegex()}),KaA=Ye(gA({},v7),{html:Un(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",y7).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Un(w7).replace("hr",du).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",WK).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),UaA=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,TaA=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,XK=/^( {2,}|\\)\n(?!\s*$)/,JaA=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",vaA?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),tU=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,qaA=Un(tU,"u").replace(/punct/g,nm).getRegex(),VaA=Un(tU,"u").replace(/punct/g,AU).getRegex(),iU="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",WaA=Un(iU,"gu").replace(/notPunctSpace/g,$K).replace(/punctSpace/g,b7).replace(/punct/g,nm).getRegex(),ZaA=Un(iU,"gu").replace(/notPunctSpace/g,HaA).replace(/punctSpace/g,YaA).replace(/punct/g,AU).getRegex(),XaA=Un("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,$K).replace(/punctSpace/g,b7).replace(/punct/g,nm).getRegex(),$aA=Un(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,eU).getRegex(),ArA="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",erA=Un(ArA,"gu").replace(/notPunctSpace/g,PaA).replace(/punctSpace/g,zaA).replace(/punct/g,eU).getRegex(),trA=Un(/\\(punct)/,"gu").replace(/punct/g,nm).getRegex(),irA=Un(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),nrA=Un(y7).replace("(?:-->|$)","-->").getRegex(),orA=Un("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",nrA).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),em=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,arA=Un(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",em).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),nU=Un(/^!?\[(label)\]\[(ref)\]/).replace("label",em).replace("ref",D7).getRegex(),oU=Un(/^!?\[(ref)\](?:\[\])?/).replace("ref",D7).getRegex(),rrA=Un("reflink|nolink(?!\\()","g").replace("reflink",nU).replace("nolink",oU).getRegex(),YK=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,M7={_backpedal:d1,anyPunctuation:trA,autolink:irA,blockSkip:jaA,br:XK,code:TaA,del:d1,delLDelim:d1,delRDelim:d1,emStrongLDelim:qaA,emStrongRDelimAst:WaA,emStrongRDelimUnd:XaA,escape:UaA,link:arA,nolink:oU,punctuation:OaA,reflink:nU,reflinkSearch:rrA,tag:orA,text:JaA,url:d1},srA=Ye(gA({},M7),{link:Un(/^!?\[(label)\]\((.*?)\)/).replace("label",em).getRegex(),reflink:Un(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",em).getRegex()}),Q7=Ye(gA({},M7),{emStrongRDelimAst:ZaA,emStrongLDelim:VaA,delLDelim:$aA,delRDelim:erA,url:Un(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",YK).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Un(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},HK=t=>grA[t];function zc(t,e){if(e){if(bs.escapeTest.test(t))return t.replace(bs.escapeReplace,HK)}else if(bs.escapeTestNoEncode.test(t))return t.replace(bs.escapeReplaceNoEncode,HK);return t}function zK(t){try{t=encodeURI(t).replace(bs.percentDecode,"%")}catch(e){return null}return t}function PK(t,e){let A=t.replace(bs.findPipe,(o,a,r)=>{let s=!1,l=a;for(;--l>=0&&r[l]==="\\";)s=!s;return s?"|":" |"}),i=A.split(bs.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function CrA(t,e=0){let A=e,i="";for(let n of t)if(n===" "){let o=4-A%4;i+=" ".repeat(o),A+=o}else i+=n,A++;return i}function jK(t,e,A,i,n){let o=e.href,a=e.title||null,r=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let s={type:t[0].charAt(0)==="!"?"image":"link",raw:A,href:o,title:a,text:r,tokens:i.inlineTokens(r)};return i.state.inLink=!1,s}function IrA(t,e,A){let i=t.match(A.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` +`).map(o=>{let a=o.match(A.other.beginningSpace);if(a===null)return o;let[r]=a;return r.length>=n.length?o.slice(n.length):o}).join(` +`)}var tm=class{options;rules;lexer;constructor(t){this.options=t||E1}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let A=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?A:Cu(A,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let A=e[0],i=IrA(A,e[3]||"",this.rules);return{type:"code",raw:A,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let A=e[2].trim();if(this.rules.other.endingHash.test(A)){let i=Cu(A,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(A=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:A,tokens:this.lexer.inline(A)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Cu(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let A=Cu(e[0],` +`).split(` +`),i="",n="",o=[];for(;A.length>0;){let a=!1,r=[],s;for(s=0;s1,n={type:"list",raw:"",ordered:i,start:i?+A.slice(0,-1):"",loose:!1,items:[]};A=i?`\\d{1,9}\\${A.slice(-1)}`:`\\${A}`,this.options.pedantic&&(A=i?A:"[*+-]");let o=this.rules.other.listItemRegex(A),a=!1;for(;t;){let s=!1,l="",g="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;l=e[0],t=t.substring(l.length);let C=CrA(e[2].split(` +`,1)[0],e[1].length),I=t.split(` +`,1)[0],d=!C.trim(),h=0;if(this.options.pedantic?(h=2,g=C.trimStart()):d?h=e[1].length+1:(h=C.search(this.rules.other.nonSpaceChar),h=h>4?1:h,g=C.slice(h),h+=e[1].length),d&&this.rules.other.blankLine.test(I)&&(l+=I+` +`,t=t.substring(I.length+1),s=!0),!s){let E=this.rules.other.nextBulletRegex(h),f=this.rules.other.hrRegex(h),m=this.rules.other.fencesBeginRegex(h),v=this.rules.other.headingBeginRegex(h),k=this.rules.other.htmlBeginRegex(h),S=this.rules.other.blockquoteBeginRegex(h);for(;t;){let b=t.split(` +`,1)[0],x;if(I=b,this.options.pedantic?(I=I.replace(this.rules.other.listReplaceNesting," "),x=I):x=I.replace(this.rules.other.tabCharGlobal," "),m.test(I)||v.test(I)||k.test(I)||S.test(I)||E.test(I)||f.test(I))break;if(x.search(this.rules.other.nonSpaceChar)>=h||!I.trim())g+=` +`+x.slice(h);else{if(d||C.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||m.test(C)||v.test(C)||f.test(C))break;g+=` +`+I}d=!I.trim(),l+=b+` +`,t=t.substring(b.length+1),C=x.slice(h)}}n.loose||(a?n.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(a=!0)),n.items.push({type:"list_item",raw:l,task:!!this.options.gfm&&this.rules.other.listIsTask.test(g),loose:!1,text:g,tokens:[]}),n.raw+=l}let r=n.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let s of n.items){if(this.lexer.state.top=!1,s.tokens=this.lexer.blockTokens(s.text,[]),s.task){if(s.text=s.text.replace(this.rules.other.listReplaceTask,""),s.tokens[0]?.type==="text"||s.tokens[0]?.type==="paragraph"){s.tokens[0].raw=s.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),s.tokens[0].text=s.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let g=this.lexer.inlineQueue.length-1;g>=0;g--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[g].src)){this.lexer.inlineQueue[g].src=this.lexer.inlineQueue[g].src.replace(this.rules.other.listReplaceTask,"");break}}let l=this.rules.other.listTaskCheckbox.exec(s.raw);if(l){let g={type:"checkbox",raw:l[0]+" ",checked:l[0]!=="[ ]"};s.checked=g.checked,n.loose?s.tokens[0]&&["paragraph","text"].includes(s.tokens[0].type)&&"tokens"in s.tokens[0]&&s.tokens[0].tokens?(s.tokens[0].raw=g.raw+s.tokens[0].raw,s.tokens[0].text=g.raw+s.tokens[0].text,s.tokens[0].tokens.unshift(g)):s.tokens.unshift({type:"paragraph",raw:g.raw,text:g.raw,tokens:[g]}):s.tokens.unshift(g)}}if(!n.loose){let l=s.tokens.filter(C=>C.type==="space"),g=l.length>0&&l.some(C=>this.rules.other.anyLine.test(C.raw));n.loose=g}}if(n.loose)for(let s of n.items){s.loose=!0;for(let l of s.tokens)l.type==="text"&&(l.type="paragraph")}return n}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let A=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",n=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:A,raw:e[0],href:i,title:n}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let A=PK(e[1]),i=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),n=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` +`):[],o={type:"table",raw:e[0],header:[],align:[],rows:[]};if(A.length===i.length){for(let a of i)this.rules.other.tableAlignRight.test(a)?o.align.push("right"):this.rules.other.tableAlignCenter.test(a)?o.align.push("center"):this.rules.other.tableAlignLeft.test(a)?o.align.push("left"):o.align.push(null);for(let a=0;a({text:r,tokens:this.lexer.inline(r),header:!1,align:o.align[s]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let A=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:A,tokens:this.lexer.inline(A)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let A=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(A)){if(!this.rules.other.endAngleBracket.test(A))return;let o=Cu(A.slice(0,-1),"\\");if((A.length-o.length)%2===0)return}else{let o=crA(e[2],"()");if(o===-2)return;if(o>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(i);o&&(i=o[1],n=o[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(A)?i=i.slice(1):i=i.slice(1,-1)),jK(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let A;if((A=this.rules.inline.reflink.exec(t))||(A=this.rules.inline.nolink.exec(t))){let i=(A[2]||A[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let o=A[0].charAt(0);return{type:"text",raw:o,text:o}}return jK(A,n,A[0],this.lexer,this.rules)}}emStrong(t,e,A=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&A.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!A||this.rules.inline.punctuation.exec(A))){let n=[...i[0]].length-1,o,a,r=n,s=0,l=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,e=e.slice(-1*t.length+n);(i=l.exec(e))!=null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o)continue;if(a=[...o].length,i[3]||i[4]){r+=a;continue}else if((i[5]||i[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(r-=a,r>0)continue;a=Math.min(a,a+r+s);let g=[...i[0]][0].length,C=t.slice(0,n+i.index+g+a);if(Math.min(n,a)%2){let d=C.slice(1,-1);return{type:"em",raw:C,text:d,tokens:this.lexer.inlineTokens(d)}}let I=C.slice(2,-2);return{type:"strong",raw:C,text:I,tokens:this.lexer.inlineTokens(I)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let A=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(A),n=this.rules.other.startingSpaceChar.test(A)&&this.rules.other.endingSpaceChar.test(A);return i&&n&&(A=A.substring(1,A.length-1)),{type:"codespan",raw:e[0],text:A}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,A=""){let i=this.rules.inline.delLDelim.exec(t);if(i&&(!i[1]||!A||this.rules.inline.punctuation.exec(A))){let n=[...i[0]].length-1,o,a,r=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,e=e.slice(-1*t.length+n);(i=s.exec(e))!=null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o||(a=[...o].length,a!==n))continue;if(i[3]||i[4]){r+=a;continue}if(r-=a,r>0)continue;a=Math.min(a,a+r);let l=[...i[0]][0].length,g=t.slice(0,n+i.index+l+a),C=g.slice(n,-n);return{type:"del",raw:g,text:C,tokens:this.lexer.inlineTokens(C)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let A,i;return e[2]==="@"?(A=e[1],i="mailto:"+A):(A=e[1],i=A),{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let A,i;if(e[2]==="@")A=e[0],i="mailto:"+A;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);A=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let A=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:A}}}},Kg=class u7{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||E1,this.options.tokenizer=this.options.tokenizer||new tm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let A={other:bs,block:Am.normal,inline:cu.normal};this.options.pedantic?(A.block=Am.pedantic,A.inline=cu.pedantic):this.options.gfm&&(A.block=Am.gfm,this.options.breaks?A.inline=cu.breaks:A.inline=cu.gfm),this.tokenizer.rules=A}static get rules(){return{block:Am,inline:cu}}static lex(e,A){return new u7(A).lex(e)}static lexInline(e,A){return new u7(A).inlineTokens(e)}lex(e){e=e.replace(bs.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let A=0;A(n=a.call({lexer:this},e,A))?(e=e.substring(n.raw.length),A.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let a=A.at(-1);n.raw.length===1&&a!==void 0?a.raw+=` +`:A.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},A.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),A.push(n);continue}let o=e;if(this.options.extensions?.startBlock){let a=1/0,r=e.slice(1),s;this.options.extensions.startBlock.forEach(l=>{s=l.call({lexer:this},r),typeof s=="number"&&s>=0&&(a=Math.min(a,s))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){let a=A.at(-1);i&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n),i=o.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(e){let a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}else throw new Error(a)}}return this.state.top=!0,A}inline(e,A=[]){return this.inlineQueue.push({src:e,tokens:A}),A}inlineTokens(e,A=[]){let i=e,n=null;if(this.tokens.links){let s=Object.keys(this.tokens.links);if(s.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)s.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)o=n[2]?n[2].length:0,i=i.slice(0,n.index+o)+"["+"a".repeat(n[0].length-o-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,r="";for(;e;){a||(r=""),a=!1;let s;if(this.options.extensions?.inline?.some(g=>(s=g.call({lexer:this},e,A))?(e=e.substring(s.raw.length),A.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let g=A.at(-1);s.type==="text"&&g?.type==="text"?(g.raw+=s.raw,g.text+=s.text):A.push(s);continue}if(s=this.tokenizer.emStrong(e,i,r)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.del(e,i,r)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),A.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),A.push(s);continue}let l=e;if(this.options.extensions?.startInline){let g=1/0,C=e.slice(1),I;this.options.extensions.startInline.forEach(d=>{I=d.call({lexer:this},C),typeof I=="number"&&I>=0&&(g=Math.min(g,I))}),g<1/0&&g>=0&&(l=e.substring(0,g+1))}if(s=this.tokenizer.inlineText(l)){e=e.substring(s.raw.length),s.raw.slice(-1)!=="_"&&(r=s.raw.slice(-1)),a=!0;let g=A.at(-1);g?.type==="text"?(g.raw+=s.raw,g.text+=s.text):A.push(s);continue}if(e){let g="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(g);break}else throw new Error(g)}}return A}},l2=class{options;parser;constructor(t){this.options=t||E1}space(t){return""}code({text:t,lang:e,escaped:A}){let i=(e||"").match(bs.notSpaceStart)?.[0],n=t.replace(bs.endingNewline,"")+` +`;return i?'
'+(A?n:zc(n,!0))+`
+`:"
"+(A?n:zc(n,!0))+`
+`}blockquote({tokens:t}){return`
+${this.parser.parse(t)}
+`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
+`}list(t){let e=t.ordered,A=t.start,i="";for(let a=0;a +`+i+" +`}listitem(t){return`
  • ${this.parser.parse(t.tokens)}
  • +`}checkbox({checked:t}){return" '}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",A="";for(let n=0;n${i}`),` + +`+e+` +`+i+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),A=t.header?"th":"td";return(t.align?`<${A} align="${t.align}">`:`<${A}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${zc(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:A}){let i=this.parser.parseInline(A),n=zK(t);if(n===null)return i;t=n;let o='
    ",o}image({href:t,title:e,text:A,tokens:i}){i&&(A=this.parser.parseInline(i,this.parser.textRenderer));let n=zK(t);if(n===null)return zc(A);t=n;let o=`${zc(A)}{let a=n[o].flat(1/0);A=A.concat(this.walkTokens(a,e))}):n.tokens&&(A=A.concat(this.walkTokens(n.tokens,e)))}}return A}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(A=>{let i=gA({},A);if(i.async=this.defaults.async||i.async||!1,A.extensions&&(A.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let o=e.renderers[n.name];o?e.renderers[n.name]=function(...a){let r=n.renderer.apply(this,a);return r===!1&&(r=o.apply(this,a)),r}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[n.level];o?o.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),A.renderer){let n=this.defaults.renderer||new l2(this.defaults);for(let o in A.renderer){if(!(o in n))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let a=o,r=A.renderer[a],s=n[a];n[a]=(...l)=>{let g=r.apply(n,l);return g===!1&&(g=s.apply(n,l)),g||""}}i.renderer=n}if(A.tokenizer){let n=this.defaults.tokenizer||new tm(this.defaults);for(let o in A.tokenizer){if(!(o in n))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let a=o,r=A.tokenizer[a],s=n[a];n[a]=(...l)=>{let g=r.apply(n,l);return g===!1&&(g=s.apply(n,l)),g}}i.tokenizer=n}if(A.hooks){let n=this.defaults.hooks||new Iu;for(let o in A.hooks){if(!(o in n))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let a=o,r=A.hooks[a],s=n[a];Iu.passThroughHooks.has(o)?n[a]=l=>{if(this.defaults.async&&Iu.passThroughHooksRespectAsync.has(o))return lt(this,null,function*(){let C=yield r.call(n,l);return s.call(n,C)});let g=r.call(n,l);return s.call(n,g)}:n[a]=(...l)=>{if(this.defaults.async)return lt(this,null,function*(){let C=yield r.apply(n,l);return C===!1&&(C=yield s.apply(n,l)),C});let g=r.apply(n,l);return g===!1&&(g=s.apply(n,l)),g}}i.hooks=n}if(A.walkTokens){let n=this.defaults.walkTokens,o=A.walkTokens;i.walkTokens=function(a){let r=[];return r.push(o.call(this,a)),n&&(r=r.concat(n.call(this,a))),r}}this.defaults=gA(gA({},this.defaults),i)}),this}setOptions(t){return this.defaults=gA(gA({},this.defaults),t),this}lexer(t,e){return Kg.lex(t,e??this.defaults)}parser(t,e){return Ug.parse(t,e??this.defaults)}parseMarkdown(t){return(e,A)=>{let i=gA({},A),n=gA(gA({},this.defaults),i),o=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return lt(this,null,function*(){let a=n.hooks?yield n.hooks.preprocess(e):e,r=yield(n.hooks?yield n.hooks.provideLexer():t?Kg.lex:Kg.lexInline)(a,n),s=n.hooks?yield n.hooks.processAllTokens(r):r;n.walkTokens&&(yield Promise.all(this.walkTokens(s,n.walkTokens)));let l=yield(n.hooks?yield n.hooks.provideParser():t?Ug.parse:Ug.parseInline)(s,n);return n.hooks?yield n.hooks.postprocess(l):l}).catch(o);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer():t?Kg.lex:Kg.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let r=(n.hooks?n.hooks.provideParser():t?Ug.parse:Ug.parseInline)(a,n);return n.hooks&&(r=n.hooks.postprocess(r)),r}catch(a){return o(a)}}}onError(t,e){return A=>{if(A.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let i="

    An error occurred:

    "+zc(A.message+"",!0)+"
    ";return e?Promise.resolve(i):i}if(e)return Promise.reject(A);throw A}}},B1=new drA;function Pn(t,e){return B1.parse(t,e)}Pn.options=Pn.setOptions=function(t){return B1.setOptions(t),Pn.defaults=B1.defaults,qK(Pn.defaults),Pn};Pn.getDefaults=p7;Pn.defaults=E1;Pn.use=function(...t){return B1.use(...t),Pn.defaults=B1.defaults,qK(Pn.defaults),Pn};Pn.walkTokens=function(t,e){return B1.walkTokens(t,e)};Pn.parseInline=B1.parseInline;Pn.Parser=Ug;Pn.parser=Ug.parse;Pn.Renderer=l2;Pn.TextRenderer=S7;Pn.Lexer=Kg;Pn.lexer=Kg.lex;Pn.Tokenizer=tm;Pn.Hooks=Iu;Pn.parse=Pn;var hYA=Pn.options,QYA=Pn.setOptions,uYA=Pn.use,fYA=Pn.walkTokens,pYA=Pn.parseInline;var mYA=Ug.parse,wYA=Kg.lex;var BrA=["*"],ErA="Copy",hrA="Copied",QrA=(()=>{class t{constructor(){this._buttonClick$=new ie,this.copied=Ar(this._buttonClick$.pipe(Ei(()=>Ki(oe(!0),Y3(3e3).pipe(_Q(!1)))),kg(),Gs(1))),this.copiedText=pe(()=>this.copied()?hrA:ErA)}onCopyToClipboardClick(){this._buttonClick$.next()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["markdown-clipboard"]],decls:2,vars:3,consts:[[1,"markdown-clipboard-button",3,"click"]],template:function(i,n){i&1&&(wn(0,"button",0),qd("click",function(){return n.onCopyToClipboardClick()}),y(1),Gn()),i&2&&(RA("copied",n.copied()),u(),lA(n.copiedText()))},encapsulation:2,changeDetection:0})}}return t})(),urA=new kA("CLIPBOARD_OPTIONS");var frA=new kA("MARKED_EXTENSIONS"),prA=new kA("MARKED_OPTIONS"),mrA=new kA("MERMAID_OPTIONS"),wrA=new kA("SANITIZE");function DrA(t){return typeof t=="function"}var yrA="[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information",vrA="[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information",brA="[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information",MrA="[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information",SrA="[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function",krA="[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information";var aU=(()=>{class t{get options(){return this._options}set options(A){this._options=gA(gA({},this.DEFAULT_MARKED_OPTIONS),A)}get renderer(){return this.options.renderer}set renderer(A){this.options.renderer=A}constructor(){this.clipboardOptions=w(urA,{optional:!0}),this.extensions=w(frA,{optional:!0}),this.http=w(fr,{optional:!0}),this.mermaidOptions=w(mrA,{optional:!0}),this.platform=w(j3),this.sanitize=w(wrA,{optional:!0}),this.sanitizer=w(e2),this.DEFAULT_MARKED_OPTIONS={renderer:new l2},this.DEFAULT_KATEX_OPTIONS={delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}]},this.DEFAULT_MERMAID_OPTIONS={startOnLoad:!1},this.DEFAULT_CLIPBOARD_OPTIONS={buttonComponent:void 0},this.DEFAULT_PARSE_OPTIONS={decodeHtml:!1,inline:!1,emoji:!1,mermaid:!1,markedOptions:void 0,disableSanitizer:!1},this.DEFAULT_RENDER_OPTIONS={clipboard:!1,clipboardOptions:void 0,katex:!1,katexOptions:void 0,mermaid:!1,mermaidOptions:void 0},this.DEFAULT_SECURITY_CONTEXT=_g.HTML,this._options=null,this._reload$=new ie,this.reload$=this._reload$.asObservable(),this.options=w(prA,{optional:!0})}parse(A,i=this.DEFAULT_PARSE_OPTIONS){let{decodeHtml:n,inline:o,emoji:a,mermaid:r,disableSanitizer:s}=i,l=gA(gA({},this.options),i.markedOptions),g=l.renderer||this.renderer||new l2;this.extensions&&(this.renderer=this.extendsRendererForExtensions(g)),r&&(this.renderer=this.extendsRendererForMermaid(g));let C=this.trimIndentation(A),I=n?this.decodeHtml(C):C,d=a?this.parseEmoji(I):I,h=this.parseMarked(d,l,o);return s?h:this.sanitizeHtml(h)}render(A,i=this.DEFAULT_RENDER_OPTIONS,n){let{clipboard:o,clipboardOptions:a,katex:r,katexOptions:s,mermaid:l,mermaidOptions:g}=i;r&&this.renderKatex(A,gA(gA({},this.DEFAULT_KATEX_OPTIONS),s)),l&&this.renderMermaid(A,gA(gA(gA({},this.DEFAULT_MERMAID_OPTIONS),this.mermaidOptions),g)),o&&this.renderClipboard(A,n,gA(gA(gA({},this.DEFAULT_CLIPBOARD_OPTIONS),this.clipboardOptions),a)),this.highlight(A)}reload(){this._reload$.next()}getSource(A){if(!this.http)throw new Error(krA);return this.http.get(A,{responseType:"text"}).pipe(we(i=>this.handleExtension(A,i)))}highlight(A){if(!O0(this.platform)||typeof Prism>"u"||typeof Prism.highlightAllUnder>"u")return;A||(A=document);let i=A.querySelectorAll('pre code:not([class*="language-"])');Array.prototype.forEach.call(i,n=>n.classList.add("language-none")),Prism.highlightAllUnder(A)}decodeHtml(A){if(!O0(this.platform))return A;let i=document.createElement("textarea");return i.innerHTML=A,i.value}extendsRendererForExtensions(A){let i=A;return i.\u0275NgxMarkdownRendererExtendedForExtensions===!0||(this.extensions&&this.extensions.length>0&&Pn.use(...this.extensions),i.\u0275NgxMarkdownRendererExtendedForExtensions=!0),A}extendsRendererForMermaid(A){let i=A;if(i.\u0275NgxMarkdownRendererExtendedForMermaid===!0)return A;let n=A.code;return A.code=o=>o.lang==="mermaid"?`
    ${o.text}
    `:n(o),i.\u0275NgxMarkdownRendererExtendedForMermaid=!0,A}handleExtension(A,i){let n=A.lastIndexOf("://"),o=n>-1?A.substring(n+4):A,a=o.lastIndexOf("/"),r=a>-1?o.substring(a+1).split("?")[0]:"",s=r.lastIndexOf("."),l=s>-1?r.substring(s+1):"";return l&&l!=="md"?"```"+l+` +`+i+"\n```":i}parseMarked(A,i,n=!1){if(i.renderer){let o=gA({},i.renderer);delete o.\u0275NgxMarkdownRendererExtendedForExtensions,delete o.\u0275NgxMarkdownRendererExtendedForMermaid,delete i.renderer,Pn.use({renderer:o})}return n?Pn.parseInline(A,i):Pn.parse(A,i)}parseEmoji(A){if(!O0(this.platform))return A;if(typeof joypixels>"u"||typeof joypixels.shortnameToUnicode>"u")throw new Error(yrA);return joypixels.shortnameToUnicode(A)}renderKatex(A,i){if(O0(this.platform)){if(typeof katex>"u"||typeof renderMathInElement>"u")throw new Error(vrA);renderMathInElement(A,i)}}renderClipboard(A,i,n){if(!O0(this.platform))return;if(typeof ClipboardJS>"u")throw new Error(MrA);if(!i)throw new Error(SrA);let{buttonComponent:o,buttonTemplate:a}=n,r=A.querySelectorAll("pre");for(let s=0;sC.classList.add("hover"),g.onmouseleave=()=>C.classList.remove("hover");let I;if(o){let h=i.createComponent(o);I=h.hostView,h.changeDetectorRef.markForCheck()}else if(a)I=i.createEmbeddedView(a);else{let h=i.createComponent(QrA);I=h.hostView,h.changeDetectorRef.markForCheck()}let d;I.rootNodes.forEach(h=>{C.appendChild(h),d=new ClipboardJS(h,{text:()=>l.innerText})}),I.onDestroy(()=>d.destroy())}}renderMermaid(A,i=this.DEFAULT_MERMAID_OPTIONS){if(!O0(this.platform))return;if(typeof mermaid>"u"||typeof mermaid.initialize>"u")throw new Error(brA);let n=A.querySelectorAll(".mermaid");n.length!==0&&(mermaid.initialize(i),mermaid.run({nodes:n}))}trimIndentation(A){if(!A)return"";let i;return A.split(` +`).map(n=>{let o=i;return n.length>0&&(o=isNaN(o)?n.search(/\S|$/):Math.min(n.search(/\S|$/),o)),isNaN(i)&&(i=o),o?n.substring(o):n}).join(` +`)}sanitizeHtml(A){return lt(this,null,function*(){return DrA(this.sanitize)?this.sanitize(yield A):this.sanitize!==_g.NONE?this.sanitizer.sanitize(this.sanitize??this.DEFAULT_SECURITY_CONTEXT,A)??"":A})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),k7=(function(t){return t.CommandLine="command-line",t.LineHighlight="line-highlight",t.LineNumbers="line-numbers",t})(k7||{}),rU=(()=>{class t{constructor(){this.element=w(ce),this.markdownService=w(aU),this.viewContainerRef=w(Mo),this.error=new LA,this.load=new LA,this.ready=new LA,this._clipboard=!1,this._commandLine=!1,this._disableSanitizer=!1,this._emoji=!1,this._inline=!1,this._katex=!1,this._lineHighlight=!1,this._lineNumbers=!1,this._mermaid=!1,this.destroyed$=new ie}get disableSanitizer(){return this._disableSanitizer}set disableSanitizer(A){this._disableSanitizer=this.coerceBooleanProperty(A)}get inline(){return this._inline}set inline(A){this._inline=this.coerceBooleanProperty(A)}get clipboard(){return this._clipboard}set clipboard(A){this._clipboard=this.coerceBooleanProperty(A)}get emoji(){return this._emoji}set emoji(A){this._emoji=this.coerceBooleanProperty(A)}get katex(){return this._katex}set katex(A){this._katex=this.coerceBooleanProperty(A)}get mermaid(){return this._mermaid}set mermaid(A){this._mermaid=this.coerceBooleanProperty(A)}get lineHighlight(){return this._lineHighlight}set lineHighlight(A){this._lineHighlight=this.coerceBooleanProperty(A)}get lineNumbers(){return this._lineNumbers}set lineNumbers(A){this._lineNumbers=this.coerceBooleanProperty(A)}get commandLine(){return this._commandLine}set commandLine(A){this._commandLine=this.coerceBooleanProperty(A)}ngOnChanges(){this.loadContent()}loadContent(){if(this.data!=null){this.handleData();return}if(this.src!=null){this.handleSrc();return}}ngAfterViewInit(){!this.data&&!this.src&&this.handleTransclusion(),this.markdownService.reload$.pipe(Qt(this.destroyed$)).subscribe(()=>this.loadContent())}ngOnDestroy(){this.destroyed$.next(),this.destroyed$.complete()}render(A,i=!1){return lt(this,null,function*(){let n={decodeHtml:i,inline:this.inline,emoji:this.emoji,mermaid:this.mermaid,disableSanitizer:this.disableSanitizer},o={clipboard:this.clipboard,clipboardOptions:this.getClipboardOptions(),katex:this.katex,katexOptions:this.katexOptions,mermaid:this.mermaid,mermaidOptions:this.mermaidOptions},a=yield this.markdownService.parse(A,n);this.element.nativeElement.innerHTML=a,this.handlePlugins(),this.markdownService.render(this.element.nativeElement,o,this.viewContainerRef),this.ready.emit()})}coerceBooleanProperty(A){return A!=null&&`${String(A)}`!="false"}getClipboardOptions(){if(this.clipboardButtonComponent||this.clipboardButtonTemplate)return{buttonComponent:this.clipboardButtonComponent,buttonTemplate:this.clipboardButtonTemplate}}handleData(){this.render(this.data)}handleSrc(){this.markdownService.getSource(this.src).subscribe({next:A=>{this.render(A).then(()=>{this.load.emit(A)})},error:A=>this.error.emit(A)})}handleTransclusion(){this.render(this.element.nativeElement.innerHTML,!0)}handlePlugins(){this.commandLine&&(this.setPluginClass(this.element.nativeElement,k7.CommandLine),this.setPluginOptions(this.element.nativeElement,{dataFilterOutput:this.filterOutput,dataHost:this.host,dataPrompt:this.prompt,dataOutput:this.output,dataUser:this.user})),this.lineHighlight&&this.setPluginOptions(this.element.nativeElement,{dataLine:this.line,dataLineOffset:this.lineOffset}),this.lineNumbers&&(this.setPluginClass(this.element.nativeElement,k7.LineNumbers),this.setPluginOptions(this.element.nativeElement,{dataStart:this.start}))}setPluginClass(A,i){let n=A.querySelectorAll("pre");for(let o=0;o{let r=i[a];if(r){let s=this.toLispCase(a);n.item(o).setAttribute(s,r.toString())}})}toLispCase(A){let i=A.match(/([A-Z])/g);if(!i)return A;let n=A.toString();for(let o=0,a=i.length;o{class t{static forRoot(A){return{ngModule:t,providers:[Bu(A)]}}static forChild(){return{ngModule:t}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275mod=Ze({type:t})}static{this.\u0275inj=We({})}}return t})();var Ri="primary",bu=Symbol("RouteTitle"),F7=class{params;constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A[0]:A}return null}getAll(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A:[A]}return[]}get keys(){return Object.keys(this.params)}};function Q1(t){return new F7(t)}function x7(t,e,A){for(let i=0;it.length||A.pathMatch==="full"&&(e.hasChildren()||i.lengtht.length||A.pathMatch==="full"&&e.hasChildren()&&A.path!=="**")return null;let r={};return!x7(o,t.slice(0,o.length),r)||!x7(a,t.slice(t.length-a.length),r)?null:{consumed:t,posParams:r}}function gm(t){return new Promise((e,A)=>{t.pipe($n()).subscribe({next:i=>e(i),error:i=>A(i)})})}function RrA(t,e){if(t.length!==e.length)return!1;for(let A=0;Ai[o]===n)}else return t===e}function NrA(t){return t.length>0?t[t.length-1]:null}function f1(t){return zd(t)?t:$3(t)?Lr(Promise.resolve(t)):oe(t)}function QU(t){return zd(t)?gm(t):Promise.resolve(t)}var FrA={exact:pU,subset:mU},uU={exact:LrA,subset:GrA,ignored:()=>!0},fU={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},G7={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};function lU(t,e,A){return FrA[A.paths](t.root,e.root,A.matrixParams)&&uU[A.queryParams](t.queryParams,e.queryParams)&&!(A.fragment==="exact"&&t.fragment!==e.fragment)}function LrA(t,e){return Pc(t,e)}function pU(t,e,A){if(!h1(t.segments,e.segments)||!rm(t.segments,e.segments,A)||t.numberOfChildren!==e.numberOfChildren)return!1;for(let i in e.children)if(!t.children[i]||!pU(t.children[i],e.children[i],A))return!1;return!0}function GrA(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(A=>hU(t[A],e[A]))}function mU(t,e,A){return wU(t,e,e.segments,A)}function wU(t,e,A,i){if(t.segments.length>A.length){let n=t.segments.slice(0,A.length);return!(!h1(n,A)||e.hasChildren()||!rm(n,A,i))}else if(t.segments.length===A.length){if(!h1(t.segments,A)||!rm(t.segments,A,i))return!1;for(let n in e.children)if(!t.children[n]||!mU(t.children[n],e.children[n],i))return!1;return!0}else{let n=A.slice(0,t.segments.length),o=A.slice(t.segments.length);return!h1(t.segments,n)||!rm(t.segments,n,i)||!t.children[Ri]?!1:wU(t.children[Ri],e,o,i)}}function rm(t,e,A){return e.every((i,n)=>uU[A](t[n].parameters,i.parameters))}var ql=class{root;queryParams;fragment;_queryParamMap;constructor(e=new so([],{}),A={},i=null){this.root=e,this.queryParams=A,this.fragment=i}get queryParamMap(){return this._queryParamMap??=Q1(this.queryParams),this._queryParamMap}toString(){return TrA.serialize(this)}},so=class{segments;children;parent=null;constructor(e,A){this.segments=e,this.children=A,Object.values(A).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return sm(this)}},g2=class{path;parameters;_parameterMap;constructor(e,A){this.path=e,this.parameters=A}get parameterMap(){return this._parameterMap??=Q1(this.parameters),this._parameterMap}toString(){return yU(this)}};function KrA(t,e){return h1(t,e)&&t.every((A,i)=>Pc(A.parameters,e[i].parameters))}function h1(t,e){return t.length!==e.length?!1:t.every((A,i)=>A.path===e[i].path)}function UrA(t,e){let A=[];return Object.entries(t.children).forEach(([i,n])=>{i===Ri&&(A=A.concat(e(n,i)))}),Object.entries(t.children).forEach(([i,n])=>{i!==Ri&&(A=A.concat(e(n,i)))}),A}var p1=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:()=>new q0,providedIn:"root"})}return t})(),q0=class{parse(e){let A=new U7(e);return new ql(A.parseRootSegment(),A.parseQueryParams(),A.parseFragment())}serialize(e){let A=`/${Eu(e.root,!0)}`,i=YrA(e.queryParams),n=typeof e.fragment=="string"?`#${JrA(e.fragment)}`:"";return`${A}${i}${n}`}},TrA=new q0;function sm(t){return t.segments.map(e=>yU(e)).join("/")}function Eu(t,e){if(!t.hasChildren())return sm(t);if(e){let A=t.children[Ri]?Eu(t.children[Ri],!1):"",i=[];return Object.entries(t.children).forEach(([n,o])=>{n!==Ri&&i.push(`${n}:${Eu(o,!1)}`)}),i.length>0?`${A}(${i.join("//")})`:A}else{let A=UrA(t,(i,n)=>n===Ri?[Eu(t.children[Ri],!1)]:[`${n}:${Eu(i,!1)}`]);return Object.keys(t.children).length===1&&t.children[Ri]!=null?`${sm(t)}/${A[0]}`:`${sm(t)}/(${A.join("//")})`}}function DU(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function om(t){return DU(t).replace(/%3B/gi,";")}function JrA(t){return encodeURI(t)}function K7(t){return DU(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function lm(t){return decodeURIComponent(t)}function gU(t){return lm(t.replace(/\+/g,"%20"))}function yU(t){return`${K7(t.path)}${OrA(t.parameters)}`}function OrA(t){return Object.entries(t).map(([e,A])=>`;${K7(e)}=${K7(A)}`).join("")}function YrA(t){let e=Object.entries(t).map(([A,i])=>Array.isArray(i)?i.map(n=>`${om(A)}=${om(n)}`).join("&"):`${om(A)}=${om(i)}`).filter(A=>A);return e.length?`?${e.join("&")}`:""}var HrA=/^[^\/()?;#]+/;function _7(t){let e=t.match(HrA);return e?e[0]:""}var zrA=/^[^\/()?;=#]+/;function PrA(t){let e=t.match(zrA);return e?e[0]:""}var jrA=/^[^=?&#]+/;function qrA(t){let e=t.match(jrA);return e?e[0]:""}var VrA=/^[^&#]+/;function WrA(t){let e=t.match(VrA);return e?e[0]:""}var U7=class{url;remaining;constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new so([],{}):new so([],this.parseChildren())}parseQueryParams(){let e={};if(this.consumeOptional("?"))do this.parseQueryParam(e);while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(e=0){if(e>50)throw new Mt(4010,!1);if(this.remaining==="")return{};this.consumeOptional("/");let A=[];for(this.peekStartsWith("(")||A.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),A.push(this.parseSegment());let i={};this.peekStartsWith("/(")&&(this.capture("/"),i=this.parseParens(!0,e));let n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1,e)),(A.length>0||Object.keys(i).length>0)&&(n[Ri]=new so(A,i)),n}parseSegment(){let e=_7(this.remaining);if(e===""&&this.peekStartsWith(";"))throw new Mt(4009,!1);return this.capture(e),new g2(lm(e),this.parseMatrixParams())}parseMatrixParams(){let e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){let A=PrA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let n=_7(this.remaining);n&&(i=n,this.capture(i))}e[lm(A)]=lm(i)}parseQueryParam(e){let A=qrA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let a=WrA(this.remaining);a&&(i=a,this.capture(i))}let n=gU(A),o=gU(i);if(e.hasOwnProperty(n)){let a=e[n];Array.isArray(a)||(a=[a],e[n]=a),a.push(o)}else e[n]=o}parseParens(e,A){let i={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let n=_7(this.remaining),o=this.remaining[n.length];if(o!=="/"&&o!==")"&&o!==";")throw new Mt(4010,!1);let a;n.indexOf(":")>-1?(a=n.slice(0,n.indexOf(":")),this.capture(a),this.capture(":")):e&&(a=Ri);let r=this.parseChildren(A+1);i[a??Ri]=Object.keys(r).length===1&&r[Ri]?r[Ri]:new so([],r),this.consumeOptional("//")}return i}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return this.peekStartsWith(e)?(this.remaining=this.remaining.substring(e.length),!0):!1}capture(e){if(!this.consumeOptional(e))throw new Mt(4011,!1)}};function vU(t){return t.segments.length>0?new so([],{[Ri]:t}):t}function bU(t){let e={};for(let[i,n]of Object.entries(t.children)){let o=bU(n);if(i===Ri&&o.segments.length===0&&o.hasChildren())for(let[a,r]of Object.entries(o.children))e[a]=r;else(o.segments.length>0||o.hasChildren())&&(e[i]=o)}let A=new so(t.segments,e);return ZrA(A)}function ZrA(t){if(t.numberOfChildren===1&&t.children[Ri]){let e=t.children[Ri];return new so(t.segments.concat(e.segments),e.children)}return t}function mB(t){return t instanceof ql}function MU(t,e,A=null,i=null,n=new q0){let o=SU(t);return kU(o,e,A,i,n)}function SU(t){let e;function A(o){let a={};for(let s of o.children){let l=A(s);a[s.outlet]=l}let r=new so(o.url,a);return o===t&&(e=r),r}let i=A(t.root),n=vU(i);return e??n}function kU(t,e,A,i,n){let o=t;for(;o.parent;)o=o.parent;if(e.length===0)return R7(o,o,o,A,i,n);let a=XrA(e);if(a.toRoot())return R7(o,o,new so([],{}),A,i,n);let r=$rA(a,o,t),s=r.processChildren?Qu(r.segmentGroup,r.index,a.commands):_U(r.segmentGroup,r.index,a.commands);return R7(o,r.segmentGroup,s,A,i,n)}function cm(t){return typeof t=="object"&&t!=null&&!t.outlets&&!t.segmentPath}function fu(t){return typeof t=="object"&&t!=null&&t.outlets}function cU(t,e,A){t||="\u0275";let i=new ql;return i.queryParams={[t]:e},A.parse(A.serialize(i)).queryParams[t]}function R7(t,e,A,i,n,o){let a={};for(let[l,g]of Object.entries(i??{}))a[l]=Array.isArray(g)?g.map(C=>cU(l,C,o)):cU(l,g,o);let r;t===e?r=A:r=xU(t,e,A);let s=vU(bU(r));return new ql(s,a,n)}function xU(t,e,A){let i={};return Object.entries(t.children).forEach(([n,o])=>{o===e?i[n]=A:i[n]=xU(o,e,A)}),new so(t.segments,i)}var Cm=class{isAbsolute;numberOfDoubleDots;commands;constructor(e,A,i){if(this.isAbsolute=e,this.numberOfDoubleDots=A,this.commands=i,e&&i.length>0&&cm(i[0]))throw new Mt(4003,!1);let n=i.find(fu);if(n&&n!==NrA(i))throw new Mt(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function XrA(t){if(typeof t[0]=="string"&&t.length===1&&t[0]==="/")return new Cm(!0,0,t);let e=0,A=!1,i=t.reduce((n,o,a)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let r={};return Object.entries(o.outlets).forEach(([s,l])=>{r[s]=typeof l=="string"?l.split("/"):l}),[...n,{outlets:r}]}if(o.segmentPath)return[...n,o.segmentPath]}return typeof o!="string"?[...n,o]:a===0?(o.split("/").forEach((r,s)=>{s==0&&r==="."||(s==0&&r===""?A=!0:r===".."?e++:r!=""&&n.push(r))}),n):[...n,o]},[]);return new Cm(A,e,i)}var uB=class{segmentGroup;processChildren;index;constructor(e,A,i){this.segmentGroup=e,this.processChildren=A,this.index=i}};function $rA(t,e,A){if(t.isAbsolute)return new uB(e,!0,0);if(!A)return new uB(e,!1,NaN);if(A.parent===null)return new uB(A,!0,0);let i=cm(t.commands[0])?0:1,n=A.segments.length-1+i;return AsA(A,n,t.numberOfDoubleDots)}function AsA(t,e,A){let i=t,n=e,o=A;for(;o>n;){if(o-=n,i=i.parent,!i)throw new Mt(4005,!1);n=i.segments.length}return new uB(i,!1,n-o)}function esA(t){return fu(t[0])?t[0].outlets:{[Ri]:t}}function _U(t,e,A){if(t??=new so([],{}),t.segments.length===0&&t.hasChildren())return Qu(t,e,A);let i=tsA(t,e,A),n=A.slice(i.commandIndex);if(i.match&&i.pathIndexo!==Ri)&&t.children[Ri]&&t.numberOfChildren===1&&t.children[Ri].segments.length===0){let o=Qu(t.children[Ri],e,A);return new so(t.segments,o.children)}return Object.entries(i).forEach(([o,a])=>{typeof a=="string"&&(a=[a]),a!==null&&(n[o]=_U(t.children[o],e,a))}),Object.entries(t.children).forEach(([o,a])=>{i[o]===void 0&&(n[o]=a)}),new so(t.segments,n)}}function tsA(t,e,A){let i=0,n=e,o={match:!1,pathIndex:0,commandIndex:0};for(;n=A.length)return o;let a=t.segments[n],r=A[i];if(fu(r))break;let s=`${r}`,l=i0&&s===void 0)break;if(s&&l&&typeof l=="object"&&l.outlets===void 0){if(!IU(s,l,a))return o;i+=2}else{if(!IU(s,{},a))return o;i++}n++}return{match:!0,pathIndex:n,commandIndex:i}}function T7(t,e,A){let i=t.segments.slice(0,e),n=0;for(;n{typeof i=="string"&&(i=[i]),i!==null&&(e[A]=T7(new so([],{}),0,i))}),e}function CU(t){let e={};return Object.entries(t).forEach(([A,i])=>e[A]=`${i}`),e}function IU(t,e,A){return t==A.path&&Pc(e,A.parameters)}var fB="imperative",gr=(function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t})(gr||{}),bl=class{id;url;constructor(e,A){this.id=e,this.url=A}},c2=class extends bl{type=gr.NavigationStart;navigationTrigger;restoredState;constructor(e,A,i="imperative",n=null){super(e,A),this.navigationTrigger=i,this.restoredState=n}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},Tg=class extends bl{urlAfterRedirects;type=gr.NavigationEnd;constructor(e,A,i){super(e,A),this.urlAfterRedirects=i}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},ss=(function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t})(ss||{}),wB=(function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t})(wB||{}),jl=class extends bl{reason;code;type=gr.NavigationCancel;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}};function RU(t){return t instanceof jl&&(t.code===ss.Redirect||t.code===ss.SupersededByNewNavigation)}var qc=class extends bl{reason;code;type=gr.NavigationSkipped;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}},u1=class extends bl{error;target;type=gr.NavigationError;constructor(e,A,i,n){super(e,A),this.error=i,this.target=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},pu=class extends bl{urlAfterRedirects;state;type=gr.RoutesRecognized;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Im=class extends bl{urlAfterRedirects;state;type=gr.GuardsCheckStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},dm=class extends bl{urlAfterRedirects;state;shouldActivate;type=gr.GuardsCheckEnd;constructor(e,A,i,n,o){super(e,A),this.urlAfterRedirects=i,this.state=n,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},Bm=class extends bl{urlAfterRedirects;state;type=gr.ResolveStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Em=class extends bl{urlAfterRedirects;state;type=gr.ResolveEnd;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},hm=class{route;type=gr.RouteConfigLoadStart;constructor(e){this.route=e}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},Qm=class{route;type=gr.RouteConfigLoadEnd;constructor(e){this.route=e}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},um=class{snapshot;type=gr.ChildActivationStart;constructor(e){this.snapshot=e}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},fm=class{snapshot;type=gr.ChildActivationEnd;constructor(e){this.snapshot=e}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},pm=class{snapshot;type=gr.ActivationStart;constructor(e){this.snapshot=e}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},mm=class{snapshot;type=gr.ActivationEnd;constructor(e){this.snapshot=e}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},DB=class{routerEvent;position;anchor;scrollBehavior;type=gr.Scroll;constructor(e,A,i,n){this.routerEvent=e,this.position=A,this.anchor=i,this.scrollBehavior=n}toString(){let e=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${e}')`}},yB=class{},mu=class{},vB=class{url;navigationBehaviorOptions;constructor(e,A){this.url=e,this.navigationBehaviorOptions=A}};function nsA(t){return!(t instanceof yB)&&!(t instanceof vB)&&!(t instanceof mu)}var wm=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return this.route?.snapshot._environmentInjector??this.rootInjector}constructor(e){this.rootInjector=e,this.children=new m1(this.rootInjector)}},m1=(()=>{class t{rootInjector;contexts=new Map;constructor(A){this.rootInjector=A}onChildOutletCreated(A,i){let n=this.getOrCreateContext(A);n.outlet=i,this.contexts.set(A,n)}onChildOutletDestroyed(A){let i=this.getContext(A);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){let A=this.contexts;return this.contexts=new Map,A}onOutletReAttached(A){this.contexts=A}getOrCreateContext(A){let i=this.getContext(A);return i||(i=new wm(this.rootInjector),this.contexts.set(A,i)),i}getContext(A){return this.contexts.get(A)||null}static \u0275fac=function(i){return new(i||t)(Lo(Gr))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Dm=class{_root;constructor(e){this._root=e}get root(){return this._root.value}parent(e){let A=this.pathFromRoot(e);return A.length>1?A[A.length-2]:null}children(e){let A=J7(e,this._root);return A?A.children.map(i=>i.value):[]}firstChild(e){let A=J7(e,this._root);return A&&A.children.length>0?A.children[0].value:null}siblings(e){let A=O7(e,this._root);return A.length<2?[]:A[A.length-2].children.map(n=>n.value).filter(n=>n!==e)}pathFromRoot(e){return O7(e,this._root).map(A=>A.value)}};function J7(t,e){if(t===e.value)return e;for(let A of e.children){let i=J7(t,A);if(i)return i}return null}function O7(t,e){if(t===e.value)return[e];for(let A of e.children){let i=O7(t,A);if(i.length)return i.unshift(e),i}return[]}var vl=class{value;children;constructor(e,A){this.value=e,this.children=A}toString(){return`TreeNode(${this.value})`}};function QB(t){let e={};return t&&t.children.forEach(A=>e[A.value.outlet]=A),e}var wu=class extends Dm{snapshot;constructor(e,A){super(e),this.snapshot=A,Z7(this,e)}toString(){return this.snapshot.toString()}};function NU(t,e){let A=osA(t,e),i=new ei([new g2("",{})]),n=new ei({}),o=new ei({}),a=new ei({}),r=new ei(""),s=new Vs(i,n,a,r,o,Ri,t,A.root);return s.snapshot=A.root,new wu(new vl(s,[]),A)}function osA(t,e){let A={},i={},n={},a=new bB([],A,n,"",i,Ri,t,null,{},e);return new Du("",new vl(a,[]))}var Vs=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(e,A,i,n,o,a,r,s){this.urlSubject=e,this.paramsSubject=A,this.queryParamsSubject=i,this.fragmentSubject=n,this.dataSubject=o,this.outlet=a,this.component=r,this._futureSnapshot=s,this.title=this.dataSubject?.pipe(we(l=>l[bu]))??oe(void 0),this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(we(e=>Q1(e))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(we(e=>Q1(e))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function W7(t,e,A="emptyOnly"){let i,{routeConfig:n}=t;return e!==null&&(A==="always"||n?.path===""||!e.component&&!e.routeConfig?.loadComponent)?i={params:gA(gA({},e.params),t.params),data:gA(gA({},e.data),t.data),resolve:gA(gA(gA(gA({},t.data),e.data),n?.data),t._resolvedData)}:i={params:gA({},t.params),data:gA({},t.data),resolve:gA(gA({},t.data),t._resolvedData??{})},n&&LU(n)&&(i.resolve[bu]=n.title),i}var bB=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;get title(){return this.data?.[bu]}constructor(e,A,i,n,o,a,r,s,l,g){this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o,this.outlet=a,this.component=r,this.routeConfig=s,this._resolve=l,this._environmentInjector=g}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Q1(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Q1(this.queryParams),this._queryParamMap}toString(){let e=this.url.map(i=>i.toString()).join("/"),A=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${e}', path:'${A}')`}},Du=class extends Dm{url;constructor(e,A){super(A),this.url=e,Z7(this,A)}toString(){return FU(this._root)}};function Z7(t,e){e.value._routerState=t,e.children.forEach(A=>Z7(t,A))}function FU(t){let e=t.children.length>0?` { ${t.children.map(FU).join(", ")} } `:"";return`${t.value}${e}`}function N7(t){if(t.snapshot){let e=t.snapshot,A=t._futureSnapshot;t.snapshot=A,Pc(e.queryParams,A.queryParams)||t.queryParamsSubject.next(A.queryParams),e.fragment!==A.fragment&&t.fragmentSubject.next(A.fragment),Pc(e.params,A.params)||t.paramsSubject.next(A.params),RrA(e.url,A.url)||t.urlSubject.next(A.url),Pc(e.data,A.data)||t.dataSubject.next(A.data)}else t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data)}function Y7(t,e){let A=Pc(t.params,e.params)&&KrA(t.url,e.url),i=!t.parent!=!e.parent;return A&&!i&&(!t.parent||Y7(t.parent,e.parent))}function LU(t){return typeof t.title=="string"||t.title===null}var GU=new kA(""),X7=(()=>{class t{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=Ri;activateEvents=new LA;deactivateEvents=new LA;attachEvents=new LA;detachEvents=new LA;routerOutletData=me();parentContexts=w(m1);location=w(Mo);changeDetector=w(wt);inputBinder=w(Mu,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(A){if(A.name){let{firstChange:i,previousValue:n}=A.name;if(i)return;this.isTrackedInParentContexts(n)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(n)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(A){return this.parentContexts.getContext(A)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let A=this.parentContexts.getContext(this.name);A?.route&&(A.attachRef?this.attach(A.attachRef,A.route):this.activateWith(A.route,A.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Mt(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Mt(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Mt(4012,!1);this.location.detach();let A=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(A.instance),A}attach(A,i){this.activated=A,this._activatedRoute=i,this.location.insert(A.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(A.instance)}deactivate(){if(this.activated){let A=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(A)}}activateWith(A,i){if(this.isActivated)throw new Mt(4013,!1);this._activatedRoute=A;let n=this.location,a=A.snapshot.component,r=this.parentContexts.getOrCreateContext(this.name).children,s=new H7(A,r,n.injector,this.routerOutletData);this.activated=n.createComponent(a,{index:n.length,injector:s,environmentInjector:i}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[Yt]})}return t})(),H7=class{route;childContexts;parent;outletData;constructor(e,A,i,n){this.route=e,this.childContexts=A,this.parent=i,this.outletData=n}get(e,A){return e===Vs?this.route:e===m1?this.childContexts:e===GU?this.outletData:this.parent.get(e,A)}},Mu=new kA(""),$7=(()=>{class t{outletDataSubscriptions=new Map;bindActivatedRouteToOutletComponent(A){this.unsubscribeFromRouteData(A),this.subscribeToRouteData(A)}unsubscribeFromRouteData(A){this.outletDataSubscriptions.get(A)?.unsubscribe(),this.outletDataSubscriptions.delete(A)}subscribeToRouteData(A){let{activatedRoute:i}=A,n=Qr([i.queryParams,i.params,i.data]).pipe(Ei(([o,a,r],s)=>(r=gA(gA(gA({},o),a),r),s===0?oe(r):Promise.resolve(r)))).subscribe(o=>{if(!A.isActivated||!A.activatedComponentRef||A.activatedRoute!==i||i.component===null){this.unsubscribeFromRouteData(A);return}let a=AL(i.component);if(!a){this.unsubscribeFromRouteData(A);return}for(let{templateName:r}of a.inputs)A.activatedComponentRef.setInput(r,o[r])});this.outletDataSubscriptions.set(A,n)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac})}return t})(),AM=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(i,n){i&1&&QA(0,"router-outlet")},dependencies:[X7],encapsulation:2})}return t})();function eM(t){let e=t.children&&t.children.map(eM),A=e?Ye(gA({},t),{children:e}):gA({},t);return!A.component&&!A.loadComponent&&(e||A.loadChildren)&&A.outlet&&A.outlet!==Ri&&(A.component=AM),A}function asA(t,e,A){let i=yu(t,e._root,A?A._root:void 0);return new wu(i,e)}function yu(t,e,A){if(A&&t.shouldReuseRoute(e.value,A.value.snapshot)){let i=A.value;i._futureSnapshot=e.value;let n=rsA(t,e,A);return new vl(i,n)}else{if(t.shouldAttach(e.value)){let o=t.retrieve(e.value);if(o!==null){let a=o.route;return a.value._futureSnapshot=e.value,a.children=e.children.map(r=>yu(t,r)),a}}let i=ssA(e.value),n=e.children.map(o=>yu(t,o));return new vl(i,n)}}function rsA(t,e,A){return e.children.map(i=>{for(let n of A.children)if(t.shouldReuseRoute(i.value,n.value.snapshot))return yu(t,i,n);return yu(t,i)})}function ssA(t){return new Vs(new ei(t.url),new ei(t.params),new ei(t.queryParams),new ei(t.fragment),new ei(t.data),t.outlet,t.component,t)}var MB=class{redirectTo;navigationBehaviorOptions;constructor(e,A){this.redirectTo=e,this.navigationBehaviorOptions=A}},KU="ngNavigationCancelingError";function ym(t,e){let{redirectTo:A,navigationBehaviorOptions:i}=mB(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,n=UU(!1,ss.Redirect);return n.url=A,n.navigationBehaviorOptions=i,n}function UU(t,e){let A=new Error(`NavigationCancelingError: ${t||""}`);return A[KU]=!0,A.cancellationCode=e,A}function lsA(t){return TU(t)&&mB(t.url)}function TU(t){return!!t&&t[KU]}var z7=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(e,A,i,n,o){this.routeReuseStrategy=e,this.futureState=A,this.currState=i,this.forwardEvent=n,this.inputBindingEnabled=o}activate(e){let A=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(A,i,e),N7(this.futureState.root),this.activateChildRoutes(A,i,e)}deactivateChildRoutes(e,A,i){let n=QB(A);e.children.forEach(o=>{let a=o.value.outlet;this.deactivateRoutes(o,n[a],i),delete n[a]}),Object.values(n).forEach(o=>{this.deactivateRouteAndItsChildren(o,i)})}deactivateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(n===o)if(n.component){let a=i.getContext(n.outlet);a&&this.deactivateChildRoutes(e,A,a.children)}else this.deactivateChildRoutes(e,A,i);else o&&this.deactivateRouteAndItsChildren(A,i)}deactivateRouteAndItsChildren(e,A){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,A):this.deactivateRouteAndOutlet(e,A)}detachAndStoreRouteSubtree(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=QB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);if(i&&i.outlet){let a=i.outlet.detach(),r=i.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:a,route:e,contexts:r})}}deactivateRouteAndOutlet(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=QB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(e,A,i){let n=QB(A);e.children.forEach(o=>{this.activateRoutes(o,n[o.value.outlet],i),this.forwardEvent(new mm(o.value.snapshot))}),e.children.length&&this.forwardEvent(new fm(e.value.snapshot))}activateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(N7(n),n===o)if(n.component){let a=i.getOrCreateContext(n.outlet);this.activateChildRoutes(e,A,a.children)}else this.activateChildRoutes(e,A,i);else if(n.component){let a=i.getOrCreateContext(n.outlet);if(this.routeReuseStrategy.shouldAttach(n.snapshot)){let r=this.routeReuseStrategy.retrieve(n.snapshot);this.routeReuseStrategy.store(n.snapshot,null),a.children.onOutletReAttached(r.contexts),a.attachRef=r.componentRef,a.route=r.route.value,a.outlet&&a.outlet.attach(r.componentRef,r.route.value),N7(r.route.value),this.activateChildRoutes(e,null,a.children)}else a.attachRef=null,a.route=n,a.outlet&&a.outlet.activateWith(n,a.injector),this.activateChildRoutes(e,null,a.children)}else this.activateChildRoutes(e,null,i)}},vm=class{path;route;constructor(e){this.path=e,this.route=this.path[this.path.length-1]}},pB=class{component;route;constructor(e,A){this.component=e,this.route=A}};function gsA(t,e,A){let i=t._root,n=e?e._root:null;return hu(i,n,A,[i.value])}function csA(t){let e=t.routeConfig?t.routeConfig.canActivateChild:null;return!e||e.length===0?null:{node:t,guards:e}}function kB(t,e){let A=Symbol(),i=e.get(t,A);return i===A?typeof t=="function"&&!LF(t)?t:e.get(t):i}function hu(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=QB(e);return t.children.forEach(a=>{CsA(a,o[a.value.outlet],A,i.concat([a.value]),n),delete o[a.value.outlet]}),Object.entries(o).forEach(([a,r])=>uu(r,A.getContext(a),n)),n}function CsA(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=t.value,a=e?e.value:null,r=A?A.getContext(t.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){let s=IsA(a,o,o.routeConfig.runGuardsAndResolvers);s?n.canActivateChecks.push(new vm(i)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?hu(t,e,r?r.children:null,i,n):hu(t,e,A,i,n),s&&r&&r.outlet&&r.outlet.isActivated&&n.canDeactivateChecks.push(new pB(r.outlet.component,a))}else a&&uu(e,r,n),n.canActivateChecks.push(new vm(i)),o.component?hu(t,null,r?r.children:null,i,n):hu(t,null,A,i,n);return n}function IsA(t,e,A){if(typeof A=="function")return Xa(e._environmentInjector,()=>A(t,e));switch(A){case"pathParamsChange":return!h1(t.url,e.url);case"pathParamsOrQueryParamsChange":return!h1(t.url,e.url)||!Pc(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Y7(t,e)||!Pc(t.queryParams,e.queryParams);default:return!Y7(t,e)}}function uu(t,e,A){let i=QB(t),n=t.value;Object.entries(i).forEach(([o,a])=>{n.component?e?uu(a,e.children.getContext(o),A):uu(a,null,A):uu(a,e,A)}),n.component?e&&e.outlet&&e.outlet.isActivated?A.canDeactivateChecks.push(new pB(e.outlet.component,n)):A.canDeactivateChecks.push(new pB(null,n)):A.canDeactivateChecks.push(new pB(null,n))}function Su(t){return typeof t=="function"}function dsA(t){return typeof t=="boolean"}function BsA(t){return t&&Su(t.canLoad)}function EsA(t){return t&&Su(t.canActivate)}function hsA(t){return t&&Su(t.canActivateChild)}function QsA(t){return t&&Su(t.canDeactivate)}function usA(t){return t&&Su(t.canMatch)}function JU(t){return t instanceof xF||t?.name==="EmptyError"}var am=Symbol("INITIAL_VALUE");function SB(){return Ei(t=>Qr(t.map(e=>e.pipe(uo(1),Sn(am)))).pipe(we(e=>{for(let A of e)if(A!==!0){if(A===am)return am;if(A===!1||fsA(A))return A}return!0}),gt(e=>e!==am),uo(1)))}function fsA(t){return mB(t)||t instanceof MB}function OU(t){return t.aborted?oe(void 0).pipe(uo(1)):new vi(e=>{let A=()=>{e.next(),e.complete()};return t.addEventListener("abort",A),()=>t.removeEventListener("abort",A)})}function YU(t){return Qt(OU(t))}function psA(t){return Fc(e=>{let{targetSnapshot:A,currentSnapshot:i,guards:{canActivateChecks:n,canDeactivateChecks:o}}=e;return o.length===0&&n.length===0?oe(Ye(gA({},e),{guardsResult:!0})):msA(o,A,i).pipe(Fc(a=>a&&dsA(a)?wsA(A,n,t):oe(a)),we(a=>Ye(gA({},e),{guardsResult:a})))})}function msA(t,e,A){return Lr(t).pipe(Fc(i=>MsA(i.component,i.route,A,e)),$n(i=>i!==!0,!0))}function wsA(t,e,A){return Lr(e).pipe(xQ(i=>O3(ysA(i.route.parent,A),DsA(i.route,A),bsA(t,i.path),vsA(t,i.route))),$n(i=>i!==!0,!0))}function DsA(t,e){return t!==null&&e&&e(new pm(t)),oe(!0)}function ysA(t,e){return t!==null&&e&&e(new um(t)),oe(!0)}function vsA(t,e){let A=e.routeConfig?e.routeConfig.canActivate:null;if(!A||A.length===0)return oe(!0);let i=A.map(n=>Lc(()=>{let o=e._environmentInjector,a=kB(n,o),r=EsA(a)?a.canActivate(e,t):Xa(o,()=>a(e,t));return f1(r).pipe($n())}));return oe(i).pipe(SB())}function bsA(t,e){let A=e[e.length-1],n=e.slice(0,e.length-1).reverse().map(o=>csA(o)).filter(o=>o!==null).map(o=>Lc(()=>{let a=o.guards.map(r=>{let s=o.node._environmentInjector,l=kB(r,s),g=hsA(l)?l.canActivateChild(A,t):Xa(s,()=>l(A,t));return f1(g).pipe($n())});return oe(a).pipe(SB())}));return oe(n).pipe(SB())}function MsA(t,e,A,i){let n=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!n||n.length===0)return oe(!0);let o=n.map(a=>{let r=e._environmentInjector,s=kB(a,r),l=QsA(s)?s.canDeactivate(t,e,A,i):Xa(r,()=>s(t,e,A,i));return f1(l).pipe($n())});return oe(o).pipe(SB())}function SsA(t,e,A,i,n){let o=e.canLoad;if(o===void 0||o.length===0)return oe(!0);let a=o.map(r=>{let s=kB(r,t),l=BsA(s)?s.canLoad(e,A):Xa(t,()=>s(e,A)),g=f1(l);return n?g.pipe(YU(n)):g});return oe(a).pipe(SB(),HU(i))}function HU(t){return MF(Ii(e=>{if(typeof e!="boolean")throw ym(t,e)}),we(e=>e===!0))}function ksA(t,e,A,i,n,o){let a=e.canMatch;if(!a||a.length===0)return oe(!0);let r=a.map(s=>{let l=kB(s,t),g=usA(l)?l.canMatch(e,A,n):Xa(t,()=>l(e,A,n));return f1(g).pipe(YU(o))});return oe(r).pipe(SB(),HU(i))}var j0=class t extends Error{segmentGroup;constructor(e){super(),this.segmentGroup=e||null,Object.setPrototypeOf(this,t.prototype)}},vu=class t extends Error{urlTree;constructor(e){super(),this.urlTree=e,Object.setPrototypeOf(this,t.prototype)}};function xsA(t){throw new Mt(4e3,!1)}function _sA(t){throw UU(!1,ss.GuardRejected)}var P7=class{urlSerializer;urlTree;constructor(e,A){this.urlSerializer=e,this.urlTree=A}lineralizeSegments(e,A){return lt(this,null,function*(){let i=[],n=A.root;for(;;){if(i=i.concat(n.segments),n.numberOfChildren===0)return i;if(n.numberOfChildren>1||!n.children[Ri])throw xsA(`${e.redirectTo}`);n=n.children[Ri]}})}applyRedirectCommands(e,A,i,n,o){return lt(this,null,function*(){let a=yield RsA(A,n,o);if(a instanceof ql)throw new vu(a);let r=this.applyRedirectCreateUrlTree(a,this.urlSerializer.parse(a),e,i);if(a[0]==="/")throw new vu(r);return r})}applyRedirectCreateUrlTree(e,A,i,n){let o=this.createSegmentGroup(e,A.root,i,n);return new ql(o,this.createQueryParams(A.queryParams,this.urlTree.queryParams),A.fragment)}createQueryParams(e,A){let i={};return Object.entries(e).forEach(([n,o])=>{if(typeof o=="string"&&o[0]===":"){let r=o.substring(1);i[n]=A[r]}else i[n]=o}),i}createSegmentGroup(e,A,i,n){let o=this.createSegments(e,A.segments,i,n),a={};return Object.entries(A.children).forEach(([r,s])=>{a[r]=this.createSegmentGroup(e,s,i,n)}),new so(o,a)}createSegments(e,A,i,n){return A.map(o=>o.path[0]===":"?this.findPosParam(e,o,n):this.findOrReturn(o,i))}findPosParam(e,A,i){let n=i[A.path.substring(1)];if(!n)throw new Mt(4001,!1);return n}findOrReturn(e,A){let i=0;for(let n of A){if(n.path===e.path)return A.splice(i),n;i++}return e}};function RsA(t,e,A){if(typeof t=="string")return Promise.resolve(t);let i=t;return gm(f1(Xa(A,()=>i(e))))}function NsA(t,e){return t.providers&&!t._injector&&(t._injector=W3(t.providers,e,`Route: ${t.path}`)),t._injector??e}function jc(t){return t.outlet||Ri}function FsA(t,e){let A=t.filter(i=>jc(i)===e);return A.push(...t.filter(i=>jc(i)!==e)),A}var j7={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function zU(t){return{routeConfig:t.routeConfig,url:t.url,params:t.params,queryParams:t.queryParams,fragment:t.fragment,data:t.data,outlet:t.outlet,title:t.title,paramMap:t.paramMap,queryParamMap:t.queryParamMap}}function LsA(t,e,A,i,n,o,a){let r=PU(t,e,A);if(!r.matched)return oe(r);let s=zU(o(r));return i=NsA(e,i),ksA(i,e,A,n,s,a).pipe(we(l=>l===!0?r:gA({},j7)))}function PU(t,e,A){if(e.path==="")return e.pathMatch==="full"&&(t.hasChildren()||A.length>0)?gA({},j7):{matched:!0,consumedSegments:[],remainingSegments:A,parameters:{},positionalParamSegments:{}};let n=(e.matcher||EU)(A,t,e);if(!n)return gA({},j7);let o={};Object.entries(n.posParams??{}).forEach(([r,s])=>{o[r]=s.path});let a=n.consumed.length>0?gA(gA({},o),n.consumed[n.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:n.consumed,remainingSegments:A.slice(n.consumed.length),parameters:a,positionalParamSegments:n.posParams??{}}}function dU(t,e,A,i){return A.length>0&&UsA(t,A,i)?{segmentGroup:new so(e,KsA(i,new so(A,t.children))),slicedSegments:[]}:A.length===0&&TsA(t,A,i)?{segmentGroup:new so(t.segments,GsA(t,A,i,t.children)),slicedSegments:A}:{segmentGroup:new so(t.segments,t.children),slicedSegments:A}}function GsA(t,e,A,i){let n={};for(let o of A)if(Mm(t,e,o)&&!i[jc(o)]){let a=new so([],{});n[jc(o)]=a}return gA(gA({},i),n)}function KsA(t,e){let A={};A[Ri]=e;for(let i of t)if(i.path===""&&jc(i)!==Ri){let n=new so([],{});A[jc(i)]=n}return A}function UsA(t,e,A){return A.some(i=>Mm(t,e,i)&&jc(i)!==Ri)}function TsA(t,e,A){return A.some(i=>Mm(t,e,i))}function Mm(t,e,A){return(t.hasChildren()||e.length>0)&&A.pathMatch==="full"?!1:A.path===""}function JsA(t,e,A){return e.length===0&&!t.children[A]}var q7=class{};function OsA(t,e,A,i,n,o,a="emptyOnly",r){return lt(this,null,function*(){return new V7(t,e,A,i,n,a,o,r).recognize()})}var YsA=31,V7=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(e,A,i,n,o,a,r,s){this.injector=e,this.configLoader=A,this.rootComponentType=i,this.config=n,this.urlTree=o,this.paramsInheritanceStrategy=a,this.urlSerializer=r,this.abortSignal=s,this.applyRedirects=new P7(this.urlSerializer,this.urlTree)}noMatchError(e){return new Mt(4002,`'${e.segmentGroup}'`)}recognize(){return lt(this,null,function*(){let e=dU(this.urlTree.root,[],[],this.config).segmentGroup,{children:A,rootSnapshot:i}=yield this.match(e),n=new vl(i,A),o=new Du("",n),a=MU(i,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(a),{state:o,tree:a}})}match(e){return lt(this,null,function*(){let A=new bB([],Object.freeze({}),Object.freeze(gA({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),Ri,this.rootComponentType,null,{},this.injector);try{return{children:yield this.processSegmentGroup(this.injector,this.config,e,Ri,A),rootSnapshot:A}}catch(i){if(i instanceof vu)return this.urlTree=i.urlTree,this.match(i.urlTree.root);throw i instanceof j0?this.noMatchError(i):i}})}processSegmentGroup(e,A,i,n,o){return lt(this,null,function*(){if(i.segments.length===0&&i.hasChildren())return this.processChildren(e,A,i,o);let a=yield this.processSegment(e,A,i,i.segments,n,!0,o);return a instanceof vl?[a]:[]})}processChildren(e,A,i,n){return lt(this,null,function*(){let o=[];for(let s of Object.keys(i.children))s==="primary"?o.unshift(s):o.push(s);let a=[];for(let s of o){let l=i.children[s],g=FsA(A,s),C=yield this.processSegmentGroup(e,g,l,s,n);a.push(...C)}let r=jU(a);return HsA(r),r})}processSegment(e,A,i,n,o,a,r){return lt(this,null,function*(){for(let s of A)try{return yield this.processSegmentAgainstRoute(s._injector??e,A,s,i,n,o,a,r)}catch(l){if(l instanceof j0||JU(l))continue;throw l}if(JsA(i,n,o))return new q7;throw new j0(i)})}processSegmentAgainstRoute(e,A,i,n,o,a,r,s){return lt(this,null,function*(){if(jc(i)!==a&&(a===Ri||!Mm(n,o,i)))throw new j0(n);if(i.redirectTo===void 0)return this.matchSegmentAgainstRoute(e,n,i,o,a,s);if(this.allowRedirects&&r)return this.expandSegmentAgainstRouteUsingRedirect(e,n,A,i,o,a,s);throw new j0(n)})}expandSegmentAgainstRouteUsingRedirect(e,A,i,n,o,a,r){return lt(this,null,function*(){let{matched:s,parameters:l,consumedSegments:g,positionalParamSegments:C,remainingSegments:I}=PU(A,n,o);if(!s)throw new j0(A);typeof n.redirectTo=="string"&&n.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>YsA&&(this.allowRedirects=!1));let d=this.createSnapshot(e,n,o,l,r);if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let h=yield this.applyRedirects.applyRedirectCommands(g,n.redirectTo,C,zU(d),e),E=yield this.applyRedirects.lineralizeSegments(n,h);return this.processSegment(e,i,A,E.concat(I),a,!1,r)})}createSnapshot(e,A,i,n,o){let a=new bB(i,n,Object.freeze(gA({},this.urlTree.queryParams)),this.urlTree.fragment,PsA(A),jc(A),A.component??A._loadedComponent??null,A,jsA(A),e),r=W7(a,o,this.paramsInheritanceStrategy);return a.params=Object.freeze(r.params),a.data=Object.freeze(r.data),a}matchSegmentAgainstRoute(e,A,i,n,o,a){return lt(this,null,function*(){if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let r=k=>this.createSnapshot(e,i,k.consumedSegments,k.parameters,a),s=yield gm(LsA(A,i,n,e,this.urlSerializer,r,this.abortSignal));if(i.path==="**"&&(A.children={}),!s?.matched)throw new j0(A);e=i._injector??e;let{routes:l}=yield this.getChildConfig(e,i,n),g=i._loadedInjector??e,{parameters:C,consumedSegments:I,remainingSegments:d}=s,h=this.createSnapshot(e,i,I,C,a),{segmentGroup:E,slicedSegments:f}=dU(A,I,d,l);if(f.length===0&&E.hasChildren()){let k=yield this.processChildren(g,l,E,h);return new vl(h,k)}if(l.length===0&&f.length===0)return new vl(h,[]);let m=jc(i)===o,v=yield this.processSegment(g,l,E,f,m?Ri:o,!0,h);return new vl(h,v instanceof vl?[v]:[])})}getChildConfig(e,A,i){return lt(this,null,function*(){if(A.children)return{routes:A.children,injector:e};if(A.loadChildren){if(A._loadedRoutes!==void 0){let o=A._loadedNgModuleFactory;return o&&!A._loadedInjector&&(A._loadedInjector=o.create(e).injector),{routes:A._loadedRoutes,injector:A._loadedInjector}}if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);if(yield gm(SsA(e,A,i,this.urlSerializer,this.abortSignal))){let o=yield this.configLoader.loadChildren(e,A);return A._loadedRoutes=o.routes,A._loadedInjector=o.injector,A._loadedNgModuleFactory=o.factory,o}throw _sA(A)}return{routes:[],injector:e}})}};function HsA(t){t.sort((e,A)=>e.value.outlet===Ri?-1:A.value.outlet===Ri?1:e.value.outlet.localeCompare(A.value.outlet))}function zsA(t){let e=t.value.routeConfig;return e&&e.path===""}function jU(t){let e=[],A=new Set;for(let i of t){if(!zsA(i)){e.push(i);continue}let n=e.find(o=>i.value.routeConfig===o.value.routeConfig);n!==void 0?(n.children.push(...i.children),A.add(n)):e.push(i)}for(let i of A){let n=jU(i.children);e.push(new vl(i.value,n))}return e.filter(i=>!A.has(i))}function PsA(t){return t.data||{}}function jsA(t){return t.resolve||{}}function qsA(t,e,A,i,n,o,a){return Fc(r=>lt(null,null,function*(){let{state:s,tree:l}=yield OsA(t,e,A,i,r.extractedUrl,n,o,a);return Ye(gA({},r),{targetSnapshot:s,urlAfterRedirects:l})}))}function VsA(t){return Fc(e=>{let{targetSnapshot:A,guards:{canActivateChecks:i}}=e;if(!i.length)return oe(e);let n=new Set(i.map(r=>r.route)),o=new Set;for(let r of n)if(!o.has(r))for(let s of qU(r))o.add(s);let a=0;return Lr(o).pipe(xQ(r=>n.has(r)?WsA(r,A,t):(r.data=W7(r,r.parent,t).resolve,oe(void 0))),Ii(()=>a++),Vv(1),Fc(r=>a===o.size?oe(e):ar))})}function qU(t){let e=t.children.map(A=>qU(A)).flat();return[t,...e]}function WsA(t,e,A){let i=t.routeConfig,n=t._resolve;return i?.title!==void 0&&!LU(i)&&(n[bu]=i.title),Lc(()=>(t.data=W7(t,t.parent,A).resolve,ZsA(n,t,e).pipe(we(o=>(t._resolvedData=o,t.data=gA(gA({},t.data),o),null)))))}function ZsA(t,e,A){let i=L7(t);if(i.length===0)return oe({});let n={};return Lr(i).pipe(Fc(o=>XsA(t[o],e,A).pipe($n(),Ii(a=>{if(a instanceof MB)throw ym(new q0,a);n[o]=a}))),Vv(1),we(()=>n),Po(o=>JU(o)?ar:T3(o)))}function XsA(t,e,A){let i=e._environmentInjector,n=kB(t,i),o=n.resolve?n.resolve(e,A):Xa(i,()=>n(e,A));return f1(o)}function BU(t){return Ei(e=>{let A=t(e);return A?Lr(A).pipe(we(()=>e)):oe(e)})}var tM=(()=>{class t{buildTitle(A){let i,n=A.root;for(;n!==void 0;)i=this.getResolvedTitleForRoute(n)??i,n=n.children.find(o=>o.outlet===Ri);return i}getResolvedTitleForRoute(A){return A.data[bu]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:()=>w(VU),providedIn:"root"})}return t})(),VU=(()=>{class t extends tM{title;constructor(A){super(),this.title=A}updateTitle(A){let i=this.buildTitle(A);i!==void 0&&this.title.setTitle(i)}static \u0275fac=function(i){return new(i||t)(Lo(gL))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),w1=new kA("",{factory:()=>({})}),xB=new kA(""),Sm=(()=>{class t{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=w(jF);loadComponent(A,i){return lt(this,null,function*(){if(this.componentLoaders.get(i))return this.componentLoaders.get(i);if(i._loadedComponent)return Promise.resolve(i._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(i);let n=lt(this,null,function*(){try{let o=yield QU(Xa(A,()=>i.loadComponent())),a=yield XU(ZU(o));return this.onLoadEndListener&&this.onLoadEndListener(i),i._loadedComponent=a,a}finally{this.componentLoaders.delete(i)}});return this.componentLoaders.set(i,n),n})}loadChildren(A,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return Promise.resolve({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);let n=lt(this,null,function*(){try{let o=yield WU(i,this.compiler,A,this.onLoadEndListener);return i._loadedRoutes=o.routes,i._loadedInjector=o.injector,i._loadedNgModuleFactory=o.factory,o}finally{this.childrenLoaders.delete(i)}});return this.childrenLoaders.set(i,n),n}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function WU(t,e,A,i){return lt(this,null,function*(){let n=yield QU(Xa(A,()=>t.loadChildren())),o=yield XU(ZU(n)),a;o instanceof OF||Array.isArray(o)?a=o:a=yield e.compileModuleAsync(o),i&&i(t);let r,s,l=!1,g;return Array.isArray(a)?(s=a,l=!0):(r=a.create(A).injector,g=a,s=r.get(xB,[],{optional:!0,self:!0}).flat()),{routes:s.map(eM),injector:r,factory:g}})}function $sA(t){return t&&typeof t=="object"&&"default"in t}function ZU(t){return $sA(t)?t.default:t}function XU(t){return lt(this,null,function*(){return t})}var km=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:()=>w(AlA),providedIn:"root"})}return t})(),AlA=(()=>{class t{shouldProcessUrl(A){return!0}extract(A){return A}merge(A,i){return A}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),iM=new kA(""),nM=new kA("");function $U(t,e,A){let i=t.get(nM),n=t.get(ti);if(!n.startViewTransition||i.skipNextTransition)return i.skipNextTransition=!1,new Promise(l=>setTimeout(l));let o,a=new Promise(l=>{o=l}),r=n.startViewTransition(()=>(o(),elA(t)));r.updateCallbackDone.catch(l=>{}),r.ready.catch(l=>{}),r.finished.catch(l=>{});let{onViewTransitionCreated:s}=i;return s&&Xa(t,()=>s({transition:r,from:e,to:A})),a}function elA(t){return new Promise(e=>{Hn({read:()=>setTimeout(e)},{injector:t})})}var tlA=()=>{},oM=new kA(""),xm=(()=>{class t{currentNavigation=bA(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=bA(null);events=new ie;transitionAbortWithErrorSubject=new ie;configLoader=w(Sm);environmentInjector=w(Gr);destroyRef=w(sr);urlSerializer=w(p1);rootContexts=w(m1);location=w(Uc);inputBindingEnabled=w(Mu,{optional:!0})!==null;titleStrategy=w(tM);options=w(w1,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=w(km);createViewTransition=w(iM,{optional:!0});navigationErrorHandler=w(oM,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>oe(void 0);rootComponentType=null;destroyed=!1;constructor(){let A=n=>this.events.next(new hm(n)),i=n=>this.events.next(new Qm(n));this.configLoader.onLoadEndListener=i,this.configLoader.onLoadStartListener=A,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(A){let i=++this.navigationId;ca(()=>{this.transitions?.next(Ye(gA({},A),{extractedUrl:this.urlHandlingStrategy.extract(A.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:i,routesRecognizeHandler:{},beforeActivateHandler:{}}))})}setupNavigations(A){return this.transitions=new ei(null),this.transitions.pipe(gt(i=>i!==null),Ei(i=>{let n=!1,o=new AbortController,a=()=>!n&&this.currentTransition?.id===i.id;return oe(i).pipe(Ei(r=>{if(this.navigationId>i.id)return this.cancelNavigationTransition(i,"",ss.SupersededByNewNavigation),ar;this.currentTransition=i;let s=this.lastSuccessfulNavigation();this.currentNavigation.set({id:r.id,initialUrl:r.rawUrl,extractedUrl:r.extractedUrl,targetBrowserUrl:typeof r.extras.browserUrl=="string"?this.urlSerializer.parse(r.extras.browserUrl):r.extras.browserUrl,trigger:r.source,extras:r.extras,previousNavigation:s?Ye(gA({},s),{previousNavigation:null}):null,abort:()=>o.abort(),routesRecognizeHandler:r.routesRecognizeHandler,beforeActivateHandler:r.beforeActivateHandler});let l=!A.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),g=r.extras.onSameUrlNavigation??A.onSameUrlNavigation;if(!l&&g!=="reload")return this.events.next(new qc(r.id,this.urlSerializer.serialize(r.rawUrl),"",wB.IgnoredSameUrlNavigation)),r.resolve(!1),ar;if(this.urlHandlingStrategy.shouldProcessUrl(r.rawUrl))return oe(r).pipe(Ei(C=>(this.events.next(new c2(C.id,this.urlSerializer.serialize(C.extractedUrl),C.source,C.restoredState)),C.id!==this.navigationId?ar:Promise.resolve(C))),qsA(this.environmentInjector,this.configLoader,this.rootComponentType,A.config,this.urlSerializer,this.paramsInheritanceStrategy,o.signal),Ii(C=>{i.targetSnapshot=C.targetSnapshot,i.urlAfterRedirects=C.urlAfterRedirects,this.currentNavigation.update(I=>(I.finalUrl=C.urlAfterRedirects,I)),this.events.next(new mu)}),Ei(C=>Lr(i.routesRecognizeHandler.deferredHandle??oe(void 0)).pipe(we(()=>C))),Ii(()=>{let C=new pu(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);this.events.next(C)}));if(l&&this.urlHandlingStrategy.shouldProcessUrl(r.currentRawUrl)){let{id:C,extractedUrl:I,source:d,restoredState:h,extras:E}=r,f=new c2(C,this.urlSerializer.serialize(I),d,h);this.events.next(f);let m=NU(this.rootComponentType,this.environmentInjector).snapshot;return this.currentTransition=i=Ye(gA({},r),{targetSnapshot:m,urlAfterRedirects:I,extras:Ye(gA({},E),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(v=>(v.finalUrl=I,v)),oe(i)}else return this.events.next(new qc(r.id,this.urlSerializer.serialize(r.extractedUrl),"",wB.IgnoredByUrlHandlingStrategy)),r.resolve(!1),ar}),we(r=>{let s=new Im(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);return this.events.next(s),this.currentTransition=i=Ye(gA({},r),{guards:gsA(r.targetSnapshot,r.currentSnapshot,this.rootContexts)}),i}),psA(r=>this.events.next(r)),Ei(r=>{if(i.guardsResult=r.guardsResult,r.guardsResult&&typeof r.guardsResult!="boolean")throw ym(this.urlSerializer,r.guardsResult);let s=new dm(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot,!!r.guardsResult);if(this.events.next(s),!a())return ar;if(!r.guardsResult)return this.cancelNavigationTransition(r,"",ss.GuardRejected),ar;if(r.guards.canActivateChecks.length===0)return oe(r);let l=new Bm(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);if(this.events.next(l),!a())return ar;let g=!1;return oe(r).pipe(VsA(this.paramsInheritanceStrategy),Ii({next:()=>{g=!0;let C=new Em(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);this.events.next(C)},complete:()=>{g||this.cancelNavigationTransition(r,"",ss.NoDataFromResolver)}}))}),BU(r=>{let s=g=>{let C=[];if(g.routeConfig?._loadedComponent)g.component=g.routeConfig?._loadedComponent;else if(g.routeConfig?.loadComponent){let I=g._environmentInjector;C.push(this.configLoader.loadComponent(I,g.routeConfig).then(d=>{g.component=d}))}for(let I of g.children)C.push(...s(I));return C},l=s(r.targetSnapshot.root);return l.length===0?oe(r):Lr(Promise.all(l).then(()=>r))}),BU(()=>this.afterPreactivation()),Ei(()=>{let{currentSnapshot:r,targetSnapshot:s}=i,l=this.createViewTransition?.(this.environmentInjector,r.root,s.root);return l?Lr(l).pipe(we(()=>i)):oe(i)}),uo(1),Ei(r=>{let s=asA(A.routeReuseStrategy,r.targetSnapshot,r.currentRouterState);this.currentTransition=i=r=Ye(gA({},r),{targetRouterState:s}),this.currentNavigation.update(g=>(g.targetRouterState=s,g)),this.events.next(new yB);let l=i.beforeActivateHandler.deferredHandle;return l?Lr(l.then(()=>r)):oe(r)}),Ii(r=>{new z7(A.routeReuseStrategy,i.targetRouterState,i.currentRouterState,s=>this.events.next(s),this.inputBindingEnabled).activate(this.rootContexts),a()&&(n=!0,this.currentNavigation.update(s=>(s.abort=tlA,s)),this.lastSuccessfulNavigation.set(ca(this.currentNavigation)),this.events.next(new Tg(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects))),this.titleStrategy?.updateTitle(r.targetRouterState.snapshot),r.resolve(!0))}),Qt(OU(o.signal).pipe(gt(()=>!n&&!i.targetRouterState),Ii(()=>{this.cancelNavigationTransition(i,o.signal.reason+"",ss.Aborted)}))),Ii({complete:()=>{n=!0}}),Qt(this.transitionAbortWithErrorSubject.pipe(Ii(r=>{throw r}))),H3(()=>{o.abort(),n||this.cancelNavigationTransition(i,"",ss.SupersededByNewNavigation),this.currentTransition?.id===i.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),Po(r=>{if(n=!0,this.destroyed)return i.resolve(!1),ar;if(TU(r))this.events.next(new jl(i.id,this.urlSerializer.serialize(i.extractedUrl),r.message,r.cancellationCode)),lsA(r)?this.events.next(new vB(r.url,r.navigationBehaviorOptions)):i.resolve(!1);else{let s=new u1(i.id,this.urlSerializer.serialize(i.extractedUrl),r,i.targetSnapshot??void 0);try{let l=Xa(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(l instanceof MB){let{message:g,cancellationCode:C}=ym(this.urlSerializer,l);this.events.next(new jl(i.id,this.urlSerializer.serialize(i.extractedUrl),g,C)),this.events.next(new vB(l.redirectTo,l.navigationBehaviorOptions))}else throw this.events.next(s),r}catch(l){this.options.resolveNavigationPromiseOnError?i.resolve(!1):i.reject(l)}}return ar}))}))}cancelNavigationTransition(A,i,n){let o=new jl(A.id,this.urlSerializer.serialize(A.extractedUrl),i,n);this.events.next(o),A.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let A=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),i=ca(this.currentNavigation),n=i?.targetBrowserUrl??i?.extractedUrl;return A.toString()!==n?.toString()&&!i?.extras.skipLocationChange}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function ilA(t){return t!==fB}var AT=new kA("");var eT=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:()=>w(nlA),providedIn:"root"})}return t})(),bm=class{shouldDetach(e){return!1}store(e,A){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,A){return e.routeConfig===A.routeConfig}shouldDestroyInjector(e){return!0}},nlA=(()=>{class t extends bm{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),aM=(()=>{class t{urlSerializer=w(p1);options=w(w1,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=w(Uc);urlHandlingStrategy=w(km);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new ql;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:A,initialUrl:i,targetBrowserUrl:n}){let o=A!==void 0?this.urlHandlingStrategy.merge(A,i):i,a=n??o;return a instanceof ql?this.urlSerializer.serialize(a):a}commitTransition({targetRouterState:A,finalUrl:i,initialUrl:n}){i&&A?(this.currentUrlTree=i,this.rawUrlTree=this.urlHandlingStrategy.merge(i,n),this.routerState=A):this.rawUrlTree=n}routerState=NU(null,w(Gr));getRouterState(){return this.routerState}_stateMemento=this.createStateMemento();get stateMemento(){return this._stateMemento}updateStateMemento(){this._stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}restoredState(){return this.location.getState()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:()=>w(olA),providedIn:"root"})}return t})(),olA=(()=>{class t extends aM{currentPageId=0;lastSuccessfulId=-1;get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(A){return this.location.subscribe(i=>{i.type==="popstate"&&setTimeout(()=>{A(i.url,i.state,"popstate",{replaceUrl:!0})})})}handleRouterEvent(A,i){A instanceof c2?this.updateStateMemento():A instanceof qc?this.commitTransition(i):A instanceof pu?this.urlUpdateStrategy==="eager"&&(i.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof yB?(this.commitTransition(i),this.urlUpdateStrategy==="deferred"&&!i.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof jl&&!RU(A)?this.restoreHistory(i):A instanceof u1?this.restoreHistory(i,!0):A instanceof Tg&&(this.lastSuccessfulId=A.id,this.currentPageId=this.browserPageId)}setBrowserUrl(A,{extras:i,id:n}){let{replaceUrl:o,state:a}=i;if(this.location.isCurrentPathEqualTo(A)||o){let r=this.browserPageId,s=gA(gA({},a),this.generateNgRouterState(n,r));this.location.replaceState(A,"",s)}else{let r=gA(gA({},a),this.generateNgRouterState(n,this.browserPageId+1));this.location.go(A,"",r)}}restoreHistory(A,i=!1){if(this.canceledNavigationResolution==="computed"){let n=this.browserPageId,o=this.currentPageId-n;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===A.finalUrl&&o===0&&(this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(i&&this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}resetInternalState({finalUrl:A}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,A??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(A,i){return this.canceledNavigationResolution==="computed"?{navigationId:A,\u0275routerPageId:i}:{navigationId:A}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function _m(t,e){t.events.pipe(gt(A=>A instanceof Tg||A instanceof jl||A instanceof u1||A instanceof qc),we(A=>A instanceof Tg||A instanceof qc?0:(A instanceof jl?A.code===ss.Redirect||A.code===ss.SupersededByNewNavigation:!1)?2:1),gt(A=>A!==2),uo(1)).subscribe(()=>{e()})}var ls=(()=>{class t{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=w(YF);stateManager=w(aM);options=w(w1,{optional:!0})||{};pendingTasks=w(UF);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=w(xm);urlSerializer=w(p1);location=w(Uc);urlHandlingStrategy=w(km);injector=w(Gr);_events=new ie;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=w(eT);injectorCleanup=w(AT,{optional:!0});onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=w(xB,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!w(Mu,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:A=>{}}),this.subscribeToNavigationEvents()}eventsSubscription=new bo;subscribeToNavigationEvents(){let A=this.navigationTransitions.events.subscribe(i=>{try{let n=this.navigationTransitions.currentTransition,o=ca(this.navigationTransitions.currentNavigation);if(n!==null&&o!==null){if(this.stateManager.handleRouterEvent(i,o),i instanceof jl&&i.code!==ss.Redirect&&i.code!==ss.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof Tg)this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);else if(i instanceof vB){let a=i.navigationBehaviorOptions,r=this.urlHandlingStrategy.merge(i.url,n.currentRawUrl),s=gA({scroll:n.extras.scroll,browserUrl:n.extras.browserUrl,info:n.extras.info,skipLocationChange:n.extras.skipLocationChange,replaceUrl:n.extras.replaceUrl||this.urlUpdateStrategy==="eager"||ilA(n.source)},a);this.scheduleNavigation(r,fB,null,s,{resolve:n.resolve,reject:n.reject,promise:n.promise})}}nsA(i)&&this._events.next(i)}catch(n){this.navigationTransitions.transitionAbortWithErrorSubject.next(n)}});this.eventsSubscription.add(A)}resetRootComponentType(A){this.routerState.root.component=A,this.navigationTransitions.rootComponentType=A}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),fB,this.stateManager.restoredState(),{replaceUrl:!0})}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((A,i,n,o)=>{this.navigateToSyncWithBrowser(A,n,i,o)})}navigateToSyncWithBrowser(A,i,n,o){let a=n?.navigationId?n:null;if(n){let s=gA({},n);delete s.navigationId,delete s.\u0275routerPageId,Object.keys(s).length!==0&&(o.state=s)}let r=this.parseUrl(A);this.scheduleNavigation(r,i,a,o).catch(s=>{this.disposed||this.injector.get(Wv)(s)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return ca(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(A){this.config=A.map(eM),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(A,i={}){let{relativeTo:n,queryParams:o,fragment:a,queryParamsHandling:r,preserveFragment:s}=i,l=s?this.currentUrlTree.fragment:a,g=null;switch(r??this.options.defaultQueryParamsHandling){case"merge":g=gA(gA({},this.currentUrlTree.queryParams),o);break;case"preserve":g=this.currentUrlTree.queryParams;break;default:g=o||null}g!==null&&(g=this.removeEmptyProps(g));let C;try{let I=n?n.snapshot:this.routerState.snapshot.root;C=SU(I)}catch(I){(typeof A[0]!="string"||A[0][0]!=="/")&&(A=[]),C=this.currentUrlTree.root}return kU(C,A,g,l??null,this.urlSerializer)}navigateByUrl(A,i={skipLocationChange:!1}){let n=mB(A)?A:this.parseUrl(A),o=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(o,fB,null,i)}navigate(A,i={skipLocationChange:!1}){return alA(A),this.navigateByUrl(this.createUrlTree(A,i),i)}serializeUrl(A){return this.urlSerializer.serialize(A)}parseUrl(A){try{return this.urlSerializer.parse(A)}catch(i){return this.console.warn(FF(4018,!1)),this.urlSerializer.parse("/")}}isActive(A,i){let n;if(i===!0?n=gA({},fU):i===!1?n=gA({},G7):n=gA(gA({},G7),i),mB(A))return lU(this.currentUrlTree,A,n);let o=this.parseUrl(A);return lU(this.currentUrlTree,o,n)}removeEmptyProps(A){return Object.entries(A).reduce((i,[n,o])=>(o!=null&&(i[n]=o),i),{})}scheduleNavigation(A,i,n,o,a){if(this.disposed)return Promise.resolve(!1);let r,s,l;a?(r=a.resolve,s=a.reject,l=a.promise):l=new Promise((C,I)=>{r=C,s=I});let g=this.pendingTasks.add();return _m(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(g))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:A,extras:o,resolve:r,reject:s,promise:l,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),l.catch(Promise.reject.bind(Promise))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function alA(t){for(let e=0;e{class t{router;injector;preloadingStrategy;loader;subscription;constructor(A,i,n,o){this.router=A,this.injector=i,this.preloadingStrategy=n,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(gt(A=>A instanceof Tg),xQ(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription?.unsubscribe()}processRoutes(A,i){let n=[];for(let o of i){o.providers&&!o._injector&&(o._injector=W3(o.providers,A,""));let a=o._injector??A;o._loadedNgModuleFactory&&!o._loadedInjector&&(o._loadedInjector=o._loadedNgModuleFactory.create(a).injector);let r=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&n.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&n.push(this.processRoutes(r,o.children??o._loadedRoutes))}return Lr(n).pipe(qv())}preloadConfig(A,i){return this.preloadingStrategy.preload(i,()=>{if(A.destroyed)return oe(null);let n;i.loadChildren&&i.canLoad===void 0?n=Lr(this.loader.loadChildren(A,i)):n=oe(null);let o=n.pipe(Fc(a=>a===null?oe(void 0):(i._loadedRoutes=a.routes,i._loadedInjector=a.injector,i._loadedNgModuleFactory=a.factory,this.processRoutes(a.injector??A,a.routes))));if(i.loadComponent&&!i._loadedComponent){let a=this.loader.loadComponent(A,i);return Lr([o,a]).pipe(qv())}else return o})}static \u0275fac=function(i){return new(i||t)(Lo(ls),Lo(Gr),Lo(ku),Lo(Sm))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),iT=new kA(""),slA=(()=>{class t{options;routerEventsSubscription;scrollEventsSubscription;lastId=0;lastSource=fB;restoredId=0;store={};urlSerializer=w(p1);zone=w(qe);viewportScroller=w(tb);transitions=w(xm);constructor(A){this.options=A,this.options.scrollPositionRestoration||="disabled",this.options.anchorScrolling||="disabled"}init(){this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(A=>{A instanceof c2?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=A.navigationTrigger,this.restoredId=A.restoredState?A.restoredState.navigationId:0):A instanceof Tg?(this.lastId=A.id,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.urlAfterRedirects).fragment)):A instanceof qc&&A.code===wB.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(A=>{if(!(A instanceof DB)||A.scrollBehavior==="manual")return;let i={behavior:"instant"};A.position?this.options.scrollPositionRestoration==="top"?this.viewportScroller.scrollToPosition([0,0],i):this.options.scrollPositionRestoration==="enabled"&&this.viewportScroller.scrollToPosition(A.position,i):A.anchor&&this.options.anchorScrolling==="enabled"?this.viewportScroller.scrollToAnchor(A.anchor):this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.scrollToPosition([0,0])})}scheduleScrollEvent(A,i){let n=ca(this.transitions.currentNavigation)?.extras.scroll;this.zone.runOutsideAngular(()=>lt(this,null,function*(){yield new Promise(o=>{setTimeout(o),typeof requestAnimationFrame<"u"&&requestAnimationFrame(o)}),this.zone.run(()=>{this.transitions.events.next(new DB(A,this.lastSource==="popstate"?this.store[this.restoredId]:null,i,n))})}))}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static \u0275fac=function(i){V3()};static \u0275prov=qA({token:t,factory:t.\u0275fac})}return t})();function llA(){return w(ls).routerState.root}function xu(t,e){return{\u0275kind:t,\u0275providers:e}}function glA(){let t=w(Dt);return e=>{let A=t.get(K0);if(e!==A.components[0])return;let i=t.get(ls),n=t.get(nT);t.get(sM)===1&&i.initialNavigation(),t.get(rT,null,{optional:!0})?.setUpPreloading(),t.get(iT,null,{optional:!0})?.init(),i.resetRootComponentType(A.componentTypes[0]),n.closed||(n.next(),n.complete(),n.unsubscribe())}}var nT=new kA("",{factory:()=>new ie}),sM=new kA("",{factory:()=>1});function oT(){let t=[{provide:JF,useValue:!0},{provide:sM,useValue:0},$v(()=>{let e=w(Dt);return e.get(eL,Promise.resolve()).then(()=>new Promise(i=>{let n=e.get(ls),o=e.get(nT);_m(n,()=>{i(!0)}),e.get(xm).afterPreactivation=()=>(i(!0),o.closed?oe(void 0):o),n.initialNavigation()}))})];return xu(2,t)}function aT(){let t=[$v(()=>{w(ls).setUpLocationChangeListener()}),{provide:sM,useValue:2}];return xu(3,t)}var rT=new kA("");function sT(t){return xu(0,[{provide:rT,useExisting:tT},{provide:ku,useExisting:t}])}function lT(){return xu(8,[$7,{provide:Mu,useExisting:$7}])}function gT(t){q3("NgRouterViewTransitions");let e=[{provide:iM,useValue:$U},{provide:nM,useValue:gA({skipNextTransition:!!t?.skipInitialTransition},t)}];return xu(9,e)}var cT=[Uc,{provide:p1,useClass:q0},ls,m1,{provide:Vs,useFactory:llA},Sm,[]],Rm=(()=>{class t{constructor(){}static forRoot(A,i){return{ngModule:t,providers:[cT,[],{provide:xB,multi:!0,useValue:A},[],i?.errorHandler?{provide:oM,useValue:i.errorHandler}:[],{provide:w1,useValue:i||{}},i?.useHash?ClA():IlA(),clA(),i?.preloadingStrategy?sT(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?dlA(i):[],i?.bindToComponentInputs?lT().\u0275providers:[],i?.enableViewTransitions?gT().\u0275providers:[],BlA()]}}static forChild(A){return{ngModule:t,providers:[{provide:xB,multi:!0,useValue:A}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();function clA(){return{provide:iT,useFactory:()=>{let t=w(tb),e=w(w1);return e.scrollOffset&&t.setOffset(e.scrollOffset),new slA(e)}}}function ClA(){return{provide:eb,useClass:iL}}function IlA(){return{provide:eb,useClass:tL}}function dlA(t){return[t.initialNavigation==="disabled"?aT().\u0275providers:[],t.initialNavigation==="enabledBlocking"?oT().\u0275providers:[]]}var rM=new kA("");function BlA(){return[{provide:rM,useFactory:glA},{provide:HF,multi:!0,useExisting:rM}]}var QlA=["*"];var ulA=new kA("MAT_CARD_CONFIG"),Nm=(()=>{class t{appearance;constructor(){let A=w(ulA,{optional:!0});this.appearance=A?.appearance||"raised"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(i,n){i&2&&RA("mat-mdc-card-outlined",n.appearance==="outlined")("mdc-card--outlined",n.appearance==="outlined")("mat-mdc-card-filled",n.appearance==="filled")("mdc-card--filled",n.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:QlA,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),Ve(0))},styles:[`.mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:"";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end} +`],encapsulation:2,changeDetection:0})}return t})();var CT=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var _u=class{};function Ru(t){return t&&typeof t.connect=="function"&&!(t instanceof SF)}var Jg=(function(t){return t[t.REPLACED=0]="REPLACED",t[t.INSERTED=1]="INSERTED",t[t.MOVED=2]="MOVED",t[t.REMOVED=3]="REMOVED",t})(Jg||{}),Fm=class{viewCacheSize=20;_viewCache=[];applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let l,g;if(a.previousIndex==null){let C=()=>i(a,r,s);l=this._insertView(C,s,A,n(a)),g=l?Jg.INSERTED:Jg.REPLACED}else s==null?(this._detachAndCacheView(r,A),g=Jg.REMOVED):(l=this._moveView(r,s,A,n(a)),g=Jg.MOVED);o&&o({context:l?.context,operation:g,record:a})})}detach(){for(let e of this._viewCache)e.destroy();this._viewCache=[]}_insertView(e,A,i,n){let o=this._insertViewFromCache(A,i);if(o){o.context.$implicit=n;return}let a=e();return i.createEmbeddedView(a.templateRef,a.context,a.index)}_detachAndCacheView(e,A){let i=A.detach(e);this._maybeCacheView(i,A)}_moveView(e,A,i,n){let o=i.get(e);return i.move(o,A),o.context.$implicit=n,o}_maybeCacheView(e,A){if(this._viewCache.length{let l,g;if(a.previousIndex==null){let C=i(a,r,s);l=A.createEmbeddedView(C.templateRef,C.context,C.index),g=Jg.INSERTED}else s==null?(A.remove(r),g=Jg.REMOVED):(l=A.get(r),A.move(l,s),g=Jg.MOVED);o&&o({context:l?.context,operation:g,record:a})})}detach(){}};var V0=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected=null;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new ie;constructor(e=!1,A,i=!0,n){this._multiple=e,this._emitChanges=i,this.compareWith=n,A&&A.length&&(e?A.forEach(o=>this._markSelected(o)):this._markSelected(A[0]),this._selectedToEmit.length=0)}select(...e){this._verifyValueAssignment(e),e.forEach(i=>this._markSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}deselect(...e){this._verifyValueAssignment(e),e.forEach(i=>this._unmarkSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}setSelection(...e){this._verifyValueAssignment(e);let A=this.selected,i=new Set(e.map(o=>this._getConcreteValue(o)));e.forEach(o=>this._markSelected(o)),A.filter(o=>!i.has(this._getConcreteValue(o,i))).forEach(o=>this._unmarkSelected(o));let n=this._hasQueuedChanges();return this._emitChangeEvent(),n}toggle(e){return this.isSelected(e)?this.deselect(e):this.select(e)}clear(e=!0){this._unmarkAll();let A=this._hasQueuedChanges();return e&&this._emitChangeEvent(),A}isSelected(e){return this._selection.has(this._getConcreteValue(e))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(e){this._multiple&&this.selected&&this._selected.sort(e)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(e){e=this._getConcreteValue(e),this.isSelected(e)||(this._multiple||this._unmarkAll(),this.isSelected(e)||this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))}_unmarkSelected(e){e=this._getConcreteValue(e),this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))}_unmarkAll(){this.isEmpty()||this._selection.forEach(e=>this._unmarkSelected(e))}_verifyValueAssignment(e){e.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(e,A){if(this.compareWith){A=A??this._selection;for(let i of A)if(this.compareWith(e,i))return i;return e}else return e}};var Gm=(()=>{class t{_animationsDisabled=An();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(i,n){i&2&&RA("mat-pseudo-checkbox-indeterminate",n.state==="indeterminate")("mat-pseudo-checkbox-checked",n.state==="checked")("mat-pseudo-checkbox-disabled",n.disabled)("mat-pseudo-checkbox-minimal",n.appearance==="minimal")("mat-pseudo-checkbox-full",n.appearance==="full")("_mat-animation-noopable",n._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px} +`],encapsulation:2,changeDetection:0})}return t})();var flA=["button"],plA=["*"];function mlA(t,e){if(t&1&&(B(0,"div",2),QA(1,"mat-pseudo-checkbox",6),Q()),t&2){let A=p();u(),H("disabled",A.disabled)}}var IT=new kA("MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS",{providedIn:"root",factory:()=>({hideSingleSelectionIndicator:!1,hideMultipleSelectionIndicator:!1,disabledInteractive:!1})}),dT=new kA("MatButtonToggleGroup"),wlA={provide:as,useExisting:Ja(()=>lM),multi:!0},Km=class{source;value;constructor(e,A){this.source=e,this.value=A}},lM=(()=>{class t{_changeDetector=w(wt);_dir=w(fo,{optional:!0});_multiple=!1;_disabled=!1;_disabledInteractive=!1;_selectionModel;_rawValue;_controlValueAccessorChangeFn=()=>{};_onTouched=()=>{};_buttonToggles;appearance;get name(){return this._name}set name(A){this._name=A,this._markButtonsForCheck()}_name=w(In).getId("mat-button-toggle-group-");vertical=!1;get value(){let A=this._selectionModel?this._selectionModel.selected:[];return this.multiple?A.map(i=>i.value):A[0]?A[0].value:void 0}set value(A){this._setSelectionByValue(A),this.valueChange.emit(this.value)}valueChange=new LA;get selected(){let A=this._selectionModel?this._selectionModel.selected:[];return this.multiple?A:A[0]||null}get multiple(){return this._multiple}set multiple(A){this._multiple=A,this._markButtonsForCheck()}get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._markButtonsForCheck()}get disabledInteractive(){return this._disabledInteractive}set disabledInteractive(A){this._disabledInteractive=A,this._markButtonsForCheck()}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}change=new LA;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._markButtonsForCheck()}_hideSingleSelectionIndicator;get hideMultipleSelectionIndicator(){return this._hideMultipleSelectionIndicator}set hideMultipleSelectionIndicator(A){this._hideMultipleSelectionIndicator=A,this._markButtonsForCheck()}_hideMultipleSelectionIndicator;constructor(){let A=w(IT,{optional:!0});this.appearance=A&&A.appearance?A.appearance:"standard",this._hideSingleSelectionIndicator=A?.hideSingleSelectionIndicator??!1,this._hideMultipleSelectionIndicator=A?.hideMultipleSelectionIndicator??!1}ngOnInit(){this._selectionModel=new V0(this.multiple,void 0,!1)}ngAfterContentInit(){this._selectionModel.select(...this._buttonToggles.filter(A=>A.checked)),this.multiple||this._initializeTabIndex()}writeValue(A){this.value=A,this._changeDetector.markForCheck()}registerOnChange(A){this._controlValueAccessorChangeFn=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}_keydown(A){if(this.multiple||this.disabled||Qa(A))return;let n=A.target.id,o=this._buttonToggles.toArray().findIndex(r=>r.buttonId===n),a=null;switch(A.keyCode){case 32:case 13:a=this._buttonToggles.get(o)||null;break;case 38:a=this._getNextButton(o,-1);break;case 37:a=this._getNextButton(o,this.dir==="ltr"?-1:1);break;case 40:a=this._getNextButton(o,1);break;case 39:a=this._getNextButton(o,this.dir==="ltr"?1:-1);break;default:return}a&&(A.preventDefault(),a._onButtonClick(),a.focus())}_emitChangeEvent(A){let i=new Km(A,this.value);this._rawValue=i.value,this._controlValueAccessorChangeFn(i.value),this.change.emit(i)}_syncButtonToggle(A,i,n=!1,o=!1){!this.multiple&&this.selected&&!A.checked&&(this.selected.checked=!1),this._selectionModel?i?this._selectionModel.select(A):this._selectionModel.deselect(A):o=!0,o?Promise.resolve().then(()=>this._updateModelValue(A,n)):this._updateModelValue(A,n)}_isSelected(A){return this._selectionModel&&this._selectionModel.isSelected(A)}_isPrechecked(A){return typeof this._rawValue>"u"?!1:this.multiple&&Array.isArray(this._rawValue)?this._rawValue.some(i=>A.value!=null&&i===A.value):A.value===this._rawValue}_initializeTabIndex(){if(this._buttonToggles.forEach(A=>{A.tabIndex=-1}),this.selected)this.selected.tabIndex=0;else for(let A=0;Athis._selectValue(n,i))):(this._clearSelection(),this._selectValue(A,i)),!this.multiple&&i.every(n=>n.tabIndex===-1)){for(let n of i)if(!n.disabled){n.tabIndex=0;break}}}_clearSelection(){this._selectionModel.clear(),this._buttonToggles.forEach(A=>{A.checked=!1,this.multiple||(A.tabIndex=-1)})}_selectValue(A,i){for(let n of i)if(n.value===A){n.checked=!0,this._selectionModel.select(n),this.multiple||(n.tabIndex=0);break}}_updateModelValue(A,i){i&&this._emitChangeEvent(A),this.valueChange.emit(this.value)}_markButtonsForCheck(){this._buttonToggles?.forEach(A=>A._markForCheck())}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-button-toggle-group"]],contentQueries:function(i,n,o){if(i&1&&jo(o,Um,5),i&2){let a;ae(a=re())&&(n._buttonToggles=a)}},hostAttrs:[1,"mat-button-toggle-group"],hostVars:6,hostBindings:function(i,n){i&1&&U("keydown",function(a){return n._keydown(a)}),i&2&&(te("role",n.multiple?"group":"radiogroup")("aria-disabled",n.disabled),RA("mat-button-toggle-vertical",n.vertical)("mat-button-toggle-group-appearance-standard",n.appearance==="standard"))},inputs:{appearance:"appearance",name:"name",vertical:[2,"vertical","vertical",Be],value:"value",multiple:[2,"multiple","multiple",Be],disabled:[2,"disabled","disabled",Be],disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",Be],hideMultipleSelectionIndicator:[2,"hideMultipleSelectionIndicator","hideMultipleSelectionIndicator",Be]},outputs:{valueChange:"valueChange",change:"change"},exportAs:["matButtonToggleGroup"],features:[Bt([wlA,{provide:dT,useExisting:t}])]})}return t})(),Um=(()=>{class t{_changeDetectorRef=w(wt);_elementRef=w(ce);_focusMonitor=w($a);_idGenerator=w(In);_animationDisabled=An();_checked=!1;ariaLabel;ariaLabelledby=null;_buttonElement;buttonToggleGroup;get buttonId(){return`${this.id}-button`}id;name;value;get tabIndex(){return this._tabIndex()}set tabIndex(A){this._tabIndex.set(A)}_tabIndex;disableRipple=!1;get appearance(){return this.buttonToggleGroup?this.buttonToggleGroup.appearance:this._appearance}set appearance(A){this._appearance=A}_appearance;get checked(){return this.buttonToggleGroup?this.buttonToggleGroup._isSelected(this):this._checked}set checked(A){A!==this._checked&&(this._checked=A,this.buttonToggleGroup&&this.buttonToggleGroup._syncButtonToggle(this,this._checked),this._changeDetectorRef.markForCheck())}get disabled(){return this._disabled||this.buttonToggleGroup&&this.buttonToggleGroup.disabled}set disabled(A){this._disabled=A}_disabled=!1;get disabledInteractive(){return this._disabledInteractive||this.buttonToggleGroup!==null&&this.buttonToggleGroup.disabledInteractive}set disabledInteractive(A){this._disabledInteractive=A}_disabledInteractive;change=new LA;constructor(){w(eo).load(lr);let A=w(dT,{optional:!0}),i=w(new Us("tabindex"),{optional:!0})||"",n=w(IT,{optional:!0});this._tabIndex=bA(parseInt(i)||0),this.buttonToggleGroup=A,this._appearance=n&&n.appearance?n.appearance:"standard",this._disabledInteractive=n?.disabledInteractive??!1}ngOnInit(){let A=this.buttonToggleGroup;this.id=this.id||this._idGenerator.getId("mat-button-toggle-"),A&&(A._isPrechecked(this)?this.checked=!0:A._isSelected(this)!==this._checked&&A._syncButtonToggle(this,this._checked))}ngAfterViewInit(){this._animationDisabled||this._elementRef.nativeElement.classList.add("mat-button-toggle-animations-enabled"),this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){let A=this.buttonToggleGroup;this._focusMonitor.stopMonitoring(this._elementRef),A&&A._isSelected(this)&&A._syncButtonToggle(this,!1,!1,!0)}focus(A){this._buttonElement.nativeElement.focus(A)}_onButtonClick(){if(this.disabled)return;let A=this.isSingleSelector()?!0:!this._checked;if(A!==this._checked&&(this._checked=A,this.buttonToggleGroup&&(this.buttonToggleGroup._syncButtonToggle(this,this._checked,!0),this.buttonToggleGroup._onTouched())),this.isSingleSelector()){let i=this.buttonToggleGroup._buttonToggles.find(n=>n.tabIndex===0);i&&(i.tabIndex=-1),this.tabIndex=0}this.change.emit(new Km(this,this.value))}_markForCheck(){this._changeDetectorRef.markForCheck()}_getButtonName(){return this.isSingleSelector()?this.buttonToggleGroup.name:this.name||null}isSingleSelector(){return this.buttonToggleGroup&&!this.buttonToggleGroup.multiple}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-button-toggle"]],viewQuery:function(i,n){if(i&1&&Jt(flA,5),i&2){let o;ae(o=re())&&(n._buttonElement=o.first)}},hostAttrs:["role","presentation",1,"mat-button-toggle"],hostVars:14,hostBindings:function(i,n){i&1&&U("focus",function(){return n.focus()}),i&2&&(te("aria-label",null)("aria-labelledby",null)("id",n.id)("name",null),RA("mat-button-toggle-standalone",!n.buttonToggleGroup)("mat-button-toggle-checked",n.checked)("mat-button-toggle-disabled",n.disabled)("mat-button-toggle-disabled-interactive",n.disabledInteractive)("mat-button-toggle-appearance-standard",n.appearance==="standard"))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],id:"id",name:"name",value:"value",tabIndex:"tabIndex",disableRipple:[2,"disableRipple","disableRipple",Be],appearance:"appearance",checked:[2,"checked","checked",Be],disabled:[2,"disabled","disabled",Be],disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be]},outputs:{change:"change"},exportAs:["matButtonToggle"],ngContentSelectors:plA,decls:7,vars:13,consts:[["button",""],["type","button",1,"mat-button-toggle-button","mat-focus-indicator",3,"click","id","disabled"],[1,"mat-button-toggle-checkbox-wrapper"],[1,"mat-button-toggle-label-content"],[1,"mat-button-toggle-focus-overlay"],["matRipple","",1,"mat-button-toggle-ripple",3,"matRippleTrigger","matRippleDisabled"],["state","checked","aria-hidden","true","appearance","minimal",3,"disabled"]],template:function(i,n){if(i&1&&(Rt(),B(0,"button",1,0),U("click",function(){return n._onButtonClick()}),O(2,mlA,2,1,"div",2),B(3,"span",3),Ve(4),Q()(),QA(5,"span",4)(6,"span",5)),i&2){let o=Qi(1);H("id",n.buttonId)("disabled",n.disabled&&!n.disabledInteractive||null),te("role",n.isSingleSelector()?"radio":"button")("tabindex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex)("aria-pressed",n.isSingleSelector()?null:n.checked)("aria-checked",n.isSingleSelector()?n.checked:null)("name",n._getButtonName())("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby)("aria-disabled",n.disabled&&n.disabledInteractive?"true":null),u(2),Y(n.buttonToggleGroup&&(!n.buttonToggleGroup.multiple&&!n.buttonToggleGroup.hideSingleSelectionIndicator||n.buttonToggleGroup.multiple&&!n.buttonToggleGroup.hideMultipleSelectionIndicator)?2:-1),u(4),H("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)}},dependencies:[rs,Gm],styles:[`.mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:var(--mat-button-toggle-legacy-shape);transform:translateZ(0)}.mat-button-toggle-standalone:not([class*=mat-elevation-z]),.mat-button-toggle-group:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}@media(forced-colors: active){.mat-button-toggle-standalone,.mat-button-toggle-group{outline:solid 1px}}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard .mat-pseudo-checkbox,.mat-button-toggle-group-appearance-standard .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard:not([class*=mat-elevation-z]),.mat-button-toggle-group-appearance-standard:not([class*=mat-elevation-z]){box-shadow:none}@media(forced-colors: active){.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{outline:0}}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative;color:var(--mat-button-toggle-legacy-text-color);font-family:var(--mat-button-toggle-legacy-label-text-font);font-size:var(--mat-button-toggle-legacy-label-text-size);line-height:var(--mat-button-toggle-legacy-label-text-line-height);font-weight:var(--mat-button-toggle-legacy-label-text-weight);letter-spacing:var(--mat-button-toggle-legacy-label-text-tracking);--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-legacy-selected-state-text-color)}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-legacy-focus-state-layer-opacity)}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle-checkbox-wrapper{display:inline-block;justify-content:flex-start;align-items:center;width:0;height:18px;line-height:18px;overflow:hidden;box-sizing:border-box;position:absolute;top:50%;left:16px;transform:translate3d(0, -50%, 0)}[dir=rtl] .mat-button-toggle-checkbox-wrapper{left:auto;right:16px}.mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:12px}[dir=rtl] .mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:auto;right:12px}.mat-button-toggle-checked .mat-button-toggle-checkbox-wrapper{width:18px}.mat-button-toggle-animations-enabled .mat-button-toggle-checkbox-wrapper{transition:width 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-checkbox-wrapper{transition:none}.mat-button-toggle-checked{color:var(--mat-button-toggle-legacy-selected-state-text-color);background-color:var(--mat-button-toggle-legacy-selected-state-background-color)}.mat-button-toggle-disabled{pointer-events:none;color:var(--mat-button-toggle-legacy-disabled-state-text-color);background-color:var(--mat-button-toggle-legacy-disabled-state-background-color);--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-legacy-disabled-state-text-color)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:var(--mat-button-toggle-legacy-disabled-selected-state-background-color)}.mat-button-toggle-disabled-interactive{pointer-events:auto}.mat-button-toggle-appearance-standard{color:var(--mat-button-toggle-text-color, var(--mat-sys-on-surface));background-color:var(--mat-button-toggle-background-color, transparent);font-family:var(--mat-button-toggle-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-toggle-label-text-size, var(--mat-sys-label-large-size));line-height:var(--mat-button-toggle-label-text-line-height, var(--mat-sys-label-large-line-height));font-weight:var(--mat-button-toggle-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-button-toggle-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:none;border-top:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{color:var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-toggle-selected-state-background-color, var(--mat-sys-secondary-container))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{color:var(--mat-button-toggle-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-state-background-color, transparent)}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled.mat-button-toggle-checked{color:var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-selected-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:var(--mat-button-toggle-state-layer-color, var(--mat-sys-on-surface))}.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-button-toggle-appearance-standard.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}@media(hover: none){.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;user-select:none;display:inline-block;padding:0 16px;line-height:var(--mat-button-toggle-legacy-height);position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px;line-height:var(--mat-button-toggle-height, 40px)}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;pointer-events:none;opacity:0;background-color:var(--mat-button-toggle-legacy-state-layer-color)}@media(forced-colors: active){.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 500px;opacity:.5;height:0}.mat-button-toggle-checked:hover .mat-button-toggle-focus-overlay{opacity:.6}.mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-animations-enabled .mat-button-toggle-button{transition:padding 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-button{transition:none}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}.mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:30px}[dir=rtl] .mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:0;padding-right:30px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{--mat-focus-indicator-border-radius: var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))} +`],encapsulation:2,changeDetection:0})}return t})(),BT=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Yc,Um,fi]})}return t})();var DlA=20,Wc=(()=>{class t{_ngZone=w(qe);_platform=w(li);_renderer=w(Kr).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new ie;_scrolledCount=0;scrollContainers=new Map;register(A){this.scrollContainers.has(A)||this.scrollContainers.set(A,A.elementScrolled().subscribe(()=>this._scrolled.next(A)))}deregister(A){let i=this.scrollContainers.get(A);i&&(i.unsubscribe(),this.scrollContainers.delete(A))}scrolled(A=DlA){return this._platform.isBrowser?new vi(i=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let n=A>0?this._scrolled.pipe(jI(A)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{n.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):oe()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((A,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(A,i){let n=this.getAncestorScrollContainers(A);return this.scrolled(i).pipe(gt(o=>!o||n.indexOf(o)>-1))}getAncestorScrollContainers(A){let i=[];return this.scrollContainers.forEach((n,o)=>{this._scrollableContainsElement(o,A)&&i.push(o)}),i}_scrollableContainsElement(A,i){let n=Ds(i),o=A.getElementRef().nativeElement;do if(n==o)return!0;while(n=n.parentElement);return!1}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),W0=(()=>{class t{elementRef=w(ce);scrollDispatcher=w(Wc);ngZone=w(qe);dir=w(fo,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new ie;_renderer=w(Pi);_cleanupScroll;_elementScrolled=new ie;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",A=>this._elementScrolled.next(A))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(A){let i=this.elementRef.nativeElement,n=this.dir&&this.dir.value=="rtl";A.left==null&&(A.left=n?A.end:A.start),A.right==null&&(A.right=n?A.start:A.end),A.bottom!=null&&(A.top=i.scrollHeight-i.clientHeight-A.bottom),n&&rB()!=Ng.NORMAL?(A.left!=null&&(A.right=i.scrollWidth-i.clientWidth-A.left),rB()==Ng.INVERTED?A.left=A.right:rB()==Ng.NEGATED&&(A.left=A.right?-A.right:A.right)):A.right!=null&&(A.left=i.scrollWidth-i.clientWidth-A.right),this._applyScrollToOptions(A)}_applyScrollToOptions(A){let i=this.elementRef.nativeElement;bp()?i.scrollTo(A):(A.top!=null&&(i.scrollTop=A.top),A.left!=null&&(i.scrollLeft=A.left))}measureScrollOffset(A){let i="left",n="right",o=this.elementRef.nativeElement;if(A=="top")return o.scrollTop;if(A=="bottom")return o.scrollHeight-o.clientHeight-o.scrollTop;let a=this.dir&&this.dir.value=="rtl";return A=="start"?A=a?n:i:A=="end"&&(A=a?i:n),a&&rB()==Ng.INVERTED?A==i?o.scrollWidth-o.clientWidth-o.scrollLeft:o.scrollLeft:a&&rB()==Ng.NEGATED?A==i?o.scrollLeft+o.scrollWidth-o.clientWidth:-o.scrollLeft:A==i?o.scrollLeft:o.scrollWidth-o.clientWidth-o.scrollLeft}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return t})(),ylA=20,Ms=(()=>{class t{_platform=w(li);_listeners;_viewportSize=null;_change=new ie;_document=w(ti);constructor(){let A=w(qe),i=w(Kr).createRenderer(null,null);A.runOutsideAngular(()=>{if(this._platform.isBrowser){let n=o=>this._change.next(o);this._listeners=[i.listen("window","resize",n),i.listen("window","orientationchange",n)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(A=>A()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let A={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),A}getViewportRect(){let A=this.getViewportScrollPosition(),{width:i,height:n}=this.getViewportSize();return{top:A.top,left:A.left,bottom:A.top+n,right:A.left+i,height:n,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let A=this._document,i=this._getWindow(),n=A.documentElement,o=n.getBoundingClientRect(),a=-o.top||A.body?.scrollTop||i.scrollY||n.scrollTop||0,r=-o.left||A.body?.scrollLeft||i.scrollX||n.scrollLeft||0;return{top:a,left:r}}change(A=ylA){return A>0?this._change.pipe(jI(A)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let A=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:A.innerWidth,height:A.innerHeight}:{width:0,height:0}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var ET=new kA("CDK_VIRTUAL_SCROLL_VIEWPORT");var Vc=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})(),Tm=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi,Vc,fi,Vc]})}return t})();var Nu=class{_attachedHost=null;attach(e){return this._attachedHost=e,e.attach(this)}detach(){let e=this._attachedHost;e!=null&&(this._attachedHost=null,e.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(e){this._attachedHost=e}},Ss=class extends Nu{component;viewContainerRef;injector;projectableNodes;bindings;constructor(e,A,i,n,o){super(),this.component=e,this.viewContainerRef=A,this.injector=i,this.projectableNodes=n,this.bindings=o||null}},Jr=class extends Nu{templateRef;viewContainerRef;context;injector;constructor(e,A,i,n){super(),this.templateRef=e,this.viewContainerRef=A,this.context=i,this.injector=n}get origin(){return this.templateRef.elementRef}attach(e,A=this.context){return this.context=A,super.attach(e)}detach(){return this.context=void 0,super.detach()}},gM=class extends Nu{element;constructor(e){super(),this.element=e instanceof ce?e.nativeElement:e}},C2=class{_attachedPortal=null;_disposeFn=null;_isDisposed=!1;hasAttached(){return!!this._attachedPortal}attach(e){if(e instanceof Ss)return this._attachedPortal=e,this.attachComponentPortal(e);if(e instanceof Jr)return this._attachedPortal=e,this.attachTemplatePortal(e);if(this.attachDomPortal&&e instanceof gM)return this._attachedPortal=e,this.attachDomPortal(e)}attachDomPortal=null;detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(e){this._disposeFn=e}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}},Fu=class extends C2{outletElement;_appRef;_defaultInjector;constructor(e,A,i){super(),this.outletElement=e,this._appRef=A,this._defaultInjector=i}attachComponentPortal(e){let A;if(e.viewContainerRef){let i=e.injector||e.viewContainerRef.injector,n=i.get(Zv,null,{optional:!0})||void 0;A=e.viewContainerRef.createComponent(e.component,{index:e.viewContainerRef.length,injector:i,ngModuleRef:n,projectableNodes:e.projectableNodes||void 0,bindings:e.bindings||void 0}),this.setDisposeFn(()=>A.destroy())}else{let i=this._appRef,n=e.injector||this._defaultInjector||Dt.NULL,o=n.get(Gr,i.injector);A=tp(e.component,{elementInjector:n,environmentInjector:o,projectableNodes:e.projectableNodes||void 0,bindings:e.bindings||void 0}),i.attachView(A.hostView),this.setDisposeFn(()=>{i.viewCount>0&&i.detachView(A.hostView),A.destroy()})}return this.outletElement.appendChild(this._getComponentRootNode(A)),this._attachedPortal=e,A}attachTemplatePortal(e){let A=e.viewContainerRef,i=A.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return i.rootNodes.forEach(n=>this.outletElement.appendChild(n)),i.detectChanges(),this.setDisposeFn(()=>{let n=A.indexOf(i);n!==-1&&A.remove(n)}),this._attachedPortal=e,i}attachDomPortal=e=>{let A=e.element;A.parentNode;let i=this.outletElement.ownerDocument.createComment("dom-portal");A.parentNode.insertBefore(i,A),this.outletElement.appendChild(A),this._attachedPortal=e,super.setDisposeFn(()=>{i.parentNode&&i.parentNode.replaceChild(A,i)})};dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(e){return e.hostView.rootNodes[0]}},hT=(()=>{class t extends Jr{constructor(){let A=w(ao),i=w(Mo);super(A,i)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[mt]})}return t})(),Wl=(()=>{class t extends C2{_moduleRef=w(Zv,{optional:!0});_document=w(ti);_viewContainerRef=w(Mo);_isInitialized=!1;_attachedRef=null;constructor(){super()}get portal(){return this._attachedPortal}set portal(A){this.hasAttached()&&!A&&!this._isInitialized||(this.hasAttached()&&super.detach(),A&&super.attach(A),this._attachedPortal=A||null)}attached=new LA;get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(A){A.setAttachedHost(this);let i=A.viewContainerRef!=null?A.viewContainerRef:this._viewContainerRef,n=i.createComponent(A.component,{index:i.length,injector:A.injector||i.injector,projectableNodes:A.projectableNodes||void 0,ngModuleRef:this._moduleRef||void 0,bindings:A.bindings||void 0});return i!==this._viewContainerRef&&this._getRootNode().appendChild(n.hostView.rootNodes[0]),super.setDisposeFn(()=>n.destroy()),this._attachedPortal=A,this._attachedRef=n,this.attached.emit(n),n}attachTemplatePortal(A){A.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(A.templateRef,A.context,{injector:A.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=A,this._attachedRef=i,this.attached.emit(i),i}attachDomPortal=A=>{let i=A.element;i.parentNode;let n=this._document.createComment("dom-portal");A.setAttachedHost(this),i.parentNode.insertBefore(n,i),this._getRootNode().appendChild(i),this._attachedPortal=A,super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(i,n)})};_getRootNode(){let A=this._viewContainerRef.element.nativeElement;return A.nodeType===A.ELEMENT_NODE?A:A.parentNode}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[0,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[mt]})}return t})(),Zc=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();var QT=bp();function NB(t){return new Jm(t.get(Ms),t.get(ti))}var Jm=class{_viewportRuler;_previousHTMLStyles={top:"",left:""};_previousScrollPosition;_isEnabled=!1;_document;constructor(e,A){this._viewportRuler=e,this._document=A}attach(){}enable(){if(this._canBeEnabled()){let e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=Oa(-this._previousScrollPosition.left),e.style.top=Oa(-this._previousScrollPosition.top),e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let e=this._document.documentElement,A=this._document.body,i=e.style,n=A.style,o=i.scrollBehavior||"",a=n.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),QT&&(i.scrollBehavior=n.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),QT&&(i.scrollBehavior=o,n.scrollBehavior=a)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let A=this._document.documentElement,i=this._viewportRuler.getViewportSize();return A.scrollHeight>i.height||A.scrollWidth>i.width}};function yT(t,e){return new Om(t.get(Wc),t.get(qe),t.get(Ms),e)}var Om=class{_scrollDispatcher;_ngZone;_viewportRuler;_config;_scrollSubscription=null;_overlayRef;_initialScrollPosition;constructor(e,A,i,n){this._scrollDispatcher=e,this._ngZone=A,this._viewportRuler=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(this._scrollSubscription)return;let e=this._scrollDispatcher.scrolled(0).pipe(gt(A=>!A||!this._overlayRef.overlayElement.contains(A.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(()=>{let A=this._viewportRuler.getViewportScrollPosition().top;Math.abs(A-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}_detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}};var Lu=class{enable(){}disable(){}attach(){}};function cM(t,e){return e.some(A=>{let i=t.bottomA.bottom,o=t.rightA.right;return i||n||o||a})}function uT(t,e){return e.some(A=>{let i=t.topA.bottom,o=t.leftA.right;return i||n||o||a})}function Z0(t,e){return new Ym(t.get(Wc),t.get(Ms),t.get(qe),e)}var Ym=class{_scrollDispatcher;_viewportRuler;_ngZone;_config;_scrollSubscription=null;_overlayRef;constructor(e,A,i,n){this._scrollDispatcher=e,this._viewportRuler=A,this._ngZone=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(!this._scrollSubscription){let e=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(e).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let A=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:n}=this._viewportRuler.getViewportSize();cM(A,[{width:i,height:n,bottom:n,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},vT=(()=>{class t{_injector=w(Dt);constructor(){}noop=()=>new Lu;close=A=>yT(this._injector,A);block=()=>NB(this._injector);reposition=A=>Z0(this._injector,A);static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Og=class{positionStrategy;scrollStrategy=new Lu;panelClass="";hasBackdrop=!1;backdropClass="cdk-overlay-dark-backdrop";disableAnimations;width;height;minWidth;minHeight;maxWidth;maxHeight;direction;disposeOnNavigation=!1;usePopover;eventPredicate;constructor(e){if(e){let A=Object.keys(e);for(let i of A)e[i]!==void 0&&(this[i]=e[i])}}};var Hm=class{connectionPair;scrollableViewProperties;constructor(e,A){this.connectionPair=e,this.scrollableViewProperties=A}};var bT=(()=>{class t{_attachedOverlays=[];_document=w(ti);_isAttached=!1;constructor(){}ngOnDestroy(){this.detach()}add(A){this.remove(A),this._attachedOverlays.push(A)}remove(A){let i=this._attachedOverlays.indexOf(A);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}canReceiveEvent(A,i,n){return n.observers.length<1?!1:A.eventPredicate?A.eventPredicate(i):!0}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),MT=(()=>{class t extends bT{_ngZone=w(qe);_renderer=w(Kr).createRenderer(null,null);_cleanupKeydown;add(A){super.add(A),this._isAttached||(this._ngZone.runOutsideAngular(()=>{this._cleanupKeydown=this._renderer.listen("body","keydown",this._keydownListener)}),this._isAttached=!0)}detach(){this._isAttached&&(this._cleanupKeydown?.(),this._isAttached=!1)}_keydownListener=A=>{let i=this._attachedOverlays;for(let n=i.length-1;n>-1;n--){let o=i[n];if(this.canReceiveEvent(o,A,o._keydownEvents)){this._ngZone.run(()=>o._keydownEvents.next(A));break}}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),ST=(()=>{class t extends bT{_platform=w(li);_ngZone=w(qe);_renderer=w(Kr).createRenderer(null,null);_cursorOriginalValue;_cursorStyleIsSet=!1;_pointerDownEventTarget=null;_cleanups;add(A){if(super.add(A),!this._isAttached){let i=this._document.body,n={capture:!0},o=this._renderer;this._cleanups=this._ngZone.runOutsideAngular(()=>[o.listen(i,"pointerdown",this._pointerDownListener,n),o.listen(i,"click",this._clickListener,n),o.listen(i,"auxclick",this._clickListener,n),o.listen(i,"contextmenu",this._clickListener,n)]),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){this._isAttached&&(this._cleanups?.forEach(A=>A()),this._cleanups=void 0,this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}_pointerDownListener=A=>{this._pointerDownEventTarget=Ur(A)};_clickListener=A=>{let i=Ur(A),n=A.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:i;this._pointerDownEventTarget=null;let o=this._attachedOverlays.slice();for(let a=o.length-1;a>-1;a--){let r=o[a],s=r._outsidePointerEvents;if(!(!r.hasAttached()||!this.canReceiveEvent(r,A,s))){if(fT(r.overlayElement,i)||fT(r.overlayElement,n))break;this._ngZone?this._ngZone.run(()=>s.next(A)):s.next(A)}}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function fT(t,e){let A=typeof ShadowRoot<"u"&&ShadowRoot,i=e;for(;i;){if(i===t)return!0;i=A&&i instanceof ShadowRoot?i.host:i.parentNode}return!1}var kT=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-overlay-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed}@layer cdk-overlay{.cdk-overlay-container{z-index:1000}}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute}@layer cdk-overlay{.cdk-global-overlay-wrapper{z-index:1000}}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%}@layer cdk-overlay{.cdk-overlay-pane{z-index:1000}}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation}@layer cdk-overlay{.cdk-overlay-backdrop{z-index:1000;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}@layer cdk-overlay{.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px}@layer cdk-overlay{.cdk-overlay-connected-position-bounding-box{z-index:1000}}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:auto;top:0;left:0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto} +`],encapsulation:2,changeDetection:0})}return t})(),jm=(()=>{class t{_platform=w(li);_containerElement;_document=w(ti);_styleLoader=w(eo);constructor(){}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._loadStyles(),this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let A="cdk-overlay-container";if(this._platform.isBrowser||kb()){let n=this._document.querySelectorAll(`.${A}[platform="server"], .${A}[platform="test"]`);for(let o=0;o{let e=this.element;clearTimeout(this._fallbackTimeout),this._cleanupTransitionEnd?.(),this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this.dispose),this._fallbackTimeout=setTimeout(this.dispose,500),e.style.pointerEvents="none",e.classList.remove("cdk-overlay-backdrop-showing")})}dispose=()=>{clearTimeout(this._fallbackTimeout),this._cleanupClick?.(),this._cleanupTransitionEnd?.(),this._cleanupClick=this._cleanupTransitionEnd=this._fallbackTimeout=void 0,this.element.remove()}};function IM(t){return t&&t.nodeType===1}var _B=class{_portalOutlet;_host;_pane;_config;_ngZone;_keyboardDispatcher;_document;_location;_outsideClickDispatcher;_animationsDisabled;_injector;_renderer;_backdropClick=new ie;_attachments=new ie;_detachments=new ie;_positionStrategy;_scrollStrategy;_locationChanges=bo.EMPTY;_backdropRef=null;_detachContentMutationObserver;_detachContentAfterRenderRef;_disposed=!1;_previousHostParent;_keydownEvents=new ie;_outsidePointerEvents=new ie;_afterNextRenderRef;constructor(e,A,i,n,o,a,r,s,l,g=!1,C,I){this._portalOutlet=e,this._host=A,this._pane=i,this._config=n,this._ngZone=o,this._keyboardDispatcher=a,this._document=r,this._location=s,this._outsideClickDispatcher=l,this._animationsDisabled=g,this._injector=C,this._renderer=I,n.scrollStrategy&&(this._scrollStrategy=n.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=n.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropRef?.element||null}get hostElement(){return this._host}get eventPredicate(){return this._config?.eventPredicate||null}attach(e){if(this._disposed)return null;this._attachHost();let A=this._portalOutlet.attach(e);return this._positionStrategy?.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._afterNextRenderRef?.destroy(),this._afterNextRenderRef=Hn(()=>{this.hasAttached()&&this.updatePosition()},{injector:this._injector}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._completeDetachContent(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof A?.onDestroy=="function"&&A.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),A}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let e=this._portalOutlet.detach();return this._detachments.next(),this._completeDetachContent(),this._keyboardDispatcher.remove(this),this._detachContentWhenEmpty(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),e}dispose(){if(this._disposed)return;let e=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._backdropRef?.dispose(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._afterNextRenderRef?.destroy(),this._previousHostParent=this._pane=this._host=this._backdropRef=null,e&&this._detachments.next(),this._detachments.complete(),this._completeDetachContent(),this._disposed=!0}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))}updateSize(e){this._config=gA(gA({},this._config),e),this._updateElementSize()}setDirection(e){this._config=Ye(gA({},this._config),{direction:e}),this._updateElementDirection()}addPanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!0)}removePanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!1)}getDirection(){let e=this._config.direction;return e?typeof e=="string"?e:e.value:"ltr"}updateScrollStrategy(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let e=this._pane.style;e.width=Oa(this._config.width),e.height=Oa(this._config.height),e.minWidth=Oa(this._config.minWidth),e.minHeight=Oa(this._config.minHeight),e.maxWidth=Oa(this._config.maxWidth),e.maxHeight=Oa(this._config.maxHeight)}_togglePointerEvents(e){this._pane.style.pointerEvents=e?"":"none"}_attachHost(){if(!this._host.parentElement){let e=this._config.usePopover?this._positionStrategy?.getPopoverInsertionPoint?.():null;IM(e)?e.after(this._host):e?.type==="parent"?e.element.appendChild(this._host):this._previousHostParent?.appendChild(this._host)}if(this._config.usePopover)try{this._host.showPopover()}catch(e){}}_attachBackdrop(){let e="cdk-overlay-backdrop-showing";this._backdropRef?.dispose(),this._backdropRef=new CM(this._document,this._renderer,this._ngZone,A=>{this._backdropClick.next(A)}),this._animationsDisabled&&this._backdropRef.element.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropRef.element,this._config.backdropClass,!0),this._config.usePopover?this._host.prepend(this._backdropRef.element):this._host.parentElement.insertBefore(this._backdropRef.element,this._host),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this._backdropRef?.element.classList.add(e))}):this._backdropRef.element.classList.add(e)}_updateStackingOrder(){!this._config.usePopover&&this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){this._animationsDisabled?(this._backdropRef?.dispose(),this._backdropRef=null):this._backdropRef?.detach()}_toggleClasses(e,A,i){let n=iB(A||[]).filter(o=>!!o);n.length&&(i?e.classList.add(...n):e.classList.remove(...n))}_detachContentWhenEmpty(){let e=!1;try{this._detachContentAfterRenderRef=Hn(()=>{e=!0,this._detachContent()},{injector:this._injector})}catch(A){if(e)throw A;this._detachContent()}globalThis.MutationObserver&&this._pane&&(this._detachContentMutationObserver||=new globalThis.MutationObserver(()=>{this._detachContent()}),this._detachContentMutationObserver.observe(this._pane,{childList:!0}))}_detachContent(){(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),this._completeDetachContent())}_completeDetachContent(){this._detachContentAfterRenderRef?.destroy(),this._detachContentAfterRenderRef=void 0,this._detachContentMutationObserver?.disconnect()}_disposeScrollStrategy(){let e=this._scrollStrategy;e?.disable(),e?.detach?.()}},pT="cdk-overlay-connected-position-bounding-box",blA=/([A-Za-z%]+)$/;function y1(t,e){return new zm(e,t.get(Ms),t.get(ti),t.get(li),t.get(jm))}var zm=class{_viewportRuler;_document;_platform;_overlayContainer;_overlayRef;_isInitialRender=!1;_lastBoundingBoxSize={width:0,height:0};_isPushed=!1;_canPush=!0;_growAfterOpen=!1;_hasFlexibleDimensions=!0;_positionLocked=!1;_originRect;_overlayRect;_viewportRect;_containerRect;_viewportMargin=0;_scrollables=[];_preferredPositions=[];_origin;_pane;_isDisposed=!1;_boundingBox=null;_lastPosition=null;_lastScrollVisibility=null;_positionChanges=new ie;_resizeSubscription=bo.EMPTY;_offsetX=0;_offsetY=0;_transformOriginSelector;_appliedPanelClasses=[];_previousPushAmount=null;_popoverLocation="global";positionChanges=this._positionChanges;get positions(){return this._preferredPositions}constructor(e,A,i,n,o){this._viewportRuler=A,this._document=i,this._platform=n,this._overlayContainer=o,this.setOrigin(e)}attach(e){this._overlayRef&&this._overlayRef,this._validatePositions(),e.hostElement.classList.add(pT),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._getContainerRect();let e=this._originRect,A=this._overlayRect,i=this._viewportRect,n=this._containerRect,o=[],a;for(let r of this._preferredPositions){let s=this._getOriginPoint(e,n,r),l=this._getOverlayPoint(s,A,r),g=this._getOverlayFit(l,A,i,r);if(g.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(r,s);return}if(this._canFitWithFlexibleDimensions(g,l,i)){o.push({position:r,origin:s,overlayRect:A,boundingBoxRect:this._calculateBoundingBoxRect(s,r)});continue}(!a||a.overlayFit.visibleAreas&&(s=g,r=l)}this._isPushed=!1,this._applyPosition(r.position,r.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(a.position,a.originPoint);return}this._applyPosition(a.position,a.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&D1(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(pT),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let e=this._lastPosition;e?(this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._getContainerRect(),this._applyPosition(e,this._getOriginPoint(this._originRect,this._containerRect,e))):this.apply()}withScrollableContainers(e){return this._scrollables=e,this}withPositions(e){return this._preferredPositions=e,e.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(e){return this._viewportMargin=e,this}withFlexibleDimensions(e=!0){return this._hasFlexibleDimensions=e,this}withGrowAfterOpen(e=!0){return this._growAfterOpen=e,this}withPush(e=!0){return this._canPush=e,this}withLockedPosition(e=!0){return this._positionLocked=e,this}setOrigin(e){return this._origin=e,this}withDefaultOffsetX(e){return this._offsetX=e,this}withDefaultOffsetY(e){return this._offsetY=e,this}withTransformOriginOn(e){return this._transformOriginSelector=e,this}withPopoverLocation(e){return this._popoverLocation=e,this}getPopoverInsertionPoint(){return this._popoverLocation==="global"?null:this._popoverLocation!=="inline"?this._popoverLocation:this._origin instanceof ce?this._origin.nativeElement:IM(this._origin)?this._origin:null}_getOriginPoint(e,A,i){let n;if(i.originX=="center")n=e.left+e.width/2;else{let a=this._isRtl()?e.right:e.left,r=this._isRtl()?e.left:e.right;n=i.originX=="start"?a:r}A.left<0&&(n-=A.left);let o;return i.originY=="center"?o=e.top+e.height/2:o=i.originY=="top"?e.top:e.bottom,A.top<0&&(o-=A.top),{x:n,y:o}}_getOverlayPoint(e,A,i){let n;i.overlayX=="center"?n=-A.width/2:i.overlayX==="start"?n=this._isRtl()?-A.width:0:n=this._isRtl()?0:-A.width;let o;return i.overlayY=="center"?o=-A.height/2:o=i.overlayY=="top"?0:-A.height,{x:e.x+n,y:e.y+o}}_getOverlayFit(e,A,i,n){let o=wT(A),{x:a,y:r}=e,s=this._getOffset(n,"x"),l=this._getOffset(n,"y");s&&(a+=s),l&&(r+=l);let g=0-a,C=a+o.width-i.width,I=0-r,d=r+o.height-i.height,h=this._subtractOverflows(o.width,g,C),E=this._subtractOverflows(o.height,I,d),f=h*E;return{visibleArea:f,isCompletelyWithinViewport:o.width*o.height===f,fitsInViewportVertically:E===o.height,fitsInViewportHorizontally:h==o.width}}_canFitWithFlexibleDimensions(e,A,i){if(this._hasFlexibleDimensions){let n=i.bottom-A.y,o=i.right-A.x,a=mT(this._overlayRef.getConfig().minHeight),r=mT(this._overlayRef.getConfig().minWidth),s=e.fitsInViewportVertically||a!=null&&a<=n,l=e.fitsInViewportHorizontally||r!=null&&r<=o;return s&&l}return!1}_pushOverlayOnScreen(e,A,i){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};let n=wT(A),o=this._viewportRect,a=Math.max(e.x+n.width-o.width,0),r=Math.max(e.y+n.height-o.height,0),s=Math.max(o.top-i.top-e.y,0),l=Math.max(o.left-i.left-e.x,0),g=0,C=0;return n.width<=o.width?g=l||-a:g=e.xh&&!this._isInitialRender&&!this._growAfterOpen&&(a=e.y-h/2)}let s=A.overlayX==="start"&&!n||A.overlayX==="end"&&n,l=A.overlayX==="end"&&!n||A.overlayX==="start"&&n,g,C,I;if(l)I=i.width-e.x+this._getViewportMarginStart()+this._getViewportMarginEnd(),g=e.x-this._getViewportMarginStart();else if(s)C=e.x,g=i.right-e.x-this._getViewportMarginEnd();else{let d=Math.min(i.right-e.x+i.left,e.x),h=this._lastBoundingBoxSize.width;g=d*2,C=e.x-d,g>h&&!this._isInitialRender&&!this._growAfterOpen&&(C=e.x-h/2)}return{top:a,left:C,bottom:r,right:I,width:g,height:o}}_setBoundingBoxStyles(e,A){let i=this._calculateBoundingBoxRect(e,A);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let n={};if(this._hasExactPosition())n.top=n.left="0",n.bottom=n.right="auto",n.maxHeight=n.maxWidth="",n.width=n.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,a=this._overlayRef.getConfig().maxWidth;n.width=Oa(i.width),n.height=Oa(i.height),n.top=Oa(i.top)||"auto",n.bottom=Oa(i.bottom)||"auto",n.left=Oa(i.left)||"auto",n.right=Oa(i.right)||"auto",A.overlayX==="center"?n.alignItems="center":n.alignItems=A.overlayX==="end"?"flex-end":"flex-start",A.overlayY==="center"?n.justifyContent="center":n.justifyContent=A.overlayY==="bottom"?"flex-end":"flex-start",o&&(n.maxHeight=Oa(o)),a&&(n.maxWidth=Oa(a))}this._lastBoundingBoxSize=i,D1(this._boundingBox.style,n)}_resetBoundingBoxStyles(){D1(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){D1(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(e,A){let i={},n=this._hasExactPosition(),o=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(n){let g=this._viewportRuler.getViewportScrollPosition();D1(i,this._getExactOverlayY(A,e,g)),D1(i,this._getExactOverlayX(A,e,g))}else i.position="static";let r="",s=this._getOffset(A,"x"),l=this._getOffset(A,"y");s&&(r+=`translateX(${s}px) `),l&&(r+=`translateY(${l}px)`),i.transform=r.trim(),a.maxHeight&&(n?i.maxHeight=Oa(a.maxHeight):o&&(i.maxHeight="")),a.maxWidth&&(n?i.maxWidth=Oa(a.maxWidth):o&&(i.maxWidth="")),D1(this._pane.style,i)}_getExactOverlayY(e,A,i){let n={top:"",bottom:""},o=this._getOverlayPoint(A,this._overlayRect,e);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),e.overlayY==="bottom"){let a=this._document.documentElement.clientHeight;n.bottom=`${a-(o.y+this._overlayRect.height)}px`}else n.top=Oa(o.y);return n}_getExactOverlayX(e,A,i){let n={left:"",right:""},o=this._getOverlayPoint(A,this._overlayRect,e);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let a;if(this._isRtl()?a=e.overlayX==="end"?"left":"right":a=e.overlayX==="end"?"right":"left",a==="right"){let r=this._document.documentElement.clientWidth;n.right=`${r-(o.x+this._overlayRect.width)}px`}else n.left=Oa(o.x);return n}_getScrollVisibility(){let e=this._getOriginRect(),A=this._pane.getBoundingClientRect(),i=this._scrollables.map(n=>n.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:uT(e,i),isOriginOutsideView:cM(e,i),isOverlayClipped:uT(A,i),isOverlayOutsideView:cM(A,i)}}_subtractOverflows(e,...A){return A.reduce((i,n)=>i-Math.max(n,0),e)}_getNarrowedViewportRect(){let e=this._document.documentElement.clientWidth,A=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._getViewportMarginTop(),left:i.left+this._getViewportMarginStart(),right:i.left+e-this._getViewportMarginEnd(),bottom:i.top+A-this._getViewportMarginBottom(),width:e-this._getViewportMarginStart()-this._getViewportMarginEnd(),height:A-this._getViewportMarginTop()-this._getViewportMarginBottom()}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(e,A){return A==="x"?e.offsetX==null?this._offsetX:e.offsetX:e.offsetY==null?this._offsetY:e.offsetY}_validatePositions(){}_addPanelClasses(e){this._pane&&iB(e).forEach(A=>{A!==""&&this._appliedPanelClasses.indexOf(A)===-1&&(this._appliedPanelClasses.push(A),this._pane.classList.add(A))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(e=>{this._pane.classList.remove(e)}),this._appliedPanelClasses=[])}_getViewportMarginStart(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.start??0}_getViewportMarginEnd(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.end??0}_getViewportMarginTop(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.top??0}_getViewportMarginBottom(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.bottom??0}_getOriginRect(){let e=this._origin;if(e instanceof ce)return e.nativeElement.getBoundingClientRect();if(e instanceof Element)return e.getBoundingClientRect();let A=e.width||0,i=e.height||0;return{top:e.y,bottom:e.y+i,left:e.x,right:e.x+A,height:i,width:A}}_getContainerRect(){let e=this._overlayRef.getConfig().usePopover&&this._popoverLocation!=="global",A=this._overlayContainer.getContainerElement();e&&(A.style.display="block");let i=A.getBoundingClientRect();return e&&(A.style.display=""),i}};function D1(t,e){for(let A in e)e.hasOwnProperty(A)&&(t[A]=e[A]);return t}function mT(t){if(typeof t!="number"&&t!=null){let[e,A]=t.split(blA);return!A||A==="px"?parseFloat(e):null}return t||null}function wT(t){return{top:Math.floor(t.top),right:Math.floor(t.right),bottom:Math.floor(t.bottom),left:Math.floor(t.left),width:Math.floor(t.width),height:Math.floor(t.height)}}function MlA(t,e){return t===e?!0:t.isOriginClipped===e.isOriginClipped&&t.isOriginOutsideView===e.isOriginOutsideView&&t.isOverlayClipped===e.isOverlayClipped&&t.isOverlayOutsideView===e.isOverlayOutsideView}var DT="cdk-global-overlay-wrapper";function I2(t){return new Pm}var Pm=class{_overlayRef;_cssPosition="static";_topOffset="";_bottomOffset="";_alignItems="";_xPosition="";_xOffset="";_width="";_height="";_isDisposed=!1;attach(e){let A=e.getConfig();this._overlayRef=e,this._width&&!A.width&&e.updateSize({width:this._width}),this._height&&!A.height&&e.updateSize({height:this._height}),e.hostElement.classList.add(DT),this._isDisposed=!1}top(e=""){return this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this}left(e=""){return this._xOffset=e,this._xPosition="left",this}bottom(e=""){return this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this}right(e=""){return this._xOffset=e,this._xPosition="right",this}start(e=""){return this._xOffset=e,this._xPosition="start",this}end(e=""){return this._xOffset=e,this._xPosition="end",this}width(e=""){return this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this}height(e=""){return this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this}centerHorizontally(e=""){return this.left(e),this._xPosition="center",this}centerVertically(e=""){return this.top(e),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:n,height:o,maxWidth:a,maxHeight:r}=i,s=(n==="100%"||n==="100vw")&&(!a||a==="100%"||a==="100vw"),l=(o==="100%"||o==="100vh")&&(!r||r==="100%"||r==="100vh"),g=this._xPosition,C=this._xOffset,I=this._overlayRef.getConfig().direction==="rtl",d="",h="",E="";s?E="flex-start":g==="center"?(E="center",I?h=C:d=C):I?g==="left"||g==="end"?(E="flex-end",d=C):(g==="right"||g==="start")&&(E="flex-start",h=C):g==="left"||g==="start"?(E="flex-start",d=C):(g==="right"||g==="end")&&(E="flex-end",h=C),e.position=this._cssPosition,e.marginLeft=s?"0":d,e.marginTop=l?"0":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=s?"0":h,A.justifyContent=E,A.alignItems=l?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement,i=A.style;A.classList.remove(DT),i.justifyContent=i.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position="",this._overlayRef=null,this._isDisposed=!0}},qm=(()=>{class t{_injector=w(Dt);constructor(){}global(){return I2()}flexibleConnectedTo(A){return y1(this._injector,A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Gu=new kA("OVERLAY_DEFAULT_CONFIG");function Hg(t,e){t.get(eo).load(kT);let A=t.get(jm),i=t.get(ti),n=t.get(In),o=t.get(K0),a=t.get(fo),r=t.get(Pi,null,{optional:!0})||t.get(Kr).createRenderer(null,null),s=new Og(e),l=t.get(Gu,null,{optional:!0})?.usePopover??!0;s.direction=s.direction||a.value,"showPopover"in i.body?s.usePopover=e?.usePopover??l:s.usePopover=!1;let g=i.createElement("div"),C=i.createElement("div");g.id=n.getId("cdk-overlay-"),g.classList.add("cdk-overlay-pane"),C.appendChild(g),s.usePopover&&(C.setAttribute("popover","manual"),C.classList.add("cdk-overlay-popover"));let I=s.usePopover?s.positionStrategy?.getPopoverInsertionPoint?.():null;return IM(I)?I.after(C):I?.type==="parent"?I.element.appendChild(C):A.getContainerElement().appendChild(C),new _B(new Fu(g,o,t),C,g,s,t.get(qe),t.get(MT),i,t.get(Uc),t.get(ST),e?.disableAnimations??t.get(qI,null,{optional:!0})==="NoopAnimations",t.get(Gr),r)}var v1=(()=>{class t{scrollStrategies=w(vT);_positionBuilder=w(qm);_injector=w(Dt);constructor(){}create(A){return Hg(this._injector,A)}position(){return this._positionBuilder}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),SlA=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],klA=new kA("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>Z0(t)}}),RB=(()=>{class t{elementRef=w(ce);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdk-overlay-origin",""],["","overlay-origin",""],["","cdkOverlayOrigin",""]],exportAs:["cdkOverlayOrigin"]})}return t})(),xT=new kA("cdk-connected-overlay-default-config"),Vm=(()=>{class t{_dir=w(fo,{optional:!0});_injector=w(Dt);_overlayRef;_templatePortal;_backdropSubscription=bo.EMPTY;_attachSubscription=bo.EMPTY;_detachSubscription=bo.EMPTY;_positionSubscription=bo.EMPTY;_offsetX;_offsetY;_position;_scrollStrategyFactory=w(klA);_ngZone=w(qe);origin;positions;positionStrategy;get offsetX(){return this._offsetX}set offsetX(A){this._offsetX=A,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(A){this._offsetY=A,this._position&&this._updatePositionStrategy(this._position)}width;height;minWidth;minHeight;backdropClass;panelClass;viewportMargin=0;scrollStrategy;open=!1;disableClose=!1;transformOriginSelector;hasBackdrop=!1;lockPosition=!1;flexibleDimensions=!1;growAfterOpen=!1;push=!1;disposeOnNavigation=!1;usePopover;matchWidth=!1;set _config(A){typeof A!="string"&&this._assignConfig(A)}backdropClick=new LA;positionChange=new LA;attach=new LA;detach=new LA;overlayKeydown=new LA;overlayOutsideClick=new LA;constructor(){let A=w(ao),i=w(Mo),n=w(xT,{optional:!0}),o=w(Gu,{optional:!0});this.usePopover=o?.usePopover===!1?null:"global",this._templatePortal=new Jr(A,i),this.scrollStrategy=this._scrollStrategyFactory(),n&&this._assignConfig(n)}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:"ltr"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef?.dispose()}ngOnChanges(A){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef?.updateSize({width:this._getWidth(),minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),A.origin&&this.open&&this._position.apply()),A.open&&(this.open?this.attachOverlay():this.detachOverlay())}_createOverlay(){(!this.positions||!this.positions.length)&&(this.positions=SlA);let A=this._overlayRef=Hg(this._injector,this._buildConfig());this._attachSubscription=A.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=A.detachments().subscribe(()=>this.detach.emit()),A.keydownEvents().subscribe(i=>{this.overlayKeydown.next(i),i.keyCode===27&&!this.disableClose&&!Qa(i)&&(i.preventDefault(),this.detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(i=>{let n=this._getOriginElement(),o=Ur(i);(!n||n!==o&&!n.contains(o))&&this.overlayOutsideClick.next(i)})}_buildConfig(){let A=this._position=this.positionStrategy||this._createPositionStrategy(),i=new Og({direction:this._dir||"ltr",positionStrategy:A,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop,disposeOnNavigation:this.disposeOnNavigation,usePopover:!!this.usePopover});return(this.height||this.height===0)&&(i.height=this.height),(this.minWidth||this.minWidth===0)&&(i.minWidth=this.minWidth),(this.minHeight||this.minHeight===0)&&(i.minHeight=this.minHeight),this.backdropClass&&(i.backdropClass=this.backdropClass),this.panelClass&&(i.panelClass=this.panelClass),i}_updatePositionStrategy(A){let i=this.positions.map(n=>({originX:n.originX,originY:n.originY,overlayX:n.overlayX,overlayY:n.overlayY,offsetX:n.offsetX||this.offsetX,offsetY:n.offsetY||this.offsetY,panelClass:n.panelClass||void 0}));return A.setOrigin(this._getOrigin()).withPositions(i).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector).withPopoverLocation(this.usePopover===null?"global":this.usePopover)}_createPositionStrategy(){let A=y1(this._injector,this._getOrigin());return this._updatePositionStrategy(A),A}_getOrigin(){return this.origin instanceof RB?this.origin.elementRef:this.origin}_getOriginElement(){return this.origin instanceof RB?this.origin.elementRef.nativeElement:this.origin instanceof ce?this.origin.nativeElement:typeof Element<"u"&&this.origin instanceof Element?this.origin:null}_getWidth(){return this.width?this.width:this.matchWidth?this._getOriginElement()?.getBoundingClientRect?.().width:void 0}attachOverlay(){this._overlayRef||this._createOverlay();let A=this._overlayRef;A.getConfig().hasBackdrop=this.hasBackdrop,A.updateSize({width:this._getWidth()}),A.hasAttached()||A.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=A.backdropClick().subscribe(i=>this.backdropClick.emit(i)):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(NF(()=>this.positionChange.observers.length>0)).subscribe(i=>{this._ngZone.run(()=>this.positionChange.emit(i)),this.positionChange.observers.length===0&&this._positionSubscription.unsubscribe()})),this.open=!0}detachOverlay(){this._overlayRef?.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.open=!1}_assignConfig(A){this.origin=A.origin??this.origin,this.positions=A.positions??this.positions,this.positionStrategy=A.positionStrategy??this.positionStrategy,this.offsetX=A.offsetX??this.offsetX,this.offsetY=A.offsetY??this.offsetY,this.width=A.width??this.width,this.height=A.height??this.height,this.minWidth=A.minWidth??this.minWidth,this.minHeight=A.minHeight??this.minHeight,this.backdropClass=A.backdropClass??this.backdropClass,this.panelClass=A.panelClass??this.panelClass,this.viewportMargin=A.viewportMargin??this.viewportMargin,this.scrollStrategy=A.scrollStrategy??this.scrollStrategy,this.disableClose=A.disableClose??this.disableClose,this.transformOriginSelector=A.transformOriginSelector??this.transformOriginSelector,this.hasBackdrop=A.hasBackdrop??this.hasBackdrop,this.lockPosition=A.lockPosition??this.lockPosition,this.flexibleDimensions=A.flexibleDimensions??this.flexibleDimensions,this.growAfterOpen=A.growAfterOpen??this.growAfterOpen,this.push=A.push??this.push,this.disposeOnNavigation=A.disposeOnNavigation??this.disposeOnNavigation,this.usePopover=A.usePopover??this.usePopover,this.matchWidth=A.matchWidth??this.matchWidth}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdk-connected-overlay",""],["","connected-overlay",""],["","cdkConnectedOverlay",""]],inputs:{origin:[0,"cdkConnectedOverlayOrigin","origin"],positions:[0,"cdkConnectedOverlayPositions","positions"],positionStrategy:[0,"cdkConnectedOverlayPositionStrategy","positionStrategy"],offsetX:[0,"cdkConnectedOverlayOffsetX","offsetX"],offsetY:[0,"cdkConnectedOverlayOffsetY","offsetY"],width:[0,"cdkConnectedOverlayWidth","width"],height:[0,"cdkConnectedOverlayHeight","height"],minWidth:[0,"cdkConnectedOverlayMinWidth","minWidth"],minHeight:[0,"cdkConnectedOverlayMinHeight","minHeight"],backdropClass:[0,"cdkConnectedOverlayBackdropClass","backdropClass"],panelClass:[0,"cdkConnectedOverlayPanelClass","panelClass"],viewportMargin:[0,"cdkConnectedOverlayViewportMargin","viewportMargin"],scrollStrategy:[0,"cdkConnectedOverlayScrollStrategy","scrollStrategy"],open:[0,"cdkConnectedOverlayOpen","open"],disableClose:[0,"cdkConnectedOverlayDisableClose","disableClose"],transformOriginSelector:[0,"cdkConnectedOverlayTransformOriginOn","transformOriginSelector"],hasBackdrop:[2,"cdkConnectedOverlayHasBackdrop","hasBackdrop",Be],lockPosition:[2,"cdkConnectedOverlayLockPosition","lockPosition",Be],flexibleDimensions:[2,"cdkConnectedOverlayFlexibleDimensions","flexibleDimensions",Be],growAfterOpen:[2,"cdkConnectedOverlayGrowAfterOpen","growAfterOpen",Be],push:[2,"cdkConnectedOverlayPush","push",Be],disposeOnNavigation:[2,"cdkConnectedOverlayDisposeOnNavigation","disposeOnNavigation",Be],usePopover:[0,"cdkConnectedOverlayUsePopover","usePopover"],matchWidth:[2,"cdkConnectedOverlayMatchWidth","matchWidth",Be],_config:[0,"cdkConnectedOverlay","_config"]},outputs:{backdropClick:"backdropClick",positionChange:"positionChange",attach:"attach",detach:"detach",overlayKeydown:"overlayKeydown",overlayOutsideClick:"overlayOutsideClick"},exportAs:["cdkConnectedOverlay"],features:[Yt]})}return t})(),Zl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({providers:[v1],imports:[fi,Zc,Tm,Tm]})}return t})();function xlA(t,e){}var d2=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;positionStrategy;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;closeOnNavigation=!0;closeOnDestroy=!0;closeOnOverlayDetachments=!0;disableAnimations=!1;providers;container;templateContext};var BM=(()=>{class t extends C2{_elementRef=w(ce);_focusTrapFactory=w(qQ);_config;_interactivityChecker=w(oB);_ngZone=w(qe);_focusMonitor=w($a);_renderer=w(Pi);_changeDetectorRef=w(wt);_injector=w(Dt);_platform=w(li);_document=w(ti);_portalOutlet;_focusTrapped=new ie;_focusTrap=null;_elementFocusedBeforeDialogWasOpened=null;_closeInteractionType=null;_ariaLabelledByQueue=[];_isDestroyed=!1;constructor(){super(),this._config=w(d2,{optional:!0})||new d2,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(A){this._ariaLabelledByQueue.push(A),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(A){let i=this._ariaLabelledByQueue.indexOf(A);i>-1&&(this._ariaLabelledByQueue.splice(i,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._focusTrapped.complete(),this._isDestroyed=!0,this._restoreFocus()}attachComponentPortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._contentAttached(),i}attachTemplatePortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._contentAttached(),i}attachDomPortal=A=>{this._portalOutlet.hasAttached();let i=this._portalOutlet.attachDomPortal(A);return this._contentAttached(),i};_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_trapFocus(A){this._isDestroyed||Hn(()=>{let i=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||i.focus(A);break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElement(A)||this._focusDialogContainer(A);break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]',A);break;default:this._focusByCssSelector(this._config.autoFocus,A);break}this._focusTrapped.next()},{injector:this._injector})}_restoreFocus(){let A=this._config.restoreFocus,i=null;if(typeof A=="string"?i=this._document.querySelector(A):typeof A=="boolean"?i=A?this._elementFocusedBeforeDialogWasOpened:null:A&&(i=A),this._config.restoreFocus&&i&&typeof i.focus=="function"){let n=HQ(),o=this._elementRef.nativeElement;(!n||n===this._document.body||n===o||o.contains(n))&&(this._focusMonitor?(this._focusMonitor.focusVia(i,this._closeInteractionType),this._closeInteractionType=null):i.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(A){this._elementRef.nativeElement.focus?.(A)}_containsFocus(){let A=this._elementRef.nativeElement,i=HQ();return A===i||A.contains(i)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=HQ()))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["cdk-dialog-container"]],viewQuery:function(i,n){if(i&1&&Jt(Wl,7),i&2){let o;ae(o=re())&&(n._portalOutlet=o.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(i,n){i&2&&te("id",n._config.id||null)("role",n._config.role)("aria-modal",n._config.ariaModal)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null)},features:[mt],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(i,n){i&1&&Et(0,xlA,0,0,"ng-template",0)},dependencies:[Wl],styles:[`.cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit} +`],encapsulation:2})}return t})(),Ku=class{overlayRef;config;componentInstance=null;componentRef=null;containerInstance;disableClose;closed=new ie;backdropClick;keydownEvents;outsidePointerEvents;id;_detachSubscription;constructor(e,A){this.overlayRef=e,this.config=A,this.disableClose=A.disableClose,this.backdropClick=e.backdropClick(),this.keydownEvents=e.keydownEvents(),this.outsidePointerEvents=e.outsidePointerEvents(),this.id=A.id,this.keydownEvents.subscribe(i=>{i.keyCode===27&&!this.disableClose&&!Qa(i)&&(i.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{!this.disableClose&&this._canClose()?this.close(void 0,{focusOrigin:"mouse"}):this.containerInstance._recaptureFocus?.()}),this._detachSubscription=e.detachments().subscribe(()=>{A.closeOnOverlayDetachments!==!1&&this.close()})}close(e,A){if(this._canClose(e)){let i=this.closed;this.containerInstance._closeInteractionType=A?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),i.next(e),i.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(e="",A=""){return this.overlayRef.updateSize({width:e,height:A}),this}addPanelClass(e){return this.overlayRef.addPanelClass(e),this}removePanelClass(e){return this.overlayRef.removePanelClass(e),this}_canClose(e){let A=this.config;return!!this.containerInstance&&(!A.closePredicate||A.closePredicate(e,A,this.componentInstance))}},_lA=new kA("DialogScrollStrategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>NB(t)}}),RlA=new kA("DialogData"),NlA=new kA("DefaultDialogConfig");function FlA(t){let e=bA(t),A=new LA;return{valueSignal:e,get value(){return e()},change:A,ngOnDestroy(){A.complete()}}}var EM=(()=>{class t{_injector=w(Dt);_defaultOptions=w(NlA,{optional:!0});_parentDialog=w(t,{optional:!0,skipSelf:!0});_overlayContainer=w(jm);_idGenerator=w(In);_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new ie;_afterOpenedAtThisLevel=new ie;_ariaHiddenElements=new Map;_scrollStrategy=w(_lA);get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}afterAllClosed=Lc(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(Sn(void 0)));constructor(){}open(A,i){let n=this._defaultOptions||new d2;i=gA(gA({},n),i),i.id=i.id||this._idGenerator.getId("cdk-dialog-"),i.id&&this.getDialogById(i.id);let o=this._getOverlayConfig(i),a=Hg(this._injector,o),r=new Ku(a,i),s=this._attachContainer(a,r,i);if(r.containerInstance=s,!this.openDialogs.length){let l=this._overlayContainer.getContainerElement();s._focusTrapped?s._focusTrapped.pipe(uo(1)).subscribe(()=>{this._hideNonDialogContentFromAssistiveTechnology(l)}):this._hideNonDialogContentFromAssistiveTechnology(l)}return this._attachDialogContent(A,r,s,i),this.openDialogs.push(r),r.closed.subscribe(()=>this._removeOpenDialog(r,!0)),this.afterOpened.next(r),r}closeAll(){dM(this.openDialogs,A=>A.close())}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){dM(this._openDialogsAtThisLevel,A=>{A.config.closeOnDestroy===!1&&this._removeOpenDialog(A,!1)}),dM(this._openDialogsAtThisLevel,A=>A.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(A){let i=new Og({positionStrategy:A.positionStrategy||I2().centerHorizontally().centerVertically(),scrollStrategy:A.scrollStrategy||this._scrollStrategy(),panelClass:A.panelClass,hasBackdrop:A.hasBackdrop,direction:A.direction,minWidth:A.minWidth,minHeight:A.minHeight,maxWidth:A.maxWidth,maxHeight:A.maxHeight,width:A.width,height:A.height,disposeOnNavigation:A.closeOnNavigation,disableAnimations:A.disableAnimations});return A.backdropClass&&(i.backdropClass=A.backdropClass),i}_attachContainer(A,i,n){let o=n.injector||n.viewContainerRef?.injector,a=[{provide:d2,useValue:n},{provide:Ku,useValue:i},{provide:_B,useValue:A}],r;n.container?typeof n.container=="function"?r=n.container:(r=n.container.type,a.push(...n.container.providers(n))):r=BM;let s=new Ss(r,n.viewContainerRef,Dt.create({parent:o||this._injector,providers:a}));return A.attach(s).instance}_attachDialogContent(A,i,n,o){if(A instanceof ao){let a=this._createInjector(o,i,n,void 0),r={$implicit:o.data,dialogRef:i};o.templateContext&&(r=gA(gA({},r),typeof o.templateContext=="function"?o.templateContext():o.templateContext)),n.attachTemplatePortal(new Jr(A,null,r,a))}else{let a=this._createInjector(o,i,n,this._injector),r=n.attachComponentPortal(new Ss(A,o.viewContainerRef,a));i.componentRef=r,i.componentInstance=r.instance}}_createInjector(A,i,n,o){let a=A.injector||A.viewContainerRef?.injector,r=[{provide:RlA,useValue:A.data},{provide:Ku,useValue:i}];return A.providers&&(typeof A.providers=="function"?r.push(...A.providers(i,A,n)):r.push(...A.providers)),A.direction&&(!a||!a.get(fo,null,{optional:!0}))&&r.push({provide:fo,useValue:FlA(A.direction)}),Dt.create({parent:a||o,providers:r})}_removeOpenDialog(A,i){let n=this.openDialogs.indexOf(A);n>-1&&(this.openDialogs.splice(n,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((o,a)=>{o?a.setAttribute("aria-hidden",o):a.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),i&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(A){if(A.parentElement){let i=A.parentElement.children;for(let n=i.length-1;n>-1;n--){let o=i[n];o!==A&&o.nodeName!=="SCRIPT"&&o.nodeName!=="STYLE"&&!o.hasAttribute("aria-live")&&!o.hasAttribute("popover")&&(this._ariaHiddenElements.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function dM(t,e){let A=t.length;for(;A--;)e(t[A])}var _T=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({providers:[EM],imports:[Zl,Zc,WQ,Zc]})}return t})();function LlA(t,e){}var Zm=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;position;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;delayFocusTrap=!0;scrollStrategy;closeOnNavigation=!0;enterAnimationDuration;exitAnimationDuration},hM="mdc-dialog--open",RT="mdc-dialog--opening",NT="mdc-dialog--closing",GlA=150,KlA=75,UlA=(()=>{class t extends BM{_animationStateChanged=new LA;_animationsEnabled=!An();_actionSectionCount=0;_hostElement=this._elementRef.nativeElement;_enterAnimationDuration=this._animationsEnabled?LT(this._config.enterAnimationDuration)??GlA:0;_exitAnimationDuration=this._animationsEnabled?LT(this._config.exitAnimationDuration)??KlA:0;_animationTimer=null;_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(FT,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(RT,hM)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(hM),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(hM),this._animationsEnabled?(this._hostElement.style.setProperty(FT,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(NT)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(A){this._actionSectionCount+=A,this._changeDetectorRef.markForCheck()}_finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)};_finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})};_clearAnimationClasses(){this._hostElement.classList.remove(RT,NT)}_waitForAnimationToComplete(A,i){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(i,A)}_requestAnimationFrame(A){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(A):A()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(A){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:A})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(A){let i=super.attachComponentPortal(A);return i.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),i}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(i,n){i&2&&(ha("id",n._config.id),te("aria-modal",n._config.ariaModal)("role",n._config.role)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null),RA("_mat-animation-noopable",!n._animationsEnabled)("mat-mdc-dialog-container-with-actions",n._actionSectionCount>0))},features:[mt],decls:3,vars:0,consts:[[1,"mat-mdc-dialog-inner-container","mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(B(0,"div",0)(1,"div",1),Et(2,LlA,0,0,"ng-template",2),Q()())},dependencies:[Wl],styles:[`.mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents} +`],encapsulation:2})}return t})(),FT="--mat-dialog-transition-duration";function LT(t){return t==null?null:typeof t=="number"?t:t.endsWith("ms")?zs(t.substring(0,t.length-2)):t.endsWith("s")?zs(t.substring(0,t.length-1))*1e3:t==="0"?0:null}var Wm=(function(t){return t[t.OPEN=0]="OPEN",t[t.CLOSING=1]="CLOSING",t[t.CLOSED=2]="CLOSED",t})(Wm||{}),lo=class{_ref;_config;_containerInstance;componentInstance;componentRef=null;disableClose;id;_afterOpened=new Sg(1);_beforeClosed=new Sg(1);_result;_closeFallbackTimeout;_state=Wm.OPEN;_closeInteractionType;constructor(e,A,i){this._ref=e,this._config=A,this._containerInstance=i,this.disableClose=A.disableClose,this.id=e.id,e.addPanelClass("mat-mdc-dialog-panel"),i._animationStateChanged.pipe(gt(n=>n.state==="opened"),uo(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),i._animationStateChanged.pipe(gt(n=>n.state==="closed"),uo(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),e.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),Ki(this.backdropClick(),this.keydownEvents().pipe(gt(n=>n.keyCode===27&&!this.disableClose&&!Qa(n)))).subscribe(n=>{this.disableClose||(n.preventDefault(),GT(this,n.type==="keydown"?"keyboard":"mouse"))})}close(e){let A=this._config.closePredicate;A&&!A(e,this._config,this.componentInstance)||(this._result=e,this._containerInstance._animationStateChanged.pipe(gt(i=>i.state==="closing"),uo(1)).subscribe(i=>{this._beforeClosed.next(e),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),i.totalTime+100)}),this._state=Wm.CLOSING,this._containerInstance._startExitAnimation())}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(e){let A=this._ref.config.positionStrategy;return e&&(e.left||e.right)?e.left?A.left(e.left):A.right(e.right):A.centerHorizontally(),e&&(e.top||e.bottom)?e.top?A.top(e.top):A.bottom(e.bottom):A.centerVertically(),this._ref.updatePosition(),this}updateSize(e="",A=""){return this._ref.updateSize(e,A),this}addPanelClass(e){return this._ref.addPanelClass(e),this}removePanelClass(e){return this._ref.removePanelClass(e),this}getState(){return this._state}_finishDialogClose(){this._state=Wm.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function GT(t,e,A){return t._closeInteractionType=e,t.close(A)}var qo=new kA("MatMdcDialogData"),TlA=new kA("mat-mdc-dialog-default-options"),JlA=new kA("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>NB(t)}}),Or=(()=>{class t{_defaultOptions=w(TlA,{optional:!0});_scrollStrategy=w(JlA);_parentDialog=w(t,{optional:!0,skipSelf:!0});_idGenerator=w(In);_injector=w(Dt);_dialog=w(EM);_animationsDisabled=An();_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new ie;_afterOpenedAtThisLevel=new ie;dialogConfigClass=Zm;_dialogRefConstructor;_dialogContainerType;_dialogDataToken;get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}afterAllClosed=Lc(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(Sn(void 0)));constructor(){this._dialogRefConstructor=lo,this._dialogContainerType=UlA,this._dialogDataToken=qo}open(A,i){let n;i=gA(gA({},this._defaultOptions||new Zm),i),i.id=i.id||this._idGenerator.getId("mat-mdc-dialog-"),i.scrollStrategy=i.scrollStrategy||this._scrollStrategy();let o=this._dialog.open(A,Ye(gA({},i),{positionStrategy:I2(this._injector).centerHorizontally().centerVertically(),disableClose:!0,closePredicate:void 0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,disableAnimations:this._animationsDisabled||i.enterAnimationDuration?.toLocaleString()==="0"||i.exitAnimationDuration?.toString()==="0",container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:i},{provide:d2,useValue:i}]},templateContext:()=>({dialogRef:n}),providers:(a,r,s)=>(n=new this._dialogRefConstructor(a,i,s),n.updatePosition(i?.position),[{provide:this._dialogContainerType,useValue:s},{provide:this._dialogDataToken,useValue:r.data},{provide:this._dialogRefConstructor,useValue:n}])}));return n.componentRef=o.componentRef,n.componentInstance=o.componentInstance,this.openDialogs.push(n),this.afterOpened.next(n),n.afterClosed().subscribe(()=>{let a=this.openDialogs.indexOf(n);a>-1&&(this.openDialogs.splice(a,1),this.openDialogs.length||this._getAfterAllClosed().next())}),n}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(A){let i=A.length;for(;i--;)A[i].close()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),B2=(()=>{class t{dialogRef=w(lo,{optional:!0});_elementRef=w(ce);_dialog=w(Or);ariaLabel;type="button";dialogResult;_matDialogClose;constructor(){}ngOnInit(){this.dialogRef||(this.dialogRef=UT(this._elementRef,this._dialog.openDialogs))}ngOnChanges(A){let i=A._matDialogClose||A._matDialogCloseResult;i&&(this.dialogResult=i.currentValue)}_onButtonClick(A){GT(this.dialogRef,A.screenX===0&&A.screenY===0?"keyboard":"mouse",this.dialogResult)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","mat-dialog-close",""],["","matDialogClose",""]],hostVars:2,hostBindings:function(i,n){i&1&&U("click",function(a){return n._onButtonClick(a)}),i&2&&te("aria-label",n.ariaLabel||null)("type",n.type)},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],type:"type",dialogResult:[0,"mat-dialog-close","dialogResult"],_matDialogClose:[0,"matDialogClose","_matDialogClose"]},exportAs:["matDialogClose"],features:[Yt]})}return t})(),KT=(()=>{class t{_dialogRef=w(lo,{optional:!0});_elementRef=w(ce);_dialog=w(Or);constructor(){}ngOnInit(){this._dialogRef||(this._dialogRef=UT(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(()=>{this._onAdd()})}ngOnDestroy(){this._dialogRef?._containerInstance&&Promise.resolve().then(()=>{this._onRemove()})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t})}return t})(),fa=(()=>{class t extends KT{id=w(In).getId("mat-mdc-dialog-title-");_onAdd(){this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id)}_onRemove(){this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","mat-dialog-title",""],["","matDialogTitle",""]],hostAttrs:[1,"mat-mdc-dialog-title","mdc-dialog__title"],hostVars:1,hostBindings:function(i,n){i&2&&ha("id",n.id)},inputs:{id:"id"},exportAs:["matDialogTitle"],features:[mt]})}return t})(),Na=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","mat-dialog-content",""],["mat-dialog-content"],["","matDialogContent",""]],hostAttrs:[1,"mat-mdc-dialog-content","mdc-dialog__content"],features:[Z3([W0])]})}return t})(),pa=(()=>{class t extends KT{align;_onAdd(){this._dialogRef._containerInstance?._updateActionSectionCount?.(1)}_onRemove(){this._dialogRef._containerInstance?._updateActionSectionCount?.(-1)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","mat-dialog-actions",""],["mat-dialog-actions"],["","matDialogActions",""]],hostAttrs:[1,"mat-mdc-dialog-actions","mdc-dialog__actions"],hostVars:6,hostBindings:function(i,n){i&2&&RA("mat-mdc-dialog-actions-align-start",n.align==="start")("mat-mdc-dialog-actions-align-center",n.align==="center")("mat-mdc-dialog-actions-align-end",n.align==="end")},inputs:{align:"align"},features:[mt]})}return t})();function UT(t,e){let A=t.nativeElement.parentElement;for(;A&&!A.classList.contains("mat-mdc-dialog-container");)A=A.parentElement;return A?e.find(i=>i.id===A.id):null}var Xc=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({providers:[Or],imports:[_T,Zl,Zc,fi]})}return t})();function TT(t){return Error(`Unable to find icon with the name "${t}"`)}function OlA(){return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.")}function JT(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${t}".`)}function OT(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${t}".`)}var X0=class{url;svgText;options;svgElement=null;constructor(e,A,i){this.url=e,this.svgText=A,this.options=i}},HT=(()=>{class t{_httpClient;_sanitizer;_errorHandler;_document;_svgIconConfigs=new Map;_iconSetConfigs=new Map;_cachedIconsByUrl=new Map;_inProgressUrlFetches=new Map;_fontCssClassesByAlias=new Map;_resolvers=[];_defaultFontSetClass=["material-icons","mat-ligature-font"];constructor(A,i,n,o){this._httpClient=A,this._sanitizer=i,this._errorHandler=o,this._document=n}addSvgIcon(A,i,n){return this.addSvgIconInNamespace("",A,i,n)}addSvgIconLiteral(A,i,n){return this.addSvgIconLiteralInNamespace("",A,i,n)}addSvgIconInNamespace(A,i,n,o){return this._addSvgIconConfig(A,i,new X0(n,null,o))}addSvgIconResolver(A){return this._resolvers.push(A),this}addSvgIconLiteralInNamespace(A,i,n,o){let a=this._sanitizer.sanitize(_g.HTML,n);if(!a)throw OT(n);let r=e1(a);return this._addSvgIconConfig(A,i,new X0("",r,o))}addSvgIconSet(A,i){return this.addSvgIconSetInNamespace("",A,i)}addSvgIconSetLiteral(A,i){return this.addSvgIconSetLiteralInNamespace("",A,i)}addSvgIconSetInNamespace(A,i,n){return this._addSvgIconSetConfig(A,new X0(i,null,n))}addSvgIconSetLiteralInNamespace(A,i,n){let o=this._sanitizer.sanitize(_g.HTML,i);if(!o)throw OT(i);let a=e1(o);return this._addSvgIconSetConfig(A,new X0("",a,n))}registerFontClassAlias(A,i=A){return this._fontCssClassesByAlias.set(A,i),this}classNameForFontAlias(A){return this._fontCssClassesByAlias.get(A)||A}setDefaultFontSetClass(...A){return this._defaultFontSetClass=A,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(A){let i=this._sanitizer.sanitize(_g.RESOURCE_URL,A);if(!i)throw JT(A);let n=this._cachedIconsByUrl.get(i);return n?oe(Xm(n)):this._loadSvgIconFromConfig(new X0(A,null)).pipe(Ii(o=>this._cachedIconsByUrl.set(i,o)),we(o=>Xm(o)))}getNamedSvgIcon(A,i=""){let n=YT(i,A),o=this._svgIconConfigs.get(n);if(o)return this._getSvgFromConfig(o);if(o=this._getIconConfigFromResolvers(i,A),o)return this._svgIconConfigs.set(n,o),this._getSvgFromConfig(o);let a=this._iconSetConfigs.get(i);return a?this._getSvgFromIconSetConfigs(A,a):T3(TT(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(A){return A.svgText?oe(Xm(this._svgElementFromConfig(A))):this._loadSvgIconFromConfig(A).pipe(we(i=>Xm(i)))}_getSvgFromIconSetConfigs(A,i){let n=this._extractIconWithNameFromAnySet(A,i);if(n)return oe(n);let o=i.filter(a=>!a.svgText).map(a=>this._loadSvgIconSetFromConfig(a).pipe(Po(r=>{let l=`Loading icon set URL: ${this._sanitizer.sanitize(_g.RESOURCE_URL,a.url)} failed: ${r.message}`;return this._errorHandler.handleError(new Error(l)),oe(null)})));return qC(o).pipe(we(()=>{let a=this._extractIconWithNameFromAnySet(A,i);if(!a)throw TT(A);return a}))}_extractIconWithNameFromAnySet(A,i){for(let n=i.length-1;n>=0;n--){let o=i[n];if(o.svgText&&o.svgText.toString().indexOf(A)>-1){let a=this._svgElementFromConfig(o),r=this._extractSvgIconFromSet(a,A,o.options);if(r)return r}}return null}_loadSvgIconFromConfig(A){return this._fetchIcon(A).pipe(Ii(i=>A.svgText=i),we(()=>this._svgElementFromConfig(A)))}_loadSvgIconSetFromConfig(A){return A.svgText?oe(null):this._fetchIcon(A).pipe(Ii(i=>A.svgText=i))}_extractSvgIconFromSet(A,i,n){let o=A.querySelector(`[id="${i}"]`);if(!o)return null;let a=o.cloneNode(!0);if(a.removeAttribute("id"),a.nodeName.toLowerCase()==="svg")return this._setSvgAttributes(a,n);if(a.nodeName.toLowerCase()==="symbol")return this._setSvgAttributes(this._toSvgElement(a),n);let r=this._svgElementFromString(e1(""));return r.appendChild(a),this._setSvgAttributes(r,n)}_svgElementFromString(A){let i=this._document.createElement("DIV");i.innerHTML=A;let n=i.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(A){let i=this._svgElementFromString(e1("")),n=A.attributes;for(let o=0;oe1(l)),H3(()=>this._inProgressUrlFetches.delete(a)),WC());return this._inProgressUrlFetches.set(a,s),s}_addSvgIconConfig(A,i,n){return this._svgIconConfigs.set(YT(A,i),n),this}_addSvgIconSetConfig(A,i){let n=this._iconSetConfigs.get(A);return n?n.push(i):this._iconSetConfigs.set(A,[i]),this}_svgElementFromConfig(A){if(!A.svgElement){let i=this._svgElementFromString(A.svgText);this._setSvgAttributes(i,A.options),A.svgElement=i}return A.svgElement}_getIconConfigFromResolvers(A,i){for(let n=0;n{let t=w(ti),e=t?t.location:null;return{getPathname:()=>e?e.pathname+e.search:""}}}),zT=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],jlA=zT.map(t=>`[${t}]`).join(", "),qlA=/^url\(['"]?#(.*?)['"]?\)$/,Wt=(()=>{class t{_elementRef=w(ce);_iconRegistry=w(HT);_location=w(PlA);_errorHandler=w(z3);_defaultColor;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;inline=!1;get svgIcon(){return this._svgIcon}set svgIcon(A){A!==this._svgIcon&&(A?this._updateSvgIcon(A):this._svgIcon&&this._clearSvgElement(),this._svgIcon=A)}_svgIcon;get fontSet(){return this._fontSet}set fontSet(A){let i=this._cleanupFontValue(A);i!==this._fontSet&&(this._fontSet=i,this._updateFontIconClasses())}_fontSet;get fontIcon(){return this._fontIcon}set fontIcon(A){let i=this._cleanupFontValue(A);i!==this._fontIcon&&(this._fontIcon=i,this._updateFontIconClasses())}_fontIcon;_previousFontSetClass=[];_previousFontIconClass;_svgName=null;_svgNamespace=null;_previousPath;_elementsWithExternalReferences;_currentIconFetch=bo.EMPTY;constructor(){let A=w(new Us("aria-hidden"),{optional:!0}),i=w(zlA,{optional:!0});i&&(i.color&&(this.color=this._defaultColor=i.color),i.fontSet&&(this.fontSet=i.fontSet)),A||this._elementRef.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(A){if(!A)return["",""];let i=A.split(":");switch(i.length){case 1:return["",i[0]];case 2:return i;default:throw Error(`Invalid icon name: "${A}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){let A=this._elementsWithExternalReferences;if(A&&A.size){let i=this._location.getPathname();i!==this._previousPath&&(this._previousPath=i,this._prependPathToReferences(i))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(A){this._clearSvgElement();let i=this._location.getPathname();this._previousPath=i,this._cacheChildrenWithExternalReferences(A),this._prependPathToReferences(i),this._elementRef.nativeElement.appendChild(A)}_clearSvgElement(){let A=this._elementRef.nativeElement,i=A.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();i--;){let n=A.childNodes[i];(n.nodeType!==1||n.nodeName.toLowerCase()==="svg")&&n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;let A=this._elementRef.nativeElement,i=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(n=>n.length>0);this._previousFontSetClass.forEach(n=>A.classList.remove(n)),i.forEach(n=>A.classList.add(n)),this._previousFontSetClass=i,this.fontIcon!==this._previousFontIconClass&&!i.includes("mat-ligature-font")&&(this._previousFontIconClass&&A.classList.remove(this._previousFontIconClass),this.fontIcon&&A.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(A){return typeof A=="string"?A.trim().split(" ")[0]:A}_prependPathToReferences(A){let i=this._elementsWithExternalReferences;i&&i.forEach((n,o)=>{n.forEach(a=>{o.setAttribute(a.name,`url('${A}#${a.value}')`)})})}_cacheChildrenWithExternalReferences(A){let i=A.querySelectorAll(jlA),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let o=0;o{let r=i[o],s=r.getAttribute(a),l=s?s.match(qlA):null;if(l){let g=n.get(r);g||(g=[],n.set(r,g)),g.push({name:a,value:l[1]})}})}_updateSvgIcon(A){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),A){let[i,n]=this._splitIconName(A);i&&(this._svgNamespace=i),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,i).pipe(uo(1)).subscribe(o=>this._setSvgElement(o),o=>{let a=`Error retrieving icon ${i}:${n}! ${o.message}`;this._errorHandler.handleError(new Error(a))})}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:10,hostBindings:function(i,n){i&2&&(te("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),ro(n.color?"mat-"+n.color:""),RA("mat-icon-inline",n.inline)("mat-icon-no-color",n.color!=="primary"&&n.color!=="accent"&&n.color!=="warn"))},inputs:{color:"color",inline:[2,"inline","inline",Be],svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],ngContentSelectors:HlA,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),Ve(0))},styles:[`mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto} +`],encapsulation:2,changeDetection:0})}return t})(),Tn=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var VlA=["mat-menu-item",""],WlA=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],ZlA=["mat-icon, [matMenuItemIcon]","*"];function XlA(t,e){t&1&&(Ct(),B(0,"svg",2),QA(1,"polygon",3),Q())}var $lA=["*"];function AgA(t,e){if(t&1){let A=hA();wn(0,"div",0),qd("click",function(){T(A);let n=p();return J(n.closed.emit("click"))})("animationstart",function(n){T(A);let o=p();return J(o._onAnimationStart(n.animationName))})("animationend",function(n){T(A);let o=p();return J(o._onAnimationDone(n.animationName))})("animationcancel",function(n){T(A);let o=p();return J(o._onAnimationDone(n.animationName))}),wn(1,"div",1),Ve(2),Gn()()}if(t&2){let A=p();ro(A._classList),RA("mat-menu-panel-animations-disabled",A._animationsDisabled)("mat-menu-panel-exit-animation",A._panelAnimationState==="void")("mat-menu-panel-animating",A._isAnimating()),ha("id",A.panelId),te("aria-label",A.ariaLabel||null)("aria-labelledby",A.ariaLabelledby||null)("aria-describedby",A.ariaDescribedby||null)}}var uM=new kA("MAT_MENU_PANEL"),Ml=(()=>{class t{_elementRef=w(ce);_document=w(ti);_focusMonitor=w($a);_parentMenu=w(uM,{optional:!0});_changeDetectorRef=w(wt);role="menuitem";disabled=!1;disableRipple=!1;_hovered=new ie;_focused=new ie;_highlighted=!1;_triggersSubmenu=!1;constructor(){w(eo).load(lr),this._parentMenu?.addItem?.(this)}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._getHostElement(),A,i):this._getHostElement().focus(i),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(A){this.disabled&&(A.preventDefault(),A.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){let A=this._elementRef.nativeElement.cloneNode(!0),i=A.querySelectorAll("mat-icon, .material-icons");for(let n=0;n({overlapTrigger:!1,xPosition:"after",yPosition:"below",backdropClass:"cdk-overlay-transparent-backdrop"})}),QM="_mat-menu-enter",A6="_mat-menu-exit",Zs=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_injector=w(Dt);_keyManager;_xPosition;_yPosition;_firstItemFocusRef;_exitFallbackTimeout;_animationsDisabled=An();_allItems;_directDescendantItems=new xg;_classList={};_panelAnimationState="void";_animationDone=new ie;_isAnimating=bA(!1);parentMenu;direction;overlayPanelClass;backdropClass;ariaLabel;ariaLabelledby;ariaDescribedby;get xPosition(){return this._xPosition}set xPosition(A){this._xPosition=A,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(A){this._yPosition=A,this.setPositionClasses()}templateRef;items;lazyContent;overlapTrigger=!1;hasBackdrop;set panelClass(A){let i=this._previousPanelClass,n=gA({},this._classList);i&&i.length&&i.split(" ").forEach(o=>{n[o]=!1}),this._previousPanelClass=A,A&&A.length&&(A.split(" ").forEach(o=>{n[o]=!0}),this._elementRef.nativeElement.className=""),this._classList=n}_previousPanelClass;get classList(){return this.panelClass}set classList(A){this.panelClass=A}closed=new LA;close=this.closed;panelId=w(In).getId("mat-menu-panel-");constructor(){let A=w(tgA);this.overlayPanelClass=A.overlayPanelClass||"",this._xPosition=A.xPosition,this._yPosition=A.yPosition,this.backdropClass=A.backdropClass,this.overlapTrigger=A.overlapTrigger,this.hasBackdrop=A.hasBackdrop}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new H0(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(Sn(this._directDescendantItems),Ei(A=>Ki(...A.map(i=>i._focused)))).subscribe(A=>this._keyManager.updateActiveItem(A)),this._directDescendantItems.changes.subscribe(A=>{let i=this._keyManager;if(this._panelAnimationState==="enter"&&i.activeItem?._hasFocus()){let n=A.toArray(),o=Math.max(0,Math.min(n.length-1,i.activeItemIndex||0));n[o]&&!n[o].disabled?i.setActiveItem(o):i.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusRef?.destroy(),clearTimeout(this._exitFallbackTimeout)}_hovered(){return this._directDescendantItems.changes.pipe(Sn(this._directDescendantItems),Ei(i=>Ki(...i.map(n=>n._hovered))))}addItem(A){}removeItem(A){}_handleKeydown(A){let i=A.keyCode,n=this._keyManager;switch(i){case 27:Qa(A)||(A.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&this.direction==="ltr"&&this.closed.emit("keydown");break;case 39:this.parentMenu&&this.direction==="rtl"&&this.closed.emit("keydown");break;default:(i===38||i===40)&&n.setFocusOrigin("keyboard"),n.onKeydown(A);return}}focusFirstItem(A="program"){this._firstItemFocusRef?.destroy(),this._firstItemFocusRef=Hn(()=>{let i=this._resolvePanel();if(!i||!i.contains(document.activeElement)){let n=this._keyManager;n.setFocusOrigin(A).setFirstItemActive(),!n.activeItem&&i&&i.focus()}},{injector:this._injector})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(A){}setPositionClasses(A=this.xPosition,i=this.yPosition){this._classList=Ye(gA({},this._classList),{"mat-menu-before":A==="before","mat-menu-after":A==="after","mat-menu-above":i==="above","mat-menu-below":i==="below"}),this._changeDetectorRef.markForCheck()}_onAnimationDone(A){let i=A===A6;(i||A===QM)&&(i&&(clearTimeout(this._exitFallbackTimeout),this._exitFallbackTimeout=void 0),this._animationDone.next(i?"void":"enter"),this._isAnimating.set(!1))}_onAnimationStart(A){(A===QM||A===A6)&&this._isAnimating.set(!0)}_setIsOpen(A){if(this._panelAnimationState=A?"enter":"void",A){if(this._keyManager.activeItemIndex===0){let i=this._resolvePanel();i&&(i.scrollTop=0)}}else this._animationsDisabled||(this._exitFallbackTimeout=setTimeout(()=>this._onAnimationDone(A6),200));this._animationsDisabled&&setTimeout(()=>{this._onAnimationDone(A?QM:A6)}),this._changeDetectorRef.markForCheck()}_updateDirectDescendants(){this._allItems.changes.pipe(Sn(this._allItems)).subscribe(A=>{this._directDescendantItems.reset(A.filter(i=>i._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}_resolvePanel(){let A=null;return this._directDescendantItems.length&&(A=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-menu"]],contentQueries:function(i,n,o){if(i&1&&jo(o,egA,5)(o,Ml,5)(o,Ml,4),i&2){let a;ae(a=re())&&(n.lazyContent=a.first),ae(a=re())&&(n._allItems=a),ae(a=re())&&(n.items=a)}},viewQuery:function(i,n){if(i&1&&Jt(ao,5),i&2){let o;ae(o=re())&&(n.templateRef=o.first)}},hostVars:3,hostBindings:function(i,n){i&2&&te("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},inputs:{backdropClass:"backdropClass",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:[2,"overlapTrigger","overlapTrigger",Be],hasBackdrop:[2,"hasBackdrop","hasBackdrop",A=>A==null?null:Be(A)],panelClass:[0,"class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"},exportAs:["matMenu"],features:[Bt([{provide:uM,useExisting:t}])],ngContentSelectors:$lA,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel",3,"click","animationstart","animationend","animationcancel","id"],[1,"mat-mdc-menu-content"]],template:function(i,n){i&1&&(Rt(),X3(0,AgA,3,12,"ng-template"))},styles:[`mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}@keyframes _mat-menu-enter{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:none}}@keyframes _mat-menu-exit{from{opacity:1}to{opacity:0}}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;box-sizing:border-box;outline:0;animation:_mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));box-shadow:var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));will-change:transform,opacity}.mat-mdc-menu-panel.mat-menu-panel-exit-animation{animation:_mat-menu-exit 100ms 25ms linear forwards}.mat-mdc-menu-panel.mat-menu-panel-animations-disabled{animation:none}.mat-mdc-menu-panel.mat-menu-panel-animating{pointer-events:none}.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{border-top-color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none} +`],encapsulation:2,changeDetection:0})}return t})(),igA=new kA("mat-menu-scroll-strategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>Z0(t)}});var FB=new WeakMap,ngA=(()=>{class t{_canHaveBackdrop;_element=w(ce);_viewContainerRef=w(Mo);_menuItemInstance=w(Ml,{optional:!0,self:!0});_dir=w(fo,{optional:!0});_focusMonitor=w($a);_ngZone=w(qe);_injector=w(Dt);_scrollStrategy=w(igA);_changeDetectorRef=w(wt);_animationsDisabled=An();_portal;_overlayRef=null;_menuOpen=!1;_closingActionsSubscription=bo.EMPTY;_menuCloseSubscription=bo.EMPTY;_pendingRemoval;_parentMaterialMenu;_parentInnerPadding;_openedBy=void 0;get _menu(){return this._menuInternal}set _menu(A){A!==this._menuInternal&&(this._menuInternal=A,this._menuCloseSubscription.unsubscribe(),A&&(this._parentMaterialMenu,this._menuCloseSubscription=A.close.subscribe(i=>{this._destroyMenu(i),(i==="click"||i==="tab")&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(i)})),this._menuItemInstance?._setTriggersSubmenu(this._triggersSubmenu()))}_menuInternal=null;constructor(A){this._canHaveBackdrop=A;let i=w(uM,{optional:!0});this._parentMaterialMenu=i instanceof Zs?i:void 0}ngOnDestroy(){this._menu&&this._ownsMenu(this._menu)&&FB.delete(this._menu),this._pendingRemoval?.unsubscribe(),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null)}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this._menu)}_closeMenu(){this._menu?.close.emit()}_openMenu(A){if(this._triggerIsAriaDisabled())return;let i=this._menu;if(this._menuOpen||!i)return;this._pendingRemoval?.unsubscribe();let n=FB.get(i);FB.set(i,this),n&&n!==this&&n._closeMenu();let o=this._createOverlay(i),a=o.getConfig(),r=a.positionStrategy;this._setPosition(i,r),this._canHaveBackdrop?a.hasBackdrop=i.hasBackdrop==null?!this._triggersSubmenu():i.hasBackdrop:a.hasBackdrop=i.hasBackdrop??!1,o.hasAttached()||(o.attach(this._getPortal(i)),i.lazyContent?.attach(this.menuData)),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this._closeMenu()),i.parentMenu=this._triggersSubmenu()?this._parentMaterialMenu:void 0,i.direction=this.dir,A&&i.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0),i instanceof Zs&&(i._setIsOpen(!0),i._directDescendantItems.changes.pipe(Qt(i.close)).subscribe(()=>{r.withLockedPosition(!1).reapplyLastPosition(),r.withLockedPosition(!0)}))}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}_destroyMenu(A){let i=this._overlayRef,n=this._menu;!i||!this.menuOpen||(this._closingActionsSubscription.unsubscribe(),this._pendingRemoval?.unsubscribe(),n instanceof Zs&&this._ownsMenu(n)?(this._pendingRemoval=n._animationDone.pipe(uo(1)).subscribe(()=>{i.detach(),FB.has(n)||n.lazyContent?.detach()}),n._setIsOpen(!1)):(i.detach(),n?.lazyContent?.detach()),n&&this._ownsMenu(n)&&FB.delete(n),this.restoreFocus&&(A==="keydown"||!this._openedBy||!this._triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,this._setIsMenuOpen(!1))}_setIsMenuOpen(A){A!==this._menuOpen&&(this._menuOpen=A,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this._triggersSubmenu()&&this._menuItemInstance._setHighlighted(A),this._changeDetectorRef.markForCheck())}_createOverlay(A){if(!this._overlayRef){let i=this._getOverlayConfig(A);this._subscribeToPositions(A,i.positionStrategy),this._overlayRef=Hg(this._injector,i),this._overlayRef.keydownEvents().subscribe(n=>{this._menu instanceof Zs&&this._menu._handleKeydown(n)})}return this._overlayRef}_getOverlayConfig(A){return new Og({positionStrategy:y1(this._injector,this._getOverlayOrigin()).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:A.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:A.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir||"ltr",disableAnimations:this._animationsDisabled})}_subscribeToPositions(A,i){A.setPositionClasses&&i.positionChanges.subscribe(n=>{this._ngZone.run(()=>{let o=n.connectionPair.overlayX==="start"?"after":"before",a=n.connectionPair.overlayY==="top"?"below":"above";A.setPositionClasses(o,a)})})}_setPosition(A,i){let[n,o]=A.xPosition==="before"?["end","start"]:["start","end"],[a,r]=A.yPosition==="above"?["bottom","top"]:["top","bottom"],[s,l]=[a,r],[g,C]=[n,o],I=0;if(this._triggersSubmenu()){if(C=n=A.xPosition==="before"?"start":"end",o=g=n==="end"?"start":"end",this._parentMaterialMenu){if(this._parentInnerPadding==null){let d=this._parentMaterialMenu.items.first;this._parentInnerPadding=d?d._getHostElement().offsetTop:0}I=a==="bottom"?this._parentInnerPadding:-this._parentInnerPadding}}else A.overlapTrigger||(s=a==="top"?"bottom":"top",l=r==="top"?"bottom":"top");i.withPositions([{originX:n,originY:s,overlayX:g,overlayY:a,offsetY:I},{originX:o,originY:s,overlayX:C,overlayY:a,offsetY:I},{originX:n,originY:l,overlayX:g,overlayY:r,offsetY:-I},{originX:o,originY:l,overlayX:C,overlayY:r,offsetY:-I}])}_menuClosingActions(){let A=this._getOutsideClickStream(this._overlayRef),i=this._overlayRef.detachments(),n=this._parentMaterialMenu?this._parentMaterialMenu.closed:oe(),o=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(gt(a=>this._menuOpen&&a!==this._menuItemInstance)):oe();return Ki(A,n,o,i)}_getPortal(A){return(!this._portal||this._portal.templateRef!==A.templateRef)&&(this._portal=new Jr(A.templateRef,this._viewContainerRef)),this._portal}_ownsMenu(A){return FB.get(A)===this}_triggerIsAriaDisabled(){return Be(this._element.nativeElement.getAttribute("aria-disabled"))}static \u0275fac=function(i){V3()};static \u0275dir=VA({type:t})}return t})(),$c=(()=>{class t extends ngA{_cleanupTouchstart;_hoverSubscription=bo.EMPTY;get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(A){this.menu=A}get menu(){return this._menu}set menu(A){this._menu=A}menuData;restoreFocus=!0;menuOpened=new LA;onMenuOpen=this.menuOpened;menuClosed=new LA;onMenuClose=this.menuClosed;constructor(){super(!0);let A=w(Pi);this._cleanupTouchstart=A.listen(this._element.nativeElement,"touchstart",i=>{A1(i)||(this._openedBy="touch")},{passive:!0})}triggersSubmenu(){return super._triggersSubmenu()}toggleMenu(){return this.menuOpen?this.closeMenu():this.openMenu()}openMenu(){this._openMenu(!0)}closeMenu(){this._closeMenu()}updatePosition(){this._overlayRef?.updatePosition()}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTouchstart(),this._hoverSubscription.unsubscribe()}_getOverlayOrigin(){return this._element}_getOutsideClickStream(A){return A.backdropClick()}_handleMousedown(A){$I(A)||(this._openedBy=A.button===0?"mouse":void 0,this.triggersSubmenu()&&A.preventDefault())}_handleKeydown(A){let i=A.keyCode;(i===13||i===32)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(i===39&&this.dir==="ltr"||i===37&&this.dir==="rtl")&&(this._openedBy="keyboard",this.openMenu())}_handleClick(A){this.triggersSubmenu()?(A.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().subscribe(A=>{A===this._menuItemInstance&&!A.disabled&&this._parentMaterialMenu?._panelAnimationState!=="void"&&(this._openedBy="mouse",this._openMenu(!1))}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],hostVars:3,hostBindings:function(i,n){i&1&&U("click",function(a){return n._handleClick(a)})("mousedown",function(a){return n._handleMousedown(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&te("aria-haspopup",n.menu?"menu":null)("aria-expanded",n.menuOpen)("aria-controls",n.menuOpen?n.menu==null?null:n.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:[0,"mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:[0,"matMenuTriggerFor","menu"],menuData:[0,"matMenuTriggerData","menuData"],restoreFocus:[0,"matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"},exportAs:["matMenuTrigger"],features:[mt]})}return t})();var LB=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Yc,Zl,fi,Vc]})}return t})();var ogA=["text"],agA=[[["mat-icon"]],"*"],rgA=["mat-icon","*"];function sgA(t,e){if(t&1&&QA(0,"mat-pseudo-checkbox",1),t&2){let A=p();H("disabled",A.disabled)("state",A.selected?"checked":"unchecked")}}function lgA(t,e){if(t&1&&QA(0,"mat-pseudo-checkbox",3),t&2){let A=p();H("disabled",A.disabled)}}function ggA(t,e){if(t&1&&(B(0,"span",4),y(1),Q()),t&2){let A=p();u(),ue("(",A.group.label,")")}}var t6=new kA("MAT_OPTION_PARENT_COMPONENT"),i6=new kA("MatOptgroup");var e6=class{source;isUserInput;constructor(e,A=!1){this.source=e,this.isUserInput=A}},Yr=(()=>{class t{_element=w(ce);_changeDetectorRef=w(wt);_parent=w(t6,{optional:!0});group=w(i6,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=w(In).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=bA(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new LA;_text;_stateChanges=new ie;constructor(){let A=w(eo);A.load(lr),A.load(o2),this._signalDisableRipple=!!this._parent&&VI(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(A=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}deselect(A=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}focus(A,i){let n=this._getHostElement();typeof n.focus=="function"&&n.focus(i)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!Qa(A)&&(this._selectViaInteraction(),A.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let A=this.viewValue;A!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=A)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(A=!1){this.onSelectionChange.emit(new e6(this,A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-option"]],viewQuery:function(i,n){if(i&1&&Jt(ogA,7),i&2){let o;ae(o=re())&&(n._text=o.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(i,n){i&1&&U("click",function(){return n._selectViaInteraction()})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(ha("id",n.id),te("aria-selected",n.selected)("aria-disabled",n.disabled.toString()),RA("mdc-list-item--selected",n.selected)("mat-mdc-option-multiple",n.multiple)("mat-mdc-option-active",n.active)("mdc-list-item--disabled",n.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",Be]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:rgA,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(i,n){i&1&&(Rt(agA),O(0,sgA,1,2,"mat-pseudo-checkbox",1),Ve(1),B(2,"span",2,0),Ve(4,1),Q(),O(5,lgA,1,1,"mat-pseudo-checkbox",3),O(6,ggA,2,1,"span",4),QA(7,"div",5)),i&2&&(Y(n.multiple?0:-1),u(5),Y(!n.multiple&&n.selected&&!n.hideSingleSelectionIndicator?5:-1),u(),Y(n.group&&n.group._inert?6:-1),u(),H("matRippleTrigger",n._getHostElement())("matRippleDisabled",n.disabled||n.disableRipple))},dependencies:[Gm,rs],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""} +`],encapsulation:2,changeDetection:0})}return t})();function pM(t,e,A){if(A.length){let i=e.toArray(),n=A.toArray(),o=0;for(let a=0;aA+i?Math.max(0,t-i+e):A}var PT=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var wM=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Yc,PT,Yr,fi]})}return t})();var cgA=["trigger"],CgA=["panel"],IgA=[[["mat-select-trigger"]],"*"],dgA=["mat-select-trigger","*"];function BgA(t,e){if(t&1&&(B(0,"span",4),y(1),Q()),t&2){let A=p();u(),lA(A.placeholder)}}function EgA(t,e){t&1&&Ve(0)}function hgA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(2);u(),lA(A.triggerValue)}}function QgA(t,e){if(t&1&&(B(0,"span",5),O(1,EgA,1,0)(2,hgA,2,1,"span",11),Q()),t&2){let A=p();u(),Y(A.customTrigger?1:2)}}function ugA(t,e){if(t&1){let A=hA();B(0,"div",12,1),U("keydown",function(n){T(A);let o=p();return J(o._handleKeydown(n))}),Ve(2,1),Q()}if(t&2){let A=p();ro(A.panelClass),RA("mat-select-panel-animations-enabled",!A._animationsDisabled)("mat-primary",(A._parentFormField==null?null:A._parentFormField.color)==="primary")("mat-accent",(A._parentFormField==null?null:A._parentFormField.color)==="accent")("mat-warn",(A._parentFormField==null?null:A._parentFormField.color)==="warn")("mat-undefined",!(A._parentFormField!=null&&A._parentFormField.color)),te("id",A.id+"-panel")("aria-multiselectable",A.multiple)("aria-label",A.ariaLabel||null)("aria-labelledby",A._getPanelAriaLabelledby())}}var fgA=new kA("mat-select-scroll-strategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>Z0(t)}}),pgA=new kA("MAT_SELECT_CONFIG"),mgA=new kA("MatSelectTrigger"),DM=class{source;value;constructor(e,A){this.source=e,this.value=A}},Xl=(()=>{class t{_viewportRuler=w(Ms);_changeDetectorRef=w(wt);_elementRef=w(ce);_dir=w(fo,{optional:!0});_idGenerator=w(In);_renderer=w(Pi);_parentFormField=w(tu,{optional:!0});ngControl=w(Hs,{self:!0,optional:!0});_liveAnnouncer=w(VQ);_defaultOptions=w(pgA,{optional:!0});_animationsDisabled=An();_popoverLocation;_initialized=new ie;_cleanupDetach;options;optionGroups;customTrigger;_positions=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"}];_scrollOptionIntoView(A){let i=this.options.toArray()[A];if(i){let n=this.panel.nativeElement,o=pM(A,this.options,this.optionGroups),a=i._getHostElement();A===0&&o===1?n.scrollTop=0:n.scrollTop=mM(a.offsetTop,a.offsetHeight,n.scrollTop,n.offsetHeight)}}_positioningSettled(){this._scrollOptionIntoView(this._keyManager.activeItemIndex||0)}_getChangeEvent(A){return new DM(this,A)}_scrollStrategyFactory=w(fgA);_panelOpen=!1;_compareWith=(A,i)=>A===i;_uid=this._idGenerator.getId("mat-select-");_triggerAriaLabelledBy=null;_previousControl;_destroy=new ie;_errorStateTracker;stateChanges=new ie;disableAutomaticLabeling=!0;userAriaDescribedBy;_selectionModel;_keyManager;_preferredOverlayOrigin;_overlayWidth;_onChange=()=>{};_onTouched=()=>{};_valueId=this._idGenerator.getId("mat-select-value-");_scrollStrategy;_overlayPanelClass=this._defaultOptions?.overlayPanelClass||"";get focused(){return this._focused||this._panelOpen}_focused=!1;controlType="mat-select";trigger;panel;_overlayDir;panelClass;disabled=!1;get disableRipple(){return this._disableRipple()}set disableRipple(A){this._disableRipple.set(A)}_disableRipple=bA(!1);tabIndex=0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncParentProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get placeholder(){return this._placeholder}set placeholder(A){this._placeholder=A,this.stateChanges.next()}_placeholder;get required(){return this._required??this.ngControl?.control?.hasValidator(Ys.required)??!1}set required(A){this._required=A,this.stateChanges.next()}_required;get multiple(){return this._multiple}set multiple(A){this._selectionModel,this._multiple=A}_multiple=!1;disableOptionCentering=this._defaultOptions?.disableOptionCentering??!1;get compareWith(){return this._compareWith}set compareWith(A){this._compareWith=A,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(A){this._assignValue(A)&&this._onChange(A)}_value;ariaLabel="";ariaLabelledby;get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}typeaheadDebounceInterval;sortComparator;get id(){return this._id}set id(A){this._id=A||this._uid,this.stateChanges.next()}_id;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}panelWidth=this._defaultOptions&&typeof this._defaultOptions.panelWidth<"u"?this._defaultOptions.panelWidth:"auto";canSelectNullableOptions=this._defaultOptions?.canSelectNullableOptions??!1;optionSelectionChanges=Lc(()=>{let A=this.options;return A?A.changes.pipe(Sn(A),Ei(()=>Ki(...A.map(i=>i.onSelectionChange)))):this._initialized.pipe(Ei(()=>this.optionSelectionChanges))});openedChange=new LA;_openedStream=this.openedChange.pipe(gt(A=>A),we(()=>{}));_closedStream=this.openedChange.pipe(gt(A=>!A),we(()=>{}));selectionChange=new LA;valueChange=new LA;constructor(){let A=w(gB),i=w(eB,{optional:!0}),n=w(i2,{optional:!0}),o=w(new Us("tabindex"),{optional:!0}),a=w(Gu,{optional:!0});this.ngControl&&(this.ngControl.valueAccessor=this),this._defaultOptions?.typeaheadDebounceInterval!=null&&(this.typeaheadDebounceInterval=this._defaultOptions.typeaheadDebounceInterval),this._errorStateTracker=new cB(A,this.ngControl,n,i,this.stateChanges),this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=o==null?0:parseInt(o)||0,this._popoverLocation=a?.usePopover===!1?null:"inline",this.id=this.id}ngOnInit(){this._selectionModel=new V0(this.multiple),this.stateChanges.next(),this._viewportRuler.change().pipe(Qt(this._destroy)).subscribe(()=>{this.panelOpen&&(this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._changeDetectorRef.detectChanges())})}ngAfterContentInit(){this._initialized.next(),this._initialized.complete(),this._initKeyManager(),this._selectionModel.changed.pipe(Qt(this._destroy)).subscribe(A=>{A.added.forEach(i=>i.select()),A.removed.forEach(i=>i.deselect())}),this.options.changes.pipe(Sn(null),Qt(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){let A=this._getTriggerAriaLabelledby(),i=this.ngControl;if(A!==this._triggerAriaLabelledBy){let n=this._elementRef.nativeElement;this._triggerAriaLabelledBy=A,A?n.setAttribute("aria-labelledby",A):n.removeAttribute("aria-labelledby")}i&&(this._previousControl!==i.control&&(this._previousControl!==void 0&&i.disabled!==null&&i.disabled!==this.disabled&&(this.disabled=i.disabled),this._previousControl=i.control),this.updateErrorState())}ngOnChanges(A){(A.disabled||A.userAriaDescribedBy)&&this.stateChanges.next(),A.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval),A.panelClass&&this.panelClass instanceof Set&&(this.panelClass=Array.from(this.panelClass))}ngOnDestroy(){this._cleanupDetach?.(),this._keyManager?.destroy(),this._destroy.next(),this._destroy.complete(),this.stateChanges.complete(),this._clearFromModal()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._parentFormField&&(this._preferredOverlayOrigin=this._parentFormField.getConnectedOverlayOrigin()),this._cleanupDetach?.(),this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._applyModalPanelOwnership(),this._panelOpen=!0,this._overlayDir.positionChange.pipe(uo(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()}),this._overlayDir.attachOverlay(),this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!0)))}_trackedModal=null;_applyModalPanelOwnership(){let A=this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!A)return;let i=`${this.id}-panel`;this._trackedModal&&yp(this._trackedModal,"aria-owns",i),Sb(A,"aria-owns",i),this._trackedModal=A}_clearFromModal(){if(!this._trackedModal)return;let A=`${this.id}-panel`;yp(this._trackedModal,"aria-owns",A),this._trackedModal=null}close(){this._panelOpen&&(this._panelOpen=!1,this._exitAndDetach(),this._keyManager.withHorizontalOrientation(this._isRtl()?"rtl":"ltr"),this._changeDetectorRef.markForCheck(),this._onTouched(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!1)))}_exitAndDetach(){if(this._animationsDisabled||!this.panel){this._detachOverlay();return}this._cleanupDetach?.(),this._cleanupDetach=()=>{i(),clearTimeout(n),this._cleanupDetach=void 0};let A=this.panel.nativeElement,i=this._renderer.listen(A,"animationend",o=>{o.animationName==="_mat-select-exit"&&(this._cleanupDetach?.(),this._detachOverlay())}),n=setTimeout(()=>{this._cleanupDetach?.(),this._detachOverlay()},200);A.classList.add("mat-select-panel-exit")}_detachOverlay(){this._overlayDir.detachOverlay(),this._changeDetectorRef.markForCheck()}writeValue(A){this._assignValue(A)}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel?.selected||[]:this._selectionModel?.selected[0]}get triggerValue(){if(this.empty)return"";if(this._multiple){let A=this._selectionModel.selected.map(i=>i.viewValue);return this._isRtl()&&A.reverse(),A.join(", ")}return this._selectionModel.selected[0].viewValue}updateErrorState(){this._errorStateTracker.updateErrorState()}_isRtl(){return this._dir?this._dir.value==="rtl":!1}_handleKeydown(A){this.disabled||(this.panelOpen?this._handleOpenKeydown(A):this._handleClosedKeydown(A))}_handleClosedKeydown(A){let i=A.keyCode,n=i===40||i===38||i===37||i===39,o=i===13||i===32,a=this._keyManager;if(!a.isTyping()&&o&&!Qa(A)||(this.multiple||A.altKey)&&n)A.preventDefault(),this.open();else if(!this.multiple){let r=this.selected;a.onKeydown(A);let s=this.selected;s&&r!==s&&this._liveAnnouncer.announce(s.viewValue,1e4)}}_handleOpenKeydown(A){let i=this._keyManager,n=A.keyCode,o=n===40||n===38,a=i.isTyping();if(o&&A.altKey)A.preventDefault(),this.close();else if(!a&&(n===13||n===32)&&i.activeItem&&!Qa(A))A.preventDefault(),i.activeItem._selectViaInteraction();else if(!a&&this._multiple&&n===65&&A.ctrlKey){A.preventDefault();let r=this.options.some(s=>!s.disabled&&!s.selected);this.options.forEach(s=>{s.disabled||(r?s.select():s.deselect())})}else{let r=i.activeItemIndex;i.onKeydown(A),this._multiple&&o&&A.shiftKey&&i.activeItem&&i.activeItemIndex!==r&&i.activeItem._selectViaInteraction()}}_handleOverlayKeydown(A){A.keyCode===27&&!Qa(A)&&(A.preventDefault(),this.close())}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this._keyManager?.cancelTypeahead(),!this.disabled&&!this.panelOpen&&(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this.ngControl&&(this._value=this.ngControl.value),this._setSelectionByValue(this._value),this.stateChanges.next()})}_setSelectionByValue(A){if(this.options.forEach(i=>i.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&A)Array.isArray(A),A.forEach(i=>this._selectOptionByValue(i)),this._sortValues();else{let i=this._selectOptionByValue(A);i?this._keyManager.updateActiveItem(i):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectOptionByValue(A){let i=this.options.find(n=>{if(this._selectionModel.isSelected(n))return!1;try{return(n.value!=null||this.canSelectNullableOptions)&&this._compareWith(n.value,A)}catch(o){return!1}});return i&&this._selectionModel.select(i),i}_assignValue(A){return A!==this._value||this._multiple&&Array.isArray(A)?(this.options&&this._setSelectionByValue(A),this._value=A,!0):!1}_skipPredicate=A=>this.panelOpen?!1:A.disabled;_getOverlayWidth(A){return this.panelWidth==="auto"?(A instanceof RB?A.elementRef:A||this._elementRef).nativeElement.getBoundingClientRect().width:this.panelWidth===null?"":this.panelWidth}_syncParentProperties(){if(this.options)for(let A of this.options)A._changeDetectorRef.markForCheck()}_initKeyManager(){this._keyManager=new ZQ(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?"rtl":"ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate),this._keyManager.tabOut.subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):!this._panelOpen&&!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){let A=Ki(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(Qt(A)).subscribe(i=>{this._onSelect(i.source,i.isUserInput),i.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),Ki(...this.options.map(i=>i._stateChanges)).pipe(Qt(A)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this.stateChanges.next()})}_onSelect(A,i){let n=this._selectionModel.isSelected(A);!this.canSelectNullableOptions&&A.value==null&&!this._multiple?(A.deselect(),this._selectionModel.clear(),this.value!=null&&this._propagateChanges(A.value)):(n!==A.selected&&(A.selected?this._selectionModel.select(A):this._selectionModel.deselect(A)),i&&this._keyManager.setActiveItem(A),this.multiple&&(this._sortValues(),i&&this.focus())),n!==this._selectionModel.isSelected(A)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){let A=this.options.toArray();this._selectionModel.sort((i,n)=>this.sortComparator?this.sortComparator(i,n,A):A.indexOf(i)-A.indexOf(n)),this.stateChanges.next()}}_propagateChanges(A){let i;this.multiple?i=this.selected.map(n=>n.value):i=this.selected?this.selected.value:A,this._value=i,this.valueChange.emit(i),this._onChange(i),this.selectionChange.emit(this._getChangeEvent(i)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){if(this._keyManager)if(this.empty){let A=-1;for(let i=0;i0&&!!this._overlayDir}focus(A){this._elementRef.nativeElement.focus(A)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||null,i=A?A+" ":"";return this.ariaLabelledby?i+this.ariaLabelledby:A}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||"";return this.ariaLabelledby&&(A+=" "+this.ariaLabelledby),A||(A=this._valueId),A}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(A){let i=Ur(A);i&&(i.tagName==="MAT-OPTION"||i.classList.contains("cdk-overlay-backdrop")||i.closest(".mat-mdc-select-panel"))||(this.focus(),this.open())}get shouldLabelFloat(){return this.panelOpen||!this.empty||this.focused&&!!this.placeholder}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-select"]],contentQueries:function(i,n,o){if(i&1&&jo(o,mgA,5)(o,Yr,5)(o,i6,5),i&2){let a;ae(a=re())&&(n.customTrigger=a.first),ae(a=re())&&(n.options=a),ae(a=re())&&(n.optionGroups=a)}},viewQuery:function(i,n){if(i&1&&Jt(cgA,5)(CgA,5)(Vm,5),i&2){let o;ae(o=re())&&(n.trigger=o.first),ae(o=re())&&(n.panel=o.first),ae(o=re())&&(n._overlayDir=o.first)}},hostAttrs:["role","combobox","aria-haspopup","listbox",1,"mat-mdc-select"],hostVars:21,hostBindings:function(i,n){i&1&&U("keydown",function(a){return n._handleKeydown(a)})("focus",function(){return n._onFocus()})("blur",function(){return n._onBlur()}),i&2&&(te("id",n.id)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n.panelOpen?n.id+"-panel":null)("aria-expanded",n.panelOpen)("aria-label",n.ariaLabel||null)("aria-required",n.required.toString())("aria-disabled",n.disabled.toString())("aria-invalid",n.errorState)("aria-activedescendant",n._getAriaActiveDescendant()),RA("mat-mdc-select-disabled",n.disabled)("mat-mdc-select-invalid",n.errorState)("mat-mdc-select-required",n.required)("mat-mdc-select-empty",n.empty)("mat-mdc-select-multiple",n.multiple)("mat-select-open",n.panelOpen))},inputs:{userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],panelClass:"panelClass",disabled:[2,"disabled","disabled",Be],disableRipple:[2,"disableRipple","disableRipple",Be],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:Cn(A)],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",Be],placeholder:"placeholder",required:[2,"required","required",Be],multiple:[2,"multiple","multiple",Be],disableOptionCentering:[2,"disableOptionCentering","disableOptionCentering",Be],compareWith:"compareWith",value:"value",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],errorStateMatcher:"errorStateMatcher",typeaheadDebounceInterval:[2,"typeaheadDebounceInterval","typeaheadDebounceInterval",Cn],sortComparator:"sortComparator",id:"id",panelWidth:"panelWidth",canSelectNullableOptions:[2,"canSelectNullableOptions","canSelectNullableOptions",Be]},outputs:{openedChange:"openedChange",_openedStream:"opened",_closedStream:"closed",selectionChange:"selectionChange",valueChange:"valueChange"},exportAs:["matSelect"],features:[Bt([{provide:eu,useExisting:t},{provide:t6,useExisting:t}]),Yt],ngContentSelectors:dgA,decls:11,vars:10,consts:[["fallbackOverlayOrigin","cdkOverlayOrigin","trigger",""],["panel",""],["cdk-overlay-origin","",1,"mat-mdc-select-trigger",3,"click"],[1,"mat-mdc-select-value"],[1,"mat-mdc-select-placeholder","mat-mdc-select-min-line"],[1,"mat-mdc-select-value-text"],[1,"mat-mdc-select-arrow-wrapper"],[1,"mat-mdc-select-arrow"],["viewBox","0 0 24 24","width","24px","height","24px","focusable","false","aria-hidden","true"],["d","M7 10l5 5 5-5z"],["cdk-connected-overlay","","cdkConnectedOverlayHasBackdrop","","cdkConnectedOverlayBackdropClass","cdk-overlay-transparent-backdrop",3,"detach","backdropClick","overlayKeydown","cdkConnectedOverlayDisableClose","cdkConnectedOverlayPanelClass","cdkConnectedOverlayScrollStrategy","cdkConnectedOverlayOrigin","cdkConnectedOverlayPositions","cdkConnectedOverlayWidth","cdkConnectedOverlayFlexibleDimensions","cdkConnectedOverlayUsePopover"],[1,"mat-mdc-select-min-line"],["role","listbox","tabindex","-1",1,"mat-mdc-select-panel","mdc-menu-surface","mdc-menu-surface--open",3,"keydown"]],template:function(i,n){if(i&1&&(Rt(IgA),B(0,"div",2,0),U("click",function(){return n.open()}),B(3,"div",3),O(4,BgA,2,1,"span",4)(5,QgA,3,1,"span",5),Q(),B(6,"div",6)(7,"div",7),Ct(),B(8,"svg",8),QA(9,"path",9),Q()()()(),Et(10,ugA,3,16,"ng-template",10),U("detach",function(){return n.close()})("backdropClick",function(){return n.close()})("overlayKeydown",function(a){return n._handleOverlayKeydown(a)})),i&2){let o=Qi(1);u(3),te("id",n._valueId),u(),Y(n.empty?4:5),u(6),H("cdkConnectedOverlayDisableClose",!0)("cdkConnectedOverlayPanelClass",n._overlayPanelClass)("cdkConnectedOverlayScrollStrategy",n._scrollStrategy)("cdkConnectedOverlayOrigin",n._preferredOverlayOrigin||o)("cdkConnectedOverlayPositions",n._positions)("cdkConnectedOverlayWidth",n._overlayWidth)("cdkConnectedOverlayFlexibleDimensions",!0)("cdkConnectedOverlayUsePopover",n._popoverLocation)}},dependencies:[RB,Vm],styles:[`@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-select-open .mat-mdc-select-arrow{transform:rotate(180deg)}.mat-form-field-animations-enabled .mat-mdc-select-arrow{transition:transform 80ms linear}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))} +`],encapsulation:2,changeDetection:0})}return t})();var $0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Zl,wM,fi,Vc,Ya,wM]})}return t})();var wgA=["tooltip"],DgA=20;var ygA=new kA("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let t=w(Dt);return()=>Z0(t,{scrollThrottle:DgA})}}),vgA=new kA("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var qT="tooltip-panel",bgA={passive:!0},MgA=8,SgA=8,kgA=24,xgA=200,dn=(()=>{class t{_elementRef=w(ce);_ngZone=w(qe);_platform=w(li);_ariaDescriber=w(dG);_focusMonitor=w($a);_dir=w(fo);_injector=w(Dt);_viewContainerRef=w(Mo);_mediaMatcher=w(nB);_document=w(ti);_renderer=w(Pi);_animationsDisabled=An();_defaultOptions=w(vgA,{optional:!0});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=VT;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=!1;_dirSubscribed=!1;get position(){return this._position}set position(A){A!==this._position&&(this._position=A,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(A){this._positionAtOrigin=mr(A),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(A){let i=mr(A);this._disabled!==i&&(this._disabled=i,i?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(A){this._showDelay=zs(A)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(A){this._hideDelay=zs(A),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(A){let i=this._message;this._message=A!=null?String(A).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(i)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(A){this._tooltipClass=A,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_eventCleanups=[];_touchstartTimeout=null;_destroyed=new ie;_isDestroyed=!1;constructor(){let A=this._defaultOptions;A&&(this._showDelay=A.showDelay,this._hideDelay=A.hideDelay,A.position&&(this.position=A.position),A.positionAtOrigin&&(this.positionAtOrigin=A.positionAtOrigin),A.touchGestures&&(this.touchGestures=A.touchGestures),A.tooltipClass&&(this.tooltipClass=A.tooltipClass)),this._viewportMargin=MgA}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Qt(this._destroyed)).subscribe(A=>{A?A==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let A=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._eventCleanups.forEach(i=>i()),this._eventCleanups.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(A,this.message,"tooltip"),this._focusMonitor.stopMonitoring(A)}show(A=this.showDelay,i){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let n=this._createOverlay(i);this._detach(),this._portal=this._portal||new Ss(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=n.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(Qt(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(A)}hide(A=this.hideDelay){let i=this._tooltipInstance;i&&(i.isVisible()?i.hide(A):(i._cancelPendingAnimations(),this._detach()))}toggle(A){this._isTooltipVisible()?this.hide():this.show(void 0,A)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(A){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!A)&&a._origin instanceof ce)return this._overlayRef;this._detach()}let i=this._injector.get(Wc).getAncestorScrollContainers(this._elementRef),n=`${this._cssClassPrefix}-${qT}`,o=y1(this._injector,this.positionAtOrigin?A||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(i).withPopoverLocation("global");return o.positionChanges.pipe(Qt(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=Hg(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,n]:n,scrollStrategy:this._injector.get(ygA)(),disableAnimations:this._animationsDisabled,eventPredicate:this._overlayEventPredicate}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Qt(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Qt(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Qt(this._destroyed)).subscribe(a=>{a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(Qt(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(A){let i=A.getConfig().positionStrategy,n=this._getOrigin(),o=this._getOverlayPosition();i.withPositions([this._addOffset(gA(gA({},n.main),o.main)),this._addOffset(gA(gA({},n.fallback),o.fallback))])}_addOffset(A){let i=SgA,n=!this._dir||this._dir.value=="ltr";return A.originY==="top"?A.offsetY=-i:A.originY==="bottom"?A.offsetY=i:A.originX==="start"?A.offsetX=n?-i:i:A.originX==="end"&&(A.offsetX=n?i:-i),A}_getOrigin(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"||i=="below"?n={originX:"center",originY:i=="above"?"top":"bottom"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={originX:"start",originY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={originX:"end",originY:"center"});let{x:o,y:a}=this._invertPosition(n.originX,n.originY);return{main:n,fallback:{originX:o,originY:a}}}_getOverlayPosition(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"?n={overlayX:"center",overlayY:"bottom"}:i=="below"?n={overlayX:"center",overlayY:"top"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={overlayX:"end",overlayY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={overlayX:"start",overlayY:"center"});let{x:o,y:a}=this._invertPosition(n.overlayX,n.overlayY);return{main:n,fallback:{overlayX:o,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),Hn(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(A){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=A instanceof Set?Array.from(A):A,this._tooltipInstance._markForCheck())}_invertPosition(A,i){return this.position==="above"||this.position==="below"?i==="top"?i="bottom":i==="bottom"&&(i="top"):A==="end"?A="start":A==="start"&&(A="end"),{x:A,y:i}}_updateCurrentPositionClass(A){let{overlayY:i,originX:n,originY:o}=A,a;if(i==="center"?this._dir&&this._dir.value==="rtl"?a=n==="end"?"left":"right":a=n==="start"?"left":"right":a=i==="bottom"&&o==="top"?"above":"below",a!==this._currentPosition){let r=this._overlayRef;if(r){let s=`${this._cssClassPrefix}-${qT}-`;r.removePanelClass(s+this._currentPosition),r.addPanelClass(s+a)}this._currentPosition=a}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._eventCleanups.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._addListener("touchstart",A=>{let i=A.targetTouches?.[0],n=i?{x:i.clientX,y:i.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,n)},this._defaultOptions?.touchLongPressShowDelay??o)})):this._addListener("mouseenter",A=>{this._setupPointerExitEventsIfNeeded();let i;A.x!==void 0&&A.y!==void 0&&(i=A),this.show(void 0,i)}))}_setupPointerExitEventsIfNeeded(){if(!this._pointerExitEventsInitialized){if(this._pointerExitEventsInitialized=!0,!this._isTouchPlatform())this._addListener("mouseleave",A=>{let i=A.relatedTarget;(!i||!this._overlayRef?.overlayElement.contains(i))&&this.hide()}),this._addListener("wheel",A=>{if(this._isTooltipVisible()){let i=this._document.elementFromPoint(A.clientX,A.clientY),n=this._elementRef.nativeElement;i!==n&&!n.contains(i)&&this.hide()}});else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let A=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};this._addListener("touchend",A),this._addListener("touchcancel",A)}}}_addListener(A,i){this._eventCleanups.push(this._renderer.listen(this._elementRef.nativeElement,A,i,bgA))}_isTouchPlatform(){return this._platform.IOS||this._platform.ANDROID?!0:this._platform.isBrowser?!!this._defaultOptions?.detectHoverCapability&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:!1}_disableNativeGesturesIfNecessary(){let A=this.touchGestures;if(A!=="off"){let i=this._elementRef.nativeElement,n=i.style;(A==="on"||i.nodeName!=="INPUT"&&i.nodeName!=="TEXTAREA")&&(n.userSelect=n.msUserSelect=n.webkitUserSelect=n.MozUserSelect="none"),(A==="on"||!i.draggable)&&(n.webkitUserDrag="none"),n.touchAction="none",n.webkitTapHighlightColor="transparent"}}_syncAriaDescription(A){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,A,"tooltip"),this._isDestroyed||Hn({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}_overlayEventPredicate=A=>A.type==="keydown"?this._isTooltipVisible()&&A.keyCode===27&&!Qa(A):!0;static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mat-mdc-tooltip-disabled",n.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return t})(),VT=(()=>{class t{_changeDetectorRef=w(wt);_elementRef=w(ce);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=An();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new ie;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(A){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},A)}hide(A){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},A)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:A}){(!A||!this._triggerElement.contains(A))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let A=this._elementRef.nativeElement.getBoundingClientRect();return A.height>kgA&&A.width>=xgA}_handleAnimationEnd({animationName:A}){(A===this._showAnimation||A===this._hideAnimation)&&this._finalizeAnimation(A===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(A){A?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(A){let i=this._tooltip.nativeElement,n=this._showAnimation,o=this._hideAnimation;if(i.classList.remove(A?o:n),i.classList.add(A?n:o),this._isVisible!==A&&(this._isVisible=A,this._changeDetectorRef.markForCheck()),A&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(i);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}A&&this._onShow(),this._animationsDisabled&&(i.classList.add("_mat-animation-noopable"),this._finalizeAnimation(A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-tooltip-component"]],viewQuery:function(i,n){if(i&1&&Jt(wgA,7),i&2){let o;ae(o=re())&&(n._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(i,n){i&1&&U("mouseleave",function(a){return n._handleMouseLeave(a)})},decls:4,vars:5,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(i,n){i&1&&(wn(0,"div",1,0),qd("animationend",function(a){return n._handleAnimationEnd(a)}),wn(2,"div",2),y(3),Gn()()),i&2&&(ro(n.tooltipClass),RA("mdc-tooltip--multiline",n._isMultiline),u(3),lA(n.message))},styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards} +`],encapsulation:2,changeDetection:0})}return t})();var Fa=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[WQ,Zl,fi,Vc]})}return t})();function _gA(t,e){if(t&1&&(B(0,"mat-option",17),y(1),Q()),t&2){let A=e.$implicit;H("value",A),u(),ue(" ",A," ")}}function RgA(t,e){if(t&1){let A=hA();B(0,"mat-form-field",14)(1,"mat-select",16,0),U("selectionChange",function(n){T(A);let o=p(2);return J(o._changePageSize(n.value))}),Je(3,_gA,2,2,"mat-option",17,hi),Q(),B(5,"div",18),U("click",function(){T(A);let n=Qi(2);return J(n.open())}),Q()()}if(t&2){let A=p(2);H("appearance",A._formFieldAppearance)("color",A.color),u(),H("value",A.pageSize)("disabled",A.disabled),Ap("aria-labelledby",A._pageSizeLabelId),H("panelClass",A.selectConfig.panelClass||"")("disableOptionCentering",A.selectConfig.disableOptionCentering),u(2),Oe(A._displayedPageSizeOptions)}}function NgA(t,e){if(t&1&&(B(0,"div",15),y(1),Q()),t&2){let A=p(2);u(),lA(A.pageSize)}}function FgA(t,e){if(t&1&&(B(0,"div",3)(1,"div",13),y(2),Q(),O(3,RgA,6,7,"mat-form-field",14),O(4,NgA,2,1,"div",15),Q()),t&2){let A=p();u(),te("id",A._pageSizeLabelId),u(),ue(" ",A._intl.itemsPerPageLabel," "),u(),Y(A._displayedPageSizeOptions.length>1?3:-1),u(),Y(A._displayedPageSizeOptions.length<=1?4:-1)}}function LgA(t,e){if(t&1){let A=hA();B(0,"button",19),U("click",function(){T(A);let n=p();return J(n._buttonClicked(0,n._previousButtonsDisabled()))}),Ct(),B(1,"svg",8),QA(2,"path",20),Q()()}if(t&2){let A=p();H("matTooltip",A._intl.firstPageLabel)("matTooltipDisabled",A._previousButtonsDisabled())("disabled",A._previousButtonsDisabled())("tabindex",A._previousButtonsDisabled()?-1:null),te("aria-label",A._intl.firstPageLabel)}}function GgA(t,e){if(t&1){let A=hA();B(0,"button",21),U("click",function(){T(A);let n=p();return J(n._buttonClicked(n.getNumberOfPages()-1,n._nextButtonsDisabled()))}),Ct(),B(1,"svg",8),QA(2,"path",22),Q()()}if(t&2){let A=p();H("matTooltip",A._intl.lastPageLabel)("matTooltipDisabled",A._nextButtonsDisabled())("disabled",A._nextButtonsDisabled())("tabindex",A._nextButtonsDisabled()?-1:null),te("aria-label",A._intl.lastPageLabel)}}var b1=(()=>{class t{changes=new ie;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(A,i,n)=>{if(n==0||i==0)return`0 of ${n}`;n=Math.max(n,0);let o=A*i,a=o{class t{_intl=w(b1);_changeDetectorRef=w(wt);_formFieldAppearance;_pageSizeLabelId=w(In).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new Sg(1);color;get pageIndex(){return this._pageIndex}set pageIndex(A){this._pageIndex=Math.max(A||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(A){this._length=A||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(A){this._pageSize=Math.max(A||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(A){this._pageSizeOptions=(A||[]).map(i=>Cn(i,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new LA;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let A=this._intl,i=w(UgA,{optional:!0});if(this._intlChanges=A.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),i){let{pageSize:n,pageSizeOptions:o,hidePageSize:a,showFirstLastButtons:r}=i;n!=null&&(this._pageSize=n),o!=null&&(this._pageSizeOptions=o),a!=null&&(this.hidePageSize=a),r!=null&&(this.showFirstLastButtons=r)}this._formFieldAppearance=i?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let A=this.getNumberOfPages()-1;return this.pageIndexA-i),this._changeDetectorRef.markForCheck())}_emitPageEvent(A){this.page.emit({previousPageIndex:A,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(A){let i=this.pageIndex;A!==i&&(this.pageIndex=A,this._emitPageEvent(i))}_buttonClicked(A,i){i||this._navigate(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",Cn],length:[2,"length","length",Cn],pageSize:[2,"pageSize","pageSize",Cn],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",Be],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",Be],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",Be]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-atomic","true","aria-live","polite","role","status",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["aria-hidden","true",1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(i,n){i&1&&(B(0,"div",1)(1,"div",2),O(2,FgA,5,4,"div",3),B(3,"div",4)(4,"div",5),y(5),Q(),O(6,LgA,3,5,"button",6),B(7,"button",7),U("click",function(){return n._buttonClicked(n.pageIndex-1,n._previousButtonsDisabled())}),Ct(),B(8,"svg",8),QA(9,"path",9),Q()(),rr(),B(10,"button",10),U("click",function(){return n._buttonClicked(n.pageIndex+1,n._nextButtonsDisabled())}),Ct(),B(11,"svg",8),QA(12,"path",11),Q()(),O(13,GgA,3,5,"button",12),Q()()()),i&2&&(u(2),Y(n.hidePageSize?-1:2),u(3),ue(" ",n._intl.getRangeLabel(n.pageIndex,n.pageSize,n.length)," "),u(),Y(n.showFirstLastButtons?6:-1),u(),H("matTooltip",n._intl.previousPageLabel)("matTooltipDisabled",n._previousButtonsDisabled())("disabled",n._previousButtonsDisabled())("tabindex",n._previousButtonsDisabled()?-1:null),te("aria-label",n._intl.previousPageLabel),u(3),H("matTooltip",n._intl.nextPageLabel)("matTooltipDisabled",n._nextButtonsDisabled())("disabled",n._nextButtonsDisabled())("tabindex",n._nextButtonsDisabled()?-1:null),te("aria-label",n._intl.nextPageLabel),u(3),Y(n.showFirstLastButtons?13:-1))},dependencies:[Ko,Xl,Yr,ji,dn],styles:[`.mat-mdc-paginator{display:block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));background-color:var(--mat-paginator-container-background-color, var(--mat-sys-surface));font-family:var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));letter-spacing:var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px)}.mat-mdc-paginator .mat-mdc-select-value{font-size:var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size))}.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper{display:none}.mat-mdc-paginator .mat-mdc-select{line-height:1.5}.mat-mdc-paginator-outer-container{display:flex}.mat-mdc-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap;width:100%;min-height:var(--mat-paginator-container-size, 56px)}.mat-mdc-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-mdc-paginator-page-size{margin-right:0;margin-left:8px}.mat-mdc-paginator-page-size-label{margin:0 4px}.mat-mdc-paginator-page-size-select{margin:0 4px;width:var(--mat-paginator-page-size-select-width, 84px)}.mat-mdc-paginator-range-label{margin:0 32px 0 24px}.mat-mdc-paginator-range-actions{display:flex;align-items:center}.mat-mdc-paginator-icon{display:inline-block;width:28px;fill:var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon{fill:var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}[dir=rtl] .mat-mdc-paginator-icon{transform:rotate(180deg)}@media(forced-colors: active){.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,.mat-mdc-paginator-icon{fill:currentColor}.mat-mdc-paginator-range-actions .mat-mdc-icon-button{outline:solid 1px}.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled]{color:GrayText}}.mat-mdc-paginator-touch-target{display:var(--mat-paginator-touch-target-display, block);position:absolute;top:50%;left:50%;width:var(--mat-paginator-page-size-select-width, 84px);height:var(--mat-paginator-page-size-select-touch-target-height, 48px);background-color:rgba(0,0,0,0);transform:translate(-50%, -50%);cursor:pointer} +`],encapsulation:2,changeDetection:0})}return t})();var WT=["*"],TgA=["content"],JgA=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],OgA=["mat-drawer","mat-drawer-content","*"];function YgA(t,e){if(t&1){let A=hA();B(0,"div",1),U("click",function(){T(A);let n=p();return J(n._onBackdropClicked())}),Q()}if(t&2){let A=p();RA("mat-drawer-shown",A._isShowingBackdrop())}}function HgA(t,e){t&1&&(B(0,"mat-drawer-content"),Ve(1,2),Q())}var zgA=new kA("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:()=>!1}),ZT=new kA("MAT_DRAWER_CONTAINER"),yM=(()=>{class t extends W0{_platform=w(li);_changeDetectorRef=w(wt);_container=w(bM);constructor(){let A=w(ce),i=w(Wc),n=w(qe);super(A,i,n)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:A,end:i}=this._container;return A!=null&&A.mode!=="over"&&A.opened||i!=null&&i.mode!=="over"&&i.opened}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(i,n){i&2&&(ut("margin-left",n._container._contentMargins.left,"px")("margin-right",n._container._contentMargins.right,"px"),RA("mat-drawer-content-hidden",n._shouldBeHidden()))},features:[Bt([{provide:W0,useExisting:t}]),mt],ngContentSelectors:WT,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),Ve(0))},encapsulation:2,changeDetection:0})}return t})(),vM=(()=>{class t{_elementRef=w(ce);_focusTrapFactory=w(qQ);_focusMonitor=w($a);_platform=w(li);_ngZone=w(qe);_renderer=w(Pi);_interactivityChecker=w(oB);_doc=w(ti);_container=w(ZT,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached=!1;_anchor=null;get position(){return this._position}set position(A){A=A==="end"?"end":"start",A!==this._position&&(this._isAttached&&this._updatePositionInParent(A),this._position=A,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(A){this._mode=A,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(A){this._disableClose=mr(A)}_disableClose=!1;get autoFocus(){let A=this._autoFocus;return A??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(A){(A==="true"||A==="false"||A==null)&&(A=mr(A)),this._autoFocus=A}_autoFocus;get opened(){return this._opened()}set opened(A){this.toggle(mr(A))}_opened=bA(!1);_openedVia=null;_animationStarted=new ie;_animationEnd=new ie;openedChange=new LA(!0);_openedStream=this.openedChange.pipe(gt(A=>A),we(()=>{}));openedStart=this._animationStarted.pipe(gt(()=>this.opened),_Q(void 0));_closedStream=this.openedChange.pipe(gt(A=>!A),we(()=>{}));closedStart=this._animationStarted.pipe(gt(()=>!this.opened),_Q(void 0));_destroyed=new ie;onPositionChanged=new LA;_content;_modeChanged=new ie;_injector=w(Dt);_changeDetectorRef=w(wt);constructor(){this.openedChange.pipe(Qt(this._destroyed)).subscribe(A=>{A?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._eventCleanups=this._ngZone.runOutsideAngular(()=>{let A=this._renderer,i=this._elementRef.nativeElement;return[A.listen(i,"keydown",n=>{n.keyCode===27&&!this.disableClose&&!Qa(n)&&this._ngZone.run(()=>{this.close(),n.stopPropagation(),n.preventDefault()})}),A.listen(i,"transitionrun",this._handleTransitionEvent),A.listen(i,"transitionend",this._handleTransitionEvent),A.listen(i,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_takeFocus(){if(!this._focusTrap)return;let A=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":Hn(()=>{!this._focusTrap.focusInitialElement()&&typeof A.focus=="function"&&A.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(A){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,A):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let A=this._doc.activeElement;return!!A&&this._elementRef.nativeElement.contains(A)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(A){return this.toggle(!0,A)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(A=!this.opened,i){A&&i&&(this._openedVia=i);let n=this._setOpen(A,!A&&this._isFocusWithinDrawer(),this._openedVia||"program");return A||(this._openedVia=null),n}_setOpen(A,i,n){return A===this.opened?Promise.resolve(A?"open":"close"):(this._opened.set(A),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",A),!A&&i&&this._restoreFocus(n),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(o=>{this.openedChange.pipe(uo(1)).subscribe(a=>o(a?"open":"close"))}))}_setIsAnimating(A){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",A)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=this.opened&&!!this._container?._isShowingBackdrop())}_updatePositionInParent(A){if(!this._platform.isBrowser)return;let i=this._elementRef.nativeElement,n=i.parentNode;A==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),n.insertBefore(this._anchor,i)),n.appendChild(i)):this._anchor&&this._anchor.parentNode.insertBefore(i,this._anchor)}_handleTransitionEvent=A=>{let i=this._elementRef.nativeElement;A.target===i&&this._ngZone.run(()=>{A.type==="transitionrun"?this._animationStarted.next(A):(A.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(A))})};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-drawer"]],viewQuery:function(i,n){if(i&1&&Jt(TgA,5),i&2){let o;ae(o=re())&&(n._content=o.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(i,n){i&2&&(te("align",null)("tabIndex",n.mode!=="side"?"-1":null),ut("visibility",!n._container&&!n.opened?"hidden":null),RA("mat-drawer-end",n.position==="end")("mat-drawer-over",n.mode==="over")("mat-drawer-push",n.mode==="push")("mat-drawer-side",n.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:WT,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(i,n){i&1&&(Rt(),B(0,"div",1,0),Ve(2),Q())},dependencies:[W0],encapsulation:2,changeDetection:0})}return t})(),bM=(()=>{class t{_dir=w(fo,{optional:!0});_element=w(ce);_ngZone=w(qe);_changeDetectorRef=w(wt);_animationDisabled=An();_transitionsEnabled=!1;_allDrawers;_drawers=new xg;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(A){this._autosize=mr(A)}_autosize=w(zgA);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(A){this._backdropOverride=A==null?null:mr(A)}_backdropOverride=null;backdropClick=new LA;_start=null;_end=null;_left=null;_right=null;_destroyed=new ie;_doCheckSubject=new ie;_contentMargins={left:null,right:null};_contentMarginChanges=new ie;get scrollable(){return this._userContent||this._content}_injector=w(Dt);constructor(){let A=w(li),i=w(Ms);this._dir?.change.pipe(Qt(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),i.change().pipe(Qt(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&A.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(Sn(this._allDrawers),Qt(this._destroyed)).subscribe(A=>{this._drawers.reset(A.filter(i=>!i._container||i._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(Sn(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(A=>{this._watchDrawerToggle(A),this._watchDrawerPosition(A),this._watchDrawerMode(A)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(Ls(10),Qt(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(A=>A.open())}close(){this._drawers.forEach(A=>A.close())}updateContentMargins(){let A=0,i=0;if(this._left&&this._left.opened){if(this._left.mode=="side")A+=this._left._getWidth();else if(this._left.mode=="push"){let n=this._left._getWidth();A+=n,i-=n}}if(this._right&&this._right.opened){if(this._right.mode=="side")i+=this._right._getWidth();else if(this._right.mode=="push"){let n=this._right._getWidth();i+=n,A-=n}}A=A||null,i=i||null,(A!==this._contentMargins.left||i!==this._contentMargins.right)&&(this._contentMargins={left:A,right:i},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(A){A._animationStarted.pipe(Qt(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),A.mode!=="side"&&A.openedChange.pipe(Qt(this._drawers.changes)).subscribe(()=>this._setContainerClass(A.opened))}_watchDrawerPosition(A){A.onPositionChanged.pipe(Qt(this._drawers.changes)).subscribe(()=>{Hn({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(A){A._modeChanged.pipe(Qt(Ki(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(A){let i=this._element.nativeElement.classList,n="mat-drawer-container-has-open";A?i.add(n):i.remove(n)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(A=>{A.position=="end"?(this._end!=null,this._end=A):(this._start!=null,this._start=A)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(A=>A&&!A.disableClose&&this._drawerHasBackdrop(A)).forEach(A=>A._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(A){return A!=null&&A.opened}_drawerHasBackdrop(A){return this._backdropOverride==null?!!A&&A.mode!=="side":this._backdropOverride}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-drawer-container"]],contentQueries:function(i,n,o){if(i&1&&jo(o,yM,5)(o,vM,5),i&2){let a;ae(a=re())&&(n._content=a.first),ae(a=re())&&(n._allDrawers=a)}},viewQuery:function(i,n){if(i&1&&Jt(yM,5),i&2){let o;ae(o=re())&&(n._userContent=o.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mat-drawer-container-explicit-backdrop",n._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[Bt([{provide:ZT,useExisting:t}])],ngContentSelectors:OgA,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(i,n){i&1&&(Rt(JgA),O(0,YgA,1,2,"div",0),Ve(1),Ve(2,1),O(3,HgA,2,0,"mat-drawer-content")),i&2&&(Y(n.hasBackdrop?0:-1),u(3),Y(n._content?-1:3))},dependencies:[yM],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed} +`],encapsulation:2,changeDetection:0})}return t})();var PgA=["determinateSpinner"];function jgA(t,e){if(t&1&&(Ct(),B(0,"svg",11),QA(1,"circle",12),Q()),t&2){let A=p();te("viewBox",A._viewBox()),u(),ut("stroke-dasharray",A._strokeCircumference(),"px")("stroke-dashoffset",A._strokeCircumference()/2,"px")("stroke-width",A._circleStrokeWidth(),"%"),te("r",A._circleRadius())}}var qgA=new kA("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:XT})}),XT=100,VgA=10,gs=(()=>{class t{_elementRef=w(ce);_noopAnimations;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";_determinateCircle;constructor(){let A=w(qgA),i=XQ(),n=this._elementRef.nativeElement;this._noopAnimations=i==="di-disabled"&&!!A&&!A._forceAnimations,this.mode=n.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&i==="reduced-motion"&&n.classList.add("mat-progress-spinner-reduced-motion"),A&&(A.color&&(this.color=this._defaultColor=A.color),A.diameter&&(this.diameter=A.diameter),A.strokeWidth&&(this.strokeWidth=A.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(A){this._value=Math.max(0,Math.min(100,A||0))}_value=0;get diameter(){return this._diameter}set diameter(A){this._diameter=A||0}_diameter=XT;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(A){this._strokeWidth=A||0}_strokeWidth;_circleRadius(){return(this.diameter-VgA)/2}_viewBox(){let A=this._circleRadius()*2+this.strokeWidth;return`0 0 ${A} ${A}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(i,n){if(i&1&&Jt(PgA,5),i&2){let o;ae(o=re())&&(n._determinateCircle=o.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(i,n){i&2&&(te("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",n.mode==="determinate"?n.value:null)("mode",n.mode),ro("mat-"+n.color),ut("width",n.diameter,"px")("height",n.diameter,"px")("--mat-progress-spinner-size",n.diameter+"px")("--mat-progress-spinner-active-indicator-width",n.diameter+"px"),RA("_mat-animation-noopable",n._noopAnimations)("mdc-circular-progress--indeterminate",n.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",Cn],diameter:[2,"diameter","diameter",Cn],strokeWidth:[2,"strokeWidth","strokeWidth",Cn]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(i,n){if(i&1&&(Et(0,jgA,2,8,"ng-template",null,0,$C),B(2,"div",2,1),Ct(),B(4,"svg",3),QA(5,"circle",4),Q()(),rr(),B(6,"div",5)(7,"div",6)(8,"div",7),sn(9,8),Q(),B(10,"div",9),sn(11,8),Q(),B(12,"div",10),sn(13,8),Q()()()),i&2){let o=Qi(1);u(4),te("viewBox",n._viewBox()),u(),ut("stroke-dasharray",n._strokeCircumference(),"px")("stroke-dashoffset",n._strokeDashOffset(),"px")("stroke-width",n._circleStrokeWidth(),"%"),te("r",n._circleRadius()),u(4),H("ngTemplateOutlet",o),u(2),H("ngTemplateOutlet",o),u(2),H("ngTemplateOutlet",o)}},dependencies:[Jc],styles:[`.mat-mdc-progress-spinner{--mat-progress-spinner-animation-multiplier: 1;display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mat-progress-spinner-reduced-motion{--mat-progress-spinner-animation-multiplier: 1.25}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate calc(1568.2352941176ms*var(--mat-progress-spinner-animation-multiplier)) linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate calc(5332ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}} +`],encapsulation:2,changeDetection:0})}return t})();var E2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();function WgA(t,e){if(t&1){let A=hA();B(0,"div",1)(1,"button",2),U("click",function(){T(A);let n=p();return J(n.action())}),y(2),Q()()}if(t&2){let A=p();u(2),ue(" ",A.data.action," ")}}var ZgA=["label"];function XgA(t,e){}var $gA=Math.pow(2,31)-1,Uu=class{_overlayRef;instance;containerInstance;_afterDismissed=new ie;_afterOpened=new ie;_onAction=new ie;_durationTimeoutId;_dismissedByAction=!1;constructor(e,A){this._overlayRef=A,this.containerInstance=e,e._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete(),this.dismiss()),clearTimeout(this._durationTimeoutId)}closeWithAction(){this.dismissWithAction()}_dismissAfter(e){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(e,$gA))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}},$T=new kA("MatSnackBarData"),GB=class{politeness="polite";announcementMessage="";viewContainerRef;duration=0;panelClass;direction;data=null;horizontalPosition="center";verticalPosition="bottom"},AcA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matSnackBarLabel",""]],hostAttrs:[1,"mat-mdc-snack-bar-label","mdc-snackbar__label"]})}return t})(),ecA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matSnackBarActions",""]],hostAttrs:[1,"mat-mdc-snack-bar-actions","mdc-snackbar__actions"]})}return t})(),tcA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matSnackBarAction",""]],hostAttrs:[1,"mat-mdc-snack-bar-action","mdc-snackbar__action"]})}return t})(),icA=(()=>{class t{snackBarRef=w(Uu);data=w($T);constructor(){}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["simple-snack-bar"]],hostAttrs:[1,"mat-mdc-simple-snack-bar"],exportAs:["matSnackBar"],decls:3,vars:2,consts:[["matSnackBarLabel",""],["matSnackBarActions",""],["matButton","","matSnackBarAction","",3,"click"]],template:function(i,n){i&1&&(B(0,"div",0),y(1),Q(),O(2,WgA,3,1,"div",1)),i&2&&(u(),ue(" ",n.data.message,` +`),u(),Y(n.hasAction?2:-1))},dependencies:[pi,AcA,ecA,tcA],styles:[`.mat-mdc-simple-snack-bar{display:flex}.mat-mdc-simple-snack-bar .mat-mdc-snack-bar-label{max-height:50vh;overflow:auto} +`],encapsulation:2,changeDetection:0})}return t})(),SM="_mat-snack-bar-enter",kM="_mat-snack-bar-exit",ncA=(()=>{class t extends C2{_ngZone=w(qe);_elementRef=w(ce);_changeDetectorRef=w(wt);_platform=w(li);_animationsDisabled=An();snackBarConfig=w(GB);_document=w(ti);_trackedModals=new Set;_enterFallback;_exitFallback;_injector=w(Dt);_announceDelay=150;_announceTimeoutId;_destroyed=!1;_portalOutlet;_onAnnounce=new ie;_onExit=new ie;_onEnter=new ie;_animationState="void";_live;_label;_role;_liveElementId=w(In).getId("mat-snack-bar-container-live-");constructor(){super();let A=this.snackBarConfig;A.politeness==="assertive"&&!A.announcementMessage?this._live="assertive":A.politeness==="off"?this._live="off":this._live="polite",this._platform.FIREFOX&&(this._live==="polite"&&(this._role="status"),this._live==="assertive"&&(this._role="alert"))}attachComponentPortal(A){this._assertNotAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._afterPortalAttached(),i}attachTemplatePortal(A){this._assertNotAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._afterPortalAttached(),i}attachDomPortal=A=>{this._assertNotAttached();let i=this._portalOutlet.attachDomPortal(A);return this._afterPortalAttached(),i};onAnimationEnd(A){A===kM?this._completeExit():A===SM&&(clearTimeout(this._enterFallback),this._ngZone.run(()=>{this._onEnter.next(),this._onEnter.complete()}))}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce(),this._animationsDisabled?Hn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(SM)))},{injector:this._injector}):(clearTimeout(this._enterFallback),this._enterFallback=setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-snack-bar-fallback-visible"),this.onAnimationEnd(SM)},200)))}exit(){return this._destroyed?oe(void 0):(this._ngZone.run(()=>{this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._elementRef.nativeElement.setAttribute("mat-exit",""),clearTimeout(this._announceTimeoutId),this._animationsDisabled?Hn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(kM)))},{injector:this._injector}):(clearTimeout(this._exitFallback),this._exitFallback=setTimeout(()=>this.onAnimationEnd(kM),200))}),this._onExit)}ngOnDestroy(){this._destroyed=!0,this._clearFromModals(),this._completeExit()}_completeExit(){clearTimeout(this._exitFallback),queueMicrotask(()=>{this._onExit.next(),this._onExit.complete()})}_afterPortalAttached(){let A=this._elementRef.nativeElement,i=this.snackBarConfig.panelClass;i&&(Array.isArray(i)?i.forEach(a=>A.classList.add(a)):A.classList.add(i)),this._exposeToModals();let n=this._label.nativeElement,o="mdc-snackbar__label";n.classList.toggle(o,!n.querySelector(`.${o}`))}_exposeToModals(){let A=this._liveElementId,i=this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{let i=A.getAttribute("aria-owns");if(i){let n=i.replace(this._liveElementId,"").trim();n.length>0?A.setAttribute("aria-owns",n):A.removeAttribute("aria-owns")}}),this._trackedModals.clear()}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{if(this._destroyed)return;let A=this._elementRef.nativeElement,i=A.querySelector("[aria-hidden]"),n=A.querySelector("[aria-live]");if(i&&n){let o=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&i.contains(document.activeElement)&&(o=document.activeElement),i.removeAttribute("aria-hidden"),n.appendChild(i),o?.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-snack-bar-container"]],viewQuery:function(i,n){if(i&1&&Jt(Wl,7)(ZgA,7),i&2){let o;ae(o=re())&&(n._portalOutlet=o.first),ae(o=re())&&(n._label=o.first)}},hostAttrs:[1,"mdc-snackbar","mat-mdc-snack-bar-container"],hostVars:6,hostBindings:function(i,n){i&1&&U("animationend",function(a){return n.onAnimationEnd(a.animationName)})("animationcancel",function(a){return n.onAnimationEnd(a.animationName)}),i&2&&RA("mat-snack-bar-container-enter",n._animationState==="visible")("mat-snack-bar-container-exit",n._animationState==="hidden")("mat-snack-bar-container-animations-enabled",!n._animationsDisabled)},features:[mt],decls:6,vars:3,consts:[["label",""],[1,"mdc-snackbar__surface","mat-mdc-snackbar-surface"],[1,"mat-mdc-snack-bar-label"],["aria-hidden","true"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(B(0,"div",1)(1,"div",2,0)(3,"div",3),Et(4,XgA,0,0,"ng-template",4),Q(),QA(5,"div"),Q()()),i&2&&(u(5),te("aria-live",n._live)("role",n._role)("id",n._liveElementId))},dependencies:[Wl],styles:[`@keyframes _mat-snack-bar-enter{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes _mat-snack-bar-exit{from{opacity:1}to{opacity:0}}.mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-snack-bar-container-animations-enabled{opacity:0}.mat-snack-bar-container-animations-enabled.mat-snack-bar-fallback-visible{opacity:1}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-enter{animation:_mat-snack-bar-enter 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-exit{animation:_mat-snack-bar-exit 75ms cubic-bezier(0.4, 0, 1, 1) forwards}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}@media(forced-colors: active){.mat-mdc-snackbar-surface{outline:solid 1px}}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-snack-bar-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mat-snack-bar-supporting-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-snack-bar-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-snack-bar-supporting-text-weight, var(--mat-sys-body-medium-weight));line-height:var(--mat-snack-bar-supporting-text-line-height, var(--mat-sys-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-sys-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-button-text-state-layer-color: currentColor;--mat-button-text-ripple-color: currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1} +`],encapsulation:2})}return t})(),ocA=new kA("mat-snack-bar-default-options",{providedIn:"root",factory:()=>new GB}),h2=(()=>{class t{_live=w(VQ);_injector=w(Dt);_breakpointObserver=w(jQ);_parentSnackBar=w(t,{optional:!0,skipSelf:!0});_defaultConfig=w(ocA);_animationsDisabled=An();_snackBarRefAtThisLevel=null;simpleSnackBarComponent=icA;snackBarContainerComponent=ncA;handsetCssClass="mat-mdc-snack-bar-handset";get _openedSnackBarRef(){let A=this._parentSnackBar;return A?A._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(A){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=A:this._snackBarRefAtThisLevel=A}constructor(){}openFromComponent(A,i){return this._attach(A,i)}openFromTemplate(A,i){return this._attach(A,i)}open(A,i="",n){let o=gA(gA({},this._defaultConfig),n);return o.data={message:A,action:i},o.announcementMessage===A&&(o.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,o)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(A,i){let n=i&&i.viewContainerRef&&i.viewContainerRef.injector,o=Dt.create({parent:n||this._injector,providers:[{provide:GB,useValue:i}]}),a=new Ss(this.snackBarContainerComponent,i.viewContainerRef,o),r=A.attach(a);return r.instance.snackBarConfig=i,r.instance}_attach(A,i){let n=gA(gA(gA({},new GB),this._defaultConfig),i),o=this._createOverlay(n),a=this._attachSnackBarContainer(o,n),r=new Uu(a,o);if(A instanceof ao){let s=new Jr(A,null,{$implicit:n.data,snackBarRef:r});r.instance=a.attachTemplatePortal(s)}else{let s=this._createInjector(n,r),l=new Ss(A,void 0,s),g=a.attachComponentPortal(l);r.instance=g.instance}return this._breakpointObserver.observe(EG.HandsetPortrait).pipe(Qt(o.detachments())).subscribe(s=>{o.overlayElement.classList.toggle(this.handsetCssClass,s.matches)}),n.announcementMessage&&a._onAnnounce.subscribe(()=>{this._live.announce(n.announcementMessage,n.politeness)}),this._animateSnackBar(r,n),this._openedSnackBarRef=r,this._openedSnackBarRef}_animateSnackBar(A,i){A.afterDismissed().subscribe(()=>{this._openedSnackBarRef==A&&(this._openedSnackBarRef=null),i.announcementMessage&&this._live.clear()}),i.duration&&i.duration>0&&A.afterOpened().subscribe(()=>A._dismissAfter(i.duration)),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{A.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):A.containerInstance.enter()}_createOverlay(A){let i=new Og;i.direction=A.direction;let n=I2(this._injector),o=A.direction==="rtl",a=A.horizontalPosition==="left"||A.horizontalPosition==="start"&&!o||A.horizontalPosition==="end"&&o,r=!a&&A.horizontalPosition!=="center";return a?n.left("0"):r?n.right("0"):n.centerHorizontally(),A.verticalPosition==="top"?n.top("0"):n.bottom("0"),i.positionStrategy=n,i.disableAnimations=this._animationsDisabled,Hg(this._injector,i)}_createInjector(A,i){let n=A&&A.viewContainerRef&&A.viewContainerRef.injector;return Dt.create({parent:n||this._injector,providers:[{provide:Uu,useValue:i},{provide:$T,useValue:A.data}]})}static \u0275fac=function(i){return new(i||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var acA=["*",[["mat-toolbar-row"]]],rcA=["*","mat-toolbar-row"],scA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-toolbar-row"]],hostAttrs:[1,"mat-toolbar-row"],exportAs:["matToolbarRow"]})}return t})(),AJ=(()=>{class t{_elementRef=w(ce);_platform=w(li);_document=w(ti);color;_toolbarRows;constructor(){}ngAfterViewInit(){this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(()=>this._checkToolbarMixedModes()))}_checkToolbarMixedModes(){this._toolbarRows.length}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-toolbar"]],contentQueries:function(i,n,o){if(i&1&&jo(o,scA,5),i&2){let a;ae(a=re())&&(n._toolbarRows=a)}},hostAttrs:[1,"mat-toolbar"],hostVars:6,hostBindings:function(i,n){i&2&&(ro(n.color?"mat-"+n.color:""),RA("mat-toolbar-multiple-rows",n._toolbarRows.length>0)("mat-toolbar-single-row",n._toolbarRows.length===0))},inputs:{color:"color"},exportAs:["matToolbar"],ngContentSelectors:rcA,decls:2,vars:0,template:function(i,n){i&1&&(Rt(acA),Ve(0),Ve(1,1))},styles:[`.mat-toolbar{background:var(--mat-toolbar-container-background-color, var(--mat-sys-surface));color:var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface))}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font-family:var(--mat-toolbar-title-text-font, var(--mat-sys-title-large-font));font-size:var(--mat-toolbar-title-text-size, var(--mat-sys-title-large-size));line-height:var(--mat-toolbar-title-text-line-height, var(--mat-sys-title-large-line-height));font-weight:var(--mat-toolbar-title-text-weight, var(--mat-sys-title-large-weight));letter-spacing:var(--mat-toolbar-title-text-tracking, var(--mat-sys-title-large-tracking));margin:0}@media(forced-colors: active){.mat-toolbar{outline:solid 1px}}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar .mat-mdc-button-base.mat-mdc-button-base.mat-unthemed{--mat-button-text-label-text-color: var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface));--mat-button-outlined-label-text-color: var(--mat-toolbar-container-text-color, var(--mat-sys-on-surface))}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap;height:var(--mat-toolbar-standard-height, 64px)}@media(max-width: 599px){.mat-toolbar-row,.mat-toolbar-single-row{height:var(--mat-toolbar-mobile-height, 56px)}}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%;min-height:var(--mat-toolbar-standard-height, 64px)}@media(max-width: 599px){.mat-toolbar-multiple-rows{min-height:var(--mat-toolbar-mobile-height, 56px)}} +`],encapsulation:2,changeDetection:0})}return t})();var lcA=t=>["segment",t],gcA=(t,e)=>({"segment-main":!0,expandable:t,expanded:e});function ccA(t,e){t&1&&QA(0,"div",9)}function CcA(t,e){if(t&1&&(B(0,"span",10),y(1),Q()),t&2){let A=p().$implicit;u(),lA(A.description)}}function IcA(t,e){if(t&1&&(B(0,"section",11),QA(1,"ngx-json-viewer",12),Q()),t&2){let A=p().$implicit,i=p();u(),H("json",A.value)("expanded",i.expanded)("depth",i.depth)("_currentDepth",i._currentDepth+1)}}function dcA(t,e){if(t&1){let A=hA();B(0,"section",2)(1,"section",3),U("click",function(){let n=T(A).$implicit,o=p();return J(o.toggle(n))}),Et(2,ccA,1,0,"div",4),B(3,"span",5),y(4),Q(),B(5,"span",6),y(6,": "),Q(),Et(7,CcA,2,1,"span",7),Q(),Et(8,IcA,2,4,"section",8),Q()}if(t&2){let A=e.$implicit,i=p();H("ngClass",Ks(6,lcA,"segment-type-"+A.type)),u(),H("ngClass",U0(8,gcA,i.isExpandable(A),A.expanded)),u(),H("ngIf",i.isExpandable(A)),u(2),lA(A.key),u(3),H("ngIf",!A.expanded||!i.isExpandable(A)),u(),H("ngIf",A.expanded&&i.isExpandable(A))}}var $l=(()=>{class t{constructor(){this.expanded=!0,this.depth=-1,this._currentDepth=0,this.segments=[]}ngOnChanges(){this.segments=[],this.json=this.decycle(this.json),typeof this.json=="object"?Object.keys(this.json).forEach(A=>{this.segments.push(this.parseKeyValue(A,this.json[A]))}):this.segments.push(this.parseKeyValue(`(${typeof this.json})`,this.json))}isExpandable(A){return A.type==="object"||A.type==="array"}toggle(A){this.isExpandable(A)&&(A.expanded=!A.expanded)}parseKeyValue(A,i){let n={key:A,value:i,type:void 0,description:""+i,expanded:this.isExpanded()};switch(typeof n.value){case"number":{n.type="number";break}case"boolean":{n.type="boolean";break}case"function":{n.type="function";break}case"string":{n.type="string",n.description='"'+n.value+'"';break}case"undefined":{n.type="undefined",n.description="undefined";break}case"object":{n.value===null?(n.type="null",n.description="null"):Array.isArray(n.value)?(n.type="array",n.description="Array["+n.value.length+"] "+JSON.stringify(n.value)):n.value instanceof Date?n.type="date":(n.type="object",n.description="Object "+JSON.stringify(n.value));break}}return n}isExpanded(){return this.expanded&&!(this.depth>-1&&this._currentDepth>=this.depth)}decycle(A){let i=new WeakMap;return(function n(o,a){let r,s;return typeof o=="object"&&o!==null&&!(o instanceof Boolean)&&!(o instanceof Date)&&!(o instanceof Number)&&!(o instanceof RegExp)&&!(o instanceof String)?(r=i.get(o),r!==void 0?{$ref:r}:(i.set(o,a),Array.isArray(o)?(s=[],o.forEach(function(l,g){s[g]=n(l,a+"["+g+"]")})):(s={},Object.keys(o).forEach(function(l){s[l]=n(o[l],a+"["+JSON.stringify(l)+"]")})),s)):o})(A,"$")}}return t.\u0275fac=function(A){return new(A||t)},t.\u0275cmp=SA({type:t,selectors:[["ngx-json-viewer"]],inputs:{json:"json",expanded:"expanded",depth:"depth",_currentDepth:"_currentDepth"},standalone:!1,features:[Yt],decls:2,vars:1,consts:[[1,"ngx-json-viewer"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],[3,"click","ngClass"],["class","toggler",4,"ngIf"],[1,"segment-key"],[1,"segment-separator"],["class","segment-value",4,"ngIf"],["class","children",4,"ngIf"],[1,"toggler"],[1,"segment-value"],[1,"children"],[3,"json","expanded","depth","_currentDepth"]],template:function(A,i){A&1&&(B(0,"section",0),Et(1,dcA,9,11,"section",1),Q()),A&2&&(u(),H("ngForOf",i.segments))},dependencies:[zl,A2,Js,t],styles:['@charset "UTF-8";.ngx-json-viewer[_ngcontent-%COMP%]{font-family:var(--ngx-json-font-family, monospace);font-size:var(--ngx-json-font-size, 1em);width:100%;height:100%;overflow:hidden;position:relative}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%]{padding:2px;margin:1px 1px 1px 12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%]{word-wrap:break-word}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]{position:absolute;margin-left:-14px;margin-top:3px;font-size:.8em;line-height:1.2em;vertical-align:middle;color:var(--ngx-json-toggler, #787878)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]:after{display:inline-block;content:"\\25ba";transition:transform .1s ease-in}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-key, #4E187C)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-separator[_ngcontent-%COMP%]{color:var(--ngx-json-separator, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-value, #000)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .children[_ngcontent-%COMP%]{margin-left:12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-string[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-string, #FF6B6B)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-number[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-number, #009688)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-boolean[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-boolean, #B938A4)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-date[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-date, #05668D)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-array, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-object, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-function[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-function, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-null, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-undefined, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-null-bg, red)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%]{white-space:nowrap}.ngx-json-viewer[_ngcontent-%COMP%] .expanded[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]:after{transform:rotate(90deg)}.ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]{cursor:pointer}']}),t})(),cs=(()=>{class t{}return t.\u0275fac=function(A){return new(A||t)},t.\u0275mod=Ze({type:t}),t.\u0275inj=We({imports:[si]}),t})();var Dr=class t{static getBaseUrlWithoutPath(){let e=window.location.href;return new URL(e).origin+"/dev-ui/"}static getApiServerBaseUrl(){return window.runtimeConfig?.backendUrl||""}static getWSServerUrl(){let e=t.getApiServerBaseUrl();return!e||e==""?window.location.host:e.startsWith("http://")?e.slice(7):e.startsWith("https://")?e.slice(8):e}};var UB=class{role;text;thought;isLoading;isEditing;evalStatus;failedMetric;attachments;renderedContent;a2uiData;executableCode;codeExecutionResult;event;inlineData;functionCalls;functionResponses;actualInvocationToolUses;expectedInvocationToolUses;actualFinalResponse;expectedFinalResponse;evalScore;evalThreshold;invocationIndex;finalResponsePartIndex;toolUseIndex;error;constructor(e){if(Object.assign(this,e),this.event?.actions)for(let[A,i]of Object.entries(this.event.actions))i!==null&&typeof i=="object"&&Object.keys(i).length===0&&delete this.event.actions[A]}get stateDelta(){return this.event?.actions?.stateDelta}get artifactDelta(){return this.event?.actions?.artifactDelta}get route(){return this.event?.actions?.route}get nodePath(){return this.event?.nodeInfo?.path||null}get bareNodePath(){let e=this.nodePath;return e?e.split("/").map(A=>A.split("@")[0]).join("/"):null}get author(){return this.event?.author??"root_agent"}};var $s=new kA("AgentService");var e0=new kA("AgentBuilderService");var TB=new kA("ArtifactService");var JB=new kA("DownloadService");var t0=new kA("EvalService");var o6=new kA("EventService");var eJ="edit_function_args";var tJ="a2a_card",iJ="tests",nJ="eval_v2",yr=new kA("FeatureFlagService");var OB=new kA("GraphService");var a6=new kA("LocalFileService");var Cs=new kA("SafeValuesService"),r6=class{openBase64InNewTab(e,A){try{if(!e)return;let i=e;if(e.startsWith("data:")&&e.includes(";base64,")&&(i=i.substring(i.indexOf(";base64,")+8)),!A||!i)return;let n=atob(i),o=new Array(n.length);for(let l=0;l{fetch(i,{method:"POST"}).then(o=>{if(!o.body){n.error("No response body");return}let a=o.body.getReader(),r=new TextDecoder("utf-8"),s=()=>{a.read().then(({done:l,value:g})=>{if(l){this.zone.run(()=>n.complete());return}let C=r.decode(g,{stream:!0});this.zone.run(()=>n.next(C)),s()}).catch(l=>{this.zone.run(()=>n.error(l))})};s()}).catch(o=>{this.zone.run(()=>n.error(o))})})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var c6=class t{constructor(e,A){this.el=e;this.renderer=A}sideDrawerMinWidth=360;sideDrawerMaxWidth=window.innerWidth/2;resizeHandle=null;resizingEvent={isResizing:!1,startingCursorX:0,startingWidth:0};ngAfterViewInit(){this.sideDrawerMaxWidth=window.innerWidth/2,this.resizeHandle=document.getElementsByClassName("resize-handler")[0],this.resizeHandle&&this.renderer.listen(this.resizeHandle,"mousedown",e=>this.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--side-drawer-width","570px"),this.renderer.setStyle(this.el.nativeElement,"width","var(--side-drawer-width)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorX:e.clientX,startingWidth:this.sideDrawerWidth},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=e.clientX-this.resizingEvent.startingCursorX,i=this.resizingEvent.startingWidth+A;this.sideDrawerWidth=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.sideDrawerMaxWidth=window.innerWidth/2,this.sideDrawerWidth=this.sideDrawerWidth}set sideDrawerWidth(e){let A=Math.min(Math.max(e,this.sideDrawerMinWidth),this.sideDrawerMaxWidth);document.documentElement.style.setProperty("--side-drawer-width",`${A}px`)}get sideDrawerWidth(){let e=getComputedStyle(document.documentElement).getPropertyValue("--side-drawer-width"),A=parseFloat(e);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(ct(ce),ct(Pi))};static \u0275dir=VA({type:t,selectors:[["","appResizableDrawer",""]],hostBindings:function(A,i){A&1&&U("mousemove",function(o){return i.onMouseMove(o)},Pd)("mouseup",function(){return i.onMouseUp()},Pd)("resize",function(){return i.onResize()},ZC)}})};var C6=Symbol.for("yaml.alias"),I6=Symbol.for("yaml.document"),Pg=Symbol.for("yaml.map"),xM=Symbol.for("yaml.pair"),Sl=Symbol.for("yaml.scalar"),AC=Symbol.for("yaml.seq"),xs=Symbol.for("yaml.node.type"),ig=t=>!!t&&typeof t=="object"&&t[xs]===C6,jg=t=>!!t&&typeof t=="object"&&t[xs]===I6,qg=t=>!!t&&typeof t=="object"&&t[xs]===Pg,vn=t=>!!t&&typeof t=="object"&&t[xs]===xM,Vi=t=>!!t&&typeof t=="object"&&t[xs]===Sl,Vg=t=>!!t&&typeof t=="object"&&t[xs]===AC;function go(t){if(t&&typeof t=="object")switch(t[xs]){case Pg:case AC:return!0}return!1}function xn(t){if(t&&typeof t=="object")switch(t[xs]){case C6:case Pg:case Sl:case AC:return!0}return!1}var d6=t=>(Vi(t)||go(t))&&!!t.anchor;var el=Symbol("break visit"),oJ=Symbol("skip children"),i0=Symbol("remove node");function n0(t,e){let A=aJ(e);jg(t)?jB(null,t.contents,A,Object.freeze([t]))===i0&&(t.contents=null):jB(null,t,A,Object.freeze([]))}n0.BREAK=el;n0.SKIP=oJ;n0.REMOVE=i0;function jB(t,e,A,i){let n=rJ(t,e,A,i);if(xn(n)||vn(n))return sJ(t,i,n),jB(t,n,A,i);if(typeof n!="symbol"){if(go(e)){i=Object.freeze(i.concat(e));for(let o=0;ot.replace(/[!,[\]{}]/g,e=>BcA[e]),VB=(()=>{class t{constructor(A,i){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,A),this.tags=Object.assign({},t.defaultTags,i)}clone(){let A=new t(this.yaml,this.tags);return A.docStart=this.docStart,A}atDocument(){let A=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return A}add(A,i){this.atNextDocument&&(this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1);let n=A.trim().split(/[ \t]+/),o=n.shift();switch(o){case"%TAG":{if(n.length!==2&&(i(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[a,r]=n;return this.tags[a]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return i(0,"%YAML directive should contain exactly one part"),!1;let[a]=n;if(a==="1.1"||a==="1.2")return this.yaml.version=a,!0;{let r=/^\d+\.\d+$/.test(a);return i(6,`Unsupported YAML version ${a}`,r),!1}}default:return i(0,`Unknown directive ${o}`,!0),!1}}tagName(A,i){if(A==="!")return"!";if(A[0]!=="!")return i(`Not a valid tag: ${A}`),null;if(A[1]==="<"){let r=A.slice(2,-1);return r==="!"||r==="!!"?(i(`Verbatim tags aren't resolved, so ${A} is invalid.`),null):(A[A.length-1]!==">"&&i("Verbatim tags must end with a >"),r)}let[,n,o]=A.match(/^(.*!)([^!]*)$/s);o||i(`The ${A} tag has no suffix`);let a=this.tags[n];if(a)try{return a+decodeURIComponent(o)}catch(r){return i(String(r)),null}return n==="!"?A:(i(`Could not resolve tag: ${A}`),null)}tagString(A){for(let[i,n]of Object.entries(this.tags))if(A.startsWith(n))return i+EcA(A.substring(n.length));return A[0]==="!"?A:`!<${A}>`}toString(A){let i=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),o;if(A&&n.length>0&&xn(A.contents)){let a={};n0(A.contents,(r,s)=>{xn(s)&&s.tag&&(a[s.tag]=!0)}),o=Object.keys(a)}else o=[];for(let[a,r]of n)a==="!!"&&r==="tag:yaml.org,2002:"||(!A||o.some(s=>s.startsWith(r)))&&i.push(`%TAG ${a} ${r}`);return i.join(` +`)}}return t.defaultYaml={explicit:!1,version:"1.2"},t.defaultTags={"!!":"tag:yaml.org,2002:"},t})();function E6(t){if(/[\x00-\x19\s,[\]{}]/.test(t)){let A=`Anchor must not contain whitespace or control characters: ${JSON.stringify(t)}`;throw new Error(A)}return!0}function _M(t){let e=new Set;return n0(t,{Value(A,i){i.anchor&&e.add(i.anchor)}}),e}function RM(t,e){for(let A=1;;++A){let i=`${t}${A}`;if(!e.has(i))return i}}function lJ(t,e){let A=[],i=new Map,n=null;return{onAnchor:o=>{A.push(o),n??(n=_M(t));let a=RM(e,n);return n.add(a),a},setAnchors:()=>{for(let o of A){let a=i.get(o);if(typeof a=="object"&&a.anchor&&(Vi(a.node)||go(a.node)))a.node.anchor=a.anchor;else{let r=new Error("Failed to resolve repeated object (this should not happen)");throw r.source=o,r}}},sourceObjects:i}}function f2(t,e,A,i){if(i&&typeof i=="object")if(Array.isArray(i))for(let n=0,o=i.length;ncr(i,String(n),A));if(t&&typeof t.toJSON=="function"){if(!A||!d6(t))return t.toJSON(e,A);let i={aliasCount:0,count:1,res:void 0};A.anchors.set(t,i),A.onCreate=o=>{i.res=o,delete A.onCreate};let n=t.toJSON(e,A);return A.onCreate&&A.onCreate(n),n}return typeof t=="bigint"&&!A?.keep?Number(t):t}var p2=class{constructor(e){Object.defineProperty(this,xs,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:A,maxAliasCount:i,onAnchor:n,reviver:o}={}){if(!jg(e))throw new TypeError("A document argument is required");let a={anchors:new Map,doc:e,keep:!0,mapAsMap:A===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},r=cr(this,"",a);if(typeof n=="function")for(let{count:s,res:l}of a.anchors.values())n(l,s);return typeof o=="function"?f2(o,{"":r},"",r):r}};var eC=class extends p2{constructor(e){super(C6),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,A){let i;A?.aliasResolveCache?i=A.aliasResolveCache:(i=[],n0(e,{Node:(o,a)=>{(ig(a)||d6(a))&&i.push(a)}}),A&&(A.aliasResolveCache=i));let n;for(let o of i){if(o===this)break;o.anchor===this.source&&(n=o)}return n}toJSON(e,A){if(!A)return{source:this.source};let{anchors:i,doc:n,maxAliasCount:o}=A,a=this.resolve(n,A);if(!a){let s=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(s)}let r=i.get(a);if(r||(cr(a,null,A),r=i.get(a)),r?.res===void 0){let s="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(s)}if(o>=0&&(r.count+=1,r.aliasCount===0&&(r.aliasCount=h6(n,a,i)),r.count*r.aliasCount>o)){let s="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(s)}return r.res}toString(e,A,i){let n=`*${this.source}`;if(e){if(E6(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let o=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(o)}if(e.implicitKey)return`${n} `}return n}};function h6(t,e,A){if(ig(e)){let i=e.resolve(t),n=A&&i&&A.get(i);return n?n.count*n.aliasCount:0}else if(go(e)){let i=0;for(let n of e.items){let o=h6(t,n,A);o>i&&(i=o)}return i}else if(vn(e)){let i=h6(t,e.key,A),n=h6(t,e.value,A);return Math.max(i,n)}return 1}var Q6=t=>!t||typeof t!="function"&&typeof t!="object",Pt=(()=>{class t extends p2{constructor(A){super(Sl),this.value=A}toJSON(A,i){return i?.keep?this.value:cr(this.value,A,i)}toString(){return String(this.value)}}return t.BLOCK_FOLDED="BLOCK_FOLDED",t.BLOCK_LITERAL="BLOCK_LITERAL",t.PLAIN="PLAIN",t.QUOTE_DOUBLE="QUOTE_DOUBLE",t.QUOTE_SINGLE="QUOTE_SINGLE",t})();var hcA="tag:yaml.org,2002:";function QcA(t,e,A){if(e){let i=A.filter(o=>o.tag===e),n=i.find(o=>!o.format)??i[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return A.find(i=>i.identify?.(t)&&!i.format)}function tC(t,e,A){if(jg(t)&&(t=t.contents),xn(t))return t;if(vn(t)){let C=A.schema[Pg].createNode?.(A.schema,null,A);return C.items.push(t),C}(t instanceof String||t instanceof Number||t instanceof Boolean||typeof BigInt<"u"&&t instanceof BigInt)&&(t=t.valueOf());let{aliasDuplicateObjects:i,onAnchor:n,onTagObj:o,schema:a,sourceObjects:r}=A,s;if(i&&t&&typeof t=="object"){if(s=r.get(t),s)return s.anchor??(s.anchor=n(t)),new eC(s.anchor);s={anchor:null,node:null},r.set(t,s)}e?.startsWith("!!")&&(e=hcA+e.slice(2));let l=QcA(t,e,a.tags);if(!l){if(t&&typeof t.toJSON=="function"&&(t=t.toJSON()),!t||typeof t!="object"){let C=new Pt(t);return s&&(s.node=C),C}l=t instanceof Map?a[Pg]:Symbol.iterator in Object(t)?a[AC]:a[Pg]}o&&(o(l),delete A.onTagObj);let g=l?.createNode?l.createNode(A.schema,t,A):typeof l?.nodeClass?.from=="function"?l.nodeClass.from(A.schema,t,A):new Pt(t);return e?g.tag=e:l.default||(g.tag=l.tag),s&&(s.node=g),g}function Tu(t,e,A){let i=A;for(let n=e.length-1;n>=0;--n){let o=e[n];if(typeof o=="number"&&Number.isInteger(o)&&o>=0){let a=[];a[o]=i,i=a}else i=new Map([[o,i]])}return tC(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:t,sourceObjects:new Map})}var ZB=t=>t==null||typeof t=="object"&&!!t[Symbol.iterator]().next().done,WB=class extends p2{constructor(e,A){super(e),Object.defineProperty(this,"schema",{value:A,configurable:!0,enumerable:!1,writable:!0})}clone(e){let A=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(A.schema=e),A.items=A.items.map(i=>xn(i)||vn(i)?i.clone(e):i),this.range&&(A.range=this.range.slice()),A}addIn(e,A){if(ZB(e))this.add(A);else{let[i,...n]=e,o=this.get(i,!0);if(go(o))o.addIn(n,A);else if(o===void 0&&this.schema)this.set(i,Tu(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}deleteIn(e){let[A,...i]=e;if(i.length===0)return this.delete(A);let n=this.get(A,!0);if(go(n))return n.deleteIn(i);throw new Error(`Expected YAML collection at ${A}. Remaining path: ${i}`)}getIn(e,A){let[i,...n]=e,o=this.get(i,!0);return n.length===0?!A&&Vi(o)?o.value:o:go(o)?o.getIn(n,A):void 0}hasAllNullValues(e){return this.items.every(A=>{if(!vn(A))return!1;let i=A.value;return i==null||e&&Vi(i)&&i.value==null&&!i.commentBefore&&!i.comment&&!i.tag})}hasIn(e){let[A,...i]=e;if(i.length===0)return this.has(A);let n=this.get(A,!0);return go(n)?n.hasIn(i):!1}setIn(e,A){let[i,...n]=e;if(n.length===0)this.set(i,A);else{let o=this.get(i,!0);if(go(o))o.setIn(n,A);else if(o===void 0&&this.schema)this.set(i,Tu(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}};var gJ=t=>t.replace(/^(?!$)(?: $)?/gm,"#");function ng(t,e){return/^\n+$/.test(t)?t.substring(1):e?t.replace(/^(?! *$)/gm,e):t}var o0=(t,e,A)=>t.endsWith(` +`)?ng(A,e):A.includes(` +`)?` +`+ng(A,e):(t.endsWith(" ")?"":" ")+A;var NM="flow",u6="block",Ju="quoted";function Ou(t,e,A="flow",{indentAtStart:i,lineWidth:n=80,minContentWidth:o=20,onFold:a,onOverflow:r}={}){if(!n||n<0)return t;nn-Math.max(2,o)?l.push(0):C=n-i);let I,d,h=!1,E=-1,f=-1,m=-1;A===u6&&(E=cJ(t,E,e.length),E!==-1&&(C=E+s));for(let k;k=t[E+=1];){if(A===Ju&&k==="\\"){switch(f=E,t[E+1]){case"x":E+=3;break;case"u":E+=5;break;case"U":E+=9;break;default:E+=1}m=E}if(k===` +`)A===u6&&(E=cJ(t,E,e.length)),C=E+e.length+s,I=void 0;else{if(k===" "&&d&&d!==" "&&d!==` +`&&d!==" "){let S=t[E+1];S&&S!==" "&&S!==` +`&&S!==" "&&(I=E)}if(E>=C)if(I)l.push(I),C=I+s,I=void 0;else if(A===Ju){for(;d===" "||d===" ";)d=k,k=t[E+=1],h=!0;let S=E>m+1?E-2:f-1;if(g[S])return t;l.push(S),g[S]=!0,C=S+s,I=void 0}else h=!0}d=k}if(h&&r&&r(),l.length===0)return t;a&&a();let v=t.slice(0,l[0]);for(let k=0;k({indentAtStart:e?t.indent.length:t.indentAtStart,lineWidth:t.options.lineWidth,minContentWidth:t.options.minContentWidth}),m6=t=>/^(%|---|\.\.\.)/m.test(t);function ucA(t,e,A){if(!e||e<0)return!1;let i=e-A,n=t.length;if(n<=i)return!1;for(let o=0,a=0;oi)return!0;if(a=o+1,n-a<=i)return!1}return!0}function Yu(t,e){let A=JSON.stringify(t);if(e.options.doubleQuotedAsJSON)return A;let{implicitKey:i}=e,n=e.options.doubleQuotedMinMultiLineLength,o=e.indent||(m6(t)?" ":""),a="",r=0;for(let s=0,l=A[s];l;l=A[++s])if(l===" "&&A[s+1]==="\\"&&A[s+2]==="n"&&(a+=A.slice(r,s)+"\\ ",s+=1,r=s,l="\\"),l==="\\")switch(A[s+1]){case"u":{a+=A.slice(r,s);let g=A.substr(s+2,4);switch(g){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:g.substr(0,2)==="00"?a+="\\x"+g.substr(2):a+=A.substr(s,6)}s+=5,r=s+1}break;case"n":if(i||A[s+2]==='"'||A.length +`;let C,I;for(I=A.length;I>0;--I){let b=A[I-1];if(b!==` +`&&b!==" "&&b!==" ")break}let d=A.substring(I),h=d.indexOf(` +`);h===-1?C="-":A===d||h!==d.length-1?(C="+",o&&o()):C="",d&&(A=A.slice(0,-d.length),d[d.length-1]===` +`&&(d=d.slice(0,-1)),d=d.replace(LM,`$&${l}`));let E=!1,f,m=-1;for(f=0;f{x=!0});let z=Ou(`${v}${b}${d}`,l,u6,F);if(!x)return`>${S} +${l}${z}`}return A=A.replace(/\n+/g,`$&${l}`),`|${S} +${l}${v}${A}${d}`}function fcA(t,e,A,i){let{type:n,value:o}=t,{actualString:a,implicitKey:r,indent:s,indentStep:l,inFlow:g}=e;if(r&&o.includes(` +`)||g&&/[[\]{},]/.test(o))return XB(o,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(o))return r||g||!o.includes(` +`)?XB(o,e):f6(t,e,A,i);if(!r&&!g&&n!==Pt.PLAIN&&o.includes(` +`))return f6(t,e,A,i);if(m6(o)){if(s==="")return e.forceBlockIndent=!0,f6(t,e,A,i);if(r&&s===l)return XB(o,e)}let C=o.replace(/\n+/g,`$& +${s}`);if(a){let I=E=>E.default&&E.tag!=="tag:yaml.org,2002:str"&&E.test?.test(C),{compat:d,tags:h}=e.doc.schema;if(h.some(I)||d?.some(I))return XB(o,e)}return r?C:Ou(C,s,NM,p6(e,!1))}function M1(t,e,A,i){let{implicitKey:n,inFlow:o}=e,a=typeof t.value=="string"?t:Object.assign({},t,{value:String(t.value)}),{type:r}=t;r!==Pt.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(r=Pt.QUOTE_DOUBLE);let s=g=>{switch(g){case Pt.BLOCK_FOLDED:case Pt.BLOCK_LITERAL:return n||o?XB(a.value,e):f6(a,e,A,i);case Pt.QUOTE_DOUBLE:return Yu(a.value,e);case Pt.QUOTE_SINGLE:return FM(a.value,e);case Pt.PLAIN:return fcA(a,e,A,i);default:return null}},l=s(r);if(l===null){let{defaultKeyType:g,defaultStringType:C}=e.options,I=n&&g||C;if(l=s(I),l===null)throw new Error(`Unsupported default string type ${I}`)}return l}function w6(t,e){let A=Object.assign({blockQuote:!0,commentString:gJ,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},t.schema.toStringOptions,e),i;switch(A.collectionStyle){case"block":i=!1;break;case"flow":i=!0;break;default:i=null}return{anchors:new Set,doc:t,flowCollectionPadding:A.flowCollectionPadding?" ":"",indent:"",indentStep:typeof A.indent=="number"?" ".repeat(A.indent):" ",inFlow:i,options:A}}function pcA(t,e){if(e.tag){let n=t.filter(o=>o.tag===e.tag);if(n.length>0)return n.find(o=>o.format===e.format)??n[0]}let A,i;if(Vi(e)){i=e.value;let n=t.filter(o=>o.identify?.(i));if(n.length>1){let o=n.filter(a=>a.test);o.length>0&&(n=o)}A=n.find(o=>o.format===e.format)??n.find(o=>!o.format)}else i=e,A=t.find(n=>n.nodeClass&&i instanceof n.nodeClass);if(!A){let n=i?.constructor?.name??(i===null?"null":typeof i);throw new Error(`Tag not resolved for ${n} value`)}return A}function mcA(t,e,{anchors:A,doc:i}){if(!i.directives)return"";let n=[],o=(Vi(t)||go(t))&&t.anchor;o&&E6(o)&&(A.add(o),n.push(`&${o}`));let a=t.tag??(e.default?null:e.tag);return a&&n.push(i.directives.tagString(a)),n.join(" ")}function iC(t,e,A,i){if(vn(t))return t.toString(e,A,i);if(ig(t)){if(e.doc.directives)return t.toString(e);if(e.resolvedAliases?.has(t))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(t):e.resolvedAliases=new Set([t]),t=t.resolve(e.doc)}let n,o=xn(t)?t:e.doc.createNode(t,{onTagObj:s=>n=s});n??(n=pcA(e.doc.schema.tags,o));let a=mcA(o,n,e);a.length>0&&(e.indentAtStart=(e.indentAtStart??0)+a.length+1);let r=typeof n.stringify=="function"?n.stringify(o,e,A,i):Vi(o)?M1(o,e,A,i):o.toString(e,A,i);return a?Vi(o)||r[0]==="{"||r[0]==="["?`${a} ${r}`:`${a} +${e.indent}${r}`:r}function CJ({key:t,value:e},A,i,n){let{allNullValues:o,doc:a,indent:r,indentStep:s,options:{commentString:l,indentSeq:g,simpleKeys:C}}=A,I=xn(t)&&t.comment||null;if(C){if(I)throw new Error("With simple keys, key nodes cannot have comments");if(go(t)||!xn(t)&&typeof t=="object"){let F="With simple keys, collection cannot be used as a key value";throw new Error(F)}}let d=!C&&(!t||I&&e==null&&!A.inFlow||go(t)||(Vi(t)?t.type===Pt.BLOCK_FOLDED||t.type===Pt.BLOCK_LITERAL:typeof t=="object"));A=Object.assign({},A,{allNullValues:!1,implicitKey:!d&&(C||!o),indent:r+s});let h=!1,E=!1,f=iC(t,A,()=>h=!0,()=>E=!0);if(!d&&!A.inFlow&&f.length>1024){if(C)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");d=!0}if(A.inFlow){if(o||e==null)return h&&i&&i(),f===""?"?":d?`? ${f}`:f}else if(o&&!C||e==null&&d)return f=`? ${f}`,I&&!h?f+=o0(f,A.indent,l(I)):E&&n&&n(),f;h&&(I=null),d?(I&&(f+=o0(f,A.indent,l(I))),f=`? ${f} +${r}:`):(f=`${f}:`,I&&(f+=o0(f,A.indent,l(I))));let m,v,k;xn(e)?(m=!!e.spaceBefore,v=e.commentBefore,k=e.comment):(m=!1,v=null,k=null,e&&typeof e=="object"&&(e=a.createNode(e))),A.implicitKey=!1,!d&&!I&&Vi(e)&&(A.indentAtStart=f.length+1),E=!1,!g&&s.length>=2&&!A.inFlow&&!d&&Vg(e)&&!e.flow&&!e.tag&&!e.anchor&&(A.indent=A.indent.substring(2));let S=!1,b=iC(e,A,()=>S=!0,()=>E=!0),x=" ";if(I||m||v){if(x=m?` +`:"",v){let F=l(v);x+=` +${ng(F,A.indent)}`}b===""&&!A.inFlow?x===` +`&&k&&(x=` + +`):x+=` +${A.indent}`}else if(!d&&go(e)){let F=b[0],z=b.indexOf(` +`),P=z!==-1,W=A.inFlow??e.flow??e.items.length===0;if(P||!W){let eA=!1;if(P&&(F==="&"||F==="!")){let Z=b.indexOf(" ");F==="&"&&Z!==-1&&Zt===y6||typeof t=="symbol"&&t.description===y6,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new Pt(Symbol(y6)),{addToJSMap:KM}),stringify:()=>y6},IJ=(t,e)=>(Wg.identify(e)||Vi(e)&&(!e.type||e.type===Pt.PLAIN)&&Wg.identify(e.value))&&t?.doc.schema.tags.some(A=>A.tag===Wg.tag&&A.default);function KM(t,e,A){if(A=t&&ig(A)?A.resolve(t.doc):A,Vg(A))for(let i of A.items)GM(t,e,i);else if(Array.isArray(A))for(let i of A)GM(t,e,i);else GM(t,e,A)}function GM(t,e,A){let i=t&&ig(A)?A.resolve(t.doc):A;if(!qg(i))throw new Error("Merge sources must be maps or map aliases");let n=i.toJSON(null,t,Map);for(let[o,a]of n)e instanceof Map?e.has(o)||e.set(o,a):e instanceof Set?e.add(o):Object.prototype.hasOwnProperty.call(e,o)||Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0});return e}function v6(t,e,{key:A,value:i}){if(xn(A)&&A.addToJSMap)A.addToJSMap(t,e,i);else if(IJ(t,A))KM(t,e,i);else{let n=cr(A,"",t);if(e instanceof Map)e.set(n,cr(i,n,t));else if(e instanceof Set)e.add(n);else{let o=wcA(A,n,t),a=cr(i,o,t);o in e?Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0}):e[o]=a}}return e}function wcA(t,e,A){if(e===null)return"";if(typeof e!="object")return String(e);if(xn(t)&&A?.doc){let i=w6(A.doc,{});i.anchors=new Set;for(let o of A.anchors.keys())i.anchors.add(o.anchor);i.inFlow=!0,i.inStringifyKey=!0;let n=t.toString(i);if(!A.mapKeyWarned){let o=JSON.stringify(n);o.length>40&&(o=o.substring(0,36)+'..."'),D6(A.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${o}. Set mapAsMap: true to use object keys.`),A.mapKeyWarned=!0}return n}return JSON.stringify(e)}function $B(t,e,A){let i=tC(t,void 0,A),n=tC(e,void 0,A);return new La(i,n)}var La=class t{constructor(e,A=null){Object.defineProperty(this,xs,{value:xM}),this.key=e,this.value=A}clone(e){let{key:A,value:i}=this;return xn(A)&&(A=A.clone(e)),xn(i)&&(i=i.clone(e)),new t(A,i)}toJSON(e,A){let i=A?.mapAsMap?new Map:{};return v6(A,i,this)}toString(e,A,i){return e?.doc?CJ(this,e,A,i):JSON.stringify(this)}};function M6(t,e,A){return(e.inFlow??t.flow?ycA:DcA)(t,e,A)}function DcA({comment:t,items:e},A,{blockItemPrefix:i,flowChars:n,itemIndent:o,onChompKeep:a,onComment:r}){let{indent:s,options:{commentString:l}}=A,g=Object.assign({},A,{indent:o,type:null}),C=!1,I=[];for(let h=0;hf=null,()=>C=!0);f&&(m+=o0(m,o,l(f))),C&&f&&(C=!1),I.push(i+m)}let d;if(I.length===0)d=n.start+n.end;else{d=I[0];for(let h=1;hf=null);hg||m.includes(` +`))&&(l=!0),C.push(m),g=C.length}let{start:I,end:d}=A;if(C.length===0)return I+d;if(!l){let h=C.reduce((E,f)=>E+f.length+2,2);l=e.options.lineWidth>0&&h>e.options.lineWidth}if(l){let h=I;for(let E of C)h+=E?` +${o}${n}${E}`:` +`;return`${h} +${n}${d}`}else return`${I}${a}${C.join(" ")}${a}${d}`}function b6({indent:t,options:{commentString:e}},A,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let o=ng(e(i),t);A.push(o.trimStart())}}function m2(t,e){let A=Vi(e)?e.value:e;for(let i of t)if(vn(i)&&(i.key===e||i.key===A||Vi(i.key)&&i.key.value===A))return i}var Ha=class extends WB{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Pg,e),this.items=[]}static from(e,A,i){let{keepUndefined:n,replacer:o}=i,a=new this(e),r=(s,l)=>{if(typeof o=="function")l=o.call(A,s,l);else if(Array.isArray(o)&&!o.includes(s))return;(l!==void 0||n)&&a.items.push($B(s,l,i))};if(A instanceof Map)for(let[s,l]of A)r(s,l);else if(A&&typeof A=="object")for(let s of Object.keys(A))r(s,A[s]);return typeof e.sortMapEntries=="function"&&a.items.sort(e.sortMapEntries),a}add(e,A){let i;vn(e)?i=e:!e||typeof e!="object"||!("key"in e)?i=new La(e,e?.value):i=new La(e.key,e.value);let n=m2(this.items,i.key),o=this.schema?.sortMapEntries;if(n){if(!A)throw new Error(`Key ${i.key} already set`);Vi(n.value)&&Q6(i.value)?n.value.value=i.value:n.value=i.value}else if(o){let a=this.items.findIndex(r=>o(i,r)<0);a===-1?this.items.push(i):this.items.splice(a,0,i)}else this.items.push(i)}delete(e){let A=m2(this.items,e);return A?this.items.splice(this.items.indexOf(A),1).length>0:!1}get(e,A){let n=m2(this.items,e)?.value;return(!A&&Vi(n)?n.value:n)??void 0}has(e){return!!m2(this.items,e)}set(e,A){this.add(new La(e,A),!0)}toJSON(e,A,i){let n=i?new i:A?.mapAsMap?new Map:{};A?.onCreate&&A.onCreate(n);for(let o of this.items)v6(A,n,o);return n}toString(e,A,i){if(!e)return JSON.stringify(this);for(let n of this.items)if(!vn(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),M6(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:i,onComment:A})}};var Zg={collection:"map",default:!0,nodeClass:Ha,tag:"tag:yaml.org,2002:map",resolve(t,e){return qg(t)||e("Expected a mapping for this tag"),t},createNode:(t,e,A)=>Ha.from(t,e,A)};var Is=class extends WB{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(AC,e),this.items=[]}add(e){this.items.push(e)}delete(e){let A=S6(e);return typeof A!="number"?!1:this.items.splice(A,1).length>0}get(e,A){let i=S6(e);if(typeof i!="number")return;let n=this.items[i];return!A&&Vi(n)?n.value:n}has(e){let A=S6(e);return typeof A=="number"&&A=0?e:null}var Xg={collection:"seq",default:!0,nodeClass:Is,tag:"tag:yaml.org,2002:seq",resolve(t,e){return Vg(t)||e("Expected a sequence for this tag"),t},createNode:(t,e,A)=>Is.from(t,e,A)};var w2={identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify(t,e,A,i){return e=Object.assign({actualString:!0},e),M1(t,e,A,i)}};var S1={identify:t=>t==null,createNode:()=>new Pt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Pt(null),stringify:({source:t},e)=>typeof t=="string"&&S1.test.test(t)?t:e.options.nullStr};var Hu={identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:t=>new Pt(t[0]==="t"||t[0]==="T"),stringify({source:t,value:e},A){if(t&&Hu.test.test(t)){let i=t[0]==="t"||t[0]==="T";if(e===i)return t}return e?A.options.trueStr:A.options.falseStr}};function ds({format:t,minFractionDigits:e,tag:A,value:i}){if(typeof i=="bigint")return String(i);let n=typeof i=="number"?i:Number(i);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let o=Object.is(i,-0)?"-0":JSON.stringify(i);if(!t&&e&&(!A||A==="tag:yaml.org,2002:float")&&/^\d/.test(o)){let a=o.indexOf(".");a<0&&(a=o.length,o+=".");let r=e-(o.length-a-1);for(;r-- >0;)o+="0"}return o}var k6={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:ds},x6={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():ds(t)}},_6={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(t){let e=new Pt(parseFloat(t)),A=t.indexOf(".");return A!==-1&&t[t.length-1]==="0"&&(e.minFractionDigits=t.length-A-1),e},stringify:ds};var R6=t=>typeof t=="bigint"||Number.isInteger(t),UM=(t,e,A,{intAsBigInt:i})=>i?BigInt(t):parseInt(t.substring(e),A);function dJ(t,e,A){let{value:i}=t;return R6(i)&&i>=0?A+i.toString(e):ds(t)}var N6={identify:t=>R6(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(t,e,A)=>UM(t,2,8,A),stringify:t=>dJ(t,8,"0o")},F6={identify:R6,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(t,e,A)=>UM(t,0,10,A),stringify:ds},L6={identify:t=>R6(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(t,e,A)=>UM(t,2,16,A),stringify:t=>dJ(t,16,"0x")};var BJ=[Zg,Xg,w2,S1,Hu,N6,F6,L6,k6,x6,_6];function EJ(t){return typeof t=="bigint"||Number.isInteger(t)}var G6=({value:t})=>JSON.stringify(t),vcA=[{identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify:G6},{identify:t=>t==null,createNode:()=>new Pt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:G6},{identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:t=>t==="true",stringify:G6},{identify:EJ,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(t,e,{intAsBigInt:A})=>A?BigInt(t):parseInt(t,10),stringify:({value:t})=>EJ(t)?t.toString():JSON.stringify(t)},{identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:t=>parseFloat(t),stringify:G6}],bcA={default:!0,tag:"",test:/^/,resolve(t,e){return e(`Unresolved plain scalar ${JSON.stringify(t)}`),t}},hJ=[Zg,Xg].concat(vcA,bcA);var zu={identify:t=>t instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(t,e){if(typeof atob=="function"){let A=atob(t.replace(/[\n\r]/g,"")),i=new Uint8Array(A.length);for(let n=0;n1&&e("Each pair must have its own sequence indicator");let n=i.items[0]||new La(new Pt(null));if(i.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${i.commentBefore} +${n.key.commentBefore}`:i.commentBefore),i.comment){let o=n.value??n.key;o.comment=o.comment?`${i.comment} +${o.comment}`:i.comment}i=n}t.items[A]=vn(i)?i:new La(i)}}else e("Expected a sequence for this tag");return t}function JM(t,e,A){let{replacer:i}=A,n=new Is(t);n.tag="tag:yaml.org,2002:pairs";let o=0;if(e&&Symbol.iterator in Object(e))for(let a of e){typeof i=="function"&&(a=i.call(e,String(o++),a));let r,s;if(Array.isArray(a))if(a.length===2)r=a[0],s=a[1];else throw new TypeError(`Expected [key, value] tuple: ${a}`);else if(a&&a instanceof Object){let l=Object.keys(a);if(l.length===1)r=l[0],s=a[r];else throw new TypeError(`Expected tuple with one key, not ${l.length} keys`)}else r=a;n.items.push($B(r,s,A))}return n}var Pu={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:TM,createNode:JM};var OM=(()=>{class t extends Is{constructor(){super(),this.add=Ha.prototype.add.bind(this),this.delete=Ha.prototype.delete.bind(this),this.get=Ha.prototype.get.bind(this),this.has=Ha.prototype.has.bind(this),this.set=Ha.prototype.set.bind(this),this.tag=t.tag}toJSON(A,i){if(!i)return super.toJSON(A);let n=new Map;i?.onCreate&&i.onCreate(n);for(let o of this.items){let a,r;if(vn(o)?(a=cr(o.key,"",i),r=cr(o.value,a,i)):a=cr(o,"",i),n.has(a))throw new Error("Ordered maps must not include duplicate keys");n.set(a,r)}return n}static from(A,i,n){let o=JM(A,i,n),a=new this;return a.items=o.items,a}}return t.tag="tag:yaml.org,2002:omap",t})(),ju={collection:"seq",identify:t=>t instanceof Map,nodeClass:OM,default:!1,tag:"tag:yaml.org,2002:omap",resolve(t,e){let A=TM(t,e),i=[];for(let{key:n}of A.items)Vi(n)&&(i.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):i.push(n.value));return Object.assign(new OM,A)},createNode:(t,e,A)=>OM.from(t,e,A)};function QJ({value:t,source:e},A){return e&&(t?YM:HM).test.test(e)?e:t?A.options.trueStr:A.options.falseStr}var YM={identify:t=>t===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Pt(!0),stringify:QJ},HM={identify:t=>t===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Pt(!1),stringify:QJ};var uJ={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:ds},fJ={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t.replace(/_/g,"")),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():ds(t)}},pJ={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(t){let e=new Pt(parseFloat(t.replace(/_/g,""))),A=t.indexOf(".");if(A!==-1){let i=t.substring(A+1).replace(/_/g,"");i[i.length-1]==="0"&&(e.minFractionDigits=i.length)}return e},stringify:ds};var qu=t=>typeof t=="bigint"||Number.isInteger(t);function K6(t,e,A,{intAsBigInt:i}){let n=t[0];if((n==="-"||n==="+")&&(e+=1),t=t.substring(e).replace(/_/g,""),i){switch(A){case 2:t=`0b${t}`;break;case 8:t=`0o${t}`;break;case 16:t=`0x${t}`;break}let a=BigInt(t);return n==="-"?BigInt(-1)*a:a}let o=parseInt(t,A);return n==="-"?-1*o:o}function zM(t,e,A){let{value:i}=t;if(qu(i)){let n=i.toString(e);return i<0?"-"+A+n.substr(1):A+n}return ds(t)}var mJ={identify:qu,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(t,e,A)=>K6(t,2,2,A),stringify:t=>zM(t,2,"0b")},wJ={identify:qu,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(t,e,A)=>K6(t,1,8,A),stringify:t=>zM(t,8,"0")},DJ={identify:qu,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(t,e,A)=>K6(t,0,10,A),stringify:ds},yJ={identify:qu,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(t,e,A)=>K6(t,2,16,A),stringify:t=>zM(t,16,"0x")};var PM=(()=>{class t extends Ha{constructor(A){super(A),this.tag=t.tag}add(A){let i;vn(A)?i=A:A&&typeof A=="object"&&"key"in A&&"value"in A&&A.value===null?i=new La(A.key,null):i=new La(A,null),m2(this.items,i.key)||this.items.push(i)}get(A,i){let n=m2(this.items,A);return!i&&vn(n)?Vi(n.key)?n.key.value:n.key:n}set(A,i){if(typeof i!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof i}`);let n=m2(this.items,A);n&&!i?this.items.splice(this.items.indexOf(n),1):!n&&i&&this.items.push(new La(A))}toJSON(A,i){return super.toJSON(A,i,Set)}toString(A,i,n){if(!A)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},A,{allNullValues:!0}),i,n);throw new Error("Set items must all have null values")}static from(A,i,n){let{replacer:o}=n,a=new this(A);if(i&&Symbol.iterator in Object(i))for(let r of i)typeof o=="function"&&(r=o.call(i,r,r)),a.items.push($B(r,null,n));return a}}return t.tag="tag:yaml.org,2002:set",t})(),Vu={collection:"map",identify:t=>t instanceof Set,nodeClass:PM,default:!1,tag:"tag:yaml.org,2002:set",createNode:(t,e,A)=>PM.from(t,e,A),resolve(t,e){if(qg(t)){if(t.hasAllNullValues(!0))return Object.assign(new PM,t);e("Set items must all have null values")}else e("Expected a mapping for this tag");return t}};function jM(t,e){let A=t[0],i=A==="-"||A==="+"?t.substring(1):t,n=a=>e?BigInt(a):Number(a),o=i.replace(/_/g,"").split(":").reduce((a,r)=>a*n(60)+n(r),n(0));return A==="-"?n(-1)*o:o}function vJ(t){let{value:e}=t,A=a=>a;if(typeof e=="bigint")A=a=>BigInt(a);else if(isNaN(e)||!isFinite(e))return ds(t);let i="";e<0&&(i="-",e*=A(-1));let n=A(60),o=[e%n];return e<60?o.unshift(0):(e=(e-o[0])/n,o.unshift(e%n),e>=60&&(e=(e-o[0])/n,o.unshift(e))),i+o.map(a=>String(a).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var U6={identify:t=>typeof t=="bigint"||Number.isInteger(t),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(t,e,{intAsBigInt:A})=>jM(t,A),stringify:vJ},T6={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:t=>jM(t,!1),stringify:vJ},AE={identify:t=>t instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(t){let e=t.match(AE.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,A,i,n,o,a,r]=e.map(Number),s=e[7]?Number((e[7]+"00").substr(1,3)):0,l=Date.UTC(A,i-1,n,o||0,a||0,r||0,s),g=e[8];if(g&&g!=="Z"){let C=jM(g,!1);Math.abs(C)<30&&(C*=60),l-=6e4*C}return new Date(l)},stringify:({value:t})=>t?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};var qM=[Zg,Xg,w2,S1,YM,HM,mJ,wJ,DJ,yJ,uJ,fJ,pJ,zu,Wg,ju,Pu,Vu,U6,T6,AE];var bJ=new Map([["core",BJ],["failsafe",[Zg,Xg,w2]],["json",hJ],["yaml11",qM],["yaml-1.1",qM]]),MJ={binary:zu,bool:Hu,float:_6,floatExp:x6,floatNaN:k6,floatTime:T6,int:F6,intHex:L6,intOct:N6,intTime:U6,map:Zg,merge:Wg,null:S1,omap:ju,pairs:Pu,seq:Xg,set:Vu,timestamp:AE},SJ={"tag:yaml.org,2002:binary":zu,"tag:yaml.org,2002:merge":Wg,"tag:yaml.org,2002:omap":ju,"tag:yaml.org,2002:pairs":Pu,"tag:yaml.org,2002:set":Vu,"tag:yaml.org,2002:timestamp":AE};function J6(t,e,A){let i=bJ.get(e);if(i&&!t)return A&&!i.includes(Wg)?i.concat(Wg):i.slice();let n=i;if(!n)if(Array.isArray(t))n=[];else{let o=Array.from(bJ.keys()).filter(a=>a!=="yaml11").map(a=>JSON.stringify(a)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${o} or define customTags array`)}if(Array.isArray(t))for(let o of t)n=n.concat(o);else typeof t=="function"&&(n=t(n.slice()));return A&&(n=n.concat(Wg)),n.reduce((o,a)=>{let r=typeof a=="string"?MJ[a]:a;if(!r){let s=JSON.stringify(a),l=Object.keys(MJ).map(g=>JSON.stringify(g)).join(", ");throw new Error(`Unknown custom tag ${s}; use one of ${l}`)}return o.includes(r)||o.push(r),o},[])}var McA=(t,e)=>t.keye.key?1:0,Wu=class t{constructor({compat:e,customTags:A,merge:i,resolveKnownTags:n,schema:o,sortMapEntries:a,toStringDefaults:r}){this.compat=Array.isArray(e)?J6(e,"compat"):e?J6(null,e):null,this.name=typeof o=="string"&&o||"core",this.knownTags=n?SJ:{},this.tags=J6(A,this.name,i),this.toStringOptions=r??null,Object.defineProperty(this,Pg,{value:Zg}),Object.defineProperty(this,Sl,{value:w2}),Object.defineProperty(this,AC,{value:Xg}),this.sortMapEntries=typeof a=="function"?a:a===!0?McA:null}clone(){let e=Object.create(t.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function kJ(t,e){let A=[],i=e.directives===!0;if(e.directives!==!1&&t.directives){let s=t.directives.toString(t);s?(A.push(s),i=!0):t.directives.docStart&&(i=!0)}i&&A.push("---");let n=w6(t,e),{commentString:o}=n.options;if(t.commentBefore){A.length!==1&&A.unshift("");let s=o(t.commentBefore);A.unshift(ng(s,""))}let a=!1,r=null;if(t.contents){if(xn(t.contents)){if(t.contents.spaceBefore&&i&&A.push(""),t.contents.commentBefore){let g=o(t.contents.commentBefore);A.push(ng(g,""))}n.forceBlockIndent=!!t.comment,r=t.contents.comment}let s=r?void 0:()=>a=!0,l=iC(t.contents,n,()=>r=null,s);r&&(l+=o0(l,"",o(r))),(l[0]==="|"||l[0]===">")&&A[A.length-1]==="---"?A[A.length-1]=`--- ${l}`:A.push(l)}else A.push(iC(t.contents,n));if(t.directives?.docEnd)if(t.comment){let s=o(t.comment);s.includes(` +`)?(A.push("..."),A.push(ng(s,""))):A.push(`... ${s}`)}else A.push("...");else{let s=t.comment;s&&a&&(s=s.replace(/^\n+/,"")),s&&((!a||r)&&A[A.length-1]!==""&&A.push(""),A.push(ng(o(s),"")))}return A.join(` +`)+` +`}var nC=class t{constructor(e,A,i){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,xs,{value:I6});let n=null;typeof A=="function"||Array.isArray(A)?n=A:i===void 0&&A&&(i=A,A=void 0);let o=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},i);this.options=o;let{version:a}=o;i?._directives?(this.directives=i._directives.atDocument(),this.directives.yaml.explicit&&(a=this.directives.yaml.version)):this.directives=new VB({version:a}),this.setSchema(a,i),this.contents=e===void 0?null:this.createNode(e,n,i)}clone(){let e=Object.create(t.prototype,{[xs]:{value:I6}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=xn(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){eE(this.contents)&&this.contents.add(e)}addIn(e,A){eE(this.contents)&&this.contents.addIn(e,A)}createAlias(e,A){if(!e.anchor){let i=_M(this);e.anchor=!A||i.has(A)?RM(A||"a",i):A}return new eC(e.anchor)}createNode(e,A,i){let n;if(typeof A=="function")e=A.call({"":e},"",e),n=A;else if(Array.isArray(A)){let f=v=>typeof v=="number"||v instanceof String||v instanceof Number,m=A.filter(f).map(String);m.length>0&&(A=A.concat(m)),n=A}else i===void 0&&A&&(i=A,A=void 0);let{aliasDuplicateObjects:o,anchorPrefix:a,flow:r,keepUndefined:s,onTagObj:l,tag:g}=i??{},{onAnchor:C,setAnchors:I,sourceObjects:d}=lJ(this,a||"a"),h={aliasDuplicateObjects:o??!0,keepUndefined:s??!1,onAnchor:C,onTagObj:l,replacer:n,schema:this.schema,sourceObjects:d},E=tC(e,g,h);return r&&go(E)&&(E.flow=!0),I(),E}createPair(e,A,i={}){let n=this.createNode(e,null,i),o=this.createNode(A,null,i);return new La(n,o)}delete(e){return eE(this.contents)?this.contents.delete(e):!1}deleteIn(e){return ZB(e)?this.contents==null?!1:(this.contents=null,!0):eE(this.contents)?this.contents.deleteIn(e):!1}get(e,A){return go(this.contents)?this.contents.get(e,A):void 0}getIn(e,A){return ZB(e)?!A&&Vi(this.contents)?this.contents.value:this.contents:go(this.contents)?this.contents.getIn(e,A):void 0}has(e){return go(this.contents)?this.contents.has(e):!1}hasIn(e){return ZB(e)?this.contents!==void 0:go(this.contents)?this.contents.hasIn(e):!1}set(e,A){this.contents==null?this.contents=Tu(this.schema,[e],A):eE(this.contents)&&this.contents.set(e,A)}setIn(e,A){ZB(e)?this.contents=A:this.contents==null?this.contents=Tu(this.schema,Array.from(e),A):eE(this.contents)&&this.contents.setIn(e,A)}setSchema(e,A={}){typeof e=="number"&&(e=String(e));let i;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new VB({version:"1.1"}),i={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new VB({version:e}),i={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,i=null;break;default:{let n=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(A.schema instanceof Object)this.schema=A.schema;else if(i)this.schema=new Wu(Object.assign(i,A));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:A,mapAsMap:i,maxAliasCount:n,onAnchor:o,reviver:a}={}){let r={anchors:new Map,doc:this,keep:!e,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},s=cr(this.contents,A??"",r);if(typeof o=="function")for(let{count:l,res:g}of r.anchors.values())o(g,l);return typeof a=="function"?f2(a,{"":s},"",s):s}toJSON(e,A){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:A})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let A=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${A}`)}return kJ(this,e)}};function eE(t){if(go(t))return!0;throw new Error("Expected a YAML collection as document contents")}var Zu=class extends Error{constructor(e,A,i,n){super(),this.name=e,this.code=i,this.message=n,this.pos=A}},$g=class extends Zu{constructor(e,A,i){super("YAMLParseError",e,A,i)}},Xu=class extends Zu{constructor(e,A,i){super("YAMLWarning",e,A,i)}},VM=(t,e)=>A=>{if(A.pos[0]===-1)return;A.linePos=A.pos.map(r=>e.linePos(r));let{line:i,col:n}=A.linePos[0];A.message+=` at line ${i}, column ${n}`;let o=n-1,a=t.substring(e.lineStarts[i-1],e.lineStarts[i]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){let r=Math.min(o-39,a.length-79);a="\u2026"+a.substring(r),o-=r-1}if(a.length>80&&(a=a.substring(0,79)+"\u2026"),i>1&&/^ *$/.test(a.substring(0,o))){let r=t.substring(e.lineStarts[i-2],e.lineStarts[i-1]);r.length>80&&(r=r.substring(0,79)+`\u2026 +`),a=r+a}if(/[^ ]/.test(a)){let r=1,s=A.linePos[1];s?.line===i&&s.col>n&&(r=Math.max(1,Math.min(s.col-n,80-o)));let l=" ".repeat(o)+"^".repeat(r);A.message+=`: + +${a} +${l} +`}};function a0(t,{flow:e,indicator:A,next:i,offset:n,onError:o,parentIndent:a,startOnNewline:r}){let s=!1,l=r,g=r,C="",I="",d=!1,h=!1,E=null,f=null,m=null,v=null,k=null,S=null,b=null;for(let z of t)switch(h&&(z.type!=="space"&&z.type!=="newline"&&z.type!=="comma"&&o(z.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),h=!1),E&&(l&&z.type!=="comment"&&z.type!=="newline"&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),E=null),z.type){case"space":!e&&(A!=="doc-start"||i?.type!=="flow-collection")&&z.source.includes(" ")&&(E=z),g=!0;break;case"comment":{g||o(z,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let P=z.source.substring(1)||" ";C?C+=I+P:C=P,I="",l=!1;break}case"newline":l?C?C+=z.source:(!S||A!=="seq-item-ind")&&(s=!0):I+=z.source,l=!0,d=!0,(f||m)&&(v=z),g=!0;break;case"anchor":f&&o(z,"MULTIPLE_ANCHORS","A node can have at most one anchor"),z.source.endsWith(":")&&o(z.offset+z.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),f=z,b??(b=z.offset),l=!1,g=!1,h=!0;break;case"tag":{m&&o(z,"MULTIPLE_TAGS","A node can have at most one tag"),m=z,b??(b=z.offset),l=!1,g=!1,h=!0;break}case A:(f||m)&&o(z,"BAD_PROP_ORDER",`Anchors and tags must be after the ${z.source} indicator`),S&&o(z,"UNEXPECTED_TOKEN",`Unexpected ${z.source} in ${e??"collection"}`),S=z,l=A==="seq-item-ind"||A==="explicit-key-ind",g=!1;break;case"comma":if(e){k&&o(z,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),k=z,l=!1,g=!1;break}default:o(z,"UNEXPECTED_TOKEN",`Unexpected ${z.type} token`),l=!1,g=!1}let x=t[t.length-1],F=x?x.offset+x.source.length:n;return h&&i&&i.type!=="space"&&i.type!=="newline"&&i.type!=="comma"&&(i.type!=="scalar"||i.source!=="")&&o(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),E&&(l&&E.indent<=a||i?.type==="block-map"||i?.type==="block-seq")&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:k,found:S,spaceBefore:s,comment:C,hasNewline:d,anchor:f,tag:m,newlineAfterProp:v,end:F,start:b??F}}function D2(t){if(!t)return null;switch(t.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(t.source.includes(` +`))return!0;if(t.end){for(let e of t.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of t.items){for(let A of e.start)if(A.type==="newline")return!0;if(e.sep){for(let A of e.sep)if(A.type==="newline")return!0}if(D2(e.key)||D2(e.value))return!0}return!1;default:return!0}}function $u(t,e,A){if(e?.type==="flow-collection"){let i=e.end[0];i.indent===t&&(i.source==="]"||i.source==="}")&&D2(e)&&A(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function O6(t,e,A){let{uniqueKeys:i}=t.options;if(i===!1)return!1;let n=typeof i=="function"?i:(o,a)=>o===a||Vi(o)&&Vi(a)&&o.value===a.value;return e.some(o=>n(o.key,A))}var xJ="All mapping items must start at the same column";function _J({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=o?.nodeClass??Ha,r=new a(A.schema);A.atRoot&&(A.atRoot=!1);let s=i.offset,l=null;for(let g of i.items){let{start:C,key:I,sep:d,value:h}=g,E=a0(C,{indicator:"explicit-key-ind",next:I??d?.[0],offset:s,onError:n,parentIndent:i.indent,startOnNewline:!0}),f=!E.found;if(f){if(I&&(I.type==="block-seq"?n(s,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in I&&I.indent!==i.indent&&n(s,"BAD_INDENT",xJ)),!E.anchor&&!E.tag&&!d){l=E.end,E.comment&&(r.comment?r.comment+=` +`+E.comment:r.comment=E.comment);continue}(E.newlineAfterProp||D2(I))&&n(I??C[C.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else E.found?.indent!==i.indent&&n(s,"BAD_INDENT",xJ);A.atKey=!0;let m=E.end,v=I?t(A,I,E,n):e(A,m,C,null,E,n);A.schema.compat&&$u(i.indent,I,n),A.atKey=!1,O6(A,r.items,v)&&n(m,"DUPLICATE_KEY","Map keys must be unique");let k=a0(d??[],{indicator:"map-value-ind",next:h,offset:v.range[2],onError:n,parentIndent:i.indent,startOnNewline:!I||I.type==="block-scalar"});if(s=k.end,k.found){f&&(h?.type==="block-map"&&!k.hasNewline&&n(s,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),A.options.strict&&E.startt&&(t.type==="block-map"||t.type==="block-seq");function NJ({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=i.start.source==="{",r=a?"flow map":"flow sequence",s=o?.nodeClass??(a?Ha:Is),l=new s(A.schema);l.flow=!0;let g=A.atRoot;g&&(A.atRoot=!1),A.atKey&&(A.atKey=!1);let C=i.offset+i.start.source.length;for(let f=0;f0){let f=r0(h,E,A.options.strict,n);f.comment&&(l.comment?l.comment+=` +`+f.comment:l.comment=f.comment),l.range=[i.offset,E,f.offset]}else l.range=[i.offset,E,E];return l}function XM(t,e,A,i,n,o){let a=A.type==="block-map"?_J(t,e,A,i,o):A.type==="block-seq"?RJ(t,e,A,i,o):NJ(t,e,A,i,o),r=a.constructor;return n==="!"||n===r.tagName?(a.tag=r.tagName,a):(n&&(a.tag=n),a)}function FJ(t,e,A,i,n){let o=i.tag,a=o?e.directives.tagName(o.source,I=>n(o,"TAG_RESOLVE_FAILED",I)):null;if(A.type==="block-seq"){let{anchor:I,newlineAfterProp:d}=i,h=I&&o?I.offset>o.offset?I:o:I??o;h&&(!d||d.offsetI.tag===a&&I.collection===r);if(!s){let I=e.schema.knownTags[a];if(I?.collection===r)e.schema.tags.push(Object.assign({},I,{default:!1})),s=I;else return I?n(o,"BAD_COLLECTION_TYPE",`${I.tag} used for ${r} collection, but expects ${I.collection??"scalar"}`,!0):n(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${a}`,!0),XM(t,e,A,n,a)}let l=XM(t,e,A,n,a,s),g=s.resolve?.(l,I=>n(o,"TAG_RESOLVE_FAILED",I),e.options)??l,C=xn(g)?g:new Pt(g);return C.range=l.range,C.tag=a,s?.format&&(C.format=s.format),C}function $M(t,e,A){let i=e.offset,n=ScA(e,t.options.strict,A);if(!n)return{value:"",type:null,comment:"",range:[i,i,i]};let o=n.mode===">"?Pt.BLOCK_FOLDED:Pt.BLOCK_LITERAL,a=e.source?kcA(e.source):[],r=a.length;for(let E=a.length-1;E>=0;--E){let f=a[E][1];if(f===""||f==="\r")r=E;else break}if(r===0){let E=n.chomp==="+"&&a.length>0?` +`.repeat(Math.max(1,a.length-1)):"",f=i+n.length;return e.source&&(f+=e.source.length),{value:E,type:o,comment:n.comment,range:[i,f,f]}}let s=e.indent+n.indent,l=e.offset+n.length,g=0;for(let E=0;Es&&(s=f.length);else{f.length=r;--E)a[E][0].length>s&&(r=E+1);let C="",I="",d=!1;for(let E=0;Es||m[0]===" "?(I===" "?I=` +`:!d&&I===` +`&&(I=` + +`),C+=I+f.slice(s)+m,I=` +`,d=!0):m===""?I===` +`?C+=` +`:I=` +`:(C+=I+m,I=" ",d=!1)}switch(n.chomp){case"-":break;case"+":for(let E=r;EA(i+I,d,h);switch(n){case"scalar":r=Pt.PLAIN,s=xcA(o,l);break;case"single-quoted-scalar":r=Pt.QUOTE_SINGLE,s=_cA(o,l);break;case"double-quoted-scalar":r=Pt.QUOTE_DOUBLE,s=RcA(o,l);break;default:return A(t,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[i,i+o.length,i+o.length]}}let g=i+o.length,C=r0(a,g,e,A);return{value:s,type:r,comment:C.comment,range:[i,g,C.offset]}}function xcA(t,e){let A="";switch(t[0]){case" ":A="a tab character";break;case",":A="flow indicator character ,";break;case"%":A="directive indicator character %";break;case"|":case">":{A=`block scalar indicator ${t[0]}`;break}case"@":case"`":{A=`reserved character ${t[0]}`;break}}return A&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${A}`),LJ(t)}function _cA(t,e){return(t[t.length-1]!=="'"||t.length===1)&&e(t.length,"MISSING_CHAR","Missing closing 'quote"),LJ(t.slice(1,-1)).replace(/''/g,"'")}function LJ(t){let e,A;try{e=new RegExp(`(.*?)(?o?t.slice(o,i+1):n)}else A+=n}return(t[t.length-1]!=='"'||t.length===1)&&e(t.length,"MISSING_CHAR",'Missing closing "quote'),A}function NcA(t,e){let A="",i=t[e+1];for(;(i===" "||i===" "||i===` +`||i==="\r")&&!(i==="\r"&&t[e+2]!==` +`);)i===` +`&&(A+=` +`),e+=1,i=t[e+1];return A||(A=" "),{fold:A,offset:e}}var FcA={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:` +`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function LcA(t,e,A,i){let n=t.substr(e,A),a=n.length===A&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(a)){let r=t.substr(e-2,A+2);return i(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${r}`),r}return String.fromCodePoint(a)}function e9(t,e,A,i){let{value:n,type:o,comment:a,range:r}=e.type==="block-scalar"?$M(t,e,i):A9(e,t.options.strict,i),s=A?t.directives.tagName(A.source,C=>i(A,"TAG_RESOLVE_FAILED",C)):null,l;t.options.stringKeys&&t.atKey?l=t.schema[Sl]:s?l=GcA(t.schema,n,s,A,i):e.type==="scalar"?l=KcA(t,n,e,i):l=t.schema[Sl];let g;try{let C=l.resolve(n,I=>i(A??e,"TAG_RESOLVE_FAILED",I),t.options);g=Vi(C)?C:new Pt(C)}catch(C){let I=C instanceof Error?C.message:String(C);i(A??e,"TAG_RESOLVE_FAILED",I),g=new Pt(n)}return g.range=r,g.source=n,o&&(g.type=o),s&&(g.tag=s),l.format&&(g.format=l.format),a&&(g.comment=a),g}function GcA(t,e,A,i,n){if(A==="!")return t[Sl];let o=[];for(let r of t.tags)if(!r.collection&&r.tag===A)if(r.default&&r.test)o.push(r);else return r;for(let r of o)if(r.test?.test(e))return r;let a=t.knownTags[A];return a&&!a.collection?(t.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${A}`,A!=="tag:yaml.org,2002:str"),t[Sl])}function KcA({atKey:t,directives:e,schema:A},i,n,o){let a=A.tags.find(r=>(r.default===!0||t&&r.default==="key")&&r.test?.test(i))||A[Sl];if(A.compat){let r=A.compat.find(s=>s.default&&s.test?.test(i))??A[Sl];if(a.tag!==r.tag){let s=e.tagString(a.tag),l=e.tagString(r.tag),g=`Value may be parsed as either ${s} or ${l}`;o(n,"TAG_RESOLVE_FAILED",g,!0)}}return a}function GJ(t,e,A){if(e){A??(A=e.length);for(let i=A-1;i>=0;--i){let n=e[i];switch(n.type){case"space":case"comment":case"newline":t-=n.source.length;continue}for(n=e[++i];n?.type==="space";)t+=n.source.length,n=e[++i];break}}return t}var UcA={composeNode:t9,composeEmptyNode:Y6};function t9(t,e,A,i){let n=t.atKey,{spaceBefore:o,comment:a,anchor:r,tag:s}=A,l,g=!0;switch(e.type){case"alias":l=TcA(t,e,i),(r||s)&&i(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":l=e9(t,e,s,i),r&&(l.anchor=r.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":l=FJ(UcA,t,e,A,i),r&&(l.anchor=r.source.substring(1));break;default:{let C=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;i(e,"UNEXPECTED_TOKEN",C),l=Y6(t,e.offset,void 0,null,A,i),g=!1}}return r&&l.anchor===""&&i(r,"BAD_ALIAS","Anchor cannot be an empty string"),n&&t.options.stringKeys&&(!Vi(l)||typeof l.value!="string"||l.tag&&l.tag!=="tag:yaml.org,2002:str")&&i(s??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),o&&(l.spaceBefore=!0),a&&(e.type==="scalar"&&e.source===""?l.comment=a:l.commentBefore=a),t.options.keepSourceTokens&&g&&(l.srcToken=e),l}function Y6(t,e,A,i,{spaceBefore:n,comment:o,anchor:a,tag:r,end:s},l){let g={type:"scalar",offset:GJ(e,A,i),indent:-1,source:""},C=e9(t,g,r,l);return a&&(C.anchor=a.source.substring(1),C.anchor===""&&l(a,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(C.spaceBefore=!0),o&&(C.comment=o,C.range[2]=s),C}function TcA({options:t},{offset:e,source:A,end:i},n){let o=new eC(A.substring(1));o.source===""&&n(e,"BAD_ALIAS","Alias cannot be an empty string"),o.source.endsWith(":")&&n(e+A.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let a=e+A.length,r=r0(i,a,t.strict,n);return o.range=[e,a,r.offset],r.comment&&(o.comment=r.comment),o}function KJ(t,e,{offset:A,start:i,value:n,end:o},a){let r=Object.assign({_directives:e},t),s=new nC(void 0,r),l={atKey:!1,atRoot:!0,directives:s.directives,options:s.options,schema:s.schema},g=a0(i,{indicator:"doc-start",next:n??o?.[0],offset:A,onError:a,parentIndent:0,startOnNewline:!0});g.found&&(s.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!g.hasNewline&&a(g.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),s.contents=n?t9(l,n,g,a):Y6(l,g.end,i,null,g,a);let C=s.contents.range[2],I=r0(o,C,!1,a);return I.comment&&(s.comment=I.comment),s.range=[A,C,I.offset],s}function A4(t){if(typeof t=="number")return[t,t+1];if(Array.isArray(t))return t.length===2?t:[t[0],t[1]];let{offset:e,source:A}=t;return[e,e+(typeof A=="string"?A.length:1)]}function UJ(t){let e="",A=!1,i=!1;for(let n=0;n{let a=A4(A);o?this.warnings.push(new Xu(a,i,n)):this.errors.push(new $g(a,i,n))},this.directives=new VB({version:e.version||"1.2"}),this.options=e}decorate(e,A){let{comment:i,afterEmptyLine:n}=UJ(this.prelude);if(i){let o=e.contents;if(A)e.comment=e.comment?`${e.comment} +${i}`:i;else if(n||e.directives.docStart||!o)e.commentBefore=i;else if(go(o)&&!o.flow&&o.items.length>0){let a=o.items[0];vn(a)&&(a=a.key);let r=a.commentBefore;a.commentBefore=r?`${i} +${r}`:i}else{let a=o.commentBefore;o.commentBefore=a?`${i} +${a}`:i}}A?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:UJ(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,A=!1,i=-1){for(let n of e)yield*Ce(this.next(n));yield*Ce(this.end(A,i))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(A,i,n)=>{let o=A4(e);o[0]+=A,this.onError(o,"BAD_DIRECTIVE",i,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let A=KJ(this.options,this.directives,e,this.onError);this.atDirectives&&!A.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(A,!1),this.doc&&(yield this.doc),this.doc=A,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let A=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,i=new $g(A4(e),"UNEXPECTED_TOKEN",A);this.atDirectives||!this.doc?this.errors.push(i):this.doc.errors.push(i);break}case"doc-end":{if(!this.doc){let i="Unexpected doc-end without preceding document";this.errors.push(new $g(A4(e),"UNEXPECTED_TOKEN",i));break}this.doc.directives.docEnd=!0;let A=r0(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),A.comment){let i=this.doc.comment;this.doc.comment=i?`${i} +${A.comment}`:A.comment}this.doc.range[2]=A.offset;break}default:this.errors.push(new $g(A4(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,A=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let i=Object.assign({_directives:this.directives},this.options),n=new nC(void 0,i);this.atDirectives&&this.onError(A,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,A,A],this.decorate(n,!1),yield n}}};var i9=Symbol("break visit"),JcA=Symbol("skip children"),TJ=Symbol("remove item");function k1(t,e){"type"in t&&t.type==="document"&&(t={start:t.start,value:t.value}),JJ(Object.freeze([]),t,e)}k1.BREAK=i9;k1.SKIP=JcA;k1.REMOVE=TJ;k1.itemAtPath=(t,e)=>{let A=t;for(let[i,n]of e){let o=A?.[i];if(o&&"items"in o)A=o.items[n];else return}return A};k1.parentCollection=(t,e)=>{let A=k1.itemAtPath(t,e.slice(0,-1)),i=e[e.length-1][0],n=A?.[i];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function JJ(t,e,A){let i=A(e,t);if(typeof i=="symbol")return i;for(let n of["key","value"]){let o=e[n];if(o&&"items"in o){for(let a=0;a":return"block-scalar-header"}return null}function Ac(t){switch(t){case void 0:case" ":case` +`:case"\r":case" ":return!0;default:return!1}}var YJ=new Set("0123456789ABCDEFabcdef"),YcA=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),z6=new Set(",[]{}"),HcA=new Set(` ,[]{} +\r `),r9=t=>!t||HcA.has(t),t4=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,A=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!A;let i=this.next??"stream";for(;i&&(A||this.hasChars(1));)i=yield*Ce(this.parseNext(i))}atLineEnd(){let e=this.pos,A=this.buffer[e];for(;A===" "||A===" ";)A=this.buffer[++e];return!A||A==="#"||A===` +`?!0:A==="\r"?this.buffer[e+1]===` +`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let A=this.buffer[e];if(this.indentNext>0){let i=0;for(;A===" ";)A=this.buffer[++i+e];if(A==="\r"){let n=this.buffer[i+e+1];if(n===` +`||!n&&!this.atEnd)return e+i+1}return A===` +`||i>=this.indentNext||!A&&!this.atEnd?e+i:-1}if(A==="-"||A==="."){let i=this.buffer.substr(e,3);if((i==="---"||i==="...")&&Ac(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!Ac(this.charAt(1))&&(this.indentNext=this.indentValue),yield*Ce(this.parseBlockStart())}*parseBlockStart(){let[e,A]=this.peek(2);if(!A&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Ac(A)){let i=(yield*Ce(this.pushCount(1)))+(yield*Ce(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=i,yield*Ce(this.parseBlockStart())}return"doc"}*parseDocument(){yield*Ce(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let A=yield*Ce(this.pushIndicators());switch(e[A]){case"#":yield*Ce(this.pushCount(e.length-A));case void 0:return yield*Ce(this.pushNewline()),yield*Ce(this.parseLineStart());case"{":case"[":return yield*Ce(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*Ce(this.pushCount(1)),"doc";case"*":return yield*Ce(this.pushUntil(r9)),"doc";case'"':case"'":return yield*Ce(this.parseQuotedScalar());case"|":case">":return A+=yield*Ce(this.parseBlockScalarHeader()),A+=yield*Ce(this.pushSpaces(!0)),yield*Ce(this.pushCount(e.length-A)),yield*Ce(this.pushNewline()),yield*Ce(this.parseBlockScalar());default:return yield*Ce(this.parsePlainScalar())}}*parseFlowCollection(){let e,A,i=-1;do e=yield*Ce(this.pushNewline()),e>0?(A=yield*Ce(this.pushSpaces(!1)),this.indentValue=i=A):A=0,A+=yield*Ce(this.pushSpaces(!0));while(e+A>0);let n=this.getLine();if(n===null)return this.setNext("flow");if((i!==-1&&i"0"&&A<="9")this.blockScalarIndent=Number(A)-1;else if(A!=="-")break}return yield*Ce(this.pushUntil(A=>Ac(A)||A==="#"))}*parseBlockScalar(){let e=this.pos-1,A=0,i;A:for(let o=this.pos;i=this.buffer[o];++o)switch(i){case" ":A+=1;break;case` +`:e=o,A=0;break;case"\r":{let a=this.buffer[o+1];if(!a&&!this.atEnd)return this.setNext("block-scalar");if(a===` +`)break}default:break A}if(!i&&!this.atEnd)return this.setNext("block-scalar");if(A>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=A:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let o=this.continueScalar(e+1);if(o===-1)break;e=this.buffer.indexOf(` +`,o)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let n=e+1;for(i=this.buffer[n];i===" ";)i=this.buffer[++n];if(i===" "){for(;i===" "||i===" "||i==="\r"||i===` +`;)i=this.buffer[++n];e=n-1}else if(!this.blockScalarKeep)do{let o=e-1,a=this.buffer[o];a==="\r"&&(a=this.buffer[--o]);let r=o;for(;a===" ";)a=this.buffer[--o];if(a===` +`&&o>=this.pos&&o+1+A>r)e=o;else break}while(!0);return yield H6,yield*Ce(this.pushToIndex(e+1,!0)),yield*Ce(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,A=this.pos-1,i=this.pos-1,n;for(;n=this.buffer[++i];)if(n===":"){let o=this.buffer[i+1];if(Ac(o)||e&&z6.has(o))break;A=i}else if(Ac(n)){let o=this.buffer[i+1];if(n==="\r"&&(o===` +`?(i+=1,n=` +`,o=this.buffer[i+1]):A=i),o==="#"||e&&z6.has(o))break;if(n===` +`){let a=this.continueScalar(i+1);if(a===-1)break;i=Math.max(i,a-2)}}else{if(e&&z6.has(n))break;A=i}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield H6,yield*Ce(this.pushToIndex(A+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,A){let i=this.buffer.slice(this.pos,e);return i?(yield i,this.pos+=i.length,i.length):(A&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*Ce(this.pushTag()))+(yield*Ce(this.pushSpaces(!0)))+(yield*Ce(this.pushIndicators()));case"&":return(yield*Ce(this.pushUntil(r9)))+(yield*Ce(this.pushSpaces(!0)))+(yield*Ce(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,A=this.charAt(1);if(Ac(A)||e&&z6.has(A))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*Ce(this.pushCount(1)))+(yield*Ce(this.pushSpaces(!0)))+(yield*Ce(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,A=this.buffer[e];for(;!Ac(A)&&A!==">";)A=this.buffer[++e];return yield*Ce(this.pushToIndex(A===">"?e+1:e,!1))}else{let e=this.pos+1,A=this.buffer[e];for(;A;)if(YcA.has(A))A=this.buffer[++e];else if(A==="%"&&YJ.has(this.buffer[e+1])&&YJ.has(this.buffer[e+2]))A=this.buffer[e+=3];else break;return yield*Ce(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===` +`?yield*Ce(this.pushCount(1)):e==="\r"&&this.charAt(1)===` +`?yield*Ce(this.pushCount(2)):0}*pushSpaces(e){let A=this.pos-1,i;do i=this.buffer[++A];while(i===" "||e&&i===" ");let n=A-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=A),n}*pushUntil(e){let A=this.pos,i=this.buffer[A];for(;!e(i);)i=this.buffer[++A];return yield*Ce(this.pushToIndex(A,!1))}};var i4=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let A=0,i=this.lineStarts.length;for(;A>1;this.lineStarts[o]=0;)switch(t[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break A}for(;t[++e]?.type==="space";);return t.splice(e,t.length)}function zJ(t){if(t.start.type==="flow-seq-start")for(let e of t.items)e.sep&&!e.value&&!y2(e.start,"explicit-key-ind")&&!y2(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,PJ(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var n4=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new t4,this.onNewLine=e}*parse(e,A=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let i of this.lexer.lex(e,A))yield*Ce(this.next(i));A||(yield*Ce(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*Ce(this.step()),this.offset+=e.length;return}let A=OJ(e);if(A)if(A==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=A,yield*Ce(this.step()),A){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let i=`Not a YAML token: ${e}`;yield*Ce(this.pop({type:"error",offset:this.offset,message:i,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*Ce(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*Ce(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*Ce(this.stream());switch(e.type){case"document":return yield*Ce(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*Ce(this.scalar(e));case"block-scalar":return yield*Ce(this.blockScalar(e));case"block-map":return yield*Ce(this.blockMap(e));case"block-seq":return yield*Ce(this.blockSequence(e));case"flow-collection":return yield*Ce(this.flowCollection(e));case"doc-end":return yield*Ce(this.documentEnd(e))}yield*Ce(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let A=e??this.stack.pop();if(!A)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield A;else{let i=this.peek(1);switch(A.type==="block-scalar"?A.indent="indent"in i?i.indent:0:A.type==="flow-collection"&&i.type==="document"&&(A.indent=0),A.type==="flow-collection"&&zJ(A),i.type){case"document":i.value=A;break;case"block-scalar":i.props.push(A);break;case"block-map":{let n=i.items[i.items.length-1];if(n.value){i.items.push({start:[],key:A,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=A;else{Object.assign(n,{key:A,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=i.items[i.items.length-1];n.value?i.items.push({start:[],value:A}):n.value=A;break}case"flow-collection":{let n=i.items[i.items.length-1];!n||n.value?i.items.push({start:[],key:A,sep:[]}):n.sep?n.value=A:Object.assign(n,{key:A,sep:[]});return}default:yield*Ce(this.pop()),yield*Ce(this.pop(A))}if((i.type==="document"||i.type==="block-map"||i.type==="block-seq")&&(A.type==="block-map"||A.type==="block-seq")){let n=A.items[A.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&HJ(n.start)===-1&&(A.indent===0||n.start.every(o=>o.type!=="comment"||o.indent=e.indent){let i=!this.onKeyLine&&this.indent===e.indent,n=i&&(A.sep||A.explicitKey)&&this.type!=="seq-item-ind",o=[];if(n&&A.sep&&!A.value){let a=[];for(let r=0;re.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=A.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":n||A.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"explicit-key-ind":!A.sep&&!A.explicitKey?(A.start.push(this.sourceToken),A.explicitKey=!0):n||A.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(A.explicitKey)if(A.sep)if(A.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(y2(A.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(PJ(A.key)&&!y2(A.sep,"newline")){let a=tE(A.start),r=A.key,s=A.sep;s.push(this.sourceToken),delete A.key,delete A.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:r,sep:s}]})}else o.length>0?A.sep=A.sep.concat(o,this.sourceToken):A.sep.push(this.sourceToken);else if(y2(A.start,"newline"))Object.assign(A,{key:null,sep:[this.sourceToken]});else{let a=tE(A.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else A.sep?A.value||n?e.items.push({start:o,key:null,sep:[this.sourceToken]}):y2(A.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);n||A.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):A.sep?this.stack.push(a):(Object.assign(A,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){if(a.type==="block-seq"){if(!A.explicitKey&&A.sep&&!y2(A.sep,"newline")){yield*Ce(this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source}));return}}else i&&e.items.push({start:o});this.stack.push(a);return}}}}yield*Ce(this.pop()),yield*Ce(this.step())}*blockSequence(e){let A=e.items[e.items.length-1];switch(this.type){case"newline":if(A.value){let i="end"in A.value?A.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else A.start.push(this.sourceToken);return;case"space":case"comment":if(A.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(A.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,A.start),n.push(this.sourceToken),e.items.pop();return}}A.start.push(this.sourceToken)}return;case"anchor":case"tag":if(A.value||this.indent<=e.indent)break;A.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;A.value||y2(A.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return}if(this.indent>e.indent){let i=this.startBlockValue(e);if(i){this.stack.push(i);return}}yield*Ce(this.pop()),yield*Ce(this.step())}*flowCollection(e){let A=e.items[e.items.length-1];if(this.type==="flow-error-end"){let i;do yield*Ce(this.pop()),i=this.peek(1);while(i?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!A||A.sep?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return;case"map-value-ind":!A||A.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!A||A.value?e.items.push({start:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);!A||A.value?e.items.push({start:[],key:n,sep:[]}):A.sep?this.stack.push(n):Object.assign(A,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let i=this.startBlockValue(e);i?this.stack.push(i):(yield*Ce(this.pop()),yield*Ce(this.step()))}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===e.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*Ce(this.pop()),yield*Ce(this.step());else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=P6(i),o=tE(n);zJ(e);let a=e.end.splice(1,e.end.length);a.push(this.sourceToken);let r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:o,key:e,sep:a}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*Ce(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let A=this.source.indexOf(` +`)+1;for(;A!==0;)this.onNewLine(this.offset+A),A=this.source.indexOf(` +`,A)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let A=P6(e),i=tE(A);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let A=P6(e),i=tE(A);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,A){return this.type!=="comment"||this.indent<=A?!1:e.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*Ce(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*Ce(this.pop()),yield*Ce(this.step());break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*Ce(this.pop()))}}};function zcA(t){let e=t.prettyErrors!==!1;return{lineCounter:t.lineCounter||e&&new i4||null,prettyErrors:e}}function jJ(t,e={}){let{lineCounter:A,prettyErrors:i}=zcA(e),n=new n4(A?.addNewLine),o=new e4(e),a=null;for(let r of o.compose(n.parse(t),!0,t.length))if(!a)a=r;else if(a.options.logLevel!=="silent"){a.errors.push(new $g(r.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&A&&(a.errors.forEach(VM(t,A)),a.warnings.forEach(VM(t,A))),a}function iE(t,e,A){let i;typeof e=="function"?i=e:A===void 0&&e&&typeof e=="object"&&(A=e);let n=jJ(t,A);if(!n)return null;if(n.warnings.forEach(o=>D6(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:i},A))}function s9(t,e,A){let i=null;if(typeof e=="function"||Array.isArray(e)?i=e:A===void 0&&e&&(A=e),typeof A=="string"&&(A=A.length),typeof A=="number"){let n=Math.round(A);A=n<1?void 0:n>8?{indent:8}:{indent:n}}if(t===void 0){let{keepUndefined:n}=A??e??{};if(!n)return}return jg(t)&&!i?t.toString(A):new nC(t,i,A).toString(A)}var s0=class t{static generateYamlFile(e,A,i,n,o=new Set){if(o.has(e.name))return;o.add(e.name);let a=e.isRoot?"root_agent.yaml":`${e.name}.yaml`,r=`${i}/${a}`,s=e.sub_agents?e.sub_agents.map(h=>({config_path:`./${h.name}.yaml`})):[],l={name:e.name,model:e.model,agent_class:e.agent_class,description:e.description||"",instruction:e.instruction,sub_agents:s,tools:t.buildToolsConfig(e.tools,n)};(!e.description||e.description.trim()==="")&&delete l.description,e.agent_class!="LlmAgent"&&(delete l.model,delete l.instruction,delete l.tools),e.agent_class==="LoopAgent"&&e.max_iterations&&(l.max_iterations=e.max_iterations);let g=t.buildCallbacksConfig(e.callbacks);Object.keys(g).length>0&&Object.assign(l,g);let C=s9(l),I=new Blob([C],{type:"application/x-yaml"}),d=new File([I],r,{type:"application/x-yaml"});A.append("files",d);for(let h of e.sub_agents??[])t.generateYamlFile(h,A,i,n,o);if(e.tools){for(let h of e.tools)if(h.toolType==="Agent Tool"){let E=h.toolAgentName||h.name;if(!E||E==="undefined"||E.trim()==="")continue;let f=n.get(E);f&&t.generateYamlFile(f,A,i,n,o)}}}static buildToolsConfig(e,A){return!e||e.length===0?[]:e.map(i=>{let n={name:i.name};if(i.toolType==="Agent Tool"){n.name="AgentTool";let o=i.toolAgentName||i.name;if(!o||o==="undefined"||o.trim()==="")return null;let a=A.get(o);return n.args={agent:{config_path:`./${o}.yaml`},skip_summarization:a?.skip_summarization||!1},n}return i.args&&Object.keys(i.args).some(a=>{let r=i.args[a];return r!=null&&r!==""})&&(n.args=i.args),n}).filter(i=>i!==null)}static buildCallbacksConfig(e){if(!e||e.length===0)return{};let A={};return e.forEach(i=>{let n=`${i.type}_callbacks`;A[n]||(A[n]=[]),A[n].push({name:i.name})}),A}};function jcA(t,e){t&1&&(B(0,"mat-hint",3),y(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),Q())}var j6=class t{constructor(e,A){this.data=e;this.dialogRef=A}newAppName="";agentService=w($s);_snackBar=w(h2);router=w(ls);isNameValid(){let e=this.newAppName.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}createNewApp(){let e=this.newAppName.trim();if(!this.isNameValid()){this._snackBar.open("App name must start with a letter or underscore and can only contain letters, digits, and underscores.","OK");return}if(this.data.existingAppNames.includes(e)){this._snackBar.open("App name already exists. Please choose a different name.","OK");return}let A={agent_class:"LlmAgent",instruction:"You are the root agent that coordinates other agents.",isRoot:!0,model:"gemini-2.5-flash",name:e,sub_agents:[],tools:[]},i=new FormData,n=new Map;s0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o?(this.router.navigate(["/"],{queryParams:{app:e,mode:"builder"}}).then(()=>{window.location.reload()}),this.dialogRef.close(!0)):this._snackBar.open("Something went wrong, please try again","OK")})}static \u0275fac=function(A){return new(A||t)(ct(qo),ct(lo))};static \u0275cmp=SA({type:t,selectors:[["app-add-item-dialog"]],decls:10,vars:3,consts:[["mat-dialog-title","",1,"new-app-title"],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],[1,"validation-hint"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click","disabled"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1,"Create a new app"),Q(),B(2,"mat-form-field",1)(3,"input",2),Di("ngModelChange",function(o){return di(i.newAppName,o)||(i.newAppName=o),o}),U("keydown.enter",function(){return i.createNewApp()}),Q(),O(4,jcA,2,0,"mat-hint",3),Q(),B(5,"mat-dialog-actions",4)(6,"button",5),y(7,"Cancel"),Q(),B(8,"button",6),U("click",function(){return i.createNewApp()}),y(9," Create "),Q()()),A&2&&(u(3),wi("ngModel",i.newAppName),u(),Y(i.isNameValid()?-1:4),u(4),H("disabled",!i.isNameValid()))},dependencies:[fa,Ko,ua,ln,Dn,yn,ko,pa,pi,B2,s1],styles:[".new-app-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.validation-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mdc-dialog-supporting-text-color)}"]})};function nE(t,e,A){let i=typeof t=="string"?document.querySelector(t):t;if(!i)return;i.querySelectorAll("g.node").forEach(o=>{let a=o,s=o.querySelector("title")?.textContent||"";s==="__LEGEND__"||s==="__START__"||s==="__END__"||a.classList.contains("unvisited-node")||A&&!A.has(s)||(a.style.cursor="pointer",a.addEventListener("mouseenter",()=>{let l=o.querySelector("ellipse, polygon, path, rect");l&&(l.style.stroke="#42A5F5",l.style.strokeWidth="3")}),a.addEventListener("mouseleave",()=>{let l=o.querySelector("ellipse, polygon, path, rect");l&&(l.style.stroke="",l.style.strokeWidth="")}),e&&a.addEventListener("click",l=>{let C=o.querySelector("title")?.textContent||"";C&&e(C,l)}))})}function VJ(t,e,A={}){let{ySpacing:i=200,xSpacing:n=350,startX:o=400,startY:a=100}=A,r=t.map(m=>m.name||m.agent?.name||""),s=new Map,l=new Map;r.forEach(m=>{s.set(m,[]),l.set(m,0)}),e.forEach(m=>{let v=m.from_node?.name||m.from_node?.agent?.name,k=m.to_node?.name||m.to_node?.agent?.name;v&&k&&(s.get(v)?.push(k),l.set(k,(l.get(k)||0)+1))});let g=new Map,C=[],I=new Map(l),d=new Set;for(r.forEach(m=>{I.get(m)===0&&(C.push(m),g.set(m,0),d.add(m))});C.length>0;){let m=C.shift(),v=g.get(m)||0;s.get(m)?.forEach(k=>{let S=g.get(k);if(S!==void 0&&S<=v)return;let b=v+1;S===void 0&&g.set(k,b);let x=I.get(k)||0;I.set(k,x-1),I.get(k)===0&&!d.has(k)&&(C.push(k),d.add(k))})}let h=Math.max(...Array.from(g.values()),0);r.forEach(m=>{g.has(m)||(g.set(m,h+1),h++)});let E=new Map;g.forEach((m,v)=>{E.has(m)||E.set(m,[]),E.get(m)?.push(v)});let f=new Map;return t.forEach(m=>{let v=m.name||m.agent?.name||"",k=g.get(v)||0,S=E.get(k)||[],b=S.indexOf(v),x=S.length,F=(b-(x-1)/2)*n;f.set(v,{x:o+F,y:a+k*i})}),{levels:g,nodesByLevel:E,positions:f}}function ec(t,e=""){return t?.name||t?.agent?.name||e}function WJ(t){switch(t){case"start":return"play_arrow";case"function":return"code";case"tool":return"build";case"join":return"merge";default:return"smart_toy"}}function ZJ(t){switch(t){case"start":return"Start";case"function":return"Function";case"tool":return"Tool";case"join":return"Join";default:return"Agent"}}var q6={ySpacing:200,xSpacing:350,startX:400,startY:100};function XJ(t){return t.map(e=>e.name).join("/")}function oC(t){return!!(t.graph||t.nodes||t.sub_agents&&t.sub_agents.length>0)}function l9(t){return t.graph?.nodes?t.graph.nodes:t.nodes?t.nodes:[]}function oE(t,e){if(t.nodes){let A=t.nodes.find(i=>i.name===e);if(A)return A}if(t.graph?.nodes){let A=t.graph.nodes.find(i=>i.name===e);if(A)return A}if(t.sub_agents){let A=t.sub_agents.find(i=>i.name===e);if(A)return A}return null}function $J(t,e){let A=e.split("/"),i=[{name:t.name,data:t}],n=t;for(let o=1;oec(l)===a);if(s)i.push({name:a,data:s}),n=s;else{console.warn(`Could not find node '${a}' in path '${e}'`);break}}return i}function qcA(t,e){t&1&&(B(0,"mat-icon",20),y(1,"chevron_right"),Q())}function VcA(t,e){if(t&1){let A=hA();O(0,qcA,2,0,"mat-icon",20),B(1,"button",21),U("click",function(){let n=T(A).$index,o=p(2);return J(o.navigateToLevel(n))}),y(2),Q()}if(t&2){let A=e.$implicit,i=e.$index,n=p(2);Y(i>0?0:-1),u(),RA("active",i===n.breadcrumbs().length-1),H("disabled",i===n.breadcrumbs().length-1),u(),ue(" ",A," ")}}function WcA(t,e){if(t&1&&(B(0,"div",3)(1,"span"),y(2,"Agent Structure:"),Q(),B(3,"button",19),y(4),Q(),B(5,"mat-icon",20),y(6,"chevron_right"),Q(),Je(7,VcA,3,5,null,null,ws),Q()),t&2){let A=p();u(4),lA(A.appName),u(3),Oe(A.breadcrumbs())}}function ZcA(t,e){t&1&&(B(0,"div",15),QA(1,"mat-spinner",22),B(2,"p"),y(3,"Loading agent structure..."),Q()())}function XcA(t,e){if(t&1&&(B(0,"div",16)(1,"mat-icon",23),y(2,"error_outline"),Q(),B(3,"p",24),y(4),Q()()),t&2){let A=p();u(4),lA(A.errorMessage())}}function $cA(t,e){if(t&1){let A=hA();B(0,"div",25),U("wheel",function(n){T(A);let o=p();return J(o.onWheel(n))})("mousedown",function(n){T(A);let o=p();return J(o.onMouseDown(n))})("mousemove",function(n){T(A);let o=p();return J(o.onMouseMove(n))})("mouseup",function(){T(A);let n=p();return J(n.onMouseUp())})("mouseleave",function(){T(A);let n=p();return J(n.onMouseUp())}),Q()}if(t&2){let A=p();H("innerHTML",A.renderedGraph(),Kc)}}function A0A(t,e){t&1&&(B(0,"div",18)(1,"mat-icon",26),y(2,"account_tree"),Q(),B(3,"p"),y(4,"Agent structure graph not available."),Q()())}var V6=class t{appName;preloadedAppData;preloadedLightGraphSvg;preloadedDarkGraphSvg;startPath;close=new LA;agentService=w($s);graphService=w(OB);sanitizer=w(Cs);themeService=w(eg);renderedGraph=bA(null);isLoading=bA(!0);errorMessage=bA(null);fullAppData=null;navigationStack=[];breadcrumbs=bA([]);isPanning=!1;wasDragging=!1;dragStartX=0;dragStartY=0;startPanX=0;startPanY=0;scale=1;translateX=0;translateY=0;lastMousedownTarget=null;onOverlayMouseDown(e){this.lastMousedownTarget=e.target}onBackdropClick(e){if(this.wasDragging||this.lastMousedownTarget&&(this.lastMousedownTarget.closest("svg")||this.lastMousedownTarget.closest(".overlay-header")||this.lastMousedownTarget.closest(".loading-container")||this.lastMousedownTarget.closest(".error-container")||this.lastMousedownTarget.closest(".no-graph-container")))return;let A=e.target;!A.closest("svg")&&!A.closest(".overlay-header")&&!A.closest(".loading-container")&&!A.closest(".error-container")&&!A.closest(".no-graph-container")&&this.close.emit()}ngOnInit(){this.loadAgentGraph()}loadAgentGraph(){if(this.isLoading.set(!0),this.errorMessage.set(null),this.renderedGraph.set(null),this.preloadedAppData){if(this.fullAppData=this.preloadedAppData,this.navigationStack=[{name:this.fullAppData.root_agent?.name||this.appName,data:this.fullAppData.root_agent}],this.startPath){let e=this.fullAppData.root_agent,A=this.startPath.split("/");for(let i of A){if(!i)continue;let n=oE(e,i);if(n)this.navigationStack.push({name:i,data:n}),e=n;else break}}this.updateBreadcrumbs(),this.renderCurrentLevel();return}this.agentService.getAppInfo(this.appName).subscribe({next:e=>{if(this.fullAppData=e,this.navigationStack=[{name:e.root_agent?.name||this.appName,data:e.root_agent}],this.startPath){let A=this.fullAppData.root_agent,i=this.startPath.split("/");for(let n of i){if(!n)continue;let o=oE(A,n);if(o)this.navigationStack.push({name:n,data:o}),A=o;else break}}this.updateBreadcrumbs(),this.renderCurrentLevel()},error:e=>{console.error("Error loading app data:",e),this.errorMessage.set("Agent structure graph not available."),this.isLoading.set(!1)}})}renderCurrentLevel(){let e=this.themeService.currentTheme()==="dark",A=this.getCurrentPath(),i=e?this.preloadedDarkGraphSvg:this.preloadedLightGraphSvg,n=i?i[A]:null;if(n){this.renderedGraph.set(this.sanitizer.bypassSecurityTrustHtml(n)),this.isLoading.set(!1),setTimeout(()=>{let o=this.getExpandableNodes();nE(".svg-container",a=>{this.wasDragging||this.onNodeClick(a)},o),this.initializeSvgTransform()},50);return}this.agentService.getAppGraphImage(this.appName,e,A).subscribe({next:o=>lt(this,null,function*(){try{if(!o?.dotSrc){this.errorMessage.set("Agent structure graph not available."),this.isLoading.set(!1);return}let a=yield this.graphService.render(o.dotSrc);this.renderedGraph.set(this.sanitizer.bypassSecurityTrustHtml(a)),this.isLoading.set(!1),setTimeout(()=>{let r=this.getExpandableNodes();nE(".svg-container",s=>{this.wasDragging||this.onNodeClick(s)},r),this.initializeSvgTransform()},50)}catch(a){console.error("Error rendering graph:",a),this.errorMessage.set("Agent structure graph not available."),this.isLoading.set(!1)}}),error:o=>{console.error("Error loading agent graph:",o),this.errorMessage.set("Agent structure graph not available."),this.isLoading.set(!1)}})}getCurrentPath(){return this.navigationStack.length<=1?"":this.navigationStack.slice(1).map(e=>e.name).join("/")}updateBreadcrumbs(){this.breadcrumbs.set(this.navigationStack.map(e=>e.name))}onNodeClick(e){let A=this.navigationStack[this.navigationStack.length-1].data,i=oE(A,e);i&&oC(i)&&this.navigateIntoNode(e,i)}navigateIntoNode(e,A){this.navigationStack.push({name:e,data:A}),this.updateBreadcrumbs(),this.isLoading.set(!0),this.renderCurrentLevel()}navigateToLevel(e){e>=0&&e{let a=ec(o);a!==i&&oC(o)&&e.add(a)}),e}getSvgElement(){return document.querySelector(".svg-container svg")}applyTransform(){let e=this.getSvgElement();e&&(e.style.transform=`translate(${this.translateX}px, ${this.translateY}px) scale(${this.scale})`)}initializeSvgTransform(){let e=this.getSvgElement(),A=document.querySelector(".svg-container");if(!e||!A)return;let i=e.getBoundingClientRect(),n=A.getBoundingClientRect(),o=48,a=(n.width-o)/i.width,r=(n.height-o)/i.height;this.scale=Math.min(1,a,r);let s=i.width*this.scale,l=i.height*this.scale;this.translateX=(n.width-s)/2,this.translateY=(n.height-l)/2,this.applyTransform(),requestAnimationFrame(()=>{e.classList.add("ready")})}onWheel(e){let A=document.querySelector(".svg-container"),i=this.getSvgElement();if(!A||!i)return;e.preventDefault();let n=Math.max(-100,Math.min(100,e.deltaY)),o=Math.pow(1.002,-n),a=this.scale*o,r=A.getBoundingClientRect(),s=e.clientX-r.left,l=e.clientY-r.top,g=(s-this.translateX)/this.scale,C=(l-this.translateY)/this.scale;this.translateX=s-g*a,this.translateY=l-C*a,this.scale=a,this.applyTransform()}onMouseDown(e){if(e.button!==0||!e.target.closest("svg"))return;this.isPanning=!0,this.wasDragging=!1,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.startPanX=e.clientX,this.startPanY=e.clientY;let i=this.getSvgElement();i&&(i.style.cursor="grabbing")}onMouseMove(e){if(this.isPanning){if(!this.wasDragging){let A=e.clientX-this.dragStartX,i=e.clientY-this.dragStartY;A*A+i*i>25&&(this.wasDragging=!0)}this.translateX+=e.clientX-this.startPanX,this.translateY+=e.clientY-this.startPanY,this.startPanX=e.clientX,this.startPanY=e.clientY,this.applyTransform()}}onMouseUp(){this.isPanning=!1;let e=this.getSvgElement();e&&(e.style.cursor=""),setTimeout(()=>{this.wasDragging=!1},50)}resetZoomPan(){this.initializeSvgTransform()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-agent-structure-graph-dialog"]],inputs:{appName:"appName",preloadedAppData:"preloadedAppData",preloadedLightGraphSvg:"preloadedLightGraphSvg",preloadedDarkGraphSvg:"preloadedDarkGraphSvg",startPath:"startPath"},outputs:{close:"close"},decls:35,vars:2,consts:[[1,"overlay-backdrop"],[1,"overlay-panel",3,"mousedown","click"],[1,"overlay-header"],[1,"breadcrumb-container"],[2,"flex","1"],[1,"graph-legend"],[1,"legend-item"],[2,"color","#42A5F5","font-size","16px"],[2,"color","#9333EA","font-size","16px"],[2,"color","#10B981","font-size","16px"],[2,"color","#F59E0B","font-size","16px"],[2,"color","#6B7280","font-size","16px"],["mat-icon-button","","aria-label","Close",3,"click"],[1,"overlay-content"],[1,"graph-container"],[1,"loading-container"],[1,"error-container"],[1,"svg-container",3,"innerHTML"],[1,"no-graph-container"],["disabled","",1,"breadcrumb-item"],[1,"breadcrumb-separator"],[1,"breadcrumb-item",3,"click","disabled"],["diameter","50"],[1,"error-icon"],[1,"error-message"],[1,"svg-container",3,"wheel","mousedown","mousemove","mouseup","mouseleave","innerHTML"],[1,"large-icon"]],template:function(A,i){A&1&&(QA(0,"div",0),B(1,"div",1),U("mousedown",function(o){return i.onOverlayMouseDown(o)})("click",function(o){return i.onBackdropClick(o)}),B(2,"div",2),O(3,WcA,9,1,"div",3),QA(4,"span",4),B(5,"div",5)(6,"span",6)(7,"span",7),y(8,"\u2726"),Q(),y(9," Agent"),Q(),B(10,"span",6)(11,"span",8),y(12,"\u22B7"),Q(),y(13," Workflow"),Q(),B(14,"span",6)(15,"span",9),y(16,"\u0192"),Q(),y(17," Function"),Q(),B(18,"span",6)(19,"span",10),y(20,"\u2335"),Q(),y(21," Join"),Q(),B(22,"span",6)(23,"span",11),y(24,"\u{1F527}"),Q(),y(25," Tool"),Q()(),B(26,"button",12),U("click",function(){return i.close.emit()}),B(27,"mat-icon"),y(28,"close"),Q()()(),B(29,"div",13)(30,"div",14),O(31,ZcA,4,0,"div",15)(32,XcA,5,1,"div",16)(33,$cA,1,1,"div",17)(34,A0A,5,0,"div",18),Q()()()),A&2&&(u(3),Y(i.renderedGraph()&&i.breadcrumbs().length>0?3:-1),u(28),Y(i.isLoading()?31:i.errorMessage()?32:i.renderedGraph()?33:34))},dependencies:[si,qi,ji,Tn,Wt,E2,gs],styles:["[_nghost-%COMP%]{display:block;position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}.overlay-backdrop[_ngcontent-%COMP%]{position:absolute;inset:0;background-color:#000000b3}.overlay-panel[_ngcontent-%COMP%]{position:relative;width:100vw;height:100vh;display:flex;flex-direction:column;background-color:transparent;color:var(--mat-sys-on-surface);border-radius:0;overflow:hidden;box-shadow:none}.overlay-header[_ngcontent-%COMP%]{display:flex;align-items:center;height:48px;padding:0 16px;box-sizing:border-box;border-bottom:1px solid var(--mat-sys-outline-variant);background-color:var(--mat-sys-surface-container)}.overlay-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden}.graph-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0}.agent-info[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;color:var(--mdc-dialog-supporting-text-color)}.agent-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:600;color:var(--mdc-dialog-supporting-text-color)}.svg-container[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;background-color:transparent}.svg-container[_ngcontent-%COMP%] svg{position:absolute;top:0;left:0;transform-origin:0 0;cursor:grab;border-radius:16px;box-shadow:0 4px 12px #0000004d}.svg-container[_ngcontent-%COMP%] svg>g.graph>polygon:first-child{fill:transparent!important;stroke:transparent!important}.svg-container[_ngcontent-%COMP%] svg{opacity:0;transition:opacity .1s ease-in-out}.svg-container[_ngcontent-%COMP%] svg.ready{opacity:1}.svg-container[_ngcontent-%COMP%] svg:active{cursor:grabbing}.dark-theme[_nghost-%COMP%] .svg-container[_ngcontent-%COMP%] svg, .dark-theme [_nghost-%COMP%] .svg-container[_ngcontent-%COMP%] svg{background-color:#0e172a}.light-theme[_nghost-%COMP%] .svg-container[_ngcontent-%COMP%] svg, .light-theme [_nghost-%COMP%] .svg-container[_ngcontent-%COMP%] svg{background-color:#f9fafc}.loading-container[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%], .no-graph-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:400px;padding:40px}.loading-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .no-graph-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:16px;font-size:14px;color:var(--mdc-dialog-supporting-text-color)}.error-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:#f44336}.error-message[_ngcontent-%COMP%]{color:#f44336!important}.large-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px;color:var(--mdc-dialog-supporting-text-color);opacity:.6}.breadcrumb-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;margin-left:8px;padding:0;background-color:transparent;flex-wrap:wrap}.breadcrumb-item[_ngcontent-%COMP%]{background:none;border:none;padding:4px 8px;cursor:pointer;color:var(--mat-sys-primary);font-size:13px;border-radius:4px;transition:background-color .2s}.breadcrumb-item[_ngcontent-%COMP%]:hover:not(:disabled){background-color:var(--mat-sys-surface-container-high)}.breadcrumb-item[_ngcontent-%COMP%]:disabled, .breadcrumb-item.active[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);cursor:default;font-weight:600}.breadcrumb-separator[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--mat-sys-on-surface-variant)}.graph-legend[_ngcontent-%COMP%]{display:flex;align-items:center;gap:16px;margin-right:16px;font-size:13px;color:var(--mat-sys-on-surface-variant);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;padding:6px 16px;background-color:var(--mat-sys-surface-container-lowest)}.graph-legend[_ngcontent-%COMP%] .legend-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-weight:500}"]})};var e0A=["mat-internal-form-field",""],t0A=["*"],W6=(()=>{class t{labelPosition="after";static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mdc-form-field--align-end",n.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},attrs:e0A,ngContentSelectors:t0A,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),Ve(0))},styles:[`.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-flex;align-items:center;vertical-align:middle}.mat-internal-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mat-internal-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end .mdc-form-field--align-end label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0} +`],encapsulation:2,changeDetection:0})}return t})();var i0A=["audioPlayer"],aE=class t{base64data=me("");audioPlayerRef=So("audioPlayer");audioSrc="";constructor(){}ngOnChanges(e){e.base64data&&this.base64data()&&this.setAudioSource(this.base64data())}setAudioSource(e){e.startsWith("data:")||e.startsWith("http")||e.startsWith("blob:")?this.audioSrc=e:this.audioSrc=`data:audio/mpeg;base64,${e}`,this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.load()}play(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.play()}pause(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.pause()}stop(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&(this.audioPlayerRef().nativeElement.pause(),this.audioPlayerRef().nativeElement.currentTime=0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-audio-player"]],viewQuery:function(A,i){A&1&&ns(i.audioPlayerRef,i0A,5),A&2&&ur()},inputs:{base64data:[1,"base64data"]},features:[Yt],decls:3,vars:1,consts:[["audioPlayer",""],["controls","",3,"src"]],template:function(A,i){A&1&&(wn(0,"div"),Kn(1,"audio",1,0),Gn()),A&2&&(u(),ha("src",i.audioSrc))},styles:[".audio-player-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;padding:15px;border-radius:8px;box-shadow:0 2px 5px var(--audio-player-container-box-shadow-color);margin:20px auto;max-width:350px}audio[_ngcontent-%COMP%]{outline:none;border-radius:5px;width:350px}.custom-controls[_ngcontent-%COMP%]{margin-top:10px;display:flex;gap:10px}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:8px 15px;border:none;border-radius:5px;color:var(--audio-player-custom-controls-button-color);cursor:pointer;font-size:14px;transition:background-color .2s ease}"]})};function n0A(t,e){if(t&1){let A=hA();B(0,"div",0)(1,"div",4),y(2),Q(),B(3,"button",5),U("click",function(){T(A);let n=p();return J(n.close())}),Ct(),B(4,"svg",6),QA(5,"path",7),Q()()()}if(t&2){let A=p();u(),H("title",A.currentUrl),u(),lA(A.currentUrl)}}function o0A(t,e){if(t&1){let A=hA();B(0,"button",5),U("click",function(){T(A);let n=p();return J(n.close())}),Ct(),B(1,"svg",6),QA(2,"path",7),Q()()}}function a0A(t,e){if(t&1){let A=hA();B(0,"button",8),U("click",function(){T(A);let n=p();return J(n.prevImage())}),Ct(),B(1,"svg",6),QA(2,"path",9),Q()(),rr(),B(3,"button",10),U("click",function(){T(A);let n=p();return J(n.nextImage())}),Ct(),B(4,"svg",6),QA(5,"path",11),Q()(),rr(),B(6,"div",12),y(7),Q()}if(t&2){let A=p();H("disabled",A.currentIndex===0),u(3),H("disabled",A.currentIndex===A.images.length-1),u(4),ba("",A.currentIndex+1," / ",A.images.length)}}function r0A(t,e){if(t&1&&QA(0,"div",16),t&2){let A=p(3);H("ngStyle",A.getHighlightStyle())}}function s0A(t,e){if(t&1&&(B(0,"div",13),QA(1,"img",15),O(2,r0A,1,1,"div",16),Q()),t&2){let A=p(2);u(),H("src",A.displayContent,Go),u(),Y(A.shouldShowHighlight()?2:-1)}}function l0A(t,e){t&1&&(B(0,"div",14),y(1," No image data provided. "),Q())}function g0A(t,e){if(t&1&&(B(0,"div",2),O(1,s0A,3,2,"div",13),O(2,l0A,2,0,"div",14),Q()),t&2){let A=p();u(),Y(A.displayContent?1:-1),u(),Y(A.displayContent?-1:2)}}function c0A(t,e){if(t&1&&QA(0,"div",3),t&2){let A=p();H("innerHTML",A.displayContent,Kc)}}var rE=class t{displayContent=null;isSvgContent=!1;images=[];currentIndex=0;currentUrl=null;urls=[];coordinates=[];dialogRef=w(lo);data=w(qo);safeValuesService=w(Cs);ngOnInit(){this.images=this.data.images||[],this.currentIndex=this.data.currentIndex||0,this.urls=this.data.urls||[],this.coordinates=this.data.coordinates||[],this.updateImage()}updateImage(){let e=this.data.imageData,A="";this.images.length>0&&(e=this.images[this.currentIndex],A=this.urls[this.currentIndex]||""),this.currentUrl=A,this.processImageData(e)}getHighlightStyle(){let e=this.coordinates[this.currentIndex];return e?{left:`${e.x/1e3*100}%`,top:`${e.y/1e3*100}%`}:{}}shouldShowHighlight(){return!!this.coordinates[this.currentIndex]}processImageData(e){if(!e){this.displayContent=null,this.isSvgContent=!1;return}if(e.trim().includes("0&&(this.currentIndex--,this.updateImage())}close(){this.dialogRef.close()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-view-image-dialog"]],decls:6,vars:4,consts:[[1,"header-bar"],[1,"close-button"],[1,"image-wrapper"],[3,"innerHTML"],[1,"image-title",3,"title"],[1,"close-button",3,"click"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 0 24 24","fill","currentColor","width","24px","height","24px"],["d","M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"],[1,"nav-button","prev-button",3,"click","disabled"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],[1,"nav-button","next-button",3,"click","disabled"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],[1,"image-counter"],[1,"image-container",2,"position","relative","display","inline-block"],[1,"no-image-placeholder"],["alt","Viewed Image",3,"src"],[1,"highlight-circle",3,"ngStyle"]],template:function(A,i){A&1&&(B(0,"div"),O(1,n0A,6,2,"div",0)(2,o0A,3,0,"button",1),O(3,a0A,8,4),O(4,g0A,3,2,"div",2),O(5,c0A,1,1,"div",3),Q()),A&2&&(u(),Y(i.currentUrl?1:2),u(2),Y(i.images.length>1?3:-1),u(),Y(i.isSvgContent?-1:4),u(),Y(i.isSvgContent?5:-1))},dependencies:[Vd],styles:["[_nghost-%COMP%]{display:block;padding:16px}.close-button[_ngcontent-%COMP%]{position:absolute;top:5px;right:10px;border:none;cursor:pointer;padding:8px;border-radius:50%;transition:background-color .2s ease;color:var(--mdc-dialog-supporting-text-color);display:flex;align-items:center;justify-content:center;margin-bottom:15px}.close-button[_ngcontent-%COMP%]:hover{background-color:#0000000d}.close-button[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:24px;height:24px;fill:currentColor}.image-wrapper[_ngcontent-%COMP%]{flex-grow:1;display:flex;justify-content:center;align-items:center;overflow:auto}.image-wrapper[_ngcontent-%COMP%] img[_ngcontent-%COMP%], .image-wrapper[_ngcontent-%COMP%] .svg-container[_ngcontent-%COMP%]{max-width:90vw;max-height:90vh;object-fit:contain;border-radius:8px}.no-image-placeholder[_ngcontent-%COMP%]{color:var(--trace-chart-trace-duration-color);font-style:italic;text-align:center;padding:20px}@media(max-width:1768px){.close-button[_ngcontent-%COMP%]{top:5px;right:5px;padding:5px}}.nav-button[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);background:#00000080;color:#fff;border:none;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .2s ease;z-index:10}.nav-button[_ngcontent-%COMP%]:hover:not(:disabled){background:#000000b3}.nav-button[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:default}.nav-button[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:24px;height:24px;fill:currentColor}.prev-button[_ngcontent-%COMP%]{left:20px}.next-button[_ngcontent-%COMP%]{right:20px}.image-counter[_ngcontent-%COMP%]{position:absolute;bottom:20px;left:50%;transform:translate(-50%);background:#00000080;color:#fff;padding:4px 12px;border-radius:12px;font-size:14px;z-index:10}.header-bar[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;background:#000000b3;color:#fff;z-index:20;display:flex;align-items:center;justify-content:center;padding:8px 40px;box-sizing:border-box}.image-title[_ngcontent-%COMP%]{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:90%}.header-bar[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]{position:absolute;top:50%;right:10px;transform:translateY(-50%);color:#fff;margin-bottom:0}.header-bar[_ngcontent-%COMP%] .close-button[_ngcontent-%COMP%]:hover{background-color:#ffffff1a}.highlight-circle[_ngcontent-%COMP%]{position:absolute;width:30px;height:30px;border-radius:50%;background-color:#ff000080;border:2px solid red;transform:translate(-50%,-50%);pointer-events:none;z-index:5}"]})};function C0A(t,e){t&1&&QA(0,"hr",2)}function I0A(t,e){if(t&1&&(B(0,"mat-option",7),y(1),Q()),t&2){let A=e.$implicit;H("value",A),u(),lA(A.versionId)}}function d0A(t,e){if(t&1){let A=hA();B(0,"div")(1,"img",9),U("click",function(){T(A);let n=p().$index,o=p();return J(o.openViewImageDialog(o.selectedArtifacts[n].data))}),Q()()}if(t&2){let A=p().$index,i=p();u(),H("src",i.selectedArtifacts[A].data??"",Go)}}function B0A(t,e){if(t&1&&(B(0,"div"),QA(1,"app-audio-player",10),Q()),t&2){let A=p().$index,i=p();u(),H("base64data",i.selectedArtifacts[A].data)}}function E0A(t,e){if(t&1){let A=hA();B(0,"div",1),O(1,C0A,1,0,"hr",2),B(2,"div",3)(3,"button",4),U("click",function(){let n=T(A).$index,o=p();return J(o.openArtifact(o.selectedArtifacts[n].data,o.selectedArtifacts[n].mimeType))}),y(4),Q()(),B(5,"div",3)(6,"span"),y(7," Version: "),Q(),B(8,"div",5)(9,"mat-select",6),Di("ngModelChange",function(n){let o=T(A).$index,a=p();return di(a.selectedArtifacts[o],n)||(a.selectedArtifacts[o]=n),J(n)}),U("selectionChange",function(n){let o=T(A).$index,a=p();return J(a.onArtifactVersionChange(n,o))}),Je(10,I0A,2,2,"mat-option",7,hi),Q()(),B(12,"button",8),U("click",function(){let n=T(A).$index,o=p();return J(o.downloadArtifact(o.selectedArtifacts[n]))}),B(13,"mat-icon"),y(14,"file_download"),Q(),y(15," Download "),Q()(),B(16,"div"),O(17,d0A,2,1,"div")(18,B0A,2,1,"div"),Q()()}if(t&2){let A,i=e.$implicit,n=e.$index,o=p();u(),Y(n>0?1:-1),u(3),ue(" ",o.getArtifactName(i)," "),u(5),wi("ngModel",o.selectedArtifacts[n]),u(),Oe(o.getSortedArtifactsFromId(i)),u(7),Y((A=o.selectedArtifacts[n].mediaType)===o.MediaType.IMAGE?17:A===o.MediaType.AUDIO?18:-1)}}var h0A="default_artifact_name",aC=(n=>(n.IMAGE="image",n.AUDIO="audio",n.TEXT="text",n.UNSPECIFIED="unspecified",n))(aC||{});function X6(t){let e=t.toLowerCase();for(let A of Object.values(aC))if(A!=="unspecified"&&e.startsWith(A+"/"))return A;return"unspecified"}function Q0A(t){return t?t.startsWith("image/"):!1}function u0A(t){return t?t.startsWith("audio/"):!1}var Z6=class t{artifacts=me([]);selectedArtifacts=[];isArtifactAudio=u0A;isArtifactImage=Q0A;MediaType=aC;downloadService=w(JB);dialog=w(Or);safeValuesService=w(Cs);ngOnChanges(e){if(e.artifacts){this.selectedArtifacts=[];for(let A of this.getDistinctArtifactIds())this.selectedArtifacts.push(this.getSortedArtifactsFromId(A)[0])}}downloadArtifact(e){this.downloadService.downloadBase64Data(e.data,e.mimeType,e.id)}getArtifactName(e){return e??h0A}getDistinctArtifactIds(){return[...new Set(this.artifacts().map(e=>e.id))]}getSortedArtifactsFromId(e){return this.artifacts().filter(A=>A.id===e).sort((A,i)=>i.versionId-A.versionId)}onArtifactVersionChange(e,A){this.selectedArtifacts[A]=e.value}openViewImageDialog(e){if(!e||!e.startsWith("data:")||e.indexOf(";base64,")===-1)return;let A=this.dialog.open(rE,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}openArtifact(e,A){if(this.isArtifactImage(A)){this.openViewImageDialog(e);return}this.openBase64InNewTab(e,A)}openBase64InNewTab(e,A){}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-artifact-tab"]],inputs:{artifacts:[1,"artifacts"]},features:[Yt],decls:3,vars:0,consts:[[1,"artifact-container"],[1,"artifact-box"],[1,"white-separator"],[1,"artifact-metadata"],[1,"link-style-button",3,"click"],[1,"version-select-container"],[3,"ngModelChange","selectionChange","ngModel"],[3,"value"],["mat-flat-button","",1,"download-button",3,"click"],["alt","artifact.id",1,"generated-image",3,"click","src"],[3,"base64data"]],template:function(A,i){A&1&&(B(0,"div",0),Je(1,E0A,19,4,"div",1,hi),Q()),A&2&&(u(),Oe(i.getDistinctArtifactIds()))},dependencies:[Xl,ln,yn,ko,Yr,pi,Wt,aE],styles:[".artifact-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}.artifact-box[_ngcontent-%COMP%]{padding:10px;max-width:100%;margin-left:26px;display:flex;flex-direction:column}.artifact-metadata[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:15px;flex-wrap:wrap;gap:5px}.download-button[_ngcontent-%COMP%]{margin-left:35px;width:130px;height:28px;font-size:14px}.generated-image[_ngcontent-%COMP%]{max-width:60%;border-radius:8px;cursor:pointer}hr.white-separator[_ngcontent-%COMP%]{border:none;border-top:1px solid var(--artifact-tab-white-separator-border-top-color);margin-bottom:1.2em;margin-right:15px}.version-select-container[_ngcontent-%COMP%]{width:80px;margin-left:15px}.link-style-button[_ngcontent-%COMP%]{border:none;padding:0;font:inherit;color:var(--artifact-tab-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none}.link-style-button[_ngcontent-%COMP%]:hover{color:var(--artifact-tab-link-style-button-hover-color);text-decoration:underline}.link-style-button[_ngcontent-%COMP%]:focus{outline:1px dotted var(--artifact-tab-link-style-button-focus-outline-color)}.link-style-button[_ngcontent-%COMP%]:active{color:var(--artifact-tab-link-style-button-active-color)}.link-style-button[_ngcontent-%COMP%]:disabled{color:var(--artifact-tab-link-style-button-disabled-color);text-decoration:none;cursor:not-allowed}"]})};var f0A=["input"],p0A=["label"],m0A=["*"],g9={color:"accent",clickAction:"check-indeterminate",disabledInteractive:!1},w0A=new kA("mat-checkbox-default-options",{providedIn:"root",factory:()=>g9}),Bs=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(Bs||{}),c9=class{source;checked},tc=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_ngZone=w(qe);_animationsDisabled=An();_options=w(w0A,{optional:!0});focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(A){let i=new c9;return i.source=this,i.checked=A,i}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return`${this.id||this._uniqueId}-input`}required=!1;labelPosition="after";name=null;change=new LA;indeterminateChange=new LA;value;disableRipple=!1;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=Bs.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){w(eo).load(lr);let A=w(new Us("tabindex"),{optional:!0});this._options=this._options||g9,this.color=this._options.color||g9.color,this.tabIndex=A==null?0:parseInt(A)||0,this.id=this._uniqueId=w(In).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??!1}ngOnChanges(A){A.required&&this._validatorChangeFn()}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate)}get checked(){return this._checked}set checked(A){A!=this.checked&&(this._checked=A,this._changeDetectorRef.markForCheck())}_checked=!1;get disabled(){return this._disabled}set disabled(A){A!==this.disabled&&(this._disabled=A,this._changeDetectorRef.markForCheck())}_disabled=!1;get indeterminate(){return this._indeterminate()}set indeterminate(A){let i=A!=this._indeterminate();this._indeterminate.set(A),i&&(A?this._transitionCheckState(Bs.Indeterminate):this._transitionCheckState(this.checked?Bs.Checked:Bs.Unchecked),this.indeterminateChange.emit(A)),this._syncIndeterminate(A)}_indeterminate=bA(!1);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(A){this.checked=!!A}registerOnChange(A){this._controlValueAccessorChangeFn=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorChangeFn=A}_transitionCheckState(A){let i=this._currentCheckState,n=this._getAnimationTargetElement();if(!(i===A||!n)&&(this._currentAnimationClass&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(i,A),this._currentCheckState=A,this._currentAnimationClass.length>0)){n.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{n.classList.remove(o)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){let A=this._options?.clickAction;!this.disabled&&A!=="noop"?(this.indeterminate&&A!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(!1),this.indeterminateChange.emit(!1)}),this._checked=!this._checked,this._transitionCheckState(this._checked?Bs.Checked:Bs.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&A==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate)}_onInteractionEvent(A){A.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(A,i){if(this._animationsDisabled)return"";switch(A){case Bs.Init:if(i===Bs.Checked)return this._animationClasses.uncheckedToChecked;if(i==Bs.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case Bs.Unchecked:return i===Bs.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case Bs.Checked:return i===Bs.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case Bs.Indeterminate:return i===Bs.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(A){let i=this._inputElement;i&&(i.nativeElement.indeterminate=A)}_onInputClick(){this._handleInputClick()}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus()}_preventBubblingFromLabel(A){A.target&&this._labelElement.nativeElement.contains(A.target)&&A.stopPropagation()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-checkbox"]],viewQuery:function(i,n){if(i&1&&Jt(f0A,5)(p0A,5),i&2){let o;ae(o=re())&&(n._inputElement=o.first),ae(o=re())&&(n._labelElement=o.first)}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(i,n){i&2&&(ha("id",n.id),te("tabindex",null)("aria-label",null)("aria-labelledby",null),ro(n.color?"mat-"+n.color:"mat-accent"),RA("_mat-animation-noopable",n._animationsDisabled)("mdc-checkbox--disabled",n.disabled)("mat-mdc-checkbox-disabled",n.disabled)("mat-mdc-checkbox-checked",n.checked)("mat-mdc-checkbox-disabled-interactive",n.disabledInteractive))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",Be],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",Be],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",Be],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?void 0:Cn(A)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be],checked:[2,"checked","checked",Be],disabled:[2,"disabled","disabled",Be],indeterminate:[2,"indeterminate","indeterminate",Be]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[Bt([{provide:as,useExisting:Ja(()=>t),multi:!0},{provide:Oc,useExisting:t,multi:!0}]),Yt],ngContentSelectors:m0A,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],["aria-hidden","true",1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],["aria-hidden","true",1,"mdc-checkbox__ripple"],["aria-hidden","true",1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","","aria-hidden","true",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(i,n){if(i&1&&(Rt(),B(0,"div",3),U("click",function(a){return n._preventBubblingFromLabel(a)}),B(1,"div",4,0)(3,"div",5),U("click",function(){return n._onTouchTargetClick()}),Q(),B(4,"input",6,1),U("blur",function(){return n._onBlur()})("click",function(){return n._onInputClick()})("change",function(a){return n._onInteractionEvent(a)}),Q(),QA(6,"div",7),B(7,"div",8),Ct(),B(8,"svg",9),QA(9,"path",10),Q(),rr(),QA(10,"div",11),Q(),QA(11,"div",12),Q(),B(12,"label",13,2),Ve(14),Q()()),i&2){let o=Qi(2);H("labelPosition",n.labelPosition),u(4),RA("mdc-checkbox--selected",n.checked),H("checked",n.checked)("indeterminate",n.indeterminate)("disabled",n.disabled&&!n.disabledInteractive)("id",n.inputId)("required",n.required)("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex),te("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby)("aria-checked",n.indeterminate?"mixed":null)("aria-controls",n.ariaControls)("aria-disabled",n.disabled&&n.disabledInteractive?!0:null)("aria-expanded",n.ariaExpanded)("aria-owns",n.ariaOwns)("name",n.name)("value",n.value),u(7),H("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),u(),H("for",n.inputId)}},dependencies:[rs,W6],styles:[`.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover>.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:hover>.mat-mdc-checkbox-ripple>.mat-ripple-element{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control+.mdc-checkbox__ripple{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}@media(forced-colors: active){.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:GrayText}}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:GrayText}}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-checkbox-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-checkbox-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-checkbox-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-checkbox-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-checkbox-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive{pointer-events:auto}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive input{cursor:default}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{color:GrayText}}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox .mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox .mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-checkbox-touch-target-size, 48px);width:var(--mat-checkbox-touch-target-size, 48px);transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display, block)}.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus-visible~.mat-focus-indicator::before{content:""} +`],encapsulation:2,changeDetection:0})}return t})(),AO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[tc,fi]})}return t})();var eO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({})}return t})();var tO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[eO,Zc,fi]})}return t})();var y0A={google_search:"search",EnterpriseWebSearchTool:"web",VertexAiSearchTool:"search",FilesRetrieval:"find_in_page",load_memory:"memory",preload_memory:"memory",url_context:"link",VertexAiRagRetrieval:"find_in_page",exit_loop:"sync",get_user_choice:"how_to_reg",load_artifacts:"image",LongRunningFunctionTool:"data_object"};function sE(t,e){return e==="Agent Tool"?"smart_toy":e==="Built-in tool"?y0A[t]||"build":e==="Function tool"?"data_object":"build"}var ic=class t{static toolMenuTooltips=new Map([["Function tool","Build custom tools for your specific ADK agent needs."],["Built-in tool","Ready-to-use functionality such as Google Search or code executors that provide agents with common capabilities. "],["Agent tool","A sub-agent that can be invoked as a tool by another agent."]]);static toolDetailedInfo=new Map([["Function tool",{shortDescription:"Build custom tools for your specific ADK agent needs.",detailedDescription:"The ADK framework automatically inspects your Python function's signature\u2014including its name, docstring, parameters, type hints, and default values\u2014to generate a schema. This schema is what the LLM uses to understand the tool's purpose, when to use it, and what arguments it requires.",docLink:"https://google.github.io/adk-docs/tools/function-tools/"}],["Agent tool",{shortDescription:"Wraps a sub-agent as a callable tool, enabling modular and hierarchical agent architectures.",detailedDescription:"Agent tools allow you to use one agent as a tool within another agent, creating powerful multi-agent workflows.",docLink:"https://google.github.io/adk-docs/agents/multi-agents/#c-explicit-invocation-agenttool"}]]);static callbackMenuTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDialogTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDetailedInfo=new Map([["before_agent",{shortDescription:"Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed. It runs after the agent's InvocationContext is created but before its core logic begins.",detailedDescription:" Ideal for setting up resources or state needed only for this specific agent's run, performing validation checks on the session state (callback_context.state) before execution starts, logging the entry point of the agent's activity, or potentially modifying the invocation context before the core logic uses it.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback"}],["after_agent",{shortDescription:"Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes.",detailedDescription:"Useful for cleanup tasks, post-execution validation, logging the completion of an agent's activity, modifying final state, or augmenting/replacing the agent's final output.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-agent-callback"}],["before_model",{shortDescription:"Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow.",detailedDescription:"Allows inspection and modification of the request going to the LLM. Use cases include adding dynamic instructions, injecting few-shot examples based on state, modifying model config, implementing guardrails (like profanity filters), or implementing request-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-model-callback"}],["after_model",{shortDescription:"Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent.",detailedDescription:"Allows inspection or modification of the raw LLM response.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-model-callback"}],["before_tool",{shortDescription:"Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it.",detailedDescription:"Allows inspection and modification of tool arguments, performing authorization checks before execution, logging tool usage attempts, or implementing tool-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-tool-callback"}],["after_tool",{shortDescription:"Called just after the tool's run_async method completes successfully.",detailedDescription:"Allows inspection and modification of the tool's result before it's sent back to the LLM (potentially after summarization). Useful for logging tool results, post-processing or formatting results, or saving specific parts of the result to the session state.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-tool-callback"}]]);static getToolMenuTooltips(e){return t.toolMenuTooltips.get(e)}static getToolDetailedInfo(e){return t.toolDetailedInfo.get(e)}static getCallbackMenuTooltips(e){return t.callbackMenuTooltips.get(e)}static getCallbackDialogTooltips(e){return t.callbackDialogTooltips.get(e)}static getCallbackDetailedInfo(e){return t.callbackDetailedInfo.get(e)}};var v0A=["callbackNameInput"];function b0A(t,e){if(t&1){let A=hA();Dl(0),B(1,"div",8)(2,"div",9),U("click",function(){T(A);let n=p();return J(n.toggleCallbackInfo())}),B(3,"mat-icon",10),y(4,"info"),Q(),B(5,"div",11)(6,"span"),y(7,"Callback Information"),Q()(),B(8,"button",12)(9,"mat-icon"),y(10),Q()()(),B(11,"div",13)(12,"div",14)(13,"div",15),y(14),Q(),B(15,"div",16),y(16),Q()(),B(17,"div",17)(18,"a",18)(19,"mat-icon"),y(20,"open_in_new"),Q(),B(21,"span"),y(22,"View Official Documentation"),Q()()()()(),yl()}if(t&2){let A,i,n,o=p();u(10),lA(o.isCallbackInfoExpanded?"expand_less":"expand_more"),u(),RA("expanded",o.isCallbackInfoExpanded),u(3),lA((A=o.getCallbackInfo())==null?null:A.shortDescription),u(2),lA((i=o.getCallbackInfo())==null?null:i.detailedDescription),u(2),H("href",(n=o.getCallbackInfo())==null?null:n.docLink,Go)}}function M0A(t,e){if(t&1&&(B(0,"mat-option",21),y(1),Q()),t&2){let A=e.$implicit;H("value",A),u(),lA(A)}}function S0A(t,e){if(t&1){let A=hA();Dl(0),B(1,"mat-form-field",3)(2,"mat-label"),y(3,"Callback Type"),Q(),B(4,"mat-select",19),Di("ngModelChange",function(n){T(A);let o=p();return di(o.callbackType,n)||(o.callbackType=n),J(n)}),Et(5,M0A,2,2,"mat-option",20),Q()(),yl()}if(t&2){let A=p();u(4),wi("ngModel",A.callbackType),u(),H("ngForOf",A.availableCallbackTypes)}}function k0A(t,e){t&1&&(B(0,"mat-error"),y(1,"Same callback name has been used"),Q())}function x0A(t,e){t&1&&(B(0,"mat-error"),y(1,"Cannot have callback consist of two words"),Q())}function _0A(t,e){t&1&&(B(0,"mat-error"),y(1,"Callback function names cannot have spaces"),Q())}var C9=class{isErrorState(e){return!!(e&&e.invalid)}},o4=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.callbackType=A?.callbackType??"",this.existingCallbackNames=A?.existingCallbackNames??[],this.isEditMode=!!A?.isEditMode,this.availableCallbackTypes=A?.availableCallbackTypes??[],this.isEditMode&&A?.callback&&(this.callbackName=A.callback.name,this.callbackType=A.callback.type,this.originalCallbackName=A.callback.name,this.existingCallbackNames=this.existingCallbackNames.filter(i=>i!==this.originalCallbackName))}callbackNameInput;callbackName="";callbackType="";existingCallbackNames=[];matcher=new C9;isEditMode=!1;availableCallbackTypes=[];originalCallbackName="";isCallbackInfoExpanded=!1;addCallback(){if(!this.callbackName.trim()||this.hasSpaces()||this.isDuplicateName())return;let e={name:this.callbackName.trim(),type:this.callbackType,isEditMode:this.isEditMode,originalName:this.originalCallbackName||this.callbackName.trim()};this.dialogRef.close(e)}cancel(){this.dialogRef.close()}isDuplicateName(){if(!Array.isArray(this.existingCallbackNames))return!1;let e=(this.callbackName||"").trim();return this.existingCallbackNames.includes(e)}hasSpaces(){return/\s/.test(this.callbackName||"")}createDisabled(){return!this.callbackName.trim()||this.isDuplicateName()||this.hasSpaces()}validate(){this.hasSpaces()?this.callbackNameInput.control.setErrors({hasSpaces:!0}):this.isDuplicateName()?this.callbackNameInput.control.setErrors({duplicateName:!0}):this.callbackNameInput.control.setErrors(null)}getCallbackInfo(){return ic.getCallbackDetailedInfo(this.callbackType)}toggleCallbackInfo(){this.isCallbackInfoExpanded=!this.isCallbackInfoExpanded}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-add-callback-dialog"]],viewQuery:function(A,i){if(A&1&&Jt(v0A,5),A&2){let n;ae(n=re())&&(i.callbackNameInput=n.first)}},decls:18,vars:10,consts:[["callbackNameInput","ngModel"],["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%"],["matInput","",3,"ngModelChange","keydown.enter","ngModel","errorStateMatcher"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","secondary",3,"click","disabled"],[1,"callback-info-container"],[1,"callback-info-header",3,"click"],[1,"callback-info-icon"],[1,"callback-info-title"],["mat-icon-button","","type","button","aria-label","Toggle callback information",1,"callback-info-toggle"],[1,"callback-info-body"],[1,"callback-info-content"],[1,"callback-info-short"],[1,"callback-info-detailed"],[1,"callback-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"callback-info-link",3,"href"],[3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){if(A&1){let n=hA();B(0,"h2",1),y(1),Q(),B(2,"mat-dialog-content"),Et(3,b0A,23,6,"ng-container",2)(4,S0A,6,2,"ng-container",2),B(5,"mat-form-field",3)(6,"mat-label"),y(7,"Callback Name"),Q(),B(8,"input",4,0),Di("ngModelChange",function(a){return T(n),di(i.callbackName,a)||(i.callbackName=a),J(a)}),U("ngModelChange",function(){return i.validate()})("keydown.enter",function(){return i.addCallback()}),Q(),Et(10,k0A,2,0,"mat-error",2)(11,x0A,2,0,"mat-error",2)(12,_0A,2,0,"mat-error",2),Q()(),B(13,"mat-dialog-actions",5)(14,"button",6),U("click",function(){return i.cancel()}),y(15,"Cancel"),Q(),B(16,"button",7),U("click",function(){return i.addCallback()}),y(17),Q()()}if(A&2){let n=Qi(9);u(),lA(i.isEditMode?"Edit Callback":"Add "+i.callbackType+" Callback"),u(2),H("ngIf",i.getCallbackInfo()),u(),H("ngIf",i.isEditMode),u(4),wi("ngModel",i.callbackName),H("errorStateMatcher",i.matcher),u(2),H("ngIf",n.hasError("duplicateName")),u(),H("ngIf",n.hasError("hasSpaces")),u(),H("ngIf",n.hasError("hasSpaces")),u(4),H("disabled",i.createDisabled()),u(),ue(" ",i.isEditMode?"Save":"Add"," ")}},dependencies:[si,A2,Js,ln,Dn,yn,ko,Xc,fa,pa,Na,qi,pi,ji,Ya,Ko,vs,Kb,Ps,ua,$0,Xl,Yr,Tn,Wt],styles:[".callback-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;min-width:400px;max-width:600px}.full-width[_ngcontent-%COMP%]{width:100%}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}mat-dialog-actions[_ngcontent-%COMP%]{padding:16px 24px;margin:0}mat-form-field[_ngcontent-%COMP%]{margin-top:8px!important}.callback-info-container[_ngcontent-%COMP%]{border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.callback-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.callback-info-header[_ngcontent-%COMP%]:hover .callback-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.callback-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.callback-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.callback-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.callback-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.callback-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.callback-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.callback-info-content[_ngcontent-%COMP%]{flex:1}.callback-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-dialog-content-text-color);margin-bottom:8px;line-height:1.4}.callback-info-detailed[_ngcontent-%COMP%]{color:var(--mat-dialog-content-text-color);font-size:14px;line-height:1.5;opacity:.8}.callback-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.callback-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.callback-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.callback-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function R0A(t,e){if(t&1){let A=hA();Dl(0),B(1,"div",6)(2,"div",7),U("click",function(){T(A);let n=p();return J(n.toggleToolInfo())}),B(3,"mat-icon",8),y(4,"info"),Q(),B(5,"div",9)(6,"span"),y(7,"Tool Information"),Q()(),B(8,"button",10)(9,"mat-icon"),y(10),Q()()(),B(11,"div",11)(12,"div",12)(13,"div",13),y(14),Q(),B(15,"div",14),y(16),Q()(),B(17,"div",15)(18,"a",16)(19,"mat-icon"),y(20,"open_in_new"),Q(),B(21,"span"),y(22,"View Official Documentation"),Q()()()()(),yl()}if(t&2){let A,i,n,o=p();u(10),lA(o.isToolInfoExpanded?"expand_less":"expand_more"),u(),RA("expanded",o.isToolInfoExpanded),u(3),lA((A=o.getToolInfo())==null?null:A.shortDescription),u(2),lA((i=o.getToolInfo())==null?null:i.detailedDescription),u(2),H("href",(n=o.getToolInfo())==null?null:n.docLink,Go)}}function N0A(t,e){if(t&1){let A=hA();B(0,"mat-form-field",2)(1,"input",17),Di("ngModelChange",function(n){T(A);let o=p();return di(o.toolName,n)||(o.toolName=n),J(n)}),U("keydown.enter",function(){T(A);let n=p();return J(n.addTool())}),Q()()}if(t&2){let A=p();u(),wi("ngModel",A.toolName)}}function F0A(t,e){if(t&1&&(B(0,"mat-option",20),y(1),Q()),t&2){let A=e.$implicit;H("value",A),u(),ue(" ",A," ")}}function L0A(t,e){if(t&1){let A=hA();B(0,"mat-form-field",2)(1,"mat-select",18),Di("ngModelChange",function(n){T(A);let o=p();return di(o.selectedBuiltInTool,n)||(o.selectedBuiltInTool=n),J(n)}),Et(2,F0A,2,2,"mat-option",19),Q()()}if(t&2){let A=p();u(),wi("ngModel",A.selectedBuiltInTool),u(),H("ngForOf",A.builtInTools)}}var v2=class t{constructor(e,A){this.data=e;this.dialogRef=A}toolName="";toolType="Function tool";selectedBuiltInTool="google_search";builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];isEditMode=!1;isToolInfoExpanded=!1;ngOnInit(){this.toolType=this.data.toolType,this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName&&(this.toolType==="Function tool"?this.toolName=this.data.toolName:this.toolType==="Built-in tool"&&(this.selectedBuiltInTool=this.data.toolName))}addTool(){if(this.toolType==="Function tool"&&!this.toolName.trim())return;let e={toolType:this.toolType,isEditMode:this.isEditMode};this.toolType==="Function tool"?e.name=this.toolName.trim():this.toolType==="Built-in tool"&&(e.name=this.selectedBuiltInTool),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}createDisabled(){return this.toolType==="Function tool"&&!this.toolName.trim()}getToolInfo(){return ic.getToolDetailedInfo(this.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(ct(qo),ct(lo))};static \u0275cmp=SA({type:t,selectors:[["app-add-tool-dialog"]],decls:11,vars:6,consts:[["mat-dialog-title","",1,"dialog-title"],[4,"ngIf"],[2,"width","100%"],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","placeholder","Enter full function name",3,"ngModelChange","keydown.enter","ngModel"],["placeholder","Select built-in tool",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1),Q(),B(2,"mat-dialog-content"),Et(3,R0A,23,6,"ng-container",1),O(4,N0A,2,1,"mat-form-field",2),O(5,L0A,3,2,"mat-form-field",2),Q(),B(6,"mat-dialog-actions",3)(7,"button",4),U("click",function(){return i.cancel()}),y(8,"Cancel"),Q(),B(9,"button",5),U("click",function(){return i.addTool()}),y(10),Q()()),A&2&&(u(),lA(i.isEditMode?"Editing Tool":"Add New Tool"),u(2),H("ngIf",i.getToolInfo()),u(),Y(i.toolType==="Function tool"?4:-1),u(),Y(i.toolType==="Built-in tool"?5:-1),u(4),H("disabled",i.createDisabled()),u(),ue(" ",i.isEditMode?"Save":"Create"," "))},dependencies:[si,A2,Js,ln,Dn,yn,ko,fa,Na,Ko,ua,Xl,Yr,pa,pi,ji,Wt],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-family:Google Sans;font-size:24px}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}.tool-info-container[_ngcontent-%COMP%]{border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:#e3e3e3;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:#c4c7ca;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function Vo(t){return Array.isArray(t)}function ia(t){return t!==null&&typeof t=="object"&&(t.constructor===void 0||t.constructor.name==="Object")}function I9(t){return t&&typeof t=="object"?t.op==="add":!1}function d9(t){return t&&typeof t=="object"?t.op==="remove":!1}function $6(t){return t&&typeof t=="object"?t.op==="replace":!1}function A8(t){return t&&typeof t=="object"?t.op==="copy":!1}function b2(t){return t&&typeof t=="object"?t.op==="move":!1}function iO(t,e){return JSON.stringify(t)===JSON.stringify(e)}function G0A(t,e){return t===e}function B9(t){return t.slice(0,t.length-1)}function nO(t){return t[t.length-1]}function oO(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:G0A;if(t.length{e[A]=t[A]}),e}if(ia(t)){let e=gA({},t);return Object.getOwnPropertySymbols(t).forEach(A=>{e[A]=t[A]}),e}return t}function Q9(t,e,A){if(t[e]===A)return t;let i=h9(t);return i[e]=A,i}function Xe(t,e){let A=t,i=0;for(;i3&&arguments[3]!==void 0?arguments[3]:!1;if(e.length===0)return A;let n=e[0],o=Hr(t?t[n]:void 0,e.slice(1),A,i);if(ia(t)||Vo(t))return Q9(t,n,o);if(i){let a=K0A.test(n)?[]:{};return a[n]=o,a}throw new Error("Path does not exist")}var K0A=/^\d+$/;function a4(t,e,A){if(e.length===0)return A(t);if(!E9(t))throw new Error("Path doesn't exist");let i=e[0],n=a4(t[i],e.slice(1),A);return Q9(t,i,n)}function x1(t,e){if(e.length===0)return t;if(!E9(t))throw new Error("Path does not exist");if(e.length===1){let n=e[0];if(!(n in t))return t;let o=h9(t);return Vo(o)&&o.splice(Number.parseInt(n),1),ia(o)&&delete o[n],o}let A=e[0],i=x1(t[A],e.slice(1));return Q9(t,A,i)}function r4(t,e,A){let i=e.slice(0,e.length-1),n=e[e.length-1];return a4(t,i,o=>{if(!Array.isArray(o))throw new TypeError(`Array expected at path ${JSON.stringify(i)}`);let a=h9(o);return a.splice(Number.parseInt(n),0,A),a})}function vr(t,e){return t===void 0?!1:e.length===0?!0:t===null?!1:vr(t[e[0]],e.slice(1))}function Es(t){let e=t.split("/");return e.shift(),e.map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function vt(t){return t.map(aO).join("")}function aO(t){return`/${String(t).replace(/~/g,"~0").replace(/\//g,"~1")}`}function s4(t,e){return t+aO(e)}function tl(t,e,A){let i=t;for(let n=0;n{let r,s=il(o,a.path);if(a.op==="add")r=lO(o,s);else if(a.op==="remove")r=sO(o,s);else if(a.op==="replace")r=rO(o,s);else if(a.op==="copy")r=j0A(o,s);else if(a.op==="move")r=q0A(o,s,l4(a.from));else if(a.op==="test")r=[];else throw new Error(`Unknown JSONPatch operation ${JSON.stringify(a)}`);let l;if(A?.before){let g=A.before(o,a,r);if(g?.revertOperations&&(r=g.revertOperations),g?.document&&(l=g.document),g?.json)throw new Error('Deprecation warning: returned object property ".json" has been renamed to ".document"')}if(i=r.concat(i),l!==void 0)return{document:l}}}),i}function rO(t,e){return vr(t,e)?[{op:"replace",path:vt(e),value:Xe(t,e)}]:[]}function sO(t,e){return[{op:"add",path:vt(e),value:Xe(t,e)}]}function lO(t,e){return lE(t,e)||!vr(t,e)?[{op:"remove",path:vt(e)}]:rO(t,e)}function j0A(t,e){return lO(t,e)}function q0A(t,e,A){if(e.length="0"&&t<="9"}function IO(t){return t>=" "}function g4(t){return`,:[]/{}() ++`.includes(t)}function p9(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"}function m9(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"||t>="0"&&t<="9"}var w9=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,D9=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function y9(t){return`,[]/{} ++`.includes(t)}function v9(t){return c4(t)||oCA.test(t)}var oCA=/^[[{\w-]$/;function dO(t){return t===` +`||t==="\r"||t===" "||t==="\b"||t==="\f"}function M2(t,e){let A=t.charCodeAt(e);return A===32||A===10||A===9||A===13}function BO(t,e){let A=t.charCodeAt(e);return A===32||A===9||A===13}function EO(t,e){let A=t.charCodeAt(e);return A===160||A===6158||A>=8192&&A<=8203||A===8239||A===8287||A===12288||A===65279}function c4(t){return b9(t)||n8(t)}function b9(t){return t==='"'||t==="\u201C"||t==="\u201D"}function M9(t){return t==='"'}function n8(t){return t==="'"||t==="\u2018"||t==="\u2019"||t==="`"||t==="\xB4"}function S9(t){return t==="'"}function gE(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=t.lastIndexOf(e);return i!==-1?t.substring(0,i)+(A?"":t.substring(i+1)):t}function og(t,e){let A=t.length;if(!M2(t,A-1))return t+e;for(;M2(t,A-1);)A--;return t.substring(0,A)+e+t.substring(A)}function hO(t,e,A){return t.substring(0,e)+t.substring(e+A)}function QO(t){return/[,\n][ \t\r]*$/.test(t)}var aCA={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},rCA={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:" "};function ag(t){let e=0,A="";l(["```","[```","{```"]),o()||X(),l(["```","```]","```}"]);let n=C(",");for(n&&a(),v9(t[e])&&QO(A)?(n||(A=og(A,",")),m()):n&&(A=gE(A,","));t[e]==="}"||t[e]==="]";)e++,a();if(e>=t.length)return A;EA();function o(){a();let aA=E()||f()||v()||S()||b()||F(!1)||z();return a(),aA}function a(){let aA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,rA=e,uA=r(aA);do uA=s(),uA&&(uA=r(aA));while(uA);return e>rA}function r(aA){let rA=aA?M2:BO,uA="";for(;;)if(rA(t,e))uA+=t[e],e++;else if(EO(t,e))uA+=" ",e++;else break;return uA.length>0?(A+=uA,!0):!1}function s(){if(t[e]==="/"&&t[e+1]==="*"){for(;e=t.length;UA||(v9(t[e])||$A?A=og(A,":"):AA()),o()||(UA||$A?A+="null":AA())}return t[e]==="}"?(A+="}",e++):A=og(A,"}"),!0}return!1}function f(){if(t[e]==="["){A+="[",e++,a(),I(",")&&a();let aA=!0;for(;e0&&arguments[0]!==void 0?arguments[0]:!1,rA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,uA=t[e]==="\\";if(uA&&(e++,uA=!0),c4(t[e])){let UA=M9(t[e])?M9:S9(t[e])?S9:n8(t[e])?n8:b9,$A=e,zA=A.length,pA='"';for(e++;;){if(e>=t.length){let PA=P(e-1);return!aA&&g4(t.charAt(PA))?(e=$A,A=A.substring(0,zA),v(!0)):(pA=og(pA,'"'),A+=pA,!0)}if(e===rA)return pA=og(pA,'"'),A+=pA,!0;if(UA(t[e])){let PA=e,Ue=pA.length;if(pA+='"',e++,A+=pA,a(!1),aA||e>=t.length||g4(t[e])||c4(t[e])||S2(t[e]))return k(),!0;let _e=P(PA-1),YA=t.charAt(_e);if(YA===",")return e=$A,A=A.substring(0,zA),v(!1,_e);if(g4(YA))return e=$A,A=A.substring(0,zA),v(!0);A=A.substring(0,zA),e=PA+1,pA=`${pA.substring(0,Ue)}\\${pA.substring(Ue)}`}else if(aA&&y9(t[e])){if(t[e-1]===":"&&w9.test(t.substring($A+1,e+2)))for(;e=t.length?e=t.length:IA()}else pA+=PA,e+=2}else{let PA=t.charAt(e);PA==='"'&&t[e-1]!=="\\"?(pA+=`\\${PA}`,e++):dO(PA)?(pA+=aCA[PA],e++):(IO(PA)||Z(PA),pA+=PA,e++)}uA&&d()}}return!1}function k(){let aA=!1;for(a();t[e]==="+";){aA=!0,e++,a(),A=gE(A,'"',!0);let rA=A.length;v()?A=hO(A,rA,1):A=og(A,'"')}return aA}function S(){let aA=e;if(t[e]==="-"){if(e++,W())return eA(aA),!0;if(!S2(t[e]))return e=aA,!1}for(;S2(t[e]);)e++;if(t[e]==="."){if(e++,W())return eA(aA),!0;if(!S2(t[e]))return e=aA,!1;for(;S2(t[e]);)e++}if(t[e]==="e"||t[e]==="E"){if(e++,(t[e]==="-"||t[e]==="+")&&e++,W())return eA(aA),!0;if(!S2(t[e]))return e=aA,!1;for(;S2(t[e]);)e++}if(!W())return e=aA,!1;if(e>aA){let rA=t.slice(aA,e),uA=/^0\d/.test(rA);return A+=uA?`"${rA}"`:rA,!0}return!1}function b(){return x("true","true")||x("false","false")||x("null","null")||x("True","true")||x("False","false")||x("None","null")}function x(aA,rA){return t.slice(e,e+aA.length)===aA?(A+=rA,e+=aA.length,!0):!1}function F(aA){let rA=e;if(p9(t[e])){for(;erA){for(;M2(t,e-1)&&e>0;)e--;let uA=t.slice(rA,e);return A+=uA==="undefined"?"null":JSON.stringify(uA),t[e]==='"'&&e++,!0}}function z(){if(t[e]==="/"){let aA=e;for(e++;e0&&M2(t,rA);)rA--;return rA}function W(){return e>=t.length||g4(t[e])||M2(t,e)}function eA(aA){A+=`${t.slice(aA,e)}0`}function Z(aA){throw new rC(`Invalid character ${JSON.stringify(aA)}`,e)}function EA(){throw new rC(`Unexpected character ${JSON.stringify(t[e])}`,e)}function X(){throw new rC("Unexpected end of json string",t.length)}function iA(){throw new rC("Object key expected",e)}function AA(){throw new rC("Colon expected",e)}function IA(){let aA=t.slice(e,e+6);throw new rC(`Invalid unicode character "${aA}"`,e)}}function sCA(t,e){return t[e]==="*"&&t[e+1]==="/"}var lCA=typeof global=="object"&&global&&global.Object===Object&&global,o8=lCA;var gCA=typeof self=="object"&&self&&self.Object===Object&&self,cCA=o8||gCA||Function("return this")(),Ga=cCA;var CCA=Ga.Symbol,br=CCA;var uO=Object.prototype,ICA=uO.hasOwnProperty,dCA=uO.toString,C4=br?br.toStringTag:void 0;function BCA(t){var e=ICA.call(t,C4),A=t[C4];try{t[C4]=void 0;var i=!0}catch(o){}var n=dCA.call(t);return i&&(e?t[C4]=A:delete t[C4]),n}var fO=BCA;var ECA=Object.prototype,hCA=ECA.toString;function QCA(t){return hCA.call(t)}var pO=QCA;var uCA="[object Null]",fCA="[object Undefined]",mO=br?br.toStringTag:void 0;function pCA(t){return t==null?t===void 0?fCA:uCA:mO&&mO in Object(t)?fO(t):pO(t)}var nc=pCA;function mCA(t){return t!=null&&typeof t=="object"}var _s=mCA;var wCA="[object Symbol]";function DCA(t){return typeof t=="symbol"||_s(t)&&nc(t)==wCA}var kl=DCA;function yCA(t,e){for(var A=-1,i=t==null?0:t.length,n=Array(i);++A0){if(++e>=I2A)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var TO=E2A;function h2A(t){return function(){return t}}var JO=h2A;var Q2A=(function(){try{var t=nl(Object,"defineProperty");return t({},"",{}),t}catch(e){}})(),CE=Q2A;var u2A=CE?function(t,e){return CE(t,"toString",{configurable:!0,enumerable:!1,value:JO(e),writable:!0})}:l0,OO=u2A;var f2A=TO(OO),YO=f2A;function p2A(t,e){for(var A=-1,i=t==null?0:t.length;++A-1&&t%1==0&&t-1&&t%1==0&&t<=R2A}var dE=N2A;function F2A(t){return t!=null&&dE(t.length)&&!a8(t)}var rg=F2A;function L2A(t,e,A){if(!Cr(A))return!1;var i=typeof e;return(i=="number"?rg(A)&&IE(e,A.length):i=="string"&&e in A)?_2(A[e],t):!1}var d4=L2A;var G2A=Object.prototype;function K2A(t){var e=t&&t.constructor,A=typeof e=="function"&&e.prototype||G2A;return t===A}var N2=K2A;function U2A(t,e){for(var A=-1,i=Array(t);++A-1}var IY=o1A;function a1A(t,e){var A=this.__data__,i=G2(A,t);return i<0?(++this.size,A.push([t,e])):A[i][1]=e,this}var dY=a1A;function uE(t){var e=-1,A=t==null?0:t.length;for(this.clear();++e0&&A(r)?e>1?bY(r,e-1,A,i,n):mE(n,r):i||(n[n.length]=r)}return n}var MY=bY;var S1A=C8(Object.getPrototypeOf,Object),E8=S1A;function k1A(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++ir))return!1;var l=o.get(t),g=o.get(e);if(l&&g)return l==e&&g==t;var C=-1,I=!0,d=A&SBA?new QH:void 0;for(o.set(t,e),o.set(e,t);++C=e||F<0||C&&z>=o}function m(){var x=F8();if(f(x))return v(x);r=setTimeout(m,E(x))}function v(x){return r=void 0,I&&i?d(x):(i=n=void 0,a)}function k(){r!==void 0&&clearTimeout(r),l=0,i=s=n=r=void 0}function S(){return r===void 0?a:v(F8())}function b(){var x=F8(),F=f(x);if(i=arguments,n=this,s=x,F){if(r===void 0)return h(s);if(C)return clearTimeout(r),r=setTimeout(m,e),d(s)}return r===void 0&&(r=setTimeout(m,e)),a}return b.cancel=k,b.flush=S,b}var ME=SEA;function kEA(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ki=kEA;function xEA(t){return typeof t=="function"?t:l0}var L8=xEA;function _EA(t,e){for(var A=t==null?0:t.length;A--&&e(t[A],A,t)!==!1;);return t}var HH=_EA;var REA=k8(!0),zH=REA;function NEA(t,e){return t&&zH(t,e,sg)}var PH=NEA;var FEA=_8(PH,!0),jH=FEA;function LEA(t,e){var A=co(t)?HH:jH;return A(t,L8(e))}var L9=LEA;function GEA(t){return t&&t.length?t[0]:void 0}var lg=GEA;function KEA(t,e){var A=-1,i=rg(t)?Array(t.length):[];return R8(t,function(n,o,a){i[++A]=e(n,o,a)}),i}var G8=KEA;function UEA(t,e){var A=co(t)?k2:G8;return A(t,g0(e,3))}var G9=UEA;var TEA=Object.prototype,JEA=TEA.hasOwnProperty,OEA=N8(function(t,e,A){JEA.call(t,A)?t[A].push(e):x2(t,A,[e])}),K9=OEA;function YEA(t){var e=t==null?0:t.length;return e?SY(t,0,-1):[]}var Yi=YEA;var HEA="[object Map]",zEA="[object Set]",PEA=Object.prototype,jEA=PEA.hasOwnProperty;function qEA(t){if(t==null)return!0;if(rg(t)&&(co(t)||typeof t=="string"||typeof t.splice=="function"||lC(t)||BE(t)||F2(t)))return!t.length;var e=oc(t);if(e==HEA||e==zEA)return!t.size;if(N2(t))return!I8(t).length;for(var A in t)if(jEA.call(t,A))return!1;return!0}var en=qEA;function VEA(t,e){return bE(t,e)}var Mi=VEA;function WEA(t,e){return te||o&&a&&s&&!r&&!l||i&&a&&s||!A&&s||!n)return 1;if(!i&&!o&&!l&&t=r)return s;var l=A[i];return s*(l=="desc"?-1:1)}}return t.index-e.index}var XH=thA;function ihA(t,e,A){e.length?e=k2(e,function(o){return co(o)?function(a){return pE(a,o.length===1?o[0]:o)}:o}):e=[l0];var i=-1;e=k2(e,L2(g0));var n=G8(t,function(o,a,r){var s=k2(e,function(l){return l(o)});return{criteria:s,index:++i,value:o}});return WH(n,function(o,a){return XH(o,a,A)})}var $H=ihA;var nhA=N8(function(t,e,A){t[A?0:1].push(e)},function(){return[[],[]]}),T9=nhA;var ohA=Math.ceil,ahA=Math.max;function rhA(t,e,A,i){for(var n=-1,o=ahA(ohA((e-t)/(A||1)),0),a=Array(o);o--;)a[i?o:++n]=t,t+=A;return a}var Az=rhA;function shA(t){return function(e,A,i){return i&&typeof i!="number"&&d4(e,A,i)&&(A=i=void 0),e=cE(e),A===void 0?(A=e,e=0):A=cE(A),i=i===void 0?e1&&d4(t,e[0],e[1])?e=[]:A>2&&d4(e[0],e[1],e[2])&&(e=[e[0]]),$H(t,MY(e,1),[])}),J9=ghA;var chA=9007199254740991,O9=4294967295,ChA=Math.min;function IhA(t,e){if(t=xO(t),t<1||t>chA)return[];var A=O9,i=ChA(t,O9);e=L8(e),t-=O9;for(var n=g8(i,e);++AArray.isArray(t),EhA=t=>t!==null&&typeof t=="object"&&!H2(t),hhA=t=>typeof t=="string",N1=(t,e)=>t===e?!0:t!==null&&e!==null&&typeof t=="object"&&typeof e=="object"&&Object.keys(t).length===Object.keys(e).length&&Object.entries(t).every(([A,i])=>N1(i,e[A])),tz=(t,e)=>{let A=t?.[e];if(A!==void 0){if(!Object.hasOwn(t,e)||Array.isArray(t)&&!/^\d+$/.test(e)||typeof t!="object")throw new TypeError(`Unsupported property "${e}"`);return A}};function za(t){return(...e)=>{let A=e.map(o=>Pa(o)),i=A[0],n=A[1];return A.length===1?o=>t(i(o)):A.length===2?o=>t(i(o),n(o)):o=>t(...A.map(a=>a(o)))}}var f4={boolean:0,number:1,string:2},iz=3,az=(t,e)=>typeof t==typeof e&&typeof t in f4?t>e:!1,QhA=(t,e)=>N1(t,e)||az(t,e),rz=(t,e)=>typeof t==typeof e&&typeof t in f4?tN1(t,e)||rz(t,e),u4={pipe:(...t)=>{let e=t.map(A=>Pa(A));return A=>e.reduce((i,n)=>n(i),A)},object:t=>{let e=Object.keys(t).map(A=>[A,Pa(t[A])]);return A=>{let i={};for(let[n,o]of e)i[n]=o(A);return i}},array:(...t)=>{let e=t.map(A=>Pa(A));return A=>e.map(i=>i(A))},get:(...t)=>{if(t.length===0)return e=>e??null;if(t.length===1){let e=t[0];return A=>tz(A,e)??null}return e=>{let A=e;for(let i of t)A=tz(A,i);return A??null}},map:t=>{let e=Pa(t);return A=>A.map(e)},mapObject:t=>{let e=Pa(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e({key:n,value:A[n]});i[o.key]=o.value}return i}},mapKeys:t=>{let e=Pa(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e(n);i[o]=A[n]}return i}},mapValues:t=>{let e=Pa(t);return A=>{let i={};for(let n of Object.keys(A))i[n]=e(A[n]);return i}},filter:t=>{let e=Pa(t);return A=>A.filter(i=>nz(e(i)))},sort:(t=["get"],e)=>{let A=Pa(t),i=e==="desc"?-1:1;function n(o,a){let r=A(o),s=A(a);if(typeof r!=typeof s){let l=f4[typeof r]??iz,g=f4[typeof s]??iz;return l>g?i:ls?i:ro.slice().sort(n)},reverse:()=>t=>t.toReversed(),pick:(...t)=>{let e=t.map(([i,...n])=>[n[n.length-1],u4.get(...n)]),A=(i,n)=>{let o={};for(let[a,r]of n)o[a]=r(i);return o};return i=>H2(i)?i.map(n=>A(n,e)):A(i,e)},groupBy:t=>{let e=Pa(t);return A=>{let i={};for(let n of A){let o=e(n);i[o]?i[o].push(n):i[o]=[n]}return i}},keyBy:t=>{let e=Pa(t);return A=>{let i={};for(let n of A){let o=e(n);o in i||(i[o]=n)}return i}},flatten:()=>t=>t.flat(),join:(t="")=>e=>e.join(t),split:za((t,e)=>e!==void 0?t.split(e):t.trim().split(/\s+/)),substring:za((t,e,A)=>t.slice(Math.max(e,0),A)),uniq:()=>t=>{let e=[];for(let A of t)e.findIndex(i=>N1(i,A))===-1&&e.push(A);return e},uniqBy:t=>e=>Object.values(u4.keyBy(t)(e)),limit:t=>e=>e.slice(0,Math.max(t,0)),size:()=>t=>t.length,keys:()=>Object.keys,values:()=>Object.values,prod:()=>t=>Q4(t,(e,A)=>e*A),sum:()=>t=>H2(t)?t.reduce((e,A)=>e+A,0):H9(),average:()=>t=>H2(t)?t.length>0?t.reduce((e,A)=>e+A)/t.length:null:H9(),min:()=>t=>Q4(t,(e,A)=>Math.min(e,A)),max:()=>t=>Q4(t,(e,A)=>Math.max(e,A)),and:za((...t)=>Q4(t,(e,A)=>!!(e&&A))),or:za((...t)=>Q4(t,(e,A)=>!!(e||A))),not:za(t=>!t),exists:t=>{let e=t.slice(1),A=e.pop(),i=u4.get(...e);return n=>{let o=i(n);return!!o&&Object.hasOwnProperty.call(o,A)}},if:(t,e,A)=>{let i=Pa(t),n=Pa(e),o=Pa(A);return a=>nz(i(a))?n(a):o(a)},in:(t,e)=>{let A=Pa(t),i=Pa(e);return n=>{let o=A(n);return i(n).findIndex(a=>N1(a,o))!==-1}},"not in":(t,e)=>{let A=u4.in(t,e);return i=>!A(i)},regex:(t,e,A)=>{let i=new RegExp(e,A),n=Pa(t);return o=>i.test(n(o))},match:(t,e,A)=>{let i=new RegExp(e,A),n=Pa(t);return o=>{let a=n(o).match(i);return a?oz(a):null}},matchAll:(t,e,A)=>{let i=new RegExp(e,`${A??""}g`),n=Pa(t);return o=>Array.from(n(o).matchAll(i)).map(oz)},eq:za(N1),gt:za(az),gte:za(QhA),lt:za(rz),lte:za(uhA),ne:za((t,e)=>!N1(t,e)),add:za((t,e)=>t+e),subtract:za((t,e)=>t-e),multiply:za((t,e)=>t*e),divide:za((t,e)=>t/e),mod:za((t,e)=>t%e),pow:za((t,e)=>t**e),abs:za(Math.abs),round:za((t,e=0)=>+`${Math.round(+`${t}e${e}`)}e${-e}`),number:za(t=>{let e=Number(t);return Number.isNaN(Number(t))?null:e}),string:za(String)},nz=t=>t!==null&&t!==0&&t!==!1,Q4=(t,e)=>(H2(t)||H9(),t.length===0?null:t.reduce(e)),oz=t=>{let[e,...A]=t,i=t.groups;return A.length?i?{value:e,groups:A,namedGroups:i}:{value:e,groups:A}:{value:e}},H9=()=>{z9("Array expected")},z9=t=>{throw new TypeError(t)},U8=[];function Pa(t,e){U8.unshift(gA(gA(gA({},u4),U8[0]),e?.functions));try{let A=H2(t)?fhA(t,U8[0]):EhA(t)?z9(`Function notation ["object", {...}] expected but got ${JSON.stringify(t)}`):()=>t;return i=>{try{return A(i)}catch(n){throw n.jsonquery=[{data:i,query:t},...n.jsonquery??[]],n}}}finally{U8.shift()}}function fhA(t,e){let[A,...i]=t,n=e[A];return n||z9(`Unknown function '${A}'`),n(...i)}var sz=[{pow:"^"},{multiply:"*",divide:"/",mod:"%"},{add:"+",subtract:"-"},{gt:">",gte:">=",lt:"<",lte:"<=",in:"in","not in":"not in"},{eq:"==",ne:"!="},{and:"and"},{or:"or"},{pipe:"|"}],phA=["|","and","or"],lz=["|","and","or","*","/","%","+","-"];function gz(t,e){if(!H2(e))throw new Error("Invalid custom operators");return e.reduce(mhA,t)}function mhA(t,{name:e,op:A,at:i,after:n,before:o}){if(i)return t.map(s=>Object.values(s).includes(i)?Ye(gA({},s),{[e]:A}):s);let a=n??o,r=t.findIndex(s=>Object.values(s).includes(a));if(r!==-1)return t.toSpliced(r+(n?1:0),0,{[e]:A});throw new Error("Invalid custom operator")}var whA=/^[a-zA-Z_$][a-zA-Z\d_$]*$/,DhA=/^[a-zA-Z_$][a-zA-Z\d_$]*/,yhA=/^"(?:[^"\\]|\\.)*"/,vhA=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,bhA=/^(0|[1-9][0-9]*)/,MhA=/^(true|false|null)/,ShA=/^[ \n\t\r]+/;function P9(t,e){let A=e?.operators??[],i=gz(sz,A),n=Object.assign({},...i),o=phA.concat(A.filter(W=>W.vararg).map(W=>W.op)),a=lz.concat(A.filter(W=>W.leftAssociative).map(W=>W.op)),r=(W=i.length-1)=>{let eA=i[W];if(!eA)return l();let Z=t[z]==="(",EA=r(W-1);for(;;){if(b(),t[z]==="."&&"pipe"in eA){let rA=g();EA=EA[0]==="pipe"?[...EA,rA]:["pipe",EA,rA];continue}let X=z,iA=s(eA);if(!iA)break;let AA=r(W-1),IA=EA[0],aA=iA===IA&&!Z;if(aA&&!a.includes(n[iA])){z=X;break}EA=aA&&o.includes(n[iA])?[...EA,AA]:[iA,EA,AA]}return EA},s=W=>{let eA=Object.keys(W).sort((Z,EA)=>EA.length-Z.length);for(let Z of eA){let EA=W[Z];if(t.substring(z,z+EA.length)===EA)return z+=EA.length,b(),Z}},l=()=>{if(b(),t[z]==="("){z++;let W=r();return x(")"),W}return g()},g=()=>{if(t[z]==="."){let W=[];for(;t[z]===".";)z++,W.push(h()??E()??m()??F("Property expected")),b();return["get",...W]}return C()},C=()=>{let W=z,eA=E();if(b(),!eA||t[z]!=="(")return z=W,I();z++,b();let Z=t[z]!==")"?[r()]:[];for(;z{if(t[z]==="{"){z++,b();let W={},eA=!0;for(;z{if(t[z]==="["){z++,b();let W=[],eA=!0;for(;zS(yhA,JSON.parse),E=()=>S(DhA,W=>W),f=()=>S(vhA,JSON.parse),m=()=>S(bhA,JSON.parse),v=()=>{let W=S(MhA,JSON.parse);if(W!==void 0)return W;F("Value expected")},k=()=>{b(),z{let Z=t.substring(z).match(W);if(Z)return z+=Z[0].length,eA(Z[0])},b=()=>S(ShA,W=>W),x=W=>{t[z]!==W&&F(`Character '${W}' expected`),z++},F=(W,eA=z)=>{throw new SyntaxError(`${W} (pos: ${eA})`)},z=0,P=r();return k(),P}var khA=40,xhA=" ",cz=(t,e)=>{let A=e?.indentation??xhA,i=e?.operators??[],n=gz(sz,i),o=Object.assign({},...n),a=lz.concat(i.filter(d=>d.leftAssociative).map(d=>d.op)),r=(d,h,E=!1)=>H2(d)?s(d,h,E):JSON.stringify(d),s=(d,h,E)=>{let[f,...m]=d;if(f==="get"&&m.length>0)return g(m);if(f==="object")return l(m[0],h);if(f==="array"){let b=m.map(x=>r(x,h));return I(b,["[",", ","]"],[`[ +${h+A}`,`, +${h+A}`,` +${h}]`])}let v=o[f];if(v){let b=E?"(":"",x=E?")":"",F=m.map((z,P)=>{let W=z?.[0],eA=n.findIndex(X=>f in X),Z=n.findIndex(X=>W in X),EA=eA0||f===W&&!a.includes(v);return r(z,h+A,EA)});return I(F,[b,` ${v} `,x],[b,` +${h+A}${v} `,x])}let k=m.length===1?h:h+A,S=m.map(b=>r(b,k));return I(S,[`${f}(`,", ",")"],m.length===1?[`${f}(`,`, +${h}`,")"]:[`${f}( +${k}`,`, +${k}`,` +${h})`])},l=(d,h)=>{let E=h+A,f=Object.entries(d).map(([m,v])=>`${C(m)}: ${r(v,E)}`);return I(f,["{ ",", "," }"],[`{ +${E}`,`, +${E}`,` +${h}}`])},g=d=>d.map(h=>`.${C(h)}`).join(""),C=d=>whA.test(d)?d:JSON.stringify(d),I=(d,[h,E,f],[m,v,k])=>h.length+d.reduce((S,b)=>S+b.length+E.length,0)-E.length+f.length<=(e?.maxLineLength??khA)?h+d.join(E)+f:m+d.join(v)+k;return r(t,"")};function Cz(t,e,A){return Pa(hhA(e)?P9(e,A):e,A)(t)}var Iz={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256a208 208 0 1 1 -416 0 208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]};var _hA={prefix:"far",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zm230.7 89.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"]},j9=_hA;var dz={prefix:"far",iconName:"lightbulb",icon:[384,512,[128161],"f0eb","M296.5 291.1C321 265.2 336 230.4 336 192 336 112.5 271.5 48 192 48S48 112.5 48 192c0 38.4 15 73.2 39.5 99.1 21.3 22.4 44.9 54 53.3 92.9l102.4 0c8.4-39 32-70.5 53.3-92.9zm34.8 33C307.7 349 288 379.4 288 413.7l0 18.3c0 44.2-35.8 80-80 80l-32 0c-44.2 0-80-35.8-80-80l0-18.3C96 379.4 76.3 349 52.7 324.1 20 289.7 0 243.2 0 192 0 86 86 0 192 0S384 86 384 192c0 51.2-20 97.7-52.7 132.1zM144 184c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6 39.4-88 88-88 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.1 0-40 17.9-40 40z"]};var q9={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z"]};var Bz={prefix:"fas",iconName:"rotate",icon:[512,512,[128260,"sync-alt"],"f2f1","M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z"]};var V9={prefix:"fas",iconName:"paste",icon:[512,512,["file-clipboard"],"f0ea","M64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-224c0-61.9 50.1-112 112-112l64 0 0-48c0-35.3-28.7-64-64-64L64 0zM248 112l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm40 48c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160z"]};var RhA={prefix:"fas",iconName:"crop-simple",icon:[512,512,["crop-alt"],"f565","M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-208 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64l-208 0 0 64 208 0 0 352z"]},Ez=RhA;var p4={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z"]};var NhA={prefix:"fas",iconName:"square-caret-down",icon:[448,512,["caret-square-down"],"f150","M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9S110.5 192 120 192l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"]},hz=NhA;var kE={prefix:"fas",iconName:"caret-right",icon:[256,512,[],"f0da","M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"]};var FhA={prefix:"fas",iconName:"magnifying-glass",icon:[512,512,[128269,"search"],"f002","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"]},m4=FhA;var Qz={prefix:"fas",iconName:"eye",icon:[576,512,[128065],"f06e","M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z"]},uz={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]};var fz={prefix:"fas",iconName:"chevron-up",icon:[448,512,[],"f077","M201.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 173.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"]};var pz={prefix:"fas",iconName:"circle-notch",icon:[512,512,[],"f1ce","M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8-79.3 23.6-137.1 97.1-137.1 184.1 0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256 512 397.4 397.4 512 256 512S0 397.4 0 256c0-116 77.1-213.9 182.9-245.4 16.9-5 34.8 4.6 39.8 21.5z"]};var LhA={prefix:"fas",iconName:"ellipsis-vertical",icon:[128,512,["ellipsis-v"],"f142","M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z"]},W9=LhA;var GhA={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L368 46.1 465.9 144 490.3 119.6c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L432 177.9 334.1 80 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"]},mz=GhA;var Z9={prefix:"fas",iconName:"clone",icon:[512,512,[],"f24d","M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"]};var KhA={prefix:"fas",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"]},X9=KhA;var UhA={prefix:"fas",iconName:"square-caret-up",icon:[448,512,["caret-square-up"],"f151","M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9S337.5 320 328 320l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z"]},wz=UhA;var w4={prefix:"fas",iconName:"code",icon:[576,512,[],"f121","M360.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm64.6 136.1c-12.5 12.5-12.5 32.8 0 45.3l73.4 73.4-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0zm-274.7 0c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 150.6 182.6c12.5-12.5 12.5-32.8 0-45.3z"]};var $9={prefix:"fas",iconName:"angle-right",icon:[256,512,[8250],"f105","M247.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L179.2 256 41.9 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"]};var ThA={prefix:"fas",iconName:"gear",icon:[512,512,[9881,"cog"],"f013","M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z"]},Dz=ThA;var yz={prefix:"fas",iconName:"up-right-and-down-left-from-center",icon:[512,512,["expand-alt"],"f424","M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"]};var CC={prefix:"fas",iconName:"wrench",icon:[576,512,[128295],"f0ad","M509.4 98.6c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 88.4-71.6 160-160 160-17.5 0-34.4-2.8-50.2-8L146.9 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8L232 210.2c-5.2-15.8-8-32.6-8-50.2 0-88.4 71.6-160 160-160 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7z"]},T8={prefix:"fas",iconName:"trash-can",icon:[448,512,[61460,"trash-alt"],"f2ed","M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"]};var J8={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"]};var vz={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},bz=vz;var D4=vz;var F1={prefix:"fas",iconName:"pen",icon:[512,512,[128394],"f304","M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"]};var Mz={prefix:"fas",iconName:"chevron-down",icon:[448,512,[],"f078","M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"]};var Sz={prefix:"fas",iconName:"angle-down",icon:[384,512,[8964],"f107","M169.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 306.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var JhA={prefix:"fas",iconName:"arrow-down-short-wide",icon:[576,512,["sort-amount-desc","sort-amount-down-alt"],"f884","M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"]};var y4=JhA;var OhA={prefix:"fas",iconName:"triangle-exclamation",icon:[512,512,[9888,"exclamation-triangle","warning"],"f071","M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},z2=OhA;var YhA={prefix:"fas",iconName:"scissors",icon:[512,512,[9984,9986,9988,"cut"],"f0c4","M192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6-28.3-28.3-74.1-28.3-102.4 0L256 192 216.5 152.5c4.9-12.6 7.5-26.2 7.5-40.5 0-61.9-50.1-112-112-112S0 50.1 0 112 50.1 224 112 224c14.3 0 27.9-2.7 40.5-7.5L192 256zm97.9 97.9L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0 7.1-7.1 7.1-18.5 0-25.6l-145.3-145.3-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"]},L1=YhA;var v4={prefix:"fas",iconName:"arrow-right-arrow-left",icon:[512,512,[8644,"exchange"],"f0ec","M502.6 150.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L402.7 160 32 160c-17.7 0-32-14.3-32-32S14.3 96 32 96l370.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 352 480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-370.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z"]};var AS={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z"]};var kz={prefix:"fas",iconName:"down-left-and-up-right-to-center",icon:[512,512,["compress-alt"],"f422","M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"]};var G1={prefix:"fas",iconName:"plus",icon:[448,512,[10133,61543,"add"],"2b","M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z"]};var IC={prefix:"fas",iconName:"copy",icon:[448,512,[],"f0c5","M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z"]};var HhA={prefix:"fas",iconName:"arrow-rotate-right",icon:[512,512,[8635,"arrow-right-rotate","arrow-rotate-forward","redo"],"f01e","M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"]};var O8=HhA;var c0={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z"]};var zhA={prefix:"fas",iconName:"arrow-rotate-left",icon:[512,512,[8634,"arrow-left-rotate","arrow-rotate-back","arrow-rotate-backward","undo"],"f0e2","M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"]};var Y8=zhA;var eS={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z"]};var tS={prefix:"fas",iconName:"arrow-down",icon:[384,512,[8595],"f063","M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var YZ=K3(Rz(),1);var Nz=Number.isNaN||function(e){return typeof e=="number"&&e!==e};function PhA(t,e){return!!(t===e||Nz(t)&&Nz(e))}function jhA(t,e){if(t.length!==e.length)return!1;for(var A=0;A{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},ol=class t{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+t.version}static addUnaryOp(e){return t.max_unop_len=Math.max(e.length,t.max_unop_len),t.unary_ops[e]=1,t}static addBinaryOp(e,A,i){return t.max_binop_len=Math.max(e.length,t.max_binop_len),t.binary_ops[e]=A,i?t.right_associative.add(e):t.right_associative.delete(e),t}static addIdentifierChar(e){return t.additional_identifier_chars.add(e),t}static addLiteral(e,A){return t.literals[e]=A,t}static removeUnaryOp(e){return delete t.unary_ops[e],e.length===t.max_unop_len&&(t.max_unop_len=t.getMaxKeyLen(t.unary_ops)),t}static removeAllUnaryOps(){return t.unary_ops={},t.max_unop_len=0,t}static removeIdentifierChar(e){return t.additional_identifier_chars.delete(e),t}static removeBinaryOp(e){return delete t.binary_ops[e],e.length===t.max_binop_len&&(t.max_binop_len=t.getMaxKeyLen(t.binary_ops)),t.right_associative.delete(e),t}static removeAllBinaryOps(){return t.binary_ops={},t.max_binop_len=0,t}static removeLiteral(e){return delete t.literals[e],t}static removeAllLiterals(){return t.literals={},t}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new t(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(A=>A.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return t.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!t.binary_ops[String.fromCharCode(e)]||t.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return t.isIdentifierStart(e)||t.isDecimalDigit(e)}throwError(e){let A=new Error(e+" at character "+this.index);throw A.index=this.index,A.description=e,A}runHook(e,A){if(t.hooks[e]){let i={context:this,node:A};return t.hooks.run(e,i),i.node}return A}searchHook(e){if(t.hooks[e]){let A={context:this};return t.hooks[e].find(function(i){return i.call(A.context,A),A.node}),A.node}}gobbleSpaces(){let e=this.code;for(;e===t.SPACE_CODE||e===t.TAB_CODE||e===t.LF_CODE||e===t.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),A=e.length===1?e[0]:{type:t.COMPOUND,body:e};return this.runHook("after-all",A)}gobbleExpressions(e){let A=[],i,n;for(;this.index0;){if(t.binary_ops.hasOwnProperty(e)&&(!t.isIdentifierStart(this.code)||this.index+e.lengtho.right_a&&C.right_a?i>C.prec:i<=C.prec;for(;n.length>2&&g(n[n.length-2]);)r=n.pop(),A=n.pop().value,a=n.pop(),e={type:t.BINARY_EXP,operator:A,left:a,right:r},n.push(e);e=this.gobbleToken(),e||this.throwError("Expected expression after "+l),n.push(o,e)}for(s=n.length-1,e=n[s];s>1;)e={type:t.BINARY_EXP,operator:n[s-1].value,left:n[s-2],right:e},s-=2;return e}gobbleToken(){let e,A,i,n;if(this.gobbleSpaces(),n=this.searchHook("gobble-token"),n)return this.runHook("after-token",n);if(e=this.code,t.isDecimalDigit(e)||e===t.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===t.SQUOTE_CODE||e===t.DQUOTE_CODE)n=this.gobbleStringLiteral();else if(e===t.OBRACK_CODE)n=this.gobbleArray();else{for(A=this.expr.substr(this.index,t.max_unop_len),i=A.length;i>0;){if(t.unary_ops.hasOwnProperty(A)&&(!t.isIdentifierStart(this.code)||this.index+A.length=A.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}else if(o===t.COMMA_CODE){if(this.index++,n++,n!==A.length){if(e===t.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===t.CBRACK_CODE)for(let a=A.length;a":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});ol.max_unop_len=ol.getMaxKeyLen(ol.unary_ops);ol.max_binop_len=ol.getMaxKeyLen(ol.binary_ops);var C0=t=>new ol(t).parse(),VhA=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(ol).filter(t=>!VhA.includes(t)&&C0[t]===void 0).forEach(t=>{C0[t]=ol[t]});C0.Jsep=ol;var WhA="ConditionalExpression",ZhA={name:"ternary",init(t){t.hooks.add("after-expression",function(A){if(A.node&&this.code===t.QUMARK_CODE){this.index++;let i=A.node,n=this.gobbleExpression();if(n||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;let o=this.gobbleExpression();if(o||this.throwError("Expected expression"),A.node={type:WhA,test:i,consequent:n,alternate:o},i.operator&&t.binary_ops[i.operator]<=.9){let a=i;for(;a.right.operator&&t.binary_ops[a.right.operator]<=.9;)a=a.right;A.node.test=a.right,a.right=A.node,A.node=i}}else this.throwError("Expected :")}})}};C0.plugins.register(ZhA);var Lz=47,XhA=92,$hA={name:"regex",init(t){t.hooks.add("gobble-token",function(A){if(this.code===Lz){let i=++this.index,n=!1;for(;this.index=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57)a+=this.char;else break}let r;try{r=new RegExp(o,a)}catch(s){this.throwError(s.message)}return A.node={type:t.LITERAL,value:r,raw:this.expr.slice(i-1,this.index)},A.node=this.gobbleTokenProperty(A.node),A.node}this.code===t.OBRACK_CODE?n=!0:n&&this.code===t.CBRACK_CODE&&(n=!1),this.index+=this.code===XhA?2:1}this.throwError("Unclosed Regex")}})}},iS=43,AQA=45,_E={name:"assignment",assignmentOperators:new Set(["=","*=","**=","/=","%=","+=","-=","<<=",">>=",">>>=","&=","^=","|=","||=","&&=","??="]),updateOperators:[iS,AQA],assignmentPrecedence:.9,init(t){let e=[t.IDENTIFIER,t.MEMBER_EXP];_E.assignmentOperators.forEach(i=>t.addBinaryOp(i,_E.assignmentPrecedence,!0)),t.hooks.add("gobble-token",function(n){let o=this.code;_E.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(this.index+=2,n.node={type:"UpdateExpression",operator:o===iS?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},(!n.node.argument||!e.includes(n.node.argument.type))&&this.throwError(`Unexpected ${n.node.operator}`))}),t.hooks.add("after-token",function(n){if(n.node){let o=this.code;_E.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(e.includes(n.node.type)||this.throwError(`Unexpected ${n.node.operator}`),this.index+=2,n.node={type:"UpdateExpression",operator:o===iS?"++":"--",argument:n.node,prefix:!1})}}),t.hooks.add("after-expression",function(n){n.node&&A(n.node)});function A(i){_E.assignmentOperators.has(i.operator)?(i.type="AssignmentExpression",A(i.left),A(i.right)):i.operator||Object.values(i).forEach(n=>{n&&typeof n=="object"&&A(n)})}}};C0.plugins.register($hA,_E);C0.addUnaryOp("typeof");C0.addUnaryOp("void");C0.addLiteral("null",null);C0.addLiteral("undefined",void 0);var eQA=new Set(["constructor","__proto__","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"]),xo={evalAst(t,e){switch(t.type){case"BinaryExpression":case"LogicalExpression":return xo.evalBinaryExpression(t,e);case"Compound":return xo.evalCompound(t,e);case"ConditionalExpression":return xo.evalConditionalExpression(t,e);case"Identifier":return xo.evalIdentifier(t,e);case"Literal":return xo.evalLiteral(t,e);case"MemberExpression":return xo.evalMemberExpression(t,e);case"UnaryExpression":return xo.evalUnaryExpression(t,e);case"ArrayExpression":return xo.evalArrayExpression(t,e);case"CallExpression":return xo.evalCallExpression(t,e);case"AssignmentExpression":return xo.evalAssignmentExpression(t,e);default:throw SyntaxError("Unexpected expression",t)}},evalBinaryExpression(t,e){return{"||":(i,n)=>i||n(),"&&":(i,n)=>i&&n(),"|":(i,n)=>i|n(),"^":(i,n)=>i^n(),"&":(i,n)=>i&n(),"==":(i,n)=>i==n(),"!=":(i,n)=>i!=n(),"===":(i,n)=>i===n(),"!==":(i,n)=>i!==n(),"<":(i,n)=>i":(i,n)=>i>n(),"<=":(i,n)=>i<=n(),">=":(i,n)=>i>=n(),"<<":(i,n)=>i<>":(i,n)=>i>>n(),">>>":(i,n)=>i>>>n(),"+":(i,n)=>i+n(),"-":(i,n)=>i-n(),"*":(i,n)=>i*n(),"/":(i,n)=>i/n(),"%":(i,n)=>i%n()}[t.operator](xo.evalAst(t.left,e),()=>xo.evalAst(t.right,e))},evalCompound(t,e){let A;for(let i=0;i-xo.evalAst(i,e),"!":i=>!xo.evalAst(i,e),"~":i=>~xo.evalAst(i,e),"+":i=>+xo.evalAst(i,e),typeof:i=>typeof xo.evalAst(i,e),void:i=>{xo.evalAst(i,e)}}[t.operator](t.argument)},evalArrayExpression(t,e){return t.elements.map(A=>xo.evalAst(A,e))},evalCallExpression(t,e){let A=t.arguments.map(n=>xo.evalAst(n,e)),i=xo.evalAst(t.callee,e);if(i===Function)throw new Error("Function constructor is disabled");return i(...A)},evalAssignmentExpression(t,e){if(t.left.type!=="Identifier")throw SyntaxError("Invalid left-hand side in assignment");let A=t.left.name,i=xo.evalAst(t.right,e);return e[A]=i,e[A]}},aS=class{constructor(e){this.code=e,this.ast=C0(this.code)}runInNewContext(e){let A=Object.assign(Object.create(null),e);return xo.evalAst(this.ast,A)}};function P2(t,e){return t=t.slice(),t.push(e),t}function rS(t,e){return e=e.slice(),e.unshift(t),e}var sS=class extends Error{constructor(e){super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),this.avoidNew=!0,this.value=e,this.name="NewError"}};function to(t,e,A,i,n){if(!(this instanceof to))try{return new to(t,e,A,i,n)}catch(a){if(!a.avoidNew)throw a;return a.value}typeof t=="string"&&(n=i,i=A,A=e,e=t,t=null);let o=t&&typeof t=="object";if(t=t||{},this.json=t.json||A,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=Object.hasOwn(t,"wrap")?t.wrap:!0,this.sandbox=t.sandbox||{},this.eval=t.eval===void 0?"safe":t.eval,this.ignoreEvalErrors=typeof t.ignoreEvalErrors>"u"?!1:t.ignoreEvalErrors,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||i||null,this.otherTypeCallback=t.otherTypeCallback||n||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},t.autostart!==!1){let a={path:o?t.path:e};o?"json"in t&&(a.json=t.json):a.json=A;let r=this.evaluate(a);if(!r||typeof r!="object")throw new sS(r);return r}}to.prototype.evaluate=function(t,e,A,i){let n=this.parent,o=this.parentProperty,{flatten:a,wrap:r}=this;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,A=A||this.callback,this.currOtherTypeCallback=i||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&typeof t=="object"&&!Array.isArray(t)){if(!t.path&&t.path!=="")throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!Object.hasOwn(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');({json:e}=t),a=Object.hasOwn(t,"flatten")?t.flatten:a,this.currResultType=Object.hasOwn(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=Object.hasOwn(t,"sandbox")?t.sandbox:this.currSandbox,r=Object.hasOwn(t,"wrap")?t.wrap:r,this.currEval=Object.hasOwn(t,"eval")?t.eval:this.currEval,A=Object.hasOwn(t,"callback")?t.callback:A,this.currOtherTypeCallback=Object.hasOwn(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,n=Object.hasOwn(t,"parent")?t.parent:n,o=Object.hasOwn(t,"parentProperty")?t.parentProperty:o,t=t.path}if(n=n||null,o=o||null,Array.isArray(t)&&(t=to.toPathString(t)),!t&&t!==""||!e)return;let s=to.toPathArray(t);s[0]==="$"&&s.length>1&&s.shift(),this._hasParentSelector=null;let l=this._trace(s,e,["$"],n,o,A).filter(function(g){return g&&!g.isParentSelector});return l.length?!r&&l.length===1&&!l[0].hasArrExpr?this._getPreferredOutput(l[0]):l.reduce((g,C)=>{let I=this._getPreferredOutput(C);return a&&Array.isArray(I)?g=g.concat(I):g.push(I),g},[]):r?[]:void 0};to.prototype._getPreferredOutput=function(t){let e=this.currResultType;switch(e){case"all":{let A=Array.isArray(t.path)?t.path:to.toPathArray(t.path);return t.pointer=to.toPointer(A),t.path=typeof t.path=="string"?t.path:to.toPathString(t.path),t}case"value":case"parent":case"parentProperty":return t[e];case"path":return to.toPathString(t[e]);case"pointer":return to.toPointer(t.path);default:throw new TypeError("Unknown result type")}};to.prototype._handleCallback=function(t,e,A){if(e){let i=this._getPreferredOutput(t);t.path=typeof t.path=="string"?t.path:to.toPathString(t.path),e(i,A,t)}};to.prototype._trace=function(t,e,A,i,n,o,a,r){let s;if(!t.length)return s={path:A,value:e,parent:i,parentProperty:n,hasArrExpr:a},this._handleCallback(s,o,"value"),s;let l=t[0],g=t.slice(1),C=[];function I(d){Array.isArray(d)?d.forEach(h=>{C.push(h)}):C.push(d)}if((typeof l!="string"||r)&&e&&Object.hasOwn(e,l))I(this._trace(g,e[l],P2(A,l),e,l,o,a));else if(l==="*")this._walk(e,d=>{I(this._trace(g,e[d],P2(A,d),e,d,o,!0,!0))});else if(l==="..")I(this._trace(g,e,A,i,n,o,a)),this._walk(e,d=>{typeof e[d]=="object"&&I(this._trace(t.slice(),e[d],P2(A,d),e,d,o,!0))});else{if(l==="^")return this._hasParentSelector=!0,{path:A.slice(0,-1),expr:g,isParentSelector:!0};if(l==="~")return s={path:P2(A,l),value:n,parent:i,parentProperty:null},this._handleCallback(s,o,"property"),s;if(l==="$")I(this._trace(g,e,A,null,null,o,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(l))I(this._slice(l,g,e,A,i,n,o));else if(l.indexOf("?(")===0){if(this.currEval===!1)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");let d=l.replace(/^\?\((.*?)\)$/u,"$1"),h=/@.?([^?]*)[['](\??\(.*?\))(?!.\)\])[\]']/gu.exec(d);h?this._walk(e,E=>{let f=[h[2]],m=h[1]?e[E][h[1]]:e[E];this._trace(f,m,A,i,n,o,!0).length>0&&I(this._trace(g,e[E],P2(A,E),e,E,o,!0))}):this._walk(e,E=>{this._eval(d,e[E],E,A,i,n)&&I(this._trace(g,e[E],P2(A,E),e,E,o,!0))})}else if(l[0]==="("){if(this.currEval===!1)throw new Error("Eval [(expr)] prevented in JSONPath expression.");I(this._trace(rS(this._eval(l,e,A.at(-1),A.slice(0,-1),i,n),g),e,A,i,n,o,a))}else if(l[0]==="@"){let d=!1,h=l.slice(1,-2);switch(h){case"scalar":(!e||!["object","function"].includes(typeof e))&&(d=!0);break;case"boolean":case"string":case"undefined":case"function":typeof e===h&&(d=!0);break;case"integer":Number.isFinite(e)&&!(e%1)&&(d=!0);break;case"number":Number.isFinite(e)&&(d=!0);break;case"nonFinite":typeof e=="number"&&!Number.isFinite(e)&&(d=!0);break;case"object":e&&typeof e===h&&(d=!0);break;case"array":Array.isArray(e)&&(d=!0);break;case"other":d=this.currOtherTypeCallback(e,A,i,n);break;case"null":e===null&&(d=!0);break;default:throw new TypeError("Unknown value type "+h)}if(d)return s={path:A,value:e,parent:i,parentProperty:n},this._handleCallback(s,o,"value"),s}else if(l[0]==="`"&&e&&Object.hasOwn(e,l.slice(1))){let d=l.slice(1);I(this._trace(g,e[d],P2(A,d),e,d,o,a,!0))}else if(l.includes(",")){let d=l.split(",");for(let h of d)I(this._trace(rS(h,g),e,A,i,n,o,!0))}else!r&&e&&Object.hasOwn(e,l)&&I(this._trace(g,e[l],P2(A,l),e,l,o,a,!0))}if(this._hasParentSelector)for(let d=0;d{e(A)})};to.prototype._slice=function(t,e,A,i,n,o,a){if(!Array.isArray(A))return;let r=A.length,s=t.split(":"),l=s[2]&&Number.parseInt(s[2])||1,g=s[0]&&Number.parseInt(s[0])||0,C=s[1]&&Number.parseInt(s[1])||r;g=g<0?Math.max(0,g+r):Math.min(r,g),C=C<0?Math.max(0,C+r):Math.min(r,C);let I=[];for(let d=g;d{I.push(E)});return I};to.prototype._eval=function(t,e,A,i,n,o){this.currSandbox._$_parentProperty=o,this.currSandbox._$_parent=n,this.currSandbox._$_property=A,this.currSandbox._$_root=this.json,this.currSandbox._$_v=e;let a=t.includes("@path");a&&(this.currSandbox._$_path=to.toPathString(i.concat([A])));let r=this.currEval+"Script:"+t;if(!to.cache[r]){let s=t.replaceAll("@parentProperty","_$_parentProperty").replaceAll("@parent","_$_parent").replaceAll("@property","_$_property").replaceAll("@root","_$_root").replaceAll(/@([.\s)[])/gu,"_$_v$1");if(a&&(s=s.replaceAll("@path","_$_path")),this.currEval==="safe"||this.currEval===!0||this.currEval===void 0)to.cache[r]=new this.safeVm.Script(s);else if(this.currEval==="native")to.cache[r]=new this.vm.Script(s);else if(typeof this.currEval=="function"&&this.currEval.prototype&&Object.hasOwn(this.currEval.prototype,"runInNewContext")){let l=this.currEval;to.cache[r]=new l(s)}else if(typeof this.currEval=="function")to.cache[r]={runInNewContext:l=>this.currEval(s,l)};else throw new TypeError(`Unknown "eval" property "${this.currEval}"`)}try{return to.cache[r].runInNewContext(this.currSandbox)}catch(s){if(this.ignoreEvalErrors)return!1;throw new Error("jsonPath: "+s.message+": "+t)}};to.cache={};to.toPathString=function(t){let e=t,A=e.length,i="$";for(let n=1;ntypeof e[l]=="function");let o=i.map(l=>e[l]);A=n.reduce((l,g)=>{let C=e[g].toString();return/function/u.test(C)||(C="function "+C),"var "+g+"="+C+";"+l},"")+A,!/(['"])use strict\1/u.test(A)&&!i.includes("arguments")&&(A="var arguments = undefined;"+A),A=A.replace(/;\s*$/u,"");let r=A.lastIndexOf(";"),s=r!==-1?A.slice(0,r+1)+" return "+A.slice(r+1):" return "+A;return new Function(...i,s)(...o)}};to.prototype.vm={Script:lS};var cS=[],Tz=[];(()=>{let t="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,A=0;e>1;if(t=Tz[i])e=i+1;else return!0;if(e==A)return!1}}function Gz(t){return t>=127462&&t<=127487}var Kz=8205;function Jz(t,e,A=!0,i=!0){return(A?Oz:nQA)(t,e,i)}function Oz(t,e,A){if(e==t.length)return e;e&&Yz(t.charCodeAt(e))&&Hz(t.charCodeAt(e-1))&&e--;let i=gS(t,e);for(e+=Uz(i);e=0&&Gz(gS(t,a));)o++,a-=2;if(o%2==0)break;e+=2}else break}return e}function nQA(t,e,A){for(;e>0;){let i=Oz(t,e-2,A);if(i=56320&&t<57344}function Hz(t){return t>=55296&&t<56320}function Uz(t){return t<65536?1:2}var bn=class t{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,A,i){[e,A]=GE(this,e,A);let n=[];return this.decompose(0,e,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(A,this.length,n,1),NE.from(n,this.length-(A-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,A=this.length){[e,A]=GE(this,e,A);let i=[];return this.decompose(e,A,i,0),NE.from(i,A-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let A=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new T1(this),o=new T1(e);for(let a=A,r=A;;){if(n.next(a),o.next(a),a=0,n.lineBreak!=o.lineBreak||n.done!=o.done||n.value!=o.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(e=1){return new T1(this,e)}iterRange(e,A=this.length){return new V8(this,e,A)}iterLines(e,A){let i;if(e==null)i=this.iter();else{A==null&&(A=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,A==this.lines+1?this.length:A<=1?0:this.line(A-1).to))}return new W8(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?t.empty:e.length<=32?new xl(e):NE.from(xl.split(e,[]))}},xl=class t extends bn{constructor(e,A=oQA(e)){super(),this.text=e,this.length=A}get lines(){return this.text.length}get children(){return null}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.text[o],r=n+a.length;if((A?i:r)>=e)return new dS(n,r,i,a);n=r+1,i++}}decompose(e,A,i,n){let o=e<=0&&A>=this.length?this:new t(zz(this.text,e,A),Math.min(A,this.length)-Math.max(0,e));if(n&1){let a=i.pop(),r=q8(o.text,a.text.slice(),0,o.length);if(r.length<=32)i.push(new t(r,a.length+o.length));else{let s=r.length>>1;i.push(new t(r.slice(0,s)),new t(r.slice(s)))}}else i.push(o)}replace(e,A,i){if(!(i instanceof t))return super.replace(e,A,i);[e,A]=GE(this,e,A);let n=q8(this.text,q8(i.text,zz(this.text,0,e)),A),o=this.length+i.length-(A-e);return n.length<=32?new t(n,o):NE.from(t.split(n,[]),o)}sliceString(e,A=this.length,i=` +`){[e,A]=GE(this,e,A);let n="";for(let o=0,a=0;o<=A&&ae&&a&&(n+=i),eo&&(n+=r.slice(Math.max(0,e-o),A-o)),o=s+1}return n}flatten(e){for(let A of this.text)e.push(A)}scanIdentical(){return 0}static split(e,A){let i=[],n=-1;for(let o of e)i.push(o),n+=o.length+1,i.length==32&&(A.push(new t(i,n)),i=[],n=-1);return n>-1&&A.push(new t(i,n)),A}},NE=class t extends bn{constructor(e,A){super(),this.children=e,this.length=A,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.children[o],r=n+a.length,s=i+a.lines-1;if((A?s:r)>=e)return a.lineInner(e,A,i,n);n=r+1,i=s+1}}decompose(e,A,i,n){for(let o=0,a=0;a<=A&&o=a){let l=n&((a<=e?1:0)|(s>=A?2:0));a>=e&&s<=A&&!l?i.push(r):r.decompose(e-a,A-a,i,l)}a=s+1}}replace(e,A,i){if([e,A]=GE(this,e,A),i.lines=o&&A<=r){let s=a.replace(e-o,A-o,i),l=this.lines-a.lines+s.lines;if(s.lines>4&&s.lines>l>>6){let g=this.children.slice();return g[n]=s,new t(g,this.length-(A-e)+i.length)}return super.replace(o,r,s)}o=r+1}return super.replace(e,A,i)}sliceString(e,A=this.length,i=` +`){[e,A]=GE(this,e,A);let n="";for(let o=0,a=0;oe&&o&&(n+=i),ea&&(n+=r.sliceString(e-a,A-a,i)),a=s+1}return n}flatten(e){for(let A of this.children)A.flatten(e)}scanIdentical(e,A){if(!(e instanceof t))return 0;let i=0,[n,o,a,r]=A>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;n+=A,o+=A){if(n==a||o==r)return i;let s=this.children[n],l=e.children[o];if(s!=l)return i+s.scanIdentical(l,A);i+=s.length+1}}static from(e,A=e.reduce((i,n)=>i+n.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let h of e)h.flatten(d);return new xl(d,A)}let n=Math.max(32,i>>5),o=n<<1,a=n>>1,r=[],s=0,l=-1,g=[];function C(d){let h;if(d.lines>o&&d instanceof t)for(let E of d.children)C(E);else d.lines>a&&(s>a||!s)?(I(),r.push(d)):d instanceof xl&&s&&(h=g[g.length-1])instanceof xl&&d.lines+h.lines<=32?(s+=d.lines,l+=d.length+1,g[g.length-1]=new xl(h.text.concat(d.text),h.length+1+d.length)):(s+d.lines>n&&I(),s+=d.lines,l+=d.length+1,g.push(d))}function I(){s!=0&&(r.push(g.length==1?g[0]:t.from(g,l)),l=-1,s=g.length=0)}for(let d of e)C(d);return I(),r.length==1?r[0]:new t(r,A)}};bn.empty=new xl([""],0);function oQA(t){let e=-1;for(let A of t)e+=A.length+1;return e}function q8(t,e,A=0,i=1e9){for(let n=0,o=0,a=!0;o=A&&(s>i&&(r=r.slice(0,i-n)),n0?1:(e instanceof xl?e.text.length:e.children.length)<<1]}nextInner(e,A){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],o=this.offsets[i],a=o>>1,r=n instanceof xl?n.text.length:n.children.length;if(a==(A>0?r:0)){if(i==0)return this.done=!0,this.value="",this;A>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((o&1)==(A>0?0:1)){if(this.offsets[i]+=A,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(n instanceof xl){let s=n.text[a+(A<0?-1:0)];if(this.offsets[i]+=A,s.length>Math.max(0,e))return this.value=e==0?s:A>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{let s=n.children[a+(A<0?-1:0)];e>s.length?(e-=s.length,this.offsets[i]+=A):(A<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(A>0?1:(s instanceof xl?s.text.length:s.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},V8=class{constructor(e,A,i){this.value="",this.done=!1,this.cursor=new T1(e,A>i?-1:1),this.pos=A>i?e.length:0,this.from=Math.min(A,i),this.to=Math.max(A,i)}nextInner(e,A){if(A<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,A<0?this.pos-this.to:this.from-this.pos);let i=A<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*A,this.value=n.length<=i?n:A<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},W8=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:A,lineBreak:i,value:n}=this.inner.next(e);return A&&this.afterBreak?(this.value="",this.afterBreak=!1):A?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(bn.prototype[Symbol.iterator]=function(){return this.iter()},T1.prototype[Symbol.iterator]=V8.prototype[Symbol.iterator]=W8.prototype[Symbol.iterator]=function(){return this});var dS=class{constructor(e,A,i,n){this.from=e,this.to=A,this.number=i,this.text=n}get length(){return this.to-this.from}};function GE(t,e,A){return e=Math.max(0,Math.min(t.length,e)),[e,Math.max(e,Math.min(t.length,A))]}function ja(t,e,A=!0,i=!0){return Jz(t,e,A,i)}function aQA(t){return t>=56320&&t<57344}function rQA(t){return t>=55296&&t<56320}function qr(t,e){let A=t.charCodeAt(e);if(!rQA(A)||e+1==t.length)return A;let i=t.charCodeAt(e+1);return aQA(i)?(A-55296<<10)+(i-56320)+65536:A}function _4(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10)+55296,(t&1023)+56320))}function _l(t){return t<65536?1:2}var BS=/\r\n?|\n/,zr=(function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t})(zr||(zr={})),q2=class t{constructor(e){this.sections=e}get length(){let e=0;for(let A=0;Ae)return o+(e-n);o+=r}else{if(i!=zr.Simple&&l>=e&&(i==zr.TrackDel&&ne||i==zr.TrackBefore&&ne))return null;if(l>e||l==e&&A<0&&!r)return e==n||A<0?o:o+s;o+=s}n=l}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return o}touchesRange(e,A=e){for(let i=0,n=0;i=0&&n<=A&&r>=e)return nA?"cover":!0;n=r}return!1}toString(){let e="";for(let A=0;A=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(A=>typeof A!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new t(e)}static create(e){return new t(e)}},Pr=class t extends q2{constructor(e,A){super(e),this.inserted=A}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return ES(this,(A,i,n,o,a)=>e=e.replace(n,n+(i-A),a),!1),e}mapDesc(e,A=!1){return hS(this,e,A,!0)}invert(e){let A=this.sections.slice(),i=[];for(let n=0,o=0;n=0){A[n]=r,A[n+1]=a;let s=n>>1;for(;i.length0&&j2(i,A,o.text),o.forward(g),r+=g}let l=e[a++];for(;r>1].toJSON()))}return e}static of(e,A,i){let n=[],o=[],a=0,r=null;function s(g=!1){if(!g&&!n.length)return;aI||C<0||I>A)throw new RangeError(`Invalid change range ${C} to ${I} (in doc of length ${A})`);let h=d?typeof d=="string"?bn.of(d.split(i||BS)):d:bn.empty,E=h.length;if(C==I&&E==0)return;Ca&&hs(n,C-a,-1),hs(n,I-C,E),j2(o,n,h),a=I}}return l(e),s(!r),r}static empty(e){return new t(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let A=[],i=[];for(let n=0;nr&&typeof a!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(o.length==1)A.push(o[0],0);else{for(;i.length=0&&A<=0&&A==t[n+1]?t[n]+=e:n>=0&&e==0&&t[n]==0?t[n+1]+=A:i?(t[n]+=e,t[n+1]+=A):t.push(e,A)}function j2(t,e,A){if(A.length==0)return;let i=e.length-2>>1;if(i>1])),!(A||a==t.sections.length||t.sections[a+1]<0);)r=t.sections[a++],s=t.sections[a++];e(n,l,o,g,C),n=l,o=g}}}function hS(t,e,A,i=!1){let n=[],o=i?[]:null,a=new J1(t),r=new J1(e);for(let s=-1;;){if(a.done&&r.len||r.done&&a.len)throw new Error("Mismatched change set lengths");if(a.ins==-1&&r.ins==-1){let l=Math.min(a.len,r.len);hs(n,l,-1),a.forward(l),r.forward(l)}else if(r.ins>=0&&(a.ins<0||s==a.i||a.off==0&&(r.len=0&&s=0){let l=0,g=a.len;for(;g;)if(r.ins==-1){let C=Math.min(g,r.len);l+=C,g-=C,r.forward(C)}else if(r.ins==0&&r.lens||a.ins>=0&&a.len>s)&&(r||i.length>l),o.forward2(s),a.forward(s)}}}}var J1=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return A>=e.length?bn.empty:e[A]}textBit(e){let{inserted:A}=this.set,i=this.i-2>>1;return i>=A.length&&!e?bn.empty:A[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},RE=class t{constructor(e,A,i){this.from=e,this.to=A,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,A=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,A):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new t(i,n,this.flags)}extend(e,A=e,i=0){if(e<=this.anchor&&A>=this.anchor)return Ie.range(e,A,void 0,void 0,i);let n=Math.abs(e-this.anchor)>Math.abs(A-this.anchor)?e:A;return Ie.range(this.anchor,n,void 0,void 0,i)}eq(e,A=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!A||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return Ie.range(e.anchor,e.head)}static create(e,A,i){return new t(e,A,i)}},Ie=class t{constructor(e,A){this.ranges=e,this.mainIndex=A}map(e,A=-1){return e.empty?this:t.create(this.ranges.map(i=>i.map(e,A)),this.mainIndex)}eq(e,A=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new t(e.ranges.map(A=>RE.fromJSON(A)),e.main)}static single(e,A=e){return new t([t.range(e,A)],0)}static create(e,A=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;nn.from-o.from),A=e.indexOf(i);for(let n=1;no.head?t.range(s,r):t.range(r,s))}}return new t(e,A)}};function $z(t,e){for(let A of t.ranges)if(A.to>e)throw new RangeError("Selection points outside of document")}var vS=0,At=class t{constructor(e,A,i,n,o){this.combine=e,this.compareInput=A,this.compare=i,this.isStatic=n,this.id=vS++,this.default=e([]),this.extensions=typeof o=="function"?o(this):o}get reader(){return this}static define(e={}){return new t(e.combine||(A=>A),e.compareInput||((A,i)=>A===i),e.compare||(e.combine?(A,i)=>A===i:bS),!!e.static,e.enables)}of(e){return new FE([],this,0,e)}compute(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new FE(e,this,1,A)}computeN(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new FE(e,this,2,A)}from(e,A){return A||(A=i=>i),this.compute([e],i=>A(i.field(e)))}};function bS(t,e){return t==e||t.length==e.length&&t.every((A,i)=>A===e[i])}var FE=class{constructor(e,A,i,n){this.dependencies=e,this.facet=A,this.type=i,this.value=n,this.id=vS++}dynamicSlot(e){var A;let i=this.value,n=this.facet.compareInput,o=this.id,a=e[o]>>1,r=this.type==2,s=!1,l=!1,g=[];for(let C of this.dependencies)C=="doc"?s=!0:C=="selection"?l=!0:(((A=e[C.id])!==null&&A!==void 0?A:1)&1)==0&&g.push(e[C.id]);return{create(C){return C.values[a]=i(C),1},update(C,I){if(s&&I.docChanged||l&&(I.docChanged||I.selection)||QS(C,g)){let d=i(C);if(r?!Pz(d,C.values[a],n):!n(d,C.values[a]))return C.values[a]=d,1}return 0},reconfigure:(C,I)=>{let d,h=I.config.address[o];if(h!=null){let E=$8(I,h);if(this.dependencies.every(f=>f instanceof At?I.facet(f)===C.facet(f):f instanceof Ma?I.field(f,!1)==C.field(f,!1):!0)||(r?Pz(d=i(C),E,n):n(d=i(C),E)))return C.values[a]=E,0}else d=i(C);return C.values[a]=d,1}}}};function Pz(t,e,A){if(t.length!=e.length)return!1;for(let i=0;it[s.id]),n=A.map(s=>s.type),o=i.filter(s=>!(s&1)),a=t[e.id]>>1;function r(s){let l=[];for(let g=0;gi===n),e);return e.provide&&(A.provides=e.provide(A)),A}create(e){let A=e.facet(z8).find(i=>i.field==this);return(A?.create||this.createF)(e)}slot(e){let A=e[this.id]>>1;return{create:i=>(i.values[A]=this.create(i),1),update:(i,n)=>{let o=i.values[A],a=this.updateF(o,n);return this.compareF(o,a)?0:(i.values[A]=a,1)},reconfigure:(i,n)=>{let o=i.facet(z8),a=n.facet(z8),r;return(r=o.find(s=>s.field==this))&&r!=a.find(s=>s.field==this)?(i.values[A]=r.create(i),1):n.config.address[this.id]!=null?(i.values[A]=n.field(this),0):(i.values[A]=this.create(i),1)}}}init(e){return[this,z8.of({field:this,create:e})]}get extension(){return this}},K1={lowest:4,low:3,default:2,high:1,highest:0};function b4(t){return e=>new Z8(e,t)}var ac={highest:b4(K1.highest),high:b4(K1.high),default:b4(K1.default),low:b4(K1.low),lowest:b4(K1.lowest)},Z8=class{constructor(e,A){this.inner=e,this.prec=A}},d0=class t{of(e){return new S4(this,e)}reconfigure(e){return t.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},S4=class{constructor(e,A){this.compartment=e,this.inner=A}},X8=class t{constructor(e,A,i,n,o,a){for(this.base=e,this.compartments=A,this.dynamicSlots=i,this.address=n,this.staticValues=o,this.facets=a,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,A,i){let n=[],o=Object.create(null),a=new Map;for(let I of lQA(e,A,a))I instanceof Ma?n.push(I):(o[I.facet.id]||(o[I.facet.id]=[])).push(I);let r=Object.create(null),s=[],l=[];for(let I of n)r[I.id]=l.length<<1,l.push(d=>I.slot(d));let g=i?.config.facets;for(let I in o){let d=o[I],h=d[0].facet,E=g&&g[I]||[];if(d.every(f=>f.type==0))if(r[h.id]=s.length<<1|1,bS(E,d))s.push(i.facet(h));else{let f=h.combine(d.map(m=>m.value));s.push(i&&h.compare(f,i.facet(h))?i.facet(h):f)}else{for(let f of d)f.type==0?(r[f.id]=s.length<<1|1,s.push(f.value)):(r[f.id]=l.length<<1,l.push(m=>f.dynamicSlot(m)));r[h.id]=l.length<<1,l.push(f=>sQA(f,h,d))}}let C=l.map(I=>I(r));return new t(e,a,C,r,s,o)}};function lQA(t,e,A){let i=[[],[],[],[],[]],n=new Map;function o(a,r){let s=n.get(a);if(s!=null){if(s<=r)return;let l=i[s].indexOf(a);l>-1&&i[s].splice(l,1),a instanceof S4&&A.delete(a.compartment)}if(n.set(a,r),Array.isArray(a))for(let l of a)o(l,r);else if(a instanceof S4){if(A.has(a.compartment))throw new RangeError("Duplicate use of compartment in extensions");let l=e.get(a.compartment)||a.inner;A.set(a.compartment,l),o(l,r)}else if(a instanceof Z8)o(a.inner,a.prec);else if(a instanceof Ma)i[r].push(a),a.provides&&o(a.provides,r);else if(a instanceof FE)i[r].push(a),a.facet.extensions&&o(a.facet.extensions,K1.default);else{let l=a.extension;if(!l)throw new Error(`Unrecognized extension value in extension set (${a}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);o(l,r)}}return o(t,K1.default),i.reduce((a,r)=>a.concat(r))}function M4(t,e){if(e&1)return 2;let A=e>>1,i=t.status[A];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;t.status[A]=4;let n=t.computeSlot(t,t.config.dynamicSlots[A]);return t.status[A]=2|n}function $8(t,e){return e&1?t.config.staticValues[e>>1]:t.values[e>>1]}var jz=At.define(),CS=At.define({combine:t=>t.some(e=>e),static:!0}),AP=At.define({combine:t=>t.length?t[0]:void 0,static:!0}),eP=At.define(),tP=At.define(),iP=At.define(),qz=At.define({combine:t=>t.length?t[0]:!1}),al=class{constructor(e,A){this.type=e,this.value=A}static define(){return new uS}},uS=class{of(e){return new al(this,e)}},fS=class{constructor(e){this.map=e}of(e){return new Wi(this,e)}},Wi=(()=>{class t{constructor(A,i){this.type=A,this.value=i}map(A){let i=this.type.map(this.value,A);return i===void 0?void 0:i==this.value?this:new t(this.type,i)}is(A){return this.type==A}static define(A={}){return new fS(A.map||(i=>i))}static mapEffects(A,i){if(!A.length)return A;let n=[];for(let o of A){let a=o.map(i);a&&n.push(a)}return n}}return t.reconfigure=t.define(),t.appendConfig=t.define(),t})(),I0=(()=>{class t{constructor(A,i,n,o,a,r){this.startState=A,this.changes=i,this.selection=n,this.effects=o,this.annotations=a,this.scrollIntoView=r,this._doc=null,this._state=null,n&&$z(n,i.newLength),a.some(s=>s.type==t.time)||(this.annotations=a.concat(t.time.of(Date.now())))}static create(A,i,n,o,a,r){return new t(A,i,n,o,a,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(A){for(let i of this.annotations)if(i.type==A)return i.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(A){let i=this.annotation(t.userEvent);return!!(i&&(i==A||i.length>A.length&&i.slice(0,A.length)==A&&i[A.length]=="."))}}return t.time=al.define(),t.userEvent=al.define(),t.addToHistory=al.define(),t.remote=al.define(),t})();function gQA(t,e){let A=[];for(let i=0,n=0;;){let o,a;if(i=t[i]))o=t[i++],a=t[i++];else if(n=0;n--){let o=i[n](t);o instanceof I0?t=o:Array.isArray(o)&&o.length==1&&o[0]instanceof I0?t=o[0]:t=oP(e,LE(o),!1)}return t}function CQA(t){let e=t.startState,A=e.facet(iP),i=t;for(let n=A.length-1;n>=0;n--){let o=A[n](t);o&&Object.keys(o).length&&(i=nP(i,pS(e,o,t.changes.newLength),!0))}return i==t?t:I0.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}var IQA=[];function LE(t){return t==null?IQA:Array.isArray(t)?t:[t]}var Uo=(function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t})(Uo||(Uo={})),dQA=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,mS;try{mS=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(t){}function BQA(t){if(mS)return mS.test(t);for(let e=0;e"\x80"&&(A.toUpperCase()!=A.toLowerCase()||dQA.test(A)))return!0}return!1}function EQA(t){return e=>{if(!/\S/.test(e))return Uo.Space;if(BQA(e))return Uo.Word;for(let A=0;A-1)return Uo.Word;return Uo.Other}}var qa=(()=>{class t{constructor(A,i,n,o,a,r){this.config=A,this.doc=i,this.selection=n,this.values=o,this.status=A.statusTemplate.slice(),this.computeSlot=a,r&&(r._state=this);for(let s=0;so.set(g,l)),i=null),o.set(s.value.compartment,s.value.extension)):s.is(Wi.reconfigure)?(i=null,n=s.value):s.is(Wi.appendConfig)&&(i=null,n=LE(n).concat(s.value));let a;i?a=A.startState.values.slice():(i=X8.resolve(n,o,this),a=new t(i,this.doc,this.selection,i.dynamicSlots.map(()=>null),(l,g)=>g.reconfigure(l,this),null).values);let r=A.startState.facet(CS)?A.newSelection:A.newSelection.asSingle();new t(i,A.newDoc,r,a,(s,l)=>l.update(s,A),A)}replaceSelection(A){return typeof A=="string"&&(A=this.toText(A)),this.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:A},range:Ie.cursor(i.from+A.length)}))}changeByRange(A){let i=this.selection,n=A(i.ranges[0]),o=this.changes(n.changes),a=[n.range],r=LE(n.effects);for(let s=1;sr.spec.fromJSON(s,l)))}}return t.create({doc:A.doc,selection:Ie.fromJSON(A.selection),extensions:i.extensions?o.concat([i.extensions]):o})}static create(A={}){let i=X8.resolve(A.extensions||[],new Map),n=A.doc instanceof bn?A.doc:bn.of((A.doc||"").split(i.staticFacet(t.lineSeparator)||BS)),o=A.selection?A.selection instanceof Ie?A.selection:Ie.single(A.selection.anchor,A.selection.head):Ie.single(0);return $z(o,n.length),i.staticFacet(CS)||(o=o.asSingle()),new t(i,n,o,i.dynamicSlots.map(()=>null),(a,r)=>r.create(a),null)}get tabSize(){return this.facet(t.tabSize)}get lineBreak(){return this.facet(t.lineSeparator)||` +`}get readOnly(){return this.facet(qz)}phrase(A,...i){for(let n of this.facet(t.phrases))if(Object.prototype.hasOwnProperty.call(n,A)){A=n[A];break}return i.length&&(A=A.replace(/\$(\$|\d*)/g,(n,o)=>{if(o=="$")return"$";let a=+(o||1);return!a||a>i.length?n:i[a-1]})),A}languageDataAt(A,i,n=-1){let o=[];for(let a of this.facet(jz))for(let r of a(this,i,n))Object.prototype.hasOwnProperty.call(r,A)&&o.push(r[A]);return o}charCategorizer(A){let i=this.languageDataAt("wordChars",A);return EQA(i.length?i[0]:"")}wordAt(A){let{text:i,from:n,length:o}=this.doc.lineAt(A),a=this.charCategorizer(A),r=A-n,s=A-n;for(;r>0;){let l=ja(i,r,!1);if(a(i.slice(l,r))!=Uo.Word)break;r=l}for(;se.length?e[0]:4}),t.lineSeparator=AP,t.readOnly=qz,t.phrases=At.define({compare(e,A){let i=Object.keys(e),n=Object.keys(A);return i.length==n.length&&i.every(o=>e[o]==A[o])}}),t.languageData=jz,t.changeFilter=eP,t.transactionFilter=tP,t.transactionExtender=iP,t})();d0.reconfigure=Wi.define();function Mr(t,e,A={}){let i={};for(let n of t)for(let o of Object.keys(n)){let a=n[o],r=i[o];if(r===void 0)i[o]=a;else if(!(r===a||a===void 0))if(Object.hasOwnProperty.call(A,o))i[o]=A[o](r,a);else throw new Error("Config merge conflict for field "+o)}for(let n in e)i[n]===void 0&&(i[n]=e[n]);return i}var gg=class{eq(e){return this==e}range(e,A=e){return k4.create(e,A,this)}};gg.prototype.startSide=gg.prototype.endSide=0;gg.prototype.point=!1;gg.prototype.mapMode=zr.TrackDel;function MS(t,e){return t==e||t.constructor==e.constructor&&t.eq(e)}var k4=class t{constructor(e,A,i){this.from=e,this.to=A,this.value=i}static create(e,A,i){return new t(e,A,i)}};function wS(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}var DS=class t{constructor(e,A,i,n){this.from=e,this.to=A,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(e,A,i,n=0){let o=i?this.to:this.from;for(let a=n,r=o.length;;){if(a==r)return a;let s=a+r>>1,l=o[s]-e||(i?this.value[s].endSide:this.value[s].startSide)-A;if(s==a)return l>=0?a:r;l>=0?r=s:a=s+1}}between(e,A,i,n){for(let o=this.findIndex(A,-1e9,!0),a=this.findIndex(i,1e9,!1,o);od||I==d&&l.startSide>0&&l.endSide<=0)continue;(d-I||l.endSide-l.startSide)<0||(a<0&&(a=I),l.point&&(r=Math.max(r,d-I)),i.push(l),n.push(I-a),o.push(d-a))}return{mapped:i.length?new t(n,o,i,r):null,pos:a}}},io=(()=>{class t{constructor(A,i,n,o){this.chunkPos=A,this.chunk=i,this.nextLayer=n,this.maxPoint=o}static create(A,i,n,o){return new t(A,i,n,o)}get length(){let A=this.chunk.length-1;return A<0?0:Math.max(this.chunkEnd(A),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let A=this.nextLayer.size;for(let i of this.chunk)A+=i.value.length;return A}chunkEnd(A){return this.chunkPos[A]+this.chunk[A].length}update(A){let{add:i=[],sort:n=!1,filterFrom:o=0,filterTo:a=this.length}=A,r=A.filter;if(i.length==0&&!r)return this;if(n&&(i=i.slice().sort(wS)),this.isEmpty)return i.length?t.of(i):this;let s=new Aw(this,null,-1).goto(0),l=0,g=[],C=new jr;for(;s.value||l=0){let I=i[l++];C.addInner(I.from,I.to,I.value)||g.push(I)}else s.rangeIndex==1&&s.chunkIndexthis.chunkEnd(s.chunkIndex)||as.to||a=a&&A<=a+r.length&&r.between(a,A-a,i-a,n)===!1)return}this.nextLayer.between(A,i,n)}}iter(A=0){return x4.from([this]).goto(A)}get isEmpty(){return this.nextLayer==this}static iter(A,i=0){return x4.from(A).goto(i)}static compare(A,i,n,o,a=-1){let r=A.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),s=i.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),l=Vz(r,s,n),g=new U1(r,l,a),C=new U1(s,l,a);n.iterGaps((I,d,h)=>Wz(g,I,C,d,h,o)),n.empty&&n.length==0&&Wz(g,0,C,0,0,o)}static eq(A,i,n=0,o){o==null&&(o=999999999);let a=A.filter(C=>!C.isEmpty&&i.indexOf(C)<0),r=i.filter(C=>!C.isEmpty&&A.indexOf(C)<0);if(a.length!=r.length)return!1;if(!a.length)return!0;let s=Vz(a,r),l=new U1(a,s,0).goto(n),g=new U1(r,s,0).goto(n);for(;;){if(l.to!=g.to||!yS(l.active,g.active)||l.point&&(!g.point||!MS(l.point,g.point)))return!1;if(l.to>o)return!0;l.next(),g.next()}}static spans(A,i,n,o,a=-1){let r=new U1(A,null,a).goto(i),s=i,l=r.openStart;for(;;){let g=Math.min(r.to,n);if(r.point){let C=r.activeForPoint(r.to),I=r.pointFroms&&(o.span(s,g,r.active,l),l=r.openEnd(g));if(r.to>n)return l+(r.point&&r.to>n?1:0);s=r.to,r.next()}}static of(A,i=!1){let n=new jr;for(let o of A instanceof k4?[A]:i?hQA(A):A)n.add(o.from,o.to,o.value);return n.finish()}static join(A){if(!A.length)return t.empty;let i=A[A.length-1];for(let n=A.length-2;n>=0;n--)for(let o=A[n];o!=t.empty;o=o.nextLayer)i=new t(o.chunkPos,o.chunk,i,Math.max(o.maxPoint,i.maxPoint));return i}}return t.empty=new t([],[],null,-1),t})();function hQA(t){if(t.length>1)for(let e=t[0],A=1;A0)return t.slice().sort(wS);e=i}return t}io.empty.nextLayer=io.empty;var jr=class t{finishChunk(e){this.chunks.push(new DS(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,A,i){this.addInner(e,A,i)||(this.nextLayer||(this.nextLayer=new t)).add(e,A,i)}addInner(e,A,i){let n=e-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return n<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(A-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=A,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,A-e)),!0)}addChunk(e,A){if((e-this.lastTo||A.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,A.maxPoint),this.chunks.push(A),this.chunkPos.push(e);let i=A.value.length-1;return this.last=A.value[i],this.lastFrom=A.from[i]+e,this.lastTo=A.to[i]+e,!0}finish(){return this.finishInner(io.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let A=io.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,A}};function Vz(t,e,A){let i=new Map;for(let o of t)for(let a=0;a=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new Aw(a,A,i,o));return n.length==1?n[0]:new t(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,A=-1e9){for(let i of this.heap)i.goto(e,A);for(let i=this.heap.length>>1;i>=0;i--)IS(this.heap,i);return this.next(),this}forward(e,A){for(let i of this.heap)i.forward(e,A);for(let i=this.heap.length>>1;i>=0;i--)IS(this.heap,i);(this.to-e||this.value.endSide-A)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),IS(this.heap,0)}}};function IS(t,e){for(let A=t[e];;){let i=(e<<1)+1;if(i>=t.length)break;let n=t[i];if(i+1=0&&(n=t[i+1],i++),A.compare(n)<0)break;t[i]=A,t[e]=n,e=i}}var U1=class{constructor(e,A,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=x4.from(e,A,i)}goto(e,A=-1e9){return this.cursor.goto(e,A),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=A,this.openStart=-1,this.next(),this}forward(e,A){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-A)<0;)this.removeActive(this.minActive);this.cursor.forward(e,A)}removeActive(e){P8(this.active,e),P8(this.activeTo,e),P8(this.activeRank,e),this.minActive=Zz(this.active,this.activeTo)}addActive(e){let A=0,{value:i,to:n,rank:o}=this.cursor;for(;A0;)A++;j8(this.active,A,i),j8(this.activeTo,A,n),j8(this.activeRank,A,o),e&&j8(e,A,this.cursor.from),this.minActive=Zz(this.active,this.activeTo)}next(){let e=this.to,A=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let n=this.minActive;if(n>-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&P8(i,n)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let o=this.cursor.value;if(!o.point)this.addActive(i),this.cursor.next();else if(A&&this.cursor.to==this.to&&this.cursor.from=0&&i[n]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&A.push(this.active[i]);return A.reverse()}openEnd(e){let A=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)A++;return A}};function Wz(t,e,A,i,n,o){t.goto(e),A.goto(i);let a=i+n,r=i,s=i-e,l=!!o.boundChange;for(let g=!1;;){let C=t.to+s-A.to,I=C||t.endSide-A.endSide,d=I<0?t.to+s:A.to,h=Math.min(d,a);if(t.point||A.point?(t.point&&A.point&&MS(t.point,A.point)&&yS(t.activeForPoint(t.to),A.activeForPoint(A.to))||o.comparePoint(r,h,t.point,A.point),g=!1):(g&&o.boundChange(r),h>r&&!yS(t.active,A.active)&&o.compareRange(r,h,t.active,A.active),l&&ha)break;r=d,I<=0&&t.next(),I>=0&&A.next()}}function yS(t,e){if(t.length!=e.length)return!1;for(let A=0;A=e;i--)t[i+1]=t[i];t[e]=A}function Zz(t,e){let A=-1,i=1e9;for(let n=0;n=e)return n;if(n==t.length)break;o+=t.charCodeAt(n)==9?A-o%A:1,n=ja(t,n)}return i===!0?-1:t.length}var aP=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),SS=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),rP=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},cg=class{constructor(e,A){this.rules=[];let{finish:i}=A||{};function n(a){return/^@/.test(a)?[a]:a.split(/,\s*/)}function o(a,r,s,l){let g=[],C=/^@(\w+)\b/.exec(a[0]),I=C&&C[1]=="keyframes";if(C&&r==null)return s.push(a[0]+";");for(let d in r){let h=r[d];if(/&/.test(d))o(d.split(/,\s*/).map(E=>a.map(f=>E.replace(/&/,f))).reduce((E,f)=>E.concat(f)),h,s);else if(h&&typeof h=="object"){if(!C)throw new RangeError("The value of a property ("+d+") should be a primitive value.");o(n(d),h,g,I)}else h!=null&&g.push(d.replace(/_.*/,"").replace(/[A-Z]/g,E=>"-"+E.toLowerCase())+": "+h+";")}(g.length||I)&&s.push((i&&!C&&!l?a.map(i):a).join(", ")+" {"+g.join(" ")+"}")}for(let a in e)o(n(a),e[a],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=rP[aP]||1;return rP[aP]=e+1,"\u037C"+e.toString(36)}static mount(e,A,i){let n=e[SS],o=i&&i.nonce;n?o&&n.setNonce(o):n=new kS(e,o),n.mount(Array.isArray(A)?A:[A],e)}},sP=new Map,kS=class{constructor(e,A){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let o=sP.get(i);if(o)return e[SS]=o;this.sheet=new n.CSSStyleSheet,sP.set(i,this)}else this.styleTag=i.createElement("style"),A&&this.styleTag.setAttribute("nonce",A);this.modules=[],e[SS]=this}mount(e,A){let i=this.sheet,n=0,o=0;for(let a=0;a-1&&(this.modules.splice(s,1),o--,s=-1),s==-1){if(this.modules.splice(o++,0,r),i)for(let l=0;l",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},QQA=typeof navigator<"u"&&/Mac/.test(navigator.platform),uQA=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(er=0;er<10;er++)BC[48+er]=BC[96+er]=String(er);var er;for(er=1;er<=24;er++)BC[er+111]="F"+er;var er;for(er=65;er<=90;er++)BC[er]=String.fromCharCode(er+32),KE[er]=String.fromCharCode(er);var er;for(tw in BC)KE.hasOwnProperty(tw)||(KE[tw]=BC[tw]);var tw;function lP(t){var e=QQA&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||uQA&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",A=!e&&t.key||(t.shiftKey?KE:BC)[t.keyCode]||t.key||"Unidentified";return A=="Esc"&&(A="Escape"),A=="Del"&&(A="Delete"),A=="Left"&&(A="ArrowLeft"),A=="Up"&&(A="ArrowUp"),A=="Right"&&(A="ArrowRight"),A=="Down"&&(A="ArrowDown"),A}function no(){var t=arguments[0];typeof t=="string"&&(t=document.createElement(t));var e=1,A=arguments[1];if(A&&typeof A=="object"&&A.nodeType==null&&!Array.isArray(A)){for(var i in A)if(Object.prototype.hasOwnProperty.call(A,i)){var n=A[i];typeof n=="string"?t.setAttribute(i,n):n!=null&&(t[i]=n)}e++}for(;e2),at={mac:IP||/Mac/.test(Rs.platform),windows:/Win/.test(Rs.platform),linux:/Linux|X11/.test(Rs.platform),ie:Fw,ie_version:XP?OS.documentMode||6:HS?+HS[1]:YS?+YS[1]:0,gecko:cP,gecko_version:cP?+(/Firefox\/(\d+)/.exec(Rs.userAgent)||[0,0])[1]:0,chrome:!!xS,chrome_version:xS?+xS[1]:0,ios:IP,android:/Android\b/.test(Rs.userAgent),webkit:CP,webkit_version:CP?+(/\bAppleWebKit\/(\d+)/.exec(Rs.userAgent)||[0,0])[1]:0,safari:zS,safari_version:zS?+(/\bVersion\/(\d+(\.\d+)?)/.exec(Rs.userAgent)||[0,0])[1]:0,tabSize:OS.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Lk(t,e){for(let A in t)A=="class"&&e.class?e.class+=" "+t.class:A=="style"&&e.style?e.style+=";"+t.style:e[A]=t[A];return e}var hw=Object.create(null);function Gk(t,e,A){if(t==e)return!0;t||(t=hw),e||(e=hw);let i=Object.keys(t),n=Object.keys(e);if(i.length-(A&&i.indexOf(A)>-1?1:0)!=n.length-(A&&n.indexOf(A)>-1?1:0))return!1;for(let o of i)if(o!=A&&(n.indexOf(o)==-1||t[o]!==e[o]))return!1;return!0}function fQA(t,e){for(let A=t.attributes.length-1;A>=0;A--){let i=t.attributes[A].name;e[i]==null&&t.removeAttribute(i)}for(let A in e){let i=e[A];A=="style"?t.style.cssText=i:t.getAttribute(A)!=i&&t.setAttribute(A,i)}}function dP(t,e,A){let i=!1;if(e)for(let n in e)A&&n in A||(i=!0,n=="style"?t.style.cssText="":t.removeAttribute(n));if(A)for(let n in A)e&&e[n]==A[n]||(i=!0,n=="style"?t.style.cssText=A[n]:t.setAttribute(n,A[n]));return i}function pQA(t){let e=Object.create(null);for(let A=0;A0?3e8:-4e8:A>0?1e8:-1e8,new z1(e,A,A,i,e.widget||null,!1)}static replace(e){let A=!!e.block,i,n;if(e.isBlockGap)i=-5e8,n=4e8;else{let{start:o,end:a}=$P(e,A);i=(o?A?-3e8:-1:5e8)-1,n=(a?A?2e8:1:-6e8)+1}return new z1(e,i,n,A,e.widget||null,!0)}static line(e){return new P4(e)}static set(e,A=!1){return io.of(e,A)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};St.none=io.empty;var z4=class t extends St{constructor(e){let{start:A,end:i}=$P(e);super(A?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Lk(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||hw}eq(e){return this==e||e instanceof t&&this.tagName==e.tagName&&Gk(this.attrs,e.attrs)}range(e,A=e){if(e>=A)throw new RangeError("Mark decorations may not be empty");return super.range(e,A)}};z4.prototype.point=!1;var P4=class t extends St{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof t&&this.spec.class==e.spec.class&&Gk(this.spec.attributes,e.spec.attributes)}range(e,A=e){if(A!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,A)}};P4.prototype.mapMode=zr.TrackBefore;P4.prototype.point=!0;var z1=class t extends St{constructor(e,A,i,n,o,a){super(A,i,o,e),this.block=n,this.isReplace=a,this.mapMode=n?A<=0?zr.TrackBefore:zr.TrackAfter:zr.TrackDel}get type(){return this.startSide!=this.endSide?Vr.WidgetRange:this.startSide<=0?Vr.WidgetBefore:Vr.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof t&&mQA(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,A=e){if(this.isReplace&&(e>A||e==A&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&A!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,A)}};z1.prototype.point=!0;function $P(t,e=!1){let{inclusiveStart:A,inclusiveEnd:i}=t;return A==null&&(A=t.inclusive),i==null&&(i=t.inclusive),{start:A??e,end:i??e}}function mQA(t,e){return t==e||!!(t&&e&&t.compare(e))}function HE(t,e,A,i=0){let n=A.length-1;n>=0&&A[n]+i>=t?A[n]=Math.max(A[n],e):A.push(t,e)}var Qw=class t extends gg{constructor(e,A){super(),this.tagName=e,this.attributes=A}eq(e){return e==this||e instanceof t&&this.tagName==e.tagName&&Gk(this.attributes,e.attributes)}static create(e){return new t(e.tagName,e.attributes||hw)}static set(e,A=!1){return io.of(e,A)}};Qw.prototype.startSide=Qw.prototype.endSide=-1;function j4(t){let e;return t.nodeType==11?e=t.getSelection?t:t.ownerDocument:e=t,e.getSelection()}function PS(t,e){return e?t==e||t.contains(e.nodeType!=1?e.parentNode:e):!1}function L4(t,e){if(!e.anchorNode)return!1;try{return PS(t,e.anchorNode)}catch(A){return!1}}function Cw(t){return t.nodeType==3?q4(t,0,t.nodeValue.length).getClientRects():t.nodeType==1?t.getClientRects():[]}function G4(t,e,A,i){return A?BP(t,e,A,i,-1)||BP(t,e,A,i,1):!1}function Z2(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e}function uw(t){return t.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function BP(t,e,A,i,n){for(;;){if(t==A&&e==i)return!0;if(e==(n<0?0:QC(t))){if(t.nodeName=="DIV")return!1;let o=t.parentNode;if(!o||o.nodeType!=1)return!1;e=Z2(t)+(n<0?0:1),t=o}else if(t.nodeType==1){if(t=t.childNodes[e+(n<0?-1:0)],t.nodeType==1&&t.contentEditable=="false")return!1;e=n<0?QC(t):0}else return!1}}function QC(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function fw(t,e){let A=e?t.left:t.right;return{left:A,right:A,top:t.top,bottom:t.bottom}}function wQA(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function Aj(t,e){let A=e.width/t.offsetWidth,i=e.height/t.offsetHeight;return(A>.995&&A<1.005||!isFinite(A)||Math.abs(e.width-t.offsetWidth)<1)&&(A=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-t.offsetHeight)<1)&&(i=1),{scaleX:A,scaleY:i}}function DQA(t,e,A,i,n,o,a,r){let s=t.ownerDocument,l=s.defaultView||window;for(let g=t,C=!1;g&&!C;)if(g.nodeType==1){let I,d=g==s.body,h=1,E=1;if(d)I=wQA(l);else{if(/^(fixed|sticky)$/.test(getComputedStyle(g).position)&&(C=!0),g.scrollHeight<=g.clientHeight&&g.scrollWidth<=g.clientWidth){g=g.assignedSlot||g.parentNode;continue}let v=g.getBoundingClientRect();({scaleX:h,scaleY:E}=Aj(g,v)),I={left:v.left,right:v.left+g.clientWidth*h,top:v.top,bottom:v.top+g.clientHeight*E}}let f=0,m=0;if(n=="nearest")e.top0&&e.bottom>I.bottom+m&&(m=e.bottom-I.bottom+a)):e.bottom>I.bottom&&(m=e.bottom-I.bottom+a,A<0&&e.top-m0&&e.right>I.right+f&&(f=e.right-I.right+o)):e.right>I.right&&(f=e.right-I.right+o,A<0&&e.leftI.bottom||e.leftI.right)&&(e={left:Math.max(e.left,I.left),right:Math.min(e.right,I.right),top:Math.max(e.top,I.top),bottom:Math.min(e.bottom,I.bottom)}),g=g.assignedSlot||g.parentNode}else if(g.nodeType==11)g=g.host;else break}function ej(t,e=!0){let A=t.ownerDocument,i=null,n=null;for(let o=t.parentNode;o&&!(o==A.body||(!e||i)&&n);)if(o.nodeType==1)!n&&o.scrollHeight>o.clientHeight&&(n=o),e&&!i&&o.scrollWidth>o.clientWidth&&(i=o),o=o.assignedSlot||o.parentNode;else if(o.nodeType==11)o=o.host;else break;return{x:i,y:n}}var jS=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:A,focusNode:i}=e;this.set(A,Math.min(e.anchorOffset,A?QC(A):0),i,Math.min(e.focusOffset,i?QC(i):0))}set(e,A,i,n){this.anchorNode=e,this.anchorOffset=A,this.focusNode=i,this.focusOffset=n}},O1=null;at.safari&&at.safari_version>=26&&(O1=!1);function tj(t){if(t.setActive)return t.setActive();if(O1)return t.focus(O1);let e=[];for(let A=t;A&&(e.push(A,A.scrollTop,A.scrollLeft),A!=A.ownerDocument);A=A.parentNode);if(t.focus(O1==null?{get preventScroll(){return O1={preventScroll:!0},!0}}:void 0),!O1){O1=!1;for(let A=0;AMath.max(0,t.document.documentElement.scrollHeight-t.innerHeight-4):t.scrollTop>Math.max(1,t.scrollHeight-t.clientHeight-4)}function nj(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i>0)return{node:A,offset:i};if(A.nodeType==1&&i>0){if(A.contentEditable=="false")return null;A=A.childNodes[i-1],i=QC(A)}else if(A.parentNode&&!uw(A))i=Z2(A),A=A.parentNode;else return null}}function oj(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i=A){if(r.level==i)return a;(o<0||(n!=0?n<0?r.fromA:e[o].level>r.level))&&(o=a)}}if(o<0)throw new RangeError("Index out of range");return o}};function sj(t,e){if(t.length!=e.length)return!1;for(let A=0;A=0;E-=3)if(B0[E+1]==-d){let f=B0[E+2],m=f&2?n:f&4?f&1?o:n:0;m&&(Wo[C]=Wo[B0[E]]=m),r=E;break}}else{if(B0.length==189)break;B0[r++]=C,B0[r++]=I,B0[r++]=s}else if((h=Wo[C])==2||h==1){let E=h==n;s=E?0:1;for(let f=r-3;f>=0;f-=3){let m=B0[f+2];if(m&2)break;if(E)B0[f+2]|=2;else{if(m&4)break;B0[f+2]|=4}}}}}function _QA(t,e,A,i){for(let n=0,o=i;n<=A.length;n++){let a=n?A[n-1].to:t,r=ns;)h==f&&(h=A[--E].from,f=E?A[E-1].to:t),Wo[--h]=d;s=g}else o=l,s++}}}function VS(t,e,A,i,n,o,a){let r=i%2?2:1;if(i%2==n%2)for(let s=e,l=0;ss&&a.push(new dg(s,E.from,d));let f=E.direction==P1!=!(d%2);WS(t,f?i+1:i,n,E.inner,E.from,E.to,a),s=E.to}h=E.to}else{if(h==A||(g?Wo[h]!=r:Wo[h]==r))break;h++}I?VS(t,s,h,i+1,n,I,a):se;){let g=!0,C=!1;if(!l||s>o[l-1].to){let E=Wo[s-1];E!=r&&(g=!1,C=E==16)}let I=!g&&r==1?[]:null,d=g?i:i+1,h=s;A:for(;;)if(l&&h==o[l-1].to){if(C)break A;let E=o[--l];if(!g)for(let f=E.from,m=l;;){if(f==e)break A;if(m&&o[m-1].to==f)f=o[--m].from;else{if(Wo[f-1]==r)break A;break}}if(I)I.push(E);else{E.toWo.length;)Wo[Wo.length]=256;let i=[],n=e==P1?0:1;return WS(t,n,n,A,0,t.length,i),i}function lj(t){return[new dg(0,t,0)]}var gj="";function NQA(t,e,A,i,n){var o;let a=i.head-t.from,r=dg.find(e,a,(o=i.bidiLevel)!==null&&o!==void 0?o:-1,i.assoc),s=e[r],l=s.side(n,A);if(a==l){let I=r+=n?1:-1;if(I<0||I>=e.length)return null;s=e[r=I],a=s.side(!n,A),l=s.side(n,A)}let g=ja(t.text,a,s.forward(n,A));(gs.to)&&(g=l),gj=t.text.slice(Math.min(a,g),Math.max(a,g));let C=r==(n?e.length-1:0)?null:e[r+(n?1:-1)];return C&&g==l&&C.level+(n?0:1)t.some(e=>e)}),hj=At.define({combine:t=>t.some(e=>e)}),Qj=At.define(),K4=class t{constructor(e,A="nearest",i="nearest",n=5,o=5,a=!1){this.range=e,this.y=A,this.x=i,this.yMargin=n,this.xMargin=o,this.isSnapshot=a}map(e){return e.empty?this:new t(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new t(Ie.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},iw=Wi.define({map:(t,e)=>t.map(e)}),uj=Wi.define();function Sr(t,e,A){let i=t.facet(dj);i.length?i[0](e):window.onerror&&window.onerror(String(e),A,void 0,void 0,e)||(A?console.error(A+":",e):console.error(e))}var EC=At.define({combine:t=>t.length?t[0]:!0}),LQA=0,TE=At.define({combine(t){return t.filter((e,A)=>{for(let i=0;i{let s=[];return a&&s.push(Lw.of(l=>{let g=l.plugin(r);return g?a(g):St.none})),o&&s.push(o(r)),s})}static fromClass(e,A){return t.define((i,n)=>new e(i,n),A)}},U4=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let A=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(A)}catch(i){if(Sr(A.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch(n){}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(A){Sr(e.state,A,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var A;if(!((A=this.value)===null||A===void 0)&&A.destroy)try{this.value.destroy()}catch(i){Sr(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},QP=At.define(),ZS=At.define(),Lw=At.define(),fj=At.define(),Jk=At.define(),V4=At.define(),pj=At.define();function uP(t,e){let A=t.state.facet(pj);if(!A.length)return A;let i=A.map(o=>o instanceof Function?o(t):o),n=[];return io.spans(i,e.from,e.to,{point(){},span(o,a,r,s){let l=o-e.from,g=a-e.from,C=n;for(let I=r.length-1;I>=0;I--,s--){let d=r[I].spec.bidiIsolate,h;if(d==null&&(d=FQA(e.text,l,g)),s>0&&C.length&&(h=C[C.length-1]).to==l&&h.direction==d)h.to=g,C=h.inner;else{let E={from:l,to:g,direction:d,inner:[]};C.push(E),C=E.inner}}}}),n}var mj=At.define();function Ok(t){let e=0,A=0,i=0,n=0;for(let o of t.state.facet(mj)){let a=o(t);a&&(a.left!=null&&(e=Math.max(e,a.left)),a.right!=null&&(A=Math.max(A,a.right)),a.top!=null&&(i=Math.max(i,a.top)),a.bottom!=null&&(n=Math.max(n,a.bottom)))}return{left:e,right:A,top:i,bottom:n}}var R4=At.define(),sc=class t{constructor(e,A,i,n){this.fromA=e,this.toA=A,this.fromB=i,this.toB=n}join(e){return new t(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let A=e.length,i=this;for(;A>0;A--){let n=e[A-1];if(!(n.fromA>i.toA)){if(n.toAn.push(new sc(o,a,r,s))),this.changedRanges=n}static create(e,A,i){return new t(e,A,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},GQA=[],wa=class{constructor(e,A,i=0){this.dom=e,this.length=A,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return GQA}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let A=this.domAttrs;A&&fQA(this.dom,A)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,A=this.posAtStart){let i=A;for(let n of this.children){if(n==e)return i;i+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,A){return null}domPosFor(e,A){let i=Z2(this.dom),n=this.length?e>0:A>0;return new E0(this.parent.dom,i+(n?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof jE)return e;return null}static get(e){return e.cmTile}},PE=class extends wa{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let A=this.dom,i=null,n,o=e?.node==A?e:null,a=0;for(let r of this.children){if(r.sync(e),a+=r.length+r.breakAfter,n=i?i.nextSibling:A.firstChild,o&&n!=r.dom&&(o.written=!0),r.dom.parentNode==A)for(;n&&n!=r.dom;)n=fP(n);else A.insertBefore(r.dom,n);i=r.dom}for(n=i?i.nextSibling:A.firstChild,o&&n&&(o.written=!0);n;)n=fP(n);this.length=a}};function fP(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var jE=class extends PE{constructor(e,A){super(A),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let A=wa.get(e);if(A&&this.owns(A))return A;e=e.parentNode}}blockTiles(e){for(let A=[],i=this,n=0,o=0;;)if(n==i.children.length){if(!A.length)return;i=i.parent,i.breakAfter&&o++,n=A.pop()}else{let a=i.children[n++];if(a instanceof hC)A.push(n),i=a,n=0;else{let r=o+a.length,s=e(a,o);if(s!==void 0)return s;o=r+a.breakAfter}}}resolveBlock(e,A){let i,n=-1,o,a=-1;if(this.blockTiles((r,s)=>{let l=s+r.length;if(e>=s&&e<=l){if(r.isWidget()&&A>=-1&&A<=1){if(r.flags&32)return!0;r.flags&16&&(i=void 0)}(se||e==s&&(A>1?r.length:r.covers(-1)))&&(!o||!r.isWidget()&&o.isWidget())&&(o=r,a=e-s)}}),!i&&!o)throw new Error("No tile at position "+e);return i&&A<0||!o?{tile:i,offset:n}:{tile:o,offset:a}}},hC=class t extends PE{constructor(e,A){super(e),this.wrapper=A}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,A){let i=new t(A||document.createElement(e.tagName),e);return A||(i.flags|=4),i}},qE=class t extends PE{constructor(e,A){super(e),this.attrs=A}isLine(){return!0}static start(e,A,i){let n=new t(A||document.createElement("div"),e);return(!A||!i)&&(n.flags|=4),n}get domAttrs(){return this.attrs}resolveInline(e,A,i){let n=null,o=-1,a=null,r=-1;function s(g,C){for(let I=0,d=0;I=C&&(h.isComposite()?s(h,C-d):(!a||a.isHidden&&(A>0||i&&UQA(a,h)))&&(E>C||h.flags&32)?(a=h,r=C-d):(di&&(e=i);let n=e,o=e,a=0;e==0&&A<0||e==i&&A>=0?at.chrome||at.gecko||(e?(n--,a=1):o=0)?0:r.length-1];return at.safari&&!a&&s.width==0&&(s=Array.prototype.find.call(r,l=>l.width)||s),a?fw(s,a<0):s||null}static of(e,A){let i=new t(A||document.createTextNode(e),e);return A||(i.flags|=2),i}},j1=class t extends wa{constructor(e,A,i,n){super(e,A,n),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,A){return this.coordsInWidget(e,A,!1)}coordsInWidget(e,A,i){let n=this.widget.coordsAt(this.dom,e,A);if(n)return n;if(i)return fw(this.dom.getBoundingClientRect(),this.length?e==0:A<=0);{let o=this.dom.getClientRects(),a=null;if(!o.length)return null;let r=this.flags&16?!0:this.flags&32?!1:e>0;for(let s=r?o.length-1:0;a=o[s],!(e>0?s==0:s==o.length-1||a.top0;)if(n.isComposite())if(a){if(!e)break;i&&i.break(),e--,a=!1}else if(o==n.children.length){if(!e&&!r.length)break;i&&i.leave(n),a=!!n.breakAfter,{tile:n,index:o}=r.pop(),o++}else{let s=n.children[o],l=s.breakAfter;(A>0?s.length<=e:s.length=0;r--){let s=A.marks[r],l=n.lastChild;if(l instanceof rl&&l.mark.eq(s.mark))l.dom!=s.dom&&l.setDOM(RS(s.dom)),n=l;else{if(this.cache.reused.get(s)){let C=wa.get(s.dom);C&&C.setDOM(RS(s.dom))}let g=rl.of(s.mark,s.dom);n.append(g),n=g}this.cache.reused.set(s,2)}let o=wa.get(e.text);o&&this.cache.reused.set(o,2);let a=new Y1(e.text,e.text.nodeValue);a.flags|=8,n.append(a)}addInlineWidget(e,A,i){let n=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);n||this.flushBuffer();let o=this.ensureMarks(A,i);!n&&!(e.flags&16)&&o.append(this.getBuffer(1)),o.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,A,i){this.flushBuffer(),this.ensureMarks(A,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let A=this.afterWidget||this.lastBlock;A.length+=e,this.pos+=e}addLineStart(e,A){var i;e||(e=wj);let n=qE.start(e,A||((i=this.cache.find(qE))===null||i===void 0?void 0:i.dom),!!A);this.getBlockPos().append(this.lastBlock=this.curLine=n)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,A){var i;let n=this.curLine;for(let o=e.length-1;o>=0;o--){let a=e[o],r;if(A>0&&(r=n.lastChild)&&r instanceof rl&&r.mark.eq(a))n=r,A--;else{let s=rl.of(a,(i=this.cache.find(rl,l=>l.mark.eq(a)))===null||i===void 0?void 0:i.dom);n.append(s),n=s,A=0}}return n}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!pP(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(at.ios&&pP(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(NS,0,32)||new j1(NS.toDOM(),0,NS,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let A=new $S(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-A.rank||this.wrappers[i-1].to-A.to)<0;)i--;this.wrappers.splice(i,0,A)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let A=this.root;for(let i of this.wrappers){let n=A.lastChild;if(i.froma.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);A.append(o),A=o}}return A}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let A=2|(e<0?16:32),i=this.cache.find(VE,void 0,1);return i&&(i.flags=A),i||new VE(A)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},ek=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:n,lineBreak:o,done:a}=this.cursor.next(this.skipCount);if(this.skipCount=0,a)throw new Error("Ran out of text content when drawing inline views");this.text=n;let r=this.textOff=Math.min(e,n.length);return o?null:n.slice(0,r)}let A=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,A);return this.textOff=A,i}},mw=[j1,qE,Y1,rl,VE,hC,jE];for(let t=0;t[]),this.index=mw.map(()=>0),this.reused=new Map}add(e){let A=e.constructor.bucket,i=this.buckets[A];i.length<6?i.push(e):i[this.index[A]=(this.index[A]+1)%6]=e}find(e,A,i=2){let n=e.bucket,o=this.buckets[n],a=this.index[n];for(let r=o.length-1;r>=0;r--){let s=(r+a)%o.length,l=o[s];if((!A||A(l))&&!this.reused.has(l))return o.splice(s,1),s{if(this.cache.add(a),a.isComposite())return!1},enter:a=>this.cache.add(a),leave:()=>{},break:()=>{}}}run(e,A){let i=A&&this.getCompositionContext(A.text);for(let n=0,o=0,a=0;;){let r=an){let l=s-n;this.preserve(l,!a,!r),n=s,o+=l}if(!r)break;A&&r.fromA<=A.range.fromA&&r.toA>=A.range.toA?(this.forward(r.fromA,A.range.fromA,A.range.fromA{if(a.isWidget())if(this.openWidget)this.builder.continueWidget(s-r);else{let l=s>0||r{a.isLine()?this.builder.addLineStart(a.attrs,this.cache.maybeReuse(a)):(this.cache.add(a),a instanceof rl&&n.unshift(a.mark)),this.openWidget=!1},leave:a=>{a.isLine()?n.length&&(n.length=o=0):a instanceof rl&&(n.shift(),o=Math.min(o,n.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,A){let i=null,n=this.builder,o=0,a=io.spans(this.decorations,e,A,{point:(r,s,l,g,C,I)=>{if(l instanceof z1){if(this.disallowBlockEffectsFor[I]){if(l.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.view.state.doc.lineAt(r).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(o=g.length,C>g.length)n.continueWidget(s-r);else{let d=l.widget||(l.block?mP.block:mP.inline),h=TQA(l),E=this.cache.findWidget(d,s-r,h)||j1.of(d,this.view,s-r,h);l.block?(l.startSide>0&&n.addLineStartIfNotCovered(i),n.addBlockWidget(E)):(n.ensureLine(i),n.addInlineWidget(E,g,C))}i=null}else i=JQA(i,l);s>r&&this.text.skip(s-r)},span:(r,s,l,g)=>{for(let C=r;Co,this.openMarks=a}forward(e,A,i=1){A-e<=10?this.old.advance(A-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(A-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let A=[],i=null;for(let n=e.parentNode;;n=n.parentNode){let o=wa.get(n);if(n==this.view.contentDOM)break;o instanceof rl?A.push(o):o?.isLine()?i=o:o instanceof hC||(n.nodeName=="DIV"&&!i&&n!=this.view.contentDOM?i=new qE(n,wj):i||A.push(rl.of(new z4({tagName:n.nodeName.toLowerCase(),attributes:pQA(n)}),n)))}return{line:i,marks:A}}};function pP(t,e){let A=i=>{for(let n of i.children)if((e?n.isText():n.length)||A(n))return!0;return!1};return A(t)}function TQA(t){let e=t.isReplace?(t.startSide<0?64:0)|(t.endSide>0?128:0):t.startSide>0?32:16;return t.block&&(e|=256),e}var wj={class:"cm-line"};function JQA(t,e){let A=e.spec.attributes,i=e.spec.class;return!A&&!i||(t||(t={class:"cm-line"}),A&&Lk(A,t),i&&(t.class+=" "+i)),t}function OQA(t){let e=[];for(let A=t.parents.length;A>1;A--){let i=A==t.parents.length?t.tile:t.parents[A].tile;i instanceof rl&&e.push(i.mark)}return e}function RS(t){let e=wa.get(t);return e&&e.setDOM(t.cloneNode()),t}var mP=(()=>{class t extends sl{constructor(A){super(),this.tag=A}eq(A){return A.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(A){return A.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}return t.inline=new t("span"),t.block=new t("div"),t})(),NS=new class extends sl{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},ww=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=St.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new jE(e,e.contentDOM),this.updateInner([new sc(0,0,0,e.state.doc.length)],null)}update(e){var A;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:g,toA:C})=>Cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let n=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((A=this.domChanged)===null||A===void 0)&&A.newSel?n=this.domChanged.newSel.head:!WQA(e.changes,this.hasComposition)&&!e.selectionSet&&(n=e.state.selection.main.head));let o=n>-1?HQA(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){let{from:g,to:C}=this.hasComposition;i=new sc(g,C,e.changes.mapPos(g,-1),e.changes.mapPos(C,1)).addToSet(i.slice())}this.hasComposition=o?{from:o.range.fromB,to:o.range.toB}:null,(at.ie||at.chrome)&&!o&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,r=this.blockWrappers;this.updateDeco();let s=jQA(a,this.decorations,e.changes);s.length&&(i=sc.extendWithRanges(i,s));let l=qQA(r,this.blockWrappers,e.changes);return l.length&&(i=sc.extendWithRanges(i,l)),o&&!i.some(g=>g.fromA<=o.range.fromA&&g.toA>=o.range.toA)&&(i=o.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,o),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,A){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(A||e.length){let a=this.tile,r=new ik(this.view,a,this.blockWrappers,this.decorations,this.dynamicDecorationMap);A&&wa.get(A.text)&&r.cache.reused.set(wa.get(A.text),2),this.tile=r.run(e,A),nk(a,r.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=at.chrome||at.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(o),o&&(o.written||i.selectionRange.focusNode!=o.node||!this.tile.dom.contains(o.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let n=[];if(this.view.viewport.from||this.view.viewport.to-1)&&L4(i,this.view.observer.selectionRange)&&!(n&&i.contains(n));if(!(o||A||a))return;let r=this.forceSelection;this.forceSelection=!1;let s=this.view.state.selection.main,l,g;if(s.empty?g=l=this.inlineDOMNearPos(s.anchor,s.assoc||1):(g=this.inlineDOMNearPos(s.head,s.head==s.from?1:-1),l=this.inlineDOMNearPos(s.anchor,s.anchor==s.from?1:-1)),at.gecko&&s.empty&&!this.hasComposition&&YQA(l)){let I=document.createTextNode("");this.view.observer.ignore(()=>l.node.insertBefore(I,l.node.childNodes[l.offset]||null)),l=g=new E0(I,0),r=!0}let C=this.view.observer.selectionRange;(r||!C.focusNode||(!G4(l.node,l.offset,C.anchorNode,C.anchorOffset)||!G4(g.node,g.offset,C.focusNode,C.focusOffset))&&!this.suppressWidgetCursorChange(C,s))&&(this.view.observer.ignore(()=>{at.android&&at.chrome&&i.contains(C.focusNode)&&VQA(C.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let I=j4(this.view.root);if(I)if(s.empty){if(at.gecko){let d=zQA(l.node,l.offset);if(d&&d!=3){let h=(d==1?nj:oj)(l.node,l.offset);h&&(l=new E0(h.node,h.offset))}}I.collapse(l.node,l.offset),s.bidiLevel!=null&&I.caretBidiLevel!==void 0&&(I.caretBidiLevel=s.bidiLevel)}else if(I.extend){I.collapse(l.node,l.offset);try{I.extend(g.node,g.offset)}catch(d){}}else{let d=document.createRange();s.anchor>s.head&&([l,g]=[g,l]),d.setEnd(g.node,g.offset),d.setStart(l.node,l.offset),I.removeAllRanges(),I.addRange(d)}a&&this.view.root.activeElement==i&&(i.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(l,g)),this.impreciseAnchor=l.precise?null:new E0(C.anchorNode,C.anchorOffset),this.impreciseHead=g.precise?null:new E0(C.focusNode,C.focusOffset)}suppressWidgetCursorChange(e,A){return this.hasComposition&&A.empty&&G4(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==A.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,A=e.state.selection.main,i=j4(e.root),{anchorNode:n,anchorOffset:o}=e.observer.selectionRange;if(!i||!A.empty||!A.assoc||!i.modify)return;let a=this.lineAt(A.head,A.assoc);if(!a)return;let r=a.posAtStart;if(A.head==r||A.head==r+a.length)return;let s=this.coordsAt(A.head,-1),l=this.coordsAt(A.head,1);if(!s||!l||s.bottom>l.top)return;let g=this.domAtPos(A.head+A.assoc,A.assoc);i.collapse(g.node,g.offset),i.modify("move",A.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let C=e.observer.selectionRange;e.docView.posFromDOM(C.anchorNode,C.anchorOffset)!=A.from&&i.collapse(n,o)}posFromDOM(e,A){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let n=i.posAtStart;if(i.isComposite()){let o;if(e==i.dom)o=i.dom.childNodes[A];else{let a=QC(e)==0?0:A==0?-1:1;for(;;){let r=e.parentNode;if(r==i.dom)break;a==0&&r.firstChild!=r.lastChild&&(e==r.firstChild?a=-1:a=1),e=r}a<0?o=e:o=e.nextSibling}if(o==i.dom.firstChild)return n;for(;o&&!wa.get(o);)o=o.nextSibling;if(!o)return n+i.length;for(let a=0,r=n;;a++){let s=i.children[a];if(s.dom==o)return r;r+=s.length+s.breakAfter}}else return i.isText()?e==i.dom?n+A:n+(A?i.length:0):n}domAtPos(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.domPosFor(e,A):i.domIn(n,A)}inlineDOMNearPos(e,A){let i,n=-1,o=!1,a,r=-1,s=!1;return this.tile.blockTiles((l,g)=>{if(l.isWidget()){if(l.flags&32&&g>=e)return!0;l.flags&16&&(o=!0)}else{let C=g+l.length;if(g<=e&&(i=l,n=e-g,o=C=e&&!a&&(a=l,r=e-g,s=g>e),g>e&&a)return!0}}),!i&&!a?this.domAtPos(e,A):(o&&a?i=null:s&&i&&(a=null),i&&A<0||!a?i.domIn(n,A):a.domIn(r,A))}coordsAt(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.widget instanceof T4?null:i.coordsInWidget(n,A,!0):i.coordsIn(n,A)}lineAt(e,A){let{tile:i}=this.tile.resolveBlock(e,A);return i.isLine()?i:null}coordsForChar(e){let{tile:A,offset:i}=this.tile.resolveBlock(e,1);if(!A.isLine())return null;function n(o,a){if(o.isComposite())for(let r of o.children){if(r.length>=a){let s=n(r,a);if(s)return s}if(a-=r.length,a<0)break}else if(o.isText()&&aMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,s=this.view.textDirection==mo.LTR,l=0,g=(C,I,d)=>{for(let h=0;hn);h++){let E=C.children[h],f=I+E.length,m=E.dom.getBoundingClientRect(),{height:v}=m;if(d&&!h&&(l+=m.top-d.top),E instanceof hC)f>i&&g(E,I,m);else if(I>=i&&(l>0&&A.push(-l),A.push(v+l),l=0,a)){let k=E.dom.lastChild,S=k?Cw(k):[];if(S.length){let b=S[S.length-1],x=s?b.right-m.left:m.right-b.left;x>r&&(r=x,this.minWidth=o,this.minWidthFrom=I,this.minWidthTo=f)}}d&&h==C.children.length-1&&(l+=d.bottom-m.bottom),I=f+E.breakAfter}};return g(this.tile,0,null),A}textDirectionAt(e){let{tile:A}=this.tile.resolveBlock(e,1);return getComputedStyle(A.dom).direction=="rtl"?mo.RTL:mo.LTR}measureTextSize(){let e=this.tile.blockTiles(a=>{if(a.isLine()&&a.children.length&&a.length<=20){let r=0,s;for(let l of a.children){if(!l.isText()||/[^ -~]/.test(l.text))return;let g=Cw(l.dom);if(g.length!=1)return;r+=g[0].width,s=g[0].height}if(r)return{lineHeight:a.dom.getBoundingClientRect().height,charWidth:r/a.length,textHeight:s}}});if(e)return e;let A=document.createElement("div"),i,n,o;return A.className="cm-line",A.style.width="99999px",A.style.position="absolute",A.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(A);let a=Cw(A.firstChild)[0];i=A.getBoundingClientRect().height,n=a&&a.width?a.width/27:7,o=a&&a.height?a.height:i,A.remove()}),{lineHeight:i,charWidth:n,textHeight:o}}computeBlockGapDeco(){let e=[],A=this.view.viewState;for(let i=0,n=0;;n++){let o=n==A.viewports.length?null:A.viewports[n],a=o?o.from-1:this.view.state.doc.length;if(a>i){let r=(A.lineBlockAt(a).bottom-A.lineBlockAt(i).top)/this.view.scaleY;e.push(St.replace({widget:new T4(r),block:!0,inclusive:!0,isBlockGap:!0}).range(i,a))}if(!o)break;i=o.to+1}return St.set(e)}updateDeco(){let e=1,A=this.view.state.facet(Lw).map(o=>(this.dynamicDecorationMap[e++]=typeof o=="function")?o(this.view):o),i=!1,n=this.view.state.facet(Jk).map((o,a)=>{let r=typeof o=="function";return r&&(i=!0),r?o(this.view):o});for(n.length&&(this.dynamicDecorationMap[e++]=i,A.push(io.join(n))),this.decorations=[this.editContextFormatting,...A,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof o=="function"?o(this.view):o)}scrollIntoView(e){var A;if(e.isSnapshot){let g=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=g.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let g of this.view.state.facet(Qj))try{if(g(this.view,e.range,e))return!0}catch(C){Sr(this.view.state,C,"scroll handler")}let{range:i}=e,n=this.coordsAt(i.head,(A=i.assoc)!==null&&A!==void 0?A:i.empty?0:i.head>i.anchor?-1:1),o;if(!n)return;!i.empty&&(o=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(n={left:Math.min(n.left,o.left),top:Math.min(n.top,o.top),right:Math.max(n.right,o.right),bottom:Math.max(n.bottom,o.bottom)});let a=Ok(this.view),r={left:n.left-a.left,top:n.top-a.top,right:n.right+a.right,bottom:n.bottom+a.bottom},{offsetWidth:s,offsetHeight:l}=this.view.scrollDOM;if(DQA(this.view.scrollDOM,r,i.head1&&(n.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||n.bottomi.isWidget()||i.children.some(A);return A(this.tile.resolveBlock(e,1).tile)}destroy(){nk(this.tile)}};function nk(t,e){let A=e?.get(t);if(A!=1){A==null&&t.destroy();for(let i of t.children)nk(i,e)}}function YQA(t){return t.node.nodeType==1&&t.node.firstChild&&(t.offset==0||t.node.childNodes[t.offset-1].contentEditable=="false")&&(t.offset==t.node.childNodes.length||t.node.childNodes[t.offset].contentEditable=="false")}function Dj(t,e){let A=t.observer.selectionRange;if(!A.focusNode)return null;let i=nj(A.focusNode,A.focusOffset),n=oj(A.focusNode,A.focusOffset),o=i||n;if(n&&i&&n.node!=i.node){let r=wa.get(n.node);if(!r||r.isText()&&r.text!=n.node.nodeValue)o=n;else if(t.docView.lastCompositionAfterCursor){let s=wa.get(i.node);!s||s.isText()&&s.text!=i.node.nodeValue||(o=n)}}if(t.docView.lastCompositionAfterCursor=o!=i,!o)return null;let a=e-o.offset;return{from:a,to:a+o.node.nodeValue.length,node:o.node}}function HQA(t,e,A){let i=Dj(t,A);if(!i)return null;let{node:n,from:o,to:a}=i,r=n.nodeValue;if(/[\n\r]/.test(r)||t.state.doc.sliceString(i.from,i.to)!=r)return null;let s=e.invertedDesc;return{range:new sc(s.mapPos(o),s.mapPos(a),o,a),text:n}}function zQA(t,e){return t.nodeType!=1?0:(e&&t.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(A=!0)}),A}var T4=class extends sl{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function ZQA(t,e,A=1){let i=t.charCategorizer(e),n=t.doc.lineAt(e),o=e-n.from;if(n.length==0)return Ie.cursor(e);o==0?A=1:o==n.length&&(A=-1);let a=o,r=o;A<0?a=ja(n.text,o,!1):r=ja(n.text,o);let s=i(n.text.slice(a,r));for(;a>0;){let l=ja(n.text,a,!1);if(i(n.text.slice(l,a))!=s)break;a=l}for(;rt.defaultLineHeight*1.5){let r=t.viewState.heightOracle.textHeight,s=Math.floor((n-A.top-(t.defaultLineHeight-r)*.5)/r);o+=s*t.viewState.heightOracle.lineLength}let a=t.state.sliceDoc(A.from,A.to);return A.from+ew(a,o,t.state.tabSize)}function ak(t,e,A){let i=t.lineBlockAt(e);if(Array.isArray(i.type)){let n;for(let o of i.type){if(o.from>e)break;if(!(o.toe)return o;(!n||o.type==Vr.Text&&(n.type!=o.type||(A<0?o.frome)))&&(n=o)}}return n||i}return i}function $QA(t,e,A,i){let n=ak(t,e.head,e.assoc||-1),o=!i||n.type!=Vr.Text||!(t.lineWrapping||n.widgetLineBreaks)?null:t.coordsAtPos(e.assoc<0&&e.head>n.from?e.head-1:e.head);if(o){let a=t.dom.getBoundingClientRect(),r=t.textDirectionAt(n.from),s=t.posAtCoords({x:A==(r==mo.LTR)?a.right-1:a.left+1,y:(o.top+o.bottom)/2});if(s!=null)return Ie.cursor(s,A?-1:1)}return Ie.cursor(A?n.to:n.from,A?-1:1)}function wP(t,e,A,i){let n=t.state.doc.lineAt(e.head),o=t.bidiSpans(n),a=t.textDirectionAt(n.from);for(let r=e,s=null;;){let l=NQA(n,o,a,r,A),g=gj;if(!l){if(n.number==(A?t.state.doc.lines:1))return r;g=` +`,n=t.state.doc.line(n.number+(A?1:-1)),o=t.bidiSpans(n),l=t.visualLineSide(n,!A)}if(s){if(!s(g))return r}else{if(!i)return l;s=i(g)}r=l}}function AuA(t,e,A){let i=t.state.charCategorizer(e),n=i(A);return o=>{let a=i(o);return n==Uo.Space&&(n=a),n==a}}function euA(t,e,A,i){let n=e.head,o=A?1:-1;if(n==(A?t.state.doc.length:0))return Ie.cursor(n,e.assoc);let a=e.goalColumn,r,s=t.contentDOM.getBoundingClientRect(),l=t.coordsAtPos(n,e.assoc||((e.empty?A:e.head==e.from)?1:-1)),g=t.documentTop;if(l)a==null&&(a=l.left-s.left),r=o<0?l.top:l.bottom;else{let h=t.viewState.lineBlockAt(n);a==null&&(a=Math.min(s.right-s.left,t.defaultCharacterWidth*(n-h.from))),r=(o<0?h.top:h.bottom)+g}let C=s.left+a,I=t.viewState.heightOracle.textHeight>>1,d=i??I;for(let h=0;;h+=I){let E=r+(d+h)*o,f=rk(t,{x:C,y:E},!1,o);if(A?E>s.bottom:Er:v{if(e>o&&en(t)),A.from,e.head>A.from?-1:1);return i==A.from?A:Ie.cursor(i,it.viewState.docHeight)return new Ig(t.state.doc.length,-1);if(l=t.elementAtHeight(s),i==null)break;if(l.type==Vr.Text){if(i<0?l.tot.viewport.to)break;let I=t.docView.coordsAt(i<0?l.from:l.to,i>0?-1:1);if(I&&(i<0?I.top<=s+o:I.bottom>=s+o))break}let C=t.viewState.heightOracle.textHeight/2;s=i>0?l.bottom+C:l.top-C}if(t.viewport.from>=l.to||t.viewport.to<=l.from){if(A)return null;if(l.type==Vr.Text){let C=XQA(t,n,l,a,r);return new Ig(C,C==l.from?1:-1)}}if(l.type!=Vr.Text)return s<(l.top+l.bottom)/2?new Ig(l.from,1):new Ig(l.to,-1);let g=t.docView.lineAt(l.from,2);return(!g||g.length!=l.length)&&(g=t.docView.lineAt(l.from,-2)),new sk(t,a,r,t.textDirectionAt(l.from)).scanTile(g,l.from)}var sk=class{constructor(e,A,i,n){this.view=e,this.x=A,this.y=i,this.baseDir=n,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+n.from>1;e:if(o.has(h)){let f=i+Math.floor(Math.random()*d);for(let m=0;m1)){if(m.bottomthis.y)(!s||s.top>m.top)&&(s=m),v=-1;else{let k=m.left>this.x?this.x-m.left:m.right(C.left+C.right)/2==I}}scanText(e,A){let i=[];for(let o=0;o{let a=i[o]-A,r=i[o+1]-A;return q4(e.dom,a,r).getClientRects()});return n.after?new Ig(i[n.i+1],-1):new Ig(i[n.i],1)}scanTile(e,A){if(!e.length)return new Ig(A,1);if(e.children.length==1){let r=e.children[0];if(r.isText())return this.scanText(r,A);if(r.isComposite())return this.scanTile(r,A)}let i=[A];for(let r=0,s=A;r{let s=e.children[r];return s.flags&48?null:(s.dom.nodeType==1?s.dom:q4(s.dom,0,s.length)).getClientRects()}),o=e.children[n.i],a=i[n.i];return o.isText()?this.scanText(o,a):o.isComposite()?this.scanTile(o,a):n.after?new Ig(i[n.i+1],-1):new Ig(a,1)}},UE="\uFFFF",lk=class{constructor(e,A){this.points=e,this.view=A,this.text="",this.lineSeparator=A.state.facet(qa.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=UE}readRange(e,A){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let o=this.text.length;this.readNode(n);let a=wa.get(n),r=n.nextSibling;if(r==A){a?.breakAfter&&!r&&i!=this.view.contentDOM&&this.lineBreak();break}let s=wa.get(r);(a&&s?a.breakAfter:(a?a.breakAfter:uw(n))||uw(r)&&(n.nodeName!="BR"||a?.isWidget())&&this.text.length>o)&&!iuA(r,A)&&this.lineBreak(),n=r}return this.findPointBefore(i,A),this}readTextNode(e){let A=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,A.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let o=-1,a=1,r;if(this.lineSeparator?(o=A.indexOf(this.lineSeparator,i),a=this.lineSeparator.length):(r=n.exec(A))&&(o=r.index,a=r[0].length),this.append(A.slice(i,o<0?A.length:o)),o<0)break;if(this.lineBreak(),a>1)for(let s of this.points)s.node==e&&s.pos>this.text.length&&(s.pos-=a-1);i=o+a}}readNode(e){let A=wa.get(e),i=A&&A.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let n=i.iter();!n.next().done;)n.lineBreak?this.lineBreak():this.append(n.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,A){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==A&&(i.pos=this.text.length)}findPointInside(e,A){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(tuA(e,i.node,i.offset)?A:0))}};function tuA(t,e,A){for(;;){if(!e||A-1;let{impreciseHead:o,impreciseAnchor:a}=e.docView,r=e.state.selection;if(e.state.readOnly&&A>-1)this.newSel=null;else if(A>-1&&(this.bounds=vj(e.docView.tile,A,i,0))){let s=o||a?[]:ouA(e),l=new lk(s,e);l.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=l.text,this.newSel=auA(s,this.bounds.from)}else{let s=e.observer.selectionRange,l=o&&o.node==s.focusNode&&o.offset==s.focusOffset||!PS(e.contentDOM,s.focusNode)?r.main.head:e.docView.posFromDOM(s.focusNode,s.focusOffset),g=a&&a.node==s.anchorNode&&a.offset==s.anchorOffset||!PS(e.contentDOM,s.anchorNode)?r.main.anchor:e.docView.posFromDOM(s.anchorNode,s.anchorOffset),C=e.viewport;if((at.ios||at.chrome)&&r.main.empty&&l!=g&&(C.from>0||C.to-1&&r.ranges.length>1)this.newSel=r.replaceRange(Ie.range(g,l));else if(e.lineWrapping&&g==l&&!(r.main.empty&&r.main.head==l)&&e.inputState.lastTouchTime>Date.now()-100){let I=e.coordsAtPos(l,-1),d=0;I&&(d=e.inputState.lastTouchY<=I.bottom?-1:1),this.newSel=Ie.create([Ie.cursor(l,d)])}else this.newSel=Ie.single(g,l)}}};function vj(t,e,A,i){if(t.isComposite()){let n=-1,o=-1,a=-1,r=-1;for(let s=0,l=i,g=i;sA)return vj(C,e,A,l);if(I>=e&&n==-1&&(n=s,o=l),l>A&&C.dom.parentNode==t.dom){a=s,r=g;break}g=I,l=I+C.breakAfter}return{from:o,to:r<0?i+t.length:r,startDOM:(n?t.children[n-1].dom.nextSibling:null)||t.dom.firstChild,endDOM:a=0?t.children[a].dom:null}}else return t.isText()?{from:i,to:i+t.length,startDOM:t.dom,endDOM:t.dom.nextSibling}:null}function bj(t,e){let A,{newSel:i}=e,{state:n}=t,o=n.selection.main,a=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:r,to:s}=e.bounds,l=o.from,g=null;(a===8||at.android&&e.text.length=r&&o.to<=s&&(e.typeOver||C!=e.text)&&C.slice(0,o.from-r)==e.text.slice(0,o.from-r)&&C.slice(o.to-r)==e.text.slice(I=e.text.length-(C.length-(o.to-r)))?A={from:o.from,to:o.to,insert:bn.of(e.text.slice(o.from-r,I).split(UE))}:(d=Mj(C,e.text,l-r,g))&&(at.chrome&&a==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==UE+UE&&d.toB--,A={from:r+d.from,to:r+d.toA,insert:bn.of(e.text.slice(d.from,d.toB).split(UE))})}else i&&(!t.hasFocus&&n.facet(EC)||yw(i,o))&&(i=null);if(!A&&!i)return!1;if((at.mac||at.android)&&A&&A.from==A.to&&A.from==o.head-1&&/^\. ?$/.test(A.insert.toString())&&t.contentDOM.getAttribute("autocorrect")=="off"?(i&&A.insert.length==2&&(i=Ie.single(i.main.anchor-1,i.main.head-1)),A={from:A.from,to:A.to,insert:bn.of([A.insert.toString().replace("."," ")])}):n.doc.lineAt(o.from).toDate.now()-50?A={from:o.from,to:o.to,insert:n.toText(t.inputState.insertingText)}:at.chrome&&A&&A.from==A.to&&A.from==o.head&&A.insert.toString()==` + `&&t.lineWrapping&&(i&&(i=Ie.single(i.main.anchor-1,i.main.head-1)),A={from:o.from,to:o.to,insert:bn.of([" "])}),A)return Yk(t,A,i,a);if(i&&!yw(i,o)){let r=!1,s="select";return t.inputState.lastSelectionTime>Date.now()-50&&(t.inputState.lastSelectionOrigin=="select"&&(r=!0),s=t.inputState.lastSelectionOrigin,s=="select.pointer"&&(i=yj(n.facet(V4).map(l=>l(t)),i))),t.dispatch({selection:i,scrollIntoView:r,userEvent:s}),!0}else return!1}function Yk(t,e,A,i=-1){if(at.ios&&t.inputState.flushIOSKey(e))return!0;let n=t.state.selection.main;if(at.android&&(e.to==n.to&&(e.from==n.from||e.from==n.from-1&&t.state.sliceDoc(e.from,n.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&zE(t.contentDOM,"Enter",13)||(e.from==n.from-1&&e.to==n.to&&e.insert.length==0||i==8&&e.insert.lengthn.head)&&zE(t.contentDOM,"Backspace",8)||e.from==n.from&&e.to==n.to+1&&e.insert.length==0&&zE(t.contentDOM,"Delete",46)))return!0;let o=e.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a,r=()=>a||(a=nuA(t,e,A));return t.state.facet(Bj).some(s=>s(t,e.from,e.to,o,r))||t.dispatch(r()),!0}function nuA(t,e,A){let i,n=t.state,o=n.selection.main,a=-1;if(e.from==e.to&&e.fromo.to){let s=e.fromC(t)),l,s);e.from==g&&(a=g)}if(a>-1)i={changes:e,selection:Ie.cursor(e.from+e.insert.length,-1)};else if(e.from>=o.from&&e.to<=o.to&&e.to-e.from>=(o.to-o.from)/3&&(!A||A.main.empty&&A.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let s=o.frome.to?n.sliceDoc(e.to,o.to):"";i=n.replaceSelection(t.state.toText(s+e.insert.sliceString(0,void 0,t.state.lineBreak)+l))}else{let s=n.changes(e),l=A&&A.main.to<=s.newLength?A.main:void 0;if(n.selection.ranges.length>1&&(t.inputState.composing>=0||t.inputState.compositionPendingChange)&&e.to<=o.to+10&&e.to>=o.to-10){let g=t.state.sliceDoc(e.from,e.to),C,I=A&&Dj(t,A.main.head);if(I){let h=e.insert.length-(e.to-e.from);C={from:I.from,to:I.to-h}}else C=t.state.doc.lineAt(o.head);let d=o.to-e.to;i=n.changeByRange(h=>{if(h.from==o.from&&h.to==o.to)return{changes:s,range:l||h.map(s)};let E=h.to-d,f=E-g.length;if(t.state.sliceDoc(f,E)!=g||E>=C.from&&f<=C.to)return{range:h};let m=n.changes({from:f,to:E,insert:e.insert}),v=h.to-o.to;return{changes:m,range:l?Ie.range(Math.max(0,l.anchor+v),Math.max(0,l.head+v)):h.map(m)}})}else i={changes:s,selection:l&&n.selection.replaceRange(l)}}let r="input.type";return(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,r+=".compose",t.inputState.compositionFirstChange&&(r+=".start",t.inputState.compositionFirstChange=!1)),n.update(i,{userEvent:r,scrollIntoView:!0})}function Mj(t,e,A,i){let n=Math.min(t.length,e.length),o=0;for(;o0&&r>0&&t.charCodeAt(a-1)==e.charCodeAt(r-1);)a--,r--;if(i=="end"){let s=Math.max(0,o-Math.min(a,r));A-=a+s-o}if(a=a?o-A:0;o-=s,r=o+(r-a),a=o}else if(r=r?o-A:0;o-=s,a=o+(a-r),r=o}return{from:o,toA:a,toB:r}}function ouA(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}=t.observer.selectionRange;return A&&(e.push(new Dw(A,i)),(n!=A||o!=i)&&e.push(new Dw(n,o))),e}function auA(t,e){if(t.length==0)return null;let A=t[0].pos,i=t.length==2?t[1].pos:A;return A>-1&&i>-1?Ie.single(A+e,i+e):null}function yw(t,e){return e.head==t.main.head&&e.anchor==t.main.anchor}var ck=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,at.safari&&e.contentDOM.addEventListener("input",()=>null),at.gecko&&fuA(e.contentDOM.ownerDocument)}handleEvent(e){!IuA(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,A){let i=this.handlers[e];if(i){for(let n of i.observers)n(this.view,A);for(let n of i.handlers){if(A.defaultPrevented)break;if(n(this.view,A)){A.preventDefault();break}}}}ensureHandlers(e){let A=ruA(e),i=this.handlers,n=this.view.contentDOM;for(let o in A)if(o!="scroll"){let a=!A[o].handlers.length,r=i[o];r&&a!=!r.handlers.length&&(n.removeEventListener(o,this.handleEvent),r=null),r||n.addEventListener(o,this.handleEvent,{passive:a})}for(let o in i)o!="scroll"&&!A[o]&&n.removeEventListener(o,this.handleEvent);this.handlers=A}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&kj.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),at.android&&at.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let A;return at.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((A=Sj.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||suA.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=A||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let A=this.pendingIOSKey;return!A||A.key=="Enter"&&e&&e.from0?!0:at.safari&&!at.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function DP(t,e){return(A,i)=>{try{return e.call(t,i,A)}catch(n){Sr(A.state,n)}}}function ruA(t){let e=Object.create(null);function A(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of t){let n=i.spec,o=n&&n.plugin.domEventHandlers,a=n&&n.plugin.domEventObservers;if(o)for(let r in o){let s=o[r];s&&A(r).handlers.push(DP(i.value,s))}if(a)for(let r in a){let s=a[r];s&&A(r).observers.push(DP(i.value,s))}}for(let i in lc)A(i).handlers.push(lc[i]);for(let i in ll)A(i).observers.push(ll[i]);return e}var Sj=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],suA="dthko",kj=[16,17,18,20,91,92,224,225],nw=6;function ow(t){return Math.max(0,t)*.7+8}function luA(t,e){return Math.max(Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))}var Ck=class{constructor(e,A,i,n){this.view=e,this.startEvent=A,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=A,this.scrollParents=ej(e.contentDOM),this.atoms=e.state.facet(V4).map(a=>a(e));let o=e.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=A.shiftKey,this.multiple=e.state.facet(qa.allowMultipleSelections)&&guA(e,A),this.dragging=CuA(e,A)&&Rj(A)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&luA(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let A=0,i=0,n=0,o=0,a=this.view.win.innerWidth,r=this.view.win.innerHeight;this.scrollParents.x&&({left:n,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:o,bottom:r}=this.scrollParents.y.getBoundingClientRect());let s=Ok(this.view);e.clientX-s.left<=n+nw?A=-ow(n-e.clientX):e.clientX+s.right>=a-nw&&(A=ow(e.clientX-a)),e.clientY-s.top<=o+nw?i=-ow(o-e.clientY):e.clientY+s.bottom>=r-nw&&(i=ow(e.clientY-r)),this.setScrollSpeed(A,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,A){this.scrollSpeed={x:e,y:A},e||A?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:A}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),A&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=A,A=0),(e||A)&&this.view.win.scrollBy(e,A),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:A}=this,i=yj(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(A.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(A=>A.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function guA(t,e){let A=t.state.facet(cj);return A.length?A[0](e):at.mac?e.metaKey:e.ctrlKey}function cuA(t,e){let A=t.state.facet(Cj);return A.length?A[0](e):at.mac?!e.altKey:!e.ctrlKey}function CuA(t,e){let{main:A}=t.state.selection;if(A.empty)return!1;let i=j4(t.root);if(!i||i.rangeCount==0)return!0;let n=i.getRangeAt(0).getClientRects();for(let o=0;o=e.clientX&&a.top<=e.clientY&&a.bottom>=e.clientY)return!0}return!1}function IuA(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let A=e.target,i;A!=t.contentDOM;A=A.parentNode)if(!A||A.nodeType==11||(i=wa.get(A))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var lc=Object.create(null),ll=Object.create(null),xj=at.ie&&at.ie_version<15||at.ios&&at.webkit_version<604;function duA(t){let e=t.dom.parentNode;if(!e)return;let A=e.appendChild(document.createElement("textarea"));A.style.cssText="position: fixed; left: -10000px; top: 10px",A.focus(),setTimeout(()=>{t.focus(),A.remove(),_j(t,A.value)},50)}function Gw(t,e,A){for(let i of t.facet(e))A=i(A,t);return A}function _j(t,e){e=Gw(t.state,Uk,e);let{state:A}=t,i,n=1,o=A.toText(e),a=o.lines==A.selection.ranges.length;if(Ik!=null&&A.selection.ranges.every(s=>s.empty)&&Ik==o.toString()){let s=-1;i=A.changeByRange(l=>{let g=A.doc.lineAt(l.from);if(g.from==s)return{range:l};s=g.from;let C=A.toText((a?o.line(n++).text:e)+A.lineBreak);return{changes:{from:g.from,insert:C},range:Ie.cursor(l.from+C.length)}})}else a?i=A.changeByRange(s=>{let l=o.line(n++);return{changes:{from:s.from,to:s.to,insert:l.text},range:Ie.cursor(s.from+l.length)}}):i=A.replaceSelection(o);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ll.scroll=t=>{t.inputState.lastScrollTop=t.scrollDOM.scrollTop,t.inputState.lastScrollLeft=t.scrollDOM.scrollLeft};ll.wheel=ll.mousewheel=t=>{t.inputState.lastWheelEvent=Date.now()};lc.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),e.keyCode==27&&t.inputState.tabFocusMode!=0&&(t.inputState.tabFocusMode=Date.now()+2e3),!1);ll.touchstart=(t,e)=>{let A=t.inputState,i=e.targetTouches[0];A.lastTouchTime=Date.now(),i&&(A.lastTouchX=i.clientX,A.lastTouchY=i.clientY),A.setSelectionOrigin("select.pointer")};ll.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")};lc.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let A=null;for(let i of t.state.facet(Ij))if(A=i(t,e),A)break;if(!A&&e.button==0&&(A=EuA(t,e)),A){let i=!t.hasFocus;t.inputState.startMouseSelection(new Ck(t,e,A,i)),i&&t.observer.ignore(()=>{tj(t.contentDOM);let o=t.root.activeElement;o&&!o.contains(t.contentDOM)&&o.blur()});let n=t.inputState.mouseSelection;if(n)return n.start(e),n.dragging===!1}else t.inputState.setSelectionOrigin("select.pointer");return!1};function yP(t,e,A,i){if(i==1)return Ie.cursor(e,A);if(i==2)return ZQA(t.state,e,A);{let n=t.docView.lineAt(e,A),o=t.state.doc.lineAt(n?n.posAtEnd:e),a=n?n.posAtStart:o.from,r=n?n.posAtEnd:o.to;return rDate.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(bP+1)%3:1}function EuA(t,e){let A=t.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Rj(e),n=t.state.selection;return{update(o){o.docChanged&&(A.pos=o.changes.mapPos(A.pos),n=n.map(o.changes))},get(o,a,r){let s=t.posAndSideAtCoords({x:o.clientX,y:o.clientY},!1),l,g=yP(t,s.pos,s.assoc,i);if(A.pos!=s.pos&&!a){let C=yP(t,A.pos,A.assoc,i),I=Math.min(C.from,g.from),d=Math.max(C.to,g.to);g=I1&&(l=huA(n,s.pos))?l:r?n.addRange(g):Ie.create([g])}}}function huA(t,e){for(let A=0;A=e)return Ie.create(t.ranges.slice(0,A).concat(t.ranges.slice(A+1)),t.mainIndex==A?0:t.mainIndex-(t.mainIndex>A?1:0))}return null}lc.dragstart=(t,e)=>{let{selection:{main:A}}=t.state;if(e.target.draggable){let n=t.docView.tile.nearest(e.target);if(n&&n.isWidget()){let o=n.posAtStart,a=o+n.length;(o>=A.to||a<=A.from)&&(A=Ie.range(o,a))}}let{inputState:i}=t;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=A,e.dataTransfer&&(e.dataTransfer.setData("Text",Gw(t.state,Tk,t.state.sliceDoc(A.from,A.to))),e.dataTransfer.effectAllowed="copyMove"),!1};lc.dragend=t=>(t.inputState.draggedContent=null,!1);function SP(t,e,A,i){if(A=Gw(t.state,Uk,A),!A)return;let n=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:o}=t.inputState,a=i&&o&&cuA(t,e)?{from:o.from,to:o.to}:null,r={from:n,insert:A},s=t.state.changes(a?[a,r]:r);t.focus(),t.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},userEvent:a?"move.drop":"input.drop"}),t.inputState.draggedContent=null}lc.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let A=e.dataTransfer.files;if(A&&A.length){let i=Array(A.length),n=0,o=()=>{++n==A.length&&SP(t,e,i.filter(a=>a!=null).join(t.state.lineBreak),!1)};for(let a=0;a{/[\x00-\x08\x0e-\x1f]{2}/.test(r.result)||(i[a]=r.result),o()},r.readAsText(A[a])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return SP(t,e,i,!0),!0}return!1};lc.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let A=xj?null:e.clipboardData;return A?(_j(t,A.getData("text/plain")||A.getData("text/uri-list")),!0):(duA(t),!1)};function QuA(t,e){let A=t.dom.parentNode;if(!A)return;let i=A.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),t.focus()},50)}function uuA(t){let e=[],A=[],i=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),A.push(n));if(!e.length){let n=-1;for(let{from:o}of t.selection.ranges){let a=t.doc.lineAt(o);a.number>n&&(e.push(a.text),A.push({from:a.from,to:Math.min(t.doc.length,a.to+1)})),n=a.number}i=!0}return{text:Gw(t,Tk,e.join(t.lineBreak)),ranges:A,linewise:i}}var Ik=null;lc.copy=lc.cut=(t,e)=>{if(!L4(t.contentDOM,t.observer.selectionRange))return!1;let{text:A,ranges:i,linewise:n}=uuA(t.state);if(!A&&!n)return!1;Ik=n?A:null,e.type=="cut"&&!t.state.readOnly&&t.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let o=xj?null:e.clipboardData;return o?(o.clearData(),o.setData("text/plain",A),!0):(QuA(t,A),!1)};var Nj=al.define();function Fj(t,e){let A=[];for(let i of t.facet(Ej)){let n=i(t,e);n&&A.push(n)}return A.length?t.update({effects:A,annotations:Nj.of(!0)}):null}function Lj(t){setTimeout(()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let A=Fj(t.state,e);A?t.dispatch(A):t.update([])}},10)}ll.focus=t=>{t.inputState.lastFocusTime=Date.now(),!t.scrollDOM.scrollTop&&(t.inputState.lastScrollTop||t.inputState.lastScrollLeft)&&(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),Lj(t)};ll.blur=t=>{t.observer.clearSelectionRange(),Lj(t)};ll.compositionstart=ll.compositionupdate=t=>{t.observer.editContext||(t.inputState.compositionFirstChange==null&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0))};ll.compositionend=t=>{t.observer.editContext||(t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,at.chrome&&at.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then(()=>t.observer.flush()):setTimeout(()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])},50))};ll.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()};lc.beforeinput=(t,e)=>{var A,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(t.inputState.insertingText=e.data,t.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&t.observer.editContext){let o=(A=e.dataTransfer)===null||A===void 0?void 0:A.getData("text/plain"),a=e.getTargetRanges();if(o&&a.length){let r=a[0],s=t.posAtDOM(r.startContainer,r.startOffset),l=t.posAtDOM(r.endContainer,r.endOffset);return Yk(t,{from:s,to:l,insert:t.state.toText(o)},null),!0}}let n;if(at.chrome&&at.android&&(n=Sj.find(o=>o.inputType==e.inputType))&&(t.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let o=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var a;(((a=window.visualViewport)===null||a===void 0?void 0:a.height)||0)>o+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())},100)}return at.ios&&e.inputType=="deleteContentForward"&&t.observer.flushSoon(),at.safari&&e.inputType=="insertText"&&t.inputState.composing>=0&&setTimeout(()=>ll.compositionend(t,e),20),!1};var kP=new Set;function fuA(t){kP.has(t)||(kP.add(t),t.addEventListener("copy",()=>{}),t.addEventListener("cut",()=>{}))}var xP=["pre-wrap","normal","pre-line","break-spaces"],WE=!1;function _P(){WE=!1}var dk=class{constructor(e){this.lineWrapping=e,this.doc=bn.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,A){let i=this.doc.lineAt(A).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((A-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return xP.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let A=!1;for(let i=0;i-1,s=Math.abs(A-this.lineHeight)>.3||this.lineWrapping!=r||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=r,this.lineHeight=A,this.charWidth=i,this.textHeight=n,this.lineLength=o,s){this.heightSamples={};for(let l=0;l0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Iw&&(WE=!0),this.height=e)}replace(e,A,i){return t.of(i)}decomposeLeft(e,A){A.push(this)}decomposeRight(e,A){A.push(this)}applyChanges(e,A,i,n){let o=this,a=i.doc;for(let r=n.length-1;r>=0;r--){let{fromA:s,toA:l,fromB:g,toB:C}=n[r],I=o.lineAt(s,oa.ByPosNoHeight,i.setDoc(A),0,0),d=I.to>=l?I:o.lineAt(l,oa.ByPosNoHeight,i,0,0);for(C+=d.to-l,l=d.to;r>0&&I.from<=n[r-1].toA;)s=n[r-1].fromA,g=n[r-1].fromB,r--,so*2){let r=e[A-1];r.break?e.splice(--A,1,r.left,null,r.right):e.splice(--A,1,r.left,r.right),i+=1+r.break,n-=r.size}else if(o>n*2){let r=e[i];r.break?e.splice(i,1,r.left,null,r.right):e.splice(i,1,r.left,r.right),i+=2+r.break,o-=r.size}else break;else if(n=o&&a(this.lineAt(0,oa.ByPos,i,n,o))}setMeasuredHeight(e){let A=e.heights[e.index++];A<0?(this.spaceAbove=-A,A=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(A)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more&&this.setMeasuredHeight(n),this.outdated=!1,this}toString(){return`block(${this.length})`}},Cg=class t extends bw{constructor(e,A,i){super(e,A,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,A){return new rc(A,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,A,i){let n=i[0];return i.length==1&&(n instanceof t||n instanceof W2&&n.flags&4)&&Math.abs(this.length-n.length)<10?(n instanceof W2?n=new t(n.length,this.height,this.spaceAbove):n.height=this.height,this.outdated||(n.outdated=!1),n):Rl.of(i)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more?this.setMeasuredHeight(n):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},W2=class t extends Rl{constructor(e){super(e,0)}heightMetrics(e,A){let i=e.doc.lineAt(A).number,n=e.doc.lineAt(A+this.length).number,o=n-i+1,a,r=0;if(e.lineWrapping){let s=Math.min(this.height,e.lineHeight*o);a=s/o,this.length>o+1&&(r=(this.height-s)/(this.length-o-1))}else a=this.height/o;return{firstLine:i,lastLine:n,perLine:a,perChar:r}}blockAt(e,A,i,n){let{firstLine:o,lastLine:a,perLine:r,perChar:s}=this.heightMetrics(A,n);if(A.lineWrapping){let l=n+(e0){let o=i[i.length-1];o instanceof t?i[i.length-1]=new t(o.length+n):i.push(null,new t(n-1))}if(e>0){let o=i[0];o instanceof t?i[0]=new t(e+o.length):i.unshift(new t(e-1),null)}return Rl.of(i)}decomposeLeft(e,A){A.push(new t(e-1),null)}decomposeRight(e,A){A.push(null,new t(this.length-e-1))}updateHeight(e,A=0,i=!1,n){let o=A+this.length;if(n&&n.from<=A+this.length&&n.more){let a=[],r=Math.max(A,n.from),s=-1;for(n.from>A&&a.push(new t(n.from-A-1).updateHeight(e,A));r<=o&&n.more;){let g=e.doc.lineAt(r).length;a.length&&a.push(null);let C=n.heights[n.index++],I=0;C<0&&(I=-C,C=n.heights[n.index++]),s==-1?s=C:Math.abs(C-s)>=Iw&&(s=-2);let d=new Cg(g,C,I);d.outdated=!1,a.push(d),r+=g+1}r<=o&&a.push(null,new t(o-r).updateHeight(e,r));let l=Rl.of(a);return(s<0||Math.abs(l.height-this.height)>=Iw||Math.abs(s-this.heightMetrics(e,A).perLine)>=Iw)&&(WE=!0),vw(this,l)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(A,A+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Ek=class extends Rl{constructor(e,A,i){super(e.length+A+i.length,e.height+i.height,A|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,A,i,n){let o=i+this.left.height;return er))return l;let g=A==oa.ByPosNoHeight?oa.ByPosNoHeight:oa.ByPos;return s?l.join(this.right.lineAt(r,g,i,a,r)):this.left.lineAt(r,g,i,n,o).join(l)}forEachLine(e,A,i,n,o,a){let r=n+this.left.height,s=o+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,A,i,r,s,a);else{let l=this.lineAt(s,oa.ByPos,i,n,o);e=e&&l.from<=A&&a(l),A>l.to&&this.right.forEachLine(l.to+1,A,i,r,s,a)}}replace(e,A,i){let n=this.left.length+this.break;if(Athis.left.length)return this.balanced(this.left,this.right.replace(e-n,A-n,i));let o=[];e>0&&this.decomposeLeft(e,o);let a=o.length;for(let r of i)o.push(r);if(e>0&&RP(o,a-1),A=i&&A.push(null)),e>i&&this.right.decomposeLeft(e-i,A)}decomposeRight(e,A){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,A);e2*A.size||A.size>2*e.size?Rl.of(this.break?[e,null,A]:[e,A]):(this.left=vw(this.left,e),this.right=vw(this.right,A),this.setHeight(e.height+A.height),this.outdated=e.outdated||A.outdated,this.size=e.size+A.size,this.length=e.length+this.break+A.length,this)}updateHeight(e,A=0,i=!1,n){let{left:o,right:a}=this,r=A+o.length+this.break,s=null;return n&&n.from<=A+o.length&&n.more?s=o=o.updateHeight(e,A,i,n):o.updateHeight(e,A,i),n&&n.from<=r+a.length&&n.more?s=a=a.updateHeight(e,r,i,n):a.updateHeight(e,r,i),s?this.balanced(o,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function RP(t,e){let A,i;t[e]==null&&(A=t[e-1])instanceof W2&&(i=t[e+1])instanceof W2&&t.splice(e-1,3,new W2(A.length+1+i.length))}var muA=5,hk=class t{constructor(e,A){this.pos=e,this.oracle=A,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,A){if(this.lineStart>-1){let i=Math.min(A,this.lineEnd),n=this.nodes[this.nodes.length-1];n instanceof Cg?n.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Cg(i-this.pos,-1,0)),this.writtenTo=i,A>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=A}point(e,A,i){if(e=muA)&&this.addLineDeco(n,o,a)}else A>e&&this.span(e,A);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:A}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=A,this.writtenToe&&this.nodes.push(new Cg(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,A){let i=new W2(A-e);return this.oracle.doc.lineAt(e).to==A&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Cg)return e;let A=new Cg(0,-1,0);return this.nodes.push(A),A}addBlock(e){this.enterLine();let A=e.deco;A&&A.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,A&&A.endSide>0&&(this.covering=e)}addLineDeco(e,A,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=A,this.writtenTo=this.pos=this.pos+i}finish(e){let A=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(A instanceof Cg)&&!this.isCovered?this.nodes.push(new Cg(0,-1,0)):(this.writtenTog.clientHeight||g.scrollWidth>g.clientWidth)&&C.overflow!="visible"){let I=g.getBoundingClientRect();o=Math.max(o,I.left),a=Math.min(a,I.right),r=Math.max(r,I.top),s=Math.min(l==t.parentNode?n.innerHeight:s,I.bottom)}l=C.position=="absolute"||C.position=="fixed"?g.offsetParent:g.parentNode}else if(l.nodeType==11)l=l.host;else break;return{left:o-A.left,right:Math.max(o,a)-A.left,top:r-(A.top+e),bottom:Math.max(r,s)-(A.top+e)}}function yuA(t){let e=t.getBoundingClientRect(),A=t.ownerDocument.defaultView||window;return e.left0&&e.top0}function vuA(t,e){let A=t.getBoundingClientRect();return{left:0,right:A.right-A.left,top:e,bottom:A.bottom-(A.top+e)}}var O4=class{constructor(e,A,i,n){this.from=e,this.to=A,this.size=i,this.displaySize=n}static same(e,A){if(e.length!=A.length)return!1;for(let i=0;itypeof n!="function"&&n.class=="cm-lineWrapping");this.heightOracle=new dk(i),this.stateDeco=FP(A),this.heightMap=Rl.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle.setDoc(A.doc),[new sc(0,0,0,A.doc.length)]);for(let n=0;n<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());n++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=St.set(this.lineGaps.map(n=>n.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:A}=this.state.selection;for(let i=0;i<=1;i++){let n=i?A.head:A.anchor;if(!e.some(({from:o,to:a})=>n>=o&&n<=a)){let{from:o,to:a}=this.lineBlockAt(n);e.push(new JE(o,a))}}return this.viewports=e.sort((i,n)=>i.from-n.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?NP:new fk(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(N4(e,this.scaler))})}update(e,A=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=FP(this.state);let n=e.changedRanges,o=sc.extendWithRanges(n,wuA(i,this.stateDeco,e?e.changes:Pr.empty(this.state.doc.length))),a=this.heightMap.height,r=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);_P(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),o),(this.heightMap.height!=a||WE)&&(e.flags|=2),r?(this.scrollAnchorPos=e.changes.mapPos(r.from,-1),this.scrollAnchorHeight=r.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=a);let s=o.length?this.mapViewport(this.viewport,e.changes):this.viewport;(A&&(A.range.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,A));let l=s.from!=this.viewport.from||s.to!=this.viewport.to;this.viewport=s,e.flags|=this.updateForViewport(),(l||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),A&&(this.scrollTarget=A),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(hj)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,A=e.contentDOM,i=window.getComputedStyle(A),n=this.heightOracle,o=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?mo.RTL:mo.LTR;let a=this.heightOracle.mustRefreshForWrapping(o)||this.mustMeasureContent==="refresh",r=A.getBoundingClientRect(),s=a||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let l=0,g=0;if(r.width&&r.height){let{scaleX:b,scaleY:x}=Aj(A,r);(b>.005&&Math.abs(this.scaleX-b)>.005||x>.005&&Math.abs(this.scaleY-x)>.005)&&(this.scaleX=b,this.scaleY=x,l|=16,a=s=!0)}let C=(parseInt(i.paddingTop)||0)*this.scaleY,I=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=C||this.paddingBottom!=I)&&(this.paddingTop=C,this.paddingBottom=I,l|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(n.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,l|=16);let d=ej(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let h=this.getScrollOffset();this.scrollOffset!=h&&(this.scrollAnchorHeight=-1,this.scrollOffset=h),this.scrolledToBottom=ij(this.scrollParent||e.win);let E=(this.printing?vuA:DuA)(A,this.paddingTop),f=E.top-this.pixelViewport.top,m=E.bottom-this.pixelViewport.bottom;this.pixelViewport=E;let v=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(v!=this.inView&&(this.inView=v,v&&(s=!0)),!this.inView&&!this.scrollTarget&&!yuA(e.dom))return 0;let k=r.width;if((this.contentDOMWidth!=k||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=r.width,this.editorHeight=e.scrollDOM.clientHeight,l|=16),s){let b=e.docView.measureVisibleLineHeights(this.viewport);if(n.mustRefreshForHeights(b)&&(a=!0),a||n.lineWrapping&&Math.abs(k-this.contentDOMWidth)>n.charWidth){let{lineHeight:x,charWidth:F,textHeight:z}=e.docView.measureTextSize();a=x>0&&n.refresh(o,x,F,z,Math.max(5,k/F),b),a&&(e.docView.minWidth=0,l|=16)}f>0&&m>0?g=Math.max(f,m):f<0&&m<0&&(g=Math.min(f,m)),_P();for(let x of this.viewports){let F=x.from==this.viewport.from?b:e.docView.measureVisibleLineHeights(x);this.heightMap=(a?Rl.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle,[new sc(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(n,0,a,new Bk(x.from,F))}WE&&(l|=2)}let S=!this.viewportIsAppropriate(this.viewport,g)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return S&&(l&2&&(l|=this.updateScaler()),this.viewport=this.getViewport(g,this.scrollTarget),l|=this.updateForViewport()),(l&2||S)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(a?[]:this.lineGaps,e)),l|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),l}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,A){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,o=this.heightOracle,{visibleTop:a,visibleBottom:r}=this,s=new JE(n.lineAt(a-i*1e3,oa.ByHeight,o,0,0).from,n.lineAt(r+(1-i)*1e3,oa.ByHeight,o,0,0).to);if(A){let{head:l}=A.range;if(ls.to){let g=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),C=n.lineAt(l,oa.ByPos,o,0,0),I;A.y=="center"?I=(C.top+C.bottom)/2-g/2:A.y=="start"||A.y=="nearest"&&l=r+Math.max(10,Math.min(i,250)))&&n>a-2*1e3&&o>1,a=n<<1;if(this.defaultTextDirection!=mo.LTR&&!i)return[];let r=[],s=(g,C,I,d)=>{if(C-gg&&mm.from>=I.from&&m.to<=I.to&&Math.abs(m.from-g)m.fromv));if(!f){if(Ck.from<=C&&k.to>=C)){let k=A.moveToLineBoundary(Ie.cursor(C),!1,!0).head;k>g&&(C=k)}let m=this.gapSize(I,g,C,d),v=i||m<2e6?m:2e6;f=new O4(g,C,m,v)}r.push(f)},l=g=>{if(g.length2e6)for(let x of e)x.from>=g.from&&x.fromg.from&&s(g.from,d,g,C),hA.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let A=this.stateDeco;this.lineGaps.length&&(A=A.concat(this.lineGapDeco));let i=[];io.spans(A,this.viewport.from,this.viewport.to,{span(o,a){i.push({from:o,to:a})},point(){}},20);let n=0;if(i.length!=this.visibleRanges.length)n=12;else for(let o=0;o=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(A=>A.from<=e&&A.to>=e)||N4(this.heightMap.lineAt(e,oa.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(A=>A.top<=e&&A.bottom>=e)||N4(this.heightMap.lineAt(this.scaler.fromDOM(e),oa.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let A=this.lineBlockAtHeight(e+8);return A.from>=this.viewport.from||this.viewportLines[0].top-e>200?A:this.viewportLines[0]}elementAtHeight(e){return N4(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},JE=class{constructor(e,A){this.from=e,this.to=A}};function buA(t,e,A){let i=[],n=t,o=0;return io.spans(A,t,e,{span(){},point(a,r){a>n&&(i.push({from:n,to:a}),o+=a-n),n=r}},20),n=1)return e[e.length-1].to;let i=Math.floor(t*A);for(let n=0;;n++){let{from:o,to:a}=e[n],r=a-o;if(i<=r)return o+i;i-=r}}function rw(t,e){let A=0;for(let{from:i,to:n}of t.ranges){if(e<=n){A+=e-i;break}A+=n-i}return A/t.total}function MuA(t,e){for(let A of t)if(e(A))return A}var NP={toDOM(t){return t},fromDOM(t){return t},scale:1,eq(t){return t==this}};function FP(t){let e=t.facet(Lw).filter(i=>typeof i!="function"),A=t.facet(Jk).filter(i=>typeof i!="function");return A.length&&e.push(io.join(A)),e}var fk=class t{constructor(e,A,i){let n=0,o=0,a=0;this.viewports=i.map(({from:r,to:s})=>{let l=A.lineAt(r,oa.ByPos,e,0,0).top,g=A.lineAt(s,oa.ByPos,e,0,0).bottom;return n+=g-l,{from:r,to:s,top:l,bottom:g,domTop:0,domBottom:0}}),this.scale=(7e6-n)/(A.height-n);for(let r of this.viewports)r.domTop=a+(r.top-o)*this.scale,a=r.domBottom=r.domTop+(r.bottom-r.top),o=r.bottom}toDOM(e){for(let A=0,i=0,n=0;;A++){let o=AA.from==e.viewports[i].from&&A.to==e.viewports[i].to):!1}};function N4(t,e){if(e.scale==1)return t;let A=e.toDOM(t.top),i=e.toDOM(t.bottom);return new rc(t.from,t.length,A,i-A,Array.isArray(t._content)?t._content.map(n=>N4(n,e)):t._content)}var sw=At.define({combine:t=>t.join(" ")}),LS=At.define({combine:t=>t.indexOf(!0)>-1}),pk=cg.newName(),Gj=cg.newName(),Kj=cg.newName(),Uj={"&light":"."+Gj,"&dark":"."+Kj};function mk(t,e,A){return new cg(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,n=>{if(n=="&")return t;if(!A||!A[n])throw new RangeError(`Unsupported selector: ${n}`);return A[n]}):t+" "+i}})}var SuA=mk("."+pk,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Uj),kuA={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},GS=at.ie&&at.ie_version<=11,wk=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new jS,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(A=>{for(let i of A)this.queue.push(i);(at.ie&&at.ie_version<=11||at.ios&&e.composing)&&A.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&at.android&&e.constructor.EDIT_CONTEXT!==!1&&!(at.chrome&&at.chrome_version<126)&&(this.editContext=new Dk(e),e.state.facet(EC)&&(e.contentDOM.editContext=this.editContext.editContext)),GS&&(this.onCharData=A=>{this.queue.push({target:A.target,type:"characterData",oldValue:A.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var A;((A=this.view.docView)===null||A===void 0?void 0:A.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),A.length>0&&A[A.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(A=>{A.length>0&&A[A.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((A,i)=>A!=e[i]))){this.gapIntersection.disconnect();for(let A of e)this.gapIntersection.observe(A);this.gaps=e}}onSelectionChange(e){let A=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(EC)?i.root.activeElement!=this.dom:!L4(this.dom,n))return;let o=n.anchorNode&&i.docView.tile.nearest(n.anchorNode);if(o&&o.isWidget()&&o.widget.ignoreEvent(e)){A||(this.selectionChanged=!1);return}(at.ie&&at.ie_version<=11||at.android&&at.chrome)&&!i.state.selection.main.empty&&n.focusNode&&G4(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,A=j4(e.root);if(!A)return!1;let i=at.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&xuA(this.view,A)||A;if(!i||this.selectionRange.eq(i))return!1;let n=L4(this.dom,i);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let o=this.delayedAndroidKey;o&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=o.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&o.force&&zE(this.dom,o.key,o.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(n)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:A,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let A=-1,i=-1,n=!1;for(let o of e){let a=this.readMutation(o);a&&(a.typeOver&&(n=!0),A==-1?{from:A,to:i}=a:(A=Math.min(a.from,A),i=Math.max(a.to,i)))}return{from:A,to:i,typeOver:n}}readChange(){let{from:e,to:A,typeOver:i}=this.processRecords(),n=this.selectionChanged&&L4(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new gk(this.view,e,A,i);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let A=this.readChange();if(!A)return this.view.requestMeasure(),!1;let i=this.view.state,n=bj(this.view,A);return this.view.state==i&&(A.domChanged||A.newSel&&!yw(this.view.state.selection,A.newSel.main))&&this.view.update([]),n}readMutation(e){let A=this.view.docView.tile.nearest(e.target);if(!A||A.isWidget())return null;if(A.markDirty(e.type=="attributes"),e.type=="childList"){let i=LP(A,e.previousSibling||e.target.previousSibling,-1),n=LP(A,e.nextSibling||e.target.nextSibling,1);return{from:i?A.posAfter(i):A.posAtStart,to:n?A.posBefore(n):A.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:A.posAtStart,to:A.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(EC)!=e.state.facet(EC)&&(e.view.contentDOM.editContext=e.state.facet(EC)?this.editContext.editContext:null))}destroy(){var e,A,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(A=this.gapIntersection)===null||A===void 0||A.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let n of this.scrollTargets)n.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function LP(t,e,A){for(;e;){let i=wa.get(e);if(i&&i.parent==t)return i;let n=e.parentNode;e=n!=t.dom?n:A>0?e.nextSibling:e.previousSibling}return null}function GP(t,e){let A=e.startContainer,i=e.startOffset,n=e.endContainer,o=e.endOffset,a=t.docView.domAtPos(t.state.selection.main.anchor,1);return G4(a.node,a.offset,n,o)&&([A,i,n,o]=[n,o,A,i]),{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}}function xuA(t,e){if(e.getComposedRanges){let n=e.getComposedRanges(t.root)[0];if(n)return GP(t,n)}let A=null;function i(n){n.preventDefault(),n.stopImmediatePropagation(),A=n.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",i,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",i,!0),A?GP(t,A):null}var Dk=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let A=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let n=e.state.selection.main,{anchor:o,head:a}=n,r=this.toEditorPos(i.updateRangeStart),s=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:r,drifted:!1});let l=s-r>i.text.length;r==this.from&&othis.to&&(s=o);let g=Mj(e.state.sliceDoc(r,s),i.text,(l?n.from:n.to)-r,l?"end":null);if(!g){let I=Ie.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));yw(I,n)||e.dispatch({selection:I,userEvent:"select"});return}let C={from:g.from+r,to:g.toA+r,insert:bn.of(i.text.slice(g.from,g.toB).split(` +`))};if((at.mac||at.android)&&C.from==a-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(C={from:r,to:s,insert:bn.of([i.text.replace("."," ")])}),this.pendingContextChange=C,!e.state.readOnly){let I=this.to-this.from+(C.to-C.from+C.insert.length);Yk(e,C,Ie.single(this.toEditorPos(i.selectionStart,I),this.toEditorPos(i.selectionEnd,I)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),C.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(A.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(A.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let n=[],o=null;for(let a=this.toEditorPos(i.rangeStart),r=this.toEditorPos(i.rangeEnd);a{let n=[];for(let o of i.getTextFormats()){let a=o.underlineStyle,r=o.underlineThickness;if(!/none/i.test(a)&&!/none/i.test(r)){let s=this.toEditorPos(o.rangeStart),l=this.toEditorPos(o.rangeEnd);if(s{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)A.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let n=j4(i.root);n&&n.rangeCount&&this.editContext.updateSelectionBounds(n.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let A=0,i=!1,n=this.pendingContextChange;return e.changes.iterChanges((o,a,r,s,l)=>{if(i)return;let g=l.length-(a-o);if(n&&a>=n.to)if(n.from==o&&n.to==a&&n.insert.eq(l)){n=this.pendingContextChange=null,A+=g,this.to+=g;return}else n=null,this.revertPending(e.state);if(o+=A,a+=A,a<=this.from)this.from+=g,this.to+=g;else if(othis.to||this.to-this.from+l.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(o),this.toContextPos(a),l.toString()),this.to+=g}A+=g}),n&&!i&&this.revertPending(e.state),!i}update(e){let A=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(n=>!n.isUserEvent("input.type")&&n.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||A)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:A}=e.selection.main;this.from=Math.max(0,A-1e4),this.to=Math.min(e.doc.length,A+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let A=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(A.from),this.toContextPos(A.from+A.insert.length),e.doc.sliceString(A.from,A.to))}setSelection(e){let{main:A}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,A.anchor))),n=this.toContextPos(A.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=n)&&this.editContext.updateSelection(i,n)}rangeIsValid(e){let{head:A}=e.selection.main;return!(this.from>0&&A-this.from<500||this.to1e4*3)}toEditorPos(e,A=this.to-this.from){e=Math.min(e,A);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let A=this.composing;return A&&A.drifted?A.contextBase+(e-A.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},gi=(()=>{class t{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(A={}){var i;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),A.parent&&A.parent.appendChild(this.dom);let{dispatch:n}=A;this.dispatchTransactions=A.dispatchTransactions||n&&(o=>o.forEach(a=>n(a,this)))||(o=>this.update(o)),this.dispatch=this.dispatch.bind(this),this._root=A.root||yQA(A.parent)||document,this.viewState=new Mw(this,A.state||qa.create(A)),A.scrollTo&&A.scrollTo.is(iw)&&(this.viewState.scrollTarget=A.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(TE).map(o=>new U4(o));for(let o of this.plugins)o.update(this);this.observer=new wk(this),this.inputState=new ck(this),this.inputState.ensureHandlers(this.plugins),this.docView=new ww(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((i=document.fonts)===null||i===void 0)&&i.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...A){let i=A.length==1&&A[0]instanceof I0?A:A.length==1&&Array.isArray(A[0])?A[0]:[this.state.update(...A)];this.dispatchTransactions(i,this)}update(A){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let i=!1,n=!1,o,a=this.state;for(let d of A){if(d.startState!=a)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");a=d.state}if(this.destroyed){this.viewState.state=a;return}let r=this.hasFocus,s=0,l=null;A.some(d=>d.annotation(Nj))?(this.inputState.notifiedFocused=r,s=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,l=Fj(a,r),l||(s=1));let g=this.observer.delayedAndroidKey,C=null;if(g?(this.observer.clearDelayedAndroidKey(),C=this.observer.readChange(),(C&&!this.state.doc.eq(a.doc)||!this.state.selection.eq(a.selection))&&(C=null)):this.observer.clear(),a.facet(qa.phrases)!=this.state.facet(qa.phrases))return this.setState(a);o=pw.create(this,a,A),o.flags|=s;let I=this.viewState.scrollTarget;try{this.updateState=2;for(let d of A){if(I&&(I=I.map(d.changes)),d.scrollIntoView){let{main:h}=d.state.selection;I=new K4(h.empty?h:Ie.cursor(h.head,h.head>h.anchor?-1:1))}for(let h of d.effects)h.is(iw)&&(I=h.value.clip(this.state))}this.viewState.update(o,I),this.bidiCache=Sw.update(this.bidiCache,o.changes),o.empty||(this.updatePlugins(o),this.inputState.update(o)),i=this.docView.update(o),this.state.facet(R4)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(A),this.docView.updateSelection(i,A.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(o.startState.facet(sw)!=o.state.facet(sw)&&(this.viewState.mustMeasureContent=!0),(i||n||I||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!o.empty)for(let d of this.state.facet(_S))try{d(o)}catch(h){Sr(this.state,h,"update listener")}(l||C)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),C&&!bj(this,C)&&g.force&&zE(this.contentDOM,g.key,g.keyCode)})}setState(A){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=A;return}this.updateState=2;let i=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new Mw(this,A),this.plugins=A.facet(TE).map(n=>new U4(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new ww(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}i&&this.focus(),this.requestMeasure()}updatePlugins(A){let i=A.startState.facet(TE),n=A.state.facet(TE);if(i!=n){let o=[];for(let a of n){let r=i.indexOf(a);if(r<0)o.push(new U4(a));else{let s=this.plugins[r];s.mustUpdate=A,o.push(s)}}for(let a of this.plugins)a.mustUpdate!=A&&a.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let o of this.plugins)o.mustUpdate=A;for(let o=0;o-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,A&&this.observer.forceFlush();let i=null,n=this.viewState.scrollParent,o=this.viewState.getScrollOffset(),{scrollAnchorPos:a,scrollAnchorHeight:r}=this.viewState;Math.abs(o-this.viewState.scrollOffset)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let s=0;;s++){if(r<0)if(ij(n||this.win))a=-1,r=this.viewState.heightMap.height;else{let h=this.viewState.scrollAnchorAt(o);a=h.from,r=h.top}this.updateState=1;let l=this.viewState.measure();if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(s>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let g=[];l&4||([this.measureRequests,g]=[g,this.measureRequests]);let C=g.map(h=>{try{return h.read(this)}catch(E){return Sr(this.state,E),KP}}),I=pw.create(this,this.state,[]),d=!1;I.flags|=l,i?i.flags|=l:i=I,this.updateState=2,I.empty||(this.updatePlugins(I),this.inputState.update(I),this.updateAttrs(),d=this.docView.update(I),d&&this.docViewUpdate());for(let h=0;h1||E<-1)&&(n==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){o=o+E,n?n.scrollTop+=E:this.win.scrollBy(0,E),r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(i&&!i.empty)for(let s of this.state.facet(_S))s(i)}get themeClasses(){return pk+" "+(this.state.facet(LS)?Kj:Gj)+" "+this.state.facet(sw)}updateAttrs(){let A=UP(this,QP,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),i={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(EC)?"true":"false",class:"cm-content",style:`${at.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(i["aria-readonly"]="true"),UP(this,ZS,i);let n=this.observer.ignore(()=>{let o=dP(this.contentDOM,this.contentAttrs,i),a=dP(this.dom,this.editorAttrs,A);return o||a});return this.editorAttrs=A,this.contentAttrs=i,n}showAnnouncements(A){let i=!0;for(let n of A)for(let o of n.effects)if(o.is(t.announce)){i&&(this.announceDOM.textContent=""),i=!1;let a=this.announceDOM.appendChild(document.createElement("div"));a.textContent=o.value}}mountStyles(){this.styleModules=this.state.facet(R4);let A=this.state.facet(t.cspNonce);cg.mount(this.root,this.styleModules.concat(SuA).reverse(),A?{nonce:A}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(A){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),A){if(this.measureRequests.indexOf(A)>-1)return;if(A.key!=null){for(let i=0;in.plugin==A)||null),i&&i.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(A){return this.readMeasured(),this.viewState.elementAtHeight(A)}lineBlockAtHeight(A){return this.readMeasured(),this.viewState.lineBlockAtHeight(A)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(A){return this.viewState.lineBlockAt(A)}get contentHeight(){return this.viewState.contentHeight}moveByChar(A,i,n){return FS(this,A,wP(this,A,i,n))}moveByGroup(A,i){return FS(this,A,wP(this,A,i,n=>AuA(this,A.head,n)))}visualLineSide(A,i){let n=this.bidiSpans(A),o=this.textDirectionAt(A.from),a=n[i?n.length-1:0];return Ie.cursor(a.side(i,o)+A.from,a.forward(!i,o)?1:-1)}moveToLineBoundary(A,i,n=!0){return $QA(this,A,i,n)}moveVertically(A,i,n){return FS(this,A,euA(this,A,i,n))}domAtPos(A,i=1){return this.docView.domAtPos(A,i)}posAtDOM(A,i=0){return this.docView.posFromDOM(A,i)}posAtCoords(A,i=!0){this.readMeasured();let n=rk(this,A,i);return n&&n.pos}posAndSideAtCoords(A,i=!0){return this.readMeasured(),rk(this,A,i)}coordsAtPos(A,i=1){this.readMeasured();let n=this.docView.coordsAt(A,i);if(!n||n.left==n.right)return n;let o=this.state.doc.lineAt(A),a=this.bidiSpans(o),r=a[dg.find(a,A-o.from,-1,i)];return fw(n,r.dir==mo.LTR==i>0)}coordsForChar(A){return this.readMeasured(),this.docView.coordsForChar(A)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(A){return!this.state.facet(hP)||Athis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(A))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(A){if(A.length>_uA)return lj(A.length);let i=this.textDirectionAt(A.from),n;for(let a of this.bidiCache)if(a.from==A.from&&a.dir==i&&(a.fresh||sj(a.isolates,n=uP(this,A))))return a.order;n||(n=uP(this,A));let o=RQA(A.text,i,n);return this.bidiCache.push(new Sw(A.from,A.to,i,n,!0,o)),o}get hasFocus(){var A;return(this.dom.ownerDocument.hasFocus()||at.safari&&((A=this.inputState)===null||A===void 0?void 0:A.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{tj(this.contentDOM),this.docView.updateSelection()})}setRoot(A){this._root!=A&&(this._root=A,this.observer.setWindow((A.nodeType==9?A:A.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let A of this.plugins)A.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(A,i={}){return iw.of(new K4(typeof A=="number"?Ie.cursor(A):A,i.y,i.x,i.yMargin,i.xMargin))}scrollSnapshot(){let{scrollTop:A,scrollLeft:i}=this.scrollDOM,n=this.viewState.scrollAnchorAt(A);return iw.of(new K4(Ie.cursor(n.from),"start","start",n.top-A,i,!0))}setTabFocusMode(A){A==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof A=="boolean"?this.inputState.tabFocusMode=A?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+A)}static domEventHandlers(A){return _o.define(()=>({}),{eventHandlers:A})}static domEventObservers(A){return _o.define(()=>({}),{eventObservers:A})}static theme(A,i){let n=cg.newName(),o=[sw.of(n),R4.of(mk(`.${n}`,A))];return i&&i.dark&&o.push(LS.of(!0)),o}static baseTheme(A){return ac.lowest(R4.of(mk("."+pk,A,Uj)))}static findFromDOM(A){var i;let n=A.querySelector(".cm-content"),o=n&&wa.get(n)||wa.get(A);return((i=o?.root)===null||i===void 0?void 0:i.view)||null}}return t.styleModule=R4,t.inputHandler=Bj,t.clipboardInputFilter=Uk,t.clipboardOutputFilter=Tk,t.scrollHandler=Qj,t.focusChangeEffect=Ej,t.perLineTextDirection=hP,t.exceptionSink=dj,t.updateListener=_S,t.editable=EC,t.mouseSelectionStyle=Ij,t.dragMovesSelection=Cj,t.clickAddsSelectionRange=cj,t.decorations=Lw,t.blockWrappers=fj,t.outerDecorations=Jk,t.atomicRanges=V4,t.bidiIsolatedRanges=pj,t.scrollMargins=mj,t.darkTheme=LS,t.cspNonce=At.define({combine:e=>e.length?e[0]:""}),t.contentAttributes=ZS,t.editorAttributes=QP,t.lineWrapping=t.contentAttributes.of({class:"cm-lineWrapping"}),t.announce=Wi.define(),t})(),_uA=4096,KP={},Sw=class t{constructor(e,A,i,n,o,a){this.from=e,this.to=A,this.dir=i,this.isolates=n,this.fresh=o,this.order=a}static update(e,A){if(A.empty&&!e.some(o=>o.fresh))return e;let i=[],n=e.length?e[e.length-1].dir:mo.LTR;for(let o=Math.max(0,e.length-10);o=0;n--){let o=i[n],a=typeof o=="function"?o(t):o;a&&Lk(a,A)}return A}var RuA=at.mac?"mac":at.windows?"win":at.linux?"linux":"key";function NuA(t,e){let A=t.split(/-(?!$)/),i=A[A.length-1];i=="Space"&&(i=" ");let n,o,a,r;for(let s=0;si.concat(n),[]))),A}function Jj(t,e,A){return Oj(Tj(t.state),e,t,A)}var V2=null,LuA=4e3;function GuA(t,e=RuA){let A=Object.create(null),i=Object.create(null),n=(a,r)=>{let s=i[a];if(s==null)i[a]=r;else if(s!=r)throw new Error("Key binding "+a+" is used both as a regular binding and as a multi-stroke prefix")},o=(a,r,s,l,g)=>{var C,I;let d=A[a]||(A[a]=Object.create(null)),h=r.split(/ (?!$)/).map(m=>NuA(m,e));for(let m=1;m{let S=V2={view:k,prefix:v,scope:a};return setTimeout(()=>{V2==S&&(V2=null)},LuA),!0}]})}let E=h.join(" ");n(E,!1);let f=d[E]||(d[E]={preventDefault:!1,stopPropagation:!1,run:((I=(C=d._any)===null||C===void 0?void 0:C.run)===null||I===void 0?void 0:I.slice())||[]});s&&f.run.push(s),l&&(f.preventDefault=!0),g&&(f.stopPropagation=!0)};for(let a of t){let r=a.scope?a.scope.split(" "):["editor"];if(a.any)for(let l of r){let g=A[l]||(A[l]=Object.create(null));g._any||(g._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:C}=a;for(let I in g)g[I].run.push(d=>C(d,yk))}let s=a[e]||a.key;if(s)for(let l of r)o(l,s,a.run,a.preventDefault,a.stopPropagation),a.shift&&o(l,"Shift-"+s,a.shift,a.preventDefault,a.stopPropagation)}return A}var yk=null;function Oj(t,e,A,i){yk=e;let n=lP(e),o=qr(n,0),a=_l(o)==n.length&&n!=" ",r="",s=!1,l=!1,g=!1;V2&&V2.view==A&&V2.scope==i&&(r=V2.prefix+" ",kj.indexOf(e.keyCode)<0&&(l=!0,V2=null));let C=new Set,I=f=>{if(f){for(let m of f.run)if(!C.has(m)&&(C.add(m),m(A)))return f.stopPropagation&&(g=!0),!0;f.preventDefault&&(f.stopPropagation&&(g=!0),l=!0)}return!1},d=t[i],h,E;return d&&(I(d[r+lw(n,e,!a)])?s=!0:a&&(e.altKey||e.metaKey||e.ctrlKey)&&!(at.windows&&e.ctrlKey&&e.altKey)&&!(at.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(h=BC[e.keyCode])&&h!=n?(I(d[r+lw(h,e,!0)])||e.shiftKey&&(E=KE[e.keyCode])!=n&&E!=h&&I(d[r+lw(E,e,!1)]))&&(s=!0):a&&e.shiftKey&&I(d[r+lw(n,e,!0)])&&(s=!0),!s&&I(d._any)&&(s=!0)),l&&(s=!0),s&&g&&e.stopPropagation(),yk=null,s}var H1=class t{constructor(e,A,i,n,o){this.className=e,this.left=A,this.top=i,this.width=n,this.height=o}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,A){return A.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,A,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let o=Yj(e);return[new t(A,n.left-o.left,n.top-o.top,null,n.bottom-n.top)]}else return KuA(e,A,i)}};function Yj(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==mo.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function JP(t,e,A,i){let n=t.coordsAtPos(e,A*2);if(!n)return i;let o=t.dom.getBoundingClientRect(),a=(n.top+n.bottom)/2,r=t.posAtCoords({x:o.left+1,y:a}),s=t.posAtCoords({x:o.right-1,y:a});return r==null||s==null?i:{from:Math.max(i.from,Math.min(r,s)),to:Math.min(i.to,Math.max(r,s))}}function KuA(t,e,A){if(A.to<=t.viewport.from||A.from>=t.viewport.to)return[];let i=Math.max(A.from,t.viewport.from),n=Math.min(A.to,t.viewport.to),o=t.textDirection==mo.LTR,a=t.contentDOM,r=a.getBoundingClientRect(),s=Yj(t),l=a.querySelector(".cm-line"),g=l&&window.getComputedStyle(l),C=r.left+(g?parseInt(g.paddingLeft)+Math.min(0,parseInt(g.textIndent)):0),I=r.right-(g?parseInt(g.paddingRight):0),d=ak(t,i,1),h=ak(t,n,-1),E=d.type==Vr.Text?d:null,f=h.type==Vr.Text?h:null;if(E&&(t.lineWrapping||d.widgetLineBreaks)&&(E=JP(t,i,1,E)),f&&(t.lineWrapping||h.widgetLineBreaks)&&(f=JP(t,n,-1,f)),E&&f&&E.from==f.from&&E.to==f.to)return v(k(A.from,A.to,E));{let b=E?k(A.from,null,E):S(d,!1),x=f?k(null,A.to,f):S(h,!0),F=[];return(E||d).to<(f||h).from-(E&&f?1:0)||d.widgetLineBreaks>1&&b.bottom+t.defaultLineHeight/2Z&&X.from=AA)break;uA>iA&&eA(Math.max(rA,iA),b==null&&rA<=Z,Math.min(uA,AA),x==null&&uA>=EA,aA.dir)}if(iA=IA.to+1,iA>=AA)break}return W.length==0&&eA(Z,b==null,EA,x==null,t.textDirection),{top:z,bottom:P,horizontal:W}}function S(b,x){let F=r.top+(x?b.top:b.bottom);return{top:F,bottom:F,horizontal:[]}}}function UuA(t,e){return t.constructor==e.constructor&&t.eq(e)}var vk=class{constructor(e,A){this.view=e,this.layer=A,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),A.above&&this.dom.classList.add("cm-layer-above"),A.class&&this.dom.classList.add(A.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),A.mount&&A.mount(this.dom,e)}update(e){e.startState.facet(dw)!=e.state.facet(dw)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let A=0,i=e.facet(dw);for(;A!UuA(A,this.drawn[i]))){let A=this.dom.firstChild,i=0;for(let n of e)n.update&&A&&n.constructor&&this.drawn[i].constructor&&n.update(A,this.drawn[i])?(A=A.nextSibling,i++):this.dom.insertBefore(n.draw(),A);for(;A;){let n=A.nextSibling;A.remove(),A=n}this.drawn=e,at.safari&&at.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},dw=At.define();function Hj(t){return[_o.define(e=>new vk(e,t)),dw.of(t)]}var ZE=At.define({combine(t){return Mr(t,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,A)=>Math.min(e,A),drawRangeCursor:(e,A)=>e||A})}});function zj(t={}){return[ZE.of(t),TuA,JuA,OuA,hj.of(!0)]}function Pj(t){return t.startState.facet(ZE)!=t.state.facet(ZE)}var TuA=Hj({above:!0,markers(t){let{state:e}=t,A=e.facet(ZE),i=[];for(let n of e.selection.ranges){let o=n==e.selection.main;if(n.empty||A.drawRangeCursor&&!(o&&at.ios&&A.iosSelectionHandles)){let a=o?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",r=n.empty?n:Ie.cursor(n.head,n.assoc);for(let s of H1.forRange(t,a,r))i.push(s)}}return i},update(t,e){t.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let A=Pj(t);return A&&OP(t.state,e),t.docChanged||t.selectionSet||A},mount(t,e){OP(e.state,t)},class:"cm-cursorLayer"});function OP(t,e){e.style.animationDuration=t.facet(ZE).cursorBlinkRate+"ms"}var JuA=Hj({above:!1,markers(t){let e=[],{main:A,ranges:i}=t.state.selection;for(let n of i)if(!n.empty)for(let o of H1.forRange(t,"cm-selectionBackground",n))e.push(o);if(at.ios&&!A.empty&&t.state.facet(ZE).iosSelectionHandles){for(let n of H1.forRange(t,"cm-selectionHandle cm-selectionHandle-start",Ie.cursor(A.from,1)))e.push(n);for(let n of H1.forRange(t,"cm-selectionHandle cm-selectionHandle-end",Ie.cursor(A.to,1)))e.push(n)}return e},update(t,e){return t.docChanged||t.selectionSet||t.viewportChanged||Pj(t)},class:"cm-selectionLayer"}),OuA=ac.highest(gi.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),jj=Wi.define({map(t,e){return t==null?null:e.mapPos(t)}}),F4=Ma.define({create(){return null},update(t,e){return t!=null&&(t=e.changes.mapPos(t)),e.effects.reduce((A,i)=>i.is(jj)?i.value:A,t)}}),YuA=_o.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let A=t.state.field(F4);A==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(F4)!=A||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(F4),A=e!=null&&t.coordsAtPos(e);if(!A)return null;let i=t.scrollDOM.getBoundingClientRect();return{left:A.left-i.left+t.scrollDOM.scrollLeft*t.scaleX,top:A.top-i.top+t.scrollDOM.scrollTop*t.scaleY,height:A.bottom-A.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:A}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/A+"px",this.cursor.style.height=t.height/A+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(F4)!=t&&this.view.dispatch({effects:jj.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){(t.target==this.view.contentDOM||!this.view.contentDOM.contains(t.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function qj(){return[F4,YuA]}function YP(t,e,A,i,n){e.lastIndex=0;for(let o=t.iterRange(A,i),a=A,r;!o.next().done;a+=o.value.length)if(!o.lineBreak)for(;r=e.exec(o.value);)n(a+r.index,r)}function HuA(t,e){let A=t.visibleRanges;if(A.length==1&&A[0].from==t.viewport.from&&A[0].to==t.viewport.to)return A;let i=[];for(let{from:n,to:o}of A)n=Math.max(t.state.doc.lineAt(n).from,n-e),o=Math.min(t.state.doc.lineAt(o).to,o+e),i.length&&i[i.length-1].to>=n?i[i.length-1].to=o:i.push({from:n,to:o});return i}var bk=class{constructor(e){let{regexp:A,decoration:i,decorate:n,boundary:o,maxLength:a=1e3}=e;if(!A.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=A,n)this.addMatch=(r,s,l,g)=>n(g,l,l+r[0].length,r,s);else if(typeof i=="function")this.addMatch=(r,s,l,g)=>{let C=i(r,s,l);C&&g(l,l+r[0].length,C)};else if(i)this.addMatch=(r,s,l,g)=>g(l,l+r[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=o,this.maxLength=a}createDeco(e){let A=new jr,i=A.add.bind(A);for(let{from:n,to:o}of HuA(e,this.maxLength))YP(e.state.doc,this.regexp,n,o,(a,r)=>this.addMatch(r,e,a,i));return A.finish()}updateDeco(e,A){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges((o,a,r,s)=>{s>=e.view.viewport.from&&r<=e.view.viewport.to&&(i=Math.min(r,i),n=Math.max(s,n))}),e.viewportMoved||n-i>1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,A.map(e.changes),i,n):A}updateRange(e,A,i,n){for(let o of e.visibleRanges){let a=Math.max(o.from,i),r=Math.min(o.to,n);if(r>=a){let s=e.state.doc.lineAt(a),l=s.tos.from;a--)if(this.boundary.test(s.text[a-1-s.from])){g=a;break}for(;rI.push(m.range(E,f));if(s==l)for(this.regexp.lastIndex=g-s.from;(d=this.regexp.exec(s.text))&&d.indexthis.addMatch(f,e,E,h));A=A.update({filterFrom:g,filterTo:C,filter:(E,f)=>EC,add:I})}}return A}},Mk=/x/.unicode!=null?"gu":"g",zuA=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,Mk),PuA={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},KS=null;function juA(){var t;if(KS==null&&typeof document<"u"&&document.body){let e=document.body.style;KS=((t=e.tabSize)!==null&&t!==void 0?t:e.MozTabSize)!=null}return KS||!1}var Bw=At.define({combine(t){let e=Mr(t,{render:null,specialChars:zuA,addSpecialChars:null});return(e.replaceTabs=!juA())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,Mk)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,Mk)),e}});function Vj(t={}){return[Bw.of(t),quA()]}var HP=null;function quA(){return HP||(HP=_o.fromClass(class{constructor(t){this.view=t,this.decorations=St.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(Bw)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new bk({regexp:t.specialChars,decoration:(e,A,i)=>{let{doc:n}=A.state,o=qr(e[0],0);if(o==9){let a=n.lineAt(i),r=A.state.tabSize,s=dC(a.text,r,i-a.from);return St.replace({widget:new kk((r-s%r)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[o]||(this.decorationCache[o]=St.replace({widget:new Sk(t,o)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(Bw);t.startState.facet(Bw)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))}var VuA="\u2022";function WuA(t){return t>=32?VuA:t==10?"\u2424":String.fromCharCode(9216+t)}var Sk=class extends sl{constructor(e,A){super(),this.options=e,this.code=A}eq(e){return e.code==this.code}toDOM(e){let A=WuA(this.code),i=e.state.phrase("Control character")+" "+(PuA[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,A);if(n)return n;let o=document.createElement("span");return o.textContent=A,o.title=i,o.setAttribute("aria-label",i),o.className="cm-specialChar",o}ignoreEvent(){return!1}},kk=class extends sl{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function Wj(){return XuA}var ZuA=St.line({class:"cm-activeLine"}),XuA=_o.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,A=[];for(let i of t.state.selection.ranges){let n=t.lineBlockAt(i.head);n.from>e&&(A.push(ZuA.range(n.from)),e=n.from)}return St.set(A)}},{decorations:t=>t.decorations});var xk=2e3;function $uA(t,e,A){let i=Math.min(e.line,A.line),n=Math.max(e.line,A.line),o=[];if(e.off>xk||A.off>xk||e.col<0||A.col<0){let a=Math.min(e.off,A.off),r=Math.max(e.off,A.off);for(let s=i;s<=n;s++){let l=t.doc.line(s);l.length<=r&&o.push(Ie.range(l.from+a,l.to+r))}}else{let a=Math.min(e.col,A.col),r=Math.max(e.col,A.col);for(let s=i;s<=n;s++){let l=t.doc.line(s),g=ew(l.text,a,t.tabSize,!0);if(g<0)o.push(Ie.cursor(l.to));else{let C=ew(l.text,r,t.tabSize);o.push(Ie.range(l.from+g,l.from+C))}}}return o}function A4A(t,e){let A=t.coordsAtPos(t.viewport.from);return A?Math.round(Math.abs((A.left-e)/t.defaultCharacterWidth)):-1}function zP(t,e){let A=t.posAtCoords({x:e.clientX,y:e.clientY},!1),i=t.state.doc.lineAt(A),n=A-i.from,o=n>xk?-1:n==i.length?A4A(t,e.clientX):dC(i.text,t.state.tabSize,A-i.from);return{line:i.number,col:o,off:n}}function e4A(t,e){let A=zP(t,e),i=t.state.selection;return A?{update(n){if(n.docChanged){let o=n.changes.mapPos(n.startState.doc.line(A.line).from),a=n.state.doc.lineAt(o);A={line:a.number,col:A.col,off:Math.min(A.off,a.length)},i=i.map(n.changes)}},get(n,o,a){let r=zP(t,n);if(!r)return i;let s=$uA(t.state,A,r);return s.length?a?Ie.create(s.concat(i.ranges)):Ie.create(s):i}}:null}function Zj(t){let e=t?.eventFilter||(A=>A.altKey&&A.button==0);return gi.mouseSelectionStyle.of((A,i)=>e(i)?e4A(A,i):null)}var t4A={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},i4A={style:"cursor: crosshair"};function Xj(t={}){let[e,A]=t4A[t.key||"Alt"],i=_o.fromClass(class{constructor(n){this.view=n,this.isDown=!1}set(n){this.isDown!=n&&(this.isDown=n,this.view.update([]))}},{eventObservers:{keydown(n){this.set(n.keyCode==e||A(n))},keyup(n){(n.keyCode==e||!A(n))&&this.set(!1)},mousemove(n){this.set(A(n))}}});return[i,gi.contentAttributes.of(n=>{var o;return!((o=n.plugin(i))===null||o===void 0)&&o.isDown?i4A:null})]}var gw="-10000px",kw=class{constructor(e,A,i,n){this.facet=A,this.createTooltipView=i,this.removeTooltipView=n,this.input=e.state.facet(A),this.tooltips=this.input.filter(a=>a);let o=null;this.tooltipViews=this.tooltips.map(a=>o=i(a,o))}update(e,A){var i;let n=e.state.facet(this.facet),o=n.filter(s=>s);if(n===this.input){for(let s of this.tooltipViews)s.update&&s.update(e);return!1}let a=[],r=A?[]:null;for(let s=0;sA[l]=s),A.length=r.length),this.input=n,this.tooltips=o,this.tooltipViews=a,!0}};function n4A(t){let e=t.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var US=At.define({combine:t=>{var e,A,i;return{position:at.ios?"absolute":((e=t.find(n=>n.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((A=t.find(n=>n.parent))===null||A===void 0?void 0:A.parent)||null,tooltipSpace:((i=t.find(n=>n.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||n4A}}}),PP=new WeakMap,Hk=_o.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(US);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new kw(t,$E,(A,i)=>this.createTooltip(A,i),A=>{this.resizeObserver&&this.resizeObserver.unobserve(A.dom),A.dom.remove()}),this.above=this.manager.tooltips.map(A=>!!A.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(A=>{Date.now()>this.lastTransaction-50&&A.length>0&&A[A.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let A=e||t.geometryChanged,i=t.state.facet(US);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let n of this.manager.tooltipViews)n.dom.style.position=this.position;A=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let n of this.manager.tooltipViews)this.container.appendChild(n.dom);A=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);A&&this.maybeMeasure()}createTooltip(t,e){let A=t.create(this.view),i=e?e.dom:null;if(A.dom.classList.add("cm-tooltip"),t.arrow&&!A.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let n=document.createElement("div");n.className="cm-tooltip-arrow",A.dom.appendChild(n)}return A.dom.style.position=this.position,A.dom.style.top=gw,A.dom.style.left="0px",this.container.insertBefore(A.dom,i),A.mount&&A.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(A.dom),A}destroy(){var t,e,A;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(t=i.destroy)===null||t===void 0||t.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(A=this.intersectionObserver)===null||A===void 0||A.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=1,e=1,A=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:o}=this.manager.tooltipViews[0];if(at.safari){let a=o.getBoundingClientRect();A=Math.abs(a.top+1e4)>1||Math.abs(a.left)>1}else A=!!o.offsetParent&&o.offsetParent!=this.container.ownerDocument.body}if(A||this.position=="absolute")if(this.parent){let o=this.parent.getBoundingClientRect();o.width&&o.height&&(t=o.width/this.parent.offsetWidth,e=o.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),n=Ok(this.view);return{visible:{left:i.left+n.left,top:i.top+n.top,right:i.right-n.right,bottom:i.bottom-n.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((o,a)=>{let r=this.manager.tooltipViews[a];return r.getCoords?r.getCoords(o.pos):this.view.coordsAtPos(o.pos)}),size:this.manager.tooltipViews.map(({dom:o})=>o.getBoundingClientRect()),space:this.view.state.facet(US).tooltipSpace(this.view),scaleX:t,scaleY:e,makeAbsolute:A}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let r of this.manager.tooltipViews)r.dom.style.position="absolute"}let{visible:A,space:i,scaleX:n,scaleY:o}=t,a=[];for(let r=0;r=Math.min(A.bottom,i.bottom)||C.rightMath.min(A.right,i.right)+.1)){g.style.top=gw;continue}let d=s.arrow?l.dom.querySelector(".cm-tooltip-arrow"):null,h=d?7:0,E=I.right-I.left,f=(e=PP.get(l))!==null&&e!==void 0?e:I.bottom-I.top,m=l.offset||a4A,v=this.view.textDirection==mo.LTR,k=I.width>i.right-i.left?v?i.left:i.right-I.width:v?Math.max(i.left,Math.min(C.left-(d?14:0)+m.x,i.right-E)):Math.min(Math.max(i.left,C.left-E+(d?14:0)-m.x),i.right-E),S=this.above[r];!s.strictSide&&(S?C.top-f-h-m.yi.bottom)&&S==i.bottom-C.bottom>C.top-i.top&&(S=this.above[r]=!S);let b=(S?C.top-i.top:i.bottom-C.bottom)-h;if(bk&&z.topx&&(x=S?z.top-f-2-h:z.bottom+h+2);if(this.position=="absolute"?(g.style.top=(x-t.parent.top)/o+"px",jP(g,(k-t.parent.left)/n)):(g.style.top=x/o+"px",jP(g,k/n)),d){let z=C.left+(v?m.x:-m.x)-(k+14-7);d.style.left=z/n+"px"}l.overlap!==!0&&a.push({left:k,top:x,right:F,bottom:x+f}),g.classList.toggle("cm-tooltip-above",S),g.classList.toggle("cm-tooltip-below",!S),l.positioned&&l.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=gw}},{eventObservers:{scroll(){this.maybeMeasure()}}});function jP(t,e){let A=parseInt(t.style.left,10);(isNaN(A)||Math.abs(e-A)>1)&&(t.style.left=e+"px")}var o4A=gi.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),a4A={x:0,y:0},$E=At.define({enables:[Hk,o4A]}),xw=At.define({combine:t=>t.reduce((e,A)=>e.concat(A),[])}),_w=class t{static create(e){return new t(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new kw(e,xw,(A,i)=>this.createHostedView(A,i),A=>A.dom.remove())}createHostedView(e,A){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,A?A.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let A of this.manager.tooltipViews)A.mount&&A.mount(e);this.mounted=!0}positioned(e){for(let A of this.manager.tooltipViews)A.positioned&&A.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let A of this.manager.tooltipViews)(e=A.destroy)===null||e===void 0||e.call(A)}passProp(e){let A;for(let i of this.manager.tooltipViews){let n=i[e];if(n!==void 0){if(A===void 0)A=n;else if(A!==n)return}}return A}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},r4A=$E.compute([xw],t=>{let e=t.facet(xw);return e.length===0?null:{pos:Math.min(...e.map(A=>A.pos)),end:Math.max(...e.map(A=>{var i;return(i=A.end)!==null&&i!==void 0?i:A.pos})),create:_w.create,above:e[0].above,arrow:e.some(A=>A.arrow)}}),_k=class{constructor(e,A,i,n,o){this.view=e,this.source=A,this.field=i,this.setHover=n,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;er.bottom||A.xr.right+e.defaultCharacterWidth)return;let s=e.bidiSpans(e.state.doc.lineAt(n)).find(g=>g.from<=n&&g.to>=n),l=s&&s.dir==mo.RTL?-1:1;o=A.x{this.pending==r&&(this.pending=null,s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])}))},s=>Sr(e.state,s,"hover tooltip"))}else a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])})}get tooltip(){let e=this.view.plugin(Hk),A=e?e.manager.tooltips.findIndex(i=>i.create==_w.create):-1;return A>-1?e.manager.tooltipViews[A]:null}mousemove(e){var A,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:n,tooltip:o}=this;if(n.length&&o&&!s4A(o.dom,e)||this.pending){let{pos:a}=n[0]||this.pending,r=(i=(A=n[0])===null||A===void 0?void 0:A.end)!==null&&i!==void 0?i:a;(a==r?this.view.posAtCoords(this.lastMove)!=a:!l4A(this.view,a,r,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:A}=this;if(A.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let A=i=>{e.removeEventListener("mouseleave",A),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",A)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},cw=4;function s4A(t,e){let{left:A,right:i,top:n,bottom:o}=t.getBoundingClientRect(),a;if(a=t.querySelector(".cm-tooltip-arrow")){let r=a.getBoundingClientRect();n=Math.min(r.top,n),o=Math.max(r.bottom,o)}return e.clientX>=A-cw&&e.clientX<=i+cw&&e.clientY>=n-cw&&e.clientY<=o+cw}function l4A(t,e,A,i,n,o){let a=t.scrollDOM.getBoundingClientRect(),r=t.documentTop+t.documentPadding.top+t.contentHeight;if(a.left>i||a.rightn||Math.min(a.bottom,r)=e&&s<=A}function $j(t,e={}){let A=Wi.define(),i=Ma.define({create(){return[]},update(n,o){if(n.length&&(e.hideOnChange&&(o.docChanged||o.selection)?n=[]:e.hideOn&&(n=n.filter(a=>!e.hideOn(o,a))),o.docChanged)){let a=[];for(let r of n){let s=o.changes.mapPos(r.pos,-1,zr.TrackDel);if(s!=null){let l=Object.assign(Object.create(null),r);l.pos=s,l.end!=null&&(l.end=o.changes.mapPos(l.end)),a.push(l)}}n=a}for(let a of o.effects)a.is(A)&&(n=a.value),a.is(g4A)&&(n=[]);return n},provide:n=>xw.from(n)});return{active:i,extension:[i,_o.define(n=>new _k(n,t,i,A,e.hoverTime||300)),r4A]}}function zk(t,e){let A=t.plugin(Hk);if(!A)return null;let i=A.manager.tooltips.indexOf(e);return i<0?null:A.manager.tooltipViews[i]}var g4A=Wi.define();var qP=At.define({combine(t){let e,A;for(let i of t)e=e||i.topContainer,A=A||i.bottomContainer;return{topContainer:e,bottomContainer:A}}});function W4(t,e){let A=t.plugin(Aq),i=A?A.specs.indexOf(e):-1;return i>-1?A.panels[i]:null}var Aq=_o.fromClass(class{constructor(t){this.input=t.state.facet(q1),this.specs=this.input.filter(A=>A),this.panels=this.specs.map(A=>A(t));let e=t.state.facet(qP);this.top=new OE(t,!0,e.topContainer),this.bottom=new OE(t,!1,e.bottomContainer),this.top.sync(this.panels.filter(A=>A.top)),this.bottom.sync(this.panels.filter(A=>!A.top));for(let A of this.panels)A.dom.classList.add("cm-panel"),A.mount&&A.mount()}update(t){let e=t.state.facet(qP);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new OE(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new OE(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let A=t.state.facet(q1);if(A!=this.input){let i=A.filter(s=>s),n=[],o=[],a=[],r=[];for(let s of i){let l=this.specs.indexOf(s),g;l<0?(g=s(t.view),r.push(g)):(g=this.panels[l],g.update&&g.update(t)),n.push(g),(g.top?o:a).push(g)}this.specs=i,this.panels=n,this.top.sync(o),this.bottom.sync(a);for(let s of r)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}else for(let i of this.panels)i.update&&i.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>gi.scrollMargins.of(e=>{let A=e.plugin(t);return A&&{top:A.top.scrollMargin(),bottom:A.bottom.scrollMargin()}})}),OE=class{constructor(e,A,i){this.view=e,this.top=A,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let A of this.panels)A.destroy&&e.indexOf(A)<0&&A.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let A=this.container||this.view.dom;A.insertBefore(this.dom,this.top?A.firstChild:null)}let e=this.dom.firstChild;for(let A of this.panels)if(A.dom.parentNode==this.dom){for(;e!=A.dom;)e=VP(e);e=e.nextSibling}else this.dom.insertBefore(A.dom,e);for(;e;)e=VP(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function VP(t){let e=t.nextSibling;return t.remove(),e}var q1=At.define({enables:Aq});function eq(t,e){let A,i=new Promise(a=>A=a),n=a=>c4A(a,e,A);t.state.field(TS,!1)?t.dispatch({effects:tq.of(n)}):t.dispatch({effects:Wi.appendConfig.of(TS.init(()=>[n]))});let o=iq.of(n);return{close:o,result:i.then(a=>((t.win.queueMicrotask||(s=>t.win.setTimeout(s,10)))(()=>{t.state.field(TS).indexOf(n)>-1&&t.dispatch({effects:o})}),a))}}var TS=Ma.define({create(){return[]},update(t,e){for(let A of e.effects)A.is(tq)?t=[A.value].concat(t):A.is(iq)&&(t=t.filter(i=>i!=A.value));return t},provide:t=>q1.computeN([t],e=>e.field(t))}),tq=Wi.define(),iq=Wi.define();function c4A(t,e,A){let i=e.content?e.content(t,()=>a(null)):null;if(!i){if(i=no("form"),e.input){let r=no("input",e.input);/^(text|password|number|email|tel|url)$/.test(r.type)&&r.classList.add("cm-textfield"),r.name||(r.name="input"),i.appendChild(no("label",(e.label||"")+": ",r))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(no("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let n=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let r=0;r{l.keyCode==27?(l.preventDefault(),a(null)):l.keyCode==13&&(l.preventDefault(),a(s))}),s.addEventListener("submit",l=>{l.preventDefault(),a(s)})}let o=no("div",i,no("button",{onclick:()=>a(null),"aria-label":t.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(o.className=e.class),o.classList.add("cm-dialog");function a(r){o.contains(o.ownerDocument.activeElement)&&t.focus(),A(r)}return{dom:o,top:e.top,mount:()=>{if(e.focus){let r;typeof e.focus=="string"?r=i.querySelector(e.focus):r=i.querySelector("input")||i.querySelector("button"),r&&"select"in r?r.select():r&&"focus"in r&&r.focus()}}}}var gl=class extends gg{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};gl.prototype.elementClass="";gl.prototype.toDOM=void 0;gl.prototype.mapMode=zr.TrackBefore;gl.prototype.startSide=gl.prototype.endSide=-1;gl.prototype.point=!0;var Ew=At.define(),C4A=At.define(),I4A={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>io.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},Y4=At.define();function Kw(t){return[nq(),Y4.of(gA(gA({},I4A),t))]}var Rk=At.define({combine:t=>t.some(e=>e)});function nq(t){let e=[d4A];return t&&t.fixed===!1&&e.push(Rk.of(!0)),e}var d4A=_o.fromClass(class{constructor(t){this.view=t,this.domAfter=null,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet(Y4).map(e=>new Rw(t,e)),this.fixed=!t.state.facet(Rk);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(t){if(this.updateGutters(t)){let e=this.prevViewport,A=t.view.viewport,i=Math.min(e.to,A.to)-Math.max(e.from,A.from);this.syncGutters(i<(A.to-A.from)*.8)}if(t.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Rk)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let A=io.iter(this.view.state.facet(Ew),this.view.viewport.from),i=[],n=this.gutters.map(o=>new Fk(o,this.view.viewport,-this.view.documentPadding.top));for(let o of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(o.type)){let a=!0;for(let r of o.type)if(r.type==Vr.Text&&a){Nk(A,i,r.from);for(let s of n)s.line(this.view,r,i);a=!1}else if(r.widget)for(let s of n)s.widget(this.view,r)}else if(o.type==Vr.Text){Nk(A,i,o.from);for(let a of n)a.line(this.view,o,i)}else if(o.widget)for(let a of n)a.widget(this.view,o);for(let o of n)o.finish();t&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(t){let e=t.startState.facet(Y4),A=t.state.facet(Y4),i=t.docChanged||t.heightChanged||t.viewportChanged||!io.eq(t.startState.facet(Ew),t.state.facet(Ew),t.view.viewport.from,t.view.viewport.to);if(e==A)for(let n of this.gutters)n.update(t)&&(i=!0);else{i=!0;let n=[];for(let o of A){let a=e.indexOf(o);a<0?n.push(new Rw(this.view,o)):(this.gutters[a].update(t),n.push(this.gutters[a]))}for(let o of this.gutters)o.dom.remove(),n.indexOf(o)<0&&o.destroy();for(let o of n)o.config.side=="after"?this.getDOMAfter().appendChild(o.dom):this.dom.appendChild(o.dom);this.gutters=n}return i}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:t=>gi.scrollMargins.of(e=>{let A=e.plugin(t);if(!A||A.gutters.length==0||!A.fixed)return null;let i=A.dom.offsetWidth*e.scaleX,n=A.domAfter?A.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==mo.LTR?{left:i,right:n}:{right:i,left:n}})});function WP(t){return Array.isArray(t)?t:[t]}function Nk(t,e,A){for(;t.value&&t.from<=A;)t.from==A&&e.push(t.value),t.next()}var Fk=class{constructor(e,A,i){this.gutter=e,this.height=i,this.i=0,this.cursor=io.iter(e.markers,A.from)}addElement(e,A,i){let{gutter:n}=this,o=(A.top-this.height)/e.scaleY,a=A.height/e.scaleY;if(this.i==n.elements.length){let r=new Nw(e,a,o,i);n.elements.push(r),n.dom.appendChild(r.dom)}else n.elements[this.i].update(e,a,o,i);this.height=A.bottom,this.i++}line(e,A,i){let n=[];Nk(this.cursor,n,A.from),i.length&&(n=n.concat(i));let o=this.gutter.config.lineMarker(e,A,n);o&&n.unshift(o);let a=this.gutter;n.length==0&&!a.config.renderEmptyElements||this.addElement(e,A,n)}widget(e,A){let i=this.gutter.config.widgetMarker(e,A.widget,A),n=i?[i]:null;for(let o of e.state.facet(C4A)){let a=o(e,A.widget,A);a&&(n||(n=[])).push(a)}n&&this.addElement(e,A,n)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let A=e.elements.pop();e.dom.removeChild(A.dom),A.destroy()}}},Rw=class{constructor(e,A){this.view=e,this.config=A,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in A.domEventHandlers)this.dom.addEventListener(i,n=>{let o=n.target,a;if(o!=this.dom&&this.dom.contains(o)){for(;o.parentNode!=this.dom;)o=o.parentNode;let s=o.getBoundingClientRect();a=(s.top+s.bottom)/2}else a=n.clientY;let r=e.lineBlockAtHeight(a-e.documentTop);A.domEventHandlers[i](e,r,n)&&n.preventDefault()});this.markers=WP(A.markers(e)),A.initialSpacer&&(this.spacer=new Nw(e,0,0,[A.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let A=this.markers;if(this.markers=WP(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}let i=e.view.viewport;return!io.eq(this.markers,A,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},Nw=class{constructor(e,A,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,A,i,n)}update(e,A,i,n){this.height!=A&&(this.height=A,this.dom.style.height=A+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),B4A(this.markers,n)||this.setMarkers(e,n)}setMarkers(e,A){let i="cm-gutterElement",n=this.dom.firstChild;for(let o=0,a=0;;){let r=a,s=oo(r,s,l)||a(r,s,l):a}return i}})}}),H4=class extends gl{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function JS(t,e){return t.state.facet(YE).formatNumber(e,t.state)}var Q4A=Y4.compute([YE],t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(E4A)},lineMarker(e,A,i){return i.some(n=>n.toDOM)?null:new H4(JS(e,e.state.doc.lineAt(A.from).number))},widgetMarker:(e,A,i)=>{for(let n of e.state.facet(h4A)){let o=n(e,A,i);if(o)return o}return null},lineMarkerChange:e=>e.startState.facet(YE)!=e.state.facet(YE),initialSpacer(e){return new H4(JS(e,ZP(e.state.doc.lines)))},updateSpacer(e,A){let i=JS(A.view,ZP(A.view.state.doc.lines));return i==e.number?e:new H4(i)},domEventHandlers:t.facet(YE).domEventHandlers,side:"before"}));function oq(t={}){return[YE.of(t),nq(),Q4A]}function ZP(t){let e=9;for(;e{let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.head).from;n>A&&(A=n,e.push(u4A.range(n)))}return io.of(e)});function aq(){return f4A}var p4A=0,Z4=class{constructor(e,A){this.from=e,this.to=A}},Ni=class{constructor(e={}){this.id=p4A++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Qs.match(e)),A=>{let i=e(A);return i===void 0?null:[this,i]}}};Ni.closedBy=new Ni({deserialize:t=>t.split(" ")});Ni.openedBy=new Ni({deserialize:t=>t.split(" ")});Ni.group=new Ni({deserialize:t=>t.split(" ")});Ni.isolate=new Ni({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}});Ni.contextHash=new Ni({perNode:!0});Ni.lookAhead=new Ni({perNode:!0});Ni.mounted=new Ni({perNode:!0});var V1=class{constructor(e,A,i,n=!1){this.tree=e,this.overlay=A,this.parser=i,this.bracketed=n}static get(e){return e&&e.props&&e.props[Ni.mounted.id]}},m4A=Object.create(null),Qs=class t{constructor(e,A,i,n=0){this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){let A=e.props&&e.props.length?Object.create(null):m4A,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let A=this.prop(Ni.group);return A?A.indexOf(e)>-1:!1}return this.id==e}static match(e){let A=Object.create(null);for(let i in e)for(let n of i.split(" "))A[n]=e[i];return i=>{for(let n=i.prop(Ni.group),o=-1;o<(n?n.length:0);o++){let a=A[o<0?i.name:n[o]];if(a)return a}}}};Qs.none=new Qs("",Object.create(null),0,8);var X4=class t{constructor(e){this.types=e;for(let A=0;A0;for(let s=this.cursor(a|Sa.IncludeAnonymous);;){let l=!1;if(s.from<=o&&s.to>=n&&(!r&&s.type.isAnonymous||A(s)!==!1)){if(s.firstChild())continue;l=!0}for(;l&&i&&(r||!s.type.isAnonymous)&&i(s),!s.nextSibling();){if(!s.parent())return;l=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let A in this.props)e.push([+A,this.props[A]]);return e}balance(e={}){return this.children.length<=8?this:Xk(Qs.none,this.children,this.positions,0,this.children.length,0,this.length,(A,i,n)=>new t(this.type,A,i,n,this.propValues),e.makeTree||((A,i,n)=>new t(Qs.none,A,i,n)))}static build(e){return D4A(e)}};Ka.empty=new Ka(Qs.none,[],[],0);var Pk=class t{constructor(e,A){this.buffer=e,this.index=A}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new t(this.buffer,this.index)}},X2=class t{constructor(e,A,i){this.buffer=e,this.length=A,this.set=i}get type(){return Qs.none}toString(){let e=[];for(let A=0;A0));s=a[s+3]);return r}slice(e,A,i){let n=this.buffer,o=new Uint16Array(A-e),a=0;for(let r=e,s=0;r=e&&Ae;case 1:return A<=e&&i>e;case 2:return i>e;case 4:return!0}}function $4(t,e,A,i){for(var n;t.from==t.to||(A<1?t.from>=e:t.from>e)||(A>-1?t.to<=e:t.to0?r.length:-1;e!=l;e+=A){let g=r[e],C=s[e]+a.from,I;if(!(!(o&Sa.EnterBracketed&&g instanceof Ka&&(I=V1.get(g))&&!I.overlay&&I.bracketed&&i>=C&&i<=C+g.length)&&!gq(n,i,C,C+g.length))){if(g instanceof X2){if(o&Sa.ExcludeBuffers)continue;let d=g.findChild(0,g.buffer.length,A,i-C,n);if(d>-1)return new Af(new qk(a,g,e,C),null,d)}else if(o&Sa.IncludeAnonymous||!g.type.isAnonymous||Zk(g)){let d;if(!(o&Sa.IgnoreMounts)&&(d=V1.get(g))&&!d.overlay)return new t(d.tree,C,e,a);let h=new t(g,C,e,a);return o&Sa.IncludeAnonymous||!h.type.isAnonymous?h:h.nextChild(A<0?g.children.length-1:0,A,i,n,o)}}}if(o&Sa.IncludeAnonymous||!a.type.isAnonymous||(a.index>=0?e=a.index+A:e=A<0?-1:a._parent._tree.children.length,a=a._parent,!a))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,A,i=0){let n;if(!(i&Sa.IgnoreOverlays)&&(n=V1.get(this._tree))&&n.overlay){let o=e-this.from,a=i&Sa.EnterBracketed&&n.bracketed;for(let{from:r,to:s}of n.overlay)if((A>0||a?r<=o:r=o:s>o))return new t(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,A,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function sq(t,e,A,i){let n=t.cursor(),o=[];if(!n.firstChild())return o;if(A!=null){for(let a=!1;!a;)if(a=n.type.is(A),!n.nextSibling())return o}for(;;){if(i!=null&&n.type.is(i))return o;if(n.type.is(e)&&o.push(n.node),!n.nextSibling())return i==null?o:[]}}function jk(t,e,A=e.length-1){for(let i=t;A>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[A]&&e[A]!=i.name)return!1;A--}}return!0}var qk=class{constructor(e,A,i,n){this.parent=e,this.buffer=A,this.index=i,this.start=n}},Af=class t extends Jw{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,A,i){super(),this.context=e,this._parent=A,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,A,i){let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.context.start,i);return o<0?null:new t(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,A,i=0){if(i&Sa.ExcludeBuffers)return null;let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],A>0?1:-1,e-this.context.start,A);return o<0?null:new t(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,A=e.buffer[this.index+3];return A<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new t(this.context,this._parent,A):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,A=this._parent?this._parent.index+4:0;return this.index==A?this.externalSibling(-1):new t(this.context,this._parent,e.findChild(A,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],A=[],{buffer:i}=this.context,n=this.index+4,o=i.buffer[this.index+3];if(o>n){let a=i.buffer[this.index+1];e.push(i.slice(n,o,a)),A.push(0)}return new Ka(this.type,e,A,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function cq(t){if(!t.length)return null;let e=0,A=t[0];for(let o=1;oA.from||a.to=e){let r=new h0(a.tree,a.overlay[0].from+o.from,-1,o);(n||(n=[i])).push($4(r,e,A,!1))}}return n?cq(n):i}var ef=class{get name(){return this.type.name}constructor(e,A=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=A&~Sa.EnterBracketed,e instanceof h0)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,A){this.index=e;let{start:i,buffer:n}=this.buffer;return this.type=A||n.set.types[n.buffer[e]],this.from=i+n.buffer[e+1],this.to=i+n.buffer[e+2],!0}yield(e){return e?e instanceof h0?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,A,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,A,i,this.mode));let{buffer:n}=this.buffer,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.buffer.start,i);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,A,i=this.mode){return this.buffer?i&Sa.ExcludeBuffers?!1:this.enterChild(1,e,A):this.yield(this._tree.enter(e,A,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Sa.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Sa.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:A}=this.buffer,i=this.stack.length-1;if(e<0){let n=i<0?0:this.stack[i]+4;if(this.index!=n)return this.yieldBuf(A.findChild(n,this.index,-1,0,4))}else{let n=A.buffer[this.index+3];if(n<(i<0?A.buffer.length:A.buffer[this.stack[i]+3]))return this.yieldBuf(n)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let A,i,{buffer:n}=this;if(n){if(e>0){if(this.index-1)for(let o=A+e,a=e<0?-1:i._tree.children.length;o!=a;o+=e){let r=i._tree.children[o];if(this.mode&Sa.IncludeAnonymous||r instanceof X2||!r.type.isAnonymous||Zk(r))return!1}return!0}move(e,A){if(A&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,A=0){for(;(this.from==this.to||(A<1?this.from>=e:this.from>e)||(A>-1?this.to<=e:this.to=0;){for(let a=e;a;a=a._parent)if(a.index==n){if(n==this.index)return a;A=a,i=o+1;break A}n=this.stack[--o]}for(let n=i;n=0;o--){if(o<0)return jk(this._tree,e,n);let a=i[A.buffer[this.stack[o]]];if(!a.isAnonymous){if(e[n]&&e[n]!=a.name)return!1;n--}}return!0}};function Zk(t){return t.children.some(e=>e instanceof X2||!e.type.isAnonymous||Zk(e))}function D4A(t){var e;let{buffer:A,nodeSet:i,maxBufferLength:n=1024,reused:o=[],minRepeatType:a=i.types.length}=t,r=Array.isArray(A)?new Pk(A,A.length):A,s=i.types,l=0,g=0;function C(b,x,F,z,P,W){let{id:eA,start:Z,end:EA,size:X}=r,iA=g,AA=l;if(X<0)if(r.next(),X==-1){let UA=o[eA];F.push(UA),z.push(Z-b);return}else if(X==-3){l=eA;return}else if(X==-4){g=eA;return}else throw new RangeError(`Unrecognized record size: ${X}`);let IA=s[eA],aA,rA,uA=Z-b;if(EA-Z<=n&&(rA=f(r.pos-x,P))){let UA=new Uint16Array(rA.size-rA.skip),$A=r.pos-rA.size,zA=UA.length;for(;r.pos>$A;)zA=m(rA.start,UA,zA);aA=new X2(UA,EA-rA.start,i),uA=rA.start-b}else{let UA=r.pos-X;r.next();let $A=[],zA=[],pA=eA>=a?eA:-1,PA=0,Ue=EA;for(;r.pos>UA;)pA>=0&&r.id==pA&&r.size>=0?(r.end<=Ue-n&&(h($A,zA,Z,PA,r.end,Ue,pA,iA,AA),PA=$A.length,Ue=r.end),r.next()):W>2500?I(Z,UA,$A,zA):C(Z,UA,$A,zA,pA,W+1);if(pA>=0&&PA>0&&PA<$A.length&&h($A,zA,Z,PA,Z,Ue,pA,iA,AA),$A.reverse(),zA.reverse(),pA>-1&&PA>0){let _e=d(IA,AA);aA=Xk(IA,$A,zA,0,$A.length,0,EA-Z,_e,_e)}else aA=E(IA,$A,zA,EA-Z,iA-EA,AA)}F.push(aA),z.push(uA)}function I(b,x,F,z){let P=[],W=0,eA=-1;for(;r.pos>x;){let{id:Z,start:EA,end:X,size:iA}=r;if(iA>4)r.next();else{if(eA>-1&&EA=0;X-=3)Z[iA++]=P[X],Z[iA++]=P[X+1]-EA,Z[iA++]=P[X+2]-EA,Z[iA++]=iA;F.push(new X2(Z,P[2]-EA,i)),z.push(EA-b)}}function d(b,x){return(F,z,P)=>{let W=0,eA=F.length-1,Z,EA;if(eA>=0&&(Z=F[eA])instanceof Ka){if(!eA&&Z.type==b&&Z.length==P)return Z;(EA=Z.prop(Ni.lookAhead))&&(W=z[eA]+Z.length+EA)}return E(b,F,z,P,W,x)}}function h(b,x,F,z,P,W,eA,Z,EA){let X=[],iA=[];for(;b.length>z;)X.push(b.pop()),iA.push(x.pop()+F-P);b.push(E(i.types[eA],X,iA,W-P,Z-W,EA)),x.push(P-F)}function E(b,x,F,z,P,W,eA){if(W){let Z=[Ni.contextHash,W];eA=eA?[Z].concat(eA):[Z]}if(P>25){let Z=[Ni.lookAhead,P];eA=eA?[Z].concat(eA):[Z]}return new Ka(b,x,F,z,eA)}function f(b,x){let F=r.fork(),z=0,P=0,W=0,eA=F.end-n,Z={size:0,start:0,skip:0};A:for(let EA=F.pos-b;F.pos>EA;){let X=F.size;if(F.id==x&&X>=0){Z.size=z,Z.start=P,Z.skip=W,W+=4,z+=4,F.next();continue}let iA=F.pos-X;if(X<0||iA=a?4:0,IA=F.start;for(F.next();F.pos>iA;){if(F.size<0)if(F.size==-3||F.size==-4)AA+=4;else break A;else F.id>=a&&(AA+=4);F.next()}P=IA,z+=X,W+=AA}return(x<0||z==b)&&(Z.size=z,Z.start=P,Z.skip=W),Z.size>4?Z:void 0}function m(b,x,F){let{id:z,start:P,end:W,size:eA}=r;if(r.next(),eA>=0&&z4){let EA=r.pos-(eA-4);for(;r.pos>EA;)F=m(b,x,F)}x[--F]=Z,x[--F]=W-b,x[--F]=P-b,x[--F]=z}else eA==-3?l=z:eA==-4&&(g=z);return F}let v=[],k=[];for(;r.pos>0;)C(t.start||0,t.bufferStart||0,v,k,-1,0);let S=(e=t.length)!==null&&e!==void 0?e:v.length?k[0]+v[0].length:0;return new Ka(s[t.topID],v.reverse(),k.reverse(),S)}var lq=new WeakMap;function Tw(t,e){if(!t.isAnonymous||e instanceof X2||e.type!=t)return 1;let A=lq.get(e);if(A==null){A=1;for(let i of e.children){if(i.type!=t||!(i instanceof Ka)){A=1;break}A+=Tw(t,i)}lq.set(e,A)}return A}function Xk(t,e,A,i,n,o,a,r,s){let l=0;for(let h=i;h=g)break;x+=F}if(k==S+1){if(x>g){let F=h[S];d(F.children,F.positions,0,F.children.length,E[S]+v);continue}C.push(h[S])}else{let F=E[k-1]+h[k-1].length-b;C.push(Xk(t,h,E,S,k,b,F,null,s))}I.push(b+v-o)}}return d(e,A,i,n,0),(r||s)(C,I,a)}var W1=class t{constructor(e,A,i,n,o=!1,a=!1){this.from=e,this.to=A,this.tree=i,this.offset=n,this.open=(o?1:0)|(a?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,A=[],i=!1){let n=[new t(0,e.length,e,0,!1,i)];for(let o of A)o.to>e.length&&n.push(o);return n}static applyChanges(e,A,i=128){if(!A.length)return e;let n=[],o=1,a=e.length?e[0]:null;for(let r=0,s=0,l=0;;r++){let g=r=i)for(;a&&a.from=I.from||C<=I.to||l){let d=Math.max(I.from,s)-l,h=Math.min(I.to,C)-l;I=d>=h?null:new t(d,h,I.tree,I.offset+l,r>0,!!g)}if(I&&n.push(I),a.to>C)break;a=onew Z4(n.from,n.to)):[new Z4(0,0)]:[new Z4(0,e.length)],this.createParse(e,A||[],i)}parse(e,A,i){let n=this.startParse(e,A,i);for(;;){let o=n.advance();if(o)return o}}},Wk=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,A){return this.string.slice(e,A)}};var _Be=new Ni({perNode:!0});var y4A=0,gc=class t{constructor(e,A,i,n){this.name=e,this.set=A,this.base=i,this.modified=n,this.id=y4A++}toString(){let{name:e}=this;for(let A of this.modified)A.name&&(e=`${A.name}(${e})`);return e}static define(e,A){let i=typeof e=="string"?e:"?";if(e instanceof t&&(A=e),A?.base)throw new Error("Can not derive from a modified tag");let n=new t(i,[],null,[]);if(n.set.push(n),A)for(let o of A.set)n.set.push(o);return n}static defineModifier(e){let A=new zw(e);return i=>i.modified.indexOf(A)>-1?i:zw.get(i.base||i,i.modified.concat(A).sort((n,o)=>n.id-o.id))}},v4A=0,zw=class t{constructor(e){this.name=e,this.instances=[],this.id=v4A++}static get(e,A){if(!A.length)return e;let i=A[0].instances.find(r=>r.base==e&&b4A(A,r.modified));if(i)return i;let n=[],o=new gc(e.name,n,e,A);for(let r of A)r.instances.push(o);let a=M4A(A);for(let r of e.set)if(!r.modified.length)for(let s of a)n.push(t.get(r,s));return o}};function b4A(t,e){return t.length==e.length&&t.every((A,i)=>A==e[i])}function M4A(t){let e=[[]];for(let A=0;Ai.length-A.length)}function Pw(t){let e=Object.create(null);for(let A in t){let i=t[A];Array.isArray(i)||(i=[i]);for(let n of A.split(" "))if(n){let o=[],a=2,r=n;for(let C=0;;){if(r=="..."&&C>0&&C+3==n.length){a=1;break}let I=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(r);if(!I)throw new RangeError("Invalid path: "+n);if(o.push(I[0]=="*"?"":I[0][0]=='"'?JSON.parse(I[0]):I[0]),C+=I[0].length,C==n.length)break;let d=n[C++];if(C==n.length&&d=="!"){a=0;break}if(d!="/")throw new RangeError("Invalid path: "+n);r=n.slice(C)}let s=o.length-1,l=o[s];if(!l)throw new RangeError("Invalid path: "+n);let g=new X1(i,a,s>0?o.slice(0,s):null);e[l]=g.sort(e[l])}}return dq.add(e)}var dq=new Ni({combine(t,e){let A,i,n;for(;t||e;){if(!t||e&&t.depth>=e.depth?(n=e,e=e.next):(n=t,t=t.next),A&&A.mode==n.mode&&!n.context&&!A.context)continue;let o=new X1(n.tags,n.mode,n.context);A?A.next=o:i=o,A=o}return i}}),X1=class{constructor(e,A,i,n){this.tags=e,this.mode=A,this.context=i,this.next=n}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let a=n;for(let r of o)for(let s of r.set){let l=A[s.id];if(l){a=a?a+" "+l:l;break}}return a},scope:i}}function S4A(t,e){let A=null;for(let i of t){let n=i.style(e);n&&(A=A?A+" "+n:n)}return A}function Bq(t,e,A,i=0,n=t.length){let o=new Ax(i,Array.isArray(e)?e:[e],A);o.highlightRange(t.cursor(),i,n,"",o.highlighters),o.flush(n)}var Ax=class{constructor(e,A,i){this.at=e,this.highlighters=A,this.span=i,this.class=""}startSpan(e,A){A!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=A)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,A,i,n,o){let{type:a,from:r,to:s}=e;if(r>=i||s<=A)return;a.isTop&&(o=this.highlighters.filter(d=>!d.scope||d.scope(a)));let l=n,g=k4A(e)||X1.empty,C=S4A(o,g.tags);if(C&&(l&&(l+=" "),l+=C,g.mode==1&&(n+=(n?" ":"")+C)),this.startSpan(Math.max(A,r),l),g.opaque)return;let I=e.tree&&e.tree.prop(Ni.mounted);if(I&&I.overlay){let d=e.node.enter(I.overlay[0].from+r,1),h=this.highlighters.filter(f=>!f.scope||f.scope(I.tree.type)),E=e.firstChild();for(let f=0,m=r;;f++){let v=f=k||!e.nextSibling())););if(!v||k>i)break;m=v.to+r,m>A&&(this.highlightRange(d.cursor(),Math.max(A,v.from+r),Math.min(i,m),"",h),this.startSpan(Math.min(i,m),l))}E&&e.parent()}else if(e.firstChild()){I&&(n="");do if(!(e.to<=A)){if(e.from>=i)break;this.highlightRange(e,A,i,n,o),this.startSpan(Math.min(i,e.to),l)}while(e.nextSibling());e.parent()}}};function k4A(t){let e=t.type.prop(dq);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}var $e=gc.define,Ow=$e(),$2=$e(),Cq=$e($2),Iq=$e($2),AI=$e(),Yw=$e(AI),$k=$e(AI),f0=$e(),Z1=$e(f0),Q0=$e(),u0=$e(),ex=$e(),tf=$e(ex),Hw=$e(),Fe={comment:Ow,lineComment:$e(Ow),blockComment:$e(Ow),docComment:$e(Ow),name:$2,variableName:$e($2),typeName:Cq,tagName:$e(Cq),propertyName:Iq,attributeName:$e(Iq),className:$e($2),labelName:$e($2),namespace:$e($2),macroName:$e($2),literal:AI,string:Yw,docString:$e(Yw),character:$e(Yw),attributeValue:$e(Yw),number:$k,integer:$e($k),float:$e($k),bool:$e(AI),regexp:$e(AI),escape:$e(AI),color:$e(AI),url:$e(AI),keyword:Q0,self:$e(Q0),null:$e(Q0),atom:$e(Q0),unit:$e(Q0),modifier:$e(Q0),operatorKeyword:$e(Q0),controlKeyword:$e(Q0),definitionKeyword:$e(Q0),moduleKeyword:$e(Q0),operator:u0,derefOperator:$e(u0),arithmeticOperator:$e(u0),logicOperator:$e(u0),bitwiseOperator:$e(u0),compareOperator:$e(u0),updateOperator:$e(u0),definitionOperator:$e(u0),typeOperator:$e(u0),controlOperator:$e(u0),punctuation:ex,separator:$e(ex),bracket:tf,angleBracket:$e(tf),squareBracket:$e(tf),paren:$e(tf),brace:$e(tf),content:f0,heading:Z1,heading1:$e(Z1),heading2:$e(Z1),heading3:$e(Z1),heading4:$e(Z1),heading5:$e(Z1),heading6:$e(Z1),contentSeparator:$e(f0),list:$e(f0),quote:$e(f0),emphasis:$e(f0),strong:$e(f0),link:$e(f0),monospace:$e(f0),strikethrough:$e(f0),inserted:$e(),deleted:$e(),changed:$e(),invalid:$e(),meta:Hw,documentMeta:$e(Hw),annotation:$e(Hw),processingInstruction:$e(Hw),definition:gc.defineModifier("definition"),constant:gc.defineModifier("constant"),function:gc.defineModifier("function"),standard:gc.defineModifier("standard"),local:gc.defineModifier("local"),special:gc.defineModifier("special")};for(let t in Fe){let e=Fe[t];e instanceof gc&&(e.name=t)}var FBe=tx([{tag:Fe.link,class:"tok-link"},{tag:Fe.heading,class:"tok-heading"},{tag:Fe.emphasis,class:"tok-emphasis"},{tag:Fe.strong,class:"tok-strong"},{tag:Fe.keyword,class:"tok-keyword"},{tag:Fe.atom,class:"tok-atom"},{tag:Fe.bool,class:"tok-bool"},{tag:Fe.url,class:"tok-url"},{tag:Fe.labelName,class:"tok-labelName"},{tag:Fe.inserted,class:"tok-inserted"},{tag:Fe.deleted,class:"tok-deleted"},{tag:Fe.literal,class:"tok-literal"},{tag:Fe.string,class:"tok-string"},{tag:Fe.number,class:"tok-number"},{tag:[Fe.regexp,Fe.escape,Fe.special(Fe.string)],class:"tok-string2"},{tag:Fe.variableName,class:"tok-variableName"},{tag:Fe.local(Fe.variableName),class:"tok-variableName tok-local"},{tag:Fe.definition(Fe.variableName),class:"tok-variableName tok-definition"},{tag:Fe.special(Fe.variableName),class:"tok-variableName2"},{tag:Fe.definition(Fe.propertyName),class:"tok-propertyName tok-definition"},{tag:Fe.typeName,class:"tok-typeName"},{tag:Fe.namespace,class:"tok-namespace"},{tag:Fe.className,class:"tok-className"},{tag:Fe.macroName,class:"tok-macroName"},{tag:Fe.propertyName,class:"tok-propertyName"},{tag:Fe.operator,class:"tok-operator"},{tag:Fe.comment,class:"tok-comment"},{tag:Fe.meta,class:"tok-meta"},{tag:Fe.invalid,class:"tok-invalid"},{tag:Fe.punctuation,class:"tok-punctuation"}]);var ix,eh=new Ni;function x4A(t){return At.define({combine:t?e=>e.concat(t):void 0})}var _4A=new Ni,cc=(()=>{class t{constructor(A,i,n=[],o=""){this.data=A,this.name=o,qa.prototype.hasOwnProperty("tree")||Object.defineProperty(qa.prototype,"tree",{get(){return kr(this)}}),this.parser=i,this.extension=[eI.of(this),qa.languageData.of((a,r,s)=>{let l=Eq(a,r,s),g=l.type.prop(eh);if(!g)return[];let C=a.facet(g),I=l.type.prop(_4A);if(I){let d=l.resolve(r-l.from,s);for(let h of I)if(h.test(d,a)){let E=a.facet(h.facet);return h.type=="replace"?E:E.concat(C)}}return C})].concat(n)}isActiveAt(A,i,n=-1){return Eq(A,i,n).type.prop(eh)==this.data}findRegions(A){let i=A.facet(eI);if(i?.data==this.data)return[{from:0,to:A.doc.length}];if(!i||!i.allowsNesting)return[];let n=[],o=(a,r)=>{if(a.prop(eh)==this.data){n.push({from:r,to:r+a.length});return}let s=a.prop(Ni.mounted);if(s){if(s.tree.prop(eh)==this.data){if(s.overlay)for(let l of s.overlay)n.push({from:l.from+r,to:l.to+r});else n.push({from:r,to:r+a.length});return}else if(s.overlay){let l=n.length;if(o(s.tree,s.overlay[0].from+r),n.length>l)return}}for(let l=0;li.isTop?A:void 0)]}),e.name)}configure(e,A){return new t(this.data,this.parser.configure(e),A||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function kr(t){let e=t.field(cc.state,!1);return e?e.tree:Ka.empty}function Bx(t,e,A=50){var i;let n=(i=t.field(cc.state,!1))===null||i===void 0?void 0:i.context;if(!n)return null;let o=n.viewport;n.updateViewport({from:0,to:e});let a=n.isDone(e)||n.work(A,e)?n.tree:null;return n.updateViewport(o),a}var rx=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,A){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,A):this.string.slice(e-i,A-i)}},nf=null,sx=class t{constructor(e,A,i=[],n,o,a,r,s){this.parser=e,this.state=A,this.fragments=i,this.tree=n,this.treeLen=o,this.viewport=a,this.skipped=r,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(e,A,i){return new t(e,A,[],Ka.empty,0,i,[],null)}startParse(){return this.parser.startParse(new rx(this.state.doc),this.fragments)}work(e,A){return A!=null&&A>=this.state.doc.length&&(A=void 0),this.tree!=Ka.empty&&this.isDone(A??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let n=Date.now()+e;e=()=>Date.now()>n}for(this.parse||(this.parse=this.startParse()),A!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>A)&&A=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(A=this.parse.advance()););}),this.treeLen=e,this.tree=A,this.fragments=this.withoutTempSkipped(W1.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let A=nf;nf=this;try{return e()}finally{nf=A}}withoutTempSkipped(e){for(let A;A=this.tempSkipped.pop();)e=hq(e,A.from,A.to);return e}changes(e,A){let{fragments:i,tree:n,treeLen:o,viewport:a,skipped:r}=this;if(this.takeTree(),!e.empty){let s=[];if(e.iterChangedRanges((l,g,C,I)=>s.push({fromA:l,toA:g,fromB:C,toB:I})),i=W1.applyChanges(i,s),n=Ka.empty,o=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){r=[];for(let l of this.skipped){let g=e.mapPos(l.from,1),C=e.mapPos(l.to,-1);ge.from&&(this.fragments=hq(this.fragments,n,o),this.skipped.splice(i--,1))}return this.skipped.length>=A?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,A){this.skipped.push({from:e,to:A})}static getSkippingParser(e){return new class extends Ah{createParse(A,i,n){let o=n[0].from,a=n[n.length-1].to;return{parsedPos:o,advance(){let s=nf;if(s){for(let l of n)s.tempSkipped.push(l);e&&(s.scheduleOn=s.scheduleOn?Promise.all([s.scheduleOn,e]):e)}return this.parsedPos=a,new Ka(Qs.none,[],[],a-o)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let A=this.fragments;return this.treeLen>=e&&A.length&&A[0].from==0&&A[0].to>=e}static get(){return nf}};function hq(t,e,A){return W1.applyChanges(t,[{fromA:e,toA:A,fromB:e,toB:A}])}var af=class t{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let A=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),A.viewport.to);return A.work(20,i)||A.takeTree(),new t(A)}static init(e){let A=Math.min(3e3,e.doc.length),i=sx.create(e.facet(eI).parser,e,{from:0,to:A});return i.work(20,A)||i.takeTree(),new t(i)}};cc.state=Ma.define({create:af.init,update(t,e){for(let A of e.effects)if(A.is(cc.setState))return A.value;return e.startState.facet(eI)!=e.state.facet(eI)?af.init(e.state):t.apply(e)}});var Dq=t=>{let e=setTimeout(()=>t(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Dq=t=>{let e=-1,A=setTimeout(()=>{e=requestIdleCallback(t,{timeout:400})},100);return()=>e<0?clearTimeout(A):cancelIdleCallback(e)});var nx=typeof navigator<"u"&&(!((ix=navigator.scheduling)===null||ix===void 0)&&ix.isInputPending)?()=>navigator.scheduling.isInputPending():null,R4A=_o.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let A=this.view.state.field(cc.state).context;(A.updateViewport(e.view.viewport)||this.view.viewport.to>A.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(A)}scheduleWork(){if(this.working)return;let{state:e}=this.view,A=e.field(cc.state);(A.tree!=A.context.tree||!A.context.isDone(e.doc.length))&&(this.working=Dq(this.work))}work(e){this.working=null;let A=Date.now();if(this.chunkEndn+1e3,s=o.context.work(()=>nx&&nx()||Date.now()>a,n+(r?0:1e5));this.chunkBudget-=Date.now()-A,(s||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:cc.setState.of(new af(o.context))})),this.chunkBudget>0&&!(s&&!r)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(A=>Sr(this.view.state,A)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),eI=At.define({combine(t){return t.length?t[0]:null},enables:t=>[cc.state,R4A,gi.contentAttributes.compute([t],e=>{let A=e.facet(t);return A&&A.name?{"data-language":A.name}:{}})]}),qw=class{constructor(e,A=[]){this.language=e,this.support=A,this.extension=[e,A]}};var N4A=At.define(),ed=At.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some(A=>A!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function Ic(t){let e=t.facet(ed);return e.charCodeAt(0)==9?t.tabSize*e.length:e.length}function nh(t,e){let A="",i=t.tabSize,n=t.facet(ed)[0];if(n==" "){for(;e>=i;)A+=" ",e-=i;n=" "}for(let o=0;o=e?F4A(t,A,e):null}var $1=class{constructor(e,A={}){this.state=e,this.options=A,this.unit=Ic(e)}lineAt(e,A=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:o}=this.options;return n!=null&&n>=i.from&&n<=i.to?o&&n==e?{text:"",from:e}:(A<0?n-1&&(o+=a-this.countColumn(i,i.search(/\S|$/))),o}countColumn(e,A=e.length){return dC(e,this.state.tabSize,A)}lineIndent(e,A=1){let{text:i,from:n}=this.lineAt(e,A),o=this.options.overrideIndentation;if(o){let a=o(n);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Ex=new Ni;function F4A(t,e,A){let i=e.resolveStack(A),n=e.resolveInner(A,-1).resolve(A,0).enterUnfinishedNodesBefore(A);if(n!=i.node){let o=[];for(let a=n;a&&!(a.fromi.node.to||a.from==i.node.from&&a.type==i.node.type);a=a.parent)o.push(a);for(let a=o.length-1;a>=0;a--)i={node:o[a],next:i}}return yq(i,t,A)}function yq(t,e,A){for(let i=t;i;i=i.next){let n=G4A(i.node);if(n)return n(lx.create(e,A,i))}return 0}function L4A(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}function G4A(t){let e=t.type.prop(Ex);if(e)return e;let A=t.firstChild,i;if(A&&(i=A.type.prop(Ni.closedBy))){let n=t.lastChild,o=n&&i.indexOf(n.name)>-1;return a=>J4A(a,!0,1,void 0,o&&!L4A(a)?n.from:void 0)}return t.parent==null?K4A:null}function K4A(){return 0}var lx=class t extends $1{constructor(e,A,i){super(e.state,e.options),this.base=e,this.pos=A,this.context=i}get node(){return this.context.node}static create(e,A,i){return new t(e,A,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let A=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(A.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(U4A(i,e))break;A=this.state.doc.lineAt(i.from)}return this.lineIndent(A.from)}continue(){return yq(this.context.next,this.base,this.pos)}};function U4A(t,e){for(let A=e;A;A=A.parent)if(t==A)return!0;return!1}function T4A(t){let e=t.node,A=e.childAfter(e.from),i=e.lastChild;if(!A)return null;let n=t.options.simulateBreak,o=t.state.doc.lineAt(A.from),a=n==null||n<=o.from?o.to:Math.min(o.to,n);for(let r=A.to;;){let s=e.childAfter(r);if(!s||s==i)return null;if(!s.type.isSkipped){if(s.from>=a)return null;let l=/^ */.exec(o.text.slice(A.to-o.from))[0].length;return{from:A.from,to:A.to+l}}r=s.to}}function J4A(t,e,A,i,n){let o=t.textAfter,a=o.match(/^\s*/)[0].length,r=i&&o.slice(a,a+i.length)==i||n==t.pos+a,s=e?T4A(t):null;return s?r?t.column(s.from):t.column(s.to):t.baseIndent+(r?0:t.unit*A)}function hx({except:t,units:e=1}={}){return A=>{let i=t&&t.test(A.textAfter);return A.baseIndent+(i?0:e*A.unit)}}var O4A=200;function vq(){return qa.transactionFilter.of(t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let A=t.newDoc,{head:i}=t.newSelection.main,n=A.lineAt(i);if(i>n.from+O4A)return t;let o=A.sliceString(n.from,i);if(!e.some(l=>l.test(o)))return t;let{state:a}=t,r=-1,s=[];for(let{head:l}of a.selection.ranges){let g=a.doc.lineAt(l);if(g.from==r)continue;r=g.from;let C=Ww(a,g.from);if(C==null)continue;let I=/^\s*/.exec(g.text)[0],d=nh(a,C);I!=d&&s.push({from:g.from,to:g.from+I.length,insert:d})}return s.length?[t,{changes:s,sequential:!0}]:t})}var Qx=At.define(),rf=new Ni;function bq(t){let e=t.firstChild,A=t.lastChild;return e&&e.toA)continue;if(o&&r.from=e&&l.to>A&&(o=l)}}return o}function H4A(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function th(t,e,A){for(let i of t.facet(Qx)){let n=i(t,e,A);if(n)return n}return Y4A(t,e,A)}function Mq(t,e){let A=e.mapPos(t.from,1),i=e.mapPos(t.to,-1);return A>=i?void 0:{from:A,to:i}}var oh=Wi.define({map:Mq}),sf=Wi.define({map:Mq});function Sq(t){let e=[];for(let{head:A}of t.state.selection.ranges)e.some(i=>i.from<=A&&i.to>=A)||e.push(t.lineBlockAt(A));return e}var Ad=Ma.define({create(){return St.none},update(t,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((A,i)=>t=Qq(t,A,i)),t=t.map(e.changes);for(let A of e.effects)if(A.is(oh)&&!z4A(t,A.value.from,A.value.to)){let{preparePlaceholder:i}=e.state.facet(px),n=i?St.replace({widget:new gx(i(e.state,A.value))}):uq;t=t.update({add:[n.range(A.value.from,A.value.to)]})}else A.is(sf)&&(t=t.update({filter:(i,n)=>A.value.from!=i||A.value.to!=n,filterFrom:A.value.from,filterTo:A.value.to}));return e.selection&&(t=Qq(t,e.selection.main.head)),t},provide:t=>gi.decorations.from(t),toJSON(t,e){let A=[];return t.between(0,e.doc.length,(i,n)=>{A.push(i,n)}),A},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let A=0;A{ne&&(i=!0)}),i?t.update({filterFrom:e,filterTo:A,filter:(n,o)=>n>=A||o<=e}):t}function Vw(t,e,A){var i;let n=null;return(i=t.field(Ad,!1))===null||i===void 0||i.between(e,A,(o,a)=>{(!n||n.from>o)&&(n={from:o,to:a})}),n}function z4A(t,e,A){let i=!1;return t.between(e,e,(n,o)=>{n==e&&o==A&&(i=!0)}),i}function kq(t,e){return t.field(Ad,!1)?e:e.concat(Wi.appendConfig.of(Rq()))}var P4A=t=>{for(let e of Sq(t)){let A=th(t.state,e.from,e.to);if(A)return t.dispatch({effects:kq(t.state,[oh.of(A),xq(t,A)])}),!0}return!1},ux=t=>{if(!t.state.field(Ad,!1))return!1;let e=[];for(let A of Sq(t)){let i=Vw(t.state,A.from,A.to);i&&e.push(sf.of(i),xq(t,i,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function xq(t,e,A=!0){let i=t.state.doc.lineAt(e.from).number,n=t.state.doc.lineAt(e.to).number;return gi.announce.of(`${t.state.phrase(A?"Folded lines":"Unfolded lines")} ${i} ${t.state.phrase("to")} ${n}.`)}var j4A=t=>{let{state:e}=t,A=[];for(let i=0;i{let e=t.state.field(Ad,!1);if(!e||!e.size)return!1;let A=[];return e.between(0,t.state.doc.length,(i,n)=>{A.push(sf.of({from:i,to:n}))}),t.dispatch({effects:A}),!0};var _q=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:P4A},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:ux},{key:"Ctrl-Alt-[",run:j4A},{key:"Ctrl-Alt-]",run:fx}],q4A={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},px=At.define({combine(t){return Mr(t,q4A)}});function Rq(t){let e=[Ad,W4A];return t&&e.push(px.of(t)),e}function Nq(t,e){let{state:A}=t,i=A.facet(px),n=a=>{let r=t.lineBlockAt(t.posAtDOM(a.target)),s=Vw(t.state,r.from,r.to);s&&t.dispatch({effects:sf.of(s)}),a.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(t,n,e);let o=document.createElement("span");return o.textContent=i.placeholderText,o.setAttribute("aria-label",A.phrase("folded code")),o.title=A.phrase("unfold"),o.className="cm-foldPlaceholder",o.onclick=n,o}var uq=St.replace({widget:new class extends sl{toDOM(t){return Nq(t,null)}}}),gx=class extends sl{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Nq(e,this.value)}},V4A={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},of=class extends gl{constructor(e,A){super(),this.config=e,this.open=A}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let A=document.createElement("span");return A.textContent=this.open?this.config.openText:this.config.closedText,A.title=e.state.phrase(this.open?"Fold line":"Unfold line"),A}};function Fq(t={}){let e=gA(gA({},V4A),t),A=new of(e,!0),i=new of(e,!1),n=_o.fromClass(class{constructor(a){this.from=a.viewport.from,this.markers=this.buildMarkers(a)}update(a){(a.docChanged||a.viewportChanged||a.startState.facet(eI)!=a.state.facet(eI)||a.startState.field(Ad,!1)!=a.state.field(Ad,!1)||kr(a.startState)!=kr(a.state)||e.foldingChanged(a))&&(this.markers=this.buildMarkers(a.view))}buildMarkers(a){let r=new jr;for(let s of a.viewportLineBlocks){let l=Vw(a.state,s.from,s.to)?i:th(a.state,s.from,s.to)?A:null;l&&r.add(s.from,s.from,l)}return r.finish()}}),{domEventHandlers:o}=e;return[n,Kw({class:"cm-foldGutter",markers(a){var r;return((r=a.plugin(n))===null||r===void 0?void 0:r.markers)||io.empty},initialSpacer(){return new of(e,!1)},domEventHandlers:Ye(gA({},o),{click:(a,r,s)=>{if(o.click&&o.click(a,r,s))return!0;let l=Vw(a.state,r.from,r.to);if(l)return a.dispatch({effects:sf.of(l)}),!0;let g=th(a.state,r.from,r.to);return g?(a.dispatch({effects:oh.of(g)}),!0):!1}})}),Rq()]}var W4A=gi.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),ih=class t{constructor(e,A){this.specs=e;let i;function n(r){let s=cg.newName();return(i||(i=Object.create(null)))["."+s]=r,s}let o=typeof A.all=="string"?A.all:A.all?n(A.all):void 0,a=A.scope;this.scope=a instanceof cc?r=>r.prop(eh)==a.data:a?r=>r==a:void 0,this.style=tx(e.map(r=>({tag:r.tag,class:r.class||n(Object.assign({},r,{tag:null}))})),{all:o}).style,this.module=i?new cg(i):null,this.themeType=A.themeType}static define(e,A){return new t(e,A||{})}},cx=At.define(),Lq=At.define({combine(t){return t.length?[t[0]]:null}});function ox(t){let e=t.facet(cx);return e.length?e:t.facet(Lq)}function mx(t,e){let A=[Z4A],i;return t instanceof ih&&(t.module&&A.push(gi.styleModule.of(t.module)),i=t.themeType),e?.fallback?A.push(Lq.of(t)):i?A.push(cx.computeN([gi.darkTheme],n=>n.facet(gi.darkTheme)==(i=="dark")?[t]:[])):A.push(cx.of(t)),A}var Cx=class{constructor(e){this.markCache=Object.create(null),this.tree=kr(e.state),this.decorations=this.buildDeco(e,ox(e.state)),this.decoratedTo=e.viewport.to}update(e){let A=kr(e.state),i=ox(e.state),n=i!=ox(e.startState),{viewport:o}=e.view,a=e.changes.mapPos(this.decoratedTo,1);A.length=o.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(A!=this.tree||e.viewportChanged||n)&&(this.tree=A,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=o.to)}buildDeco(e,A){if(!A||!this.tree.length)return St.none;let i=new jr;for(let{from:n,to:o}of e.visibleRanges)Bq(this.tree,A,(a,r,s)=>{i.add(a,r,this.markCache[s]||(this.markCache[s]=St.mark({class:s})))},n,o);return i.finish()}},Z4A=ac.high(_o.fromClass(Cx,{decorations:t=>t.decorations})),Gq=ih.define([{tag:Fe.meta,color:"#404740"},{tag:Fe.link,textDecoration:"underline"},{tag:Fe.heading,textDecoration:"underline",fontWeight:"bold"},{tag:Fe.emphasis,fontStyle:"italic"},{tag:Fe.strong,fontWeight:"bold"},{tag:Fe.strikethrough,textDecoration:"line-through"},{tag:Fe.keyword,color:"#708"},{tag:[Fe.atom,Fe.bool,Fe.url,Fe.contentSeparator,Fe.labelName],color:"#219"},{tag:[Fe.literal,Fe.inserted],color:"#164"},{tag:[Fe.string,Fe.deleted],color:"#a11"},{tag:[Fe.regexp,Fe.escape,Fe.special(Fe.string)],color:"#e40"},{tag:Fe.definition(Fe.variableName),color:"#00f"},{tag:Fe.local(Fe.variableName),color:"#30a"},{tag:[Fe.typeName,Fe.namespace],color:"#085"},{tag:Fe.className,color:"#167"},{tag:[Fe.special(Fe.variableName),Fe.macroName],color:"#256"},{tag:Fe.definition(Fe.propertyName),color:"#00c"},{tag:Fe.comment,color:"#940"},{tag:Fe.invalid,color:"#f00"}]),X4A=gi.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Kq=1e4,Uq="()[]{}",Tq=At.define({combine(t){return Mr(t,{afterCursor:!0,brackets:Uq,maxScanDistance:Kq,renderMatch:efA})}}),$4A=St.mark({class:"cm-matchingBracket"}),AfA=St.mark({class:"cm-nonmatchingBracket"});function efA(t){let e=[],A=t.matched?$4A:AfA;return e.push(A.range(t.start.from,t.start.to)),t.end&&e.push(A.range(t.end.from,t.end.to)),e}function fq(t){let e=[],A=t.facet(Tq);for(let i of t.selection.ranges){if(!i.empty)continue;let n=Cc(t,i.head,-1,A)||i.head>0&&Cc(t,i.head-1,1,A)||A.afterCursor&&(Cc(t,i.head,1,A)||i.headt.decorations}),ifA=[tfA,X4A];function Jq(t={}){return[Tq.of(t),ifA]}var nfA=new Ni;function Ix(t,e,A){let i=t.prop(e<0?Ni.openedBy:Ni.closedBy);if(i)return i;if(t.name.length==1){let n=A.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[A[n+e]]}return null}function dx(t){let e=t.type.prop(nfA);return e?e(t.node):t}function Cc(t,e,A,i={}){let n=i.maxScanDistance||Kq,o=i.brackets||Uq,a=kr(t),r=a.resolveInner(e,A);for(let s=r;s;s=s.parent){let l=Ix(s.type,A,o);if(l&&s.from0?e>=g.from&&eg.from&&e<=g.to))return ofA(t,e,A,s,g,l,o)}}return afA(t,e,A,a,r.type,n,o)}function ofA(t,e,A,i,n,o,a){let r=i.parent,s={from:n.from,to:n.to},l=0,g=r?.cursor();if(g&&(A<0?g.childBefore(i.from):g.childAfter(i.to)))do if(A<0?g.to<=i.from:g.from>=i.to){if(l==0&&o.indexOf(g.type.name)>-1&&g.from0)return null;let l={from:A<0?e-1:e,to:A>0?e+1:e},g=t.doc.iterRange(e,A>0?t.doc.length:0),C=0;for(let I=0;!g.next().done&&I<=o;){let d=g.value;A<0&&(I+=d.length);let h=e+I*A;for(let E=A>0?0:d.length-1,f=A>0?d.length:-1;E!=f;E+=A){let m=a.indexOf(d[E]);if(!(m<0||i.resolveInner(h+E,1).type!=n))if(m%2==0==A>0)C++;else{if(C==1)return{start:l,end:{from:h+E,to:h+E+1},matched:m>>1==s>>1};C--}}A>0&&(I+=d.length)}return g.done?{start:l,matched:!1}:null}var rfA=Object.create(null),pq=[Qs.none];var mq=[],wq=Object.create(null),sfA=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])sfA[t]=lfA(rfA,e);function ax(t,e){mq.indexOf(t)>-1||(mq.push(t),console.warn(e))}function lfA(t,e){let A=[];for(let r of e.split(" ")){let s=[];for(let l of r.split(".")){let g=t[l]||Fe[l];g?typeof g=="function"?s.length?s=s.map(g):ax(l,`Modifier ${l} used at start of tag`):s.length?ax(l,`Tag ${l} used as modifier`):s=Array.isArray(g)?g:[g]:ax(l,`Unknown highlighting tag ${l}`)}for(let l of s)A.push(l)}if(!A.length)return 0;let i=e.replace(/ /g,"_"),n=i+" "+A.map(r=>r.id),o=wq[n];if(o)return o.id;let a=wq[n]=Qs.define({id:pq.length,name:i,props:[Pw({[i]:A})]});return pq.push(a),a.id}var YBe={rtl:St.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:mo.RTL}),ltr:St.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:mo.LTR}),auto:St.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var gfA=t=>{let{state:e}=t,A=e.doc.lineAt(e.selection.main.from),i=vx(t.state,A.from);return i.line?cfA(t):i.block?IfA(t):!1};function yx(t,e){return({state:A,dispatch:i})=>{if(A.readOnly)return!1;let n=t(e,A);return n?(i(A.update(n)),!0):!1}}var cfA=yx(EfA,0);var CfA=yx(Wq,0);var IfA=yx((t,e)=>Wq(t,e,BfA(e)),0);function vx(t,e){let A=t.languageDataAt("commentTokens",e,1);return A.length?A[0]:{}}var lf=50;function dfA(t,{open:e,close:A},i,n){let o=t.sliceDoc(i-lf,i),a=t.sliceDoc(n,n+lf),r=/\s*$/.exec(o)[0].length,s=/^\s*/.exec(a)[0].length,l=o.length-r;if(o.slice(l-e.length,l)==e&&a.slice(s,s+A.length)==A)return{open:{pos:i-r,margin:r&&1},close:{pos:n+s,margin:s&&1}};let g,C;n-i<=2*lf?g=C=t.sliceDoc(i,n):(g=t.sliceDoc(i,i+lf),C=t.sliceDoc(n-lf,n));let I=/^\s*/.exec(g)[0].length,d=/\s*$/.exec(C)[0].length,h=C.length-d-A.length;return g.slice(I,I+e.length)==e&&C.slice(h,h+A.length)==A?{open:{pos:i+I+e.length,margin:/\s/.test(g.charAt(I+e.length))?1:0},close:{pos:n-d-A.length,margin:/\s/.test(C.charAt(h-1))?1:0}}:null}function BfA(t){let e=[];for(let A of t.selection.ranges){let i=t.doc.lineAt(A.from),n=A.to<=i.to?i:t.doc.lineAt(A.to);n.from>i.from&&n.from==A.to&&(n=A.to==i.to+1?i:t.doc.lineAt(A.to-1));let o=e.length-1;o>=0&&e[o].to>i.from?e[o].to=n.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:n.to})}return e}function Wq(t,e,A=e.selection.ranges){let i=A.map(o=>vx(e,o.from).block);if(!i.every(o=>o))return null;let n=A.map((o,a)=>dfA(e,i[a],o.from,o.to));if(t!=2&&!n.every(o=>o))return{changes:e.changes(A.map((o,a)=>n[a]?[]:[{from:o.from,insert:i[a].open+" "},{from:o.to,insert:" "+i[a].close}]))};if(t!=1&&n.some(o=>o)){let o=[];for(let a=0,r;an&&(o==a||a>C.from)){n=C.from;let I=/^\s*/.exec(C.text)[0].length,d=I==C.length,h=C.text.slice(I,I+l.length)==l?I:-1;Io.comment<0&&(!o.empty||o.single))){let o=[];for(let{line:r,token:s,indent:l,empty:g,single:C}of i)(C||!g)&&o.push({from:r.from+l,insert:s+" "});let a=e.changes(o);return{changes:a,selection:e.selection.map(a,1)}}else if(t!=1&&i.some(o=>o.comment>=0)){let o=[];for(let{line:a,comment:r,token:s}of i)if(r>=0){let l=a.from+r,g=l+s.length;a.text[g-a.from]==" "&&g++,o.push({from:l,to:g})}return{changes:o}}return null}function ah(t,e){return Ie.create(t.ranges.map(e),t.mainIndex)}function dc(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Bc({state:t,dispatch:e},A){let i=ah(t.selection,A);return i.eq(t.selection,!0)?!1:(e(dc(t,i)),!0)}function Xw(t,e){return Ie.cursor(e?t.to:t.from)}function Zq(t,e){return Bc(t,A=>A.empty?t.moveByChar(A,e):Xw(A,e))}function us(t){return t.textDirectionAt(t.state.selection.main.head)==mo.LTR}var Xq=t=>Zq(t,!us(t)),$q=t=>Zq(t,us(t));function AV(t,e){return Bc(t,A=>A.empty?t.moveByGroup(A,e):Xw(A,e))}var hfA=t=>AV(t,!us(t)),QfA=t=>AV(t,us(t));var AEe=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function ufA(t,e,A){if(e.type.prop(A))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function $w(t,e,A){let i=kr(t).resolveInner(e.head),n=A?Ni.closedBy:Ni.openedBy;for(let s=e.head;;){let l=A?i.childAfter(s):i.childBefore(s);if(!l)break;ufA(t,l,n)?i=l:s=A?l.to:l.from}let o=i.type.prop(n),a,r;return o&&(a=A?Cc(t,i.from,1):Cc(t,i.to,-1))&&a.matched?r=A?a.end.to:a.end.from:r=A?i.to:i.from,Ie.cursor(r,A?-1:1)}var ffA=t=>Bc(t,e=>$w(t.state,e,!us(t))),pfA=t=>Bc(t,e=>$w(t.state,e,us(t)));function eV(t,e){return Bc(t,A=>{if(!A.empty)return Xw(A,e);let i=t.moveVertically(A,e);return i.head!=A.head?i:t.moveToLineBoundary(A,e)})}var tV=t=>eV(t,!1),iV=t=>eV(t,!0);function nV(t){let e=t.scrollDOM.clientHeighta.empty?t.moveVertically(a,e,A.height):Xw(a,e));if(n.eq(i.selection))return!1;let o;if(A.selfScroll){let a=t.coordsAtPos(i.selection.main.head),r=t.scrollDOM.getBoundingClientRect(),s=r.top+A.marginTop,l=r.bottom-A.marginBottom;a&&a.top>s&&a.bottomoV(t,!1),wx=t=>oV(t,!0);function tI(t,e,A){let i=t.lineBlockAt(e.head),n=t.moveToLineBoundary(e,A);if(n.head==e.head&&n.head!=(A?i.to:i.from)&&(n=t.moveToLineBoundary(e,A,!1)),!A&&n.head==i.from&&i.length){let o=/^\s*/.exec(t.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;o&&e.head!=i.from+o&&(n=Ie.cursor(i.from+o))}return n}var mfA=t=>Bc(t,e=>tI(t,e,!0)),wfA=t=>Bc(t,e=>tI(t,e,!1)),DfA=t=>Bc(t,e=>tI(t,e,!us(t))),yfA=t=>Bc(t,e=>tI(t,e,us(t))),vfA=t=>Bc(t,e=>Ie.cursor(t.lineBlockAt(e.head).from,1)),bfA=t=>Bc(t,e=>Ie.cursor(t.lineBlockAt(e.head).to,-1));function MfA(t,e,A){let i=!1,n=ah(t.selection,o=>{let a=Cc(t,o.head,-1)||Cc(t,o.head,1)||o.head>0&&Cc(t,o.head-1,1)||o.headMfA(t,e,!1);function Bg(t,e){let A=ah(t.state.selection,i=>{let n=e(i);return Ie.range(i.anchor,n.head,n.goalColumn,n.bidiLevel||void 0,n.assoc)});return A.eq(t.state.selection)?!1:(t.dispatch(dc(t.state,A)),!0)}function aV(t,e){return Bg(t,A=>t.moveByChar(A,e))}var rV=t=>aV(t,!us(t)),sV=t=>aV(t,us(t));function lV(t,e){return Bg(t,A=>t.moveByGroup(A,e))}var kfA=t=>lV(t,!us(t)),xfA=t=>lV(t,us(t));var _fA=t=>Bg(t,e=>$w(t.state,e,!us(t))),RfA=t=>Bg(t,e=>$w(t.state,e,us(t)));function gV(t,e){return Bg(t,A=>t.moveVertically(A,e))}var cV=t=>gV(t,!1),CV=t=>gV(t,!0);function IV(t,e){return Bg(t,A=>t.moveVertically(A,e,nV(t).height))}var Yq=t=>IV(t,!1),Hq=t=>IV(t,!0),NfA=t=>Bg(t,e=>tI(t,e,!0)),FfA=t=>Bg(t,e=>tI(t,e,!1)),LfA=t=>Bg(t,e=>tI(t,e,!us(t))),GfA=t=>Bg(t,e=>tI(t,e,us(t))),KfA=t=>Bg(t,e=>Ie.cursor(t.lineBlockAt(e.head).from)),UfA=t=>Bg(t,e=>Ie.cursor(t.lineBlockAt(e.head).to)),zq=({state:t,dispatch:e})=>(e(dc(t,{anchor:0})),!0),Pq=({state:t,dispatch:e})=>(e(dc(t,{anchor:t.doc.length})),!0),jq=({state:t,dispatch:e})=>(e(dc(t,{anchor:t.selection.main.anchor,head:0})),!0),qq=({state:t,dispatch:e})=>(e(dc(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),TfA=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),JfA=({state:t,dispatch:e})=>{let A=A5(t).map(({from:i,to:n})=>Ie.range(i,Math.min(n+1,t.doc.length)));return e(t.update({selection:Ie.create(A),userEvent:"select"})),!0},OfA=({state:t,dispatch:e})=>{let A=ah(t.selection,i=>{let n=kr(t),o=n.resolveStack(i.from,1);if(i.empty){let a=n.resolveStack(i.from,-1);a.node.from>=o.node.from&&a.node.to<=o.node.to&&(o=a)}for(let a=o;a;a=a.next){let{node:r}=a;if((r.from=i.to||r.to>i.to&&r.from<=i.from)&&a.next)return Ie.range(r.to,r.from)}return i});return A.eq(t.selection)?!1:(e(dc(t,A)),!0)};function dV(t,e){let{state:A}=t,i=A.selection,n=A.selection.ranges.slice();for(let o of A.selection.ranges){let a=A.doc.lineAt(o.head);if(e?a.to0)for(let r=o;;){let s=t.moveVertically(r,e);if(s.heada.to){n.some(l=>l.head==s.head)||n.push(s);break}else{if(s.head==r.head)break;r=s}}}return n.length==i.ranges.length?!1:(t.dispatch(dc(A,Ie.create(n,n.length-1))),!0)}var YfA=t=>dV(t,!1),HfA=t=>dV(t,!0),zfA=({state:t,dispatch:e})=>{let A=t.selection,i=null;return A.ranges.length>1?i=Ie.create([A.main]):A.main.empty||(i=Ie.create([Ie.cursor(A.main.head)])),i?(e(dc(t,i)),!0):!1};function gf(t,e){if(t.state.readOnly)return!1;let A="delete.selection",{state:i}=t,n=i.changeByRange(o=>{let{from:a,to:r}=o;if(a==r){let s=e(o);sa&&(A="delete.forward",s=Zw(t,s,!0)),a=Math.min(a,s),r=Math.max(r,s)}else a=Zw(t,a,!1),r=Zw(t,r,!0);return a==r?{range:o}:{changes:{from:a,to:r},range:Ie.cursor(a,an(t)))i.between(e,e,(n,o)=>{ne&&(e=A?o:n)});return e}var BV=(t,e,A)=>gf(t,i=>{let n=i.from,{state:o}=t,a=o.doc.lineAt(n),r,s;if(A&&!e&&n>a.from&&nBV(t,!1,!0);var EV=t=>BV(t,!0,!1),hV=(t,e)=>gf(t,A=>{let i=A.head,{state:n}=t,o=n.doc.lineAt(i),a=n.charCategorizer(i);for(let r=null;;){if(i==(e?o.to:o.from)){i==A.head&&o.number!=(e?n.doc.lines:1)&&(i+=e?1:-1);break}let s=ja(o.text,i-o.from,e)+o.from,l=o.text.slice(Math.min(i,s)-o.from,Math.max(i,s)-o.from),g=a(l);if(r!=null&&g!=r)break;(l!=" "||i!=A.head)&&(r=g),i=s}return i}),QV=t=>hV(t,!1),PfA=t=>hV(t,!0);var jfA=t=>gf(t,e=>{let A=t.lineBlockAt(e.head).to;return e.headgf(t,e=>{let A=t.moveToLineBoundary(e,!1).head;return e.head>A?A:Math.max(0,e.head-1)}),VfA=t=>gf(t,e=>{let A=t.moveToLineBoundary(e,!0).head;return e.head{if(t.readOnly)return!1;let A=t.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:bn.of(["",""])},range:Ie.cursor(i.from)}));return e(t.update(A,{scrollIntoView:!0,userEvent:"input"})),!0},ZfA=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=t.changeByRange(i=>{if(!i.empty||i.from==0||i.from==t.doc.length)return{range:i};let n=i.from,o=t.doc.lineAt(n),a=n==o.from?n-1:ja(o.text,n-o.from,!1)+o.from,r=n==o.to?n+1:ja(o.text,n-o.from,!0)+o.from;return{changes:{from:a,to:r,insert:t.doc.slice(n,r).append(t.doc.slice(a,n))},range:Ie.cursor(r)}});return A.changes.empty?!1:(e(t.update(A,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function A5(t){let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.from),o=t.doc.lineAt(i.to);if(!i.empty&&i.to==o.from&&(o=t.doc.lineAt(i.to-1)),A>=n.number){let a=e[e.length-1];a.to=o.to,a.ranges.push(i)}else e.push({from:n.from,to:o.to,ranges:[i]});A=o.number+1}return e}function uV(t,e,A){if(t.readOnly)return!1;let i=[],n=[];for(let o of A5(t)){if(A?o.to==t.doc.length:o.from==0)continue;let a=t.doc.lineAt(A?o.to+1:o.from-1),r=a.length+1;if(A){i.push({from:o.to,to:a.to},{from:o.from,insert:a.text+t.lineBreak});for(let s of o.ranges)n.push(Ie.range(Math.min(t.doc.length,s.anchor+r),Math.min(t.doc.length,s.head+r)))}else{i.push({from:a.from,to:o.from},{from:o.to,insert:t.lineBreak+a.text});for(let s of o.ranges)n.push(Ie.range(s.anchor-r,s.head-r))}}return i.length?(e(t.update({changes:i,scrollIntoView:!0,selection:Ie.create(n,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}var XfA=({state:t,dispatch:e})=>uV(t,e,!1),$fA=({state:t,dispatch:e})=>uV(t,e,!0);function fV(t,e,A){if(t.readOnly)return!1;let i=[];for(let o of A5(t))A?i.push({from:o.from,insert:t.doc.slice(o.from,o.to)+t.lineBreak}):i.push({from:o.to,insert:t.lineBreak+t.doc.slice(o.from,o.to)});let n=t.changes(i);return e(t.update({changes:n,selection:t.selection.map(n,A?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var A3A=({state:t,dispatch:e})=>fV(t,e,!1),e3A=({state:t,dispatch:e})=>fV(t,e,!0),t3A=t=>{if(t.state.readOnly)return!1;let{state:e}=t,A=e.changes(A5(e).map(({from:n,to:o})=>(n>0?n--:o{let o;if(t.lineWrapping){let a=t.lineBlockAt(n.head),r=t.coordsAtPos(n.head,n.assoc||1);r&&(o=a.bottom+t.documentTop-r.bottom+t.defaultLineHeight/2)}return t.moveVertically(n,!0,o)}).map(A);return t.dispatch({changes:A,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function i3A(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let A=kr(t).resolveInner(e),i=A.childBefore(e),n=A.childAfter(e),o;return i&&n&&i.to<=e&&n.from>=e&&(o=i.type.prop(Ni.closedBy))&&o.indexOf(n.name)>-1&&t.doc.lineAt(i.to).from==t.doc.lineAt(n.from).from&&!/\S/.test(t.sliceDoc(i.to,n.from))?{from:i.to,to:n.from}:null}var Vq=pV(!1),n3A=pV(!0);function pV(t){return({state:e,dispatch:A})=>{if(e.readOnly)return!1;let i=e.changeByRange(n=>{let{from:o,to:a}=n,r=e.doc.lineAt(o),s=!t&&o==a&&i3A(e,o);t&&(o=a=(a<=r.to?r:e.doc.lineAt(a)).to);let l=new $1(e,{simulateBreak:o,simulateDoubleBreak:!!s}),g=Ww(l,o);for(g==null&&(g=dC(/^\s*/.exec(e.doc.lineAt(o).text)[0],e.tabSize));ar.from&&o{let n=[];for(let a=i.from;a<=i.to;){let r=t.doc.lineAt(a);r.number>A&&(i.empty||i.to>r.from)&&(e(r,n,i),A=r.number),a=r.to+1}let o=t.changes(n);return{changes:n,range:Ie.range(o.mapPos(i.anchor,1),o.mapPos(i.head,1))}})}var o3A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=Object.create(null),i=new $1(t,{overrideIndentation:o=>{let a=A[o];return a??-1}}),n=bx(t,(o,a,r)=>{let s=Ww(i,o.from);if(s==null)return;/\S/.test(o.text)||(s=0);let l=/^\s*/.exec(o.text)[0],g=nh(t,s);(l!=g||r.fromt.readOnly?!1:(e(t.update(bx(t,(A,i)=>{i.push({from:A.from,insert:t.facet(ed)})}),{userEvent:"input.indent"})),!0),wV=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(bx(t,(A,i)=>{let n=/^\s*/.exec(A.text)[0];if(!n)return;let o=dC(n,t.tabSize),a=0,r=nh(t,Math.max(0,o-Ic(t)));for(;a(t.setTabFocusMode(),!0);var r3A=[{key:"Ctrl-b",run:Xq,shift:rV,preventDefault:!0},{key:"Ctrl-f",run:$q,shift:sV},{key:"Ctrl-p",run:tV,shift:cV},{key:"Ctrl-n",run:iV,shift:CV},{key:"Ctrl-a",run:vfA,shift:KfA},{key:"Ctrl-e",run:bfA,shift:UfA},{key:"Ctrl-d",run:EV},{key:"Ctrl-h",run:Dx},{key:"Ctrl-k",run:jfA},{key:"Ctrl-Alt-h",run:QV},{key:"Ctrl-o",run:WfA},{key:"Ctrl-t",run:ZfA},{key:"Ctrl-v",run:wx}],s3A=[{key:"ArrowLeft",run:Xq,shift:rV,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:hfA,shift:kfA,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:DfA,shift:LfA,preventDefault:!0},{key:"ArrowRight",run:$q,shift:sV,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:QfA,shift:xfA,preventDefault:!0},{mac:"Cmd-ArrowRight",run:yfA,shift:GfA,preventDefault:!0},{key:"ArrowUp",run:tV,shift:cV,preventDefault:!0},{mac:"Cmd-ArrowUp",run:zq,shift:jq},{mac:"Ctrl-ArrowUp",run:Oq,shift:Yq},{key:"ArrowDown",run:iV,shift:CV,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Pq,shift:qq},{mac:"Ctrl-ArrowDown",run:wx,shift:Hq},{key:"PageUp",run:Oq,shift:Yq},{key:"PageDown",run:wx,shift:Hq},{key:"Home",run:wfA,shift:FfA,preventDefault:!0},{key:"Mod-Home",run:zq,shift:jq},{key:"End",run:mfA,shift:NfA,preventDefault:!0},{key:"Mod-End",run:Pq,shift:qq},{key:"Enter",run:Vq,shift:Vq},{key:"Mod-a",run:TfA},{key:"Backspace",run:Dx,shift:Dx,preventDefault:!0},{key:"Delete",run:EV,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:QV,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:PfA,preventDefault:!0},{mac:"Mod-Backspace",run:qfA,preventDefault:!0},{mac:"Mod-Delete",run:VfA,preventDefault:!0}].concat(r3A.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),DV=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:ffA,shift:_fA},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:pfA,shift:RfA},{key:"Alt-ArrowUp",run:XfA},{key:"Shift-Alt-ArrowUp",run:A3A},{key:"Alt-ArrowDown",run:$fA},{key:"Shift-Alt-ArrowDown",run:e3A},{key:"Mod-Alt-ArrowUp",run:YfA},{key:"Mod-Alt-ArrowDown",run:HfA},{key:"Escape",run:zfA},{key:"Mod-Enter",run:n3A},{key:"Alt-l",mac:"Ctrl-l",run:JfA},{key:"Mod-i",run:OfA,preventDefault:!0},{key:"Mod-[",run:wV},{key:"Mod-]",run:mV},{key:"Mod-Alt-\\",run:o3A},{key:"Shift-Mod-k",run:t3A},{key:"Shift-Mod-\\",run:SfA},{key:"Mod-/",run:gfA},{key:"Alt-A",run:CfA},{key:"Ctrl-m",mac:"Shift-Alt-m",run:a3A}].concat(s3A),yV={key:"Tab",run:mV,shift:wV};var i5=class{constructor(e,A,i){this.from=e,this.to=A,this.diagnostic=i}},td=class t{constructor(e,A,i){this.diagnostics=e,this.panel=A,this.selected=i}static init(e,A,i){let n=i.facet(p0).markerFilter;n&&(e=n(e,i));let o=e.slice().sort((d,h)=>d.from-h.from||d.to-h.to),a=new jr,r=[],s=0,l=i.doc.iter(),g=0,C=i.doc.length;for(let d=0;;){let h=d==o.length?null:o[d];if(!h&&!r.length)break;let E,f;if(r.length)E=s,f=r.reduce((k,S)=>Math.min(k,S.to),h&&h.from>E?h.from:1e8);else{if(E=h.from,E>C)break;f=h.to,r.push(h),d++}for(;dk.from||k.to==E))r.push(k),d++,f=Math.min(k.to,f);else{f=Math.min(k.from,f);break}}f=Math.min(f,C);let m=!1;if(r.some(k=>k.from==E&&(k.to==f||f==C))&&(m=E==f,!m&&f-E<10)){let k=E-(g+l.value.length);k>0&&(l.next(k),g=E);for(let S=E;;){if(S>=f){m=!0;break}if(!l.lineBreak&&g+l.value.length>S)break;S=g+l.value.length,g+=l.value.length,l.next()}}let v=LV(r);if(m)a.add(E,E,St.widget({widget:new Mx(v),diagnostics:r.slice()}));else{let k=r.reduce((S,b)=>b.markClass?S+" "+b.markClass:S,"");a.add(E,f,St.mark({class:"cm-lintRange cm-lintRange-"+v+k,diagnostics:r.slice(),inclusiveEnd:r.some(S=>S.to>f)}))}if(s=f,s==C)break;for(let k=0;k{if(!(e&&a.diagnostics.indexOf(e)<0))if(!i)i=new i5(n,o,e||a.diagnostics[0]);else{if(a.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new i5(i.from,o,i.diagnostic)}}),i}function MV(t,e){let A=e.pos,i=e.end||A,n=t.state.facet(p0).hideOn(t,A,i);if(n!=null)return n;let o=t.startState.doc.lineAt(e.pos);return!!(t.effects.some(a=>a.is(a5))||t.changes.touchesRange(o.from,Math.max(o.to,i)))}function SV(t,e){return t.field(Nl,!1)?e:e.concat(Wi.appendConfig.of(KV))}function l3A(t,e){return{effects:SV(t,[a5.of(e)])}}var a5=Wi.define(),kx=Wi.define(),kV=Wi.define(),Nl=Ma.define({create(){return new td(St.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let A=t.diagnostics.map(e.changes),i=null,n=t.panel;if(t.selected){let o=e.changes.mapPos(t.selected.from,1);i=iI(A,t.selected.diagnostic,o)||iI(A,null,o)}!A.size&&n&&e.state.facet(p0).autoPanel&&(n=null),t=new td(A,n,i)}for(let A of e.effects)if(A.is(a5)){let i=e.state.facet(p0).autoPanel?A.value.length?cf.open:null:t.panel;t=td.init(A.value,i,e.state)}else A.is(kx)?t=new td(t.diagnostics,A.value?cf.open:null,t.selected):A.is(kV)&&(t=new td(t.diagnostics,t.panel,A.value));return t},provide:t=>[q1.from(t,e=>e.panel),gi.decorations.from(t,e=>e.diagnostics)]});var g3A=St.mark({class:"cm-lintRange cm-lintRange-active"});function c3A(t,e,A){let{diagnostics:i}=t.state.field(Nl),n,o=-1,a=-1;i.between(e-(A<0?1:0),e+(A>0?1:0),(s,l,{spec:g})=>{if(e>=s&&e<=l&&(s==l||(e>s||A>0)&&(eFV(t,A,!1)))}var C3A=t=>{let e=t.state.field(Nl,!1);(!e||!e.panel)&&t.dispatch({effects:SV(t.state,[kx.of(!0)])});let A=W4(t,cf.open);return A&&A.dom.querySelector(".cm-panel-lint ul").focus(),!0},vV=t=>{let e=t.state.field(Nl,!1);return!e||!e.panel?!1:(t.dispatch({effects:kx.of(!1)}),!0)},I3A=t=>{let e=t.state.field(Nl,!1);if(!e)return!1;let A=t.state.selection.main,i=iI(e.diagnostics,null,A.to+1);return!i&&(i=iI(e.diagnostics,null,0),!i||i.from==A.from&&i.to==A.to)?!1:(t.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var _V=[{key:"Mod-Shift-m",run:C3A,preventDefault:!0},{key:"F8",run:I3A}],d3A=_o.fromClass(class{constructor(t){this.view=t,this.timeout=-1,this.set=!0;let{delay:e}=t.state.facet(p0);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let t=Date.now();if(tPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(l3A(this.view.state,i.reduce((n,o)=>n.concat(o))))},i=>{Sr(this.view.state,i)})}}update(t){let e=t.state.facet(p0);(t.docChanged||e!=t.startState.facet(p0)||e.needsRefresh&&e.needsRefresh(t))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function B3A(t,e,A){let i=[],n=-1;for(let o of t)o.then(a=>{i.push(a),clearTimeout(n),i.length==t.length?e(i):n=setTimeout(()=>e(i),200)},A)}var p0=At.define({combine(t){return gA({sources:t.map(e=>e.source).filter(e=>e!=null)},Mr(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:bV,tooltipFilter:bV,needsRefresh:(e,A)=>e?A?i=>e(i)||A(i):e:A,hideOn:(e,A)=>e?A?(i,n,o)=>e(i,n,o)||A(i,n,o):e:A,autoPanel:(e,A)=>e||A}))}});function bV(t,e){return t?e?(A,i)=>e(t(A,i),i):t:e}function RV(t,e={}){return[p0.of({source:t,config:e}),d3A,KV]}function NV(t){let e=[];if(t)A:for(let{name:A}of t){for(let i=0;io.toLowerCase()==n.toLowerCase())){e.push(n);continue A}}e.push("")}return e}function FV(t,e,A){var i;let n=A?NV(e.actions):[];return no("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},no("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((o,a)=>{let r=!1,s=d=>{if(d.preventDefault(),r)return;r=!0;let h=iI(t.state.field(Nl).diagnostics,e);h&&o.apply(t,h.from,h.to)},{name:l}=o,g=n[a]?l.indexOf(n[a]):-1,C=g<0?l:[l.slice(0,g),no("u",l.slice(g,g+1)),l.slice(g+1)],I=o.markClass?" "+o.markClass:"";return no("button",{type:"button",class:"cm-diagnosticAction"+I,onclick:s,onmousedown:s,"aria-label":` Action: ${l}${g<0?"":` (access key "${n[a]})"`}.`},C)}),e.source&&no("div",{class:"cm-diagnosticSource"},e.source))}var Mx=class extends sl{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return no("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},n5=class{constructor(e,A){this.diagnostic=A,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=FV(e,A,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},cf=class t{constructor(e){this.view=e,this.items=[];let A=n=>{if(!(n.ctrlKey||n.altKey||n.metaKey)){if(n.keyCode==27)vV(this.view),this.view.focus();else if(n.keyCode==38||n.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(n.keyCode==40||n.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(n.keyCode==36)this.moveSelection(0);else if(n.keyCode==35)this.moveSelection(this.items.length-1);else if(n.keyCode==13)this.view.focus();else if(n.keyCode>=65&&n.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:o}=this.items[this.selectedIndex],a=NV(o.actions);for(let r=0;r{for(let o=0;ovV(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(Nl).selected;if(!e)return-1;for(let A=0;A{for(let g of l.diagnostics){if(a.has(g))continue;a.add(g);let C=-1,I;for(let d=i;di&&(this.items.splice(i,C-i),n=!0)),A&&I.diagnostic==A.diagnostic?I.dom.hasAttribute("aria-selected")||(I.dom.setAttribute("aria-selected","true"),o=I):I.dom.hasAttribute("aria-selected")&&I.dom.removeAttribute("aria-selected"),i++}});i({sel:o.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:r,panel:s})=>{let l=s.height/this.list.offsetHeight;r.tops.bottom&&(this.list.scrollTop+=(r.bottom-s.bottom)/l)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function A(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)A();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)A()}moveSelection(e){if(this.selectedIndex<0)return;let A=this.view.state.field(Nl),i=iI(A.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kV.of(i)})}static open(e){return new t(e)}};function t5(t,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(t)}')`}function e5(t){return t5(``,'width="6" height="3"')}var E3A=gi.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:e5("#d11")},".cm-lintRange-warning":{backgroundImage:e5("orange")},".cm-lintRange-info":{backgroundImage:e5("#999")},".cm-lintRange-hint":{backgroundImage:e5("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function h3A(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function LV(t){let e="hint",A=1;for(let i of t){let n=h3A(i.severity);n>A&&(A=n,e=i.severity)}return e}var o5=class extends gl{constructor(e){super(),this.diagnostics=e,this.severity=LV(e)}toDOM(e){let A=document.createElement("div");A.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,n=e.state.facet(r5).tooltipFilter;return n&&(i=n(i,e.state)),i.length&&(A.onmouseover=()=>u3A(e,A,i)),A}};function Q3A(t,e){let A=i=>{let n=e.getBoundingClientRect();if(!(i.clientX>n.left-10&&i.clientXn.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,Q3A(t,e)}let{hoverTime:n}=t.state.facet(r5),o=setTimeout(i,n);e.onmouseout=()=>{clearTimeout(o),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(o),o=setTimeout(i,n)}}function f3A(t,e){let A=Object.create(null);for(let n of e){let o=t.lineAt(n.from);(A[o.from]||(A[o.from]=[])).push(n)}let i=[];for(let n in A)i.push(new o5(A[n]).range(+n));return io.of(i,!0)}var p3A=Kw({class:"cm-gutter-lint",markers:t=>t.state.field(Sx),widgetMarker:(t,e,A)=>{let i=[];return t.state.field(Sx).between(A.from,A.to,(n,o,a)=>{n>A.from&&ni.is(xx)?i.value:A,t)},provide:t=>$E.from(t)}),m3A=gi.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:t5('')},".cm-lint-marker-warning":{content:t5('')},".cm-lint-marker-error":{content:t5('')}}),KV=[Nl,gi.decorations.compute([Nl],t=>{let{selected:e,panel:A}=t.field(Nl);return!e||!A||e.from==e.to?St.none:St.set([g3A.range(e.from,e.to)])}),$j(c3A,{hideOn:MV}),E3A],r5=At.define({combine(t){return Mr(t,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function UV(t={}){return[r5.of(t),Sx,p3A,m3A,GV]}var Rx=class t{constructor(e,A,i,n,o,a,r,s,l,g=0,C){this.p=e,this.stack=A,this.state=i,this.reducePos=n,this.pos=o,this.score=a,this.buffer=r,this.bufferBase=s,this.curContext=l,this.lookAhead=g,this.parent=C}toString(){return`[${this.stack.filter((e,A)=>A%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,A,i=0){let n=e.parser.context;return new t(e,[],A,i,i,0,[],0,n?new s5(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,A){this.stack.push(this.state,A,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var A;let i=e>>19,n=e&65535,{parser:o}=this.p,a=this.reducePos=2e3&&!(!((A=this.p.parser.nodeSet.types[n])===null||A===void 0)&&A.isAnonymous)&&(l==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=g):this.p.lastBigReductionSizes;)this.stack.pop();this.reduceContext(n,l)}storeNode(e,A,i,n=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&a.buffer[r-4]==0&&a.buffer[r-1]>-1){if(A==i)return;if(a.buffer[r-2]>=A){a.buffer[r-2]=i;return}}}if(!o||this.pos==i)this.buffer.push(e,A,i,n);else{let a=this.buffer.length;if(a>0&&(this.buffer[a-4]!=0||this.buffer[a-1]<0)){let r=!1;for(let s=a;s>0&&this.buffer[s-2]>i;s-=4)if(this.buffer[s-1]>=0){r=!0;break}if(r)for(;a>0&&this.buffer[a-2]>i;)this.buffer[a]=this.buffer[a-4],this.buffer[a+1]=this.buffer[a-3],this.buffer[a+2]=this.buffer[a-2],this.buffer[a+3]=this.buffer[a-1],a-=4,n>4&&(n-=4)}this.buffer[a]=e,this.buffer[a+1]=A,this.buffer[a+2]=i,this.buffer[a+3]=n}}shift(e,A,i,n){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let o=e,{parser:a}=this.p;this.pos=n;let r=a.stateFlag(o,1);!r&&(n>i||A<=a.maxNode)&&(this.reducePos=n),this.pushState(o,r?i:Math.min(i,this.reducePos)),this.shiftContext(A,i),A<=a.maxNode&&this.buffer.push(A,i,n,4)}else this.pos=n,this.shiftContext(A,i),A<=this.p.parser.maxNode&&this.buffer.push(A,i,n,4)}apply(e,A,i,n){e&65536?this.reduce(e):this.shift(e,A,i,n)}useNode(e,A){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let n=this.pos;this.reducePos=this.pos=n+e.length,this.pushState(A,n),this.buffer.push(i,n,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,A=e.buffer.length;for(;A>0&&e.buffer[A-2]>e.reducePos;)A-=4;let i=e.buffer.slice(A),n=e.bufferBase+A;for(;e&&n==e.bufferBase;)e=e.parent;return new t(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,A){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,A,4),this.storeNode(0,this.pos,A,i?8:4),this.pos=this.reducePos=A,this.score-=190}canShift(e){for(let A=new Nx(this);;){let i=this.p.parser.stateSlot(A.state,4)||this.p.parser.hasAction(A.state,e);if(i==0)return!1;if((i&65536)==0)return!0;A.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let A=this.p.parser.nextStates(this.state);if(A.length>8||this.stack.length>=120){let n=[];for(let o=0,a;os&1&&r==a)||n.push(A[o],a)}A=n}let i=[];for(let n=0;n>19,n=A&65535,o=this.stack.length-i*3;if(o<0||e.getGoto(this.stack[o],n,!1)<0){let a=this.findForcedReduction();if(a==null)return!1;A=a}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(A),!0}findForcedReduction(){let{parser:e}=this.p,A=[],i=(n,o)=>{if(!A.includes(n))return A.push(n),e.allActions(n,a=>{if(!(a&393216))if(a&65536){let r=(a>>19)-o;if(r>1){let s=a&65535,l=this.stack.length-r*3;if(l>=0&&e.getGoto(this.stack[l],s,!1)>=0)return r<<19|65536|s}}else{let r=i(a,o+1);if(r!=null)return r}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let A=0;A0&&this.emitLookAhead()}},s5=class{constructor(e,A){this.tracker=e,this.context=A,this.hash=e.strict?e.hash(A):0}},Nx=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let A=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let n=this.start.p.parser.getGoto(this.stack[this.base-3],A,!0);this.state=n}},Fx=class t{constructor(e,A,i){this.stack=e,this.pos=A,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,A=e.bufferBase+e.buffer.length){return new t(e,A,A-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new t(this.stack,this.pos,this.index)}};function Cf(t,e=Uint16Array){if(typeof t!="string")return t;let A=null;for(let i=0,n=0;i=92&&a--,a>=34&&a--;let s=a-32;if(s>=46&&(s-=46,r=!0),o+=s,r)break;o*=46}A?A[n++]=o:A=new e(o)}return A}var rh=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},TV=new rh,Lx=class{constructor(e,A){this.input=e,this.ranges=A,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=TV,this.rangeIndex=0,this.pos=this.chunkPos=A[0].from,this.range=A[0],this.end=A[A.length-1].to,this.readNext()}resolveOffset(e,A){let i=this.range,n=this.rangeIndex,o=this.pos+e;for(;oi.to:o>=i.to;){if(n==this.ranges.length-1)return null;let a=this.ranges[++n];o+=a.from-i.to,i=a}return o}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,A.from);return this.end}peek(e){let A=this.chunkOff+e,i,n;if(A>=0&&A=this.chunk2Pos&&ir.to&&(this.chunk2=this.chunk2.slice(0,r.to-i)),n=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),n}acceptToken(e,A=0){let i=A?this.resolveOffset(A,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,A){if(A?(this.token=A,A.start=e,A.lookAhead=e+1,A.value=A.extended=-1):this.token=TV,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&A<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,A-this.chunkPos);if(e>=this.chunk2Pos&&A<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,A-this.chunk2Pos);if(e>=this.range.from&&A<=this.range.to)return this.input.read(e,A);let i="";for(let n of this.ranges){if(n.from>=A)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,A)))}return i}},nI=class{constructor(e,A){this.data=e,this.id=A}token(e,A){let{parser:i}=A.p;zV(this.data,e,A,this.id,i.data,i.tokenPrecTable)}};nI.prototype.contextual=nI.prototype.fallback=nI.prototype.extend=!1;var Gx=class{constructor(e,A,i){this.precTable=A,this.elseToken=i,this.data=typeof e=="string"?Cf(e):e}token(e,A){let i=e.pos,n=0;for(;;){let o=e.next<0,a=e.resolveOffset(1,1);if(zV(this.data,e,A,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(o||n++,a==null)break;e.reset(a,e.token)}n&&(e.reset(i,e.token),e.acceptToken(this.elseToken,n))}};Gx.prototype.contextual=nI.prototype.fallback=nI.prototype.extend=!1;function zV(t,e,A,i,n,o){let a=0,r=1<0){let h=t[d];if(s.allows(h)&&(e.token.value==-1||e.token.value==h||D3A(h,e.token.value,n,o))){e.acceptToken(h);break}}let g=e.next,C=0,I=t[a+2];if(e.next<0&&I>C&&t[l+I*3-3]==65535){a=t[l+I*3-1];continue A}for(;C>1,h=l+d+(d<<1),E=t[h],f=t[h+1]||65536;if(g=f)C=d+1;else{a=t[h+2],e.advance();continue A}}break}}function JV(t,e,A){for(let i=e,n;(n=t[i])!=65535;i++)if(n==A)return i-e;return-1}function D3A(t,e,A,i){let n=JV(A,i,e);return n<0||JV(A,i,t)e)&&!i.type.isError)return A<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(t.length,Math.max(i.from+1,e+25));if(A<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return A<0?0:t.length}}var Kx=class{constructor(e,A){this.fragments=e,this.nodeSet=A,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?OV(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?OV(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=a,null;if(o instanceof Ka){if(a==e){if(a=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(a),this.index.push(0))}else this.index[A]++,this.nextStart=a+o.length}}},Ux=class{constructor(e,A){this.stream=A,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new rh)}getActions(e){let A=0,i=null,{parser:n}=e.p,{tokenizers:o}=n,a=n.stateSlot(e.state,3),r=e.curContext?e.curContext.hash:0,s=0;for(let l=0;lC.end+25&&(s=Math.max(C.lookAhead,s)),C.value!=0)){let I=A;if(C.extended>-1&&(A=this.addActions(e,C.extended,C.end,A)),A=this.addActions(e,C.value,C.end,A),!g.extend&&(i=C,A>I))break}}for(;this.actions.length>A;)this.actions.pop();return s&&e.setLookAhead(s),!i&&e.pos==this.stream.end&&(i=new rh,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,A=this.addActions(e,i.value,i.end,A)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let A=new rh,{pos:i,p:n}=e;return A.start=i,A.end=Math.min(i+1,n.stream.end),A.value=i==n.stream.end?n.parser.eofTerm:0,A}updateCachedToken(e,A,i){let n=this.stream.clipPos(i.pos);if(A.token(this.stream.reset(n,e),i),e.value>-1){let{parser:o}=i.p;for(let a=0;a=0&&i.p.parser.dialect.allows(r>>1)){(r&1)==0?e.value=r>>1:e.extended=r>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,A,i,n){for(let o=0;oe.bufferLength*4?new Kx(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,A=this.minStackPos,i=this.stacks=[],n,o;if(this.bigReductionCount>300&&e.length==1){let[a]=e;for(;a.forceReduce()&&a.stack.length&&a.stack[a.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;aA)i.push(r);else{if(this.advanceStack(r,i,e))continue;{n||(n=[],o=[]),n.push(r);let s=this.tokens.getMainToken(r);o.push(s.value,s.end)}}break}}if(!i.length){let a=n&&y3A(n);if(a)return Fl&&console.log("Finish with "+this.stackID(a)),this.stackToTree(a);if(this.parser.strict)throw Fl&&n&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+A);this.recovering||(this.recovering=5)}if(this.recovering&&n){let a=this.stoppedAt!=null&&n[0].pos>this.stoppedAt?n[0]:this.runRecovery(n,o,i);if(a)return Fl&&console.log("Force-finish "+this.stackID(a)),this.stackToTree(a.forceAll())}if(this.recovering){let a=this.recovering==1?1:this.recovering*3;if(i.length>a)for(i.sort((r,s)=>s.score-r.score);i.length>a;)i.pop();i.some(r=>r.reducePos>A)&&this.recovering--}else if(i.length>1){A:for(let a=0;a500&&l.buffer.length>500)if((r.score-l.score||r.buffer.length-l.buffer.length)>0)i.splice(s--,1);else{i.splice(a--,1);continue A}}}i.length>12&&(i.sort((a,r)=>r.score-a.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let a=1;a ":"";if(this.stoppedAt!=null&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let l=e.curContext&&e.curContext.tracker.strict,g=l?e.curContext.hash:0;for(let C=this.fragments.nodeAt(n);C;){let I=this.parser.nodeSet.types[C.type.id]==C.type?o.getGoto(e.state,C.type.id):-1;if(I>-1&&C.length&&(!l||(C.prop(Ni.contextHash)||0)==g))return e.useNode(C,I),Fl&&console.log(a+this.stackID(e)+` (via reuse of ${o.getName(C.type.id)})`),!0;if(!(C instanceof Ka)||C.children.length==0||C.positions[0]>0)break;let d=C.children[0];if(d instanceof Ka&&C.positions[0]==0)C=d;else break}}let r=o.stateSlot(e.state,4);if(r>0)return e.reduce(r),Fl&&console.log(a+this.stackID(e)+` (via always-reduce ${o.getName(r&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let s=this.tokens.getActions(e);for(let l=0;ln?A.push(h):i.push(h)}return!1}advanceFully(e,A){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return YV(e,A),!0}}runRecovery(e,A,i){let n=null,o=!1;for(let a=0;a ":"";if(r.deadEnd&&(o||(o=!0,r.restart(),Fl&&console.log(g+this.stackID(r)+" (restarted)"),this.advanceFully(r,i))))continue;let C=r.split(),I=g;for(let d=0;d<10&&C.forceReduce()&&(Fl&&console.log(I+this.stackID(C)+" (via force-reduce)"),!this.advanceFully(C,i));d++)Fl&&(I=this.stackID(C)+" -> ");for(let d of r.recoverByInsert(s))Fl&&console.log(g+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>r.pos?(l==r.pos&&(l++,s=0),r.recoverByDelete(s,l),Fl&&console.log(g+this.stackID(r)+` (via recover-delete ${this.parser.getName(s)})`),YV(r,i)):(!n||n.scoree.topRules[r][1]),n=[];for(let r=0;r=0)o(g,s,r[l++]);else{let C=r[l+-g];for(let I=-g;I>0;I--)o(r[l++],s,C);l++}}}this.nodeSet=new X4(A.map((r,s)=>Qs.define({name:s>=this.minRepeatTerm?void 0:r,id:s,props:n[s],top:i.indexOf(s)>-1,error:s==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let a=Cf(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let r=0;rtypeof r=="number"?new nI(a,r):r),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,A,i){let n=new Tx(this,e,A,i);for(let o of this.wrappers)n=o(n,e,A,i);return n}getGoto(e,A,i=!1){let n=this.goto;if(A>=n[0])return-1;for(let o=n[A+1];;){let a=n[o++],r=a&1,s=n[o++];if(r&&i)return s;for(let l=o+(a>>1);o0}validAction(e,A){return!!this.allActions(e,i=>i==A?!0:null)}allActions(e,A){let i=this.stateSlot(e,4),n=i?A(i):void 0;for(let o=this.stateSlot(e,1);n==null;o+=3){if(this.data[o]==65535)if(this.data[o+1]==1)o=uC(this.data,o+2);else break;n=A(uC(this.data,o+1))}return n}nextStates(e){let A=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=uC(this.data,i+2);else break;if((this.data[i+2]&1)==0){let n=this.data[i+1];A.some((o,a)=>a&1&&o==n)||A.push(this.data[i],n)}}return A}configure(e){let A=Object.assign(Object.create(t.prototype),this);if(e.props&&(A.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);A.top=i}return e.tokenizers&&(A.tokenizers=this.tokenizers.map(i=>{let n=e.tokenizers.find(o=>o.from==i);return n?n.to:i})),e.specializers&&(A.specializers=this.specializers.slice(),A.specializerSpecs=this.specializerSpecs.map((i,n)=>{let o=e.specializers.find(r=>r.from==i.external);if(!o)return i;let a=Object.assign(Object.assign({},i),{external:o.to});return A.specializers[n]=HV(a),a})),e.contextTracker&&(A.context=e.contextTracker),e.dialect&&(A.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(A.strict=e.strict),e.wrap&&(A.wrappers=A.wrappers.concat(e.wrap)),e.bufferLength!=null&&(A.bufferLength=e.bufferLength),A}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let A=this.dynamicPrecedences;return A==null?0:A[e]||0}parseDialect(e){let A=Object.keys(this.dialects),i=A.map(()=>!1);if(e)for(let o of e.split(" ")){let a=A.indexOf(o);a>=0&&(i[a]=!0)}let n=null;for(let o=0;oi)&&A.p.parser.stateFlag(A.state,2)&&(!e||e.scoret.external(A,i)<<1|e}return t.get}var v3A=Pw({String:Fe.string,Number:Fe.number,"True False":Fe.bool,PropertyName:Fe.propertyName,Null:Fe.null,", :":Fe.separator,"[ ]":Fe.squareBracket,"{ }":Fe.brace}),PV=l5.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[v3A],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var b3A=jw.define({name:"json",parser:PV.configure({props:[Ex.add({Object:hx({except:/^\s*\}/}),Array:hx({except:/^\s*\]/})}),rf.add({"Object Array":bq})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function jV(){return new qw(b3A)}var qV=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t,aI=class{constructor(e,A,i=0,n=e.length,o,a){this.test=a,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=o?r=>o(qV(r)):qV,this.query=this.normalize(A)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return qr(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let A=_4(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=_l(e);let n=this.normalize(A);if(n.length)for(let o=0,a=i;;o++){let r=n.charCodeAt(o),s=this.match(r,a,this.bufferPos+this.bufferStart);if(o==n.length-1){if(s)return this.value=s,this;break}a==i&&othis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let A=this.matchPos<=this.to&&this.re.exec(this.curLine);if(A){let i=this.curLineStart+A.index,n=i+A[0].length;if(this.matchPos=B5(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||n.to<=A){let r=new t(A,e.sliceString(A,i));return Ox.set(e,r),r}if(n.from==A&&n.to==i)return n;let{text:o,from:a}=n;return a>A&&(o=e.sliceString(A,a)+o,a=A),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,A=this.re.exec(this.flat.text);if(A&&!A[0]&&A.index==e&&(this.re.lastIndex=e+1,A=this.re.exec(this.flat.text)),A){let i=this.flat.from+A.index,n=i+A[0].length;if((this.flat.to>=this.to||A.index+A[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this.matchPos=B5(this.text,n+(i==n?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=I5.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(C5.prototype[Symbol.iterator]=d5.prototype[Symbol.iterator]=function(){return this});function M3A(t){try{return new RegExp(t,qx),!0}catch(e){return!1}}function B5(t,e){if(e>=t.length)return e;let A=t.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var S3A=t=>{let{state:e}=t,A=String(e.doc.lineAt(t.state.selection.main.head).number),{close:i,result:n}=eq(t,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:A},focus:!0,submitLabel:e.phrase("go")});return n.then(o=>{let a=o&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(o.elements.line.value);if(!a){t.dispatch({effects:i});return}let r=e.doc.lineAt(e.selection.main.head),[,s,l,g,C]=a,I=g?+g.slice(1):0,d=l?+l:r.number;if(l&&C){let f=d/100;s&&(f=f*(s=="-"?-1:1)+r.number/e.doc.lines),d=Math.round(e.doc.lines*f)}else l&&s&&(d=d*(s=="-"?-1:1)+r.number);let h=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),E=Ie.cursor(h.from+Math.max(0,Math.min(I,h.length)));t.dispatch({effects:[i,gi.scrollIntoView(E.from,{y:"center"})],selection:E})}),!0},k3A={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},XV=At.define({combine(t){return Mr(t,k3A,{highlightWordAroundCursor:(e,A)=>e||A,minSelectionLength:Math.min,maxMatches:Math.min})}});function $V(t){let e=[F3A,N3A];return t&&e.push(XV.of(t)),e}var x3A=St.mark({class:"cm-selectionMatch"}),_3A=St.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function VV(t,e,A,i){return(A==0||t(e.sliceDoc(A-1,A))!=Uo.Word)&&(i==e.doc.length||t(e.sliceDoc(i,i+1))!=Uo.Word)}function R3A(t,e,A,i){return t(e.sliceDoc(A,A+1))==Uo.Word&&t(e.sliceDoc(i-1,i))==Uo.Word}var N3A=_o.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(XV),{state:A}=t,i=A.selection;if(i.ranges.length>1)return St.none;let n=i.main,o,a=null;if(n.empty){if(!e.highlightWordAroundCursor)return St.none;let s=A.wordAt(n.head);if(!s)return St.none;a=A.charCategorizer(n.head),o=A.sliceDoc(s.from,s.to)}else{let s=n.to-n.from;if(s200)return St.none;if(e.wholeWords){if(o=A.sliceDoc(n.from,n.to),a=A.charCategorizer(n.head),!(VV(a,A,n.from,n.to)&&R3A(a,A,n.from,n.to)))return St.none}else if(o=A.sliceDoc(n.from,n.to),!o)return St.none}let r=[];for(let s of t.visibleRanges){let l=new aI(A.doc,o,s.from,s.to);for(;!l.next().done;){let{from:g,to:C}=l.value;if((!a||VV(a,A,g,C))&&(n.empty&&g<=n.from&&C>=n.to?r.push(_3A.range(g,C)):(g>=n.to||C<=n.from)&&r.push(x3A.range(g,C)),r.length>e.maxMatches))return St.none}}return St.set(r)}},{decorations:t=>t.decorations}),F3A=gi.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),L3A=({state:t,dispatch:e})=>{let{selection:A}=t,i=Ie.create(A.ranges.map(n=>t.wordAt(n.head)||Ie.cursor(n.head)),A.mainIndex);return i.eq(A)?!1:(e(t.update({selection:i})),!0)};function G3A(t,e){let{main:A,ranges:i}=t.selection,n=t.wordAt(A.head),o=n&&n.from==A.from&&n.to==A.to;for(let a=!1,r=new aI(t.doc,e,i[i.length-1].to);;)if(r.next(),r.done){if(a)return null;r=new aI(t.doc,e,0,Math.max(0,i[i.length-1].from-1)),a=!0}else{if(a&&i.some(s=>s.from==r.value.from))continue;if(o){let s=t.wordAt(r.value.from);if(!s||s.from!=r.value.from||s.to!=r.value.to)continue}return r.value}}var K3A=({state:t,dispatch:e})=>{let{ranges:A}=t.selection;if(A.some(o=>o.from===o.to))return L3A({state:t,dispatch:e});let i=t.sliceDoc(A[0].from,A[0].to);if(t.selection.ranges.some(o=>t.sliceDoc(o.from,o.to)!=i))return!1;let n=G3A(t,i);return n?(e(t.update({selection:t.selection.addRange(Ie.range(n.from,n.to),!1),effects:gi.scrollIntoView(n.to)})),!0):!1},id=At.define({combine(t){return Mr(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Px(e),scrollToMatch:e=>gi.scrollIntoView(e)})}});function AW(t){return t?[id.of(t),jx]:jx}var E5=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||M3A(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(A,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Hx(this):new Yx(this)}getCursor(e,A=0,i){let n=e.doc?e:qa.create({doc:e});return i==null&&(i=n.doc.length),this.regexp?lh(this,n,A,i):sh(this,n,A,i)}},h5=class{constructor(e){this.spec=e}};function U3A(t,e,A){return(i,n,o,a)=>{if(A&&!A(i,n,o,a))return!1;let r=i>=a&&n<=a+o.length?o.slice(i-a,n-a):e.doc.sliceString(i,n);return t(r,e,i,n)}}function sh(t,e,A,i){let n;return t.wholeWord&&(n=T3A(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(n=U3A(t.test,e,n)),new aI(e.doc,t.unquoted,A,i,t.caseSensitive?void 0:o=>o.toLowerCase(),n)}function T3A(t,e){return(A,i,n,o)=>((o>A||o+n.length=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=sh(this.spec,e,Math.max(0,A-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}};function J3A(t,e,A){return(i,n,o)=>(!A||A(i,n,o))&&t(o[0],e,i,n)}function lh(t,e,A,i){let n;return t.wholeWord&&(n=O3A(e.charCategorizer(e.selection.main.head))),t.test&&(n=J3A(t.test,e,n)),new C5(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:n},A,i)}function Q5(t,e){return t.slice(ja(t,e,!1),e)}function u5(t,e){return t.slice(e,ja(t,e))}function O3A(t){return(e,A,i)=>!i[0].length||(t(Q5(i.input,i.index))!=Uo.Word||t(u5(i.input,i.index))!=Uo.Word)&&(t(u5(i.input,i.index+i[0].length))!=Uo.Word||t(Q5(i.input,i.index+i[0].length))!=Uo.Word)}var Hx=class extends h5{nextMatch(e,A,i){let n=lh(this.spec,e,i,e.doc.length).next();return n.done&&(n=lh(this.spec,e,0,A).next()),n.done?null:n.value}prevMatchInRange(e,A,i){for(let n=1;;n++){let o=Math.max(A,i-n*1e4),a=lh(this.spec,e,o,i),r=null;for(;!a.next().done;)r=a.value;if(r&&(o==A||r.from>o+10))return r;if(o==A)return null}}prevMatch(e,A,i){return this.prevMatchInRange(e,0,A)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(A,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let n=i.length;n>0;n--){let o=+i.slice(0,n);if(o>0&&o=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=lh(this.spec,e,Math.max(0,A-250),Math.min(i+250,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}},df=Wi.define(),Vx=Wi.define(),oI=Ma.define({create(t){return new If(zx(t).create(),null)},update(t,e){for(let A of e.effects)A.is(df)?t=new If(A.value.create(),t.panel):A.is(Vx)&&(t=new If(t.query,A.value?Wx:null));return t},provide:t=>q1.from(t,e=>e.panel)});var If=class{constructor(e,A){this.query=e,this.panel=A}},Y3A=St.mark({class:"cm-searchMatch"}),H3A=St.mark({class:"cm-searchMatch cm-searchMatch-selected"}),z3A=_o.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(oI))}update(t){let e=t.state.field(oI);(e!=t.startState.field(oI)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return St.none;let{view:A}=this,i=new jr;for(let n=0,o=A.visibleRanges,a=o.length;no[n+1].from-500;)s=o[++n].to;t.highlight(A.state,r,s,(l,g)=>{let C=A.state.selection.ranges.some(I=>I.from==l&&I.to==g);i.add(l,g,C?H3A:Y3A)})}return i.finish()}},{decorations:t=>t.decorations});function Bf(t){return e=>{let A=e.state.field(oI,!1);return A&&A.query.spec.valid?t(e,A):m5(e)}}var f5=Bf((t,{query:e})=>{let{to:A}=t.state.selection.main,i=e.nextMatch(t.state,A,A);if(!i)return!1;let n=Ie.single(i.from,i.to),o=t.state.facet(id);return t.dispatch({selection:n,effects:[Zx(t,i),o.scrollToMatch(n.main,t)],userEvent:"select.search"}),tW(t),!0}),p5=Bf((t,{query:e})=>{let{state:A}=t,{from:i}=A.selection.main,n=e.prevMatch(A,i,i);if(!n)return!1;let o=Ie.single(n.from,n.to),a=t.state.facet(id);return t.dispatch({selection:o,effects:[Zx(t,n),a.scrollToMatch(o.main,t)],userEvent:"select.search"}),tW(t),!0}),P3A=Bf((t,{query:e})=>{let A=e.matchAll(t.state,1e3);return!A||!A.length?!1:(t.dispatch({selection:Ie.create(A.map(i=>Ie.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),j3A=({state:t,dispatch:e})=>{let A=t.selection;if(A.ranges.length>1||A.main.empty)return!1;let{from:i,to:n}=A.main,o=[],a=0;for(let r=new aI(t.doc,t.sliceDoc(i,n));!r.next().done;){if(o.length>1e3)return!1;r.value.from==i&&(a=o.length),o.push(Ie.range(r.value.from,r.value.to))}return e(t.update({selection:Ie.create(o,a),userEvent:"select.search.matches"})),!0},WV=Bf((t,{query:e})=>{let{state:A}=t,{from:i,to:n}=A.selection.main;if(A.readOnly)return!1;let o=e.nextMatch(A,i,i);if(!o)return!1;let a=o,r=[],s,l,g=[];a.from==i&&a.to==n&&(l=A.toText(e.getReplacement(a)),r.push({from:a.from,to:a.to,insert:l}),a=e.nextMatch(A,a.from,a.to),g.push(gi.announce.of(A.phrase("replaced match on line $",A.doc.lineAt(i).number)+".")));let C=t.state.changes(r);return a&&(s=Ie.single(a.from,a.to).map(C),g.push(Zx(t,a)),g.push(A.facet(id).scrollToMatch(s.main,t))),t.dispatch({changes:C,selection:s,effects:g,userEvent:"input.replace"}),!0}),q3A=Bf((t,{query:e})=>{if(t.state.readOnly)return!1;let A=e.matchAll(t.state,1e9).map(n=>{let{from:o,to:a}=n;return{from:o,to:a,insert:e.getReplacement(n)}});if(!A.length)return!1;let i=t.state.phrase("replaced $ matches",A.length)+".";return t.dispatch({changes:A,effects:gi.announce.of(i),userEvent:"input.replace.all"}),!0});function Wx(t){return t.state.facet(id).createPanel(t)}function zx(t,e){var A,i,n,o,a;let r=t.selection.main,s=r.empty||r.to>r.from+100?"":t.sliceDoc(r.from,r.to);if(e&&!s)return e;let l=t.facet(id);return new E5({search:((A=e?.literal)!==null&&A!==void 0?A:l.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:l.caseSensitive,literal:(n=e?.literal)!==null&&n!==void 0?n:l.literal,regexp:(o=e?.regexp)!==null&&o!==void 0?o:l.regexp,wholeWord:(a=e?.wholeWord)!==null&&a!==void 0?a:l.wholeWord})}function eW(t){let e=W4(t,Wx);return e&&e.dom.querySelector("[main-field]")}function tW(t){let e=eW(t);e&&e==t.root.activeElement&&e.select()}var m5=t=>{let e=t.state.field(oI,!1);if(e&&e.panel){let A=eW(t);if(A&&A!=t.root.activeElement){let i=zx(t.state,e.query.spec);i.valid&&t.dispatch({effects:df.of(i)}),A.focus(),A.select()}}else t.dispatch({effects:[Vx.of(!0),e?df.of(zx(t.state,e.query.spec)):Wi.appendConfig.of(jx)]});return!0},w5=t=>{let e=t.state.field(oI,!1);if(!e||!e.panel)return!1;let A=W4(t,Wx);return A&&A.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:Vx.of(!1)}),!0},iW=[{key:"Mod-f",run:m5,scope:"editor search-panel"},{key:"F3",run:f5,shift:p5,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:f5,shift:p5,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:w5,scope:"editor search-panel"},{key:"Mod-Shift-l",run:j3A},{key:"Mod-Alt-g",run:S3A},{key:"Mod-d",run:K3A,preventDefault:!0}],Px=class{constructor(e){this.view=e;let A=this.query=e.state.field(oI).query.spec;this.commit=this.commit.bind(this),this.searchField=no("input",{value:A.search,placeholder:Ll(e,"Find"),"aria-label":Ll(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=no("input",{value:A.replace,placeholder:Ll(e,"Replace"),"aria-label":Ll(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=no("input",{type:"checkbox",name:"case",form:"",checked:A.caseSensitive,onchange:this.commit}),this.reField=no("input",{type:"checkbox",name:"re",form:"",checked:A.regexp,onchange:this.commit}),this.wordField=no("input",{type:"checkbox",name:"word",form:"",checked:A.wholeWord,onchange:this.commit});function i(n,o,a){return no("button",{class:"cm-button",name:n,onclick:o,type:"button"},a)}this.dom=no("div",{onkeydown:n=>this.keydown(n),class:"cm-search"},[this.searchField,i("next",()=>f5(e),[Ll(e,"next")]),i("prev",()=>p5(e),[Ll(e,"previous")]),i("select",()=>P3A(e),[Ll(e,"all")]),no("label",null,[this.caseField,Ll(e,"match case")]),no("label",null,[this.reField,Ll(e,"regexp")]),no("label",null,[this.wordField,Ll(e,"by word")]),...e.state.readOnly?[]:[no("br"),this.replaceField,i("replace",()=>WV(e),[Ll(e,"replace")]),i("replaceAll",()=>q3A(e),[Ll(e,"replace all")])],no("button",{name:"close",onclick:()=>w5(e),"aria-label":Ll(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new E5({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:df.of(e)}))}keydown(e){Jj(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?p5:f5)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),WV(this.view))}update(e){for(let A of e.transactions)for(let i of A.effects)i.is(df)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(id).top}};function Ll(t,e){return t.state.phrase(e)}var g5=30,c5=/[\s\.,:;?!]/;function Zx(t,{from:e,to:A}){let i=t.state.doc.lineAt(e),n=t.state.doc.lineAt(A).to,o=Math.max(i.from,e-g5),a=Math.min(n,A+g5),r=t.state.sliceDoc(o,a);if(o!=i.from){for(let s=0;sr.length-g5;s--)if(!c5.test(r[s-1])&&c5.test(r[s])){r=r.slice(0,s);break}}return gi.announce.of(`${t.state.phrase("current match")}. ${r} ${t.state.phrase("on line")} ${i.number}.`)}var V3A=gi.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),jx=[oI,ac.low(z3A),V3A];var y5=class{constructor(e,A,i,n){this.state=e,this.pos=A,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let A=kr(this.state).resolveInner(this.pos,-1);for(;A&&e.indexOf(A.name)<0;)A=A.parent;return A?{from:A.from,to:this.pos,text:this.state.sliceDoc(A.from,this.pos),type:A.type}:null}matchBefore(e){let A=this.state.doc.lineAt(this.pos),i=Math.max(A.from,this.pos-250),n=A.text.slice(i-A.from,this.pos-A.from),o=n.search(cW(e,!1));return o<0?null:{from:i+o,to:this.pos,text:n.slice(o)}}get aborted(){return this.abortListeners==null}addEventListener(e,A,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(A),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function nW(t){let e=Object.keys(t).join(""),A=/\w/.test(e);return A&&(e=e.replace(/\w/g,"")),`[${A?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function W3A(t){let e=Object.create(null),A=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let o=1;otypeof n=="string"?{label:n}:n),[A,i]=e.every(n=>/^\w+$/.test(n.label))?[/\w*$/,/\w+$/]:W3A(e);return n=>{let o=n.matchBefore(i);return o||n.explicit?{from:o?o.from:n.pos,options:e,validFor:A}:null}}var v5=class{constructor(e,A,i,n){this.completion=e,this.source=A,this.match=i,this.score=n}};function od(t){return t.selection.main.from}function cW(t,e){var A;let{source:i}=t,n=e&&i[0]!="^",o=i[i.length-1]!="$";return!n&&!o?t:new RegExp(`${n?"^":""}(?:${i})${o?"$":""}`,(A=t.flags)!==null&&A!==void 0?A:t.ignoreCase?"i":"")}var CW=al.define();function X3A(t,e,A,i){let{main:n}=t.selection,o=A-n.from,a=i-n.from;return Ye(gA({},t.changeByRange(r=>{if(r!=n&&A!=i&&t.sliceDoc(r.from+o,r.from+a)!=t.sliceDoc(A,i))return{range:r};let s=t.toText(e);return{changes:{from:r.from+o,to:i==n.from?r.to:r.from+a,insert:s},range:Ie.cursor(r.from+o+s.length)}})),{scrollIntoView:!0,userEvent:"input.complete"})}var oW=new WeakMap;function $3A(t){if(!Array.isArray(t))return t;let e=oW.get(t);return e||oW.set(t,e=Z3A(t)),e}var b5=Wi.define(),Ef=Wi.define(),e_=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let A=0;A=48&&b<=57||b>=97&&b<=122?2:b>=65&&b<=90?1:0:(x=_4(b))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!v||F==1&&f||S==0&&F!=0)&&(A[C]==b||i[C]==b&&(I=!0)?a[C++]=v:a.length&&(m=!1)),S=F,v+=_l(b)}return C==s&&a[0]==0&&m?this.result(-100+(I?-200:0),a,e):d==s&&h==0?this.ret(-200-e.length+(E==e.length?0:-100),[0,E]):r>-1?this.ret(-700-e.length,[r,r+this.pattern.length]):d==s?this.ret(-900-e.length,[h,E]):C==s?this.result(-100+(I?-200:0)+-700+(m?0:-1100),a,e):A.length==2?null:this.result((n[0]?-700:0)+-200+-1100,n,e)}result(e,A,i){let n=[],o=0;for(let a of A){let r=a+(this.astral?_l(qr(i,a)):1);o&&n[o-1]==a?n[o-1]=r:(n[o++]=a,n[o++]=r)}return this.ret(e-i.length,n)}},t_=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:ApA,filterStrict:!1,compareCompletions:(e,A)=>(e.sortText||e.label).localeCompare(A.sortText||A.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,A)=>e&&A,closeOnBlur:(e,A)=>e&&A,icons:(e,A)=>e&&A,tooltipClass:(e,A)=>i=>aW(e(i),A(i)),optionClass:(e,A)=>i=>aW(e(i),A(i)),addToOptions:(e,A)=>e.concat(A),filterStrict:(e,A)=>e||A})}});function aW(t,e){return t?e?t+" "+e:t:e}function ApA(t,e,A,i,n,o){let a=t.textDirection==mo.RTL,r=a,s=!1,l="top",g,C,I=e.left-n.left,d=n.right-e.right,h=i.right-i.left,E=i.bottom-i.top;if(r&&I=E||v>e.top?g=A.bottom-e.top:(l="bottom",g=e.bottom-A.top)}let f=(e.bottom-e.top)/o.offsetHeight,m=(e.right-e.left)/o.offsetWidth;return{style:`${l}: ${g/f}px; max-width: ${C/m}px`,class:"cm-completionInfo-"+(s?a?"left-narrow":"right-narrow":r?"left":"right")}}var r_=Wi.define();function epA(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(A){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),A.type&&i.classList.add(...A.type.split(/\s+/g).map(n=>"cm-completionIcon-"+n)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(A,i,n,o){let a=document.createElement("span");a.className="cm-completionLabel";let r=A.displayLabel||A.label,s=0;for(let l=0;ls&&a.appendChild(document.createTextNode(r.slice(s,g)));let I=a.appendChild(document.createElement("span"));I.appendChild(document.createTextNode(r.slice(g,C))),I.className="cm-completionMatchedText",s=C}return sA.position-i.position).map(A=>A.render)}function Xx(t,e,A){if(t<=A)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let n=Math.floor(e/A);return{from:n*A,to:(n+1)*A}}let i=Math.floor((t-e)/A);return{from:t-(i+1)*A,to:t-i*A}}var i_=class{constructor(e,A,i){this.view=e,this.stateField=A,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:s=>this.placeInfo(s),key:this},this.space=null,this.currentClass="";let n=e.state.field(A),{options:o,selected:a}=n.open,r=e.state.facet(xr);this.optionContent=epA(r),this.optionClass=r.optionClass,this.tooltipClass=r.tooltipClass,this.range=Xx(o.length,a,r.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",s=>{let{options:l}=e.state.field(A).open;for(let g=s.target,C;g&&g!=this.dom;g=g.parentNode)if(g.nodeName=="LI"&&(C=/-(\d+)$/.exec(g.id))&&+C[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;g!=null&&(e.dispatch({effects:r_.of(g)}),s.preventDefault())}}),this.dom.addEventListener("focusout",s=>{let l=e.state.field(this.stateField,!1);l&&l.tooltip&&e.state.facet(xr).closeOnBlur&&s.relatedTarget!=e.contentDOM&&e.dispatch({effects:Ef.of(null)})}),this.showOptions(o,n.id)}mount(){this.updateSel()}showOptions(e,A){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,A,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var A;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:o,selected:a,disabled:r}=i.open;(!n.open||n.open.options!=o)&&(this.range=Xx(o.length,a,e.state.facet(xr).maxRenderedOptions),this.showOptions(o,i.id)),this.updateSel(),r!=((A=n.open)===null||A===void 0?void 0:A.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!r)}}updateTooltipClass(e){let A=this.tooltipClass(e);if(A!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of A.split(" "))i&&this.dom.classList.add(i);this.currentClass=A}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),A=e.open;(A.selected>-1&&A.selected=this.range.to)&&(this.range=Xx(A.options.length,A.selected,this.view.state.facet(xr).maxRenderedOptions),this.showOptions(A.options,e.id));let i=this.updateSelectedOption(A.selected);if(i){this.destroyInfo();let{completion:n}=A.options[A.selected],{info:o}=n;if(!o)return;let a=typeof o=="string"?document.createTextNode(o):o(n);if(!a)return;"then"in a?a.then(r=>{r&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(r,n)}).catch(r=>Sr(this.view.state,r,"completion info")):(this.addInfoPane(a,n),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,A){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:n,destroy:o}=e;i.appendChild(n),this.infoDestroy=o||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let A=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)i.nodeName!="LI"||!i.id?n--:n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),A=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return A&&ipA(this.list,A),A}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let A=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),o=this.space;if(!o){let a=this.dom.ownerDocument.documentElement;o={left:0,top:0,right:a.clientWidth,bottom:a.clientHeight}}return n.top>Math.min(o.bottom,A.bottom)-10||n.bottom{a.target==n&&a.preventDefault()});let o=null;for(let a=i.from;ai.from||i.from==0))if(o=I,typeof l!="string"&&l.header)n.appendChild(l.header(l));else{let d=n.appendChild(document.createElement("completion-section"));d.textContent=I}}let g=n.appendChild(document.createElement("li"));g.id=A+"-"+a,g.setAttribute("role","option");let C=this.optionClass(r);C&&(g.className=C);for(let I of this.optionContent){let d=I(r,this.view.state,this.view,s);d&&g.appendChild(d)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew i_(A,t,e)}function ipA(t,e){let A=t.getBoundingClientRect(),i=e.getBoundingClientRect(),n=A.height/t.offsetHeight;i.topA.bottom&&(t.scrollTop+=(i.bottom-A.bottom)/n)}function rW(t){return(t.boost||0)*100+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}function npA(t,e){let A=[],i=null,n=null,o=g=>{A.push(g);let{section:C}=g.completion;if(C){i||(i=[]);let I=typeof C=="string"?C:C.name;i.some(d=>d.name==I)||i.push(typeof C=="string"?{name:I}:C)}},a=e.facet(xr);for(let g of t)if(g.hasResult()){let C=g.result.getMatch;if(g.result.filter===!1)for(let I of g.result.options)o(new v5(I,g.source,C?C(I):[],1e9-A.length));else{let I=e.sliceDoc(g.from,g.to),d,h=a.filterStrict?new t_(I):new e_(I);for(let E of g.result.options)if(d=h.match(E.label)){let f=E.displayLabel?C?C(E,d.matched):[]:d.matched,m=d.score+(E.boost||0);if(o(new v5(E,g.source,f,m)),typeof E.section=="object"&&E.section.rank==="dynamic"){let{name:v}=E.section;n||(n=Object.create(null)),n[v]=Math.max(m,n[v]||-1e9)}}}}if(i){let g=Object.create(null),C=0,I=(d,h)=>(d.rank==="dynamic"&&h.rank==="dynamic"?n[h.name]-n[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof h.rank=="number"?h.rank:1e9)||(d.nameI.score-C.score||l(C.completion,I.completion))){let C=g.completion;!s||s.label!=C.label||s.detail!=C.detail||s.type!=null&&C.type!=null&&s.type!=C.type||s.apply!=C.apply||s.boost!=C.boost?r.push(g):rW(g.completion)>rW(s)&&(r[r.length-1]=g),s=g.completion}return r}var n_=class t{constructor(e,A,i,n,o,a){this.options=e,this.attrs=A,this.tooltip=i,this.timestamp=n,this.selected=o,this.disabled=a}setSelected(e,A){return e==this.selected||e>=this.options.length?this:new t(this.options,sW(A,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,A,i,n,o,a){if(n&&!a&&e.some(l=>l.isPending))return n.setDisabled();let r=npA(e,A);if(!r.length)return n&&e.some(l=>l.isPending)?n.setDisabled():null;let s=A.facet(xr).selectOnOpen?0:-1;if(n&&n.selected!=s&&n.selected!=-1){let l=n.options[n.selected].completion;for(let g=0;gg.hasResult()?Math.min(l,g.from):l,1e8),create:gpA,above:o.aboveCursor},n?n.timestamp:Date.now(),s,!1)}map(e){return new t(this.options,this.attrs,Ye(gA({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new t(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},o_=class t{constructor(e,A,i){this.active=e,this.id=A,this.open=i}static start(){return new t(spA,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:A}=e,i=A.facet(xr),o=(i.override||A.languageDataAt("autocomplete",od(A)).map($3A)).map(s=>(this.active.find(g=>g.source==s)||new fC(s,this.active.some(g=>g.state!=0)?1:0)).update(e,i));o.length==this.active.length&&o.every((s,l)=>s==this.active[l])&&(o=this.active);let a=this.open,r=e.effects.some(s=>s.is(s_));a&&e.docChanged&&(a=a.map(e.changes)),e.selection||o.some(s=>s.hasResult()&&e.changes.touchesRange(s.from,s.to))||!opA(o,this.active)||r?a=n_.build(o,A,this.id,a,i,r):a&&a.disabled&&!o.some(s=>s.isPending)&&(a=null),!a&&o.every(s=>!s.isPending)&&o.some(s=>s.hasResult())&&(o=o.map(s=>s.hasResult()?new fC(s.source,0):s));for(let s of e.effects)s.is(r_)&&(a=a&&a.setSelected(s.value,this.id));return o==this.active&&a==this.open?this:new t(o,this.id,a)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?apA:rpA}};function opA(t,e){if(t==e)return!0;for(let A=0,i=0;;){for(;A-1&&(A["aria-activedescendant"]=t+"-"+e),A}var spA=[];function IW(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(CW);if(i&&e.activateOnCompletion(i))return 12}let A=t.isUserEvent("input.type");return A&&e.activateOnTyping?5:A?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}var fC=class t{constructor(e,A,i=!1){this.source=e,this.state=A,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,A){let i=IW(e,A),n=this;(i&8||i&16&&this.touches(e))&&(n=new t(n.source,0)),i&4&&n.state==0&&(n=new t(this.source,1)),n=n.updateFor(e,i);for(let o of e.effects)if(o.is(b5))n=new t(n.source,1,o.value);else if(o.is(Ef))n=new t(n.source,0);else if(o.is(s_))for(let a of o.value)a.source==n.source&&(n=a);return n}updateFor(e,A){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(od(e.state))}},M5=class t extends fC{constructor(e,A,i,n,o,a){super(e,3,A),this.limit=i,this.result=n,this.from=o,this.to=a}hasResult(){return!0}updateFor(e,A){var i;if(!(A&3))return this.map(e.changes);let n=this.result;n.map&&!e.changes.empty&&(n=n.map(n,e.changes));let o=e.changes.mapPos(this.from),a=e.changes.mapPos(this.to,1),r=od(e.state);if(r>a||!n||A&2&&(od(e.startState)==this.from||rA.map(e))}}),cl=Ma.define({create(){return o_.start()},update(t,e){return t.update(e)},provide:t=>[$E.from(t,e=>e.tooltip),gi.contentAttributes.from(t,e=>e.attrs)]});function l_(t,e){let A=e.completion.apply||e.completion.label,i=t.state.field(cl).active.find(n=>n.source==e.source);return i instanceof M5?(typeof A=="string"?t.dispatch(Ye(gA({},X3A(t.state,A,i.from,i.to)),{annotations:CW.of(e.completion)})):A(t,e.completion,i.from,i.to),!0):!1}var gpA=tpA(cl,l_);function D5(t,e="option"){return A=>{let i=A.state.field(cl,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+n*(t?1:-1):t?0:a-1;return r<0?r=e=="page"?0:a-1:r>=a&&(r=e=="page"?a-1:0),A.dispatch({effects:r_.of(r)}),!0}}var cpA=t=>{let e=t.state.field(cl,!1);return t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampt.state.field(cl,!1)?(t.dispatch({effects:b5.of(!0)}),!0):!1,CpA=t=>{let e=t.state.field(cl,!1);return!e||!e.active.some(A=>A.state!=0)?!1:(t.dispatch({effects:Ef.of(null)}),!0)},a_=class{constructor(e,A){this.active=e,this.context=A,this.time=Date.now(),this.updates=[],this.done=void 0}},IpA=50,dpA=1e3,BpA=_o.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(cl).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(cl),A=t.state.facet(xr);if(!t.selectionSet&&!t.docChanged&&t.startState.field(cl)==e)return;let i=t.transactions.some(o=>{let a=IW(o,A);return a&8||(o.selection||o.docChanged)&&!(a&3)});for(let o=0;oIpA&&Date.now()-a.time>dpA){for(let r of a.context.abortListeners)try{r()}catch(s){Sr(this.view.state,s)}a.context.abortListeners=null,this.running.splice(o--,1)}else a.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(o=>o.effects.some(a=>a.is(b5)))&&(this.pendingStart=!0);let n=this.pendingStart?50:A.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(o=>o.isPending&&!this.running.some(a=>a.active.source==o.source))?setTimeout(()=>this.startUpdate(),n):-1,this.composing!=0)for(let o of t.transactions)o.isUserEvent("input.type")?this.composing=2:this.composing==2&&o.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(cl);for(let A of e.active)A.isPending&&!this.running.some(i=>i.active.source==A.source)&&this.startQuery(A);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(xr).updateSyncTime))}startQuery(t){let{state:e}=this.view,A=od(e),i=new y5(e,A,t.explicit,this.view),n=new a_(t,i);this.running.push(n),Promise.resolve(t.source(i)).then(o=>{n.context.aborted||(n.done=o||null,this.scheduleAccept())},o=>{this.view.dispatch({effects:Ef.of(null)}),Sr(this.view.state,o)})}scheduleAccept(){this.running.every(t=>t.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(xr).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],A=this.view.state.facet(xr),i=this.view.state.field(cl);for(let n=0;nr.source==o.active.source);if(a&&a.isPending)if(o.done==null){let r=new fC(o.active.source,0);for(let s of o.updates)r=r.update(s,A);r.isPending||e.push(r)}else this.startQuery(a)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:s_.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(cl,!1);if(e&&e.tooltip&&this.view.state.facet(xr).closeOnBlur){let A=e.open&&zk(this.view,e.open.tooltip);(!A||!A.dom.contains(t.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Ef.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:b5.of(!1)}),20),this.composing=0}}}),EpA=typeof navigator=="object"&&/Win/.test(navigator.platform),hpA=ac.highest(gi.domEventHandlers({keydown(t,e){let A=e.state.field(cl,!1);if(!A||!A.open||A.open.disabled||A.open.selected<0||t.key.length>1||t.ctrlKey&&!(EpA&&t.altKey)||t.metaKey)return!1;let i=A.open.options[A.open.selected],n=A.active.find(a=>a.source==i.source),o=i.completion.commitCharacters||n.result.commitCharacters;return o&&o.indexOf(t.key)>-1&&l_(e,i),!1}})),QpA=gi.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});var hf={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},nd=Wi.define({map(t,e){let A=e.mapPos(t,-1,zr.TrackAfter);return A??void 0}}),g_=new class extends gg{};g_.startSide=1;g_.endSide=-1;var dW=Ma.define({create(){return io.empty},update(t,e){if(t=t.map(e.changes),e.selection){let A=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:i=>i>=A.from&&i<=A.to})}for(let A of e.effects)A.is(nd)&&(t=t.update({add:[g_.range(A.value,A.value+1)]}));return t}});function BW(){return[fpA,dW]}var A_="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function EW(t){for(let e=0;e{if((upA?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let n=t.state.selection.main;if(i.length>2||i.length==2&&_l(qr(i,0))==1||e!=n.from||A!=n.to)return!1;let o=mpA(t.state,i);return o?(t.dispatch(o),!0):!1}),ppA=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=hW(t,t.selection.main.head).brackets||hf.brackets,n=null,o=t.changeByRange(a=>{if(a.empty){let r=wpA(t.doc,a.head);for(let s of i)if(s==r&&S5(t.doc,a.head)==EW(qr(s,0)))return{changes:{from:a.head-s.length,to:a.head+s.length},range:Ie.cursor(a.head-s.length)}}return{range:n=a}});return n||e(t.update(o,{scrollIntoView:!0,userEvent:"delete.backward"})),!n},QW=[{key:"Backspace",run:ppA}];function mpA(t,e){let A=hW(t,t.selection.main.head),i=A.brackets||hf.brackets;for(let n of i){let o=EW(qr(n,0));if(e==n)return o==n?vpA(t,n,i.indexOf(n+n+n)>-1,A):DpA(t,n,o,A.before||hf.before);if(e==o&&uW(t,t.selection.main.from))return ypA(t,n,o)}return null}function uW(t,e){let A=!1;return t.field(dW).between(0,t.doc.length,i=>{i==e&&(A=!0)}),A}function S5(t,e){let A=t.sliceString(e,e+2);return A.slice(0,_l(qr(A,0)))}function wpA(t,e){let A=t.sliceString(e-2,e);return _l(qr(A,0))==A.length?A:A.slice(1)}function DpA(t,e,A,i){let n=null,o=t.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:A,from:a.to}],effects:nd.of(a.to+e.length),range:Ie.range(a.anchor+e.length,a.head+e.length)};let r=S5(t.doc,a.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+A,from:a.head},effects:nd.of(a.head+e.length),range:Ie.cursor(a.head+e.length)}:{range:n=a}});return n?null:t.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function ypA(t,e,A){let i=null,n=t.changeByRange(o=>o.empty&&S5(t.doc,o.head)==A?{changes:{from:o.head,to:o.head+A.length,insert:A},range:Ie.cursor(o.head+A.length)}:i={range:o});return i?null:t.update(n,{scrollIntoView:!0,userEvent:"input.type"})}function vpA(t,e,A,i){let n=i.stringPrefixes||hf.stringPrefixes,o=null,a=t.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:e,from:r.to}],effects:nd.of(r.to+e.length),range:Ie.range(r.anchor+e.length,r.head+e.length)};let s=r.head,l=S5(t.doc,s),g;if(l==e){if(lW(t,s))return{changes:{insert:e+e,from:s},effects:nd.of(s+e.length),range:Ie.cursor(s+e.length)};if(uW(t,s)){let I=A&&t.sliceDoc(s,s+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:s,to:s+I.length,insert:I},range:Ie.cursor(s+I.length)}}}else{if(A&&t.sliceDoc(s-2*e.length,s)==e+e&&(g=gW(t,s-2*e.length,n))>-1&&lW(t,g))return{changes:{insert:e+e+e+e,from:s},effects:nd.of(s+e.length),range:Ie.cursor(s+e.length)};if(t.charCategorizer(s)(l)!=Uo.Word&&gW(t,s,n)>-1&&!bpA(t,s,e,n))return{changes:{insert:e+e,from:s},effects:nd.of(s+e.length),range:Ie.cursor(s+e.length)}}return{range:o=r}});return o?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function lW(t,e){let A=kr(t).resolveInner(e+1);return A.parent&&A.from==e}function bpA(t,e,A,i){let n=kr(t).resolveInner(e,-1),o=i.reduce((a,r)=>Math.max(a,r.length),0);for(let a=0;a<5;a++){let r=t.sliceDoc(n.from,Math.min(n.to,n.from+A.length+o)),s=r.indexOf(A);if(!s||s>-1&&i.indexOf(r.slice(0,s))>-1){let g=n.firstChild;for(;g&&g.from==n.from&&g.to-g.from>A.length+s;){if(t.sliceDoc(g.to-A.length,g.to)==A)return!1;g=g.firstChild}return!0}let l=n.to==e&&n.parent;if(!l)break;n=l}return!1}function gW(t,e,A){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=Uo.Word)return e;for(let n of A){let o=e-n.length;if(t.sliceDoc(o,e)==n&&i(t.sliceDoc(o-1,o))!=Uo.Word)return o}return-1}function fW(t={}){return[hpA,cl,xr.of(t),BpA,MpA,QpA]}var c_=[{key:"Ctrl-Space",run:$x},{mac:"Alt-`",run:$x},{mac:"Alt-i",run:$x},{key:"Escape",run:CpA},{key:"ArrowDown",run:D5(!0)},{key:"ArrowUp",run:D5(!1)},{key:"PageDown",run:D5(!0,"page")},{key:"PageUp",run:D5(!1,"page")},{key:"Enter",run:cpA}],MpA=ac.highest(XE.computeN([xr],t=>t.facet(xr).defaultKeymap?[c_]:[]));function SpA(t,e=t.state){let A=new Set;for(let{from:i,to:n}of t.visibleRanges){let o=i;for(;o<=n;){let a=e.doc.lineAt(o);A.has(a)||A.add(a),o=a.to+1}}return A}function C_(t){let e=t.selection.main.head;return t.doc.lineAt(e)}function pW(t,e){let A=0;A:for(let i=0;i=o.level&&this.markerType!=="codeOnly"?this.set(e,0,n.level):n.empty&&n.level===0&&o.level!==0?this.set(e,0,0):o.level>n.level?this.set(e,0,n.level+1):this.set(e,0,o.level)}let A=pW(e.text,this.state.tabSize),i=Math.floor(A/this.unitWidth);return this.set(e,A,i)}closestNonEmpty(e,A){let i=e.number+A;for(;A===-1?i>=1:i<=this.state.doc.lines;){if(this.has(i)){let a=this.get(i);if(!a.empty)return a}let o=this.state.doc.line(i);if(o.text.trim().length){let a=pW(o.text,this.state.tabSize),r=Math.floor(a/this.unitWidth);return this.set(o,a,r)}i+=A}let n=this.state.doc.line(A===-1?1:this.state.doc.lines);return this.set(n,0,0)}findAndSetActiveLines(){let e=C_(this.state);if(!this.has(e))return;let A=this.get(e);if(this.has(A.line.number+1)){let o=this.get(A.line.number+1);o.level>A.level&&(A=o)}if(this.has(A.line.number-1)){let o=this.get(A.line.number-1);o.level>A.level&&(A=o)}if(A.level===0)return;A.active=A.level;let i,n;for(i=A.line.number;i>1;i--){if(!this.has(i-1))continue;let o=this.get(i-1);if(o.level0&&s.push(k5("--indent-marker-bg-color",i,e,r,l)),s.push(k5("--indent-marker-active-bg-color",n,e,a-1,1)),a!==o&&s.push(k5("--indent-marker-bg-color",i,e,a,o-a))}else s.push(k5("--indent-marker-bg-color",i,e,r,o-r));return s.join(",")}var d_=class{constructor(e){this.view=e,this.unitWidth=Ic(e.state),this.currentLineNumber=C_(e.state).number,this.generate(e.state)}update(e){let A=Ic(e.state),i=A!==this.unitWidth;i&&(this.unitWidth=A);let n=C_(e.state).number,o=n!==this.currentLineNumber;this.currentLineNumber=n;let a=e.state.facet(x5).highlightActiveBlock&&o;(e.docChanged||e.viewportChanged||i||a)&&this.generate(e.state)}generate(e){let A=new jr,i=SpA(this.view,e),{hideFirstIndent:n,markerType:o,thickness:a,activeThickness:r}=e.facet(x5),s=new I_(i,e,this.unitWidth,o);for(let l of i){let g=s.get(l.number);if(!g?.level)continue;let C=xpA(g,this.unitWidth,n,a,r);A.add(l.from,l.from,St.line({class:"cm-indent-markers",attributes:{style:`--indent-markers: ${C}`}}))}this.decorations=A.finish()}};function mW(t={}){return[x5.of(t),kpA(t.colors),_o.fromClass(d_,{decorations:e=>e.decorations})]}var _pA=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"],RpA=["mainAxis","crossAxis","limiter"];function TZ(t,e){if(t==null)return{};var A,i,n=(function(a,r){if(a==null)return{};var s={};for(var l in a)if({}.hasOwnProperty.call(a,l)){if(r.indexOf(l)!==-1)continue;s[l]=a[l]}return s})(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i{};function JpA(t){return t()}function Y_(t){for(var e=0;e{t=A,e=i}),resolve:t,reject:e}}var OpA=1<<24,jh=16,vD=32,PZ=64,DR=128,mc=512,Zr=1024,wc=2048,KC=4096,b0=8192,qh=16384,yR=32768,ud=65536,YpA=1<<17,jZ=1<<18,qZ=1<<19,wC=1<<25,oD=32768,H_=1<<21,pI=1<<23,M0=Symbol("$state"),VZ=Symbol("legacy props"),HpA=Symbol(""),ph=new class extends Error{constructor(){super(...arguments),w0(this,"name","StaleReactionError"),w0(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function Pf(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function WZ(t){return t===this.v}function ZZ(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function XZ(t){return!ZZ(t,this.v)}var Io=null;function Nh(t){Io=t}function kI(t){return $Z().get(t)}function Nt(t){Io={p:Io,i:!1,c:null,e:null,s:t,x:null,l:Ph&&!(arguments.length>1&&arguments[1]!==void 0&&arguments[1])?{s:null,u:null,$:[]}:null}}function Ft(t){var e=Io,A=e.e;if(A!==null)for(var i of(e.e=null,A))EX(i);return t!==void 0&&(e.x=t),e.i=!0,Io=e.p,t??{}}function Vh(){return!Ph||Io!==null&&Io.l===null}function $Z(t){var e,A;return Io===null&&Pf(),(A=(e=Io).c)!==null&&A!==void 0?A:e.c=new Map((function(i){for(var n=i.p;n!==null;){var o=n.c;if(o!==null)return o;n=n.p}return null})(Io)||void 0)}var Id=[];function AX(){var t=Id;Id=[],Y_(t)}function fd(t){if(Id.length===0&&!Sf){var e=Id;queueMicrotask(()=>{e===Id&&AX()})}Id.push(t)}function zpA(){for(;Id.length>0;)AX()}function eX(t){var e=qn;if(e===null)return jn.f|=pI,t;if((e.f&yR)===0){if((e.f&DR)===0)throw t;e.b.error(t)}else Fh(t,e)}function Fh(t,e){for(;e!==null;){if((e.f&DR)!==0)try{return void e.b.error(t)}catch(A){t=A}e=e.parent}throw t}var Z5=new Set,Jo=null,Mf=null,pg=null,fg=[],bD=null,z_=!1,Sf=!1,aD=new WeakMap,_5=new WeakMap,ld=new WeakMap,gd=new WeakMap,R5=new WeakMap,X5=new WeakMap,$5=new WeakMap,Kl=new WeakSet,pd=class t{constructor(){JZ(this,Kl),w0(this,"committed",!1),w0(this,"current",new Map),w0(this,"previous",new Map),wo(this,aD,new Set),wo(this,_5,new Set),wo(this,ld,0),wo(this,gd,0),wo(this,R5,null),wo(this,X5,[]),wo(this,$5,[]),w0(this,"skipped_effects",new Set),w0(this,"is_fork",!1)}is_deferred(){return this.is_fork||ve(gd,this)>0}process(e){fg=[],Mf=null,this.apply();var A,i={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var n of e)Wa(Kl,this,tX).call(this,n,i);this.is_fork||Wa(Kl,this,PpA).call(this),this.is_deferred()?(Wa(Kl,this,bh).call(this,i.effects),Wa(Kl,this,bh).call(this,i.render_effects),Wa(Kl,this,bh).call(this,i.block_effects)):(Mf=this,Jo=null,MW(i.render_effects),MW(i.effects),Mf=null,(A=ve(R5,this))===null||A===void 0||A.resolve()),pg=null}capture(e,A){var i;this.previous.has(e)||this.previous.set(e,A),(e.f&pI)===0&&(this.current.set(e,e.v),(i=pg)===null||i===void 0||i.set(e,e.v))}activate(){Jo=this,this.apply()}deactivate(){Jo===this&&(Jo=null,pg=null)}flush(){if(this.activate(),fg.length>0){if(nX(),Jo!==null&&Jo!==this)return}else ve(ld,this)===0&&this.process([]);this.deactivate()}discard(){for(var e of ve(_5,this))e(this);ve(_5,this).clear()}increment(e){Bn(ld,this,ve(ld,this)+1),e&&Bn(gd,this,ve(gd,this)+1)}decrement(e){Bn(ld,this,ve(ld,this)-1),e&&Bn(gd,this,ve(gd,this)-1),this.revive()}revive(){for(var e of ve(X5,this))$r(e,wc),md(e);for(var A of ve($5,this))$r(A,KC),md(A);Bn(X5,this,[]),Bn($5,this,[]),this.flush()}oncommit(e){ve(aD,this).add(e)}ondiscard(e){ve(_5,this).add(e)}settled(){var e;return((e=ve(R5,this))!==null&&e!==void 0?e:Bn(R5,this,zZ())).promise}static ensure(){if(Jo===null){var e=Jo=new t;Z5.add(Jo),Sf||t.enqueue(()=>{Jo===e&&e.flush()})}return Jo}static enqueue(e){fd(e)}apply(){}};function tX(t,e){t.f^=Zr;for(var A=t.first;A!==null;){var i,n=A.f,o=!!(96&n),a=o&&(n&Zr)!==0||(n&b0)!==0||this.skipped_effects.has(A);if((A.f&DR)!==0&&(i=A.b)!==null&&i!==void 0&&i.is_pending()&&(e={parent:e,effect:A,effects:[],render_effects:[],block_effects:[]}),!a&&A.fn!==null){o?A.f^=Zr:4&n?e.effects.push(A):Xh(A)&&((A.f&jh)!==0&&e.block_effects.push(A),Kh(A));var r=A.first;if(r!==null){A=r;continue}}var s=A.parent;for(A=A.next;A===null&&s!==null;)s===e.effect&&(Wa(Kl,this,bh).call(this,e.effects),Wa(Kl,this,bh).call(this,e.render_effects),Wa(Kl,this,bh).call(this,e.block_effects),e=e.parent),A=s.next,s=s.parent}}function bh(t){for(var e of t)((e.f&wc)!==0?ve(X5,this):ve($5,this)).push(e),Wa(Kl,this,iX).call(this,e.deps),$r(e,Zr)}function iX(t){if(t!==null)for(var e of t)2&e.f&&(e.f&oD)!==0&&(e.f^=oD,Wa(Kl,this,iX).call(this,e.deps))}function PpA(){if(ve(gd,this)===0){for(var t of ve(aD,this))t();ve(aD,this).clear()}ve(ld,this)===0&&Wa(Kl,this,jpA).call(this)}function jpA(){if(Z5.size>1){this.previous.clear();var t=pg,e=!0,A={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var i of Z5)if(i!==this){var n=[];for(var[o,a]of this.current){if(i.current.has(o)){if(!e||a===i.current.get(o))continue;i.current.set(o,a)}n.push(o)}if(n.length!==0){var r=[...i.current.keys()].filter(d=>!this.current.has(d));if(r.length>0){var s=fg;fg=[];var l=new Set,g=new Map;for(var C of n)oX(C,r,l,g);if(fg.length>0){for(var I of(Jo=i,i.apply(),fg))Wa(Kl,i,tX).call(i,I,A);i.deactivate()}fg=s}}}else e=!1;Jo=null,pg=t}this.committed=!0,Z5.delete(this)}function Ro(t){var e=Sf;Sf=!0;try{for(;;){var A;if(zpA(),fg.length===0&&((A=Jo)===null||A===void 0||A.flush(),fg.length===0))return void(bD=null);nX()}}finally{Sf=e}}function nX(){var t=Bd;z_=!0;try{var e=0;for(rD(!0);fg.length>0;){var A=pd.ensure();e++>1e3&&qpA(),A.process(fg),mI.clear()}}finally{z_=!1,rD(t),bD=null}}function qpA(){try{(function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")})()}catch(t){Fh(t,bD)}}var yC=null;function MW(t){var e=t.length;if(e!==0){for(var A=0;A0)){for(var o of(mI.clear(),yC))if(!(24576&o.f)){for(var a=[o],r=o.parent;r!==null;)yC.has(r)&&(yC.delete(r),a.push(r)),r=r.parent;for(var s=a.length-1;s>=0;s--){var l=a[s];24576&l.f||Kh(l)}}yC.clear()}}yC=null}}function oX(t,e,A,i){if(!A.has(t)&&(A.add(t),t.reactions!==null))for(var n of t.reactions){var o=n.f;2&o?oX(n,e,A,i):4194320&o&&(o&wc)===0&&aX(n,e,i)&&($r(n,wc),md(n))}}function aX(t,e,A){var i=A.get(t);if(i!==void 0)return i;if(t.deps!==null)for(var n of t.deps){if(e.includes(n))return!0;if(2&n.f&&aX(n,e,A))return A.set(n,!0),!0}return A.set(t,!1),!1}function md(t){for(var e=bD=t;e.parent!==null;){var A=(e=e.parent).f;if(z_&&e===qn&&(A&jh)!==0&&(A&jZ)===0)return;if(96&A){if((A&Zr)===0)return;e.f^=Zr}}fg.push(e)}var CI=new WeakMap,hI=new WeakMap,VpA=new WeakMap,cd=new WeakMap,h_=new WeakMap,EI=new WeakMap,II=new WeakMap,MC=new WeakMap,rI=new WeakMap,dd=new WeakMap,Mh=new WeakMap,gh=new WeakMap,Sh=new WeakMap,uf=new WeakMap,ch=new WeakMap,SW=new WeakMap,lI=new WeakSet,P_=class{constructor(e,A,i){var n,o,a,r;JZ(this,lI),w0(this,"parent",void 0),wo(this,CI,!1),wo(this,hI,void 0),wo(this,VpA,null),wo(this,cd,void 0),wo(this,h_,void 0),wo(this,EI,void 0),wo(this,II,null),wo(this,MC,null),wo(this,rI,null),wo(this,dd,null),wo(this,Mh,null),wo(this,gh,0),wo(this,Sh,0),wo(this,uf,!1),wo(this,ch,null),wo(this,SW,(n=()=>(Bn(ch,this,UC(ve(gh,this))),()=>{Bn(ch,this,null)}),a=0,r=UC(0),()=>{xf()&&(c(r),Wh(()=>(a===0&&(o=wA(()=>n(()=>kf(r)))),a+=1,()=>{fd(()=>{var s;(a-=1)==0&&((s=o)===null||s===void 0||s(),o=void 0,kf(r))})})))})),Bn(hI,this,e),Bn(cd,this,A),Bn(h_,this,i),this.parent=qn.b,Bn(CI,this,!!ve(cd,this).pending),Bn(EI,this,Zh(()=>{qn.b=this;var s=Wa(lI,this,WpA).call(this);try{Bn(II,this,S0(()=>i(s)))}catch(l){this.error(l)}return ve(Sh,this)>0?Wa(lI,this,xW).call(this):Bn(CI,this,!1),()=>{var l;(l=ve(Mh,this))===null||l===void 0||l.remove()}},589952))}is_pending(){return ve(CI,this)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!ve(cd,this).pending}update_pending_count(e){Wa(lI,this,rX).call(this,e),Bn(gh,this,ve(gh,this)+e),ve(ch,this)&&Lh(ve(ch,this),ve(gh,this))}get_effect_pending(){return ve(SW,this).call(this),c(ve(ch,this))}error(e){var A=ve(cd,this).onerror,i=ve(cd,this).failed;if(ve(uf,this)||!A&&!i)throw e;ve(II,this)&&(Xr(ve(II,this)),Bn(II,this,null)),ve(MC,this)&&(Xr(ve(MC,this)),Bn(MC,this,null)),ve(rI,this)&&(Xr(ve(rI,this)),Bn(rI,this,null));var n=!1,o=!1,a=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,o&&(function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")})(),pd.ensure(),Bn(gh,this,0),ve(rI,this)!==null&&Gh(ve(rI,this),()=>{Bn(rI,this,null)}),Bn(CI,this,this.has_pending_snippet()),Bn(II,this,Wa(lI,this,kW).call(this,()=>(Bn(uf,this,!1),S0(()=>ve(h_,this).call(this,ve(hI,this)))))),ve(Sh,this)>0?Wa(lI,this,xW).call(this):Bn(CI,this,!1))},r=jn;try{El(null),o=!0,A?.(e,a),o=!1}catch(s){Fh(s,ve(EI,this)&&ve(EI,this).parent)}finally{El(r)}i&&fd(()=>{Bn(rI,this,Wa(lI,this,kW).call(this,()=>{pd.ensure(),Bn(uf,this,!0);try{return S0(()=>{i(ve(hI,this),()=>e,()=>a)})}catch(s){return Fh(s,ve(EI,this).parent),null}finally{Bn(uf,this,!1)}}))})}};function WpA(){var t=ve(hI,this);return ve(CI,this)&&(Bn(Mh,this,wI()),ve(hI,this).before(ve(Mh,this)),t=ve(Mh,this)),t}function kW(t){var e=qn,A=jn,i=Io;wg(ve(EI,this)),El(ve(EI,this)),Nh(ve(EI,this).ctx);try{return t()}catch(n){return eX(n),null}finally{wg(e),El(A),Nh(i)}}function xW(){var t=ve(cd,this).pending;ve(II,this)!==null&&(Bn(dd,this,document.createDocumentFragment()),ve(dd,this).append(ve(Mh,this)),DX(ve(II,this),ve(dd,this))),ve(MC,this)===null&&Bn(MC,this,S0(()=>t(ve(hI,this))))}function rX(t){var e;this.has_pending_snippet()?(Bn(Sh,this,ve(Sh,this)+t),ve(Sh,this)===0&&(Bn(CI,this,!1),ve(MC,this)&&Gh(ve(MC,this),()=>{Bn(MC,this,null)}),ve(dd,this)&&(ve(hI,this).before(ve(dd,this)),Bn(dd,this,null)))):this.parent&&Wa(lI,e=this.parent,rX).call(e,t)}function sX(t,e,A,i){var n=Vh()?jf:it;if(A.length!==0||t.length!==0){var o=Jo,a=qn,r=(function(){var l=qn,g=jn,C=Io,I=Jo;return function(){var d=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];wg(l),El(g),Nh(C),d&&I?.activate()}})();t.length>0?Promise.all(t).then(()=>{r();try{return s()}finally{o?.deactivate(),N5()}}):s()}else i(e.map(n));function s(){Promise.all(A.map(l=>(function(g){var C=qn;C===null&&(function(){throw new Error("https://svelte.dev/e/async_derived_orphan")})();var I=C.b,d=void 0,h=UC(Wr),E=!jn,f=new Map;return(function(m){yc(4718592,m,!0)})(()=>{var m=zZ();d=m.promise;try{Promise.resolve(g()).then(m.resolve,m.reject).then(()=>{v===Jo&&v.committed&&v.deactivate(),N5()})}catch(x){m.reject(x),N5()}var v=Jo;if(E){var k,S=!I.is_pending();I.update_pending_count(1),v.increment(S),(k=f.get(v))===null||k===void 0||k.reject(ph),f.delete(v),f.set(v,m)}var b=function(x){var F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(v.activate(),F)F!==ph&&(h.f|=pI,Lh(h,F));else for(var[z,P]of((h.f&pI)!==0&&(h.f^=pI),Lh(h,x),f)){if(f.delete(z),z===v)break;P.reject(ph)}E&&(I.update_pending_count(-1),v.decrement(S))};m.promise.then(b,x=>b(null,x||"unknown"))}),SD(()=>{for(var m of f.values())m.reject(ph)}),new Promise(m=>{function v(k){function S(){k===d?m(h):v(d)}k.then(S,S)}v(d)})})(l))).then(l=>{r();try{i([...e.map(n),...l])}catch(g){(a.f&qh)===0&&Fh(g,a)}o?.deactivate(),N5()}).catch(l=>{Fh(l,a)})}}function N5(){wg(null),El(null),Nh(null)}function jf(t){var e=jn!==null&&2&jn.f?jn:null;return qn!==null&&(qn.f|=qZ),{ctx:Io,deps:null,effects:null,equals:WZ,f:2050,fn:t,reactions:null,rv:0,v:Wr,wv:0,parent:e??qn,ac:null}}function Il(t){var e=jf(t);return yX(e),e}function it(t){var e=jf(t);return e.equals=XZ,e}function lX(t){var e=t.effects;if(e!==null){t.effects=null;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],n=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],o=UC(t);return i||(o.equals=XZ),Ph&&n&&Io!==null&&Io.l!==null&&((A=(e=Io.l).s)!==null&&A!==void 0?A:e.s=[]).push(o),o}function Tl(t,e){return N(t,wA(()=>c(t))),e}function N(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return jn===null||y0&&(jn.f&YpA)===0||!Vh()||!(4325394&jn.f)||(A=FC)!==null&&A!==void 0&&A.includes(t)||(function(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")})(),Lh(t,i?mh(e):e)}function Lh(t,e){if(!t.equals(e)){var A=t.v;Sd?mI.set(t,e):mI.set(t,A),t.v=e;var i=pd.ensure();i.capture(t,A),2&t.f&&((t.f&wc)!==0&&vR(t),$r(t,(t.f&mc)!==0?Zr:KC)),t.wv=bX(),dX(t,wc),!Vh()||qn===null||(qn.f&Zr)===0||96&qn.f||(Eg===null?(function(n){Eg=n})([t]):Eg.push(t)),!i.is_fork&&Q_.size>0&&!_W&&(function(){_W=!1;var n=Bd;rD(!0);var o=Array.from(Q_);try{for(var a of o)(a.f&Zr)!==0&&$r(a,KC),Xh(a)&&Kh(a)}finally{rD(n)}Q_.clear()})()}return e}function RW(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=c(t),i=e===1?A++:A--;return N(t,A),i}function kf(t){N(t,t.v+1)}function dX(t,e){var A=t.reactions;if(A!==null)for(var i=Vh(),n=A.length,o=0;o{if(Ed===o)return r();var s=jn,l=Ed;El(null),GW(o);var g=r();return El(s),GW(l),g};return i&&A.set("length",DC(t.length)),new Proxy(t,{defineProperty(r,s,l){"value"in l&&l.configurable!==!1&&l.enumerable!==!1&&l.writable!==!1||(function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")})();var g=A.get(s);return g===void 0?g=a(()=>{var C=DC(l.value);return A.set(s,C),C}):N(g,l.value,!0),!0},deleteProperty(r,s){var l=A.get(s);if(l===void 0){if(s in r){var g=a(()=>DC(Wr));A.set(s,g),kf(n)}}else N(l,Wr),kf(n);return!0},get(r,s,l){var g;if(s===M0)return t;var C=A.get(s),I=s in r;if(C===void 0&&(!I||(g=RC(r,s))!==null&&g!==void 0&&g.writable)&&(C=a(()=>DC(mh(I?r[s]:Wr))),A.set(s,C)),C!==void 0){var d=c(C);return d===Wr?void 0:d}return Reflect.get(r,s,l)},getOwnPropertyDescriptor(r,s){var l=Reflect.getOwnPropertyDescriptor(r,s);if(l&&"value"in l){var g=A.get(s);g&&(l.value=c(g))}else if(l===void 0){var C=A.get(s),I=C?.v;if(C!==void 0&&I!==Wr)return{enumerable:!0,configurable:!0,value:I,writable:!0}}return l},has(r,s){var l;if(s===M0)return!0;var g=A.get(s),C=g!==void 0&&g.v!==Wr||Reflect.has(r,s);return(g!==void 0||qn!==null&&(!C||(l=RC(r,s))!==null&&l!==void 0&&l.writable))&&(g===void 0&&(g=a(()=>DC(C?mh(r[s]):Wr)),A.set(s,g)),c(g)===Wr)?!1:C},set(r,s,l,g){var C,I=A.get(s),d=s in r;if(i&&s==="length")for(var h=l;hDC(Wr)),A.set(h+"",E))}I===void 0?(!d||(C=RC(r,s))!==null&&C!==void 0&&C.writable)&&(N(I=a(()=>DC(void 0)),mh(l)),A.set(s,I)):(d=I.v!==Wr,N(I,a(()=>mh(l))));var f=Reflect.getOwnPropertyDescriptor(r,s);if(f!=null&&f.set&&f.set.call(g,l),!d){if(i&&typeof s=="string"){var m=A.get("length"),v=Number(s);Number.isInteger(v)&&v>=m.v&&N(m,v+1)}kf(n)}return!0},ownKeys(r){c(n);var s=Reflect.ownKeys(r).filter(C=>{var I=A.get(C);return I===void 0||I.v!==Wr});for(var[l,g]of A)g.v===Wr||l in r||s.push(l);return s},setPrototypeOf(){(function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")})()}})}function NW(t){try{if(t!==null&&typeof t=="object"&&M0 in t)return t[M0]}catch(e){}return t}function ZpA(t,e){return Object.is(NW(t),NW(e))}function wI(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return document.createTextNode(t)}function Jl(t){return CX.call(t)}function qf(t){return IX.call(t)}function dA(t,e){return Jl(t)}function et(t){var e=Jl(t);return e instanceof Comment&&e.data===""?qf(e):e}function _A(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=t;e--;)A=qf(A);return A}var FW=!1;function MD(t){var e=jn,A=qn;El(null),wg(null);try{return t()}finally{El(e),wg(A)}}function XpA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:A;t.addEventListener(e,()=>MD(A));var n=t.__on_r;t.__on_r=n?()=>{n(),i(!0)}:()=>i(!0),FW||(FW=!0,document.addEventListener("reset",o=>{Promise.resolve().then(()=>{if(!o.defaultPrevented)for(var a of o.target.elements){var r;(r=a.__on_r)===null||r===void 0||r.call(a)}})},{capture:!0}))}function BX(t){qn===null&&(jn===null&&(function(){throw new Error("https://svelte.dev/e/effect_orphan")})(),(function(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")})()),Sd&&(function(){throw new Error("https://svelte.dev/e/effect_in_teardown")})()}function yc(t,e,A){var i=qn;i!==null&&(i.f&b0)!==0&&(t|=b0);var n={ctx:Io,deps:null,nodes:null,f:t|wc|mc,first:null,fn:e,last:null,next:null,parent:i,b:i&&i.b,prev:null,teardown:null,wv:0,ac:null};if(A)try{Kh(n),n.f|=yR}catch(s){throw Xr(n),s}else e!==null&&md(n);var o=n;if(A&&o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&(o.f&qZ)===0&&(o=o.first,(t&jh)!==0&&(t&ud)!==0&&o!==null&&(o.f|=ud)),o!==null&&(o.parent=i,i!==null&&(function(s,l){var g=l.last;g===null?l.last=l.first=s:(g.next=s,s.prev=g,l.last=s)})(o,i),jn!==null&&2&jn.f&&(t&PZ)===0)){var a,r=jn;((a=r.effects)!==null&&a!==void 0?a:r.effects=[]).push(o)}return n}function xf(){return jn!==null&&!y0}function SD(t){var e=yc(8,null,!1);return $r(e,Zr),e.teardown=t,e}function j_(t){BX();var e=qn.f;if(!(!jn&&(e&vD)!==0&&(e&yR)===0))return EX(t);var A,i=Io;((A=i.e)!==null&&A!==void 0?A:i.e=[]).push(t)}function EX(t){return yc(1048580,t,!1)}function _r(t){return yc(4,t,!1)}function KA(t,e){var A={effect:null,ran:!1,deps:t};Io.l.$.push(A),A.effect=Wh(()=>{t(),A.ran||(A.ran=!0,wA(e))})}function Rn(){var t=Io;Wh(()=>{for(var e of t.l.$){e.deps();var A=e.effect;(A.f&Zr)!==0&&$r(A,KC),Xh(A)&&Kh(A),e.ran=!1}})}function Wh(t){return yc(8|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function Se(t){sX(arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],e=>{yc(8,()=>t(...e.map(c)),!0)})}function Zh(t){return yc(jh|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function hX(t){return yc(OpA|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function S0(t){return yc(524320,t,!0)}function QX(t){var e=t.teardown;if(e!==null){var A=Sd,i=jn;LW(!0),El(null);try{e.call(null)}finally{LW(A),El(i)}}}function uX(t){var e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],A=t.first;t.first=t.last=null;for(var i,n=function(){var o=A.ac;o!==null&&MD(()=>{o.abort(ph)}),i=A.next,(A.f&PZ)!==0?A.parent=null:Xr(A,e),A=i};A!==null;)n()}function Xr(t){var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=!1;!e&&(t.f&jZ)===0||t.nodes===null||t.nodes.end===null||(fX(t.nodes.start,t.nodes.end),A=!0),uX(t,e&&!A),sD(t,0),$r(t,qh);var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)n.stop();QX(t);var o=t.parent;o!==null&&o.first!==null&&pX(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=null}function fX(t,e){for(;t!==null;){var A=t===e?null:qf(t);t.remove(),t=A}}function pX(t){var e=t.parent,A=t.prev,i=t.next;A!==null&&(A.next=i),i!==null&&(i.prev=A),e!==null&&(e.first===t&&(e.first=i),e.last===t&&(e.last=A))}function Gh(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];mX(t,i,!0);var n=()=>{A&&Xr(t),e&&e()},o=i.length;if(o>0){var a=()=>--o||n();for(var r of i)r.out(a)}else n()}function mX(t,e,A){if((t.f&b0)===0){t.f^=b0;var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)(n.is_global||A)&&e.push(n);for(var o=t.first;o!==null;){var a=o.next;mX(o,e,((o.f&ud)!==0||(o.f&vD)!==0&&(t.f&jh)!==0)&&A),o=a}}}function q_(t){wX(t,!0)}function wX(t,e){if((t.f&b0)!==0){t.f^=b0,(t.f&Zr)===0&&($r(t,wc),md(t));for(var A=t.first;A!==null;){var i=A.next;wX(A,((A.f&ud)!==0||(A.f&vD)!==0)&&e),A=i}var n=t.nodes&&t.nodes.t;if(n!==null)for(var o of n)(o.is_global||e)&&o.in()}}function DX(t,e){if(t.nodes)for(var A=t.nodes.start,i=t.nodes.end;A!==null;){var n=A===i?null:qf(A);e.append(A),A=n}}var $pA=null;var Bd=!1;function rD(t){Bd=t}var Sd=!1;function LW(t){Sd=t}var jn=null,y0=!1;function El(t){jn=t}var qn=null;function wg(t){qn=t}var FC=null;function yX(t){jn!==null&&(FC===null?FC=[t]:FC.push(t))}var Ns=null,Gl=0,Eg=null,vX=1,_f=0,Ed=_f;function GW(t){Ed=t}function bX(){return++vX}function Xh(t){var e=t.f;if((e&wc)!==0)return!0;if(2&e&&(t.f&=-32769),(e&KC)!==0){var A=t.deps;if(A!==null)for(var i=A.length,n=0;nt.wv)return!0}(e&mc)!==0&&pg===null&&$r(t,Zr)}return!1}function MX(t,e){var A,i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],n=t.reactions;if(n!==null&&((A=FC)===null||A===void 0||!A.includes(t)))for(var o=0;o{t.ac.abort(ph)}),t.ac=null);try{t.f|=H_;var g=(0,t.fn)(),C=t.deps;if(Ns!==null){var I;if(sD(t,Gl),C!==null&&Gl>0)for(C.length=Gl+Ns.length,I=0;I1&&arguments[1]!==void 0?arguments[1]:new Set;if(!(typeof t!="object"||t===null||t instanceof EventTarget||e.has(t))){for(var A in e.add(t),t instanceof Date&&t.getTime(),t)try{V_(t[A],e)}catch(r){}var i=wR(t);if(i!==Object.prototype&&i!==Array.prototype&&i!==Map.prototype&&i!==Set.prototype&&i!==Date.prototype){var n=HZ(i);for(var o in n){var a=n[o].get;if(a)try{a.call(t)}catch(r){}}}}}var NX=new Set,W_=new Set;function FX(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};function n(o){if(i.capture||Df.call(e,o),!o.cancelBubble)return MD(()=>A?.call(this,o))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?fd(()=>{e.addEventListener(t,n,i)}):e.addEventListener(t,n,i),n}function fe(t,e,A,i,n){var o={capture:i,passive:n},a=FX(t,e,A,o);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&SD(()=>{e.removeEventListener(t,a,o)})}function Vf(t){for(var e=0;ea||i});var C=jn,I=qn;El(null),wg(null);try{for(var d,h=[];a!==null;){var E=a.assignedSlot||a.parentNode||a.host||null;try{var f=a["__"+n];f==null||a.disabled&&t.target!==a||f.call(a,t)}catch(k){d?h.push(k):d=k}if(t.cancelBubble||E===A||E===null)break;a=E}if(d){var m=function(k){queueMicrotask(()=>{throw k})};for(var v of h)m(v);throw d}}finally{t.__root=A,delete t.currentTarget,El(C),wg(I)}}}function bR(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("",""),e.content}function wd(t,e){var A=qn;A.nodes===null&&(A.nodes={start:t,end:e,a:null,t:null})}function JA(t,e){var A,i=!!(1&e),n=!!(2&e),o=!t.startsWith("");return()=>{A===void 0&&(A=bR(o?t:""+t),i||(A=Jl(A)));var a=n||cX?document.importNode(A,!0):A.cloneNode(!0);return i?wd(Jl(a),a.lastChild):wd(a,a),a}}function xI(t,e){return(function(A,i){var n,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"svg",a=!A.startsWith(""),r=!!(1&i),s="<".concat(o,">").concat(a?A:""+A,"");return()=>{if(!n){var l=Jl(bR(s));if(r)for(n=document.createDocumentFragment();Jl(l);)n.appendChild(Jl(l));else n=Jl(l)}var g=n.cloneNode(!0);return r?wd(Jl(g),g.lastChild):wd(g,g),g}})(t,e,"svg")}function dr(){var t=wI((arguments.length>0&&arguments[0]!==void 0?arguments[0]:"")+"");return wd(t,t),t}function Fi(){var t=document.createDocumentFragment(),e=document.createComment(""),A=wI();return t.append(e,A),wd(e,A),t}function CA(t,e){t!==null&&t.before(e)}var tmA=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"],imA={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"},nmA=["touchstart","touchmove"];function omA(t){return nmA.includes(t)}function Lt(t,e){var A,i=e==null?"":typeof e=="object"?e+"":e;i!==((A=t.__t)!==null&&A!==void 0?A:t.__t=t.nodeValue)&&(t.__t=i,t.nodeValue=i+"")}function amA(t,e){return(function(A,i){var{target:n,anchor:o,props:a={},events:r,context:s,intro:l=!0}=i;(function(){if(NC===void 0){NC=window,cX=/Firefox/.test(navigator.userAgent);var h=Element.prototype,E=Node.prototype,f=Text.prototype;CX=RC(E,"firstChild").get,IX=RC(E,"nextSibling").get,bW(h)&&(h.__click=void 0,h.__className=void 0,h.__attributes=null,h.__style=void 0,h.__e=void 0),bW(f)&&(f.__t=void 0)}})();var g=new Set,C=h=>{for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};return new Promise(m=>{f.outro?Gh(E,()=>{Xr(E),m(void 0)}):(Xr(E),m(void 0))})}})(()=>{var h=o??n.appendChild(wI());return(function(E,f,m){new P_(E,f,m)})(h,{pending:()=>{}},E=>{s&&(Nt({}),Io.c=s),r&&(a.$$events=r),I=A(E,a)||{},s&&Ft()}),()=>{for(var E of g){n.removeEventListener(E,Df);var f=Ch.get(E);--f===0?(document.removeEventListener(E,Df),Ch.delete(E)):Ch.set(E,f)}var m;W_.delete(C),h!==o&&((m=h.parentNode)===null||m===void 0||m.removeChild(h))}});return Z_.set(I,d),I})(t,e)}var Ch=new Map,Z_=new WeakMap,Ih,pC=new WeakMap,ad=new WeakMap,mC=new WeakMap,ff=new WeakMap,u_=new WeakMap,KW=new WeakMap,rmA=new WeakMap,Uh=class{constructor(e){var A=this,i=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];w0(this,"anchor",void 0),wo(this,pC,new Map),wo(this,ad,new Map),wo(this,mC,new Map),wo(this,ff,new Set),wo(this,u_,!0),wo(this,KW,()=>{var n=Jo;if(ve(pC,this).has(n)){var o=ve(pC,this).get(n),a=ve(ad,this).get(o);if(a)q_(a),ve(ff,this).delete(o);else{var r=ve(mC,this).get(o);r&&(ve(ad,this).set(o,r.effect),ve(mC,this).delete(o),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),a=r.effect)}for(var[s,l]of ve(pC,this)){if(ve(pC,this).delete(s),s===n)break;var g=ve(mC,this).get(l);g&&(Xr(g.effect),ve(mC,this).delete(l))}var C=function(h,E){if(h===o||ve(ff,A).has(h))return 1;var f=()=>{if(Array.from(ve(pC,A).values()).includes(h)){var m=document.createDocumentFragment();DX(E,m),m.append(wI()),ve(mC,A).set(h,{effect:E,fragment:m})}else Xr(E);ve(ff,A).delete(h),ve(ad,A).delete(h)};ve(u_,A)||!a?(ve(ff,A).add(h),Gh(E,f,!1)):f()};for(var[I,d]of ve(ad,this))C(I,d)}}),wo(this,rmA,n=>{ve(pC,this).delete(n);var o=Array.from(ve(pC,this).values());for(var[a,r]of ve(mC,this))o.includes(a)||(Xr(r.effect),ve(mC,this).delete(a))}),this.anchor=e,Bn(u_,this,i)}ensure(e,A){var i=Jo;!A||ve(ad,this).has(e)||ve(mC,this).has(e)||ve(ad,this).set(e,S0(()=>A(this.anchor))),ve(pC,this).set(i,e),ve(KW,this).call(this)}};function As(t){Io===null&&Pf(),Ph&&Io.l!==null?LX(Io).m.push(t):j_(()=>{var e=wA(t);if(typeof e=="function")return e})}function Dg(t){Io===null&&Pf(),As(()=>()=>wA(t))}function smA(){var t=Io;return t===null&&Pf(),(e,A,i)=>{var n,o=(n=t.s.$$events)===null||n===void 0?void 0:n[e];if(o){var a=zf(o)?o.slice():[o],r=(function(l,g){var{bubbles:C=!1,cancelable:I=!1}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new CustomEvent(l,{detail:g,bubbles:C,cancelable:I})})(e,A,i);for(var s of a)s.call(t.x,r);return!r.defaultPrevented}return!0}}function lmA(t){Io===null&&Pf(),Io.l===null&&(function(){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")})(),LX(Io).b.push(t)}function LX(t){var e,A=t.l;return(e=A.u)!==null&&e!==void 0?e:A.u={a:[],b:[],m:[]}}function jA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=new Uh(t);function n(o,a){i.ensure(o,a)}Zh(()=>{var o=!1;e(function(a){o=!0,n(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a)}),o||n(!1,null)},A?ud:0)}function GX(t,e,A){var i=new Uh(t),n=!Vh();Zh(()=>{var o=e();n&&o!==null&&typeof o=="object"&&(o={}),i.ensure(o,A)})}function ka(t,e){return e}function f_(t){for(var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=0;A5&&arguments[5]!==void 0?arguments[5]:null,a=t,r=new Map;!(4&e)||(a=t.appendChild(wI()));var s,l=null,g=it(()=>{var E=A();return zf(E)?E:E==null?[]:W5(E)}),C=!0;function I(){h.fallback=l,(function(E,f,m,v,k){var S,b,x,F,z,P=!!(8&v),W=f.length,eA=E.items,Z=E.effect.first,EA=null,X=[],iA=[];if(P)for(z=0;z0){var YA=4&v&&W===0?m:null;if(P){for(z=0;z<_e;z+=1){var fA;(fA=Ue[z].nodes)===null||fA===void 0||(fA=fA.a)===null||fA===void 0||fA.measure()}for(z=0;z<_e;z+=1){var XA;(XA=Ue[z].nodes)===null||XA===void 0||(XA=XA.a)===null||XA===void 0||XA.fix()}}(function(DA,ee,NA){for(var ke,HA=ee.length,vA=ee.length,Gt=function(){var pt=ee[ft];Gh(pt,()=>{if(ke){if(ke.pending.delete(pt),ke.done.add(pt),ke.pending.size===0){var xe=DA.outrogroups;f_(W5(ke.done)),xe.delete(ke),xe.size===0&&(DA.outrogroups=null)}}else vA-=1},!1)},ft=0;ft{if(b!==void 0)for(F of b){var DA;(DA=F.nodes)===null||DA===void 0||(DA=DA.a)===null||DA===void 0||DA.apply()}})})(h,s,a,e,i),l!==null&&(s.length===0?(l.f&wC)===0?q_(l):(l.f^=wC,pf(l,null,a)):Gh(l,()=>{l=null}))}var d=Zh(()=>{for(var E=(s=c(g)).length,f=new Set,m=0;mo(a)):(l=S0(()=>o(Ih??(Ih=wI())))).f|=wC),C||I(),c(g)}),h={effect:d,items:r,outrogroups:null,fallback:l};C=!1}function gmA(t,e,A,i,n,o,a,r){var s=1&a?16&a?UC(A):BA(A,!1,!1):null,l=2&a?UC(n):null;return{v:s,i:l,e:S0(()=>(o(e,s??A,l??n,r),()=>{t.delete(i)}))}}function pf(t,e,A){if(t.nodes)for(var i=t.nodes.start,n=t.nodes.end,o=e&&(e.f&wC)===0?e.nodes.start:A;i!==null;){var a=qf(i);if(o.before(i),i===n)return;i=a}}function sI(t,e,A){e===null?t.effect.first=A:e.next=A,A===null?t.effect.last=e:A.prev=e}function KX(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=arguments.length>3&&arguments[3]!==void 0&&arguments[3],n=t,o="";Se(()=>{var a,r=qn;if(o!==(o=(a=e())!==null&&a!==void 0?a:"")&&(r.nodes!==null&&(fX(r.nodes.start,r.nodes.end),r.nodes=null),o!=="")){var s=o+"";A?s="".concat(s,""):i&&(s="".concat(s,""));var l=bR(s);if((A||i)&&(l=Jl(l)),wd(Jl(l),l.lastChild),A||i)for(;Jl(l);)n.before(Jl(l));else n.before(l)}})}function Ia(t,e,A,i,n){var o,a=(o=e.$$slots)===null||o===void 0?void 0:o[A],r=!1;a===!0&&(a=e[A==="default"?"children":A],r=!0),a===void 0?n!==null&&n(t):a(t,r?()=>i:i)}function UX(t,e,A){var i=new Uh(t);Zh(()=>{var n,o=(n=e())!==null&&n!==void 0?n:null;i.ensure(o,o&&(a=>A(a,o)))},ud)}function ms(t,e,A){_r(()=>{var i=wA(()=>e(t,A?.())||{});if(A&&i!=null&&i.update){var n=!1,o={};Wh(()=>{var a=A();K(a),n&&ZZ(o,a)&&(o=a,i.update(a))}),n=!0}if(i!=null&&i.destroy)return()=>i.destroy()})}function cmA(t,e){var A,i=void 0;hX(()=>{i!==(i=e())&&(A&&(Xr(A),A=null),i&&(A=S0(()=>{_r(()=>i(t))})))})}function TX(t){var e,A,i="";if(typeof t=="string"||typeof t=="number")i+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e1&&arguments[1]!==void 0&&arguments[1]?" !important;":";",A="";for(var i in t){var n=t[i];n!=null&&n!==""&&(A+=" "+i+": "+n+e)}return A}function p_(t){return t[0]!=="-"||t[1]!=="-"?t.toLowerCase():t}function ii(t,e,A,i,n,o){var a=t.__className;if(a!==A||a===void 0){var r=(function(g,C,I){var d=g==null?"":""+g;if(C&&(d=d?d+" "+C:C),I){for(var h in I)if(I[h])d=d?d+" "+h:h;else if(d.length)for(var E=h.length,f=0;(f=d.indexOf(h,f))>=0;){var m=f+E;f!==0&&!UW.includes(d[f-1])||m!==d.length&&!UW.includes(d[m])?f=m:d=(f===0?"":d.substring(0,f))+d.substring(m+1)}}return d===""?null:d})(A,i,o);r==null?t.removeAttribute("class"):e?t.className=r:t.setAttribute("class",r),t.__className=A}else if(o&&n!==o)for(var s in o){var l=!!o[s];n!=null&&l===!!n[s]||t.classList.toggle(s,l)}return o}function m_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;for(var n in A){var o=A[n];e[n]!==o&&(A[n]==null?t.style.removeProperty(n):t.style.setProperty(n,o,i))}}function mg(t,e,A,i){if(t.__style!==e){var n=(function(o,a){if(a){var r,s,l="";if(Array.isArray(a)?(r=a[0],s=a[1]):r=a,o){o=String(o).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var g=!1,C=0,I=!1,d=[];r&&d.push(...Object.keys(r).map(p_)),s&&d.push(...Object.keys(s).map(p_));for(var h=0,E=-1,f=o.length,m=0;m2&&arguments[2]!==void 0&&arguments[2];if(t.multiple){if(e==null)return;if(!zf(e))return void console.warn("https://svelte.dev/e/select_multiple_invalid_value");for(var i of t.options)i.selected=e.includes(JW(i))}else{for(i of t.options)if(ZpA(JW(i),e))return void(i.selected=!0);A&&e===void 0||(t.selectedIndex=-1)}}function CmA(t){var e=new MutationObserver(()=>{X_(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),SD(()=>{e.disconnect()})}function JW(t){return"__value"in t?t.__value:t.value}var uh=Symbol("class"),mf=Symbol("style"),JX=Symbol("is custom element"),OX=Symbol("is html");function Dd(t,e){var A=MR(t);A.value!==(A.value=e??void 0)&&(t.value!==e||e===0&&t.nodeName==="PROGRESS")&&(t.value=e??"")}function _n(t,e,A,i){var n=MR(t);n[e]!==(n[e]=A)&&(e==="loading"&&(t[HpA]=A),A==null?t.removeAttribute(e):typeof A!="string"&&YX(t).includes(e)?t[e]=A:t.setAttribute(e,A))}function ImA(t,e,A,i){var n,o=MR(t),a=o[JX],r=!o[OX],s=e||{},l=t.tagName==="OPTION";for(var g in e)g in A||(A[g]=null);A.class?A.class=bI(A.class):(i||A[uh])&&(A.class=null),A[mf]&&((n=A.style)!==null&&n!==void 0||(A.style=null));var C,I,d,h,E,f,m=YX(t),v=function(S){var b=A[S];if(l&&S==="value"&&b==null)return t.value=t.__value="",s[S]=b,0;if(S==="class")return C=t.namespaceURI==="http://www.w3.org/1999/xhtml",ii(t,C,b,i,e?.[uh],A[uh]),s[S]=b,s[uh]=A[uh],0;if(S==="style")return mg(t,b,e?.[mf],A[mf]),s[S]=b,s[mf]=A[mf],0;if(b===(I=s[S])&&(b!==void 0||!t.hasAttribute(S))||(s[S]=b,(d=S[0]+S[1])==="$$"))return 0;if(d==="on"){var x={},F="$$"+S,z=S.slice(2);if(h=(function(X){return tmA.includes(X)})(z),(function(X){return X.endsWith("capture")&&X!=="gotpointercapture"&&X!=="lostpointercapture"})(z)&&(z=z.slice(0,-7),x.capture=!0),!h&&I){if(b!=null)return 0;t.removeEventListener(z,s[F],x),s[F]=null}if(b!=null)if(h)t["__".concat(z)]=b,Vf([z]);else{let X=function(iA){s[S].call(this,iA)};var EA=X;s[F]=FX(z,t,X,x)}else h&&(t["__".concat(z)]=void 0)}else if(S==="style")_n(t,S,b);else if(S==="autofocus")(function(X,iA){if(iA){var AA=document.body;X.autofocus=!0,fd(()=>{document.activeElement===AA&&X.focus()})}})(t,!!b);else if(a||S!=="__value"&&(S!=="value"||b==null))if(S==="selected"&&l)(function(X,iA){iA?X.hasAttribute("selected")||X.setAttribute("selected",""):X.removeAttribute("selected")})(t,b);else if(E=S,r||(E=(function(X){var iA;return X=X.toLowerCase(),(iA=imA[X])!==null&&iA!==void 0?iA:X})(E)),f=E==="defaultValue"||E==="defaultChecked",b!=null||a||f)f||m.includes(E)&&(a||typeof b!="string")?(t[E]=b,E in o&&(o[E]=Wr)):typeof b!="function"&&_n(t,E,b);else if(o[S]=null,E==="value"||E==="checked"){var P=t,W=e===void 0;if(E==="value"){var eA=P.defaultValue;P.removeAttribute(E),P.defaultValue=eA,P.value=P.__value=W?eA:null}else{var Z=P.defaultChecked;P.removeAttribute(E),P.defaultChecked=Z,P.checked=!!W&&Z}}else t.removeAttribute(S);else t.value=t.__value=b};for(var k in A)v(k);return s}function AD(t,e){var A=arguments.length>5?arguments[5]:void 0,i=arguments.length>6&&arguments[6]!==void 0&&arguments[6],n=arguments.length>7&&arguments[7]!==void 0&&arguments[7];sX(arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],o=>{var a=void 0,r={},s=t.nodeName==="SELECT",l=!1;if(hX(()=>{var C=e(...o.map(c)),I=ImA(t,a,C,A,i,n);for(var d of(l&&s&&"value"in C&&X_(t,C.value),Object.getOwnPropertySymbols(r)))C[d]||Xr(r[d]);for(var h of Object.getOwnPropertySymbols(C)){var E=C[h];h.description!=="@attach"||a&&E===a[h]||(r[h]&&Xr(r[h]),r[h]=S0(()=>cmA(t,()=>E))),I[h]=E}a=I}),s){var g=t;_r(()=>{X_(g,a.value,!0),CmA(g)})}l=!0})}function MR(t){var e;return(e=t.__attributes)!==null&&e!==void 0?e:t.__attributes={[JX]:t.nodeName.includes("-"),[OX]:t.namespaceURI==="http://www.w3.org/1999/xhtml"}}var OW=new Map;function YX(t){var e,A=t.getAttribute("is")||t.nodeName,i=OW.get(A);if(i)return i;OW.set(A,i=[]);for(var n=t,o=Element.prototype;o!==n;){for(var a in e=HZ(n))e[a].set&&i.push(a);n=wR(n)}return i}function lD(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,i=new WeakSet;XpA(t,"input",(function(){var n=zt(function*(o){var a=o?t.defaultValue:t.value;if(a=w_(t)?D_(a):a,A(a),Jo!==null&&i.add(Jo),yield kX(),a!==(a=e())){var r=t.selectionStart,s=t.selectionEnd,l=t.value.length;if(t.value=a??"",s!==null){var g=t.value.length;r===s&&s===l&&g>l?(t.selectionStart=g,t.selectionEnd=g):(t.selectionStart=r,t.selectionEnd=Math.min(s,g))}}});return function(o){return n.apply(this,arguments)}})()),wA(e)==null&&t.value&&(A(w_(t)?D_(t.value):t.value),Jo!==null&&i.add(Jo)),Wh(()=>{var n=e();if(t===document.activeElement){var o=Mf??Jo;if(i.has(o))return}w_(t)&&n===D_(t.value)||(t.type!=="date"||n||t.value)&&n!==t.value&&(t.value=n??"")})}function w_(t){var e=t.type;return e==="number"||e==="range"}function D_(t){return t===""?null:+t}function jt(t,e,A){var i=RC(t,e);i&&i.set&&(t[e]=A,SD(()=>{t[e]=null}))}function YW(t,e){return t===e||t?.[M0]===e}function Oo(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,A=arguments.length>2?arguments[2]:void 0;return _r(()=>{var i,n;return Wh(()=>{i=n,n=[],wA(()=>{t!==A(...n)&&(e(t,...n),i&&YW(A(...i),t)&&e(null,...i))})}),()=>{fd(()=>{n&&YW(A(...n),t)&&e(null,...n)})}}),t}function vC(t){return function(){for(var e=arguments.length,A=new Array(e),i=0;i0&&arguments[0]!==void 0&&arguments[0],e=Io,A=e.l.u;if(A){var i,n=()=>K(e.s);if(t){var o=0,a={},r=jf(()=>{var s=!1,l=e.s;for(var g in l)l[g]!==a[g]&&(a[g]=l[g],s=!0);return s&&o++,o});n=()=>c(r)}A.b.length&&(i=()=>{HW(e,n),Y_(A.b)},BX(),yc(1048584,i,!0)),j_(()=>{var s=wA(()=>A.m.map(JpA));return()=>{for(var l of s)typeof l=="function"&&l()}}),A.a.length&&j_(()=>{HW(e,n),Y_(A.a)})}}function HW(t,e){if(t.l.s)for(var A of t.l.s)c(A);e()}function kD(t){var e=UC(0);return function(){return arguments.length===1?(N(e,c(e)+1),arguments[0]):(c(e),t())}}function yf(t,e){var A,i=(A=t.$$events)===null||A===void 0?void 0:A[e.type],n=zf(i)?i.slice():i==null?[]:[i];for(var o of n)o.call(this,e)}var F5=!1,dmA={get(t,e){if(!t.exclude.includes(e))return c(t.version),e in t.special?t.special[e]():t.props[e]},set(t,e,A){if(!(e in t.special)){var i=qn;try{wg(t.parent_effect),t.special[e]=L({get[e](){return t.props[e]}},e,4)}finally{wg(i)}}return t.special[e](A),RW(t.version),!0},getOwnPropertyDescriptor(t,e){if(!t.exclude.includes(e))return e in t.props?{enumerable:!0,configurable:!0,value:t.props[e]}:void 0},deleteProperty:(t,e)=>(t.exclude.includes(e)||(t.exclude.push(e),RW(t.version)),!0),has:(t,e)=>!t.exclude.includes(e)&&e in t.props,ownKeys:t=>Reflect.ownKeys(t.props).filter(e=>!t.exclude.includes(e))};function L5(t,e){return new Proxy({props:t,exclude:e,special:{},version:UC(0),parent_effect:qn},dmA)}var BmA={get(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(Qf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i)return i[e]}},set(t,e,A){for(var i=t.props.length;i--;){var n=t.props[i];Qf(n)&&(n=n());var o=RC(n,e);if(o&&o.set)return o.set(A),!0}return!1},getOwnPropertyDescriptor(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(Qf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i){var n=RC(i,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(t,e){if(e===M0||e===VZ)return!1;for(var A of t.props)if(Qf(A)&&(A=A()),A!=null&&e in A)return!0;return!1},ownKeys(t){var e=[];for(var A of t.props)if(Qf(A)&&(A=A()),A){for(var i in A)e.includes(i)||e.push(i);for(var n of Object.getOwnPropertySymbols(A))e.includes(n)||e.push(n)}return e}};function DI(){for(var t=arguments.length,e=new Array(t),A=0;A(g&&(g=!1,l=s?wA(i):i),l);if(r){var I,d,h=M0 in t||VZ in t;n=(I=(d=RC(t,e))===null||d===void 0?void 0:d.set)!==null&&I!==void 0?I:h&&e in t?b=>t[e]=b:void 0}var E,f=!1;if(r?[o,f]=(function(b){var x=F5;try{return F5=!1,[b(),F5]}finally{F5=x}})(()=>t[e]):o=t[e],o===void 0&&i!==void 0&&(o=C(),n&&(a&&(function(){throw new Error("https://svelte.dev/e/props_invalid_value")})(),n(o))),E=a?()=>{var b=t[e];return b===void 0?C():(g=!0,b)}:()=>{var b=t[e];return b!==void 0&&(l=void 0),b===void 0?l:b},a&&!(4&A))return E;if(n){var m=t.$$legacy;return function(b,x){return arguments.length>0?(a&&x&&!m&&!f||n(x?E():b),b):E()}}var v=!1,k=(1&A?jf:it)(()=>(v=!1,E()));r&&c(k);var S=qn;return function(b,x){if(arguments.length>0){var F=x?c(k):a&&r?mh(b):b;return N(k,F),v=!0,l!==void 0&&(l=F),b}return Sd&&v||(S.f&qh)!==0?k.v:c(k)}}function or(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:(function(i){var n=(function(o){try{if(typeof window<"u"&&window.localStorage!==void 0)return window.localStorage[o]}catch(a){}})("debug");return n!=null&&n.endsWith("*")?i.startsWith(n.slice(0,-1)):i===n})(t);if(!e)return EmA;var A=(function(i){for(var n=0,o=0;o9466848e5&&isFinite(t)&&Math.floor(t)===t&&!isNaN(new Date(t).valueOf());if(typeof t=="bigint")return $_(Number(t));try{var e=t&&t.valueOf();if(e!==t)return $_(e)}catch(A){return!1}return!1}function HX(t){(G5=G5||window.document.createElement("div")).style.color="",G5.style.color=t;var e=G5.style.color;return e!==""?e.replace(/\s+/g,"").toLowerCase():void 0}var G5=void 0;function fmA(t){return typeof t=="string"&&t.length<99&&!!HX(t)}function kR(t,e){if(typeof t=="number"||typeof t=="string"||typeof t=="boolean"||t===void 0)return typeof t;if(typeof t=="bigint")return"number";if(t===null)return"null";if(Array.isArray(t))return"array";if(Mn(t))return"object";var A=e.stringify(t);return A&&SR(A)?"number":A==="true"||A==="false"?"boolean":A==="null"?"null":"unknown"}var pmA=/^https?:\/\/\S+$/;function xD(t){return typeof t=="string"&&pmA.test(t)}function $h(t,e){if(t==="")return"";var A=t.trim();return A==="null"?null:A==="true"||A!=="false"&&(SR(A)?e.parse(A):t)}var mmA=[];function PW(t,e){if(t.length!==e.length)return!1;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],A={};if(!Array.isArray(t))throw new TypeError("Array expected");function i(a,r){(!Array.isArray(a)&&!Mn(a)||e&&r.length>0)&&(A[vt(r)]=!0),Mn(a)&&Object.keys(a).forEach(s=>{i(a[s],r.concat(s))})}for(var n=Math.min(t.length,1e4),o=0;oe?t.slice(0,e):t}function jW(t){return Me({},t)}function qW(t){return Object.values(t)}function VW(t,e,A,i){var n=t.slice(0),o=n.splice(e,A);return n.splice.apply(n,[e+i,0,...o]),n}function wmA(t,e,A){return t.slice(0,e).concat(A).concat(t.slice(e))}function Wf(t,e){try{return e.parse(t)}catch(A){return e.parse(ag(t))}}function PX(t,e){try{return Wf(t,e)}catch(A){return}}function Zf(t,e){t=t.replace(qX,"");try{return e(t)}catch(A){}try{return e("{"+t+"}")}catch(A){}try{return e("["+t+"]")}catch(A){}throw new Error("Failed to parse partial JSON")}function jX(t){t=t.replace(qX,"");try{return ag(t)}catch(i){}try{var e=ag("["+t+"]");return e.substring(1,e.length-1)}catch(i){}try{var A=ag("{"+t+"}");return A.substring(1,A.length-1)}catch(i){}throw new Error("Failed to repair partial JSON")}var qX=/,\s*$/;function Th(t,e){var A=ZW.exec(e);if(A){var i=Rr(A[2]),n=(function(d,h){for(var E=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:d.length,m=0,v=E;v"line ".concat(n+1," column ").concat(o+1))}}var a=bmA.exec(e),r=a?Rr(a[1]):void 0,s=r!==void 0?r-1:void 0,l=MmA.exec(e),g=l?Rr(l[1]):void 0,C=g!==void 0?g-1:void 0,I=s!==void 0&&C!==void 0?(function(d,h,E){for(var f=d.indexOf(` +`),m=1;m1&&arguments[1]!==void 0?arguments[1]:void 0,A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:JSON;return Rf(t)?t:{text:A.stringify(t.json,null,e)}}function WW(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JSON;return Nf(t)?t:{json:e.parse(t.text)}}function eR(t,e,A){return DmA(t,e,A).text}function ymA(t,e){return vmA(t,e)>e}function vmA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1/0;if(Rf(t))return t.text.length;var A=t.json,i=0;return(function n(o){if(Array.isArray(o)){if((i+=o.length-1+2)>e)return;for(var a=0;ae)return}else if(Mn(o)){var r=Object.keys(o);i+=2+r.length+(r.length-1);for(var s=0;sWX($X(String(t))),unescapeValue:t=>A$(ZX(t))},xmA={escapeValue:t=>$X(String(t)),unescapeValue:t=>A$(t)},_mA={escapeValue:t=>WX(String(t)),unescapeValue:t=>ZX(t)},RmA={escapeValue:t=>String(t),unescapeValue:t=>t};function WX(t){return t.replace(/[^\x20-\x7F]/g,e=>{var A;return e==="\b"||e==="\f"||e===` +`||e==="\r"||e===" "?e:"\\u"+("000"+((A=e.codePointAt(0))===null||A===void 0?void 0:A.toString(16))).slice(-4)})}function ZX(t){return t.replace(/\\u[a-fA-F0-9]{4}/g,e=>{try{var A=JSON.parse('"'+e+'"');return XX[A]||A}catch(i){return e}})}var XX={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},NmA={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":` +`,"\\r":"\r","\\t":" "};function $X(t){return t.replace(/["\b\f\n\r\t\\]/g,e=>XX[e]||e)}function A$(t){return t.replace(/\\["bfnrt\\]/g,e=>NmA[e]||e)}function Jh(t){return typeof t!="string"?String(t):t.endsWith(` +`)?t+` +`:t}function e$(t,e){return AQ(t,A=>A.nodeName.toUpperCase()===e.toUpperCase())}function QI(t,e,A){return AQ(t,i=>(function(n,o,a){return typeof n.getAttribute=="function"&&n.getAttribute(o)===a})(i,e,A))}function AQ(t,e){return!!_R(t,e)}function _R(t,e){for(var A=t;A&&!e(A);)A=A.parentNode;return A}function Xf(t){var e,A;return(e=t==null||(A=t.ownerDocument)===null||A===void 0?void 0:A.defaultView)!==null&&e!==void 0?e:void 0}function RR(t){var e=Xf(t),A=e?.document.activeElement;return!!A&&AQ(A,i=>i===t)}function t$(t,e){return _R(t,A=>A.nodeName===e)}function b_(t){return QI(t,"data-type","selectable-key")?oo.key:QI(t,"data-type","selectable-value")?oo.value:QI(t,"data-type","insert-selection-area-inside")?oo.inside:QI(t,"data-type","insert-selection-area-after")?oo.after:oo.multi}function eD(t){return encodeURIComponent(vt(t))}function i$(t){var e,A=_R(t,n=>!(n==null||!n.hasAttribute)&&n.hasAttribute("data-path")),i=(e=A?.getAttribute("data-path"))!==null&&e!==void 0?e:void 0;return i?Es(decodeURIComponent(i)):void 0}function FmA(t){var{allElements:e,currentElement:A,direction:i,hasPrio:n=()=>!0,margin:o=10}=t,a=G9(e.filter(function(m){var v=m.getBoundingClientRect();return v.width>0&&v.height>0}),s),r=s(A);function s(m){var v=m.getBoundingClientRect();return{x:v.left+v.width/2,y:v.top+v.height/2,rect:v,element:m}}function l(m,v){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,S=m.x-v.x,b=(m.y-v.y)*k;return Math.sqrt(S*S+b*b)}var g=m=>l(m,r);if(i==="Left"||i==="Right"){var C=i==="Left"?a.filter(m=>{return v=r,m.rect.left+o{return v=r,m.rect.right>v.rect.right+o;var v}),I=C.filter(m=>{return v=m,k=r,Math.abs(v.y-k.y)l(m,r,10));return d?.element}if(i==="Up"||i==="Down"){var h=i==="Up"?a.filter(m=>{return v=r,m.y+o{return v=r,m.y>v.y+o;var v}),E=h.filter(m=>n(m.element)),f=SE(E,g)||SE(h,g);return f?.element}}function NR(){var t,e,A,i;return typeof navigator<"u"&&(t=(e=(A=navigator)===null||A===void 0||(A=A.platform)===null||A===void 0?void 0:A.toUpperCase().includes("MAC"))!==null&&e!==void 0?e:(i=navigator)===null||i===void 0||(i=i.userAgentData)===null||i===void 0||(i=i.platform)===null||i===void 0?void 0:i.toUpperCase().includes("MAC"))!==null&&t!==void 0&&t}function TC(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"+",A=[];FR(t,arguments.length>2&&arguments[2]!==void 0?arguments[2]:NR)&&A.push("Ctrl"),t.altKey&&A.push("Alt"),t.shiftKey&&A.push("Shift");var i=t.key.length===1?t.key.toUpperCase():t.key;return i in LmA||A.push(i),A.join(e)}function FR(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NR;return t.ctrlKey||t.metaKey&&e()}var LmA={Ctrl:!0,Command:!0,Control:!0,Alt:!0,Option:!0,Shift:!0};function Zt(t,e){e===void 0&&(e={});var A=e.insertAt;if(t&&typeof document<"u"){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",A==="top"&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}}Zt(`.jse-absolute-popup.svelte-enkkpn { + position: relative; + left: 0; + top: 0; + width: 0; + height: 0; + z-index: 1001; +} +.jse-absolute-popup.svelte-enkkpn .jse-hidden-input:where(.svelte-enkkpn) { + position: fixed; + left: 0; + top: 0; + width: 0; + height: 0; + padding: 0; + margin: 0; + border: none; + outline: none; + overflow: hidden; +} +.jse-absolute-popup.svelte-enkkpn .jse-absolute-popup-content:where(.svelte-enkkpn) { + position: absolute; +}`);var GmA=JA('
    '),KmA=JA('
    ');function UmA(t,e){Nt(e,!1);var A=L(e,"popup",8),i=L(e,"closeAbsolutePopup",8),n=BA(),o=BA();function a(C){A().options&&A().options.closeOnOuterClick&&!AQ(C.target,I=>I===c(n))&&i()(A().id)}function r(C){TC(C)==="Escape"&&(C.preventDefault(),C.stopPropagation(),i()(A().id))}As(function(){c(o)&&c(o).focus()}),ni();var s=KmA();fe("mousedown",NC,function(C){a(C)},!0),fe("keydown",NC,r,!0),fe("wheel",NC,function(C){a(C)},!0);var l=dA(s),g=C=>{var I=GmA(),d=dA(I);Oo(d,h=>N(o,h),()=>c(o)),UX(_A(d,2),()=>A().component,(h,E)=>{E(h,DI(()=>A().props))}),Se(h=>mg(I,h),[()=>(c(n),K(A()),wA(()=>(function(h,E){var f=h.getBoundingClientRect(),{left:m,top:v,positionAbove:k,positionLeft:S}=(function(){if(E.anchor){var{anchor:b,width:x=0,height:F=0,offsetTop:z=0,offsetLeft:P=0,position:W}=E,{left:eA,top:Z,bottom:EA,right:X}=b.getBoundingClientRect(),iA=W==="top"||Z+F>window.innerHeight&&Z>F,AA=W==="left"||eA+x>window.innerWidth&&eA>x;return{left:AA?X-P:eA+P,top:iA?Z-z:EA+z,positionAbove:iA,positionLeft:AA}}if(typeof E.left=="number"&&typeof E.top=="number"){var{left:IA,top:aA,width:rA=0,height:uA=0}=E;return{left:IA,top:aA,positionAbove:aA+uA>window.innerHeight&&aA>uA,positionLeft:IA+rA>window.innerWidth&&IA>rA}}throw new Error('Invalid config: pass either "left" and "top", or pass "anchor"')})();return(k?"bottom: ".concat(f.top-v,"px;"):"top: ".concat(v-f.top,"px;"))+(S?"right: ".concat(f.left-m,"px;"):"left: ".concat(m-f.left,"px;"))})(c(n),A().options)))]),CA(C,I)};jA(l,C=>{c(n)&&C(g)}),Oo(s,C=>N(n,C),()=>c(n)),fe("mousedown",s,function(C){C.stopPropagation()}),fe("keydown",s,r),CA(t,s),Ft()}var TmA=JA(" ",1);function tR(t,e){Nt(e,!1);var A=or("jsoneditor:AbsolutePopup"),i=BA([],!0);function n(r){var s=c(i).findIndex(g=>g.id===r);if(s!==-1){var l=c(i)[s];l.options.onClose&&l.options.onClose(),N(i,c(i).filter(g=>g.id!==r))}}(function(r,s){$Z().set(r,s)})("absolute-popup",{openAbsolutePopup:function(r,s,l){A("open...",s,l);var g={id:wh(),component:r,props:s||{},options:l||{}};return N(i,[...c(i),g]),g.id},closeAbsolutePopup:n}),KA(()=>c(i),()=>{A("popups",c(i))}),Rn(),ni(!0);var o=TmA(),a=et(o);da(a,1,()=>c(i),ka,(r,s)=>{UmA(r,{get popup(){return c(s)},closeAbsolutePopup:n})}),Ia(_A(a,2),e,"default",{},null),CA(t,o),Ft()}function $f(t,e){for(var A=new Set(e),i=t.replace(/ \(copy( \d+)?\)$/,""),n=t,o=1;A.has(n);){var a="copy"+(o>1?" "+o:"");n="".concat(i," (").concat(a,")"),o++}return n}function SC(t,e){var A=e-3;return t.length>e?t.substring(0,A)+"...":t}function JmA(t){if(t==="")return"";var e=t.toLowerCase();if(e==="null")return null;if(e==="true")return!0;if(e==="false")return!1;if(e!=="undefined"){var A=Number(t),i=parseFloat(t);return isNaN(A)||isNaN(i)?t:A}}var OmA={id:"jsonquery",name:"JSONQuery",description:` +

    + Enter a JSON Query function to filter, sort, or transform the data. + You can use functions like get, filter, + sort, pick, groupBy, uniq, etcetera. + Example query: filter(.age >= 18) +

    +`,createQuery:function(t,e){var{filter:A,sort:i,projection:n}=e,o=[];A&&A.path&&A.relation&&A.value&&o.push(["filter",[(a=A.relation,P9("1 ".concat(a," 1"))[0]),K5(A.path),JmA(A.value)]]);var a;return i&&i.path&&i.direction&&o.push(["sort",K5(i.path),i.direction==="desc"?"desc":"asc"]),n&&n.paths&&(n.paths.length>1?o.push(["pick",...n.paths.map(K5)]):o.push(["map",K5(n.paths[0])])),cz(["pipe",...o])},executeQuery:function(t,e,A){var i=VX(A,JSON)?t:(function(n){var o=A.stringify(n);return o!==void 0?JSON.parse(o):void 0})(t);return e.trim()!==""?Cz(i,e):i}};function K5(t){return["get",...t]}var YmA=xI("");function HmA(t,e){Nt(e,!1);var A=870711,i=BA(""),n=L(e,"data",8);function o(r){if(!r||!r.raw)return"";var s=r.raw,l={};return s=s.replace(/\s(?:xml:)?id=["']?([^"')\s]+)/g,(g,C)=>{var I="fa-".concat((A+=1).toString(16));return l[C]=I,' id="'.concat(I,'"')}),s=s.replace(/#(?:([^'")\s]+)|xpointer\(id\((['"]?)([^')]+)\2\)\))/g,(g,C,I,d)=>{var h=C||d;return h&&l[h]?"#".concat(l[h]):g}),s}KA(()=>K(n()),()=>{N(i,o(n()))}),Rn();var a=YmA();KX(dA(a),()=>c(i),!0),CA(t,a),Ft()}Zt(` + .fa-icon.svelte-v67cny { + display: inline-block; + fill: currentColor; + } + .fa-flip-horizontal.svelte-v67cny { + transform: scale(-1, 1); + } + .fa-flip-vertical.svelte-v67cny { + transform: scale(1, -1); + } + .fa-spin.svelte-v67cny { + animation: svelte-v67cny-fa-spin 1s 0s infinite linear; + } + .fa-inverse.svelte-v67cny { + color: #fff; + } + .fa-pulse.svelte-v67cny { + animation: svelte-v67cny-fa-spin 1s infinite steps(8); + } + @keyframes svelte-v67cny-fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } +`);var zmA=xI(""),PmA=xI(""),jmA=xI(""),qmA=xI("",1);function tn(t,e){var A=L5(e,["children","$$slots","$$events","$$legacy"]),i=L5(A,["class","data","scale","spin","inverse","pulse","flip","label","style"]);Nt(e,!1);var n=L(e,"class",8,""),o=L(e,"data",8),a=BA(),r=L(e,"scale",8,1),s=L(e,"spin",8,!1),l=L(e,"inverse",8,!1),g=L(e,"pulse",8,!1),C=L(e,"flip",8,void 0),I=L(e,"label",8,""),d=L(e,"style",8,""),h=BA(10),E=BA(10),f=BA(),m=BA();function v(){var S=1;return r()!==void 0&&(S=Number(r())),isNaN(S)||S<=0?(console.warn('Invalid prop: prop "scale" should be a number over 0.'),1):1*S}function k(){return c(a)?Math.max(c(a).width,c(a).height)/16:1}KA(()=>(K(o()),K(d()),K(r())),()=>{N(a,(function(S){var b;if(S){if(!("definition"in S)){if("iconName"in S&&"icon"in S){S.iconName;var[x,F,,,z]=S.icon;b={width:x,height:F,paths:(Array.isArray(z)?z:[z]).map(P=>({d:P}))}}else b=S[Object.keys(S)[0]];return b}console.error("`import faIconName from '@fortawesome/package-name/faIconName` not supported - Please use `import { faIconName } from '@fortawesome/package-name/faIconName'` instead")}})(o())),d(),r(),N(h,c(a)?c(a).width/k()*v():0),N(E,c(a)?c(a).height/k()*v():0),N(f,(function(){var S="";d()!==null&&(S+=d());var b=v();return b===1?S.length===0?"":S:(S===""||S.endsWith(";")||(S+="; "),"".concat(S,"font-size: ").concat(b,"em"))})()),N(m,c(a)?"0 0 ".concat(c(a).width," ").concat(c(a).height):"0 0 ".concat(c(h)," ").concat(c(E)))}),Rn(),ni(),(function(S,b){var x=L5(b,["children","$$slots","$$events","$$legacy"]),F=L5(x,["class","width","height","box","spin","inverse","pulse","flip","style","label"]),z=L(b,"class",8,""),P=L(b,"width",8),W=L(b,"height",8),eA=L(b,"box",8,"0 0 0 0"),Z=L(b,"spin",8,!1),EA=L(b,"inverse",8,!1),X=L(b,"pulse",8,!1),iA=L(b,"flip",8,"none"),AA=L(b,"style",8,""),IA=L(b,"label",8,""),aA=zmA();AD(aA,()=>{var rA;return Me(Me({version:"1.1",class:"fa-icon ".concat((rA=z())!==null&&rA!==void 0?rA:""),width:P(),height:W(),"aria-label":IA(),role:IA()?"img":"presentation",viewBox:eA(),style:AA()},F),{},{[uh]:{"fa-spin":Z(),"fa-pulse":X(),"fa-inverse":EA(),"fa-flip-horizontal":iA()==="horizontal","fa-flip-vertical":iA()==="vertical"}})},void 0,void 0,void 0,"svelte-v67cny"),Ia(dA(aA),b,"default",{},null),CA(S,aA)})(t,DI({get label(){return I()},get width(){return c(h)},get height(){return c(E)},get box(){return c(m)},get style(){return c(f)},get spin(){return s()},get flip(){return C()},get inverse(){return l()},get pulse(){return g()},get class(){return n()}},()=>i,{children:(S,b)=>{var x=Fi();Ia(et(x),e,"default",{},F=>{var z=qmA(),P=et(z);da(P,1,()=>(c(a),wA(()=>{var EA;return((EA=c(a))===null||EA===void 0?void 0:EA.paths)||[]})),ka,(EA,X)=>{var iA=PmA();AD(iA,()=>Me({},c(X))),CA(EA,iA)});var W=_A(P);da(W,1,()=>(c(a),wA(()=>{var EA;return((EA=c(a))===null||EA===void 0?void 0:EA.polygons)||[]})),ka,(EA,X)=>{var iA=jmA();AD(iA,()=>Me({},c(X))),CA(EA,iA)});var eA=_A(W),Z=EA=>{HmA(EA,{get data(){return c(a)},set data(X){N(a,X)},$$legacy:!0})};jA(eA,EA=>{c(a),wA(()=>{var X;return(X=c(a))===null||X===void 0?void 0:X.raw})&&EA(Z)}),CA(F,z)}),CA(S,x)},$$slots:{default:!0}})),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-boolean-toggle.svelte-eli4ob { + padding: 0; + margin: 1px 0 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-value-color-boolean, #ff8c00); +} + +.jse-boolean-toggle.svelte-eli4ob:not(.jse-readonly) { + cursor: pointer; +}`);var VmA=JA('
    ');function WmA(t,e){Nt(e,!1);var A=L(e,"path",9),i=L(e,"value",9),n=L(e,"readOnly",9),o=L(e,"onPatch",9),a=L(e,"focus",9);ni(!0);var r,s=VmA(),l=dA(s),g=it(()=>i()===!0?j9:q9);tn(l,{get data(){return c(g)}}),Se(()=>{_n(s,"aria-checked",i()===!0),r=ii(s,1,"jse-boolean-toggle svelte-eli4ob",null,r,{"jse-readonly":n()}),_n(s,"title",n()?"Boolean value ".concat(i()):"Click to toggle this boolean value")}),fe("mousedown",s,function(C){C.stopPropagation(),n()||(o()([{op:"replace",path:vt(A()),value:!i()}]),a()())}),CA(t,s),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup, +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::before, +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::after { + background: var(--jse-color-picker-background, var(--jse-panel-background, #ebebeb)); + line-height: normal; +} +.jse-color-picker-popup.svelte-v77py2 .picker_slider, +.jse-color-picker-popup.svelte-v77py2 .picker_sl, +.jse-color-picker-popup.svelte-v77py2 .picker_editor input, +.jse-color-picker-popup.svelte-v77py2 .picker_sample, +.jse-color-picker-popup.svelte-v77py2 .picker_done button { + box-shadow: var(--jse-color-picker-border-box-shadow, #cbcbcb 0 0 0 1px); +} +.jse-color-picker-popup.svelte-v77py2 .picker_editor input { + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); +} +.jse-color-picker-popup.svelte-v77py2 .picker_done button { + background: var(--jse-button-background, #e0e0e0); + color: var(--jse-button-color, var(--jse-text-color, #4d4d4d)); +} +.jse-color-picker-popup.svelte-v77py2 .picker_done button:hover { + background: var(--jse-button-background-highlight, #e7e7e7); +}`);var ZmA=JA('
    ');function XmA(t,e){Nt(e,!1);var A=L(e,"color",8),i=L(e,"onChange",8),n=L(e,"showOnTop",8),o=BA(),a=()=>{};As(zt(function*(){var s,l=new((s=yield import("./chunk-GLGRLUIJ.js"))===null||s===void 0?void 0:s.default)({parent:c(o),color:A(),popup:n()?"top":"bottom",onDone(g){var C=g.rgba[3]===1?g.hex.substring(0,7):g.hex;i()(C)}});l.show(),a=()=>{l.destroy()}})),Dg(()=>{a()}),ni();var r=ZmA();Oo(r,s=>N(o,s),()=>c(o)),CA(t,r),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-color-picker-button.svelte-13mgyo6 { + font-size: var(--jse-font-size-mono, 14px); + width: var(--jse-color-picker-button-size, 1em); + height: var(--jse-color-picker-button-size, 1em); + box-sizing: border-box; + padding: 0; + margin: 2px 0 0 calc(0.5 * var(--jse-padding, 10px)); + display: inline-flex; + vertical-align: top; + border: 1px solid var(--jse-text-color, #4d4d4d); + border-radius: 2px; + background: inherit; + outline: none; +} + +.jse-color-picker-button.svelte-13mgyo6:not(.jse-readonly) { + cursor: pointer; +}`);var $mA=JA('');function A6A(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),{openAbsolutePopup:n}=kI("absolute-popup"),o=L(e,"path",9),a=L(e,"value",9),r=L(e,"readOnly",9),s=L(e,"onPatch",9),l=L(e,"focus",9);function g(h){s()([{op:"replace",path:vt(o()),value:h}]),C()}function C(){l()()}KA(()=>K(a()),()=>{N(A,HX(a()))}),KA(()=>(K(r()),K(a())),()=>{N(i,r()?"Color ".concat(a()):"Click to open a color picker")}),Rn(),ni(!0);var I,d=$mA();Se(()=>{var h;I=ii(d,1,"jse-color-picker-button svelte-13mgyo6",null,I,{"jse-readonly":r()}),mg(d,"background: ".concat((h=c(A))!==null&&h!==void 0?h:"")),_n(d,"title",c(i)),_n(d,"aria-label",c(i))}),fe("click",d,function(h){var E,f;if(!r()){var m=h.target,v=m.getBoundingClientRect().top,k=((E=(f=Xf(m))===null||f===void 0?void 0:f.innerHeight)!==null&&E!==void 0?E:0)-v<300&&v>300,S={color:a(),onChange:g,showOnTop:k};n(XmA,S,{anchor:m,closeOnOuterClick:!0,onClose:C,offsetTop:18,offsetLeft:-8,height:300})}}),CA(t,d),Ft()}var M_=1e3,Ff=100,U5=100,cD=2e4,kh=[{start:0,end:Ff}],e6A=1048576,t6A=1048576,S_=10485760,k_="Insert or paste contents, enter [ insert a new array, enter { to insert a new object, or start typing to insert a new value",LR="Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)",rd="hover-insert-inside",T5="hover-insert-after",$W="hover-collection",x_="valid",AZ="repairable",kC=336,xC=260,vf=100,eZ={[ug.asc]:"ascending",[ug.desc]:"descending"};function n$(t){for(var e=J9(t,r=>r.start),A=[e[0]],i=0;i0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"array",expanded:t,visibleSections:kh,items:[]}}function UR(){var{expanded:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"object",expanded:t,properties:{}}}var TR={createObjectDocumentState:UR,createArrayDocumentState:KR,createValueDocumentState:function(){return{type:"value"}}};function a$(t,e,A,i){var{createObjectDocumentState:n,createArrayDocumentState:o,createValueDocumentState:a}=i;return(function r(s,l,g){if(Array.isArray(s)){var C=ir(l)?l:o();if(g.length===0)return C;var I=Rr(g[0]),d=r(s[I],C.items[I],g.slice(1));return Hr(C,["items",g[0]],d)}if(Mn(s)){var h=Cl(l)?l:n();if(g.length===0)return h;var E=g[0],f=r(s[E],h.properties[E],g.slice(1));return Hr(h,["properties",E],f)}return GR(l)?l:a()})(t,e,A)}function Ul(t,e){return Lf(t,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],(A,i)=>{if(A!==void 0&&i!==void 0)return Array.isArray(A)?ir(i)?i:KR({expanded:!!yd(i)&&i.expanded}):Mn(A)?Cl(i)?i:UR({expanded:!!yd(i)&&i.expanded}):GR(i)?i:void 0},()=>!0)}function Lf(t,e,A,i,n){var o=i(t,e,A);if(Array.isArray(t)&&ir(o)&&n(o)){var a=[];return JR(t,o.visibleSections,s=>{var l=A.concat(String(s)),g=Lf(t[s],o.items[s],l,i,n);g!==void 0&&(a[s]=g)}),PW(a,o.items)?o:Me(Me({},o),{},{items:a})}if(Mn(t)&&Cl(o)&&n(o)){var r={};return Object.keys(t).forEach(s=>{var l=A.concat(s),g=Lf(t[s],o.properties[s],l,i,n);g!==void 0&&(r[s]=g)}),PW(Object.values(r),Object.values(o.properties))?o:Me(Me({},o),{},{properties:r})}return o}function JR(t,e,A){e.forEach(i=>{var{start:n,end:o}=i;zX(n,Math.min(t.length,o),A)})}function Gf(t,e){for(var A=t,i=[],n=0;n{var C=yd(g)&&!g.expanded?Me(Me({},g),{},{expanded:!0}):g;return ir(C)?(function(I,d){if((function(f,m){return f.some(v=>m>=v.start&&m(function(l,g,C,I){return Lf(l,g,C,(d,h,E)=>Array.isArray(d)&&I(E)?ir(h)?h.expanded?h:Me(Me({},h),{},{expanded:!0}):KR({expanded:!0}):Mn(d)&&I(E)?Cl(h)?h.expanded?h:Me(Me({},h),{},{expanded:!0}):UR({expanded:!0}):h,d=>yd(d)&&d.expanded)})(r,s,[],i))}function sZ(t,e,A,i){return Oh(t,e,A,(n,o)=>i?(function(a,r,s){return Lf(a,r,s,(l,g)=>lZ(g),()=>!0)})(n,o,A):lZ(o))}function lZ(t){return ir(t)&&t.expanded?Me(Me({},t),{},{expanded:!1,visibleSections:kh}):Cl(t)&&t.expanded?Me(Me({},t),{},{expanded:!1}):t}function r$(t,e,A){var i={json:t,documentState:e},n=A.reduce((o,a)=>({json:tl(o.json,[a]),documentState:r6A(o.json,o.documentState,a)}),i);return{json:n.json,documentState:Ul(n.json,n.documentState)}}function r6A(t,e,A){if(I9(A))return gZ(t,e,A,void 0);if(d9(A))return cZ(t,e,A);if($6(A)){var i=il(t,A.path),n=v0(t,e,i);return n?_D(t,e,i,{type:"value",enforceString:n}):e}return A8(A)||b2(A)?(function(o,a,r){if(b2(r)&&r.from===r.path)return a;var s=a,l=il(o,r.from),g=m0(o,s,l);return b2(r)&&(s=cZ(o,s,{path:r.from})),s=gZ(o,s,{path:r.path},g),s})(t,e,A):e}function m0(t,e,A){try{return Xe(e,Gf(t,A))}catch(i){return}}function OR(t,e,A,i,n){var o=a$(t,e,A,n);return a4(o,Gf(t,A),a=>{var r=Xe(t,A);return i(r,a)})}function _D(t,e,A,i){return(function(n,o,a,r,s){var l=a$(n,o,a,s);return Hr(l,Gf(n,a),r)})(t,e,A,i,TR)}function Oh(t,e,A,i){return OR(t,e,A,i,TR)}function gZ(t,e,A,i){var n=il(t,A.path),o=e;return o=Oh(t,o,Yi(n),(a,r)=>{if(!ir(r))return r;var s=Rr(ki(n)),{items:l,visibleSections:g}=r;return Me(Me({},r),{},{items:s{if(!ir(r))return r;var s=Rr(ki(i)),{items:l,visibleSections:g}=r;return Me(Me({},r),{},{items:l.slice(0,s).concat(l.slice(s+1)),visibleSections:s$(g,s,-1)})}):(function(a,r,s){var l=Gf(a,s);return vr(r,l)?x1(r,Gf(a,s)):r})(t,e,i)}function s$(t,e,A){return(function(i){for(var n=i.slice(0),o=1;o({start:i.start>e?i.start+A:i.start,end:i.end>e?i.end+A:i.end})))}function v0(t,e,A){var i,n=Xe(t,A),o=m0(t,e,A),a=GR(o)?o.enforceString:void 0;return typeof a=="boolean"?a:typeof(i=n)=="string"&&typeof $h(i,JSON)!="string"}function A3(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=t.indexOf(e);return i!==-1?A?t.slice(i):t.slice(i+1):[]}function YR(t,e){var A=[];return(function i(n,o,a){A.push(a),Vo(n)&&ir(o)&&o.expanded&&JR(n,o.visibleSections,r=>{i(n[r],o.items[r],a.concat(String(r)))}),ia(n)&&Cl(o)&&o.expanded&&Object.keys(n).forEach(r=>{i(n[r],o.properties[r],a.concat(r))})})(t,e,[]),A}function l$(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];return(function n(o,a){i.push({path:a,type:hc.value});var r=m0(t,e,a);if(o&&yd(r)&&r.expanded){if(A&&i.push({path:a,type:hc.inside}),Vo(o)){var s=ir(r)?r.visibleSections:kh;JR(o,s,l=>{var g=a.concat(String(l));n(o[l],g),A&&i.push({path:g,type:hc.after})})}ia(o)&&Object.keys(o).forEach(l=>{var g=a.concat(l);i.push({path:g,type:hc.key}),n(o[l],g),A&&i.push({path:g,type:hc.after})})}})(t,[]),i}function __(t,e,A){var i=YR(t,e),n=i.map(vt).indexOf(vt(A));if(n!==-1&&n3&&arguments[3]!==void 0?arguments[3]:10240;return Ec(t,e,A,ymA({json:Xe(t,A)},i)?bf:HR)}function R_(t,e,A){var i=m0(t,e,A);return yd(i)&&i.expanded?e:vd(t,e,A)}function bf(t){return t.length===0||t.length===1&&t[0]==="0"}function aR(t){return t.length===0}function HR(){return!0}function tD(){return!1}function dl(t){return t&&t.type===oo.after||!1}function Va(t){return t&&t.type===oo.inside||!1}function nr(t){return t&&t.type===oo.key||!1}function En(t){return t&&t.type===oo.value||!1}function Co(t){return t&&t.type===oo.multi||!1}function RD(t){return Co(t)&&Mi(t.focusPath,t.anchorPath)}function Kf(t){return Co(t)||dl(t)||Va(t)||nr(t)||En(t)}function N_(t){return t&&t.type===oo.text||!1}function MI(t,e){var A=[];return(function(i,n,o){if(n){var a=hd(n),r=It(n);if(Mi(a,r))return o(a);if(i!==void 0){var s=c$(a,r);if(a.length===s.length||r.length===s.length)return o(s);var l=fs(a,r),g=_C(i,l),C=vI(i,l),I=GC(i,l,g),d=GC(i,l,C);if(!(I===-1||d===-1)){var h=Xe(i,s);if(ia(h)){for(var E=Object.keys(h),f=I;f<=d;f++){var m=o(s.concat(E[f]));if(m!==void 0)return m}return}if(Vo(h)){for(var v=I;v<=d;v++){var k=o(s.concat(String(v)));if(k!==void 0)return k}return}throw new Error("Failed to create selection")}}}})(t,e,i=>{A.push(i)}),A}function g$(t){return Va(t)?t.path:Yi(It(t))}function _C(t,e){if(!Co(e))return e.path;var A=GC(t,e,e.anchorPath);return GC(t,e,e.focusPath)A?e.focusPath:e.anchorPath}function CZ(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(A){var n=i?It(A):_C(t,A),o=(function(s,l,g){var C=YR(s,l),I=C.map(vt),d=vt(g),h=I.indexOf(d);if(h!==-1&&h>0)return C[h-1]})(t,e,n);if(i)return Va(A)||dl(A)?o!==void 0?fs(n,n):void 0:o!==void 0?fs(hd(A),o):void 0;if(dl(A)||Va(A))return Hi(n);if(nr(A)){if(o===void 0||o.length===0)return;var a=Yi(o),r=Xe(t,a);return Array.isArray(r)||en(o)?Hi(o):JC(o)}return En(A),o!==void 0?Hi(o):void 0}}function IZ(t,e,A,i){if(!A)return{caret:void 0,previous:void 0,next:void 0};var n=l$(t,e,i),o=n.findIndex(a=>Mi(a.path,It(A))&&String(a.type)===String(A.type));return{caret:o!==-1?n[o]:void 0,previous:o!==-1&&o>0?n[o-1]:void 0,next:o!==-1&&oA[i].length;)i++;var n=A[i];return n===void 0||n.length===0||Array.isArray(Xe(t,Yi(n)))?Hi(n):JC(n)}function Yh(t,e){if(e.length===1){var A=lg(e);if(A.op==="replace")return Hi(il(t,A.path))}if(!en(e)&&e.every(a=>a.op==="move")){var i=lg(e),n=e.slice(1);if((A8(i)||b2(i))&&i.from!==i.path&&n.every(a=>(A8(a)||b2(a))&&a.from===a.path))return JC(il(t,i.path))}var o=e.filter(a=>a.op!=="test"&&a.op!=="remove"&&(a.op!=="move"||a.from!==a.path)&&typeof a.path=="string").map(a=>il(t,a.path));if(!en(o))return{type:oo.multi,anchorPath:lg(o),focusPath:ki(o)}}function c$(t,e){for(var A=0;AA.length&&e.length>A.length;return{type:oo.multi,anchorPath:i?A.concat(t[A.length]):A,focusPath:i?A.concat(e[A.length]):A}}function C$(t,e,A,i){if(nr(e))return String(ki(e.path));if(En(e)){var n=Xe(t,e.path);return typeof n=="string"?n:i.stringify(n,null,A)}if(Co(e)){if(en(e.focusPath))return i.stringify(t,null,A);var o=g$(e),a=Xe(t,o);if(Array.isArray(a)){if(RD(e)){var r=Xe(t,e.focusPath);return i.stringify(r,null,A)}return MI(t,e).map(s=>{var l=Xe(t,s);return"".concat(i.stringify(l,null,A),",")}).join(` +`)}return MI(t,e).map(s=>{var l=ki(s),g=Xe(t,s);return"".concat(i.stringify(l),": ").concat(i.stringify(g,null,A),",")}).join(` +`)}}function tr(t){return(nr(t)||En(t))&&t.edit===!0}function Dh(t){return nr(t)||En(t)||Co(t)}function J5(t){return nr(t)||En(t)||RD(t)}function rR(t){switch(t.type){case hc.key:return JC(t.path);case hc.value:return Hi(t.path);case hc.after:return LC(t.path);case hc.inside:return OC(t.path)}}function BZ(t,e){switch(t){case oo.key:return JC(e);case oo.value:return Hi(e);case oo.after:return LC(e);case oo.inside:return OC(e);case oo.multi:case oo.text:return fs(e,e)}}function O5(t,e,A){if(e)return Uf(t,e,A)||k0(Co(e)?Yi(e.focusPath):e.path,A)?e:void 0}function Uf(t,e,A){if(t===void 0||!e)return!1;if(nr(e)||Va(e)||dl(e))return Mi(e.path,A);if(En(e))return k0(A,e.path);if(Co(e)){var i=_C(t,e),n=vI(t,e),o=Yi(e.focusPath);if(!k0(A,o)||A.length<=o.length)return!1;var a=GC(t,e,i),r=GC(t,e,n),s=GC(t,e,A);return s!==-1&&s>=a&&s<=r}return!1}function GC(t,e,A){var i=Yi(e.focusPath);if(!k0(A,i)||A.length<=i.length)return-1;var n=A[i.length],o=Xe(t,i);if(ia(o))return Object.keys(o).indexOf(n);if(Vo(o)){var a=Rr(n);if(a');function d$(t,e){Nt(e,!1);var A=or("jsoneditor:EditableDiv"),i=L(e,"value",9),n=L(e,"initialValue",9),o=L(e,"shortText",9,!1),a=L(e,"label",9),r=L(e,"onChange",9),s=L(e,"onCancel",9),l=L(e,"onFind",9),g=L(e,"onPaste",9,ma),C=L(e,"onValueClass",9,()=>""),I=BA(void 0,!0),d=BA(void 0,!0),h=!1;function E(){return c(I)?(function(v){return v.replace(/\n$/,"")})(c(I).innerText):""}function f(v){c(I)&&Tl(I,c(I).innerText=Jh(v))}As(()=>{A("onMount",{value:i(),initialValue:n()}),f(n()!==void 0?n():i()),c(I)&&(function(v){if(v.firstChild!=null){var k=document.createRange(),S=window.getSelection();k.setStart(v,1),k.collapse(!0),S?.removeAllRanges(),S?.addRange(k)}else v.focus()})(c(I))}),Dg(()=>{var v=E();A("onDestroy",{closed:h,value:i(),newValue:v}),h||v===i()||r()(v,yI.no)}),KA(()=>(K(C()),K(i())),()=>{N(d,C()(i()))}),Rn(),ni(!0);var m=s6A();Oo(m,v=>N(I,v),()=>c(I)),Se(v=>{_n(m,"aria-label",a()),ii(m,1,v,"svelte-1r0oryi")},[()=>bI((K(Dc),c(d),K(o()),wA(()=>Dc("jse-editable-div",c(d),{"jse-short-text":o()}))))]),fe("input",m,function(){var v=E();v===""&&f(""),N(d,C()(v))}),fe("keydown",m,function(v){v.stopPropagation();var k=TC(v);if(k==="Escape"&&(v.preventDefault(),h=!0,s()()),k==="Enter"||k==="Tab"){v.preventDefault(),h=!0;var S=E();r()(S,yI.nextInside)}k==="Ctrl+F"&&(v.preventDefault(),l()(!1)),k==="Ctrl+H"&&(v.preventDefault(),l()(!0))}),fe("paste",m,function(v){if(v.stopPropagation(),g()&&v.clipboardData){var k=v.clipboardData.getData("text/plain");g()(k)}}),fe("blur",m,function(){var v=document.hasFocus(),k=E();A("handleBlur",{hasFocus:v,closed:h,value:i(),newValue:k}),document.hasFocus()&&!h&&(h=!0,k!==i()&&r()(k,yI.self))}),CA(t,m),Ft()}function l6A(t,e){Nt(e,!1);var A=L(e,"path",9),i=L(e,"value",9),n=L(e,"selection",9),o=L(e,"mode",9),a=L(e,"parser",9),r=L(e,"normalization",9),s=L(e,"enforceString",9),l=L(e,"onPatch",9),g=L(e,"onPasteJson",9),C=L(e,"onSelect",9),I=L(e,"onFind",9),d=L(e,"focus",9),h=L(e,"findNextInside",9);function E(k){return s()?k:$h(k,a())}function f(){C()(Hi(A())),d()()}ni(!0);var m=it(()=>(K(r()),K(i()),wA(()=>r().escapeValue(i())))),v=it(()=>(K(tr),K(n()),wA(()=>tr(n())?n().initialValue:void 0)));d$(t,{get value(){return c(m)},get initialValue(){return c(v)},label:"Edit value",onChange:function(k,S){l()([{op:"replace",path:vt(A()),value:E(r().unescapeValue(k))}],(b,x,F)=>{if(!F||Mi(A(),It(F)))return{state:x,selection:S===yI.nextInside?h()(A()):Hi(A())}}),d()()},onCancel:f,onPaste:function(k){try{var S=a().parse(k);aa(S)&&g()({path:A(),contents:S,onPasteAsJson:()=>{f();var b=[{op:"replace",path:vt(A()),value:S}];l()(b,(x,F)=>({state:vd(x,F,A())}))}})}catch(b){}},get onFind(){return I()},onValueClass:function(k){return I$(E(r().unescapeValue(k)),o(),a())}}),Ft()}function yh(t,e,A){var i=Yi(e),n=Xe(t,i);if(Vo(n)){var o=Rr(ki(e));return A.map((l,g)=>({op:"add",path:vt(i.concat(String(o+g))),value:l.value}))}if(ia(n)){var a=ki(e),r=Object.keys(n),s=a!==void 0?A3(r,a,!0):[];return[...A.map(l=>{var g=$f(l.key,r);return{op:"add",path:vt(i.concat(g)),value:l.value}}),...s.map(l=>SI(i,l))]}throw new Error("Cannot create insert operations: parent must be an Object or Array")}function sR(t,e,A){var i=Xe(t,e);if(Array.isArray(i)){var n=i.length;return A.map((o,a)=>({op:"add",path:vt(e.concat(String(n+a))),value:o.value}))}return A.map(o=>{var a=$f(o.key,Object.keys(i));return{op:"add",path:vt(e.concat(a)),value:o.value}})}function e3(t,e,A,i){var n=e.filter(r=>r!==A),o=$f(i,n),a=A3(e,A,!1);return[{op:"move",from:vt(t.concat(A)),path:vt(t.concat(o))},...a.map(r=>SI(t,r))]}function B$(t,e){var A=ki(e);if(en(A))throw new Error("Cannot duplicate root object");var i=Yi(A),n=ki(A),o=Xe(t,i);if(Vo(o)){var a=ki(e),r=a?Rr(ki(a))+1:0;return[...e.map((g,C)=>({op:"copy",from:vt(g),path:vt(i.concat(String(C+r)))}))]}if(ia(o)){var s=Object.keys(o),l=n!==void 0?A3(s,n,!1):[];return[...e.map(g=>{var C=$f(ki(g),s);return{op:"copy",from:vt(g),path:vt(i.concat(C))}}),...l.map(g=>SI(i,g))]}throw new Error("Cannot create duplicate operations: parent must be an Object or Array")}function E$(t,e){if(En(e))return[{op:"move",from:vt(e.path),path:""}];if(!Co(e))throw new Error("Cannot create extract operations: parent must be an Object or Array");var A=Yi(e.focusPath),i=Xe(t,A);if(Vo(i)){var n=MI(t,e).map(a=>{var r=Rr(ki(a));return i[r]});return[{op:"replace",path:"",value:n}]}if(ia(i)){var o={};return MI(t,e).forEach(a=>{var r=String(ki(a));o[r]=i[r]}),[{op:"replace",path:"",value:o}]}throw new Error("Cannot extract: unsupported type of selection "+JSON.stringify(e))}function h$(t,e,A,i){if(nr(e)){var n=PX(A,i),o=Yi(e.path),a=Xe(t,o);return e3(o,Object.keys(a),ki(e.path),typeof n=="string"?n:A)}if(En(e)||Co(e)&&en(e.focusPath))try{return[{op:"replace",path:vt(It(e)),value:Zf(A,x=>Wf(x,i))}]}catch(x){return[{op:"replace",path:vt(It(e)),value:A}]}if(Co(e)){var r=F_(A,i);return(function(x,F,z){var P=lg(F),W=Yi(P),eA=Xe(x,W);if(Vo(eA)){var Z=lg(F),EA=Z?Rr(ki(Z)):0;return[...ED(F),...z.map((UA,$A)=>({op:"add",path:vt(W.concat(String($A+EA))),value:UA.value}))]}if(ia(eA)){var X=ki(F),iA=Yi(X),AA=ki(X),IA=Object.keys(eA),aA=AA!==void 0?A3(IA,AA,!1):[],rA=new Set(F.map(UA=>ki(UA))),uA=IA.filter(UA=>!rA.has(UA));return[...ED(F),...z.map(UA=>{var $A=$f(UA.key,uA);return{op:"add",path:vt(iA.concat($A)),value:UA.value}}),...aA.map(UA=>SI(iA,UA))]}throw new Error("Cannot create replace operations: parent must be an Object or Array")})(t,MI(t,e),r)}if(dl(e)){var s=F_(A,i),l=e.path,g=Yi(l),C=Xe(t,g);if(Vo(C)){var I=Rr(ki(l));return yh(t,g.concat(String(I+1)),s)}if(ia(C)){var d=String(ki(l)),h=Object.keys(C);if(en(h)||ki(h)===d)return sR(t,g,s);var E=h.indexOf(d),f=h[E+1];return yh(t,g.concat(f),s)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}if(Va(e)){var m=F_(A,i),v=e.path,k=Xe(t,v);if(Vo(k))return yh(t,v.concat("0"),m);if(ia(k)){var S=Object.keys(k);if(en(S))return sR(t,v,m);var b=lg(S);return yh(t,v.concat(b),m)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}throw new Error("Cannot insert: unsupported type of selection "+JSON.stringify(e))}function ED(t){return t.map(e=>({op:"remove",path:vt(e)})).reverse()}function SI(t,e){return{op:"move",from:vt(t.concat(e)),path:vt(t.concat(e))}}function F_(t,e){var A=/^\s*{/.test(t),i=/^\s*\[/.test(t),n=PX(t,e),o=n!==void 0?n:Zf(t,a=>Wf(a,e));return A&&Mn(o)||i&&Array.isArray(o)?[{key:"New item",value:o}]:Array.isArray(o)?o.map((a,r)=>({key:"New item "+r,value:a})):Mn(o)?Object.keys(o).map(a=>({key:a,value:o[a]})):[{key:"New item",value:o}]}function Q$(t,e){if(nr(e)){var A=Yi(e.path),i=Xe(t,A),n=e3(A,Object.keys(i),ki(e.path),"");return{operations:n,newSelection:Yh(t,n)}}if(En(e))return{operations:[{op:"replace",path:vt(e.path),value:""}],newSelection:e};if(Co(e)){var o=MI(t,e),a=ED(o),r=ki(o);if(en(r))return{operations:[{op:"replace",path:"",value:""}],newSelection:Hi([])};var s=Yi(r),l=Xe(t,s);if(Vo(l)){var g=lg(o),C=Rr(ki(g));return{operations:a,newSelection:C===0?OC(s):LC(s.concat(String(C-1)))}}if(ia(l)){var I=Object.keys(l),d=lg(o),h=ki(d),E=I.indexOf(h),f=I[E-1];return{operations:a,newSelection:E===0?OC(s):LC(s.concat(f))}}throw new Error("Cannot create remove operations: parent must be an Object or Array")}throw new Error("Cannot remove: unsupported type of selection "+JSON.stringify(e))}function u$(t,e){var A=(function(i,n){if(en(n)||!n.every(b2))return n;var o=[];for(var a of n){var r=EZ(Es(a.from)),s=EZ(Es(a.path));if(!r||!s)return n;o.push({from:r,path:s,operation:a})}var l=o[0].path.parent,g=Xe(i,l);if(!ia(g)||!o.every(h=>(function(E,f){return Mi(E.from.parent,f)&&Mi(E.path.parent,f)})(h,l)))return n;var C=(function(h,E){var f=Object.keys(E),m=f.slice();for(var v of h){var k=m.indexOf(v.from.key);k!==-1&&(m.splice(k,1),m.push(v.path.key))}for(var S=0;Sh.operation,d=o.filter(h=>h.operation.from!==h.operation.path);return d.some(h=>h.path.key===C)?d.map(I):[SI(l,C),...d.map(I)]})(t,e);return e8(t,A,{before:(i,n,o)=>{if(d9(n)){var a=Es(n.path);return{revertOperations:[...o,...L_(i,a)]}}if(b2(n)){var r=Es(n.from);return{revertOperations:n.from===n.path?[n,...L_(i,r)]:[...o,...L_(i,r)]}}return{document:i}}})}function EZ(t){return t.length>0?{parent:Yi(t),key:ki(t)}:void 0}function L_(t,e){var A=Yi(e),i=ki(e),n=Xe(t,A);return ia(n)?A3(Object.keys(n),i,!1).map(o=>SI(A,o)):[]}function hZ(t){var e=t.activeIndex0?0:-1,A=t.items[e],i=t.items.map((n,o)=>Me(Me({},n),{},{active:o===e}));return Me(Me({},t),{},{items:i,activeItem:A,activeIndex:e})}function QZ(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=t.toLowerCase(),o=(A=i?.maxResults)!==null&&A!==void 0?A:1/0,a=i?.columns,r=[],s=[];function l(f){r.length>=o||r.push(f)}function g(f,m){if(Vo(m)){var v=s.length;s.push("0");for(var k=0;k=o)return;s.pop()}else if(ia(m)){var S=Object.keys(m),b=s.length;for(var x of(s.push(""),S))if(s[b]=x,uZ(x,f,s,uc.key,l),g(f,m[x]),r.length>=o)return;s.pop()}else uZ(String(m),f,s,uc.value,l)}if(t==="")return[];if(a){if(!Array.isArray(e))throw new Error("json must be an Array when option columns is defined");for(var C=0;Ch.length+1;)s.pop();g(n,Xe(I,h))}if(r.length>=o)break}return r}return g(n,e),r}function uZ(t,e,A,i,n){var o=t.toLowerCase(),a=0,r=-1,s=-1;do(s=o.indexOf(e,r))!==-1&&(r=s+e.length,n({path:A.slice(0),field:i,fieldIndex:a,start:s,end:r}),a++);while(s!==-1)}function lR(t,e,A,i){return t.substring(0,A)+e+t.substring(i)}function fZ(t,e,A){var i=t;return L9(A,n=>{i=lR(i,e,n.start,n.end)}),i}function g6A(t,e,A,i,n){var{field:o,path:a,start:r,end:s}=i;if(o===uc.key){var l=Yi(a),g=Xe(t,l),C=ki(a),I=e3(l,Object.keys(g),C,lR(C,A,r,s));return{newSelection:Yh(t,I),operations:I}}if(o===uc.value){var d=Xe(t,a);if(d===void 0)throw new Error("Cannot replace: path not found ".concat(vt(a)));var h=typeof d=="string"?d:String(d),E=v0(t,e,a),f=lR(h,A,r,s),m=[{op:"replace",path:vt(a),value:E?f:$h(f,n)}];return{newSelection:Yh(t,m),operations:m}}throw new Error("Cannot replace: unknown type of search result field ".concat(o))}function pZ(t){return t.path.concat(t.field,String(t.fieldIndex))}function mZ(t){var e=o$(t)?t.searchResults.filter(A=>A.field===uc.key):void 0;return e&&e.length>0?e:void 0}function wZ(t){var e=o$(t)?t.searchResults.filter(A=>A.field===uc.value):void 0;return e&&e.length>0?e:void 0}var c6A={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function f$(t,e){return e.reduce((A,i)=>(function(n,o,a,r){return OR(n,o,a,r,c6A)})(t,A,i.path,(n,o)=>Me(Me({},o),{},{searchResults:o.searchResults?o.searchResults.concat(i):[i]})),void 0)}function hD(t){var e,A=(e=t?.searchResults)!==null&&e!==void 0?e:[],i=Cl(t)?Object.values(t.properties).flatMap(hD):ir(t)?t.items.flatMap(hD):[];return A.concat(i)}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-highlight.svelte-19qyvy6 { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-highlight.jse-active.svelte-19qyvy6 { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +}`);var C6A=JA(" ");function p$(t,e){Nt(e,!1);var A=BA(),i=L(e,"text",8),n=L(e,"searchResultItems",8);KA(()=>(K(i()),K(n())),()=>{N(A,(function(a,r){var s=[],l=0;for(var g of r){var C=a.slice(l,g.start);C!==""&&s.push({resultIndex:void 0,type:"normal",text:C,active:!1});var I=a.slice(g.start,g.end);s.push({resultIndex:g.resultIndex,type:"highlight",text:I,active:g.active}),l=g.end}var d=ki(r);return d&&d.endc(A),ka,(a,r)=>{var s=Fi(),l=et(s),g=I=>{var d=dr();Se(()=>Lt(d,(c(r),wA(()=>c(r).text)))),CA(I,d)},C=I=>{var d,h=C6A(),E=dA(h);Se((f,m)=>{d=ii(h,1,"jse-highlight svelte-19qyvy6",null,d,{"jse-active":c(r).active}),_n(h,"data-search-result-index",f),Lt(E,m)},[()=>(c(r),wA(()=>String(c(r).resultIndex))),()=>(K(Jh),c(r),wA(()=>Jh(c(r).text)))]),CA(I,h)};jA(l,I=>{c(r),wA(()=>c(r).type==="normal")?I(g):I(C,!1)}),CA(a,s)}),CA(t,o),Ft()}function iD(t){var e=1e3;if(t<900)return t.toFixed()+" B";var A=t/e;if(A<900)return A.toFixed(1)+" KB";var i=A/e;if(i<900)return i.toFixed(1)+" MB";var n=i/e;return n<900?n.toFixed(1)+" GB":(n/e).toFixed(1)+" TB"}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tag.svelte-ubve9r { + border: none; + font-size: 80%; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + border-radius: 2px; + cursor: pointer; + display: inline-block; + padding: 0 4px; + line-height: normal; + margin: 1px 0; +} +.jse-tag.svelte-ubve9r:hover { + opacity: 0.8; +} +.jse-tag.disabled.svelte-ubve9r { + opacity: 0.7; + cursor: inherit; +}`);var I6A=JA('');function nD(t,e){Nt(e,!0);var A,i=Il(()=>e.onclick?o=>{o.preventDefault(),o.stopPropagation(),e.onclick()}:void 0),n=I6A();n.__click=function(){for(var o,a=arguments.length,r=new Array(a),s=0;s2?r-2:0),l=2;l{var C,I=(C=a())!==null&&C!==void 0?C:null;g.ensure(I,I&&(d=>I(d,...s)))},ud)})(dA(n),()=>{var o;return(o=e.children)!==null&&o!==void 0?o:TpA}),Se(()=>A=ii(n,1,"jse-tag svelte-ubve9r",null,A,{disabled:!e.onclick})),CA(t,n),Ft()}Vf(["click"]);Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-value.jse-string.svelte-1saqp8c { + color: var(--jse-value-color-string, #008000); +} +.jse-value.jse-object.svelte-1saqp8c, .jse-value.jse-array.svelte-1saqp8c { + min-width: 16px; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-value.jse-number.svelte-1saqp8c { + color: var(--jse-value-color-number, #ee422e); +} +.jse-value.jse-boolean.svelte-1saqp8c { + color: var(--jse-value-color-boolean, #ff8c00); +} +.jse-value.jse-null.svelte-1saqp8c { + color: var(--jse-value-color-null, #004ed0); +} +.jse-value.jse-invalid.svelte-1saqp8c { + color: var(--jse-text-color, #4d4d4d); +} +.jse-value.jse-url.svelte-1saqp8c { + color: var(--jse-value-color-url, #008000); + text-decoration: underline; +} + +.jse-value.svelte-1saqp8c { + display: inline-block; + min-width: 2em; + padding: 0 5px; + box-sizing: border-box; + outline: none; + border-radius: 1px; + vertical-align: top; + word-break: normal; + overflow-wrap: anywhere; + white-space: pre-wrap; +} +.jse-value.jse-table-cell.svelte-1saqp8c { + overflow-wrap: normal; + white-space: nowrap; +} +.jse-value.jse-empty.svelte-1saqp8c { + min-width: 4em; + outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + -moz-outline-radius: 2px; +} +.jse-value.jse-empty.svelte-1saqp8c::after { + pointer-events: none; + color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + content: "value"; +}`);var d6A=JA('
    ');function B6A(t,e){Nt(e,!0);var A=DC(!0),i=Il(()=>c(A)&&typeof e.value=="string"&&e.value.length>e.truncateTextSize&&(!e.searchResultItems||!e.searchResultItems.some(d=>d.active&&d.end>e.truncateTextSize))),n=Il(()=>c(i)&&typeof e.value=="string"?e.value.substring(0,e.truncateTextSize).trim():e.value),o=Il(()=>xD(e.value));function a(){N(A,!1)}var r=d6A();r.__click=function(d){typeof e.value=="string"&&c(o)&&FR(d)&&(d.preventDefault(),d.stopPropagation(),window.open(e.value,"_blank"))},r.__dblclick=function(d){e.readOnly||(d.preventDefault(),e.onSelect(BD(e.path)))};var s=dA(r),l=d=>{var h=Il(()=>e.normalization.escapeValue(c(n)));p$(d,{get text(){return c(h)},get searchResultItems(){return e.searchResultItems}})},g=d=>{var h=dr();Se(E=>Lt(h,E),[()=>Jh(e.normalization.escapeValue(c(n)))]),CA(d,h)};jA(s,d=>{e.searchResultItems?d(l):d(g,!1)});var C=_A(s,2),I=d=>{nD(d,{onclick:a,children:(h,E)=>{var f=dr();Se(m=>Lt(f,"Show more (".concat(m??"",")")),[()=>iD(e.value.length)]),CA(h,f)},$$slots:{default:!0}})};jA(C,d=>{c(i)&&typeof e.value=="string"&&d(I)}),Se(d=>{ii(r,1,d,"svelte-1saqp8c"),_n(r,"title",c(o)?"Ctrl+Click or Ctrl+Enter to open url in new window":void 0)},[()=>bI(I$(e.value,e.mode,e.parser))]),CA(t,r),Ft()}Vf(["click","dblclick"]);Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tooltip.svelte-brt1mq { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + border-radius: 3px; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + white-space: nowrap; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +}`);var E6A=JA('
    ');function h6A(t,e){var A=L(e,"text",8),i=E6A(),n=dA(i);Se(()=>Lt(n,A())),CA(t,i)}function Hh(t,e){var A,{text:i,openAbsolutePopup:n,closeAbsolutePopup:o}=e;function a(){A=n(h6A,{text:i},{position:"top",width:10*i.length,offsetTop:3,anchor:t,closeOnOuterClick:!0})}function r(){o(A)}return t.addEventListener("mouseenter",a),t.addEventListener("mouseleave",r),{destroy(){t.removeEventListener("mouseenter",a),t.removeEventListener("mouseleave",r)}}}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-timestamp.svelte-1jcpman { + padding: 0; + margin: 0; + vertical-align: middle; + display: inline-flex; + color: var(--jse-value-color-number, #ee422e); +}`);var Q6A=JA('
    ');function u6A(t,e){Nt(e,!1);var A=BA(void 0,!0),i=kI("absolute-popup"),n=L(e,"value",9);KA(()=>K(n()),()=>{N(A,"Time: ".concat(new Date(n()).toString()))}),Rn(),ni(!0);var o=Q6A();tn(dA(o),{get data(){return Iz}}),ms(o,(a,r)=>Hh?.(a,r),()=>Me({text:c(A)},i)),CA(t,o),Ft()}function f6A(t){var e=[];return!t.isEditing&&umA(t.value)&&e.push({component:WmA,props:t}),!t.isEditing&&fmA(t.value)&&e.push({component:A6A,props:t}),t.isEditing&&e.push({component:l6A,props:t}),t.isEditing||e.push({component:B6A,props:t}),!t.isEditing&&$_(t.value)&&e.push({component:u6A,props:t}),e}function Bl(t){return t.map((e,A)=>m6A.test(e)?"["+e+"]":/[.[\]]/.test(e)||e===""?'["'+(function(i){return i.replace(/"/g,'\\"')})(e)+'"]':(A>0?".":"")+e).join("")}function p6A(t){for(var e=[],A=0;Ao==='"',!0)),n('"')):e.push(i(o=>o==="]")),n("]")):e.push(i(o=>o==="."||o==="["));function i(o){for(var a=arguments.length>1&&arguments[1]!==void 0&&arguments[1],r="";A({x:t,y:t}),y6A={left:"right",right:"left",bottom:"top",top:"bottom"},v6A={start:"end",end:"start"};function DZ(t,e,A){return Qd(t,QD(e,A))}function ND(t,e){return typeof t=="function"?t(e):t}function bd(t){return t.split("-")[0]}function FD(t){return t.split("-")[1]}function m$(t){return t==="x"?"y":"x"}function w$(t){return t==="y"?"height":"width"}var b6A=new Set(["top","bottom"]);function uI(t){return b6A.has(bd(t))?"y":"x"}function D$(t){return m$(uI(t))}function gR(t){return t.replace(/start|end/g,e=>v6A[e])}var yZ=["left","right"],vZ=["right","left"],M6A=["top","bottom"],S6A=["bottom","top"];function k6A(t,e,A,i){var n=FD(t),o=(function(a,r,s){switch(a){case"top":case"bottom":return s?r?vZ:yZ:r?yZ:vZ;case"left":case"right":return r?M6A:S6A;default:return[]}})(bd(t),A==="start",i);return n&&(o=o.map(a=>a+"-"+n),e&&(o=o.concat(o.map(gR)))),o}function H5(t){return t.replace(/left|right|bottom|top/g,e=>y6A[e])}function x6A(t){return typeof t!="number"?(function(e){return Me({top:0,right:0,bottom:0,left:0},e)})(t):{top:t,right:t,bottom:t,left:t}}function fD(t){var{x:e,y:A,width:i,height:n}=t;return{width:i,height:n,top:A,left:e,right:e+i,bottom:A+n,x:e,y:A}}function bZ(t,e,A){var i,{reference:n,floating:o}=t,a=uI(e),r=D$(e),s=w$(r),l=bd(e),g=a==="y",C=n.x+n.width/2-o.width/2,I=n.y+n.height/2-o.height/2,d=n[s]/2-o[s]/2;switch(l){case"top":i={x:C,y:n.y-o.height};break;case"bottom":i={x:C,y:n.y+n.height};break;case"right":i={x:n.x+n.width,y:I};break;case"left":i={x:n.x-o.width,y:I};break;default:i={x:n.x,y:n.y}}switch(FD(e)){case"start":i[r]-=d*(A&&g?-1:1);break;case"end":i[r]+=d*(A&&g?-1:1)}return i}var _6A=(function(){var t=zt(function*(e,A,i){for(var{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:r}=i,s=a.filter(Boolean),l=yield r.isRTL==null?void 0:r.isRTL(A),g=yield r.getElementRects({reference:e,floating:A,strategy:o}),{x:C,y:I}=bZ(g,n,l),d=n,h={},E=0,f=0;f"u")&&(t instanceof ShadowRoot||t instanceof Ol(t).ShadowRoot)}var N6A=new Set(["inline","contents"]);function Tf(t){var{overflow:e,overflowX:A,overflowY:i,display:n}=pc(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+A)&&!N6A.has(n)}var F6A=new Set(["table","td","th"]);function L6A(t){return F6A.has(zh(t))}var G6A=[":popover-open",":modal"];function pD(t){return G6A.some(e=>{try{return t.matches(e)}catch(A){return!1}})}var K6A=["transform","translate","scale","rotate","perspective"],U6A=["transform","translate","scale","rotate","perspective","filter"],T6A=["paint","layout","strict","content"];function IR(t){var e=PR(),A=fc(t)?pc(t):t;return K6A.some(i=>!!A[i]&&A[i]!=="none")||!!A.containerType&&A.containerType!=="normal"||!e&&!!A.backdropFilter&&A.backdropFilter!=="none"||!e&&!!A.filter&&A.filter!=="none"||U6A.some(i=>(A.willChange||"").includes(i))||T6A.some(i=>(A.contain||"").includes(i))}function PR(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}var J6A=new Set(["html","body","#document"]);function xh(t){return J6A.has(zh(t))}function pc(t){return Ol(t).getComputedStyle(t)}function GD(t){return fc(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function fI(t){if(zh(t)==="html")return t;var e=t.assignedSlot||t.parentNode||MZ(t)&&t.host||_0(t);return MZ(e)?e.host:e}function b$(t){var e=fI(t);return xh(e)?t.ownerDocument?t.ownerDocument.body:t.body:R0(e)&&Tf(e)?e:b$(e)}function Jf(t,e,A){var i;e===void 0&&(e=[]),A===void 0&&(A=!0);var n=b$(t),o=n===((i=t.ownerDocument)==null?void 0:i.body),a=Ol(n);if(o){var r=dR(a);return e.concat(a,a.visualViewport||[],Tf(n)?n:[],r&&A?Jf(r):[])}return e.concat(n,Jf(n,[],A))}function dR(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function M$(t){var e=pc(t),A=parseFloat(e.width)||0,i=parseFloat(e.height)||0,n=R0(t),o=n?t.offsetWidth:A,a=n?t.offsetHeight:i,r=uD(A)!==o||uD(i)!==a;return r&&(A=o,i=a),{width:A,height:i,$:r}}function jR(t){return fc(t)?t:t.contextElement}function _h(t){var e=jR(t);if(!R0(e))return x0(1);var A=e.getBoundingClientRect(),{width:i,height:n,$:o}=M$(e),a=(o?uD(A.width):A.width)/i,r=(o?uD(A.height):A.height)/n;return a&&Number.isFinite(a)||(a=1),r&&Number.isFinite(r)||(r=1),{x:a,y:r}}var O6A=x0(0);function S$(t){var e=Ol(t);return PR()&&e.visualViewport?{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}:O6A}function Md(t,e,A,i){e===void 0&&(e=!1),A===void 0&&(A=!1);var n=t.getBoundingClientRect(),o=jR(t),a=x0(1);e&&(i?fc(i)&&(a=_h(i)):a=_h(t));var r=(function(b,x,F){return x===void 0&&(x=!1),!(!F||x&&F!==Ol(b))&&x})(o,A,i)?S$(o):x0(0),s=(n.left+r.x)/a.x,l=(n.top+r.y)/a.y,g=n.width/a.x,C=n.height/a.y;if(o)for(var I=Ol(o),d=i&&fc(i)?Ol(i):i,h=I,E=dR(h);E&&i&&d!==h;){var f=_h(E),m=E.getBoundingClientRect(),v=pc(E),k=m.left+(E.clientLeft+parseFloat(v.paddingLeft))*f.x,S=m.top+(E.clientTop+parseFloat(v.paddingTop))*f.y;s*=f.x,l*=f.y,g*=f.x,C*=f.y,s+=k,l+=S,E=dR(h=Ol(E))}return fD({width:g,height:C,x:s,y:l})}function mD(t,e){var A=GD(t).scrollLeft;return e?e.left+A:Md(_0(t)).left+A}function k$(t,e){var A=t.getBoundingClientRect();return{x:A.left+e.scrollLeft-mD(t,A),y:A.top+e.scrollTop}}var Y6A=new Set(["absolute","fixed"]);function SZ(t,e,A){var i;if(e==="viewport")i=(function(o,a){var r=Ol(o),s=_0(o),l=r.visualViewport,g=s.clientWidth,C=s.clientHeight,I=0,d=0;if(l){g=l.width,C=l.height;var h=PR();(!h||h&&a==="fixed")&&(I=l.offsetLeft,d=l.offsetTop)}var E=mD(s);if(E<=0){var f=s.ownerDocument,m=f.body,v=getComputedStyle(m),k=f.compatMode==="CSS1Compat"&&parseFloat(v.marginLeft)+parseFloat(v.marginRight)||0,S=Math.abs(s.clientWidth-m.clientWidth-k);S<=25&&(g-=S)}else E<=25&&(g+=E);return{width:g,height:C,x:I,y:d}})(t,A);else if(e==="document")i=(function(o){var a=_0(o),r=GD(o),s=o.ownerDocument.body,l=Qd(a.scrollWidth,a.clientWidth,s.scrollWidth,s.clientWidth),g=Qd(a.scrollHeight,a.clientHeight,s.scrollHeight,s.clientHeight),C=-r.scrollLeft+mD(o),I=-r.scrollTop;return pc(s).direction==="rtl"&&(C+=Qd(a.clientWidth,s.clientWidth)-l),{width:l,height:g,x:C,y:I}})(_0(t));else if(fc(e))i=(function(o,a){var r=Md(o,!0,a==="fixed"),s=r.top+o.clientTop,l=r.left+o.clientLeft,g=R0(o)?_h(o):x0(1);return{width:o.clientWidth*g.x,height:o.clientHeight*g.y,x:l*g.x,y:s*g.y}})(e,A);else{var n=S$(t);i={x:e.x-n.x,y:e.y-n.y,width:e.width,height:e.height}}return fD(i)}function x$(t,e){var A=fI(t);return!(A===e||!fc(A)||xh(A))&&(pc(A).position==="fixed"||x$(A,e))}function H6A(t,e,A){var i=R0(e),n=_0(e),o=A==="fixed",a=Md(t,!0,o,e),r={scrollLeft:0,scrollTop:0},s=x0(0);function l(){s.x=mD(n)}if(i||!i&&!o)if((zh(e)!=="body"||Tf(n))&&(r=GD(e)),i){var g=Md(e,!0,o,e);s.x=g.x+e.clientLeft,s.y=g.y+e.clientTop}else n&&l();o&&!i&&n&&l();var C=!n||i||o?x0(0):k$(n,r);return{x:a.left+r.scrollLeft-s.x-C.x,y:a.top+r.scrollTop-s.y-C.y,width:a.width,height:a.height}}function G_(t){return pc(t).position==="static"}function kZ(t,e){if(!R0(t)||pc(t).position==="fixed")return null;if(e)return e(t);var A=t.offsetParent;return _0(t)===A&&(A=A.ownerDocument.body),A}function xZ(t,e){var A=Ol(t);if(pD(t))return A;if(!R0(t)){for(var i=fI(t);i&&!xh(i);){if(fc(i)&&!G_(i))return i;i=fI(i)}return A}for(var n=kZ(t,e);n&&L6A(n)&&G_(n);)n=kZ(n,e);return n&&xh(n)&&G_(n)&&!IR(n)?A:n||(function(o){for(var a=fI(o);R0(a)&&!xh(a);){if(IR(a))return a;if(pD(a))return null;a=fI(a)}return null})(t)||A}var z6A={convertOffsetParentRelativeRectToViewportRelativeRect:function(t){var{elements:e,rect:A,offsetParent:i,strategy:n}=t,o=n==="fixed",a=_0(i),r=!!e&&pD(e.floating);if(i===a||r&&o)return A;var s={scrollLeft:0,scrollTop:0},l=x0(1),g=x0(0),C=R0(i);if((C||!C&&!o)&&((zh(i)!=="body"||Tf(a))&&(s=GD(i)),R0(i))){var I=Md(i);l=_h(i),g.x=I.x+i.clientLeft,g.y=I.y+i.clientTop}var d=!a||C||o?x0(0):k$(a,s);return{width:A.width*l.x,height:A.height*l.y,x:A.x*l.x-s.scrollLeft*l.x+g.x+d.x,y:A.y*l.y-s.scrollTop*l.y+g.y+d.y}},getDocumentElement:_0,getClippingRect:function(t){var{element:e,boundary:A,rootBoundary:i,strategy:n}=t,o=A==="clippingAncestors"?pD(e)?[]:(function(l,g){var C=g.get(l);if(C)return C;for(var I=Jf(l,[],!1).filter(v=>fc(v)&&zh(v)!=="body"),d=null,h=pc(l).position==="fixed",E=h?fI(l):l;fc(E)&&!xh(E);){var f=pc(E),m=IR(E);m||f.position!=="fixed"||(d=null),(h?!m&&!d:!m&&f.position==="static"&&d&&Y6A.has(d.position)||Tf(E)&&!m&&x$(l,E))?I=I.filter(v=>v!==E):d=f,E=fI(E)}return g.set(l,I),I})(e,this._c):[].concat(A),a=[...o,i],r=a[0],s=a.reduce((l,g)=>{var C=SZ(e,g,n);return l.top=Qd(C.top,l.top),l.right=QD(C.right,l.right),l.bottom=QD(C.bottom,l.bottom),l.left=Qd(C.left,l.left),l},SZ(e,r,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:xZ,getElementRects:(function(){var t=zt(function*(e){var A=this.getOffsetParent||xZ,i=this.getDimensions,n=yield i(e.floating);return{reference:H6A(e.reference,yield A(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}});return function(e){return t.apply(this,arguments)}})(),getClientRects:function(t){return Array.from(t.getClientRects())},getDimensions:function(t){var{width:e,height:A}=M$(t);return{width:e,height:A}},getScale:_h,isElement:fc,isRTL:function(t){return pc(t).direction==="rtl"}};function _Z(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function P6A(t,e,A,i){i===void 0&&(i={});var{ancestorScroll:n=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:s=!1}=i,l=jR(t),g=n||o?[...l?Jf(l):[],...Jf(e)]:[];g.forEach(f=>{n&&f.addEventListener("scroll",A,{passive:!0}),o&&f.addEventListener("resize",A)});var C,I=l&&r?(function(f,m){var v,k=null,S=_0(f);function b(){var x;clearTimeout(v),(x=k)==null||x.disconnect(),k=null}return(function x(F,z){F===void 0&&(F=!1),z===void 0&&(z=1),b();var P=f.getBoundingClientRect(),{left:W,top:eA,width:Z,height:EA}=P;if(F||m(),Z&&EA){var X={rootMargin:-Y5(eA)+"px "+-Y5(S.clientWidth-(W+Z))+"px "+-Y5(S.clientHeight-(eA+EA))+"px "+-Y5(W)+"px",threshold:Qd(0,QD(1,z))||1},iA=!0;try{k=new IntersectionObserver(AA,Me(Me({},X),{},{root:S.ownerDocument}))}catch(IA){k=new IntersectionObserver(AA,X)}k.observe(f)}function AA(IA){var aA=IA[0].intersectionRatio;if(aA!==z){if(!iA)return x();aA?x(!1,aA):v=setTimeout(()=>{x(!1,1e-7)},1e3)}aA!==1||_Z(P,f.getBoundingClientRect())||x(),iA=!1}})(!0),b})(l,A):null,d=-1,h=null;a&&(h=new ResizeObserver(f=>{var[m]=f;m&&m.target===l&&h&&(h.unobserve(e),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var v;(v=h)==null||v.observe(e)})),A()}),l&&!s&&h.observe(l),h.observe(e));var E=s?Md(t):null;return s&&(function f(){var m=Md(t);E&&!_Z(E,m)&&A(),E=m,C=requestAnimationFrame(f)})(),A(),()=>{var f;g.forEach(m=>{n&&m.removeEventListener("scroll",A),o&&m.removeEventListener("resize",A)}),I?.(),(f=h)==null||f.disconnect(),h=null,s&&cancelAnimationFrame(C)}}var j6A=function(t){return t===void 0&&(t=0),{name:"offset",options:t,fn:e=>zt(function*(){var A,i,{x:n,y:o,placement:a,middlewareData:r}=e,s=yield(function(l,g){return CR.apply(this,arguments)})(e,t);return a===((A=r.offset)==null?void 0:A.placement)&&(i=r.arrow)!=null&&i.alignmentOffset?{}:{x:n+s.x,y:o+s.y,data:Me(Me({},s),{},{placement:a})}})()}},q6A=function(t){return t===void 0&&(t={}),{name:"shift",options:t,fn:e=>zt(function*(){var{x:A,y:i,placement:n}=e,o=ND(t,e),{mainAxis:a=!0,crossAxis:r=!1,limiter:s={fn:k=>{var{x:S,y:b}=k;return{x:S,y:b}}}}=o,l=TZ(o,RpA),g={x:A,y:i},C=yield y$(e,l),I=uI(bd(n)),d=m$(I),h=g[d],E=g[I];if(a){var f=d==="y"?"bottom":"right";h=DZ(h+C[d==="y"?"top":"left"],h,h-C[f])}if(r){var m=I==="y"?"bottom":"right";E=DZ(E+C[I==="y"?"top":"left"],E,E-C[m])}var v=s.fn(Me(Me({},e),{},{[d]:h,[I]:E}));return Me(Me({},v),{},{data:{x:v.x-A,y:v.y-i,enabled:{[d]:a,[I]:r}}})})()}},V6A=function(t){return t===void 0&&(t={}),{name:"flip",options:t,fn:e=>zt(function*(){var A,i,{placement:n,middlewareData:o,rects:a,initialPlacement:r,platform:s,elements:l}=e,g=ND(t,e),{mainAxis:C=!0,crossAxis:I=!0,fallbackPlacements:d,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:E="none",flipAlignment:f=!0}=g,m=TZ(g,_pA);if((A=o.arrow)!=null&&A.alignmentOffset)return{};var v=bd(n),k=uI(r),S=bd(r)===r,b=yield s.isRTL==null?void 0:s.isRTL(l.floating),x=d||(S||!f?[H5(r)]:(function(uA){var UA=H5(uA);return[gR(uA),UA,gR(UA)]})(r)),F=E!=="none";!d&&F&&x.push(...k6A(r,f,E,b));var z=[r,...x],P=yield y$(e,m),W=[],eA=((i=o.flip)==null?void 0:i.overflows)||[];if(C&&W.push(P[v]),I){var Z=(function(uA,UA,$A){$A===void 0&&($A=!1);var zA=FD(uA),pA=D$(uA),PA=w$(pA),Ue=pA==="x"?zA===($A?"end":"start")?"right":"left":zA==="start"?"bottom":"top";return UA.reference[PA]>UA.floating[PA]&&(Ue=H5(Ue)),[Ue,H5(Ue)]})(n,a,b);W.push(P[Z[0]],P[Z[1]])}if(eA=[...eA,{placement:n,overflows:W}],!W.every(uA=>uA<=0)){var EA,X,iA=(((EA=o.flip)==null?void 0:EA.index)||0)+1,AA=z[iA];if(AA&&(!(I==="alignment"&&k!==uI(AA))||eA.every(uA=>uI(uA.placement)!==k||uA.overflows[0]>0)))return{data:{index:iA,overflows:eA},reset:{placement:AA}};var IA=(X=eA.filter(uA=>uA.overflows[0]<=0).sort((uA,UA)=>uA.overflows[1]-UA.overflows[1])[0])==null?void 0:X.placement;if(!IA)switch(h){case"bestFit":var aA,rA=(aA=eA.filter(uA=>{if(F){var UA=uI(uA.placement);return UA===k||UA==="y"}return!0}).map(uA=>[uA.placement,uA.overflows.filter(UA=>UA>0).reduce((UA,$A)=>UA+$A,0)]).sort((uA,UA)=>uA[1]-UA[1])[0])==null?void 0:aA[0];rA&&(IA=rA);break;case"initialPlacement":IA=r}if(n!==IA)return{reset:{placement:IA}}}return{}})()}};function W6A(t){var e,A,i={autoUpdate:!0},n=t,o=s=>Me(Me(Me({},i),t||{}),s||{}),a=s=>{e&&A&&(n=o(s),((l,g,C)=>{var I=new Map,d=Me({platform:z6A},C),h=Me(Me({},d.platform),{},{_c:I});return _6A(l,g,Me(Me({},d),{},{platform:h}))})(e,A,n).then(l=>{var g;Object.assign(A.style,{position:l.strategy,left:"".concat(l.x,"px"),top:"".concat(l.y,"px")}),!((g=n)===null||g===void 0)&&g.onComputed&&n.onComputed(l)}))},r=s=>{Dg(s.subscribe(l=>{e===void 0?(e=l,a()):(Object.assign(e,l),a())}))};return[s=>{if("subscribe"in s)return r(s),{};e=s,a()},(s,l)=>{var g;A=s,n=o(l),setTimeout(()=>a(l),0),a(l);var C=()=>{g&&(g(),g=void 0)},I=function(){var{autoUpdate:d}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:n||{};C(),d!==!1&&kX().then(()=>P6A(e,A,()=>a(n),d===!0?{}:d))};return g=I(),{update(d){a(d),g=I(d)},destroy(){C()}}},a]}function Z6A(t){var{loadOptions:e,filterText:A,items:i,multiple:n,value:o,itemId:a,groupBy:r,filterSelectedItems:s,itemFilter:l,convertStringItemsToObjects:g,filterGroupedItems:C,label:I}=t;if(i&&e)return i;if(!i)return[];i&&i.length>0&&typeof i[0]!="object"&&(i=g(i));var d=i.filter(h=>{var E=l(h[I],A,h);return E&&n&&o!=null&&o.length&&(E=!o.some(f=>!!s&&f[a]===h[a])),E});return r&&(d=C(d)),d}function X6A(t){return _$.apply(this,arguments)}function _$(){return(_$=zt(function*(t){var{dispatch:e,loadOptions:A,convertStringItemsToObjects:i,filterText:n}=t,o=yield A(n).catch(a=>{console.warn("svelte-select loadOptions error :>> ",a),e("error",{type:"loadOptions",details:a})});if(o&&!o.cancelled)return o?(o&&o.length>0&&typeof o[0]!="object"&&(o=i(o)),e("loaded",{items:o})):o=[],{filteredItems:o,loading:!1,focused:!0,listOpen:!0}})).apply(this,arguments)}Zt(` + svg.svelte-1kxu7be { + width: var(--chevron-icon-width, 20px); + height: var(--chevron-icon-width, 20px); + color: var(--chevron-icon-colour, currentColor); + } +`);var $6A=xI(``);Zt(` + svg.svelte-1hraxrc { + width: var(--clear-icon-width, 20px); + height: var(--clear-icon-width, 20px); + color: var(--clear-icon-color, currentColor); + } +`);var A8A=xI(``);function K_(t){CA(t,A8A())}Zt(` + .loading.svelte-y9fi5p { + width: var(--spinner-width, 20px); + height: var(--spinner-height, 20px); + color: var(--spinner-color, var(--icons-color)); + animation: svelte-y9fi5p-rotate 0.75s linear infinite; + transform-origin: center center; + transform: none; + } + + .circle_path.svelte-y9fi5p { + stroke-dasharray: 90; + stroke-linecap: round; + } + + @keyframes svelte-y9fi5p-rotate { + 100% { + transform: rotate(360deg); + } + } +`);var e8A=xI('');Zt(` + .svelte-select.svelte-1ul7oo4 { + /* deprecating camelCase custom props in favour of kebab-case for v5 */ + --borderRadius: var(--border-radius); + --clearSelectColor: var(--clear-select-color); + --clearSelectWidth: var(--clear-select-width); + --disabledBackground: var(--disabled-background); + --disabledBorderColor: var(--disabled-border-color); + --disabledColor: var(--disabled-color); + --disabledPlaceholderColor: var(--disabled-placeholder-color); + --disabledPlaceholderOpacity: var(--disabled-placeholder-opacity); + --errorBackground: var(--error-background); + --errorBorder: var(--error-border); + --groupItemPaddingLeft: var(--group-item-padding-left); + --groupTitleColor: var(--group-title-color); + --groupTitleFontSize: var(--group-title-font-size); + --groupTitleFontWeight: var(--group-title-font-weight); + --groupTitlePadding: var(--group-title-padding); + --groupTitleTextTransform: var(--group-title-text-transform); + --groupTitleBorderColor: var(--group-title-border-color); + --groupTitleBorderWidth: var(--group-title-border-width); + --groupTitleBorderStyle: var(--group-title-border-style); + --indicatorColor: var(--chevron-color); + --indicatorHeight: var(--chevron-height); + --indicatorWidth: var(--chevron-width); + --inputColor: var(--input-color); + --inputLeft: var(--input-left); + --inputLetterSpacing: var(--input-letter-spacing); + --inputMargin: var(--input-margin); + --inputPadding: var(--input-padding); + --itemActiveBackground: var(--item-active-background); + --itemColor: var(--item-color); + --itemFirstBorderRadius: var(--item-first-border-radius); + --itemHoverBG: var(--item-hover-bg); + --itemHoverColor: var(--item-hover-color); + --itemIsActiveBG: var(--item-is-active-bg); + --itemIsActiveColor: var(--item-is-active-color); + --itemIsNotSelectableColor: var(--item-is-not-selectable-color); + --itemPadding: var(--item-padding); + --listBackground: var(--list-background); + --listBorder: var(--list-border); + --listBorderRadius: var(--list-border-radius); + --listEmptyColor: var(--list-empty-color); + --listEmptyPadding: var(--list-empty-padding); + --listEmptyTextAlign: var(--list-empty-text-align); + --listMaxHeight: var(--list-max-height); + --listPosition: var(--list-position); + --listShadow: var(--list-shadow); + --listZIndex: var(--list-z-index); + --multiItemBG: var(--multi-item-bg); + --multiItemBorderRadius: var(--multi-item-border-radius); + --multiItemDisabledHoverBg: var(--multi-item-disabled-hover-bg); + --multiItemDisabledHoverColor: var(--multi-item-disabled-hover-color); + --multiItemHeight: var(--multi-item-height); + --multiItemMargin: var(--multi-item-margin); + --multiItemPadding: var(--multi-item-padding); + --multiSelectInputMargin: var(--multi-select-input-margin); + --multiSelectInputPadding: var(--multi-select-input-padding); + --multiSelectPadding: var(--multi-select-padding); + --placeholderColor: var(--placeholder-color); + --placeholderOpacity: var(--placeholder-opacity); + --selectedItemPadding: var(--selected-item-padding); + --spinnerColor: var(--spinner-color); + --spinnerHeight: var(--spinner-height); + --spinnerWidth: var(--spinner-width); + + --internal-padding: 0 0 0 16px; + + border: var(--border, 1px solid #d8dbdf); + border-radius: var(--border-radius, 6px); + min-height: var(--height, 42px); + position: relative; + display: flex; + align-items: stretch; + padding: var(--padding, var(--internal-padding)); + background: var(--background, #fff); + margin: var(--margin, 0); + width: var(--width, 100%); + font-size: var(--font-size, 16px); + max-height: var(--max-height); + } + + .svelte-1ul7oo4 { + box-sizing: var(--box-sizing, border-box); + } + + .svelte-select.svelte-1ul7oo4:hover { + border: var(--border-hover, 1px solid #b2b8bf); + } + + .value-container.svelte-1ul7oo4 { + display: flex; + flex: 1 1 0%; + flex-wrap: wrap; + align-items: center; + gap: 5px 10px; + padding: var(--value-container-padding, 5px 0); + position: relative; + overflow: var(--value-container-overflow, hidden); + align-self: stretch; + } + + .prepend.svelte-1ul7oo4, + .indicators.svelte-1ul7oo4 { + display: flex; + flex-shrink: 0; + align-items: center; + } + + .indicators.svelte-1ul7oo4 { + position: var(--indicators-position); + top: var(--indicators-top); + right: var(--indicators-right); + bottom: var(--indicators-bottom); + } + + input.svelte-1ul7oo4 { + position: absolute; + cursor: default; + border: none; + color: var(--input-color, var(--item-color)); + padding: var(--input-padding, 0); + letter-spacing: var(--input-letter-spacing, inherit); + margin: var(--input-margin, 0); + min-width: 10px; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: transparent; + font-size: var(--font-size, 16px); + } + + .svelte-1ul7oo4:not(.multi) > .value-container:where(.svelte-1ul7oo4) > input:where(.svelte-1ul7oo4) { + width: 100%; + height: 100%; + } + + input.svelte-1ul7oo4::placeholder { + color: var(--placeholder-color, #78848f); + opacity: var(--placeholder-opacity, 1); + } + + input.svelte-1ul7oo4:focus { + outline: none; + } + + .svelte-select.focused.svelte-1ul7oo4 { + border: var(--border-focused, 1px solid #006fe8); + border-radius: var(--border-radius-focused, var(--border-radius, 6px)); + } + + .disabled.svelte-1ul7oo4 { + background: var(--disabled-background, #ebedef); + border-color: var(--disabled-border-color, #ebedef); + color: var(--disabled-color, #c1c6cc); + } + + .disabled.svelte-1ul7oo4 input:where(.svelte-1ul7oo4)::placeholder { + color: var(--disabled-placeholder-color, #c1c6cc); + opacity: var(--disabled-placeholder-opacity, 1); + } + + .selected-item.svelte-1ul7oo4 { + position: relative; + overflow: var(--selected-item-overflow, hidden); + padding: var(--selected-item-padding, 0 20px 0 0); + text-overflow: ellipsis; + white-space: nowrap; + color: var(--selected-item-color, inherit); + font-size: var(--font-size, 16px); + } + + .multi.svelte-1ul7oo4 .selected-item:where(.svelte-1ul7oo4) { + position: absolute; + line-height: var(--height, 42px); + height: var(--height, 42px); + } + + .selected-item.svelte-1ul7oo4:focus { + outline: none; + } + + .hide-selected-item.svelte-1ul7oo4 { + opacity: 0; + } + + .icon.svelte-1ul7oo4 { + display: flex; + align-items: center; + justify-content: center; + } + + .clear-select.svelte-1ul7oo4 { + all: unset; + display: flex; + align-items: center; + justify-content: center; + width: var(--clear-select-width, 40px); + height: var(--clear-select-height, 100%); + color: var(--clear-select-color, var(--icons-color)); + margin: var(--clear-select-margin, 0); + pointer-events: all; + flex-shrink: 0; + } + + .clear-select.svelte-1ul7oo4:focus { + outline: var(--clear-select-focus-outline, 1px solid #006fe8); + } + + .loading.svelte-1ul7oo4 { + width: var(--loading-width, 40px); + height: var(--loading-height); + color: var(--loading-color, var(--icons-color)); + margin: var(--loading--margin, 0); + flex-shrink: 0; + } + + .chevron.svelte-1ul7oo4 { + width: var(--chevron-width, 40px); + height: var(--chevron-height, 40px); + background: var(--chevron-background, transparent); + pointer-events: var(--chevron-pointer-events, none); + color: var(--chevron-color, var(--icons-color)); + border: var(--chevron-border, 0 0 0 1px solid #d8dbdf); + flex-shrink: 0; + } + + .multi.svelte-1ul7oo4 { + padding: var(--multi-select-padding, var(--internal-padding)); + } + + .multi.svelte-1ul7oo4 input:where(.svelte-1ul7oo4) { + padding: var(--multi-select-input-padding, 0); + position: relative; + margin: var(--multi-select-input-margin, 5px 0); + flex: 1 1 40px; + } + + .svelte-select.error.svelte-1ul7oo4 { + border: var(--error-border, 1px solid #ff2d55); + background: var(--error-background, #fff); + } + + .a11y-text.svelte-1ul7oo4 { + z-index: 9999; + border: 0px; + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + width: 1px; + position: absolute; + overflow: hidden; + padding: 0px; + white-space: nowrap; + } + + .multi-item.svelte-1ul7oo4 { + background: var(--multi-item-bg, #ebedef); + margin: var(--multi-item-margin, 0); + outline: var(--multi-item-outline, 1px solid #ddd); + border-radius: var(--multi-item-border-radius, 4px); + height: var(--multi-item-height, 25px); + line-height: var(--multi-item-height, 25px); + display: flex; + cursor: default; + padding: var(--multi-item-padding, 0 5px); + overflow: hidden; + gap: var(--multi-item-gap, 4px); + outline-offset: -1px; + max-width: var(--multi-max-width, none); + color: var(--multi-item-color, var(--item-color)); + } + + .multi-item.disabled.svelte-1ul7oo4:hover { + background: var(--multi-item-disabled-hover-bg, #ebedef); + color: var(--multi-item-disabled-hover-color, #c1c6cc); + } + + .multi-item-text.svelte-1ul7oo4 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .multi-item-clear.svelte-1ul7oo4 { + display: flex; + align-items: center; + justify-content: center; + --clear-icon-color: var(--multi-item-clear-icon-color, #000); + } + + .multi-item.active.svelte-1ul7oo4 { + outline: var(--multi-item-active-outline, 1px solid #006fe8); + } + + .svelte-select-list.svelte-1ul7oo4 { + box-shadow: var(--list-shadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24)); + border-radius: var(--list-border-radius, 4px); + max-height: var(--list-max-height, 252px); + overflow-y: auto; + background: var(--list-background, #fff); + position: var(--list-position, absolute); + z-index: var(--list-z-index, 2); + border: var(--list-border); + } + + .prefloat.svelte-1ul7oo4 { + opacity: 0; + pointer-events: none; + } + + .list-group-title.svelte-1ul7oo4 { + color: var(--group-title-color, #8f8f8f); + cursor: default; + font-size: var(--group-title-font-size, 16px); + font-weight: var(--group-title-font-weight, 600); + height: var(--height, 42px); + line-height: var(--height, 42px); + padding: var(--group-title-padding, 0 20px); + text-overflow: ellipsis; + overflow-x: hidden; + white-space: nowrap; + text-transform: var(--group-title-text-transform, uppercase); + border-width: var(--group-title-border-width, medium); + border-style: var(--group-title-border-style, none); + border-color: var(--group-title-border-color, color); + } + + .empty.svelte-1ul7oo4 { + text-align: var(--list-empty-text-align, center); + padding: var(--list-empty-padding, 20px 0); + color: var(--list-empty-color, #78848f); + } + + .item.svelte-1ul7oo4 { + cursor: default; + height: var(--item-height, var(--height, 42px)); + line-height: var(--item-line-height, var(--height, 42px)); + padding: var(--item-padding, 0 20px); + color: var(--item-color, inherit); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + transition: var(--item-transition, all 0.2s); + align-items: center; + width: 100%; + } + + .item.group-item.svelte-1ul7oo4 { + padding-left: var(--group-item-padding-left, 40px); + } + + .item.svelte-1ul7oo4:active { + background: var(--item-active-background, #b9daff); + } + + .item.active.svelte-1ul7oo4 { + background: var(--item-is-active-bg, #007aff); + color: var(--item-is-active-color, #fff); + } + + .item.first.svelte-1ul7oo4 { + border-radius: var(--item-first-border-radius, 4px 4px 0 0); + } + + .item.hover.svelte-1ul7oo4:not(.active) { + background: var(--item-hover-bg, #e7f2ff); + color: var(--item-hover-color, inherit); + } + + .item.not-selectable.svelte-1ul7oo4, + .item.hover.item.not-selectable.svelte-1ul7oo4, + .item.active.item.not-selectable.svelte-1ul7oo4, + .item.not-selectable.svelte-1ul7oo4:active { + color: var(--item-is-not-selectable-color, #999); + background: transparent; + } + + .required.svelte-1ul7oo4 { + opacity: 0; + z-index: -1; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + } +`);var t8A=JA('
    '),i8A=JA('
    No options
    '),n8A=JA('
    '),o8A=JA(' ',1),a8A=JA('
    '),r8A=JA('
    '),s8A=JA("
    "),l8A=JA(''),g8A=JA(''),c8A=JA(''),C8A=JA(''),I8A=JA(''),d8A=JA('
    ');function Cd(t,e){var A=(function(mA){var FA={};for(var le in mA.children&&(FA.default=!0),mA.$$slots)FA[le]=!0;return FA})(e);Nt(e,!1);var i,n=BA(),o=BA(),a=BA(),r=BA(),s=BA(),l=BA(),g=BA(),C=BA(),I=BA(),d=smA(),h=L(e,"justValue",12,null),E=L(e,"filter",8,Z6A),f=L(e,"getItems",8,X6A),m=L(e,"id",8,null),v=L(e,"name",8,null),k=L(e,"container",12,void 0),S=L(e,"input",12,void 0),b=L(e,"multiple",8,!1),x=L(e,"multiFullItemClearable",8,!1),F=L(e,"disabled",8,!1),z=L(e,"focused",12,!1),P=L(e,"value",12,null),W=L(e,"filterText",12,""),eA=L(e,"placeholder",8,"Please select"),Z=L(e,"placeholderAlwaysShow",8,!1),EA=L(e,"items",12,null),X=L(e,"label",8,"label"),iA=L(e,"itemFilter",8,(mA,FA,le)=>"".concat(mA).toLowerCase().includes(FA.toLowerCase())),AA=L(e,"groupBy",8,void 0),IA=L(e,"groupFilter",8,mA=>mA),aA=L(e,"groupHeaderSelectable",8,!1),rA=L(e,"itemId",8,"value"),uA=L(e,"loadOptions",8,void 0),UA=L(e,"containerStyles",8,""),$A=L(e,"hasError",8,!1),zA=L(e,"filterSelectedItems",8,!0),pA=L(e,"required",8,!1),PA=L(e,"closeListOnChange",8,!0),Ue=L(e,"clearFilterTextOnBlur",8,!0),_e=L(e,"createGroupHeaderItem",8,(mA,FA)=>({value:mA,[X()]:mA})),YA=()=>c(g),fA=L(e,"searchable",8,!0),XA=L(e,"inputStyles",8,""),DA=L(e,"clearable",8,!0),ee=L(e,"loading",12,!1),NA=L(e,"listOpen",12,!1),ke=L(e,"debounce",8,function(mA){var FA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;clearTimeout(i),i=setTimeout(mA,FA)}),HA=L(e,"debounceWait",8,300),vA=L(e,"hideEmptyState",8,!1),Gt=L(e,"inputAttributes",24,()=>({})),ft=L(e,"listAutoWidth",8,!0),he=L(e,"showChevron",8,!1),Ot=L(e,"listOffset",8,5),He=L(e,"hoverItemIndex",12,0),je=L(e,"floatingConfig",24,()=>({})),pt=L(e,"class",8,""),xe=BA(),oi=BA(),j=BA(),$=BA(),oA=BA();function sA(mA){return mA.map((FA,le)=>({index:le,value:FA,label:"".concat(FA)}))}function TA(mA){var FA=[],le={};mA.forEach(nt=>{var rt=AA()(nt);FA.includes(rt)||(FA.push(rt),le[rt]=[],rt&&le[rt].push(Object.assign(_e()(rt,nt),{id:rt,groupHeader:!0,selectable:aA()}))),le[rt].push(Object.assign({groupItem:!!rt},nt))});var Ne=[];return IA()(FA).forEach(nt=>{le[nt]&&Ne.push(...le[nt])}),Ne}function de(){var mA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,FA=arguments.length>1?arguments[1]:void 0;He(mA<0?0:mA),!FA&&AA()&&c(g)[He()]&&!c(g)[He()].selectable&&Bi(1)}function Qe(){var mA=!0;if(P()){var FA=[],le=[];P().forEach(Ne=>{FA.includes(Ne[rA()])?mA=!1:(FA.push(Ne[rA()]),le.push(Ne))}),mA||P(le)}return mA}function GA(mA){var FA=mA?mA[rA()]:P()[rA()];return EA().find(le=>le[rA()]===FA)}function OA(mA){return ht.apply(this,arguments)}function ht(){return(ht=zt(function*(mA){var FA=P()[mA];P().length===1?P(void 0):P(P().filter(le=>le!==FA)),d("clear",FA)})).apply(this,arguments)}function tt(mA){if(z())switch(mA.stopPropagation(),mA.key){case"Escape":mA.preventDefault(),Ke();break;case"Enter":if(mA.preventDefault(),NA()){if(c(g).length===0)break;var FA=c(g)[He()];if(P()&&!b()&&P()[rA()]===FA[rA()]){Ke();break}G(c(g)[He()])}break;case"ArrowDown":mA.preventDefault(),NA()?Bi(1):(NA(!0),N(xe,void 0));break;case"ArrowUp":mA.preventDefault(),NA()?Bi(-1):(NA(!0),N(xe,void 0));break;case"Tab":if(NA()&&z()){if(c(g).length===0||P()&&P()[rA()]===c(g)[He()][rA()])return Ke();mA.preventDefault(),G(c(g)[He()]),Ke()}break;case"Backspace":if(!b()||W().length>0)return;if(b()&&P()&&P().length>0){if(OA(c(xe)!==void 0?c(xe):P().length-1),c(xe)===0||c(xe)===void 0)break;N(xe,P().length>c(xe)?c(xe)-1:void 0)}break;case"ArrowLeft":if(!P()||!b()||W().length>0)return;c(xe)===void 0?N(xe,P().length-1):P().length>c(xe)&&c(xe)!==0&&N(xe,c(xe)-1);break;case"ArrowRight":if(!P()||!b()||W().length>0||c(xe)===void 0)return;c(xe)===P().length-1?N(xe,void 0):c(xe)0?NA(!0):void NA(!NA())}function hn(){d("clear",P()),P(void 0),Ke(),ze()}function Ke(){Ue()&&W(""),NA(!1)}lmA(zt(function*(){N(oi,P()),N(j,W()),N($,b())})),As(()=>{NA()&&z(!0),z()&&S()&&S().focus()});var nn=L(e,"ariaValues",8,mA=>"Option ".concat(mA,", selected.")),Si=L(e,"ariaListOpen",8,(mA,FA)=>"You are currently focused on option ".concat(mA,". There are ").concat(FA," results available.")),Li=L(e,"ariaFocused",8,()=>"Select is focused, type to refine list, press down to open the menu."),Zi,bt=BA(null);function on(){clearTimeout(Zi),Zi=setTimeout(()=>{Kt=!1},100)}Dg(()=>{var mA;(mA=c(bt))===null||mA===void 0||mA.remove()});var Kt=!1;function G(mA){mA&&mA.selectable!==!1&&(function(FA){if(FA){W("");var le=Object.assign({},FA);if(le.groupHeader&&!le.selectable)return;P(b()?P()?P().concat([le]):[le]:P(le)),setTimeout(()=>{PA()&&Ke(),N(xe,void 0),d("change",P()),d("select",FA)})}})(mA)}function dt(mA){Kt||He(mA)}function Bi(mA){if(c(g).filter(le=>!Object.hasOwn(le,"selectable")||le.selectable===!0).length===0)return He(0);mA>0&&He()===c(g).length-1?He(0):mA<0&&He()===0?He(c(g).length-1):He(He()+mA);var FA=c(g)[He()];FA&&FA.selectable===!1&&(mA!==1&&mA!==-1||Bi(mA))}function Qn(mA,FA,le){if(!b())return FA&&FA[le]===mA[le]}var un=Yo,Vn=Yo;function Yo(mA){return{update(FA){FA.scroll&&(on(),mA.scrollIntoView({behavior:"auto",block:"nearest"}))}}}var Bo=BA({strategy:"absolute",placement:"bottom-start",middleware:[j6A(Ot()),V6A(),q6A()],autoUpdate:!1}),[No,Zo,Do]=W6A(c(Bo)),Ba=BA(!0);KA(()=>(K(EA()),K(P())),()=>{EA(),P()&&(function(){if(typeof P()=="string"){var mA=(EA()||[]).find(FA=>FA[rA()]===P());P(mA||{[rA()]:P(),label:P()})}else b()&&Array.isArray(P())&&P().length>0&&P(P().map(FA=>typeof FA=="string"?{value:FA,label:FA}:FA))})()}),KA(()=>(K(Gt()),K(fA())),()=>{!Gt()&&fA()||(N(oA,Object.assign({autocapitalize:"none",autocomplete:"off",autocorrect:"off",spellcheck:!1,tabindex:0,type:"text","aria-autocomplete":"list"},Gt())),m()&&Tl(oA,c(oA).id=m()),fA()||Tl(oA,c(oA).readonly=!0))}),KA(()=>K(b()),()=>{b()&&P()&&(Array.isArray(P())?P([...P()]):P([P()]))}),KA(()=>(c($),K(b())),()=>{c($)&&!b()&&P()&&P(null)}),KA(()=>(K(b()),K(P())),()=>{b()&&P()&&P().length>1&&Qe()}),KA(()=>K(P()),()=>{P()&&(b()?JSON.stringify(P())!==JSON.stringify(c(oi))&&Qe()&&d("input",P()):c(oi)&&JSON.stringify(P()[rA()])===JSON.stringify(c(oi)[rA()])||d("input",P()))}),KA(()=>(K(P()),K(b()),c(oi)),()=>{!P()&&b()&&c(oi)&&d("input",P())}),KA(()=>(K(z()),K(S())),()=>{!z()&&S()&&Ke()}),KA(()=>(K(W()),c(j)),()=>{W()!==c(j)&&(uA()||W().length!==0)&&(uA()?ke()(zt(function*(){ee(!0);var mA=yield f()({dispatch:d,loadOptions:uA(),convertStringItemsToObjects:sA,filterText:W()});mA?(ee(mA.loading),NA(NA()?mA.listOpen:W().length>0),z(NA()&&mA.focused),EA(AA()?TA(mA.filteredItems):mA.filteredItems)):(ee(!1),z(!0),NA(!0))}),HA()):(NA(!0),b()&&N(xe,void 0)))}),KA(()=>(K(E()),K(uA()),K(W()),K(EA()),K(b()),K(P()),K(rA()),K(AA()),K(X()),K(zA()),K(iA())),()=>{N(g,E()({loadOptions:uA(),filterText:W(),items:EA(),multiple:b(),value:P(),itemId:rA(),groupBy:AA(),label:X(),filterSelectedItems:zA(),itemFilter:iA(),convertStringItemsToObjects:sA,filterGroupedItems:TA}))}),KA(()=>(K(b()),K(NA()),K(P()),c(g)),()=>{!b()&&NA()&&P()&&c(g)&&de(c(g).findIndex(mA=>mA[rA()]===P()[rA()]),!0)}),KA(()=>(K(NA()),K(b())),()=>{NA()&&b()&&He(0)}),KA(()=>K(W()),()=>{W()&&He(0)}),KA(()=>K(He()),()=>{var mA;mA=He(),d("hoverItem",mA)}),KA(()=>(K(b()),K(P())),()=>{N(n,b()?P()&&P().length>0:P())}),KA(()=>(c(n),K(W())),()=>{N(o,c(n)&&W().length>0)}),KA(()=>(c(n),K(DA()),K(F()),K(ee())),()=>{N(a,c(n)&&DA()&&!F()&&!ee())}),KA(()=>(K(Z()),K(b()),K(eA()),K(P())),()=>{var mA;N(r,Z()&&b()||b()&&((mA=P())===null||mA===void 0?void 0:mA.length)===0?eA():P()?"":eA())}),KA(()=>(K(P()),K(b())),()=>{var mA,FA;N(s,P()?(mA=b(),FA=void 0,FA=mA&&P().length>0?P().map(le=>le[X()]).join(", "):P()[X()],nn()(FA)):"")}),KA(()=>(c(g),K(He()),K(z()),K(NA())),()=>{N(l,(function(){if(!c(g)||c(g).length===0)return"";var mA=c(g)[He()];if(NA()&&mA){var FA=c(g)?c(g).length:0;return Si()(mA[X()],FA)}return Li()()})((c(g),He(),z(),NA())))}),KA(()=>K(EA()),()=>{(function(mA){mA&&mA.length!==0&&!mA.some(FA=>typeof FA!="object")&&P()&&(b()?!P().some(FA=>!FA||!FA[rA()]):P()[rA()])&&(Array.isArray(P())?P(P().map(FA=>GA(FA)||FA)):P(GA()||P()))})(EA())}),KA(()=>(K(b()),K(P()),K(rA())),()=>{h((b(),P(),rA(),b()?P()?P().map(mA=>mA[rA()]):null:P()?P()[rA()]:P()))}),KA(()=>(K(b()),c(oi),K(P())),()=>{b()||!c(oi)||P()||d("input",P())}),KA(()=>(K(NA()),c(g),K(b()),K(P())),()=>{NA()&&c(g)&&!b()&&!P()&&de()}),KA(()=>c(g),()=>{(function(mA){NA()&&d("filter",mA)})(c(g))}),KA(()=>(K(k()),K(je()),c(Bo)),()=>{k()&&je()&&Do(Object.assign(c(Bo),je()))}),KA(()=>c(bt),()=>{N(C,!!c(bt))}),KA(()=>(c(bt),K(NA())),()=>{(function(mA,FA){if(!mA||!FA)return N(Ba,!0);setTimeout(()=>{N(Ba,!1)},0)})(c(bt),NA())}),KA(()=>(K(NA()),K(k()),c(bt)),()=>{NA()&&k()&&c(bt)&&(function(){var{width:mA}=k().getBoundingClientRect();Tl(bt,c(bt).style.width=ft()?mA+"px":"auto")})()}),KA(()=>K(He()),()=>{N(I,He())}),KA(()=>(K(S()),K(NA()),K(z())),()=>{S()&&NA()&&!z()&&ze()}),KA(()=>(K(k()),K(je())),()=>{var mA;k()&&((mA=je())===null||mA===void 0?void 0:mA.autoUpdate)===void 0&&Tl(Bo,c(Bo).autoUpdate=!0)}),Rn();var Xo={getFilteredItems:YA,handleClear:hn};ni();var ra,yo=d8A();fe("click",NC,function(mA){var FA;NA()||z()||!k()||k().contains(mA.target)||(FA=c(bt))!==null&&FA!==void 0&&FA.contains(mA.target)||Te()}),fe("keydown",NC,tt);var ge=dA(yo),mi=mA=>{var FA,le=n8A(),Ne=dA(le),nt=Xt=>{var Ji=Fi();Ia(et(Ji),e,"list-prepend",{},null),CA(Xt,Ji)};jA(Ne,Xt=>{wA(()=>A["list-prepend"])&&Xt(nt)});var rt=_A(Ne,2),xt=Xt=>{var Ji=Fi();Ia(et(Ji),e,"list",{get filteredItems(){return c(g)}},null),CA(Xt,Ji)},On=Xt=>{var Ji=Fi(),va=et(Ji),Ut=Oi=>{var Xi=Fi();da(et(Xi),1,()=>c(g),ka,(Wn,pn,_t)=>{var sa,zo=t8A(),D=dA(zo);Ia(dA(D),e,"item",{get item(){return c(pn)},index:_t},M=>{var R=dr();Se(()=>Lt(R,(c(pn),K(X()),wA(()=>{var V;return(V=c(pn))===null||V===void 0?void 0:V[X()]})))),CA(M,R)}),ms(D,(M,R)=>un?.(M),()=>({scroll:Qn(c(pn),P(),rA()),listDom:c(C)})),ms(D,(M,R)=>Vn?.(M),()=>({scroll:c(I)===_t,listDom:c(C)})),Se(M=>sa=ii(D,1,"item svelte-1ul7oo4",null,sa,M),[()=>{var M,R;return{"list-group-title":c(pn).groupHeader,active:Qn(c(pn),P(),rA()),first:(R=_t,R===0),hover:He()===_t,"group-item":c(pn).groupItem,"not-selectable":((M=c(pn))===null||M===void 0?void 0:M.selectable)===!1}}]),fe("mouseover",zo,()=>dt(_t)),fe("focus",zo,()=>dt(_t)),fe("click",zo,vC(()=>(function(M){var{item:R,i:V}=M;if(R?.selectable!==!1)return P()&&!b()&&P()[rA()]===R[rA()]?Ke():void((function(_){return _.groupHeader&&_.selectable||_.selectable||!_.hasOwnProperty("selectable")})(R)&&(He(V),G(R)))})({item:c(pn),i:_t}))),fe("keydown",zo,gI(vC(function(M){yf.call(this,e,M)}))),CA(Wn,zo)}),CA(Oi,Xi)},st=Oi=>{var Xi=Fi(),Wn=et(Xi),pn=_t=>{var sa=Fi();Ia(et(sa),e,"empty",{},zo=>{CA(zo,i8A())}),CA(_t,sa)};jA(Wn,_t=>{vA()||_t(pn)},!0),CA(Oi,Xi)};jA(va,Oi=>{c(g),wA(()=>c(g).length>0)?Oi(Ut):Oi(st,!1)},!0),CA(Xt,Ji)};jA(rt,Xt=>{wA(()=>A.list)?Xt(xt):Xt(On,!1)});var Ti=_A(rt,2),zi=Xt=>{var Ji=Fi();Ia(et(Ji),e,"list-append",{},null),CA(Xt,Ji)};jA(Ti,Xt=>{wA(()=>A["list-append"])&&Xt(zi)}),ms(le,Xt=>Zo?.(Xt)),Oo(le,Xt=>N(bt,Xt),()=>c(bt)),_r(()=>fe("scroll",le,on)),_r(()=>fe("pointerup",le,gI(vC(function(Xt){yf.call(this,e,Xt)})))),_r(()=>fe("mousedown",le,gI(vC(function(Xt){yf.call(this,e,Xt)})))),Se(()=>FA=ii(le,1,"svelte-select-list svelte-1ul7oo4",null,FA,{prefloat:c(Ba)})),CA(mA,le)};jA(ge,mA=>{NA()&&mA(mi)});var cn=_A(ge,2),fn=dA(cn),Ho=mA=>{var FA=o8A(),le=et(FA),Ne=dA(le),nt=dA(_A(le,2));Se(()=>{Lt(Ne,c(s)),Lt(nt,c(l))}),CA(mA,FA)};jA(fn,mA=>{z()&&mA(Ho)});var ya=_A(cn,2);Ia(dA(ya),e,"prepend",{},null);var _i=_A(ya,2),Eo=dA(_i),Za=mA=>{var FA=Fi(),le=et(FA),Ne=rt=>{var xt=Fi();da(et(xt),1,P,ka,(On,Ti,zi)=>{var Xt,Ji=r8A(),va=dA(Ji);Ia(dA(va),e,"selection",{get selection(){return c(Ti)},index:zi},Oi=>{var Xi=dr();Se(()=>Lt(Xi,(c(Ti),K(X()),wA(()=>c(Ti)[X()])))),CA(Oi,Xi)});var Ut=_A(va,2),st=Oi=>{var Xi=a8A();Ia(dA(Xi),e,"multi-clear-icon",{},Wn=>{K_(Wn)}),fe("pointerup",Xi,gI(vC(()=>OA(zi)))),CA(Oi,Xi)};jA(Ut,Oi=>{F()||x()||!K_||Oi(st)}),Se(()=>Xt=ii(Ji,1,"multi-item svelte-1ul7oo4",null,Xt,{active:c(xe)===zi,disabled:F()})),fe("click",Ji,gI(()=>x()?OA(zi):{})),fe("keydown",Ji,gI(vC(function(Oi){yf.call(this,e,Oi)}))),CA(On,Ji)}),CA(rt,xt)},nt=rt=>{var xt,On=s8A();Ia(dA(On),e,"selection",{get selection(){return P()}},Ti=>{var zi=dr();Se(()=>Lt(zi,(K(P()),K(X()),wA(()=>P()[X()])))),CA(Ti,zi)}),Se(()=>xt=ii(On,1,"selected-item svelte-1ul7oo4",null,xt,{"hide-selected-item":c(o)})),CA(rt,On)};jA(le,rt=>{b()?rt(Ne):rt(nt,!1)}),CA(mA,FA)};jA(Eo,mA=>{c(n)&&mA(Za)});var vo=_A(Eo,2);AD(vo,()=>Me(Me({readOnly:!fA()},c(oA)),{},{placeholder:c(r),style:XA(),disabled:F()}),void 0,void 0,void 0,"svelte-1ul7oo4",!0),Oo(vo,mA=>S(mA),()=>S());var Ta=_A(_i,2),Jn=dA(Ta),Ui=mA=>{var FA=l8A();Ia(dA(FA),e,"loading-icon",{},le=>{(function(Ne){CA(Ne,e8A())})(le)}),CA(mA,FA)};jA(Jn,mA=>{ee()&&mA(Ui)});var qt=_A(Jn,2),Nn=mA=>{var FA=g8A();Ia(dA(FA),e,"clear-icon",{},le=>{K_(le)}),fe("click",FA,hn),CA(mA,FA)};jA(qt,mA=>{c(a)&&mA(Nn)});var ho=_A(qt,2),Fo=mA=>{var FA=c8A();Ia(dA(FA),e,"chevron-icon",{get listOpen(){return NA()}},le=>{(function(Ne){CA(Ne,$6A())})(le)}),CA(mA,FA)};jA(ho,mA=>{he()&&mA(Fo)});var xA=_A(Ta,2);Ia(xA,e,"input-hidden",{get value(){return P()}},mA=>{var FA=C8A();Se(le=>{_n(FA,"name",v()),Dd(FA,le)},[()=>(K(P()),wA(()=>P()?JSON.stringify(P()):null))]),CA(mA,FA)});var Ae=_A(xA,2),De=mA=>{var FA=Fi();Ia(et(FA),e,"required",{get value(){return P()}},le=>{CA(le,I8A())}),CA(mA,FA)};return jA(Ae,mA=>{K(pA()),K(P()),wA(()=>pA()&&(!P()||P().length===0))&&mA(De)}),_r(()=>fe("pointerup",yo,gI(gn))),Oo(yo,mA=>k(mA),()=>k()),ms(yo,mA=>No?.(mA)),Se(()=>{var mA;ra=ii(yo,1,"svelte-select ".concat((mA=pt())!==null&&mA!==void 0?mA:""),"svelte-1ul7oo4",ra,{multi:b(),disabled:F(),focused:z(),"list-open":NA(),"show-chevron":he(),error:$A()}),mg(yo,UA())}),fe("keydown",vo,tt),fe("blur",vo,Te),fe("focus",vo,ze),lD(vo,W),CA(t,yo),jt(e,"getFilteredItems",YA),jt(e,"handleClear",hn),Ft(Xo)}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +table.jse-transform-wizard.svelte-9wqi8y { + border-collapse: collapse; + border-spacing: 0; + width: 100%; +} +table.jse-transform-wizard.svelte-9wqi8y input:where(.svelte-9wqi8y) { + font-family: inherit; + font-size: inherit; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) th:where(.svelte-9wqi8y) { + font-weight: normal; + text-align: left; + width: 60px; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) { + width: 100%; + display: flex; + flex-direction: row; + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .multi-item { + align-items: center; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .value-container { + gap: 0 !important; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-path { + flex: 4; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-relation { + flex: 1.5; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-path { + flex: 3; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-direction { + flex: 1; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-projection-paths { + flex: 1; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select input { + box-sizing: border-box; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y) { + flex: 4; + padding: 4px 8px; + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: var(--jse-input-radius, 3px); + outline: none; + background: var(--jse-input-background, var(--jse-background-color, #fff)); + color: inherit; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +}`);var B8A=JA('
    Filter
    Sort
    Pick
    ');function E8A(t,e){var A,i,n,o,a;Nt(e,!1);var r=BA(void 0,!0),s=BA(void 0,!0),l=BA(void 0,!0),g=BA(void 0,!0),C=BA(void 0,!0),I=BA(void 0,!0),d=or("jsoneditor:TransformWizard"),h=L(e,"json",9),E=L(e,"queryOptions",29,()=>({})),f=L(e,"onChange",9),m=["==","!=","<","<=",">",">="].map(zA=>({value:zA,label:zA})),v=[{value:"asc",label:"ascending"},{value:"desc",label:"descending"}],k=BA((A=E())!==null&&A!==void 0&&(A=A.filter)!==null&&A!==void 0&&A.path?BI(E().filter.path):void 0,!0),S=BA((i=m.find(zA=>{var pA;return zA.value===((pA=E().filter)===null||pA===void 0?void 0:pA.relation)}))!==null&&i!==void 0?i:m[0],!0),b=BA(((n=E())===null||n===void 0||(n=n.filter)===null||n===void 0?void 0:n.value)||"",!0),x=BA((o=E())!==null&&o!==void 0&&(o=o.sort)!==null&&o!==void 0&&o.path?BI(E().sort.path):void 0,!0),F=BA((a=v.find(zA=>{var pA;return zA.value===((pA=E().sort)===null||pA===void 0?void 0:pA.direction)}))!==null&&a!==void 0?a:v[0],!0);KA(()=>K(h()),()=>{N(r,Array.isArray(h()))}),KA(()=>(c(r),K(h())),()=>{N(s,c(r)?AR(h()):[])}),KA(()=>(c(r),K(h())),()=>{N(l,c(r)?AR(h(),!0):[])}),KA(()=>(c(s),BI),()=>{N(g,c(s).map(BI))}),KA(()=>(c(l),BI),()=>{N(C,c(l)?c(l).map(BI):[])}),KA(()=>(K(E()),c(C),Mi),()=>{var zA;N(I,(zA=E())!==null&&zA!==void 0&&(zA=zA.projection)!==null&&zA!==void 0&&zA.paths&&c(C)?E().projection.paths.map(pA=>c(C).find(PA=>Mi(PA.value,pA))).filter(pA=>!!pA):void 0)}),KA(()=>c(k),()=>{var zA,pA,PA;pA=(zA=c(k))===null||zA===void 0?void 0:zA.value,Mi((PA=E())===null||PA===void 0||(PA=PA.filter)===null||PA===void 0?void 0:PA.path,pA)||(d("changeFilterPath",pA),E(Hr(E(),["filter","path"],pA,!0)),f()(E()))}),KA(()=>c(S),()=>{var zA,pA,PA;pA=(zA=c(S))===null||zA===void 0?void 0:zA.value,Mi((PA=E())===null||PA===void 0||(PA=PA.filter)===null||PA===void 0?void 0:PA.relation,pA)||(d("changeFilterRelation",pA),E(Hr(E(),["filter","relation"],pA,!0)),f()(E()))}),KA(()=>c(b),()=>{var zA,pA;zA=c(b),Mi((pA=E())===null||pA===void 0||(pA=pA.filter)===null||pA===void 0?void 0:pA.value,zA)||(d("changeFilterValue",zA),E(Hr(E(),["filter","value"],zA,!0)),f()(E()))}),KA(()=>c(x),()=>{var zA,pA,PA;pA=(zA=c(x))===null||zA===void 0?void 0:zA.value,Mi((PA=E())===null||PA===void 0||(PA=PA.sort)===null||PA===void 0?void 0:PA.path,pA)||(d("changeSortPath",pA),E(Hr(E(),["sort","path"],pA,!0)),f()(E()))}),KA(()=>c(F),()=>{var zA,pA,PA;pA=(zA=c(F))===null||zA===void 0?void 0:zA.value,Mi((PA=E())===null||PA===void 0||(PA=PA.sort)===null||PA===void 0?void 0:PA.direction,pA)||(d("changeSortDirection",pA),E(Hr(E(),["sort","direction"],pA,!0)),f()(E()))}),KA(()=>c(I),()=>{(function(zA){var pA;Mi((pA=E())===null||pA===void 0||(pA=pA.projection)===null||pA===void 0?void 0:pA.paths,zA)||(d("changeProjectionPaths",zA),E(Hr(E(),["projection","paths"],zA,!0)),f()(E()))})(c(I)?c(I).map(zA=>zA.value):void 0)}),Rn(),ni(!0);var z=B8A(),P=dA(z),W=dA(P),eA=_A(dA(W)),Z=dA(eA),EA=dA(Z);Cd(EA,{class:"jse-filter-path",showChevron:!0,get items(){return c(g)},get value(){return c(k)},set value(zA){N(k,zA)},$$legacy:!0});var X=_A(EA,2);Cd(X,{class:"jse-filter-relation",showChevron:!0,clearable:!1,get items(){return m},get value(){return c(S)},set value(zA){N(S,zA)},$$legacy:!0});var iA=_A(X,2),AA=_A(W),IA=_A(dA(AA)),aA=dA(IA),rA=dA(aA);Cd(rA,{class:"jse-sort-path",showChevron:!0,get items(){return c(g)},get value(){return c(x)},set value(zA){N(x,zA)},$$legacy:!0}),Cd(_A(rA,2),{class:"jse-sort-direction",showChevron:!0,clearable:!1,get items(){return v},get value(){return c(F)},set value(zA){N(F,zA)},$$legacy:!0});var uA=_A(AA),UA=_A(dA(uA)),$A=dA(UA);Cd(dA($A),{class:"jse-projection-paths",multiple:!0,showChevron:!0,get items(){return c(C)},get value(){return c(I)},set value(zA){N(I,zA)},$$legacy:!0}),lD(iA,()=>c(b),zA=>N(b,zA)),CA(t,z),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-select-query-language.svelte-jrd4q2 { + position: relative; + width: 32px; +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) { + position: absolute; + top: 0; + right: 0; + display: flex; + flex-direction: column; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + text-align: left; + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + white-space: nowrap; + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-context-menu-background, #656565); +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +}`);var h8A=JA(''),Q8A=JA('
    ');function u8A(t,e){Nt(e,!1);var A=L(e,"queryLanguages",8),i=L(e,"queryLanguageId",12),n=L(e,"onChangeQueryLanguage",8);ni();var o=Q8A();da(dA(o),5,A,ka,(a,r)=>{var s,l=h8A(),g=dA(l),C=h=>{tn(h,{get data(){return j9}})},I=h=>{tn(h,{get data(){return q9}})};jA(g,h=>{c(r),K(i()),wA(()=>c(r).id===i())?h(C):h(I,!1)});var d=_A(g);Se(()=>{var h;s=ii(l,1,"jse-query-language svelte-jrd4q2",null,s,{selected:c(r).id===i()}),_n(l,"title",(c(r),wA(()=>"Select ".concat(c(r).name," as query language")))),Lt(d," ".concat((c(r),(h=wA(()=>c(r).name))!==null&&h!==void 0?h:"")))}),fe("click",l,()=>{return h=c(r).id,i(h),void n()(h);var h}),CA(a,l)}),CA(t,o),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-header.svelte-1k211ye { + display: flex; + background: var(--jse-theme-color, #3883fa); + color: var(--jse-menu-color, var(--jse-text-color-inverse, #fff)); +} +.jse-header.svelte-1k211ye .jse-title:where(.svelte-1k211ye) { + flex: 1; + padding: 5px; + vertical-align: middle; +} +.jse-header.svelte-1k211ye button:where(.svelte-1k211ye) { + border: none; + background: transparent; + min-width: 32px; + color: inherit; + cursor: pointer; +} +.jse-header.svelte-1k211ye button:where(.svelte-1k211ye):hover { + background: rgba(255, 255, 255, 0.1); +}`);var f8A=JA(''),p8A=JA('
    ');function wD(t,e){Nt(e,!1);var A=L(e,"title",9,"Modal"),i=L(e,"fullScreenButton",9,!1),n=L(e,"fullscreen",13,!1),o=L(e,"onClose",9,void 0);ni(!0);var a=p8A(),r=dA(a),s=dA(r),l=_A(r,2);Ia(l,e,"actions",{},null);var g=_A(l,2),C=d=>{var h=f8A(),E=dA(h),f=it(()=>n()?kz:yz);tn(E,{get data(){return c(f)}}),fe("click",h,()=>n(!n())),CA(d,h)};jA(g,d=>{i()&&d(C)});var I=_A(g,2);tn(dA(I),{get data(){return D4}}),Se(()=>Lt(s,A())),fe("click",I,()=>{var d;return(d=o())===null||d===void 0?void 0:d()}),CA(t,a),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-config.svelte-5gkegr { + border: none; + background: transparent; + min-width: 32px; + color: inherit; + cursor: pointer; +} +.jse-config.svelte-5gkegr:hover { + background: rgba(255, 255, 255, 0.1); +} +.jse-config.hide.svelte-5gkegr { + display: none; +}`);var m8A=JA(''),U_=or("jsoneditor:AutoScrollHandler");function RZ(t){var e,A;function i(r){return r<20?200:r<50?400:1200}function n(){if(t){var r=.05*(e||0);t.scrollTop+=r}}function o(r){A&&r===e||(a(),U_("startAutoScroll",r),e=r,A=setInterval(n,50))}function a(){A&&(U_("stopAutoScroll"),clearInterval(A),A=void 0,e=void 0)}return U_("createAutoScrollHandler",t),{onDrag:function(r){if(t){var s=r.clientY,{top:l,bottom:g}=t.getBoundingClientRect();sg?o(i(s-g)):a()}},onDragEnd:function(){a()}}}var w8A=(t,e,A,i)=>(t/=i/2)<1?A/2*t*t+e:-A/2*(--t*(t-2)-1)+e,R$=()=>{var t,e,A,i,n,o,a,r,s,l,g,C,I;function d(f){return f.getBoundingClientRect().top-(t.getBoundingClientRect?t.getBoundingClientRect().top:0)+A}function h(f){t.scrollTo?t.scrollTo(t.scrollLeft,f):t.scrollTop=f}function E(f){l||(l=f),h(o(g=f-l,A,r,s)),I=!0,g1&&arguments[1]!==void 0?arguments[1]:{};switch(s=1e3,n=m.offset||0,C=m.callback,o=m.easing||w8A,a=m.a11y||!1,typeof m.container){case"object":t=m.container;break;case"string":t=document.querySelector(m.container);break;default:t=window.document.documentElement}switch(A=t.scrollTop,typeof f){case"number":e=void 0,a=!1,i=A+f;break;case"object":i=d(e=f);break;case"string":e=document.querySelector(f),i=d(e)}switch(r=i-A+n,typeof m.duration){case"number":s=m.duration;break;case"function":s=m.duration(r)}I?l=0:requestAnimationFrame(E)}};function vh(t,e){var A=Date.now(),i=t();return e(Date.now()-A),i}var fh=or("validation"),D8A={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function NZ(t,e,A,i){return OR(t,e,A,i,D8A)}function N$(t,e,A,i){if(fh("validateJSON"),!e)return[];if(A!==i){var n=A.stringify(t);return e(n!==void 0?i.parse(n):void 0)}return e(t)}function y8A(t,e,A,i){if(fh("validateText"),t.length>104857600)return{validationErrors:[{path:[],message:"Validation turned off: the document is too large",severity:Qc.info}]};if(t.length!==0)try{var n=vh(()=>A.parse(t),s=>fh("validate: parsed json in ".concat(s," ms")));if(!e)return;var o=A===i?n:vh(()=>i.parse(t),s=>fh("validate: parsed json with the validationParser in ".concat(s," ms"))),a=vh(()=>e(o),s=>fh("validate: validated json in ".concat(s," ms")));return en(a)?void 0:{validationErrors:a}}catch(s){var r=vh(()=>(function(l,g){if(l.length>e6A)return!1;try{return g.parse(ag(l)),!0}catch(C){return!1}})(t,A),l=>fh("validate: checked whether repairable in ".concat(l," ms")));return{parseError:Th(t,s.message||s.toString()),isRepairable:r}}}var z5=or("jsoneditor:FocusTracker");function qR(t){var e,{onMount:A,onDestroy:i,getWindow:n,hasFocus:o,onFocus:a,onBlur:r}=t,s=!1;function l(){var C=o();C&&(clearTimeout(e),s||(z5("focus"),a(),s=C))}function g(){s&&(clearTimeout(e),e=setTimeout(()=>{o()||(z5("blur"),s=!1,r())}))}A(()=>{z5("mount FocusTracker");var C=n();C&&(C.addEventListener("focusin",l,!0),C.addEventListener("focusout",g,!0))}),i(()=>{z5("destroy FocusTracker");var C=n();C&&(C.removeEventListener("focusin",l,!0),C.removeEventListener("focusout",g,!0))})}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-message.svelte-cbvd26 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + padding: var(--jse-padding, 10px); + display: flex; + gap: var(--jse-padding, 10px); + flex-wrap: wrap; + align-items: stretch; +} +.jse-message.jse-success.svelte-cbvd26 { + background: var(--message-success-background, #9ac45d); + color: var(--jse-message-success-color, #fff); +} +.jse-message.svelte-cbvd26 .jse-text:where(.svelte-cbvd26) { + display: flex; + flex: 1; + min-width: 60%; + align-items: center; +} +.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26) { + cursor: pointer; +} +.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26):hover { + background-color: rgba(255, 255, 255, 0.1); +} +.jse-message.jse-error.svelte-cbvd26 { + background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); + color: var(--jse-message-error-color, #fff); +} +.jse-message.jse-warning.svelte-cbvd26 { + background: var(--jse-message-warning-background, #ffde5c); + color: var(--jse-message-warning-color, #4d4d4d); +} +.jse-message.jse-info.svelte-cbvd26 { + background: var(--jse-message-info-background, #4f91ff); + color: var(--jse-message-info-color, #fff); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) { + display: flex; + gap: var(--jse-padding, 10px); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-message-action-background, rgba(255, 255, 255, 0.2)); + color: inherit; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26):hover { + background: var(--jse-message-action-background-highlight, rgba(255, 255, 255, 0.3)); +}`);var v8A=JA(''),b8A=JA('
    ');function Yl(t,e){Nt(e,!1);var A=L(e,"type",9,"success"),i=L(e,"icon",9,void 0),n=L(e,"message",9,void 0),o=L(e,"actions",25,()=>[]),a=L(e,"onClick",9,void 0),r=L(e,"onClose",9,void 0);r()&&Dg(r()),ni(!0);var s,l=b8A(),g=dA(l),C=dA(g),I=dA(C),d=E=>{tn(E,{get data(){return i()}})};jA(I,E=>{i()&&E(d)});var h=_A(I);da(_A(g,2),5,o,ka,(E,f)=>{var m=v8A(),v=dA(m),k=b=>{tn(b,{get data(){return c(f),wA(()=>c(f).icon)}})};jA(v,b=>{c(f),wA(()=>c(f).icon)&&b(k)});var S=_A(v);Se(()=>{var b;_n(m,"title",(c(f),wA(()=>c(f).title))),m.disabled=(c(f),wA(()=>c(f).disabled)),Lt(S," ".concat((c(f),(b=wA(()=>c(f).text))!==null&&b!==void 0?b:"")))}),fe("click",m,()=>{c(f).onClick&&c(f).onClick()}),fe("mousedown",m,()=>{c(f).onMouseDown&&c(f).onMouseDown()}),CA(E,m)}),Se(()=>{var E,f;ii(l,1,"jse-message jse-".concat((E=A())!==null&&E!==void 0?E:""),"svelte-cbvd26"),s=ii(g,1,"jse-text svelte-cbvd26",null,s,{"jse-clickable":!!a()}),Lt(h," ".concat((f=n())!==null&&f!==void 0?f:""))}),fe("click",g,function(){a()&&a()()}),CA(t,l),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-validation-errors-overview.svelte-1342rh4 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + overflow: auto; + max-height: 25%; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) { + border-collapse: collapse; + width: 100%; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) { + cursor: pointer; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-error:where(.svelte-1342rh4) { + background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); + color: var(--jse-message-error-color, #fff); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4) { + background: var(--jse-message-warning-background, #ffde5c); + color: var(--jse-message-warning-color, #4d4d4d); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4):hover { + filter: brightness(105%); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-info:where(.svelte-1342rh4) { + background: var(--jse-message-info-background, #4f91ff); + color: var(--jse-message-info-color, #fff); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4):hover { + filter: brightness(110%); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) { + padding: 4px var(--jse-padding, 10px); + vertical-align: middle; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-icon:where(.svelte-1342rh4) { + width: 36px; + box-sizing: border-box; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) { + width: 36px; + box-sizing: border-box; + padding: 0; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 36px; + height: 26px; + cursor: pointer; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4):hover { + background-color: rgba(255, 255, 255, 0.2); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) div.jse-validation-errors-expand:where(.svelte-1342rh4) { + display: inline-block; + position: relative; + top: 3px; +}`);var M8A=JA(''),S8A=JA(' '),k8A=JA(' '),x8A=JA('
    '),_8A=JA('
    '),R8A=JA('
    ');function VR(t,e){Nt(e,!1);var A=BA(void 0,!0),i=L(e,"validationErrors",9),n=L(e,"selectError",9),o=BA(!0,!0);function a(){N(o,!1)}function r(){N(o,!0)}KA(()=>K(i()),()=>{N(A,i().length)}),Rn(),ni(!0);var s=Fi(),l=et(s),g=C=>{var I=R8A(),d=dA(I),h=f=>{var m=x8A(),v=dA(m),k=dA(v);da(k,1,()=>(K(gD),K(i()),K(U5),wA(()=>gD(i(),U5))),ka,(x,F,z)=>{var P=S8A(),W=dA(P);tn(dA(W),{get data(){return z2}});var eA=_A(W),Z=dA(eA),EA=_A(eA),X=dA(EA),iA=dA(_A(EA)),AA=IA=>{var aA=M8A();tn(dA(aA),{get data(){return Sz}}),fe("click",aA,vC(a)),CA(IA,aA)};jA(iA,IA=>{K(i()),wA(()=>z===0&&i().length>1)&&IA(AA)}),Se(IA=>{var aA;ii(P,1,"jse-validation-".concat((c(F),(aA=wA(()=>c(F).severity))!==null&&aA!==void 0?aA:"")),"svelte-1342rh4"),Lt(Z,IA),Lt(X,(c(F),wA(()=>c(F).message)))},[()=>(K(Bl),c(F),wA(()=>Bl(c(F).path)))]),fe("click",P,()=>{setTimeout(()=>n()(c(F)))}),CA(x,P)});var S=_A(k),b=x=>{var F=k8A(),z=_A(dA(F),2),P=dA(z);Se(()=>Lt(P,"(and ".concat(c(A)-U5," more errors)"))),CA(x,F)};jA(S,x=>{c(A)>U5&&x(b)}),CA(f,m)},E=f=>{var m=_8A(),v=dA(m),k=dA(v),S=dA(k);tn(dA(S),{get data(){return z2}});var b=dA(_A(S));tn(dA(_A(b)),{get data(){return $9}}),Se(x=>{var F;ii(k,1,"jse-validation-".concat(x??""),"svelte-1342rh4"),Lt(b,"".concat((F=c(A))!==null&&F!==void 0?F:""," validation errors "))},[()=>(K(i()),wA(()=>{return x=i(),[Qc.error,Qc.warning,Qc.info].find(F=>x.some(z=>z.severity===F));var x}))]),fe("click",k,r),CA(f,m)};jA(d,f=>{c(o)||c(A)===1?f(h):f(E,!1)}),CA(C,I)};jA(l,C=>{K(en),K(i()),wA(()=>!en(i()))&&C(g)}),CA(t,s),Ft()}function DD(t,e){if(t)return t.addEventListener("keydown",A),{destroy(){t.removeEventListener("keydown",A)}};function A(i){i.key==="Escape"&&(i.preventDefault(),i.stopPropagation(),e())}}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +dialog.jse-modal.svelte-2aoco4 { + border-radius: 3px; + font-size: var(--jse-padding, 10px); + border: none; + padding: 0; + display: flex; + min-width: 0; + margin: auto; + overflow: visible; + transition: width 0.1s ease-in-out, height 0.1s ease-in-out; +} +dialog.jse-modal.jse-sort-modal.svelte-2aoco4 { + width: 400px; +} +dialog.jse-modal.jse-repair-modal.svelte-2aoco4 { + width: 600px; + height: 500px; +} +dialog.jse-modal.jse-jsoneditor-modal.svelte-2aoco4 { + width: 800px; + height: 600px; +} +dialog.jse-modal.jse-transform-modal.svelte-2aoco4 { + width: 1200px; + height: 800px; +} +dialog.jse-modal.jse-fullscreen.svelte-2aoco4 { + width: 100%; + height: 100%; +} +dialog.jse-modal.svelte-2aoco4::backdrop { + background: var(--jse-overlay-background, rgba(0, 0, 0, 0.3)); +} +dialog.jse-modal[open].svelte-2aoco4 { + animation: svelte-2aoco4-zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); +} +dialog.jse-modal[open].svelte-2aoco4::backdrop { + animation: svelte-2aoco4-fade 0.2s ease-out; +} +dialog.jse-modal.svelte-2aoco4 .jse-modal-inner:where(.svelte-2aoco4) { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; + padding: 0; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + background: var(--jse-modal-background, #f5f5f5); + color: var(--jse-text-color, #4d4d4d); +} +@keyframes svelte-2aoco4-zoom { + from { + transform: scale(0.95); + } + to { + transform: scale(1); + } +} +@keyframes svelte-2aoco4-fade { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +dialog.jse-modal.svelte-2aoco4 .svelte-select { + --border: var(--jse-svelte-select-border, 1px solid #d8dbdf); + --item-is-active-bg: var(--jse-item-is-active-bg, #3883fa); + --border-radius: var(--jse-svelte-select-border-radius, 3px); + --background: var(--jse-svelte-select-background, #fff); + --padding: var(--jse-svelte-select-padding, 0 10px); + --multi-select-padding: var(--jse-svelte-select-multi-select-padding, 0 10px); + --font-size: var(--jse-svelte-select-font-size, var(--jse-font-size, 16px)); + --height: 36px; + --multi-item-height: 28px; + --multi-item-margin: 2px; + --multi-item-padding: 2px 8px; + --multi-item-border-radius: 6px; + --indicator-top: 8px; +}`);var N8A=JA('
    ');function Of(t,e){Nt(e,!1);var A=L(e,"className",8,void 0),i=L(e,"fullscreen",8,!1),n=L(e,"onClose",8),o=BA();function a(){n()()}As(()=>c(o).showModal()),Dg(()=>c(o).close()),ni();var r,s=N8A(),l=dA(s);Ia(dA(l),e,"default",{},null),Oo(s,g=>N(o,g),()=>c(o)),_r(()=>fe("close",s,a)),_r(()=>{return fe("pointerdown",s,(g=a,function(){for(var C=arguments.length,I=new Array(C),d=0;dfe("cancel",s,gI(function(g){yf.call(this,e,g)}))),ms(s,(g,C)=>DD?.(g,C),()=>a),Se(g=>r=ii(s,1,g,"svelte-2aoco4",r,{"jse-fullscreen":i()}),[()=>bI((K(Dc),K(A()),wA(()=>Dc("jse-modal",A()))))]),CA(t,s),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-contents.svelte-10a6ob6 { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} + +.jse-shortcuts.svelte-10a6ob6 { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: calc(2 * var(--jse-padding, 10px)) 0; +} +.jse-shortcuts.svelte-10a6ob6 .jse-shortcut:where(.svelte-10a6ob6) .jse-key:where(.svelte-10a6ob6) { + font-size: 200%; + color: var(--jse-theme-color, #3883fa); +}`);var F8A=JA('
    Clipboard permission is disabled by your browser. You can use:
    for copy
    for cut
    for paste
    ',1);function F$(t,e){Nt(e,!1);var A=L(e,"onClose",9),i=NR()?"\u2318":"Ctrl";ni(!0),Of(t,{get onClose(){return A()},className:"jse-copy-paste",children:(n,o)=>{var a=F8A(),r=et(a);wD(r,{title:"Copying and pasting",get onClose(){return A()}});var s=_A(r,2),l=_A(dA(s),2),g=dA(l),C=dA(g),I=dA(C),d=_A(g,2),h=dA(d),E=dA(h),f=dA(_A(d,2)),m=dA(f),v=dA(_A(l,2));Se(()=>{Lt(I,"".concat(i,"+C")),Lt(E,"".concat(i,"+X")),Lt(m,"".concat(i,"+V"))}),fe("click",v,function(){for(var k,S=arguments.length,b=new Array(S),x=0;x'),G8A=JA('
    '),K8A=JA(''),U8A=JA('
    ');function KD(t,e){Nt(e,!1);var A=L(e,"items",25,()=>[]);ni(!0);var i=U8A(),n=dA(i);Ia(n,e,"left",{},null);var o=_A(n,2);da(o,1,A,ka,(a,r)=>{var s=Fi(),l=et(s),g=I=>{CA(I,L8A())},C=I=>{var d=Fi(),h=et(d),E=m=>{CA(m,G8A())},f=m=>{var v=Fi(),k=et(v),S=x=>{var F=K8A(),z=dA(F),P=Z=>{tn(Z,{get data(){return c(r),wA(()=>c(r).icon)}})};jA(z,Z=>{c(r),wA(()=>c(r).icon)&&Z(P)});var W=_A(z,2),eA=Z=>{var EA=dr();Se(()=>Lt(EA,(c(r),wA(()=>c(r).text)))),CA(Z,EA)};jA(W,Z=>{c(r),wA(()=>c(r).text)&&Z(eA)}),Se(()=>{var Z;ii(F,1,"jse-button ".concat((c(r),(Z=wA(()=>c(r).className))!==null&&Z!==void 0?Z:"")),"svelte-3erbu0"),_n(F,"title",(c(r),wA(()=>c(r).title))),F.disabled=(c(r),wA(()=>c(r).disabled||!1))}),fe("click",F,function(){for(var Z,EA=arguments.length,X=new Array(EA),iA=0;iA{var F=dr();Se(z=>Lt(F,z),[()=>(c(r),wA(()=>(function(z){return console.error("Unknown type of menu item",z),"???"})(c(r))))]),CA(x,F)};jA(k,x=>{K(bC),c(r),wA(()=>bC(c(r)))?x(S):x(b,!1)},!0),CA(m,v)};jA(h,m=>{K(nR),c(r),wA(()=>nR(c(r)))?m(E):m(f,!1)},!0),CA(I,d)};jA(l,I=>{K(dI),c(r),wA(()=>dI(c(r)))?I(g):I(C,!1)}),CA(a,s)}),Ia(_A(o,2),e,"right",{},null),CA(t,i),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-json-repair-component.svelte-16jv58j { + flex: 1; + display: flex; + flex-direction: column; + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); +} +.jse-json-repair-component.svelte-16jv58j .jse-info:where(.svelte-16jv58j) { + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + vertical-align: center; +} +.jse-json-repair-component.svelte-16jv58j .jse-json-text:where(.svelte-16jv58j) { + flex: 1; + border: none; + padding: 2px; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + background: var(--jse-input-background, var(--jse-background-color, #fff)); + color: var(--jse-text-color, #4d4d4d); + resize: none; + outline: none; +}`);var T8A=JA('
    Repair invalid JSON, then click apply
    '),J8A=JA('
    ');function O8A(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=BA(void 0,!0),o=BA(void 0,!0),a=BA(void 0,!0),r=BA(void 0,!0),s=L(e,"text",13,""),l=L(e,"readOnly",9,!1),g=L(e,"onParse",9),C=L(e,"onRepair",9),I=L(e,"onChange",9,void 0),d=L(e,"onApply",9),h=L(e,"onCancel",9),E=or("jsoneditor:JSONRepair"),f=BA(void 0,!0);function m(){if(c(f)&&c(A)){var eA=c(A).position!==void 0?c(A).position:0;c(f).setSelectionRange(eA,eA),c(f).focus()}}function v(){d()(s())}function k(){try{s(C()(s())),I()&&I()(s())}catch(eA){}}var S=BA(void 0,!0);KA(()=>K(s()),()=>{N(A,(function(eA){try{return void g()(eA)}catch(Z){return Th(eA,Z.message)}})(s()))}),KA(()=>K(s()),()=>{N(i,(function(eA){try{return C()(eA),!0}catch(Z){return!1}})(s()))}),KA(()=>c(A),()=>{E("error",c(A))}),KA(()=>K(h()),()=>{N(S,[{type:"space"},{type:"button",icon:D4,title:"Cancel repair",className:"jse-cancel",onClick:h()}])}),KA(()=>tS,()=>{N(n,{icon:tS,text:"Show me",title:"Scroll to the error location",onClick:m})}),KA(()=>CC,()=>{N(o,{icon:CC,text:"Auto repair",title:"Automatically repair JSON",onClick:k})}),KA(()=>(c(i),c(n),c(o)),()=>{N(a,c(i)?[c(n),c(o)]:[c(n)])}),KA(()=>K(l()),()=>{N(r,[{icon:J8,text:"Apply",title:"Apply fixed JSON",disabled:l(),onClick:v}])}),Rn(),ni(!0);var b=J8A(),x=dA(b);KD(x,{get items(){return c(S)},$$slots:{left:(eA,Z)=>{CA(eA,T8A())}}});var F=_A(x,2),z=eA=>{var Z=it(()=>(c(A),wA(()=>"Cannot parse JSON: ".concat(c(A).message))));Yl(eA,{type:"error",get icon(){return z2},get message(){return c(Z)},get actions(){return c(a)}})},P=eA=>{Yl(eA,{type:"success",message:"JSON is valid now and can be parsed.",get actions(){return c(r)}})};jA(F,eA=>{c(A)?eA(z):eA(P,!1)});var W=_A(F,2);Oo(W,eA=>N(f,eA),()=>c(f)),Se(()=>{W.readOnly=l(),Dd(W,s())}),fe("input",W,function(eA){E("handleChange");var Z=eA.target.value;s()!==Z&&(s(Z),I()&&I()(s()))}),CA(t,b),Ft()}function L$(t,e){Nt(e,!1);var A=L(e,"text",13),i=L(e,"onParse",9),n=L(e,"onRepair",9),o=L(e,"onApply",9),a=L(e,"onClose",9);function r(l){o()(l),a()()}function s(){a()()}ni(!0),Of(t,{get onClose(){return a()},className:"jse-repair-modal",children:(l,g)=>{O8A(l,{get onParse(){return i()},get onRepair(){return n()},onApply:r,onCancel:s,get text(){return A()},set text(C){A(C)},$$legacy:!0})},$$slots:{default:!0}}),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +div.jse-collapsed-items.svelte-1v6dhm4 { + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); + padding: calc(0.5 * var(--jse-padding, 10px)); + border: 8px solid transparent; + border-width: 8px 0; + background-color: var(--jse-contents-background-color, transparent); + background-image: linear-gradient(var(--jse-collapsed-items-background-color, #f5f5f5), var(--jse-collapsed-items-background-color, #f5f5f5)), linear-gradient(to bottom right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to bottom left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%); + background-repeat: repeat, repeat-x, repeat-x, repeat-x, repeat-x; + background-position: 0 0, 8px 0, 8px 0, 8px 100%, 8px 100%; + background-size: auto auto, 16px 16px, 16px 16px, 16px 16px, 16px 16px; + background-clip: padding-box, border-box, border-box, border-box, border-box; + background-origin: padding-box, border-box, border-box, border-box, border-box; + display: flex; +} +div.jse-collapsed-items.jse-selected.svelte-1v6dhm4 { + background-color: var(--jse-selection-background-color, #d3d3d3); + --jse-collapsed-items-background-color: var(--jse-collapsed-items-selected-background-color, #c2c2c2); +} +div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4), +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { + margin: 0 calc(0.5 * var(--jse-padding, 10px)); +} +div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4) { + display: inline; +} +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { + font-family: inherit; + font-size: inherit; + color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); + background: none; + border: none; + padding: 0; + text-decoration: underline; + cursor: pointer; +} +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):hover, div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):focus { + color: var(--jse-collapsed-items-link-color-highlight, #ee5341); +}`);var Y8A=JA(''),H8A=JA('
    ');function z8A(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=BA(void 0,!0),o=BA(void 0,!0),a=BA(void 0,!0),r=L(e,"visibleSections",9),s=L(e,"sectionIndex",9),l=L(e,"total",9),g=L(e,"path",9),C=L(e,"selection",9),I=L(e,"onExpandSection",9),d=L(e,"context",9);KA(()=>(K(r()),K(s())),()=>{N(A,r()[s()])}),KA(()=>c(A),()=>{N(i,c(A).end)}),KA(()=>(K(r()),K(s()),K(l())),()=>{N(n,r()[s()+1]?r()[s()+1].start:l())}),KA(()=>(K(d()),K(C()),K(g()),c(i)),()=>{N(o,Uf(d().getJson(),C(),g().concat(String(c(i)))))}),KA(()=>(c(i),c(n)),()=>{N(a,(function(S,b){var x={start:S,end:Math.min(iR(S),b)},F=Math.max(CD((S+b)/2),S),z={start:F,end:Math.min(iR(F),b)},P=CD(b),W=P===b?P-Ff:P,eA={start:Math.max(W,S),end:b},Z=[x],EA=z.start>=x.end&&z.end<=eA.start;return EA&&Z.push(z),eA.start>=(EA?z.end:x.end)&&Z.push(eA),Z})(c(i),c(n)))}),Rn(),ni(!0);var h,E,f=H8A(),m=dA(f),v=dA(m),k=dA(v);da(_A(v,2),1,()=>c(a),ka,(S,b)=>{var x=Y8A(),F=dA(x);Se(()=>{var z,P;return Lt(F,"show ".concat((c(b),(z=wA(()=>c(b).start))!==null&&z!==void 0?z:""),"-").concat((c(b),(P=wA(()=>c(b).end))!==null&&P!==void 0?P:"")))}),fe("click",x,()=>I()(g(),c(b))),CA(S,x)}),Se(()=>{var S,b;h=ii(f,1,"jse-collapsed-items svelte-1v6dhm4",null,h,{"jse-selected":c(o)}),E=mg(f,"",E,{"--level":(K(g()),wA(()=>g().length+2))}),Lt(k,"Items ".concat((S=c(i))!==null&&S!==void 0?S:"","-").concat((b=c(n))!==null&&b!==void 0?b:""))}),fe("mousemove",f,function(S){S.stopPropagation()}),CA(t,f),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-context-menu-pointer.svelte-10ijtzr { + position: absolute; + top: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); + right: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); + width: var(--jse-context-menu-pointer-size, calc(1em + 4px)); + height: var(--jse-context-menu-pointer-size, calc(1em + 4px)); + padding: 0; + margin: 0; + cursor: pointer; + background: transparent; + border-radius: 2px; + background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); + color: var(--jse-context-menu-pointer-color, var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff))); + border: none; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-context-menu-pointer.jse-root.svelte-10ijtzr { + top: 0; + right: calc(-2px - var(--jse-context-menu-pointer-size, calc(1em + 4px))); +} +.jse-context-menu-pointer.jse-insert.svelte-10ijtzr { + right: -1px; +} +.jse-context-menu-pointer.svelte-10ijtzr:hover { + background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); +} +.jse-context-menu-pointer.jse-selected.svelte-10ijtzr { + background: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); +} +.jse-context-menu-pointer.jse-selected.svelte-10ijtzr:hover { + background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); +}`);var P8A=JA('');function cI(t,e){Nt(e,!1);var A=L(e,"root",9,!1),i=L(e,"insert",9,!1),n=L(e,"selected",9),o=L(e,"onContextMenu",9);ni(!0);var a,r=P8A();tn(dA(r),{get data(){return c0}}),Se(()=>{a=ii(r,1,"jse-context-menu-pointer svelte-10ijtzr",null,a,{"jse-root":A(),"jse-insert":i(),"jse-selected":n()}),_n(r,"title",LR)}),fe("click",r,function(s){for(var l=s.target;l&&l.nodeName!=="BUTTON";)l=l.parentNode;l&&o()({anchor:l,left:0,top:0,width:xC,height:kC,offsetTop:2,offsetLeft:0,showTip:!0})}),CA(t,r),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-key.svelte-1n4cez4 { + display: inline-block; + min-width: 2em; + padding: 0 5px; + box-sizing: border-box; + outline: none; + border-radius: 1px; + vertical-align: top; + color: var(--jse-key-color, #1a1a1a); + word-break: normal; + overflow-wrap: normal; + white-space: pre-wrap; +} +.jse-key.jse-empty.svelte-1n4cez4 { + min-width: 3em; + outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + -moz-outline-radius: 2px; +} +.jse-key.jse-empty.svelte-1n4cez4::after { + pointer-events: none; + color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + content: "key"; +}`);var j8A=JA('
    '),q8A=JA(" ",1),V8A=JA('
    ');function G$(t,e){Nt(e,!0);var A=Il(()=>En(e.selection)&&tr(e.selection)),i=Il(()=>e.context.onRenderValue({path:e.path,value:e.value,mode:e.context.mode,truncateTextSize:e.context.truncateTextSize,readOnly:e.context.readOnly,enforceString:e.enforceString,isEditing:c(A),parser:e.context.parser,normalization:e.context.normalization,selection:e.selection,searchResultItems:e.searchResultItems,onPatch:e.context.onPatch,onPasteJson:e.context.onPasteJson,onSelect:e.context.onSelect,onFind:e.context.onFind,findNextInside:e.context.findNextInside,focus:e.context.focus})),n=Fi();da(et(n),17,()=>c(i),ka,(o,a)=>{var r=Fi(),s=et(r),l=C=>{var I=Il(()=>c(a).action),d=V8A();ms(d,(h,E)=>{var f;return(f=c(I))===null||f===void 0?void 0:f(h,E)},()=>c(a).props),CA(C,d)},g=C=>{var I=Il(()=>c(a).component),d=Fi();UX(et(d),()=>c(I),(h,E)=>{E(h,DI(()=>c(a).props))}),CA(C,d)};jA(s,C=>{a6A(c(a))?C(l):C(g,!1)}),CA(o,r)}),CA(t,n),Ft()}var W8A={selecting:!1,selectionAnchor:void 0,selectionAnchorType:void 0,selectionFocus:void 0,dragging:!1};function T_(t){var{json:e,selection:A,deltaY:i,items:n}=t;if(!A)return{operations:void 0,updatedSelection:void 0,offset:0};var o=i<0?(function(g){for(var{json:C,items:I,selection:d,deltaY:h}=g,E=_C(C,d),f=I.findIndex(x=>Mi(x.path,E)),m=()=>{var x;return(x=I[v-1])===null||x===void 0?void 0:x.height},v=f,k=0;m()!==void 0&&Math.abs(h)>k+m()/2;)k+=m(),v-=1;var S=I[v].path,b=v-f;return v!==f&&I[v]!==void 0?{beforePath:S,offset:b}:void 0})({json:e,selection:A,deltaY:i,items:n}):(function(g){for(var C,{json:I,items:d,selection:h,deltaY:E}=g,f=vI(I,h),m=d.findIndex(W=>Mi(W.path,f)),v=0,k=m,S=()=>{var W;return(W=d[k+1])===null||W===void 0?void 0:W.height};S()!==void 0&&Math.abs(E)>v+S()/2;)v+=S(),k+=1;var b=Yi(f),x=Xe(I,b),F=Array.isArray(x)?k:k+1,z=(C=d[F])===null||C===void 0?void 0:C.path,P=k-m;return z?{beforePath:z,offset:P}:{append:!0,offset:P}})({json:e,selection:A,deltaY:i,items:n});if(!o||o.offset===0)return{operations:void 0,updatedSelection:void 0,offset:0};var a=(function(g,C,I){if(!C)return[];var d="beforePath"in I?I.beforePath:void 0,h="append"in I?I.append:void 0,E=Yi(It(C)),f=Xe(g,E);if(!(h||d&&k0(d,E)&&d.length>E.length))return[];var m=_C(g,C),v=vI(g,C),k=ki(m),S=ki(v),b=d?d[E.length]:void 0;if(!ia(f)){if(Vo(f)){var x=Rr(k),F=Rr(S),z=b!==void 0?Rr(b):f.length;return Y9(F-x+1,z({op:"move",from:vt(E.concat(String(x+EA))),path:vt(E.concat(String(z+EA)))}):()=>({op:"move",from:vt(E.concat(String(x))),path:vt(E.concat(String(z)))}))}throw new Error("Cannot create move operations: parent must be an Object or Array")}var P=Object.keys(f),W=P.indexOf(k),eA=P.indexOf(S),Z=h?P.length:b!==void 0?P.indexOf(b):-1;return W!==-1&&eA!==-1&&Z!==-1?Z>W?[...P.slice(W,eA+1),...P.slice(Z,P.length)].map(EA=>SI(E,EA)):[...P.slice(Z,W),...P.slice(eA+1,P.length)].map(EA=>SI(E,EA)):[]})(e,A,o),r=Yi(_C(e,A)),s=Xe(e,r);if(Array.isArray(s)){var l=(function(g){var C,I,{items:d,json:h,selection:E,offset:f}=g,m=_C(h,E),v=vI(h,E),k=d.findIndex(F=>Mi(F.path,m)),S=d.findIndex(F=>Mi(F.path,v)),b=(C=d[k+f])===null||C===void 0?void 0:C.path,x=(I=d[S+f])===null||I===void 0?void 0:I.path;return fs(b,x)})({items:n,json:e,selection:A,offset:o.offset});return{operations:a,updatedSelection:l,offset:o.offset}}return{operations:a,updatedSelection:void 0,offset:o.offset}}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-validation-error.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-error-color, #ee5341); +} + +button.jse-validation-info.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-info-color, #4f91ff); +} + +button.jse-validation-warning.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-warning-color, #fdc539); +}`);var Z8A=JA('');function Rh(t,e){Nt(e,!1);var A=BA(),i=kI("absolute-popup"),n=L(e,"validationError",8),o=L(e,"onExpand",8);KA(()=>K(n()),()=>{N(A,o6A(n())&&n().isChildError?"Contains invalid data":n().message)}),Rn(),ni();var a=Z8A();tn(dA(a),{get data(){return z2}}),_r(()=>fe("click",a,function(){for(var r,s=arguments.length,l=new Array(s),g=0;gHh?.(r,s),()=>Me({text:c(A)},i)),Se(()=>{var r;return ii(a,1,"jse-validation-".concat((K(n()),(r=wA(()=>n().severity))!==null&&r!==void 0?r:"")),"svelte-q6a061")}),CA(t,a),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-expand.svelte-1qi6rc1 { + width: var(--jse-indent-size, calc(1em + 4px)); + padding: 0; + margin: 0; + border: none; + cursor: pointer; + background: transparent; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); + font-size: var(--jse-font-size-mono, 14px); + height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-expand.svelte-1qi6rc1:hover { + opacity: 0.8; +} + +.jse-meta.svelte-1qi6rc1, +.jse-separator.svelte-1qi6rc1, +.jse-index.svelte-1qi6rc1, +.jse-bracket.svelte-1qi6rc1 { + vertical-align: top; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} + +.jse-index.svelte-1qi6rc1 { + padding: 0 calc(0.5 * var(--jse-padding, 10px)); +} + +.jse-bracket.svelte-1qi6rc1 { + padding: 0 2px; +} +.jse-bracket.jse-expanded.svelte-1qi6rc1 { + padding-right: var(--jse-padding, 10px); +} + +.jse-identifier.svelte-1qi6rc1 { + vertical-align: top; + position: relative; +} + +.jse-json-node.svelte-1qi6rc1 { + position: relative; + color: var(--jse-text-color, #4d4d4d); +} +.jse-json-node.jse-root.svelte-1qi6rc1 { + min-height: 100%; + padding-bottom: 2px; + box-sizing: border-box; +} +.jse-json-node.jse-root.svelte-1qi6rc1 > .jse-contents-outer:where(.svelte-1qi6rc1) > .jse-contents:where(.svelte-1qi6rc1) { + padding-left: 0; +} +.jse-json-node.svelte-1qi6rc1 .jse-props:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-items:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-header-outer:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-footer-outer:where(.svelte-1qi6rc1) { + display: flex; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) .jse-meta:where(.svelte-1qi6rc1) > .jse-meta-inner:where(.svelte-1qi6rc1) { + display: flex; + justify-content: center; +} +.jse-json-node.svelte-1qi6rc1 .jse-contents-outer:where(.svelte-1qi6rc1) { + display: flex; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { + display: flex; + flex-direction: row; + align-items: flex-start; +} +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { + padding-left: var(--jse-indent-size, calc(1em + 4px)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) .jse-value-outer:where(.svelte-1qi6rc1) { + display: inline-flex; +} +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + display: inline-flex; + padding-left: calc(var(--jse-indent-size, calc(1em + 4px)) + 5px); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + background: var(--jse-contents-background-color, transparent); +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area:where(.svelte-1qi6rc1) { + padding: 0 calc(0.5 * var(--jse-padding, 10px)); + flex: 1; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-inside:where(.svelte-1qi6rc1) { + display: inline-flex; + align-items: center; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-after:where(.svelte-1qi6rc1) { + display: flex; + align-items: flex-end; +} +.jse-json-node.svelte-1qi6rc1 .jse-context-menu-pointer-anchor:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area:where(.svelte-1qi6rc1) { + display: flex; + position: relative; + z-index: 1; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); + max-width: 250px; + min-width: 100px; + height: 0; + margin-right: calc(0.5 * var(--jse-padding, 10px)); + outline: 1px solid; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-hovered:where(.svelte-1qi6rc1) { + outline-color: var(--jse-context-menu-pointer-hover-background, #b2b2b2); +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-meta { + background: none; +} +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { + background: inherit; + cursor: inherit; +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer.jse-selected-key:where(.svelte-1qi6rc1) { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer .jse-key-outer:hover { + background: inherit; + cursor: inherit; +} +.jse-json-node.jse-readonly.svelte-1qi6rc1 { + --jse-contents-selected-cursor: pointer; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-selected:where(.svelte-1qi6rc1) { + outline-color: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); +}`);var To=kD(()=>W8A),X8A=JA('
    :
    '),$8A=JA('
    [
     ',1),AwA=JA('
    [
    ]
    ',1),ewA=JA('
    '),twA=JA('
    '),iwA=JA('
    '),nwA=JA('
    '),owA=JA('
    '),awA=JA(" ",1),rwA=JA('
    '),swA=JA('
    ',1),lwA=JA('
    ',1),gwA=JA('
    :
    '),cwA=JA('
    {
    '),CwA=JA('
    {
    }
    ',1),IwA=JA('
    '),dwA=JA('
    '),BwA=JA('
    '),EwA=JA('
    '),hwA=JA('
    '),QwA=JA('
    '),uwA=JA('
    ',1),fwA=JA('
    ',1),pwA=JA('
    :
    '),mwA=JA('
    '),wwA=JA('
    '),DwA=JA('
    '),ywA=JA('
    '),vwA=JA('
    ');function BR(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=L(e,"pointer",9),o=L(e,"value",9),a=L(e,"state",9),r=L(e,"validationErrors",9),s=L(e,"searchResults",9),l=L(e,"selection",9),g=L(e,"context",9),C=L(e,"onDragSelectionStart",9),I=or("jsoneditor:JSONNode"),d=BA(void 0,!0),h=void 0,E=BA(void 0,!0),f=BA(void 0,!0),m=BA(void 0,!0),v=BA(void 0,!0),k=BA(void 0,!0),S=BA(void 0,!0),b=BA(void 0,!0);function x(YA){YA.stopPropagation();var fA=FR(YA);g().onExpand(c(f),!c(m),fA)}function F(){g().onExpand(c(f),!0)}function z(YA,fA){var XA=e3(c(f),Object.keys(o()),YA,fA);return g().onPatch(XA),ki(Es(XA[0].path))}function P(YA){g().onDrag(YA)}function W(YA){To().selecting&&(To(To().selecting=!1),YA.stopPropagation()),g().onDragEnd(),document.removeEventListener("mousemove",P,!0),document.removeEventListener("mouseup",W)}function eA(){var YA;return((YA=g().findElement([]))===null||YA===void 0||(YA=YA.getBoundingClientRect())===null||YA===void 0?void 0:YA.top)||0}function Z(YA,fA){var XA=eA()-YA.initialContentTop;return fA.clientY-YA.initialClientY-XA}function EA(YA){if(!g().readOnly&&l()){var fA=Yi(It(l()));if(Mi(c(f),fA)){var XA=(function(HA,vA){var Gt=[];function ft($){var oA=c(f).concat($),sA=g().findElement(oA);sA!==void 0&&Gt.push({path:oA,height:sA.clientHeight})}if(Array.isArray(o())){var he=g().getJson();if(he===void 0)return;var Ot=_C(he,HA),He=vI(he,HA),je=parseInt(ki(Ot),10),pt=parseInt(ki(He),10),xe=vA.find($=>je>=$.start&&pt<=$.end);if(!xe)return;var{start:oi,end:j}=xe;zX(oi,Math.min(o().length,j),$=>ft(String($)))}else Object.keys(o()).forEach(ft);return Gt})(l(),c(k)||kh);if(I("dragSelectionStart",{selection:l(),items:XA}),XA){var DA=g().getJson();if(DA!==void 0){var ee=_C(DA,l()),NA=XA.findIndex(HA=>Mi(HA.path,ee)),{offset:ke}=T_({json:DA,selection:g().getSelection(),deltaY:0,items:XA});N(E,{initialTarget:YA.target,initialClientY:YA.clientY,initialContentTop:eA(),selectionStartIndex:NA,selectionItemsCount:MI(DA,l()).length,items:XA,offset:ke,didMoveItems:!1}),To(To().dragging=!0),document.addEventListener("mousemove",X,!0),document.addEventListener("mouseup",iA)}}else I("Cannot drag the current selection (probably spread over multiple sections)")}else C()(YA)}}function X(YA){if(c(E)){var fA=g().getJson();if(fA===void 0)return;var XA=Z(c(E),YA),{offset:DA}=T_({json:fA,selection:g().getSelection(),deltaY:XA,items:c(E).items});DA!==c(E).offset&&(I("drag selection",DA,XA),N(E,Me(Me({},c(E)),{},{offset:DA,didMoveItems:!0})))}}function iA(YA){if(c(E)){var fA=g().getJson();if(fA===void 0)return;var XA=Z(c(E),YA),{operations:DA,updatedSelection:ee}=T_({json:fA,selection:g().getSelection(),deltaY:XA,items:c(E).items});if(DA)g().onPatch(DA,(HA,vA)=>({state:vA,selection:ee??l()}));else if(YA.target===c(E).initialTarget&&!c(E).didMoveItems){var NA=b_(YA.target),ke=i$(YA.target);ke&&g().onSelect(BZ(NA,ke))}N(E,void 0),To(To().dragging=!1),document.removeEventListener("mousemove",X,!0),document.removeEventListener("mouseup",iA)}}function AA(YA){YA.shiftKey||(YA.stopPropagation(),YA.preventDefault(),g().onSelect(OC(c(f))))}function IA(YA){YA.shiftKey||(YA.stopPropagation(),YA.preventDefault(),g().onSelect(LC(c(f))))}function aA(YA){g().onSelect(OC(c(f))),Ro(),g().onContextMenu(YA)}function rA(YA){g().onSelect(LC(c(f))),Ro(),g().onContextMenu(YA)}KA(()=>K(n()),()=>{N(f,Es(n()))}),KA(()=>K(n()),()=>{N(A,encodeURIComponent(n()))}),KA(()=>K(a()),()=>{N(m,!!yd(a())&&a().expanded)}),KA(()=>(K(o()),K(a())),()=>{N(v,v0(o(),a(),[]))}),KA(()=>K(a()),()=>{N(k,ir(a())?a().visibleSections:void 0)}),KA(()=>K(r()),()=>{var YA;N(S,(YA=r())===null||YA===void 0?void 0:YA.validationError)}),KA(()=>(K(g()),K(l()),c(f)),()=>{N(b,Uf(g().getJson(),l(),c(f)))}),KA(()=>c(f),()=>{N(i,c(f).length===0)}),Rn(),ni(!0);var uA,UA,$A=vwA(),zA=dA($A),pA=YA=>{var fA=lwA(),XA=et(fA),DA=dA(XA),ee=dA(DA),NA=dA(ee),ke=GA=>{tn(GA,{get data(){return c0}})},HA=GA=>{tn(GA,{get data(){return kE}})};jA(NA,GA=>{c(m)?GA(ke):GA(HA,!1)});var vA=_A(ee,2);Ia(vA,e,"identifier",{},null);var Gt=_A(vA,2),ft=GA=>{CA(GA,X8A())};jA(Gt,GA=>{c(i)||GA(ft)});var he=_A(Gt,2),Ot=dA(he),He=dA(Ot),je=GA=>{var OA=$8A();nD(_A(et(OA),2),{children:(ht,tt)=>{var ze=dr();Se(()=>{var Te,ci;return Lt(ze,"".concat((K(o()),(Te=wA(()=>o().length))!==null&&Te!==void 0?Te:""),` + `).concat((K(o()),(ci=wA(()=>o().length===1?"item":"items"))!==null&&ci!==void 0?ci:"")))}),CA(ht,ze)},$$slots:{default:!0}}),CA(GA,OA)},pt=GA=>{var OA=AwA();nD(_A(et(OA),2),{onclick:F,children:(ht,tt)=>{var ze=dr();Se(()=>{var Te,ci;return Lt(ze,"".concat((K(o()),(Te=wA(()=>o().length))!==null&&Te!==void 0?Te:""),` + `).concat((K(o()),(ci=wA(()=>o().length===1?"item":"items"))!==null&&ci!==void 0?ci:"")))}),CA(ht,ze)},$$slots:{default:!0}}),CA(GA,OA)};jA(He,GA=>{c(m)?GA(je):GA(pt,!1)});var xe=_A(he,2),oi=GA=>{var OA=ewA();cI(dA(OA),{get root(){return c(i)},selected:!0,get onContextMenu(){return K(g()),wA(()=>g().onContextMenu)}}),CA(GA,OA)};jA(xe,GA=>{K(g()),c(b),K(l()),K(En),K(Co),K(tr),K(Mi),K(It),c(f),wA(()=>!g().readOnly&&c(b)&&l()&&(En(l())||Co(l()))&&!tr(l())&&Mi(It(l()),c(f)))&&GA(oi)});var j=_A(DA,2),$=GA=>{Rh(GA,{get validationError(){return c(S)},onExpand:F})};jA(j,GA=>{c(S),c(m),wA(()=>c(S)&&(!c(m)||!c(S).isChildError))&&GA($)});var oA=_A(j,2),sA=GA=>{var OA=twA();fe("click",OA,AA),CA(GA,OA)},TA=GA=>{var OA=iwA();fe("click",OA,IA),CA(GA,OA)};jA(oA,GA=>{c(m)?GA(sA):GA(TA,!1)});var de=_A(XA,2),Qe=GA=>{var OA=swA(),ht=et(OA),tt=dA(ht),ze=hn=>{var Ke,nn,Si=nwA(),Li=dA(Si),Zi=it(()=>(c(b),K(Va),K(l()),wA(()=>c(b)&&Va(l()))));cI(Li,{insert:!0,get selected(){return c(Zi)},onContextMenu:aA}),Se(bt=>{Ke=ii(Si,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,Ke,bt),_n(Si,"title",k_),nn=mg(Si,"",nn,{"--level":(c(f),wA(()=>c(f).length+1))})},[()=>({"jse-hovered":c(d)===rd,"jse-selected":c(b)&&Va(l())})]),CA(hn,Si)};jA(tt,hn=>{K(g()),c(d),K(rd),c(b),K(Va),K(l()),wA(()=>!g().readOnly&&(c(d)===rd||c(b)&&Va(l())))&&hn(ze)}),da(_A(tt,2),1,()=>c(k)||kh,ka,(hn,Ke,nn)=>{var Si=awA(),Li=et(Si);da(Li,1,()=>(K(o()),c(Ke),c(E),wA(()=>(function(on,Kt,G){var dt=Kt.start,Bi=Math.min(Kt.end,on.length),Qn=K8(dt,Bi);return G&&G.offset!==0?VW(Qn,G.selectionStartIndex,G.selectionItemsCount,G.offset).map((un,Vn)=>({index:un,gutterIndex:Vn})):Qn.map(un=>({index:un,gutterIndex:un}))})(o(),c(Ke),c(E)))),on=>on.index,(on,Kt)=>{var G=it(()=>(K(ir),K(r()),c(Kt),wA(()=>ir(r())?r().items[c(Kt).index]:void 0))),dt=it(()=>(K(O5),K(g()),K(l()),c(f),c(Kt),wA(()=>O5(g().getJson(),l(),c(f).concat(String(c(Kt).index)))))),Bi=Fi(),Qn=et(Bi),un=it(()=>(K(s4),K(n()),c(Kt),wA(()=>s4(n(),c(Kt).index)))),Vn=it(()=>(K(ir),K(a()),c(Kt),wA(()=>ir(a())?a().items[c(Kt).index]:void 0))),Yo=it(()=>(K(ir),K(s()),c(Kt),wA(()=>ir(s())?s().items[c(Kt).index]:void 0)));BR(Qn,{get value(){return K(o()),c(Kt),wA(()=>o()[c(Kt).index])},get pointer(){return c(un)},get state(){return c(Vn)},get validationErrors(){return c(G)},get searchResults(){return c(Yo)},get selection(){return c(dt)},get context(){return g()},onDragSelectionStart:EA,$$slots:{identifier:(Bo,No)=>{var Zo=owA(),Do=dA(Zo),Ba=dA(Do);Se(()=>Lt(Ba,(c(Kt),wA(()=>c(Kt).gutterIndex)))),CA(Bo,Zo)}}}),CA(on,Bi)});var Zi=_A(Li,2),bt=on=>{var Kt=it(()=>c(k)||kh);z8A(on,{get visibleSections(){return c(Kt)},sectionIndex:nn,get total(){return K(o()),wA(()=>o().length)},get path(){return c(f)},get onExpandSection(){return K(g()),wA(()=>g().onExpandSection)},get selection(){return l()},get context(){return g()}})};jA(Zi,on=>{c(Ke),K(o()),wA(()=>c(Ke).end{var Ke=rwA();fe("click",Ke,IA),CA(hn,Ke)};jA(ci,hn=>{c(i)||hn(gn)}),CA(GA,OA)};jA(de,GA=>{c(m)&&GA(Qe)}),fe("click",ee,x),CA(YA,fA)},PA=YA=>{var fA=Fi(),XA=et(fA),DA=NA=>{var ke=fwA(),HA=et(ke),vA=dA(HA),Gt=dA(vA),ft=dA(Gt),he=Te=>{tn(Te,{get data(){return c0}})},Ot=Te=>{tn(Te,{get data(){return kE}})};jA(ft,Te=>{c(m)?Te(he):Te(Ot,!1)});var He=_A(Gt,2);Ia(He,e,"identifier",{},null);var je=_A(He,2),pt=Te=>{CA(Te,gwA())};jA(je,Te=>{c(i)||Te(pt)});var xe=_A(je,2),oi=dA(xe),j=dA(oi),$=Te=>{CA(Te,cwA())},oA=Te=>{var ci=CwA();nD(_A(et(ci),2),{onclick:F,children:(gn,hn)=>{var Ke=dr();Se((nn,Si)=>Lt(Ke,"".concat(nn??"",` + `).concat(Si??"")),[()=>(K(o()),wA(()=>Object.keys(o()).length)),()=>(K(o()),wA(()=>Object.keys(o()).length===1?"prop":"props"))]),CA(gn,Ke)},$$slots:{default:!0}}),CA(Te,ci)};jA(j,Te=>{c(m)?Te($):Te(oA,!1)});var sA=_A(xe,2),TA=Te=>{var ci=IwA();cI(dA(ci),{get root(){return c(i)},selected:!0,get onContextMenu(){return K(g()),wA(()=>g().onContextMenu)}}),CA(Te,ci)};jA(sA,Te=>{K(g()),c(b),K(l()),K(En),K(Co),K(tr),K(Mi),K(It),c(f),wA(()=>!g().readOnly&&c(b)&&l()&&(En(l())||Co(l()))&&!tr(l())&&Mi(It(l()),c(f)))&&Te(TA)});var de=_A(vA,2),Qe=Te=>{Rh(Te,{get validationError(){return c(S)},onExpand:F})};jA(de,Te=>{c(S),c(m),wA(()=>c(S)&&(!c(m)||!c(S).isChildError))&&Te(Qe)});var GA=_A(de,2),OA=Te=>{var ci=dwA();fe("click",ci,AA),CA(Te,ci)},ht=Te=>{var ci=Fi(),gn=et(ci),hn=Ke=>{var nn=BwA();fe("click",nn,IA),CA(Ke,nn)};jA(gn,Ke=>{c(i)||Ke(hn)},!0),CA(Te,ci)};jA(GA,Te=>{c(m)?Te(OA):Te(ht,!1)});var tt=_A(HA,2),ze=Te=>{var ci=uwA(),gn=et(ci),hn=dA(gn),Ke=Zi=>{var bt,on,Kt=EwA(),G=dA(Kt),dt=it(()=>(c(b),K(Va),K(l()),wA(()=>c(b)&&Va(l()))));cI(G,{insert:!0,get selected(){return c(dt)},onContextMenu:aA}),Se(Bi=>{bt=ii(Kt,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,bt,Bi),_n(Kt,"title",k_),on=mg(Kt,"",on,{"--level":(c(f),wA(()=>c(f).length+1))})},[()=>({"jse-hovered":c(d)===rd,"jse-selected":c(b)&&Va(l())})]),CA(Zi,Kt)};jA(hn,Zi=>{K(g()),c(d),K(rd),c(b),K(Va),K(l()),wA(()=>!g().readOnly&&(c(d)===rd||c(b)&&Va(l())))&&Zi(Ke)}),da(_A(hn,2),1,()=>(K(o()),c(E),wA(()=>(function(Zi,bt){var on=Object.keys(Zi);return bt&&bt.offset!==0?VW(on,bt.selectionStartIndex,bt.selectionItemsCount,bt.offset):on})(o(),c(E)))),ka,(Zi,bt)=>{var on=it(()=>(K(s4),K(n()),c(bt),wA(()=>s4(n(),c(bt))))),Kt=it(()=>(K(Cl),K(s()),c(bt),wA(()=>Cl(s())?s().properties[c(bt)]:void 0))),G=it(()=>(K(Cl),K(r()),c(bt),wA(()=>Cl(r())?r().properties[c(bt)]:void 0))),dt=it(()=>(c(f),c(bt),wA(()=>c(f).concat(c(bt))))),Bi=it(()=>(K(O5),K(g()),K(l()),K(c(dt)),wA(()=>O5(g().getJson(),l(),c(dt))))),Qn=Fi(),un=et(Qn),Vn=it(()=>(K(Cl),K(a()),c(bt),wA(()=>Cl(a())?a().properties[c(bt)]:void 0)));BR(un,{get value(){return K(o()),c(bt),wA(()=>o()[c(bt)])},get pointer(){return c(on)},get state(){return c(Vn)},get validationErrors(){return c(G)},get searchResults(){return c(Kt)},get selection(){return c(Bi)},get context(){return g()},onDragSelectionStart:EA,$$slots:{identifier:(Yo,Bo)=>{var No,Zo=hwA(),Do=dA(Zo),Ba=it(()=>(K(mZ),K(c(Kt)),wA(()=>mZ(c(Kt)))));(function(Xo,ra){Nt(ra,!1);var yo=BA(void 0,!0),ge=BA(void 0,!0),mi=L(ra,"pointer",9),cn=L(ra,"key",9),fn=L(ra,"selection",9),Ho=L(ra,"searchResultItems",9),ya=L(ra,"onUpdateKey",9),_i=L(ra,"context",9),Eo=BA(void 0,!0);function Za(xA){c(ge)||_i().readOnly||(xA.preventDefault(),_i().onSelect(zR(c(Eo))))}function vo(xA,Ae){var De=ya()(cn(),_i().normalization.unescapeValue(xA)),mA=Yi(c(Eo)).concat(De);_i().onSelect(Ae===yI.nextInside?Hi(mA):JC(mA)),Ae!==yI.self&&_i().focus()}function Ta(){_i().onSelect(JC(c(Eo))),_i().focus()}KA(()=>K(mi()),()=>{N(Eo,Es(mi()))}),KA(()=>(K(fn()),c(Eo)),()=>{N(yo,nr(fn())&&Mi(fn().path,c(Eo)))}),KA(()=>(c(yo),K(fn())),()=>{N(ge,c(yo)&&tr(fn()))}),Rn(),ni(!0);var Jn=q8A(),Ui=et(Jn),qt=xA=>{var Ae=it(()=>(K(_i()),K(cn()),wA(()=>_i().normalization.escapeValue(cn())))),De=it(()=>(K(tr),K(fn()),wA(()=>tr(fn())?fn().initialValue:void 0)));d$(xA,{get value(){return c(Ae)},get initialValue(){return c(De)},label:"Edit key",shortText:!0,onChange:vo,onCancel:Ta,get onFind(){return K(_i()),wA(()=>_i().onFind)}})},Nn=xA=>{var Ae,De=j8A(),mA=dA(De),FA=Ne=>{var nt=it(()=>(K(_i()),K(cn()),wA(()=>_i().normalization.escapeValue(cn()))));p$(Ne,{get text(){return c(nt)},get searchResultItems(){return Ho()}})},le=Ne=>{var nt=dr();Se(rt=>Lt(nt,rt),[()=>(K(Jh),K(_i()),K(cn()),wA(()=>Jh(_i().normalization.escapeValue(cn()))))]),CA(Ne,nt)};jA(mA,Ne=>{Ho()?Ne(FA):Ne(le,!1)}),Se(()=>Ae=ii(De,1,"jse-key svelte-1n4cez4",null,Ae,{"jse-empty":cn()===""})),fe("dblclick",De,Za),CA(xA,De)};jA(Ui,xA=>{K(_i()),c(ge),wA(()=>!_i().readOnly&&c(ge))?xA(qt):xA(Nn,!1)});var ho=_A(Ui,2),Fo=xA=>{cI(xA,{selected:!0,get onContextMenu(){return K(_i()),wA(()=>_i().onContextMenu)}})};jA(ho,xA=>{K(_i()),c(yo),c(ge),wA(()=>!_i().readOnly&&c(yo)&&!c(ge))&&xA(Fo)}),CA(Xo,Jn),Ft()})(Do,{get pointer(){return c(on)},get key(){return c(bt)},get selection(){return c(Bi)},get searchResultItems(){return c(Ba)},get context(){return g()},onUpdateKey:z}),Se(Xo=>No=ii(Zo,1,"jse-key-outer svelte-1qi6rc1",null,No,Xo),[()=>({"jse-selected-key":nr(c(Bi))&&Mi(c(Bi).path,c(dt))})]),CA(Yo,Zo)}}}),CA(Zi,Qn)});var nn=_A(gn,2),Si=_A(dA(nn),2),Li=Zi=>{var bt=QwA();fe("click",bt,IA),CA(Zi,bt)};jA(Si,Zi=>{c(i)||Zi(Li)}),CA(Te,ci)};jA(tt,Te=>{c(m)&&Te(ze)}),fe("click",Gt,x),CA(NA,ke)},ee=NA=>{var ke=DwA(),HA=dA(ke),vA=dA(HA);Ia(vA,e,"identifier",{},null);var Gt=_A(vA,2),ft=sA=>{CA(sA,pwA())};jA(Gt,sA=>{c(i)||sA(ft)});var he=_A(Gt,2),Ot=dA(he),He=it(()=>c(b)?l():void 0),je=it(()=>(K(wZ),K(s()),wA(()=>wZ(s()))));G$(Ot,{get path(){return c(f)},get value(){return o()},get enforceString(){return c(v)},get selection(){return c(He)},get searchResultItems(){return c(je)},get context(){return g()}});var pt=_A(he,2),xe=sA=>{var TA=mwA();cI(dA(TA),{get root(){return c(i)},selected:!0,get onContextMenu(){return K(g()),wA(()=>g().onContextMenu)}}),CA(sA,TA)};jA(pt,sA=>{K(g()),c(b),K(l()),K(En),K(Co),K(tr),K(Mi),K(It),c(f),wA(()=>!g().readOnly&&c(b)&&l()&&(En(l())||Co(l()))&&!tr(l())&&Mi(It(l()),c(f)))&&sA(xe)});var oi=_A(HA,2),j=sA=>{Rh(sA,{get validationError(){return c(S)},onExpand:F})};jA(oi,sA=>{c(S)&&sA(j)});var $=_A(oi,2),oA=sA=>{var TA=wwA();fe("click",TA,IA),CA(sA,TA)};jA($,sA=>{c(i)||sA(oA)}),CA(NA,ke)};jA(XA,NA=>{K(Mn),K(o()),wA(()=>Mn(o()))?NA(DA):NA(ee,!1)},!0),CA(YA,fA)};jA(zA,YA=>{K(o()),wA(()=>Array.isArray(o()))?YA(pA):YA(PA,!1)});var Ue=_A(zA,2),_e=YA=>{var fA,XA=ywA(),DA=dA(XA),ee=it(()=>(c(b),K(dl),K(l()),wA(()=>c(b)&&dl(l()))));cI(DA,{insert:!0,get selected(){return c(ee)},onContextMenu:rA}),Se(NA=>{fA=ii(XA,1,"jse-insert-area jse-after svelte-1qi6rc1",null,fA,NA),_n(XA,"title",k_)},[()=>({"jse-hovered":c(d)===T5,"jse-selected":c(b)&&dl(l())})]),CA(YA,XA)};jA(Ue,YA=>{K(g()),c(d),K(T5),c(b),K(dl),K(l()),wA(()=>!g().readOnly&&(c(d)===T5||c(b)&&dl(l())))&&YA(_e)}),Se((YA,fA)=>{uA=ii($A,1,YA,"svelte-1qi6rc1",uA,fA),_n($A,"data-path",c(A)),_n($A,"aria-selected",c(b)),UA=mg($A,"",UA,{"--level":(c(f),wA(()=>c(f).length))})},[()=>bI((K(Dc),c(m),K(g()),c(f),K(o()),wA(()=>Dc("jse-json-node",{"jse-expanded":c(m)},g().onClassName(c(f),o()))))),()=>({"jse-root":c(i),"jse-selected":c(b)&&Co(l()),"jse-selected-value":c(b)&&En(l()),"jse-readonly":g().readOnly,"jse-hovered":c(d)===$W})]),fe("mousedown",$A,function(YA){if((YA.buttons===1||YA.buttons===2)&&!((fA=YA.target).nodeName==="DIV"&&fA.contentEditable==="true"||YA.buttons===1&&e$(YA.target,"BUTTON"))){var fA;YA.stopPropagation(),YA.preventDefault(),g().focus(),document.addEventListener("mousemove",P,!0),document.addEventListener("mouseup",W);var XA=b_(YA.target),DA=g().getJson(),ee=g().getDocumentState();if(!l()||XA===oo.after||XA===oo.inside||l().type!==XA&&l().type!==oo.multi||!Uf(DA,l(),c(f)))if(To(To().selecting=!0),To(To().selectionAnchor=c(f)),To(To().selectionAnchorType=XA),To(To().selectionFocus=c(f)),YA.shiftKey){var NA=g().getSelection();NA&&g().onSelect(fs(hd(NA),c(f)))}else if(XA===oo.multi)if(c(i)&&YA.target.hasAttribute("data-path")){var ke=ki(l$(o(),ee));g().onSelect(rR(ke))}else g().onSelect(fs(c(f),c(f)));else DA!==void 0&&g().onSelect(BZ(XA,c(f)));else YA.button===0&&C()(YA)}}),fe("mousemove",$A,function(YA){if(To().selecting){YA.preventDefault(),YA.stopPropagation(),To().selectionFocus===void 0&&window.getSelection&&window.getSelection().empty();var fA=b_(YA.target);Mi(c(f),To().selectionFocus)&&fA===To().selectionAnchorType||(To(To().selectionFocus=c(f)),To(To().selectionAnchorType=fA),g().onSelect(fs(To().selectionAnchor||To().selectionFocus,To().selectionFocus)))}}),fe("mouseover",$A,function(YA){To().selecting||To().dragging||(YA.stopPropagation(),QI(YA.target,"data-type","selectable-value")?N(d,$W):QI(YA.target,"data-type","selectable-key")?N(d,void 0):QI(YA.target,"data-type","insert-selection-area-inside")?N(d,rd):QI(YA.target,"data-type","insert-selection-area-after")&&N(d,T5),clearTimeout(h))}),fe("mouseout",$A,function(YA){YA.stopPropagation(),h=window.setTimeout(()=>N(d,void 0))}),CA(t,$A),Ft()}var K$={prefix:"fas",iconName:"jsoneditor-expand",icon:[512,512,[],"","M 0,448 V 512 h 512 v -64 z M 0,0 V 64 H 512 V 0 Z M 256,96 128,224 h 256 z M 256,416 384,288 H 128 Z"]},U$={prefix:"fas",iconName:"jsoneditor-collapse",icon:[512,512,[],"","m 0,224 v 64 h 512 v -64 z M 256,192 384,64 H 128 Z M 256,320 128,448 h 256 z"]},FZ={prefix:"fas",iconName:"jsoneditor-format",icon:[512,512,[],"","M 0,32 v 64 h 416 v -64 z M 160,160 v 64 h 352 v -64 z M 160,288 v 64 h 288 v -64 z M 0,416 v 64 h 320 v -64 z"]},bwA={prefix:"fas",iconName:"jsoneditor-compact",icon:[512,512,[],"","M 0,32 v 64 h 512 v -64 z M 0,160 v 64 h 512 v -64 z M 0,288 v 64 h 352 v -64 z"]};Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-welcome.svelte-1lhnan { + flex: 1; + overflow: auto; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + display: flex; + flex-direction: column; + align-items: center; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-welcome.svelte-1lhnan:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-welcome.svelte-1lhnan .jse-space.jse-before:where(.svelte-1lhnan) { + flex: 1; +} +.jse-welcome.svelte-1lhnan .jse-space.jse-after:where(.svelte-1lhnan) { + flex: 2; +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) { + display: flex; + flex-direction: column; + max-width: 300px; + margin: 2em var(--jse-padding, 10px); + gap: var(--jse-padding, 10px); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) .jse-welcome-info:where(.svelte-1lhnan) { + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +}`);var MwA=JA('
    You can paste clipboard data using Ctrl+V, or use the following options:
    ',1),SwA=JA('
    Empty document
    ');function ER(t,e){var A=typeof t=="string"?t.toLowerCase():t,i=typeof e=="string"?e.toLowerCase():e;return(0,YZ.default)(A,i)}function T$(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,n=Xe(t,e);if(Vo(n)){if(A===void 0)throw new Error("Cannot sort: no property selected by which to sort the array");return(function(o){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,l=(function(C,I){var d={boolean:0,number:1,string:2,undefined:4},h=3;return function(E,f){var m=Xe(E,C),v=Xe(f,C);if(typeof m!=typeof v){var k,S,b=(k=d[typeof m])!==null&&k!==void 0?k:h,x=(S=d[typeof v])!==null&&S!==void 0?S:h;return b>x?I:bv?I:m1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=Xe(o,a),l=Object.keys(s).slice();l.sort((C,I)=>r*ER(C,I));var g={};return l.forEach(C=>g[C]=s[C]),[{op:"replace",path:vt(a),value:g}]})(t,e,i);throw new Error("Cannot sort: no array or object")}Vf(["click"]);Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-dropdown.svelte-1k47orx { + position: absolute; + top: 100%; + left: 0; + z-index: 3; + background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); + color: var(--jse-navigation-bar-dropdown-color, #656565); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + display: flex; + flex-direction: column; + max-height: 300px; + overflow: auto; + min-width: 80px; +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx) { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + border: none; + background: transparent; + color: inherit; + cursor: pointer; + outline: none; + text-align: left; + white-space: nowrap; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)) 36px; +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):focus, .jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):hover { + background: var(--jse-navigation-bar-background-highlight, #e5e5e5); +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item.jse-selected:where(.svelte-1k47orx) { + background: var(--jse-navigation-bar-dropdown-color, #656565); + color: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); +}`);var kwA=JA(''),xwA=JA(''),_wA=JA('
    ');function RwA(t,e){Nt(e,!1);var A=L(e,"items",9),i=L(e,"selectedItem",9),n=L(e,"onSelect",9);ni(!0);var o=_wA(),a=dA(o);da(a,1,()=>(K(gD),K(A()),wA(()=>gD(A(),100))),l=>l,(l,g)=>{var C,I=kwA(),d=dA(I);Se((h,E)=>{C=ii(I,1,"jse-navigation-bar-dropdown-item svelte-1k47orx",null,C,{"jse-selected":c(g)===i()}),_n(I,"title",h),Lt(d,E)},[()=>(c(g),wA(()=>c(g).toString())),()=>(K(SC),c(g),wA(()=>SC(c(g).toString(),30)))]),fe("click",I,vC(()=>n()(c(g)))),CA(l,I)});var r=_A(a,2),s=l=>{var g=xwA();_n(g,"title","Limited to 100 items"),CA(l,g)};jA(r,l=>{K(A()),wA(()=>A().length>100)&&l(s)}),CA(t,o),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-item.svelte-13sijxb { + position: relative; + display: flex; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb) { + font-family: inherit; + font-size: inherit; + padding: calc(0.5 * var(--jse-padding, 10px)) 2px; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + outline: none; + min-width: 2em; + white-space: nowrap; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):focus, .jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):hover { + background: var(--jse-panel-button-background-highlight, #e0e0e0); + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow:where(.svelte-13sijxb) { + padding: 2px var(--jse-padding, 10px) 0; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow.jse-open:where(.svelte-13sijxb) { + background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); + color: var(--jse-navigation-bar-dropdown-color, #656565); +} +.jse-navigation-bar-item.svelte-13sijxb:last-child { + padding-right: var(--jse-padding, 10px); +}`);var NwA=JA(''),FwA=JA('
    ');function LZ(t,e){Nt(e,!1);var A,i=BA(void 0,!0),n=BA(void 0,!0),{openAbsolutePopup:o,closeAbsolutePopup:a}=kI("absolute-popup"),r=L(e,"path",9),s=L(e,"index",9),l=L(e,"onSelect",9),g=L(e,"getItems",9),C=BA(void 0,!0),I=BA(!1,!0);function d(k){a(A),l()(c(i).concat(k))}KA(()=>(K(r()),K(s())),()=>{N(i,r().slice(0,s()))}),KA(()=>(K(r()),K(s())),()=>{N(n,r()[s()])}),Rn(),ni(!0);var h,E=FwA(),f=dA(E);tn(dA(f),{get data(){return $9}});var m=_A(f,2),v=k=>{var S=NwA(),b=dA(S);Se(()=>Lt(b,c(n))),fe("click",S,()=>d(c(n))),CA(k,S)};jA(m,k=>{c(n)!==void 0&&k(v)}),Oo(E,k=>N(C,k),()=>c(C)),Se(()=>h=ii(f,1,"jse-navigation-bar-button jse-navigation-bar-arrow svelte-13sijxb",null,h,{"jse-open":c(I)})),fe("click",f,function(){if(c(C)){N(I,!0);var k={items:g()(c(i)),selectedItem:c(n),onSelect:d};A=o(RwA,k,{anchor:c(C),closeOnOuterClick:!0,onClose:()=>{N(I,!1)}})}}),CA(t,E),Ft()}function WR(t){var e,A;if(navigator.clipboard)return navigator.clipboard.writeText(t);if((e=(A=document).queryCommandSupported)!==null&&e!==void 0&&e.call(A,"copy")){var i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch(n){console.error(n)}finally{document.body.removeChild(i)}return Promise.resolve()}return console.error("Copy failed."),Promise.resolve()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-path-editor.svelte-uyexy4 { + flex: 1; + display: flex; + border: var(--jse-edit-outline, 2px solid #656565); + background: var(--jse-background-color, #fff); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { + flex: 1; + font-family: inherit; + font-size: inherit; + padding: 0 5px 1px; + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); + border: none; + outline: none; +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button:where(.svelte-uyexy4) { + border: none; + background: var(--jse-background-color, #fff); + cursor: pointer; + font-family: inherit; + font-size: 80%; + color: inherit; +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-copy.copied:where(.svelte-uyexy4) { + color: var(--message-success-background, #9ac45d); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-validation-error:where(.svelte-uyexy4) { + color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.error.svelte-uyexy4 { + border-color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.error.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { + color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 .jse-copied-text:where(.svelte-uyexy4) { + background: var(--message-success-background, #9ac45d); + color: var(--jse-message-success-color, #fff); + position: relative; + margin: 2px; + padding: 0 5px; + border-radius: 3px; +}`);var LwA=JA(''),GwA=JA('
    Copied!
    '),KwA=JA('
    ');function UwA(t,e){Nt(e,!1);var A=BA(),i=kI("absolute-popup"),n=L(e,"path",8),o=L(e,"pathParser",8),a=L(e,"onChange",8),r=L(e,"onClose",8),s=L(e,"onError",8),l=L(e,"pathExists",8),g=BA(),C=BA(),I=BA(!1),d=void 0,h=BA(!1);function E(){c(g).focus()}function f(W){try{var eA=o().parse(W);return(function(Z){if(!l()(Z))throw new Error("Path does not exist in current document")})(eA),{path:eA,error:void 0}}catch(Z){return{path:void 0,error:Z}}}As(()=>{E()}),Dg(()=>{clearTimeout(d)}),KA(()=>(K(o()),K(n())),()=>{N(C,o().stringify(n()))}),KA(()=>(c(I),c(C)),()=>{N(A,c(I)?f(c(C)).error:void 0)}),Rn(),ni();var m,v=KwA(),k=dA(v);Oo(k,W=>N(g,W),()=>c(g));var S=_A(k,2),b=W=>{var eA=LwA();tn(dA(eA),{get data(){return z2}}),ms(eA,(Z,EA)=>Hh?.(Z,EA),()=>Me({text:String(c(A)||"")},i)),CA(W,eA)};jA(S,W=>{c(A)&&W(b)});var x=_A(S,2),F=W=>{CA(W,GwA())};jA(x,W=>{c(h)&&W(F)});var z,P=_A(x,2);tn(dA(P),{get data(){return IC}}),Se(()=>{m=ii(v,1,"jse-navigation-bar-path-editor svelte-uyexy4",null,m,{error:c(A)}),Dd(k,c(C)),z=ii(P,1,"jse-navigation-bar-copy svelte-uyexy4",null,z,{copied:c(h)})}),fe("keydown",k,vC(function(W){var eA=TC(W);if(eA==="Escape"&&(W.preventDefault(),r()()),eA==="Enter"){W.preventDefault(),N(I,!0);var Z=f(c(C));Z.path!==void 0?a()(Z.path):s()(Z.error)}})),fe("input",k,function(W){N(C,W.currentTarget.value)}),fe("click",P,function(){WR(c(C)),N(h,!0),d=window.setTimeout(()=>N(h,!1),1e3),E()}),CA(t,v),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar.svelte-hjhal6 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-button-color, inherit); + padding: 0; + margin: 0; + display: flex; + overflow: auto; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + color: var(--jse-panel-color-readonly, #b2b2b2); + background: transparent; + border: none; + display: flex; + cursor: pointer; + outline: none; + align-items: center; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.flex:where(.svelte-hjhal6) { + flex: 1; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):focus, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):hover, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.editing:where(.svelte-hjhal6) { + background: var(--jse-panel-button-background-highlight, #e0e0e0); + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + transition: color 0.2s ease-in, background 0.2s ease-in; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) .jse-navigation-bar-space:where(.svelte-hjhal6) { + flex: 1; + text-align: left; +}`);var TwA=JA(" ",1),JwA=JA('
    ');function OwA(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=or("jsoneditor:NavigationBar"),o=L(e,"json",9),a=L(e,"selection",9),r=L(e,"onSelect",9),s=L(e,"onError",9),l=L(e,"pathParser",9),g=BA(void 0,!0),C=BA(!1,!0);function I(eA){n("get items for path",eA);var Z=Xe(o(),eA);if(Array.isArray(Z))return K8(0,Z.length).map(String);if(Mn(Z)){var EA=Object.keys(Z).slice(0);return EA.sort(ER),EA}return[]}function d(eA){return vr(o(),eA)}function h(eA){n("select path",JSON.stringify(eA)),r()(fs(eA,eA))}function E(){N(C,!1)}function f(eA){E(),h(eA)}KA(()=>(K(a()),It),()=>{N(A,a()?It(a()):[])}),KA(()=>(K(o()),c(A)),()=>{N(i,aa(Xe(o(),c(A))))}),KA(()=>c(A),()=>{c(A),setTimeout(()=>{if(c(g)&&c(g).scrollTo){var eA=c(g).scrollWidth-c(g).clientWidth;eA>0&&(n("scrollTo ",eA),c(g).scrollTo({left:eA,behavior:"smooth"}))}})}),Rn(),ni(!0);var m=JwA(),v=dA(m),k=eA=>{var Z=TwA(),EA=et(Z);da(EA,1,()=>c(A),ka,(AA,IA,aA)=>{LZ(AA,{getItems:I,get path(){return c(A)},index:aA,onSelect:h})});var X=_A(EA,2),iA=AA=>{LZ(AA,{getItems:I,get path(){return c(A)},get index(){return c(A),wA(()=>c(A).length)},onSelect:h})};jA(X,AA=>{c(i)&&AA(iA)}),CA(eA,Z)},S=eA=>{UwA(eA,{get path(){return c(A)},onClose:E,onChange:f,get onError(){return s()},pathExists:d,get pathParser(){return l()}})};jA(v,eA=>{c(C)?eA(S,!1):eA(k)});var b,x=_A(v,2),F=dA(x),z=dA(F),P=_A(F,2),W=it(()=>c(C)?bz:mz);tn(P,{get data(){return c(W)}}),Oo(m,eA=>N(g,eA),()=>c(g)),Se(eA=>{b=ii(x,1,"jse-navigation-bar-edit svelte-hjhal6",null,b,{flex:!c(C),editing:c(C)}),_n(x,"title",c(C)?"Cancel editing the selected path":"Edit the selected path"),Lt(z,eA)},[()=>(K(aa),K(o()),c(C),wA(()=>aa(o())||c(C)?"\xA0":"Navigation bar"))]),fe("click",x,function(){N(C,!c(C))}),CA(t,m),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-search-box.svelte-1x1x8q0 { + border: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-radius: 3px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + display: inline-block; + width: 400px; + max-width: 100%; + overflow: auto; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) { + display: flex; + align-items: stretch; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0), +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { + font-family: inherit; + font-size: inherit; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { + display: block; + text-align: center; + border: none; + padding: 0 5px; + margin: 0; + cursor: pointer; + color: var(--jse-panel-button-color, inherit); + background: var(--jse-panel-button-background, transparent); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0):hover { + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { + color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: 3px; + background: var(--jse-input-background, var(--jse-background-color, #fff)); + height: 28px; + padding: 0 5px; + margin: 0; + flex: 1; + width: 0; + min-width: 50px; + outline: none; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-replace-toggle:where(.svelte-1x1x8q0) { + padding: var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)); + min-width: 20px; + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + flex-direction: column; + padding: calc(0.5 * var(--jse-padding, 10px)); + gap: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + align-items: center; + position: relative; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-icon:where(.svelte-1x1x8q0) { + color: inherit; + cursor: inherit; + background: inherit; + width: 32px; + text-align: center; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) label.jse-search-input-label:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count:where(.svelte-1x1x8q0) { + color: inherit; + font-size: 80%; + visibility: hidden; + padding: 0 5px; + min-width: 36px; + text-align: center; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count.jse-visible:where(.svelte-1x1x8q0) { + visibility: visible; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + padding-left: 32px; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { + width: auto; +}`);var YwA=JA(''),HwA=JA('
    '),zwA=JA('');function J$(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=BA(void 0,!0),o=or("jsoneditor:SearchBox"),a=L(e,"json",9),r=L(e,"documentState",9),s=L(e,"parser",9),l=L(e,"showSearch",9),g=L(e,"showReplace",13),C=L(e,"readOnly",9),I=L(e,"columns",9),d=L(e,"onSearch",9),h=L(e,"onFocus",9),E=L(e,"onPatch",9),f=L(e,"onClose",9),m=BA("",!0),v="",k=BA("",!0),S=BA(!1,!0),b=BA(void 0,!0),x=ME(function(NA){return PA.apply(this,arguments)},300),F=ME(function(NA){return Ue.apply(this,arguments)},300);function z(){g(!g()&&!C())}function P(NA){NA.stopPropagation();var ke=TC(NA);ke==="Enter"&&(NA.preventDefault(),c(m)!==v?x.flush():aA()),ke==="Shift+Enter"&&(NA.preventDefault(),uA()),ke==="Ctrl+Enter"&&(NA.preventDefault(),g()?EA():aA()),ke==="Ctrl+H"&&(NA.preventDefault(),z()),ke==="Escape"&&(NA.preventDefault(),fA())}function W(NA){TC(NA)==="Enter"&&(NA.preventDefault(),NA.stopPropagation(),EA())}function eA(){return Z.apply(this,arguments)}function Z(){return(Z=zt(function*(){Ro(),yield x.flush()})).apply(this,arguments)}function EA(){return X.apply(this,arguments)}function X(){return(X=zt(function*(){var NA;if(!C()){var ke=(NA=c(b))===null||NA===void 0?void 0:NA.activeItem;if(o("handleReplace",{replaceText:c(k),activeItem:ke}),c(b)&&ke&&a()!==void 0){N(b,Me(Me({},hZ(c(b))),{},{activeIndex:c(i)}));var{operations:HA,newSelection:vA}=g6A(a(),r(),c(k),ke,s());E()(HA,(Gt,ft)=>({state:ft,selection:vA})),Ro(),yield F.flush(),yield $A()}}})).apply(this,arguments)}function iA(){return AA.apply(this,arguments)}function AA(){return(AA=zt(function*(){if(!C()){o("handleReplaceAll",{text:c(m),replaceText:c(k)});var{operations:NA,newSelection:ke}=(function(HA,vA,Gt,ft,he){for(var Ot=QZ(Gt,HA,{maxResults:1/0}),He=[],je=0;je$.field!==oA.field?$.field===uc.key?1:-1:oA.path.length-$.path.length);var oi,j=[];return He.forEach($=>{var{field:oA,path:sA,items:TA}=$;if(oA===uc.key){var de=Yi(sA),Qe=Xe(HA,de),GA=ki(sA),OA=e3(de,Object.keys(Qe),GA,fZ(GA,ft,TA));j=j.concat(OA),oi=Yh(HA,OA)}else{if(oA!==uc.value)throw new Error("Cannot replace: unknown type of search result field ".concat(oA));var ht=Xe(HA,sA);if(ht===void 0)throw new Error("Cannot replace: path not found ".concat(vt(sA)));var tt=typeof ht=="string"?ht:String(ht),ze=v0(HA,vA,sA),Te=fZ(tt,ft,TA),ci=[{op:"replace",path:vt(sA),value:ze?Te:$h(Te,he)}];j=j.concat(ci),oi=Yh(HA,ci)}}),{operations:j,newSelection:oi}})(a(),r(),c(m),c(k),s());E()(NA,(HA,vA)=>({state:vA,selection:ke})),yield $A()}})).apply(this,arguments)}function IA(NA){NA.select()}function aA(){return rA.apply(this,arguments)}function rA(){return(rA=zt(function*(){N(b,c(b)?hZ(c(b)):void 0),yield $A()})).apply(this,arguments)}function uA(){return UA.apply(this,arguments)}function UA(){return UA=zt(function*(){N(b,c(b)?(function(NA){var ke=NA.activeIndex>0?NA.activeIndex-1:NA.items.length-1,HA=NA.items[ke],vA=NA.items.map((Gt,ft)=>Me(Me({},Gt),{},{active:ft===ke}));return Me(Me({},NA),{},{items:vA,activeItem:HA,activeIndex:ke})})(c(b)):void 0),yield $A()}),UA.apply(this,arguments)}function $A(){return zA.apply(this,arguments)}function zA(){return(zA=zt(function*(){var NA;o("handleFocus",c(b));var ke=(NA=c(b))===null||NA===void 0?void 0:NA.activeItem;ke&&a()!==void 0&&(yield h()(ke.path,ke.resultIndex))})).apply(this,arguments)}function pA(){return pA=zt(function*(NA){yield _e(NA,c(m),a())}),pA.apply(this,arguments)}function PA(){return PA=zt(function*(NA){yield _e(l(),NA,a()),yield $A()}),PA.apply(this,arguments)}function Ue(){return Ue=zt(function*(NA){yield _e(l(),c(m),NA)}),Ue.apply(this,arguments)}function _e(NA,ke,HA){return YA.apply(this,arguments)}function YA(){return YA=zt(function*(NA,ke,HA){return NA?(o("applySearch",{showSearch:NA,text:ke}),ke===""?(o("clearing search result"),c(b)!==void 0&&N(b,void 0),Promise.resolve()):(v=ke,N(S,!0),new Promise(vA=>{setTimeout(()=>{var Gt=QZ(ke,HA,{maxResults:M_,columns:I()});N(b,(function(ft,he){var Ot=he!=null&&he.activeItem?pZ(he.activeItem):void 0,He=ft.findIndex(xe=>Mi(Ot,pZ(xe))),je=He!==-1?He:he?.activeIndex!==void 0&&he?.activeIndex0?0:-1,pt=ft.map((xe,oi)=>Me(Me({resultIndex:oi},xe),{},{active:oi===je}));return{items:pt,activeItem:pt[je],activeIndex:je}})(Gt,c(b))),N(S,!1),vA()})}))):(c(b)&&N(b,void 0),Promise.resolve())}),YA.apply(this,arguments)}function fA(){o("handleClose"),x.cancel(),F.cancel(),_e(!1,c(m),a()),f()()}KA(()=>c(b),()=>{var NA;N(A,((NA=c(b))===null||NA===void 0||(NA=NA.items)===null||NA===void 0?void 0:NA.length)||0)}),KA(()=>c(b),()=>{var NA;N(i,((NA=c(b))===null||NA===void 0?void 0:NA.activeIndex)||0)}),KA(()=>(c(A),M_),()=>{N(n,c(A)>=M_?"".concat(999,"+"):String(c(A)))}),KA(()=>(K(d()),c(b)),()=>{d()(c(b))}),KA(()=>K(l()),()=>{(function(NA){pA.apply(this,arguments)})(l())}),KA(()=>c(m),()=>{x(c(m))}),KA(()=>K(a()),()=>{F(a())}),Rn(),ni(!0);var XA=Fi(),DA=et(XA),ee=NA=>{var ke=zwA(),HA=dA(ke),vA=dA(HA),Gt=GA=>{var OA=YwA(),ht=dA(OA),tt=it(()=>g()?c0:kE);tn(ht,{get data(){return c(tt)}}),fe("click",OA,z),CA(GA,OA)};jA(vA,GA=>{C()||GA(Gt)});var ft=dA(_A(vA,2)),he=dA(ft),Ot=dA(he),He=GA=>{tn(GA,{get data(){return pz},spin:!0})},je=GA=>{tn(GA,{get data(){return m4}})};jA(Ot,GA=>{c(S)?GA(He):GA(je,!1)});var pt=_A(he,2),xe=dA(pt);_r(()=>lD(xe,()=>c(m),GA=>N(m,GA))),ms(xe,GA=>IA?.(GA)),_r(()=>fe("paste",xe,eA));var oi,j=_A(pt,2),$=dA(j),oA=_A(j,2);tn(dA(oA),{get data(){return Mz}});var sA=_A(oA,2);tn(dA(sA),{get data(){return fz}});var TA=_A(sA,2);tn(dA(TA),{get data(){return D4}});var de=_A(ft,2),Qe=GA=>{var OA=HwA(),ht=dA(OA),tt=_A(ht,2),ze=_A(tt,2);lD(ht,()=>c(k),Te=>N(k,Te)),fe("keydown",ht,W),fe("click",tt,EA),fe("click",ze,iA),CA(GA,OA)};jA(de,GA=>{g()&&!C()&&GA(Qe)}),Se(()=>{var GA;oi=ii(j,1,"jse-search-count svelte-1x1x8q0",null,oi,{"jse-visible":c(m)!==""}),Lt($,"".concat(c(i)!==-1&&c(i){l()&&NA(ee)}),CA(t,XA),Ft()}var Yf=Symbol("path");function PwA(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1/0,i={};Array.isArray(t)&&(function(o,a,r){if(o.length1?(o.length-1)/(a-1):o.length,l=0;l{Mn(o)?O$(o,i,e):i[Yf]=!0});var n=[];return Yf in i&&n.push([]),Y$(i,[],n,e),n}function O$(t,e,A){for(var i in t){var n=t[i],o=e[i]||(e[i]={});Mn(n)&&A?O$(n,o,A):o[Yf]===void 0&&(o[Yf]=!0)}}function Y$(t,e,A,i){for(var n in t){var o=e.concat(n),a=t[n];a&&a[Yf]===!0&&A.push(o),ia(a)&&i&&Y$(a,o,A,i)}}function jwA(t,e,A,i,n,o){for(var a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:80,r=Vo(A)?A.length:0,s=(function(v,k){var S=Object.values(v);if(en(S))return k;var b=(x,F)=>x+F;return S.reduce(b)/S.length})(i,n),l=t-a,g=e+2*a,C=v=>i[v]||n,I=0,d=o;d0&&(d-=C(--I));for(var h=I,E=0;Ek0(i,o))}}function sd(t,e){var{rowIndex:A,columnIndex:i}=t;return[String(A),...e[i]]}function qwA(t,e){var[A,i]=T9(t,a=>SR(a.path[0])),n=K9(A,VwA),o=U9(n,a=>{var r={row:[],columns:{}};return a.forEach(s=>{var l=(function(g,C){var I=hg(g.path,C);return I.columnIndex!==-1?I.columnIndex:-1})(s,e);l!==-1?(r.columns[l]===void 0&&(r.columns[l]=[]),r.columns[l].push(s)):r.row.push(s)}),r});return{root:i,rows:o}}function Eh(t,e){if(e&&e.length!==0)return e.length===1?e[0]:{path:t,message:"Multiple validation issues: "+e.map(A=>Bl(A.path)+" "+A.message).join(", "),severity:Qc.warning}}function VwA(t){return parseInt(t.path[0],10)}function WwA(t,e,A){var i=e.some(n=>(function(o,a,r){if(!o)return!1;if(a.op==="replace"){var s=Es(a.path),{rowIndex:l,columnIndex:g}=hg(s,r),C=r.findIndex(I=>Mi(I,o.path));if(l!==-1&&g!==-1&&g!==C)return!1}return!0})(t,n,A));return i?void 0:t}var ps=or("jsoneditor:actions");function H$(t){return hR.apply(this,arguments)}function hR(){return hR=zt(function*(t){var{json:e,selection:A,indentation:i,readOnly:n,parser:o,onPatch:a}=t;if(!n&&e!==void 0&&A&&Dh(A)){var r=C$(e,A,i,o);if(r!==void 0){ps("cut",{selection:A,clipboard:r,indentation:i}),yield WR(r);var{operations:s,newSelection:l}=Q$(e,A);a(s,(g,C)=>({state:C,selection:l}))}}}),hR.apply(this,arguments)}function z$(t){return QR.apply(this,arguments)}function QR(){return QR=zt(function*(t){var{json:e,selection:A,indentation:i,parser:n}=t,o=C$(e,A,i,n);o!==void 0&&(ps("copy",{clipboard:o,indentation:i}),yield WR(o))}),QR.apply(this,arguments)}function P$(t){var{clipboardText:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onChangeText:r,onPasteMultilineText:s,openRepairModal:l}=t;if(!n)try{g(e)}catch(C){l(e,I=>{ps("repaired pasted text: ",I),g(I)})}function g(C){if(A!==void 0){var I=i||Hi([]),d=h$(A,I,C,o),h=(function(E,f,m){var v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:t6A;if(E.length>v)return!1;var k=/\n/.test(E);if(!k)return!1;var S=f.some(x=>x.op==="replace"&&Array.isArray(x.value)),b=f.filter(x=>x.op==="add").length>1;if(!S&&!b)return!1;try{return Zf(E,m.parse),!1}catch(x){return!0}})(e,d,o);ps("paste",{pastedText:C,operations:d,ensureSelection:I,pasteMultilineText:h}),a(d,(E,f)=>{var m=f;return d.filter(v=>(I9(v)||$6(v))&&aa(v.value)).forEach(v=>{var k=il(A,v.path);m=vd(E,m,k)}),{state:m}}),h&&s(C)}else ps("paste text",{pastedText:C}),r(e,(E,f)=>{if(E)return{state:vd(E,f,[])}})}}function j$(t){var{json:e,text:A,selection:i,keepSelection:n,readOnly:o,onChange:a,onPatch:r}=t;if(!o&&i){var s=e!==void 0&&(nr(i)||En(i))?fs(i.path,i.path):i;if(en(It(i)))ps("remove root",{selection:i}),a&&a({text:"",json:void 0},e!==void 0?{text:void 0,json:e}:{text:A||"",json:e},{contentErrors:void 0,patchResult:void 0});else if(e!==void 0){var{operations:l,newSelection:g}=Q$(e,s);ps("remove",{operations:l,selection:i,newSelection:g}),r(l,(C,I)=>({state:I,selection:n?i:g}))}}}function yD(t){var{insertType:e,selectInside:A,initialValue:i,json:n,selection:o,readOnly:a,parser:r,onPatch:s,onReplaceJson:l}=t;if(!a){var g=(function(E,f,m){if(m==="object")return{};if(m==="array")return[];if(m==="structure"&&E!==void 0){var v=f?g$(f):[],k=Xe(E,v);if(Array.isArray(k)&&!en(k)){var S=lg(k);return aa(S)?N9(S,b=>Array.isArray(b)?[]:Mn(b)?void 0:""):""}}return""})(n,o,e);if(n!==void 0){var C=r.stringify(g),I=h$(n,o,C,r);ps("onInsert",{insertType:e,operations:I,newValue:g,data:C});var d=ki(I.filter(E=>E.op==="add"||E.op==="replace"));s(I,(E,f,m)=>{if(d){var v=il(E,d.path);if(aa(g))return{state:Ec(E,f,v,HR),selection:A?OC(v):m};if(g===""){var k=en(v)?void 0:Xe(E,Yi(v));return{state:Ec(E,f,v,tD),selection:Mn(k)?zR(v,i):BD(v,i)}}}}),ps("after patch")}else{ps("onInsert",{insertType:e,newValue:g});var h=[];l(g,(E,f)=>({state:vd(E,f,h),selection:aa(g)?OC(h):BD(h)}))}}}function q$(t){return uR.apply(this,arguments)}function uR(){return uR=zt(function*(t){var{char:e,selectInside:A,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s,onSelect:l}=t;o||(nr(n)?l(Me(Me({},n),{},{edit:!0,initialValue:e})):e==="{"?yD({insertType:"object",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):e==="["?yD({insertType:"array",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):En(n)&&i!==void 0?aa(Xe(i,n.path))||l(Me(Me({},n),{},{edit:!0,initialValue:e})):(ps("onInsertValueWithCharacter",{char:e}),yield(function(g){return fR.apply(this,arguments)})({char:e,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s})))}),uR.apply(this,arguments)}function fR(){return fR=zt(function*(t){var{char:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r}=t;n||yD({insertType:"value",selectInside:!1,initialValue:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r})}),fR.apply(this,arguments)}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-json-preview.svelte-25xmyd { + flex: 1; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); + overflow: auto; + white-space: pre-wrap; + padding: 2px; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +}`);var ZwA=JA('
    ');function V$(t,e){Nt(e,!1);var A=BA(),i=BA(),n=L(e,"text",8),o=L(e,"json",8),a=L(e,"indentation",8),r=L(e,"parser",8);KA(()=>(K(o()),K(n())),()=>{N(A,o()!==void 0?{json:o()}:{text:n()||""})}),KA(()=>(c(A),K(a()),K(r()),cD),()=>{N(i,SC(eR(c(A),a(),r()),cD))}),Rn(),ni();var s=ZwA(),l=dA(s);Se(()=>Lt(l,c(i))),CA(t,s),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-context-menu-button.svelte-16jz6ui { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: inherit; +} +button.jse-context-menu-button.svelte-16jz6ui:hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +button.jse-context-menu-button.svelte-16jz6ui:focus { + background: var(--jse-context-menu-background-highlight, #7a7a7a); + z-index: 1; +} +button.jse-context-menu-button.svelte-16jz6ui:disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +button.jse-context-menu-button.left.svelte-16jz6ui { + text-align: left; +} +button.jse-context-menu-button.svelte-16jz6ui svg { + width: 16px; +}`);var XwA=JA('');function J_(t,e){Nt(e,!1);var A=L(e,"item",8),i=L(e,"className",8,void 0),n=L(e,"onRequestClose",8);ni();var o=XwA(),a=dA(o),r=g=>{tn(g,{get data(){return K(A()),wA(()=>A().icon)}})};jA(a,g=>{K(A()),wA(()=>A().icon)&&g(r)});var s=_A(a,2),l=g=>{var C=dr();Se(()=>Lt(C,(K(A()),wA(()=>A().text)))),CA(g,C)};jA(s,g=>{K(A()),wA(()=>A().text)&&g(l)}),Se(g=>{ii(o,1,g,"svelte-16jz6ui"),_n(o,"title",(K(A()),wA(()=>A().title))),o.disabled=(K(A()),wA(()=>A().disabled||!1))},[()=>bI((K(Dc),K(i()),K(A()),wA(()=>Dc("jse-context-menu-button",i(),A().className))))]),fe("click",o,g=>{n()(),A().onClick(g)}),CA(t,o),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-dropdown-button.svelte-bov1j6 { + flex: 1; + line-height: normal; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + position: relative; + padding: 0; + display: flex; +} +.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) { + margin: 0; + padding: 0; +} +.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) li:where(.svelte-bov1j6) { + margin: 0; + padding: 0; + list-style-type: none; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 2em; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + border-radius: 0; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown.jse-visible:where(.svelte-bov1j6) { + background: var(--jse-context-menu-background, #656565); +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):focus { + z-index: 1; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) { + display: none; + position: absolute; + top: 100%; + left: 0; + z-index: 1; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items.jse-visible:where(.svelte-bov1j6) { + display: block; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 100%; + text-align: left; + padding: var(--jse-padding, 10px); + margin: 0; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +}`);var $wA=JA('
  • '),A5A=JA('
      ');Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-context-menu-button.svelte-1y5l9l1 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: inherit; +} +button.jse-context-menu-button.svelte-1y5l9l1:hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +button.jse-context-menu-button.svelte-1y5l9l1:focus { + background: var(--jse-context-menu-background-highlight, #7a7a7a); + z-index: 1; +} +button.jse-context-menu-button.svelte-1y5l9l1:disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +button.jse-context-menu-button.left.svelte-1y5l9l1 { + text-align: left; +} +button.jse-context-menu-button.svelte-1y5l9l1 svg { + width: 16px; +}`);var e5A=JA('');function O_(t,e){Nt(e,!1);var A=BA(),i=L(e,"item",8),n=L(e,"className",8,void 0),o=L(e,"onRequestClose",8);KA(()=>(K(i()),K(o())),()=>{N(A,i().items.map(a=>Me(Me({},a),{},{onClick:r=>{o()(),a.onClick(r)}})))}),Rn(),ni(),(function(a,r){Nt(r,!1);var s=BA(void 0,!0),l=L(r,"items",25,()=>[]),g=L(r,"title",9,void 0),C=L(r,"width",9,"120px"),I=BA(!1,!0);function d(){N(I,!1)}function h(b){TC(b)==="Escape"&&(b.preventDefault(),N(I,!1))}As(()=>{document.addEventListener("click",d),document.addEventListener("keydown",h)}),Dg(()=>{document.removeEventListener("click",d),document.removeEventListener("keydown",h)}),KA(()=>K(l()),()=>{N(s,l().every(b=>b.disabled===!0))}),Rn(),ni(!0);var E=A5A(),f=dA(E);Ia(f,r,"defaultItem",{},null);var m,v=_A(f,2);tn(dA(v),{get data(){return c0}});var k,S=_A(v,2);da(dA(S),5,l,ka,(b,x)=>{var F=$wA(),z=dA(F),P=dA(z),W=Z=>{tn(Z,{get data(){return c(x),wA(()=>c(x).icon)}})};jA(P,Z=>{c(x),wA(()=>c(x).icon)&&Z(W)});var eA=_A(P);Se(()=>{var Z;_n(z,"title",(c(x),wA(()=>c(x).title))),z.disabled=(c(x),wA(()=>c(x).disabled)),ii(z,1,bI((c(x),wA(()=>c(x).className))),"svelte-bov1j6"),Lt(eA," ".concat((c(x),(Z=wA(()=>c(x).text))!==null&&Z!==void 0?Z:"")))}),fe("click",z,Z=>c(x).onClick(Z)),CA(b,F)}),Se(()=>{var b;_n(E,"title",g()),m=ii(v,1,"jse-open-dropdown svelte-bov1j6",null,m,{"jse-visible":c(I)}),v.disabled=c(s),k=ii(S,1,"jse-dropdown-items svelte-bov1j6",null,k,{"jse-visible":c(I)}),mg(S,"width: ".concat((b=C())!==null&&b!==void 0?b:"",";"))}),fe("click",v,function(){var b=c(I);setTimeout(()=>N(I,!b))}),fe("click",E,d),CA(a,E),Ft()})(t,{get width(){return K(i()),wA(()=>i().width)},get items(){return c(A)},$$slots:{defaultItem:(a,r)=>{var s=e5A(),l=dA(s),g=I=>{tn(I,{get data(){return K(i()),wA(()=>i().main.icon)}})};jA(l,I=>{K(i()),wA(()=>i().main.icon)&&I(g)});var C=_A(l);Se(I=>{var d;ii(s,1,I,"svelte-1y5l9l1"),_n(s,"title",(K(i()),wA(()=>i().main.title))),s.disabled=(K(i()),wA(()=>i().main.disabled||!1)),Lt(C," ".concat((K(i()),(d=wA(()=>i().main.text))!==null&&d!==void 0?d:"")))},[()=>bI((K(Dc),K(n()),K(i()),wA(()=>Dc("jse-context-menu-button",n(),i().main.className))))]),fe("click",s,I=>{o()(),i().main.onClick(I)}),CA(a,s)}}}),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-contextmenu.svelte-1shjn02 { + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: stretch; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-label:where(.svelte-1shjn02) { + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: var(--jse-context-menu-color-disabled, #9d9d9d); + line-height: normal; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) { + flex: 1; + background: var(--jse-context-menu-tip-background, rgba(255, 255, 255, 0.2)); + color: var(--context-menu-tip-color, inherit); + margin: calc(0.5 * var(--jse-padding, 10px)); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + font-size: 80%; + line-height: 1.3em; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: var(--jse-padding, 10px); + border-radius: 3px; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) div.jse-tip-icon:where(.svelte-1shjn02) { + padding-top: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02) { + flex: 1; + display: flex; + flex-direction: column; + align-items: stretch; +} +.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02):not(:last-child) { + border-right: 1px solid var(--jse-context-menu-separator-color, #7a7a7a); +} +.jse-contextmenu.svelte-1shjn02 .jse-separator:where(.svelte-1shjn02) { + width: 100%; + height: 1px; + background: var(--jse-context-menu-separator-color, #7a7a7a); +}`);var t5A=JA('
      '),i5A=JA('
      '),n5A=JA('
      '),o5A=JA('
      '),a5A=JA('
      '),r5A=JA('
      '),s5A=JA('
      '),l5A=JA('');function W$(t,e){Nt(e,!1);var A=L(e,"items",9),i=L(e,"onRequestClose",9),n=L(e,"tip",9),o=BA(void 0,!0);As(()=>{var I=Array.from(c(o).querySelectorAll("button")).find(d=>!d.disabled);I&&I.focus()});var a={ArrowUp:"Up",ArrowDown:"Down",ArrowLeft:"Left",ArrowRight:"Right"};function r(I){return console.error("Unknown type of context menu item",I),"???"}ni(!0);var s=l5A(),l=dA(s);da(l,1,A,ka,(I,d)=>{var h=Fi(),E=et(h),f=v=>{J_(v,{get item(){return c(d)},get onRequestClose(){return i()}})},m=v=>{var k=Fi(),S=et(k),b=F=>{O_(F,{get item(){return c(d)},get onRequestClose(){return i()}})},x=F=>{var z=Fi(),P=et(z),W=Z=>{var EA=a5A();da(EA,5,()=>(c(d),wA(()=>c(d).items)),ka,(X,iA)=>{var AA=Fi(),IA=et(AA),aA=uA=>{J_(uA,{get item(){return c(iA)},get onRequestClose(){return i()}})},rA=uA=>{var UA=Fi(),$A=et(UA),zA=PA=>{O_(PA,{get item(){return c(iA)},get onRequestClose(){return i()}})},pA=PA=>{var Ue=Fi(),_e=et(Ue),YA=XA=>{var DA=n5A();da(DA,5,()=>(c(iA),wA(()=>c(iA).items)),ka,(ee,NA)=>{var ke=Fi(),HA=et(ke),vA=ft=>{J_(ft,{className:"left",get item(){return c(NA)},get onRequestClose(){return i()}})},Gt=ft=>{var he=Fi(),Ot=et(he),He=pt=>{O_(pt,{className:"left",get item(){return c(NA)},get onRequestClose(){return i()}})},je=pt=>{var xe=Fi(),oi=et(xe),j=oA=>{CA(oA,t5A())},$=oA=>{var sA=Fi(),TA=et(sA),de=GA=>{var OA=i5A(),ht=dA(OA);Se(()=>Lt(ht,(c(NA),wA(()=>c(NA).text)))),CA(GA,OA)},Qe=GA=>{var OA=dr();Se(ht=>Lt(OA,ht),[()=>(c(NA),wA(()=>r(c(NA))))]),CA(GA,OA)};jA(TA,GA=>{K(tZ),c(NA),wA(()=>tZ(c(NA)))?GA(de):GA(Qe,!1)},!0),CA(oA,sA)};jA(oi,oA=>{K(dI),c(NA),wA(()=>dI(c(NA)))?oA(j):oA($,!1)},!0),CA(pt,xe)};jA(Ot,pt=>{K(dh),c(NA),wA(()=>dh(c(NA)))?pt(He):pt(je,!1)},!0),CA(ft,he)};jA(HA,ft=>{K(bC),c(NA),wA(()=>bC(c(NA)))?ft(vA):ft(Gt,!1)}),CA(ee,ke)}),CA(XA,DA)},fA=XA=>{var DA=Fi(),ee=et(DA),NA=HA=>{CA(HA,o5A())},ke=HA=>{var vA=dr();Se(Gt=>Lt(vA,Gt),[()=>(c(iA),wA(()=>r(c(iA))))]),CA(HA,vA)};jA(ee,HA=>{K(dI),c(iA),wA(()=>dI(c(iA)))?HA(NA):HA(ke,!1)},!0),CA(XA,DA)};jA(_e,XA=>{K(nZ),c(iA),wA(()=>nZ(c(iA)))?XA(YA):XA(fA,!1)},!0),CA(PA,Ue)};jA($A,PA=>{K(dh),c(iA),wA(()=>dh(c(iA)))?PA(zA):PA(pA,!1)},!0),CA(uA,UA)};jA(IA,uA=>{K(bC),c(iA),wA(()=>bC(c(iA)))?uA(aA):uA(rA,!1)}),CA(X,AA)}),CA(Z,EA)},eA=Z=>{var EA=Fi(),X=et(EA),iA=IA=>{CA(IA,r5A())},AA=IA=>{var aA=dr();Se(rA=>Lt(aA,rA),[()=>(c(d),wA(()=>r(c(d))))]),CA(IA,aA)};jA(X,IA=>{K(dI),c(d),wA(()=>dI(c(d)))?IA(iA):IA(AA,!1)},!0),CA(Z,EA)};jA(P,Z=>{K(iZ),c(d),wA(()=>iZ(c(d)))?Z(W):Z(eA,!1)},!0),CA(F,z)};jA(S,F=>{K(dh),c(d),wA(()=>dh(c(d)))?F(b):F(x,!1)},!0),CA(v,k)};jA(E,v=>{K(bC),c(d),wA(()=>bC(c(d)))?v(f):v(m,!1)}),CA(I,h)});var g=_A(l,2),C=I=>{var d=s5A(),h=dA(d),E=dA(h);tn(dA(E),{get data(){return dz}});var f=dA(_A(E,2));Se(()=>Lt(f,n())),CA(I,d)};jA(g,I=>{n()&&I(C)}),Oo(s,I=>N(o,I),()=>c(o)),fe("keydown",s,function(I){var d=TC(I),h=a[d];if(h&&I.target){I.preventDefault();var E=FmA({allElements:Array.from(c(o).querySelectorAll("button:not([disabled])")),currentElement:I.target,direction:h,hasPrio:f=>f.getAttribute("data-type")!=="jse-open-dropdown"});E&&E.focus()}}),CA(t,s),Ft()}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-value.jse-string.svelte-1htmvf1 { + color: var(--jse-value-color-string, #008000); +} +.jse-value.jse-object.svelte-1htmvf1, .jse-value.jse-array.svelte-1htmvf1 { + min-width: 16px; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-value.jse-number.svelte-1htmvf1 { + color: var(--jse-value-color-number, #ee422e); +} +.jse-value.jse-boolean.svelte-1htmvf1 { + color: var(--jse-value-color-boolean, #ff8c00); +} +.jse-value.jse-null.svelte-1htmvf1 { + color: var(--jse-value-color-null, #004ed0); +} +.jse-value.jse-invalid.svelte-1htmvf1 { + color: var(--jse-text-color, #4d4d4d); +} +.jse-value.jse-url.svelte-1htmvf1 { + color: var(--jse-value-color-url, #008000); + text-decoration: underline; +} + +.jse-enum-value.svelte-1htmvf1 { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + border: none; + padding: 0; + font-family: inherit; + font-size: inherit; + cursor: pointer; + outline: none; +} +.jse-enum-value.jse-selected.svelte-1htmvf1 { + background: var(--jse-selection-background-color, #d3d3d3); + color: inherit; +} +.jse-enum-value.jse-value.svelte-1htmvf1:focus { + color: var(--jse-text-color, #4d4d4d); +}`);var ZEe=JA(""),XEe=JA("");var P5,j5;function q5(t,e){return P5||(j5=new WeakMap,P5=new ResizeObserver(A=>{for(var i of A){var n=j5.get(i.target);n&&n(i.target)}})),j5.set(t,e),P5.observe(t),{destroy:()=>{j5.delete(t),P5.unobserve(t)}}}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tree-mode.svelte-10mlrw4 { + flex: 1; + display: flex; + flex-direction: column; + position: relative; + background: var(--jse-background-color, #fff); + min-width: 0; + min-height: 0; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-text-color, #4d4d4d); + line-height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-tree-mode.svelte-10mlrw4 .jse-hidden-input-label:where(.svelte-10mlrw4) .jse-hidden-input:where(.svelte-10mlrw4) { + position: fixed; + top: -10px; + left: -10px; + width: 1px; + height: 1px; + padding: 0; + border: 0; + outline: none; +} +.jse-tree-mode.no-main-menu.svelte-10mlrw4 { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-search-box-container:where(.svelte-10mlrw4) { + position: relative; + height: 0; + top: var(--jse-padding, 10px); + margin-right: calc(var(--jse-padding, 10px) + 20px); + margin-left: var(--jse-padding, 10px); + text-align: right; + z-index: 3; +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) { + flex: 1; + overflow: auto; + position: relative; + padding: 2px; + display: flex; + flex-direction: column; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading-space:where(.svelte-10mlrw4) { + flex: 1; +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading:where(.svelte-10mlrw4) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-search-box-background:where(.svelte-10mlrw4) { + border: 50px solid var(--jse-modal-background, #f5f5f5); + margin: -2px; + margin-bottom: 2px; + display: inline-block; +}`);var g5A=JA(" ",1),c5A=JA('
      '),C5A=JA('
      ',1),I5A=JA(' ',1),d5A=JA('
      loading...
      '),B5A=JA('
      ',1);function pR(t,e){Nt(e,!1);var A=BA(void 0,!0),i=or("jsoneditor:TreeMode"),n=typeof window>"u";i("isSSR:",n);var o=Y2(),a=Y2(),{openAbsolutePopup:r,closeAbsolutePopup:s}=kI("absolute-popup"),l=BA(void 0,!0),g=BA(void 0,!0),C=BA(void 0,!0),I=!1,d=R$(),h=L(e,"readOnly",9),E=L(e,"externalContent",9),f=L(e,"externalSelection",9),m=L(e,"history",9),v=L(e,"truncateTextSize",9),k=L(e,"mainMenuBar",9),S=L(e,"navigationBar",9),b=L(e,"escapeControlCharacters",9),x=L(e,"escapeUnicodeCharacters",9),F=L(e,"parser",9),z=L(e,"parseMemoizeOne",9),P=L(e,"validator",9),W=L(e,"validationParser",9),eA=L(e,"pathParser",9),Z=L(e,"indentation",9),EA=L(e,"onError",9),X=L(e,"onChange",9),iA=L(e,"onChangeMode",9),AA=L(e,"onSelect",9),IA=L(e,"onUndo",9),aA=L(e,"onRedo",9),rA=L(e,"onRenderValue",9),uA=L(e,"onRenderMenu",9),UA=L(e,"onRenderContextMenu",9),$A=L(e,"onClassName",9),zA=L(e,"onFocus",9),pA=L(e,"onBlur",9),PA=L(e,"onSortModal",9),Ue=L(e,"onTransformModal",9),_e=L(e,"onJSONEditorModal",9),YA=!1,fA=BA(!1,!0),XA=BA(void 0,!0);qR({onMount:As,onDestroy:Dg,getWindow:()=>Xf(c(C)),hasFocus:()=>YA&&document.hasFocus()||RR(c(C)),onFocus:()=>{I=!0,zA()&&zA()()},onBlur:()=>{I=!1,pA()&&pA()()}});var DA=BA(void 0,!0),ee=BA(void 0,!0),NA=void 0,ke=!1,HA=BA(oR({json:c(DA)}),!0),vA=BA(Kf(f())?f():void 0,!0);function Gt(tA){N(vA,tA)}As(()=>{if(c(vA)){var tA=It(c(vA));N(HA,Ec(c(DA),c(HA),tA,tD)),setTimeout(()=>Fo(tA))}});var ft,he=BA(void 0,!0),Ot=BA(void 0,!0),He=BA(void 0,!0),je=BA(void 0,!0),pt=BA(!1,!0),xe=BA(!1,!0);function oi(tA){N(je,(ft=tA)?f$(c(DA),ft.items):void 0)}function j(tA,yA){return $.apply(this,arguments)}function $(){return($=zt(function*(tA,yA){N(HA,Ec(c(DA),c(HA),tA,tD));var WA=ho(yA);yield Ui(tA,{element:WA})})).apply(this,arguments)}function oA(){N(pt,!1),N(xe,!1),_t()}function sA(tA){i("select validation error",tA),N(vA,Hi(tA.path)),Ui(tA.path)}function TA(tA){var yA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:aR;i("expand"),N(HA,Ec(c(DA),c(HA),tA,yA))}function de(tA,yA){N(HA,sZ(c(DA),c(HA),tA,yA)),c(vA)&&(function(WA,Ge){return k0(It(WA),Ge)&&(It(WA).length>Ge.length||Va(WA))})(c(vA),tA)&&N(vA,void 0)}var Qe=BA(!1,!0),GA=BA([],!0),OA=BA(void 0,!0),ht=xE(N$);function tt(tA,yA,WA,Ge){vh(()=>{var ye;try{ye=ht(tA,yA,WA,Ge)}catch(be){ye=[{path:[],message:"Failed to validate: "+be.message,severity:Qc.warning}]}Mi(ye,c(GA))||(i("validationErrors changed:",ye),N(GA,ye),N(OA,(function(be,ot){var Vt;return ot.forEach(Gi=>{Vt=NZ(be,Vt,Gi.path,(Fn,$i)=>Me(Me({},$i),{},{validationError:Gi}))}),ot.forEach(Gi=>{for(var Fn=Gi.path;Fn.length>0;)Fn=Yi(Fn),Vt=NZ(be,Vt,Fn,($i,Qo)=>Qo.validationError?Qo:Me(Me({},Qo),{},{validationError:{isChildError:!0,path:Fn,message:"Contains invalid data",severity:Qc.warning}}))}),Vt})(tA,c(GA))))},ye=>i("validationErrors updated in ".concat(ye," ms")))}function ze(){return i("validate"),NA?{parseError:NA,isRepairable:!1}:(tt(c(DA),P(),F(),W()),en(c(GA))?void 0:{validationErrors:c(GA)})}function Te(){return c(DA)}function ci(){return c(HA)}function gn(){return c(vA)}function hn(tA){i("applyExternalContent",{updatedContent:tA}),Nf(tA)?(function(yA){if(yA!==void 0){var WA=!Mi(c(DA),yA);if(i("update external json",{isChanged:WA,currentlyText:c(DA)===void 0}),!!WA){var Ge={documentState:c(HA),selection:c(vA),json:c(DA),text:c(ee),textIsRepaired:c(Qe)};N(DA,yA),N(HA,Ul(yA,c(HA))),Ke(c(DA)),N(ee,void 0),N(Qe,!1),NA=void 0,nn(c(DA)),Si(Ge)}}})(tA.json):Rf(tA)&&(function(yA){if(!(yA===void 0||Nf(E()))){var WA=yA!==c(ee);if(i("update external text",{isChanged:WA}),!!WA){var Ge={documentState:c(HA),selection:c(vA),json:c(DA),text:c(ee),textIsRepaired:c(Qe)};try{N(DA,z()(yA)),N(HA,Ul(c(DA),c(HA))),Ke(c(DA)),N(ee,yA),N(Qe,!1),NA=void 0}catch(ye){try{N(DA,z()(ag(yA))),N(HA,Ul(c(DA),c(HA))),Ke(c(DA)),N(ee,yA),N(Qe,!0),NA=void 0,nn(c(DA))}catch(be){N(DA,void 0),N(HA,void 0),N(ee,E().text),N(Qe,!1),NA=c(ee)!==void 0&&c(ee)!==""?Th(c(ee),ye.message||String(ye)):void 0}}nn(c(DA)),Si(Ge)}}})(tA.text)}function Ke(tA){ke||(ke=!0,N(HA,vd(tA,c(HA),[])))}function nn(tA){c(vA)&&(vr(tA,hd(c(vA)))&&vr(tA,It(c(vA)))||(i("clearing selection: path does not exist anymore",c(vA)),N(vA,Bh(tA,c(HA)))))}function Si(tA){if(tA.json!==void 0||tA.text!==void 0){var yA=c(DA)!==void 0&&tA.json!==void 0;m().add({type:"tree",undo:{patch:yA?[{op:"replace",path:"",value:tA.json}]:void 0,json:tA.json,text:tA.text,documentState:tA.documentState,textIsRepaired:tA.textIsRepaired,selection:D0(tA.selection),sortedColumn:void 0},redo:{patch:yA?[{op:"replace",path:"",value:c(DA)}]:void 0,json:c(DA),text:c(ee),documentState:c(HA),textIsRepaired:c(Qe),selection:D0(c(vA)),sortedColumn:void 0}})}}function Li(tA,yA){var WA;if(i("patch",tA,yA),c(DA)===void 0)throw new Error("Cannot apply patch: no JSON");var Ge=c(DA),ye={json:void 0,text:c(ee),documentState:c(HA),selection:D0(c(vA)),textIsRepaired:c(Qe),sortedColumn:void 0},be=u$(c(DA),tA),ot=r$(c(DA),c(HA),tA),Vt=(WA=Yh(c(DA),tA))!==null&&WA!==void 0?WA:c(vA),Gi=typeof yA=="function"?yA(ot.json,ot.documentState,Vt):void 0;return N(DA,Gi?.json!==void 0?Gi.json:ot.json),N(HA,Gi?.state!==void 0?Gi.state:ot.documentState),N(vA,Gi?.selection!==void 0?Gi.selection:Vt),N(ee,void 0),N(Qe,!1),N(Ot,void 0),N(He,void 0),NA=void 0,nn(c(DA)),m().add({type:"tree",undo:Me({patch:be},ye),redo:{patch:tA,json:void 0,text:c(ee),documentState:c(HA),selection:D0(c(vA)),sortedColumn:void 0,textIsRepaired:c(Qe)}}),{json:c(DA),previousJson:Ge,undo:be,redo:tA}}function Zi(){!h()&&c(vA)&&N(vA,zR(It(c(vA))))}function bt(){if(!h()&&c(vA)){var tA=It(c(vA)),yA=Xe(c(DA),tA);aa(yA)?(function(WA,Ge){i("openJSONEditorModal",{path:WA,value:Ge}),YA=!0,_e()({content:{json:Ge},path:WA,onPatch:c(M).onPatch,onClose:()=>{YA=!1,setTimeout(_t)}})})(tA,yA):N(vA,BD(tA))}}function on(){if(!h()&&En(c(vA))){var tA=It(c(vA)),yA=vt(tA),WA=Xe(c(DA),tA),Ge=!v0(c(DA),c(HA),tA),ye=Ge?String(WA):$h(String(WA),F());i("handleToggleEnforceString",{enforceString:Ge,value:WA,updatedValue:ye}),Ae([{op:"replace",path:yA,value:ye}],(be,ot)=>({state:_D(c(DA),ot,tA,{type:"value",enforceString:Ge})}))}}function Kt(){return c(Qe)&&c(DA)!==void 0&&De(c(DA)),c(DA)!==void 0?{json:c(DA)}:{text:c(ee)||""}}function G(){return dt.apply(this,arguments)}function dt(){return dt=zt(function*(){var tA=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];yield H$({json:c(DA),selection:c(vA),indentation:tA?Z():void 0,readOnly:h(),parser:F(),onPatch:Ae})}),dt.apply(this,arguments)}function Bi(){return Qn.apply(this,arguments)}function Qn(){return Qn=zt(function*(){var tA=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(DA)!==void 0&&(yield z$({json:c(DA),selection:c(vA),indentation:tA?Z():void 0,parser:F()}))}),Qn.apply(this,arguments)}function un(tA){var yA;tA.preventDefault(),Bo((yA=tA.clipboardData)===null||yA===void 0?void 0:yA.getData("text/plain"))}function Vn(){return Yo.apply(this,arguments)}function Yo(){return(Yo=zt(function*(){try{Bo(yield navigator.clipboard.readText())}catch(tA){console.error(tA),N(fA,!0)}})).apply(this,arguments)}function Bo(tA){tA!==void 0&&P$({clipboardText:tA,json:c(DA),selection:c(vA),readOnly:h(),parser:F(),onPatch:Ae,onChangeText:mA,onPasteMultilineText:On,openRepairModal:No})}function No(tA,yA){N(XA,{text:tA,onParse:WA=>Zf(WA,Ge=>Wf(Ge,F())),onRepair:jX,onApply:yA,onClose:_t})}function Zo(){j$({json:c(DA),text:c(ee),selection:c(vA),keepSelection:!1,readOnly:h(),onChange:X(),onPatch:Ae})}function Do(){!h()&&c(DA)!==void 0&&c(vA)&&Dh&&!en(It(c(vA)))&&(i("duplicate",{selection:c(vA)}),Ae(B$(c(DA),MI(c(DA),c(vA)))))}function Ba(){h()||!c(vA)||!Co(c(vA))&&!En(c(vA))||en(It(c(vA)))||(i("extract",{selection:c(vA)}),Ae(E$(c(DA),c(vA)),(tA,yA)=>{if(aa(tA))return{state:R_(tA,yA,[])}}))}function Xo(tA){yD({insertType:tA,selectInside:!0,initialValue:void 0,json:c(DA),selection:c(vA),readOnly:h(),parser:F(),onPatch:Ae,onReplaceJson:De})}function ra(tA){nr(c(vA))&&N(vA,Hi(c(vA).path)),c(vA)||N(vA,Bh(c(DA),c(HA))),Xo(tA)}function yo(tA){if(!h()&&c(vA))if(J5(c(vA)))try{var yA=hd(c(vA)),WA=Xe(c(DA),yA),Ge=(function(be,ot,Vt){if(ot==="array"){if(Array.isArray(be))return be;if(Mn(be))return qW(be);if(typeof be=="string")try{var Gi=Vt.parse(be);if(Array.isArray(Gi))return Gi;if(Mn(Gi))return qW(Gi)}catch($i){return[be]}return[be]}if(ot==="object"){if(Array.isArray(be))return jW(be);if(Mn(be))return be;if(typeof be=="string")try{var Fn=Vt.parse(be);if(Mn(Fn))return Fn;if(Array.isArray(Fn))return jW(Fn)}catch($i){return{value:be}}return{value:be}}if(ot==="value")return aa(be)?Vt.stringify(be):be;throw new Error("Cannot convert ".concat(kR(be,Vt)," to ").concat(ot))})(WA,tA,F());if(Ge===WA)return;var ye=[{op:"replace",path:vt(yA),value:Ge}];i("handleConvert",{selection:c(vA),path:yA,type:tA,operations:ye}),Ae(ye,(be,ot)=>({state:c(vA)?vd(be,ot,It(c(vA))):c(HA)}))}catch(be){EA()(be)}else EA()(new Error("Cannot convert current selection to ".concat(tA)))}function ge(){if(c(vA)){var tA=CZ(c(DA),c(HA),c(vA),!1),yA=Yi(It(c(vA)));tA&&!en(It(tA))&&Mi(yA,Yi(It(tA)))?N(vA,LC(It(tA))):N(vA,OC(yA)),i("insert before",{selection:c(vA),selectionBefore:tA,parentPath:yA}),Ro(),zi()}}function mi(){if(c(vA)){var tA=vI(c(DA),c(vA));i("insert after",tA),N(vA,LC(tA)),Ro(),zi()}}function cn(tA){return fn.apply(this,arguments)}function fn(){return(fn=zt(function*(tA){yield q$({char:tA,selectInside:!0,json:c(DA),selection:c(vA),readOnly:h(),parser:F(),onPatch:Ae,onReplaceJson:De,onSelect:Gt})})).apply(this,arguments)}function Ho(){if(!h()&&m().canUndo){var tA=m().undo();if(ID(tA)){var yA={json:c(DA),text:c(ee)};N(DA,tA.undo.patch?tl(c(DA),tA.undo.patch):tA.undo.json),N(HA,tA.undo.documentState),N(vA,tA.undo.selection),N(ee,tA.undo.text),N(Qe,tA.undo.textIsRepaired),NA=void 0,i("undo",{item:tA,json:c(DA),documentState:c(HA),selection:c(vA)}),xA(yA,tA.undo.patch&&tA.redo.patch?{json:c(DA),previousJson:yA.json,redo:tA.undo.patch,undo:tA.redo.patch}:void 0),_t(),c(vA)&&Ui(It(c(vA)),{scrollToWhenVisible:!1})}else IA()(tA)}}function ya(){if(!h()&&m().canRedo){var tA=m().redo();if(ID(tA)){var yA={json:c(DA),text:c(ee)};N(DA,tA.redo.patch?tl(c(DA),tA.redo.patch):tA.redo.json),N(HA,tA.redo.documentState),N(vA,tA.redo.selection),N(ee,tA.redo.text),N(Qe,tA.redo.textIsRepaired),NA=void 0,i("redo",{item:tA,json:c(DA),documentState:c(HA),selection:c(vA)}),xA(yA,tA.undo.patch&&tA.redo.patch?{json:c(DA),previousJson:yA.json,redo:tA.redo.patch,undo:tA.undo.patch}:void 0),_t(),c(vA)&&Ui(It(c(vA)),{scrollToWhenVisible:!1})}else aA()(tA)}}function _i(tA){var yA;h()||c(DA)===void 0||(YA=!0,PA()({id:o,json:c(DA),rootPath:tA,onSort:(yA=zt(function*(WA){var{operations:Ge}=WA;i("onSort",tA,Ge),Ae(Ge,(ye,be)=>({state:R_(ye,be,tA),selection:Hi(tA)}))}),function(WA){return yA.apply(this,arguments)}),onClose:()=>{YA=!1,setTimeout(_t)}}))}function Eo(){c(vA)&&_i(dZ(c(DA),c(vA)))}function Za(){_i([])}function vo(tA){if(c(DA)!==void 0){var{id:yA,onTransform:WA,onClose:Ge}=tA,ye=tA.rootPath||[];YA=!0,Ue()({id:yA||a,json:c(DA),rootPath:ye,onTransform:be=>{WA?WA({operations:be,json:c(DA),transformedJson:tl(c(DA),be)}):(i("onTransform",ye,be),Ae(be,(ot,Vt)=>({state:R_(ot,Vt,ye),selection:Hi(ye)})))},onClose:()=>{YA=!1,setTimeout(_t),Ge&&Ge()}})}}function Ta(){c(vA)&&vo({rootPath:dZ(c(DA),c(vA))})}function Jn(){vo({rootPath:[]})}function Ui(tA){return qt.apply(this,arguments)}function qt(){return qt=zt(function*(tA){var{scrollToWhenVisible:yA=!0,element:WA}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};N(HA,Ec(c(DA),c(HA),tA,tD));var Ge=WA??Nn(tA);if(i("scrollTo",{path:tA,elem:Ge,refContents:c(l)}),!Ge||!c(l))return Promise.resolve();var ye=c(l).getBoundingClientRect(),be=Ge.getBoundingClientRect();if(!yA&&be.bottom>ye.top&&be.top{d(Ge,{container:c(l),offset:ot,duration:300,callback:()=>Vt()})})}),qt.apply(this,arguments)}function Nn(tA){var yA,WA;return Ro(),(yA=(WA=c(l))===null||WA===void 0?void 0:WA.querySelector('div[data-path="'.concat(eD(tA),'"]')))!==null&&yA!==void 0?yA:void 0}function ho(tA){var yA,WA;return Ro(),(yA=(WA=c(l))===null||WA===void 0?void 0:WA.querySelector('span[data-search-result-index="'.concat(tA,'"]')))!==null&&yA!==void 0?yA:void 0}function Fo(tA){var yA=Nn(tA);if(yA&&c(l)){var WA=c(l).getBoundingClientRect(),Ge=yA.getBoundingClientRect(),ye=aa(Xe(c(DA),tA))?20:Ge.height;Ge.topWA.bottom-20&&d(yA,{container:c(l),offset:-(WA.height-ye-20),duration:0})}}function xA(tA,yA){if(tA.json!==void 0||tA?.text!==void 0){if(c(ee)!==void 0){var WA,Ge={text:c(ee),json:void 0};(WA=X())===null||WA===void 0||WA(Ge,tA,{contentErrors:ze(),patchResult:yA})}else if(c(DA)!==void 0){var ye,be={text:void 0,json:c(DA)};(ye=X())===null||ye===void 0||ye(be,tA,{contentErrors:ze(),patchResult:yA})}}}function Ae(tA,yA){i("handlePatch",tA,yA);var WA={json:c(DA),text:c(ee)},Ge=Li(tA,yA);return xA(WA,Ge),Ge}function De(tA,yA){var WA={json:c(DA),text:c(ee)},Ge={documentState:c(HA),selection:c(vA),json:c(DA),text:c(ee),textIsRepaired:c(Qe)},ye=Ec(c(DA),Ul(tA,c(HA)),[],bf),be=typeof yA=="function"?yA(tA,ye,c(vA)):void 0;N(DA,be?.json!==void 0?be.json:tA),N(HA,be?.state!==void 0?be.state:ye),N(vA,be?.selection!==void 0?be.selection:c(vA)),N(ee,void 0),N(Qe,!1),NA=void 0,nn(c(DA)),Si(Ge),xA(WA,void 0)}function mA(tA,yA){i("handleChangeText");var WA={json:c(DA),text:c(ee)},Ge={documentState:c(HA),selection:c(vA),json:c(DA),text:c(ee),textIsRepaired:c(Qe)};try{N(DA,z()(tA)),N(HA,Ec(c(DA),Ul(c(DA),c(HA)),[],bf)),N(ee,void 0),N(Qe,!1),NA=void 0}catch(be){try{N(DA,z()(ag(tA))),N(HA,Ec(c(DA),Ul(c(DA),c(HA)),[],bf)),N(ee,tA),N(Qe,!0),NA=void 0}catch(ot){N(DA,void 0),N(HA,oR({json:c(DA),expand:bf})),N(ee,tA),N(Qe,!1),NA=c(ee)!==""?Th(c(ee),be.message||String(be)):void 0}}if(typeof yA=="function"){var ye=yA(c(DA),c(HA),c(vA));N(DA,ye?.json!==void 0?ye.json:c(DA)),N(HA,ye?.state!==void 0?ye.state:c(HA)),N(vA,ye?.selection!==void 0?ye.selection:c(vA))}nn(c(DA)),Si(Ge),xA(WA,void 0)}function FA(tA,yA){var WA=arguments.length>2&&arguments[2]!==void 0&&arguments[2];i("handleExpand",{path:tA,expanded:yA,recursive:WA}),yA?TA(tA,WA?HR:aR):de(tA,WA),_t()}function le(){FA([],!0,!0)}function Ne(){FA([],!1,!0)}function nt(tA){i("openFind",{findAndReplace:tA}),N(pt,!1),N(xe,!1),Ro(),N(pt,!0),N(xe,tA)}function rt(tA,yA){i("handleExpandSection",tA,yA),N(HA,(function(WA,Ge,ye,be){return Oh(WA,Ge,ye,(ot,Vt)=>{if(!ir(Vt))return Vt;var Gi=n$(Vt.visibleSections.concat(be));return Me(Me({},Vt),{},{visibleSections:Gi})})})(c(DA),c(HA),tA,yA))}function xt(tA){i("pasted json as text",tA),N(Ot,tA)}function On(tA){i("pasted multiline text",{pastedText:tA}),N(He,tA)}function Ti(tA){var yA,{anchor:WA,left:Ge,top:ye,width:be,height:ot,offsetTop:Vt,offsetLeft:Gi,showTip:Fn}=tA,$i=(function(Zn){var{json:Aa,documentState:mn,selection:Tt,readOnly:an,onEditKey:Ai,onEditValue:yt,onToggleEnforceString:Ci,onCut:la,onCopy:Xn,onPaste:ea,onRemove:Ea,onDuplicate:Er,onExtract:L0,onInsertBefore:fl,onInsert:bg,onConvert:Rc,onInsertAfter:Mg,onSort:is,onTransform:hr}=Zn,pl=Aa!==void 0,G0=!!Tt,ml=!!Tt&&en(It(Tt)),Ln=Tt?Xe(Aa,It(Tt)):void 0,xa=Array.isArray(Ln)?"Edit array":Mn(Ln)?"Edit object":"Edit value",_a=pl&&(Co(Tt)||nr(Tt)||En(Tt)),YI=Tt&&!ml?Xe(Aa,Yi(It(Tt))):void 0,Jd=!an&&pl&&dD(Tt)&&!ml&&!Array.isArray(YI),HI=!an&&pl&&Tt!==void 0&&dD(Tt),DQ=HI&&!aa(Ln),Od=!an&&_a,yQ=_a,Hv=!an&&G0,zv=!an&&pl&&_a&&!ml,Pv=!an&&pl&&Tt!==void 0&&(Co(Tt)||En(Tt))&&!ml,Nc=_a,zI=Nc?"Convert to:":"Insert:",Ra=!an&&(Va(Tt)&&Array.isArray(Ln)||dl(Tt)&&Array.isArray(YI)),Hl=!an&&(Nc?J5(Tt)&&!Mn(Ln):G0),vQ=!an&&(Nc?J5(Tt)&&!Array.isArray(Ln):G0),bQ=!an&&(Nc?J5(Tt)&&aa(Ln):G0),PI=Tt!==void 0&&v0(Aa,mn,It(Tt));function Fr(MQ){_a?MQ!=="structure"&&Rc(MQ):bg(MQ)}return[{type:"row",items:[{type:"button",onClick:()=>Ai(),icon:F1,text:"Edit key",title:"Edit the key (Double-click on the key)",disabled:!Jd},{type:"dropdown-button",main:{type:"button",onClick:()=>yt(),icon:F1,text:xa,title:"Edit the value (Double-click on the value)",disabled:!HI},width:"11em",items:[{type:"button",icon:F1,text:xa,title:"Edit the value (Double-click on the value)",onClick:()=>yt(),disabled:!HI},{type:"button",icon:PI?X9:eS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>Ci(),disabled:!DQ}]}]},{type:"separator"},{type:"row",items:[{type:"dropdown-button",main:{type:"button",onClick:()=>la(!0),icon:L1,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!Od},width:"10em",items:[{type:"button",icon:L1,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>la(!0),disabled:!Od},{type:"button",icon:L1,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>la(!1),disabled:!Od}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Xn(!0),icon:IC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!yQ},width:"12em",items:[{type:"button",icon:IC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Xn(!0),disabled:!yQ},{type:"button",icon:IC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Xn(!1),disabled:!yQ}]},{type:"button",onClick:()=>ea(),icon:V9,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:!Hv}]},{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"button",onClick:()=>Er(),icon:Z9,text:"Duplicate",title:"Duplicate selected contents (Ctrl+D)",disabled:!zv},{type:"button",onClick:()=>L0(),icon:Ez,text:"Extract",title:"Extract selected contents",disabled:!Pv},{type:"button",onClick:()=>is(),icon:y4,text:"Sort",title:"Sort array or object contents",disabled:an||!_a},{type:"button",onClick:()=>hr(),icon:p4,text:"Transform",title:"Transform array or object contents (filter, sort, project)",disabled:an||!_a},{type:"button",onClick:()=>Ea(),icon:T8,text:"Remove",title:"Remove selected contents (Delete)",disabled:an||!_a}]},{type:"column",items:[{type:"label",text:zI},{type:"button",onClick:()=>Fr("structure"),icon:Nc?v4:G1,text:"Structure",title:zI+" structure like the first item in the array",disabled:!Ra},{type:"button",onClick:()=>Fr("object"),icon:Nc?v4:G1,text:"Object",title:zI+" object",disabled:!Hl},{type:"button",onClick:()=>Fr("array"),icon:Nc?v4:G1,text:"Array",title:zI+" array",disabled:!vQ},{type:"button",onClick:()=>Fr("value"),icon:Nc?v4:G1,text:"Value",title:zI+" value",disabled:!bQ}]}]},{type:"separator"},{type:"row",items:[{type:"button",onClick:()=>fl(),icon:wz,text:"Insert before",title:"Select area before current entry to insert or paste contents",disabled:an||!_a||ml},{type:"button",onClick:()=>Mg(),icon:hz,text:"Insert after",title:"Select area after current entry to insert or paste contents",disabled:an||!_a||ml}]}]})({json:c(DA),documentState:c(HA),selection:c(vA),readOnly:h(),onEditKey:Zi,onEditValue:bt,onToggleEnforceString:on,onCut:G,onCopy:Bi,onPaste:Vn,onRemove:Zo,onDuplicate:Do,onExtract:Ba,onInsertBefore:ge,onInsert:ra,onInsertAfter:mi,onConvert:yo,onSort:Eo,onTransform:Ta}),Qo=(yA=UA()($i))!==null&&yA!==void 0?yA:$i;if(Qo!==!1){var $t={left:Ge,top:ye,offsetTop:Vt,offsetLeft:Gi,width:be,height:ot,anchor:WA,closeOnOuterClick:!0,onClose:()=>{YA=!1,_t()}};YA=!0;var $o=r(W$,{tip:Fn?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:Qo,onRequestClose:()=>s($o)},$t)}}function zi(tA){if(!tr(c(vA)))if(tA&&(tA.stopPropagation(),tA.preventDefault()),tA&&tA.type==="contextmenu"&&tA.target!==c(g))Ti({left:tA.clientX,top:tA.clientY,width:xC,height:kC,showTip:!1});else{var yA,WA=(yA=c(l))===null||yA===void 0?void 0:yA.querySelector(".jse-context-menu-pointer.jse-selected");if(WA)Ti({anchor:WA,offsetTop:2,width:xC,height:kC,showTip:!1});else{var Ge,ye=(Ge=c(l))===null||Ge===void 0?void 0:Ge.getBoundingClientRect();ye&&Ti({top:ye.top+2,left:ye.left+2,width:xC,height:kC,showTip:!1})}}}function Xt(tA){Ti({anchor:t$(tA.target,"BUTTON"),offsetTop:0,width:xC,height:kC,showTip:!0})}function Ji(){return va.apply(this,arguments)}function va(){return(va=zt(function*(){if(i("apply pasted json",c(Ot)),c(Ot)){var{onPasteAsJson:tA}=c(Ot);N(Ot,void 0),tA(),setTimeout(_t)}})).apply(this,arguments)}function Ut(){return st.apply(this,arguments)}function st(){return(st=zt(function*(){i("apply pasted multiline text",c(He)),c(He)&&(Bo(JSON.stringify(c(He))),setTimeout(_t))})).apply(this,arguments)}function Oi(){i("clear pasted json"),N(Ot,void 0),_t()}function Xi(){i("clear pasted multiline text"),N(He,void 0),_t()}function Wn(){iA()(Da.text)}function pn(tA){N(vA,tA),_t(),Ui(It(tA))}function _t(){i("focus"),c(g)&&(c(g).focus(),c(g).select())}function sa(tA){return(function(yA,WA,Ge){var ye=Yi(Ge),be=[ki(Ge)],ot=Xe(yA,ye),Vt=ot?__(ot,WA,be):void 0;return Vt?Hi(ye.concat(Vt)):LC(Ge)})(c(DA),c(HA),tA)}function zo(tA){c(A)&&c(A).onDrag(tA)}function D(){c(A)&&c(A).onDragEnd()}var M=BA(void 0,!0);KA(()=>c(vA),()=>{var tA;tA=c(vA),Mi(tA,f())||(i("onSelect",tA),AA()(tA))}),KA(()=>(K(b()),K(x())),()=>{N(he,xR({escapeControlCharacters:b(),escapeUnicodeCharacters:x()}))}),KA(()=>c(pt),()=>{(function(tA){c(l)&&tA&&c(l).scrollTop===0&&(Tl(l,c(l).style.overflowAnchor="none"),Tl(l,c(l).scrollTop+=vf),setTimeout(()=>{c(l)&&Tl(l,c(l).style.overflowAnchor="")}))})(c(pt))}),KA(()=>K(E()),()=>{hn(E())}),KA(()=>K(f()),()=>{(function(tA){Mi(c(vA),tA)||(i("applyExternalSelection",{selection:c(vA),externalSelection:tA}),Kf(tA)&&N(vA,tA))})(f())}),KA(()=>(c(DA),K(P()),K(F()),K(W())),()=>{tt(c(DA),P(),F(),W())}),KA(()=>(c(l),RZ),()=>{N(A,c(l)?RZ(c(l)):void 0)}),KA(()=>(K(h()),K(v()),K(F()),c(he),K(rA()),K($A())),()=>{N(M,{mode:Da.tree,readOnly:h(),truncateTextSize:v(),parser:F(),normalization:c(he),getJson:Te,getDocumentState:ci,getSelection:gn,findElement:Nn,findNextInside:sa,focus:_t,onPatch:Ae,onInsert:Xo,onExpand:FA,onSelect:Gt,onFind:nt,onExpandSection:rt,onPasteJson:xt,onRenderValue:rA(),onContextMenu:Ti,onClassName:$A()||(()=>{}),onDrag:zo,onDragEnd:D})}),KA(()=>c(M),()=>{i("context changed",c(M))}),Rn();var R={expand:TA,collapse:de,validate:ze,getJson:Te,patch:Li,acceptAutoRepair:Kt,openTransformModal:vo,scrollTo:Ui,findElement:Nn,findSearchResult:ho,focus:_t};ni(!0);var V=B5A();fe("mousedown",NC,function(tA){!AQ(tA.target,yA=>yA===c(C))&&tr(c(vA))&&(i("click outside the editor, exit edit mode"),N(vA,D0(c(vA))),I&&c(g)&&(c(g).focus(),c(g).blur()),i("blur (outside editor)"),c(g)&&c(g).blur())});var _,q=et(V),nA=dA(q),cA=tA=>{(function(yA,WA){Nt(WA,!1);var Ge=BA(void 0,!0),ye=BA(void 0,!0),be=BA(void 0,!0),ot=L(WA,"json",9),Vt=L(WA,"selection",9),Gi=L(WA,"readOnly",9),Fn=L(WA,"showSearch",13,!1),$i=L(WA,"history",9),Qo=L(WA,"onExpandAll",9),$t=L(WA,"onCollapseAll",9),$o=L(WA,"onUndo",9),Zn=L(WA,"onRedo",9),Aa=L(WA,"onSort",9),mn=L(WA,"onTransform",9),Tt=L(WA,"onContextMenu",9),an=L(WA,"onCopy",9),Ai=L(WA,"onRenderMenu",9);function yt(){Fn(!Fn())}var Ci=BA(void 0,!0),la=BA(void 0,!0),Xn=BA(void 0,!0),ea=BA(void 0,!0);KA(()=>K(ot()),()=>{N(Ge,ot()!==void 0)}),KA(()=>(c(Ge),K(Vt()),En),()=>{N(ye,c(Ge)&&(Co(Vt())||nr(Vt())||En(Vt())))}),KA(()=>(K(Qo()),K(ot())),()=>{N(Ci,{type:"button",icon:K$,title:"Expand all",className:"jse-expand-all",onClick:Qo(),disabled:!aa(ot())})}),KA(()=>(K($t()),K(ot())),()=>{N(la,{type:"button",icon:U$,title:"Collapse all",className:"jse-collapse-all",onClick:$t(),disabled:!aa(ot())})}),KA(()=>K(ot()),()=>{N(Xn,{type:"button",icon:m4,title:"Search (Ctrl+F)",className:"jse-search",onClick:yt,disabled:ot()===void 0})}),KA(()=>(K(Gi()),c(Ci),c(la),K(Aa()),K(ot()),K(mn()),c(Xn),K(Tt()),K($o()),K($i()),K(Zn()),K(an()),c(ye)),()=>{N(ea,Gi()?[c(Ci),c(la),{type:"separator"},{type:"button",icon:IC,title:"Copy (Ctrl+C)",className:"jse-copy",onClick:an(),disabled:!c(ye)},{type:"separator"},c(Xn),{type:"space"}]:[c(Ci),c(la),{type:"separator"},{type:"button",icon:y4,title:"Sort",className:"jse-sort",onClick:Aa(),disabled:Gi()||ot()===void 0},{type:"button",icon:p4,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:mn(),disabled:Gi()||ot()===void 0},c(Xn),{type:"button",icon:W9,title:LR,className:"jse-contextmenu",onClick:Tt()},{type:"separator"},{type:"button",icon:Y8,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:$o(),disabled:!$i().canUndo},{type:"button",icon:O8,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Zn(),disabled:!$i().canRedo},{type:"space"}])}),KA(()=>(K(Ai()),c(ea)),()=>{N(be,Ai()(c(ea))||c(ea))}),Rn(),ni(!0),KD(yA,{get items(){return c(be)}}),Ft()})(tA,{get json(){return c(DA)},get selection(){return c(vA)},get readOnly(){return h()},get history(){return m()},onExpandAll:le,onCollapseAll:Ne,onUndo:Ho,onRedo:ya,onSort:Za,onTransform:Jn,onContextMenu:Xt,onCopy:Bi,get onRenderMenu(){return uA()},get showSearch(){return c(pt)},set showSearch(yA){N(pt,yA)},$$legacy:!0})};jA(nA,tA=>{k()&&tA(cA)});var MA=_A(nA,2),ne=tA=>{OwA(tA,{get json(){return c(DA)},get selection(){return c(vA)},onSelect:pn,get onError(){return EA()},get pathParser(){return eA()}})};jA(MA,tA=>{S()&&tA(ne)});var se=_A(MA,2),Ee=tA=>{var yA=I5A(),WA=et(yA),Ge=dA(WA);Ge.readOnly=!0,Oo(Ge,Vt=>N(g,Vt),()=>c(g));var ye=_A(WA,2),be=Vt=>{var Gi=Fi(),Fn=et(Gi),$i=$t=>{(function($o,Zn){function Aa(Ci){Ci.stopPropagation(),Zn.onCreateObject()}function mn(Ci){Ci.stopPropagation(),Zn.onCreateArray()}Nt(Zn,!0);var Tt=SwA();Tt.__click=()=>Zn.onClick();var an=_A(dA(Tt),2),Ai=_A(dA(an),2),yt=Ci=>{var la=MwA(),Xn=_A(et(la),2);_n(Xn,"title","Create an empty JSON object (press '{')"),Xn.__click=Aa;var ea=_A(Xn,2);_n(ea,"title","Create an empty JSON array (press '[')"),ea.__click=mn,CA(Ci,la)};jA(Ai,Ci=>{Zn.readOnly||Ci(yt)}),CA($o,Tt),Ft()})($t,{get readOnly(){return h()},onCreateObject:()=>{_t(),cn("{")},onCreateArray:()=>{_t(),cn("[")},onClick:()=>{_t()}})},Qo=$t=>{var $o=g5A(),Zn=et($o),Aa=it(()=>h()?[]:[{icon:w4,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Wn}]);Yl(Zn,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(Aa)}}),V$(_A(Zn,2),{get text(){return c(ee)},get json(){return c(DA)},get indentation(){return Z()},get parser(){return F()}}),CA($t,$o)};jA(Fn,$t=>{c(ee)===""||c(ee)===void 0?$t($i):$t(Qo,!1)}),CA(Vt,Gi)},ot=Vt=>{var Gi=C5A(),Fn=et(Gi);J$(dA(Fn),{get json(){return c(DA)},get documentState(){return c(HA)},get parser(){return F()},get showSearch(){return c(pt)},get showReplace(){return c(xe)},get readOnly(){return h()},columns:void 0,onSearch:oi,onFocus:j,onPatch:Ae,onClose:oA});var $i=_A(Fn,2);_n($i,"data-jsoneditor-scrollable-contents",!0);var Qo=dA($i),$t=Ai=>{CA(Ai,c5A())};jA(Qo,Ai=>{c(pt)&&Ai($t)}),BR(_A(Qo,2),{get value(){return c(DA)},pointer:"",get state(){return c(HA)},get validationErrors(){return c(OA)},get searchResults(){return c(je)},get selection(){return c(vA)},get context(){return c(M)},get onDragSelectionStart(){return ma}}),Oo($i,Ai=>N(l,Ai),()=>c(l));var $o=_A($i,2),Zn=Ai=>{var yt=it(()=>(c(Ot),wA(()=>"You pasted a JSON ".concat(Array.isArray(c(Ot).contents)?"array":"object"," as text")))),Ci=it(()=>[{icon:CC,text:"Paste as JSON instead",title:"Replace the value with the pasted JSON",onMouseDown:Ji},{text:"Leave as is",title:"Keep the JSON embedded in the value",onClick:Oi}]);Yl(Ai,{type:"info",get message(){return c(yt)},get actions(){return c(Ci)}})};jA($o,Ai=>{c(Ot)&&Ai(Zn)});var Aa=_A($o,2),mn=Ai=>{var yt=it(()=>[{icon:CC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Ut},{text:"Leave as is",title:"Keep the pasted array",onClick:Xi}]);Yl(Ai,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(yt)}})};jA(Aa,Ai=>{c(He)&&Ai(mn)});var Tt=_A(Aa,2),an=Ai=>{var yt=it(()=>h()?[]:[{icon:J8,text:"Ok",title:"Accept the repaired document",onClick:Kt},{icon:w4,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Wn}]);Yl(Ai,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(yt)},onClose:_t})};jA(Tt,Ai=>{c(Qe)&&Ai(an)}),VR(_A(Tt,2),{get validationErrors(){return c(GA)},selectError:sA}),CA(Vt,Gi)};jA(ye,Vt=>{c(DA)===void 0?Vt(be):Vt(ot,!1)}),fe("paste",Ge,un),CA(tA,yA)},Pe=tA=>{CA(tA,d5A())};jA(se,tA=>{n?tA(Pe,!1):tA(Ee)}),Oo(q,tA=>N(C,tA),()=>c(C));var Re=_A(q,2),Le=tA=>{F$(tA,{onClose:()=>N(fA,!1)})};jA(Re,tA=>{c(fA)&&tA(Le)});var ai=_A(Re,2),Yn=tA=>{L$(tA,DI(()=>c(XA),{onClose:()=>{var yA;(yA=c(XA))===null||yA===void 0||yA.onClose(),N(XA,void 0)}}))};return jA(ai,tA=>{c(XA)&&tA(Yn)}),Se(()=>_=ii(q,1,"jse-tree-mode svelte-10mlrw4",null,_,{"no-main-menu":!k()})),fe("keydown",q,function(tA){var yA=TC(tA),WA=tA.shiftKey;if(i("keydown",{combo:yA,key:tA.key}),yA==="Ctrl+X"&&(tA.preventDefault(),G(!0)),yA==="Ctrl+Shift+X"&&(tA.preventDefault(),G(!1)),yA==="Ctrl+C"&&(tA.preventDefault(),Bi(!0)),yA==="Ctrl+Shift+C"&&(tA.preventDefault(),Bi(!1)),yA==="Ctrl+D"&&(tA.preventDefault(),Do()),yA!=="Delete"&&yA!=="Backspace"||(tA.preventDefault(),Zo()),yA==="Insert"&&(tA.preventDefault(),Xo("structure")),yA==="Ctrl+A"&&(tA.preventDefault(),N(vA,Hi([]))),yA==="Ctrl+Q"&&zi(tA),yA==="ArrowUp"||yA==="Shift+ArrowUp"){tA.preventDefault();var Ge=c(vA)?CZ(c(DA),c(HA),c(vA),WA)||c(vA):Bh(c(DA),c(HA));N(vA,Ge),Fo(It(Ge))}if(yA==="ArrowDown"||yA==="Shift+ArrowDown"){tA.preventDefault();var ye=c(vA)?(function($i,Qo,$t){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if($t){var Zn=$o?It($t):vI($i,$t),Aa=aa(Xe($i,Zn))?sZ($i,Qo,Zn,!0):Qo,mn=__($i,Qo,Zn),Tt=__($i,Aa,Zn);if($o)return Va($t)?mn!==void 0?fs(mn,mn):void 0:dl($t)?Tt!==void 0?fs(Tt,Tt):void 0:Tt!==void 0?fs(hd($t),Tt):void 0;if(dl($t))return Tt!==void 0?Hi(Tt):void 0;if(Va($t)||En($t))return mn!==void 0?Hi(mn):void 0;if(nr($t)){if(mn===void 0||mn.length===0)return;var an=Yi(mn),Ai=Xe($i,an);return Array.isArray(Ai)?Hi(mn):JC(mn)}return Co($t)?Tt!==void 0?Hi(Tt):mn!==void 0?Hi(mn):void 0:void 0}})(c(DA),c(HA),c(vA),WA)||c(vA):Bh(c(DA),c(HA));N(vA,ye),Fo(It(ye))}if(yA==="ArrowLeft"||yA==="Shift+ArrowLeft"){tA.preventDefault();var be=c(vA)?(function($i,Qo,$t){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Zn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if($t){var{caret:Aa,previous:mn}=IZ($i,Qo,$t,Zn);if($o)return Co($t)?void 0:fs($t.path,$t.path);if(Aa&&mn)return rR(mn);var Tt=Yi(It($t)),an=Xe($i,Tt);return En($t)&&Array.isArray(an)?fs($t.path,$t.path):Co($t)&&!Array.isArray(an)?JC($t.focusPath):void 0}})(c(DA),c(HA),c(vA),WA,!h())||c(vA):Bh(c(DA),c(HA));N(vA,be),Fo(It(be))}if(yA==="ArrowRight"||yA==="Shift+ArrowRight"){tA.preventDefault();var ot=c(vA)&&c(DA)!==void 0?(function($i,Qo,$t){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Zn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if($t){var{caret:Aa,next:mn}=IZ($i,Qo,$t,Zn);return $o?Co($t)?void 0:fs($t.path,$t.path):Aa&&mn?rR(mn):Co($t)?Hi($t.focusPath):void 0}})(c(DA),c(HA),c(vA),WA,!h())||c(vA):Bh(c(DA),c(HA));N(vA,ot),Fo(It(ot))}if(yA==="Enter"&&c(vA)){if(RD(c(vA))){var Vt=c(vA).focusPath,Gi=Xe(c(DA),Yi(Vt));Array.isArray(Gi)&&(tA.preventDefault(),N(vA,Hi(Vt)))}nr(c(vA))&&(tA.preventDefault(),N(vA,Me(Me({},c(vA)),{},{edit:!0}))),En(c(vA))&&(tA.preventDefault(),aa(Xe(c(DA),c(vA).path))?FA(c(vA).path,!0):N(vA,Me(Me({},c(vA)),{},{edit:!0})))}if(yA.replace(/^Shift\+/,"").length===1&&c(vA))return tA.preventDefault(),void cn(tA.key);if(yA==="Enter"&&(dl(c(vA))||Va(c(vA))))return tA.preventDefault(),void cn("");if(yA==="Ctrl+Enter"&&En(c(vA))){var Fn=Xe(c(DA),c(vA).path);xD(Fn)&&window.open(String(Fn),"_blank")}yA==="Escape"&&c(vA)&&(tA.preventDefault(),N(vA,void 0)),yA==="Ctrl+F"&&(tA.preventDefault(),nt(!1)),yA==="Ctrl+H"&&(tA.preventDefault(),nt(!0)),yA==="Ctrl+Z"&&(tA.preventDefault(),Ho()),yA==="Ctrl+Shift+Z"&&(tA.preventDefault(),ya())}),fe("mousedown",q,function(tA){i("handleMouseDown",tA);var yA=tA.target;e$(yA,"BUTTON")||yA.isContentEditable||(_t(),c(vA)||c(DA)!==void 0||c(ee)!==""&&c(ee)!==void 0||(i("createDefaultSelection"),N(vA,Hi([]))))}),fe("contextmenu",q,zi),CA(t,V),jt(e,"expand",TA),jt(e,"collapse",de),jt(e,"validate",ze),jt(e,"getJson",Te),jt(e,"patch",Li),jt(e,"acceptAutoRepair",Kt),jt(e,"openTransformModal",vo),jt(e,"scrollTo",Ui),jt(e,"findElement",Nn),jt(e,"findSearchResult",ho),jt(e,"focus",_t),Ft(R)}function Z$(t){return typeof(e=t)!="object"||e===null?t:new Proxy(t,{get:(A,i,n)=>Z$(Reflect.get(A,i,n)),set:()=>!1,deleteProperty:()=>!1});var e}var V5=or("jsoneditor:History");function X$(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.maxItems||1e3,A=[],i=0;function n(){return i0}function a(){return{canUndo:n(),canRedo:o(),items:()=>A.slice().reverse(),add:s,undo:g,redo:C,clear:l}}function r(){t.onChange&&t.onChange(a())}function s(I){V5("add",I),A=[I].concat(A.slice(i)).slice(0,e),i=0,r()}function l(){V5("clear"),A=[],i=0,r()}function g(){if(n()){var I=A[i];return i+=1,V5("undo",I),r(),I}}function C(){if(o())return V5("redo",A[i-=1]),r(),A[i]}return{get:a}}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-transform-modal-inner.svelte-lta8xm { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) { + color: inherit; + flex: 1; + display: flex; + flex-direction: column; + padding: 0; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + gap: calc(2 * var(--jse-padding, 10px)); + min-height: 0; + box-sizing: border-box; + padding: 0 calc(2 * var(--jse-padding, 10px)) var(--jse-padding, 10px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p { + margin: var(--jse-padding, 10px) 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:first-child { + margin-top: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:last-child { + margin-bottom: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) code { + background: var(--jse-modal-code-background, rgba(0, 0, 0, 0.05)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .query-error:where(.svelte-lta8xm) { + color: var(--jse-error-color, #ee5341); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { + flex: 1; + outline: none; + resize: vertical; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + gap: calc(2 * var(--jse-padding, 10px)); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data.jse-hide:where(.svelte-lta8xm) { + flex: none; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents.jse-hide-original-data:where(.svelte-lta8xm) { + flex-direction: column; + gap: 0; + margin-bottom: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)) calc(2 * var(--jse-padding, 10px)); +} +@media screen and (max-width: 1200px) { + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { + flex-direction: column; + overflow: auto; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { + min-height: 150px; + flex: none; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-tree-mode { + height: 300px; + flex: none; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm), + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { + flex: unset; + } +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) { + font-weight: bold; + display: block; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) { + margin-top: calc(2 * var(--jse-padding, 10px)); + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) button:where(.svelte-lta8xm) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + font-weight: bold; + padding: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-tree-mode { + flex: 1; + background: var(--jse-input-background-readonly, transparent); + box-shadow: none; + box-sizing: border-box; + --jse-main-border: var(--jse-input-border, 1px solid #d8dbdf); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm), +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm) { + border: var(--jse-input-border, 1px solid #d8dbdf); + outline: none; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: inherit; + background: var(--jse-input-background, var(--jse-background-color, #fff)); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):focus, +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):read-only, +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):read-only { + background: var(--jse-input-background-readonly, transparent); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-preview.jse-error:where(.svelte-lta8xm) { + flex: 1; + background: var(--jse-input-background-readonly, transparent); + border: var(--jse-input-border, 1px solid #d8dbdf); + color: var(--jse-error-color, #ee5341); + padding: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-transform-modal-inner.svelte-lta8xm a { + color: var(--jse-a-color, #156fc5); +} +.jse-transform-modal-inner.svelte-lta8xm a:hover { + color: var(--jse-a-color-highlight, #0f508d); +}`);var wf=kD(()=>w6A),hh=kD(()=>D6A),E5A=JA('
      '),h5A=JA(" ",1),Q5A=JA('
      '),u5A=JA('
      Language
      Path
      Query
      Preview
      ',1),f5A=JA('
      ');function p5A(t,e){var A,i,n;Nt(e,!1);var o=or("jsoneditor:TransformModal"),a=L(e,"id",25,()=>"transform-modal-"+wh()),r=L(e,"json",9),s=L(e,"rootPath",25,()=>[]),l=L(e,"indentation",9),g=L(e,"truncateTextSize",9),C=L(e,"escapeControlCharacters",9),I=L(e,"escapeUnicodeCharacters",9),d=L(e,"parser",9),h=L(e,"parseMemoizeOne",9),E=L(e,"validationParser",9),f=L(e,"pathParser",9),m=L(e,"queryLanguages",9),v=L(e,"queryLanguageId",13),k=L(e,"onChangeQueryLanguage",9),S=L(e,"onRenderValue",9),b=L(e,"onRenderMenu",9),x=L(e,"onRenderContextMenu",9),F=L(e,"onClassName",9),z=L(e,"onTransform",9),P=L(e,"onClose",9),W=BA(void 0,!0),eA=BA(X$({onChange:HA=>N(eA,HA)}).get(),!0),Z=BA(void 0,!0),EA=BA(void 0,!0),X=BA(!1,!0),iA="".concat(a(),":").concat(vt(s())),AA=(A=wf()[iA])!==null&&A!==void 0?A:{},IA=BA(hh().showWizard!==!1,!0),aA=BA(hh().showOriginal!==!1,!0),rA=BA((i=AA.queryOptions)!==null&&i!==void 0?i:{},!0),uA=BA(v()===AA.queryLanguageId&&AA.query?AA.query:"",!0),UA=BA((n=AA.isManual)!==null&&n!==void 0&&n,!0),$A=BA(void 0,!0),zA=BA(void 0,!0),pA=BA({text:""},!0);function PA(HA){var vA;return(vA=m().find(Gt=>Gt.id===HA))!==null&&vA!==void 0?vA:m()[0]}function Ue(HA){try{N(rA,HA),N(uA,PA(v()).createQuery(c(Z),HA)),N($A,void 0),N(UA,!1),o("updateQueryByWizard",{queryOptions:c(rA),query:c(uA),isManual:c(UA)})}catch(vA){N($A,String(vA))}}function _e(HA){N(uA,HA.target.value),N(UA,!0),o("handleChangeQuery",{query:c(uA),isManual:c(UA)})}c(UA)||Ue(c(rA)),As(()=>{var HA;(HA=c(W))===null||HA===void 0||HA.focus()});var YA=ME(function(HA,vA){if(HA===void 0)return N(pA,{text:""}),void N(zA,"Error: No JSON");if(vA.trim()!=="")try{o("previewTransform",{query:vA});var Gt=PA(v()).executeQuery(HA,vA,d());N(pA,{json:Gt}),N(zA,void 0)}catch(ft){N(pA,{text:""}),N(zA,String(ft))}else N(pA,{json:HA})},300);function fA(){if(c(Z)===void 0)return N(pA,{text:""}),void N(zA,"Error: No JSON");try{o("handleTransform",{query:c(uA)});var HA=PA(v()).executeQuery(c(Z),c(uA),d());z()([{op:"replace",path:vt(s()),value:HA}]),P()()}catch(vA){console.error(vA),N(pA,{text:""}),N(zA,String(vA))}}function XA(){N(IA,!c(IA)),hh(hh().showWizard=c(IA))}function DA(){N(aA,!c(aA)),hh(hh().showOriginal=c(aA))}function ee(HA){HA.focus()}function NA(HA){o("handleChangeQueryLanguage",HA),v(HA),k()(HA),Ue(c(rA))}function ke(){c(X)?N(X,!c(X)):P()()}KA(()=>(K(r()),K(s())),()=>{N(Z,Z$(Xe(r(),s())))}),KA(()=>c(Z),()=>{N(EA,c(Z)?{json:c(Z)}:{text:""})}),KA(()=>(c(Z),c(uA)),()=>{YA(c(Z),c(uA))}),KA(()=>(wf(),c(rA),c(uA),K(v()),c(UA)),()=>{wf(wf()[iA]={queryOptions:c(rA),query:c(uA),queryLanguageId:v(),isManual:c(UA)}),o("store state in memory",iA,wf()[iA])}),Rn(),ni(!0),Of(t,{get onClose(){return P()},className:"jse-transform-modal",get fullscreen(){return c(X)},children:(HA,vA)=>{var Gt=f5A();tR(dA(Gt),{children:(ft,he)=>{var Ot=u5A(),He=et(Ot);(function(G,dt){Nt(dt,!1);var Bi,Qn=L(dt,"queryLanguages",9),un=L(dt,"queryLanguageId",9),Vn=L(dt,"fullscreen",13),Yo=L(dt,"onChangeQueryLanguage",9),Bo=L(dt,"onClose",9),No=BA(void 0,!0),{openAbsolutePopup:Zo,closeAbsolutePopup:Do}=kI("absolute-popup");function Ba(){var Xo={queryLanguages:Qn(),queryLanguageId:un(),onChangeQueryLanguage:ra=>{Do(Bi),Yo()(ra)}};Bi=Zo(u8A,Xo,{offsetTop:-2,offsetLeft:0,anchor:c(No),closeOnOuterClick:!0})}ni(!0),wD(G,{title:"Transform",fullScreenButton:!0,get onClose(){return Bo()},get fullscreen(){return Vn()},set fullscreen(Xo){Vn(Xo)},$$slots:{actions:(Xo,ra)=>{var yo,ge=m8A();tn(dA(ge),{get data(){return Dz}}),Oo(ge,mi=>N(No,mi),()=>c(No)),Se(()=>yo=ii(ge,1,"jse-config svelte-5gkegr",null,yo,{hide:Qn().length<=1})),fe("click",ge,Ba),CA(Xo,ge)}},$$legacy:!0}),Ft()})(He,{get queryLanguages(){return m()},get queryLanguageId(){return v()},onChangeQueryLanguage:NA,get onClose(){return P()},get fullscreen(){return c(X)},set fullscreen(G){N(X,G)},$$legacy:!0});var je=dA(_A(He,2)),pt=dA(je),xe=_A(dA(pt),2);KX(dA(xe),()=>(K(v()),wA(()=>PA(v()).description)));var oi=_A(xe,4),j=_A(oi,2),$=dA(j),oA=dA($),sA=dA(oA),TA=it(()=>c(IA)?c0:kE);tn(sA,{get data(){return c(TA)}});var de=_A(j,2),Qe=G=>{var dt=Fi(),Bi=et(dt),Qn=Vn=>{var Yo=h5A(),Bo=et(Yo);E8A(Bo,{get queryOptions(){return c(rA)},get json(){return c(Z)},onChange:Ue});var No=_A(Bo,2),Zo=Do=>{var Ba=E5A(),Xo=dA(Ba);Se(()=>Lt(Xo,c($A))),CA(Do,Ba)};jA(No,Do=>{c($A)&&Do(Zo)}),CA(Vn,Yo)},un=Vn=>{CA(Vn,dr("(Only available for arrays, not for objects)"))};jA(Bi,Vn=>{c(Z),wA(()=>Array.isArray(c(Z)))?Vn(Qn):Vn(un,!1)}),CA(G,dt)};jA(de,G=>{c(IA)&&G(Qe)});var GA=_A(de,4);Oo(GA,G=>N(W,G),()=>c(W));var OA,ht,tt=_A(pt,2),ze=dA(tt),Te=dA(ze),ci=dA(Te),gn=dA(ci),hn=dA(gn),Ke=it(()=>c(aA)?c0:kE);tn(hn,{get data(){return c(Ke)}});var nn=_A(Te,2),Si=G=>{pR(G,{get externalContent(){return c(EA)},externalSelection:void 0,get history(){return c(eA)},readOnly:!0,get truncateTextSize(){return g()},mainMenuBar:!1,navigationBar:!1,get indentation(){return l()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return h()},get onRenderValue(){return S()},get onRenderMenu(){return b()},get onRenderContextMenu(){return x()},onError:wA(()=>console.error),get onChange(){return ma},get onChangeMode(){return ma},get onSelect(){return ma},get onUndo(){return ma},get onRedo(){return ma},get onFocus(){return ma},get onBlur(){return ma},get onSortModal(){return ma},get onTransformModal(){return ma},get onJSONEditorModal(){return ma},get onClassName(){return F()},validator:void 0,get validationParser(){return E()},get pathParser(){return f()}})};jA(nn,G=>{c(aA)&&G(Si)});var Li=_A(ze,2),Zi=_A(dA(Li),2),bt=G=>{pR(G,{get externalContent(){return c(pA)},externalSelection:void 0,get history(){return c(eA)},readOnly:!0,get truncateTextSize(){return g()},mainMenuBar:!1,navigationBar:!1,get indentation(){return l()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return h()},get onRenderValue(){return S()},get onRenderMenu(){return b()},get onRenderContextMenu(){return x()},onError:wA(()=>console.error),get onChange(){return ma},get onChangeMode(){return ma},get onSelect(){return ma},get onUndo(){return ma},get onRedo(){return ma},get onFocus(){return ma},get onBlur(){return ma},get onSortModal(){return ma},get onTransformModal(){return ma},get onJSONEditorModal(){return ma},get onClassName(){return F()},validator:void 0,get validationParser(){return E()},get pathParser(){return f()}})},on=G=>{var dt=Q5A(),Bi=dA(dt);Se(()=>Lt(Bi,c(zA))),CA(G,dt)};jA(Zi,G=>{c(zA)?G(on,!1):G(bt)});var Kt=dA(_A(je,2));_r(()=>fe("click",Kt,fA)),ms(Kt,G=>ee?.(G)),Se(G=>{Dd(oi,G),Dd(GA,c(uA)),OA=ii(tt,1,"jse-data-contents svelte-lta8xm",null,OA,{"jse-hide-original-data":!c(aA)}),ht=ii(ze,1,"jse-original-data svelte-lta8xm",null,ht,{"jse-hide":!c(aA)}),Kt.disabled=!!c(zA)},[()=>(K(en),K(s()),K(Bl),wA(()=>en(s())?"(document root)":Bl(s())))]),fe("click",oA,XA),fe("input",GA,_e),fe("click",gn,DA),CA(ft,Ot)},$$slots:{default:!0}}),ms(Gt,(ft,he)=>DD?.(ft,he),()=>ke),CA(HA,Gt)},$$slots:{default:!0}}),Ft()}function Qg(){}var m5A=0,Ir=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.id=m5A++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Hf.match(e)),A=>{var i=e(A);return i===void 0?null:[this,i]}}};Ir.closedBy=new Ir({deserialize:t=>t.split(" ")}),Ir.openedBy=new Ir({deserialize:t=>t.split(" ")}),Ir.group=new Ir({deserialize:t=>t.split(" ")}),Ir.isolate=new Ir({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}}),Ir.contextHash=new Ir({perNode:!0}),Ir.lookAhead=new Ir({perNode:!0}),Ir.mounted=new Ir({perNode:!0});var KZ,w5A=Object.create(null),Hf=class t{constructor(e,A,i){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){var A=e.props&&e.props.length?Object.create(null):w5A,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(var o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;var A=this.prop(Ir.group);return!!A&&A.indexOf(e)>-1}return this.id==e}static match(e){var A=Object.create(null);for(var i in e)for(var n of i.split(" "))A[n]=e[i];return o=>{for(var a=o.prop(Ir.group),r=-1;r<(a?a.length:0);r++){var s=A[r<0?o.name:a[r]];if(s)return s}}}};Hf.none=new Hf("",Object.create(null),0,8),(function(t){t[t.ExcludeBuffers=1]="ExcludeBuffers",t[t.IncludeAnonymous=2]="IncludeAnonymous",t[t.IgnoreMounts=4]="IgnoreMounts",t[t.IgnoreOverlays=8]="IgnoreOverlays"})(KZ||(KZ={})),new Ir({perNode:!0});Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-status-bar.svelte-1pmgv9j { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + margin: 0; + border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); + display: flex; + gap: var(--jse-padding, 10px); +} +.jse-status-bar.svelte-1pmgv9j:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-status-bar.svelte-1pmgv9j .jse-status-bar-info:where(.svelte-1pmgv9j) { + padding: 2px; +}`);var D5A=JA('
      '),y5A=JA('
      '),v5A=JA('
      '),b5A=JA('
      '),ZR=ih.define([{tag:Fe.propertyName,color:"var(--internal-key-color)"},{tag:Fe.number,color:"var(--internal-value-color-number)"},{tag:Fe.bool,color:"var(--internal-value-color-boolean)"},{tag:Fe.string,color:"var(--internal-value-color-string)"},{tag:Fe.keyword,color:"var(--internal-value-color-null)"}]),M5A=mx(ZR),S5A=ZR.style;ZR.style=t=>S5A(t||[]);var k5A=[_o.fromClass(class{constructor(t){this.view=t,this.indentUnit=Ic(t.state),this.initialPaddingLeft=null,this.isChrome=window?.navigator.userAgent.includes("Chrome"),this.generate(t.state)}update(t){var e=Ic(t.state);(e!==this.indentUnit||t.docChanged||t.viewportChanged)&&(this.indentUnit=e,this.generate(t.state))}generate(t){var e=new jr;this.initialPaddingLeft?this.addStyleToBuilder(e,t,this.initialPaddingLeft):this.view.requestMeasure({read:A=>{var i=A.contentDOM.querySelector(".cm-line");i&&(this.initialPaddingLeft=window.getComputedStyle(i).getPropertyValue("padding-left"),this.addStyleToBuilder(e,A.state,this.initialPaddingLeft)),this.decorations=e.finish()}}),this.decorations=e.finish()}addStyleToBuilder(t,e,A){var i=this.getVisibleLines(e);for(var n of i){var{numColumns:o,containsTab:a}=this.numColumns(n.text,e.tabSize),r="calc(".concat(o+this.indentUnit,"ch + ").concat(A,")"),s=this.isChrome?"calc(-".concat(o+this.indentUnit,"ch - ").concat(a?1:0,"px)"):"-".concat(o+this.indentUnit,"ch");t.add(n.from,n.from,St.line({attributes:{style:"padding-left: ".concat(r,"; text-indent: ").concat(s,";")}}))}}getVisibleLines(t){var e=new Set,A=null;for(var{from:i,to:n}of this.view.visibleRanges)for(var o=i;o<=n;){var a=t.doc.lineAt(o);A!==a&&(e.add(a),A=a),o=a.to+1}return e}numColumns(t,e){var A=0,i=!1;A:for(var n=0;nt.decorations})];Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-text-mode.svelte-k2b9e6 { + --internal-key-color: var(--jse-key-color, #1a1a1a); + --internal-value-color-number: var(--jse-value-color-number, #ee422e); + --internal-value-color-boolean: var(--jse-value-color-boolean, #ff8c00); + --internal-value-color-string: var(--jse-value-color-string, #008000); + --internal-value-color-null: var(--jse-value-color-null, #004ed0); + flex: 1; + box-sizing: border-box; + display: flex; + flex-direction: column; + background: var(--jse-background-color, #fff); +} +.jse-text-mode.no-main-menu.svelte-k2b9e6 { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) { + flex: 1; + display: flex; + position: relative; + flex-direction: column; + overflow: hidden; + min-width: 0; + min-height: 0; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-hidden:where(.svelte-k2b9e6) { + visibility: hidden; + position: absolute; + top: 0; + left: 0; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor { + flex: 1; + overflow: hidden; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-scroller { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + line-height: var(--jse-line-height, calc(1em + 4px)); + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-gutters { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + border-right: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLine, +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLineGutter { + background: var(--jse-active-line-background-color, rgba(0, 0, 0, 0.06)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionBackground { + background: var(--jse-selection-background-color, #d3d3d3); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch.cm-searchMatch-selected { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionMatch { + background-color: var(--jse-search-match-background-color, rgba(153, 255, 119, 0.5019607843)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-foldPlaceholder { + background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); + border: none; + padding: 0 var(--jse-padding, 10px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-tooltip { + font-size: var(--jse-font-size, 16px); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + color: var(--jse-tooltip-color, var(--jse-text-color, #4d4d4d)); + background: var(--jse-tooltip-background, var(--jse-modal-background, #f5f5f5)); + border: var(--jse-tooltip-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-diagnosticAction { + background: var(--jse-tooltip-action-button-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-tooltip-action-button-background, #4d4d4d); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-panels { + border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search input { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + color: var(--jse-input-color, var(--jse-text-color, #4d4d4d)); + border: var(--jse-input-border, 1px solid #d8dbdf); + background: var(--jse-input-background, var(--jse-background-color, #fff)); + margin-right: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + color: var(--jse-panel-button-color, inherit); + background: var(--jse-panel-button-background, transparent); + border: none; + cursor: pointer; + text-transform: capitalize; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + margin: 0; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button:hover { + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + padding-left: var(--jse-padding, 10px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label input { + margin-right: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button[name='close'] { + width: 32px; + height: 32px; + font-size: 24px; + line-height: 24px; + padding: 0; + right: 0; + top: -4px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-cursor-primary { + border-color: var(--jse-text-color, #4d4d4d); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading-space:where(.svelte-k2b9e6) { + flex: 1; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading:where(.svelte-k2b9e6) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-preview:where(.svelte-k2b9e6) { + flex: 1; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); + overflow: auto; + white-space: pre-wrap; + word-break: break-word; + padding: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + background: var(--jse-background-color, #fff); + border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-tip:where(.svelte-k2b9e6) { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-track:where(.svelte-k2b9e6) { + flex: 1; + height: 6px; + background: var(--jse-panel-background, #ebebeb); + border-radius: 3px; + overflow: hidden; + border: 1px solid var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-fill:where(.svelte-k2b9e6) { + height: 100%; + background: linear-gradient(90deg, var(--jse-theme-color, #3883fa), var(--jse-theme-color-highlight, #5f9dff)); + border-radius: 2px; + transition: width 0.1s ease; + min-width: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6) { + padding: 4px 12px; + font-size: 12px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + background: var(--jse-theme-color, #3883fa); + color: #fff; + border-radius: 3px; + cursor: pointer; + transition: background-color 0.2s ease; + flex-shrink: 0; + border: 1px solid var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6):hover { + background: var(--jse-theme-color-highlight, #5f9dff); + color: #fff; +}`);var x5A=JA('
      Collapsing
      '),_5A=JA('
      ',1),R5A=JA(" ",1),N5A=JA("
      ",1),F5A=JA('
      loading...
      '),L5A=JA("
      ");function G5A(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=L(e,"readOnly",9),o=L(e,"mainMenuBar",9),a=L(e,"statusBar",9),r=L(e,"askToFormat",9),s=L(e,"externalContent",9),l=L(e,"externalSelection",9),g=L(e,"history",9),C=L(e,"indentation",9),I=L(e,"tabSize",9),d=L(e,"escapeUnicodeCharacters",9),h=L(e,"parser",9),E=L(e,"validator",9),f=L(e,"validationParser",9),m=L(e,"onChange",9),v=L(e,"onChangeMode",9),k=L(e,"onSelect",9),S=L(e,"onUndo",9),b=L(e,"onRedo",9),x=L(e,"onError",9),F=L(e,"onFocus",9),z=L(e,"onBlur",9),P=L(e,"onRenderMenu",9),W=L(e,"onSortModal",9),eA=L(e,"onTransformModal",9),Z=or("jsoneditor:TextMode"),EA={key:"Mod-i",run:Qe,shift:GA,preventDefault:!0},X=typeof window>"u";Z("isSSR:",X);var iA,AA=BA(void 0,!0),IA=BA(void 0,!0),aA=BA(void 0,!0),rA=BA(!1,!0),uA=BA(r(),!0),UA=BA([],!0),$A=BA(!1,!0),zA=BA(0,!0),pA=BA(0,!0),PA=null,Ue=new d0,_e=new d0,YA=new d0,fA=new d0,XA=new d0,DA=s(),ee=BA(eR(DA,C(),h()),!0),NA=al.define(),ke=null;function HA(){if(!ke||ke.length===0)return!1;var xA=ke[0].startState,Ae=ke[ke.length-1].state,De=ke.map(FA=>FA.changes).reduce((FA,le)=>FA.compose(le)),mA={type:"text",undo:{changes:De.invert(xA.doc).toJSON(),selection:ra(xA.selection)},redo:{changes:De.toJSON(),selection:ra(Ae.selection)}};return Z("add history item",mA),g().add(mA),ke=null,!0}var vA=BA(d(),!0);As(zt(function*(){if(!X)try{iA=(function(xA){var{target:Ae,initialText:De,readOnly:mA,indentation:FA}=xA;Z("Create CodeMirror editor",{readOnly:mA,indentation:FA});var le=(function(nt,rt){return N_(nt)?nt.ranges.every(xt=>xt.anchor{N(aA,nt.state),nt.docChanged&&(nt.transactions.some(rt=>!!rt.annotation(NA))||(ke=[...ke??[],nt]),Zo()),nt.selectionSet&&Xo()}),jV(),AW({top:!0}),gi.lineWrapping,_e.of(qa.readOnly.of(mA)),fA.of(qa.tabSize.of(I())),YA.of(No(FA)),XA.of(gi.theme({},{dark:on()}))]});return iA=new gi({state:Ne,parent:Ae}),le&&iA.dispatch(iA.state.update({selection:le.main,scrollIntoView:!0})),iA})({target:c(AA),initialText:yo(c(ee),c(rA))?"":c(A).escapeValue(c(ee)),readOnly:n(),indentation:C()})}catch(xA){console.error(xA)}})),Dg(()=>{Do(),iA&&(Z("Destroy CodeMirror editor"),iA.destroy()),oi()});var Gt=Y2(),ft=Y2();function he(){iA&&(Z("focus"),iA.focus())}function Ot(xA,Ae){if(iA)try{(function(){var De=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],mA=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],FA=iA.state,le=FA.doc.length,Ne=Bx(FA,le,1/0);if(Ne){var nt=[];if(De.length===0)nt=pt(Ne,FA,void 0,mA);else{var{from:rt}=y_(c(A).escapeValue(c(ee)),De);rt!==void 0&&rt!==0&&(nt=pt(Ne,FA,rt,mA))}nt.length>0&&(function(xt){xe.apply(this,arguments)})(nt)}})(xA,Ae)}catch(De){x()(De)}}function He(){return Qx.of((xA,Ae,De)=>{var mA=Bx(xA,xA.doc.length,1/0);if(!mA||mA.lengthDe)){if(FA&&Ne.from=Ae&&rt.to>De&&(FA=rt)}}}return FA})}function je(xA){var Ae=xA.lastChild;return Ae&&Ae.to==xA.to&&Ae.type.isError}function pt(xA,Ae,De){var mA=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],FA=[],le=new Set;return xA.iterate({enter(Ne){if(De===void 0||Ne.from>=De){var nt=th(Ae,Ne.from,Ne.to);if(nt){var rt="".concat(nt.from,"-").concat(nt.to);if(!le.has(rt))if(mA)FA.push({from:nt.from,to:nt.to}),le.add(rt);else{var xt=FA.some(On=>On.from<=nt.from&&On.to>=nt.to);xt||(FA.push({from:nt.from,to:nt.to}),le.add(rt))}}}}}),FA}function xe(){return xe=zt(function*(xA){if(xA.length!==0){var Ae=xA.length>5e3;Ae&&(N($A,!0),N(zA,0),N(pA,xA.length),PA=new AbortController);var De=mA=>new Promise(FA=>{var le;Ae&&(le=PA)!==null&&le!==void 0&&le.signal.aborted?FA():requestAnimationFrame(()=>{var Ne=Math.min(mA+100,xA.length),nt=xA.slice(mA,Ne);iA.dispatch({effects:nt.map(rt=>oh.of({from:rt.from,to:rt.to}))}),Ae&&N(zA,Ne),Ne1&&arguments[1]!==void 0?arguments[1]:aR;if(iA)try{if(xA&&xA.length>0){var{from:De}=y_(c(A).escapeValue(c(ee)),xA);De!==void 0&&(iA.dispatch({selection:{anchor:De,head:De}}),ux(iA))}else fx(iA);Ae?.(xA)}catch(mA){x()(mA)}}function $(){j([],()=>!0)}function oA(){Ot([],!0)}var sA=!1;function TA(xA){return de(xA,!1)}function de(xA,Ae){Z("handlePatch",xA,Ae);var De=h().parse(c(ee)),mA=tl(De,xA),FA=e8(De,xA);return Bi({text:h().stringify(mA,null,C())},Ae,!1),{json:mA,previousJson:De,undo:FA,redo:xA}}function Qe(){if(Z("format"),n())return!1;try{var xA=h().parse(c(ee));return Bi({text:h().stringify(xA,null,C())},!0,!1),N(uA,r()),!0}catch(Ae){x()(Ae)}return!1}function GA(){if(Z("compact"),n())return!1;try{var xA=h().parse(c(ee));return Bi({text:h().stringify(xA)},!0,!1),N(uA,!1),!0}catch(Ae){x()(Ae)}return!1}function OA(){if(Z("repair"),!n())try{Bi({text:ag(c(ee))},!0,!1),N(ge,x_),N(mi,void 0)}catch(xA){x()(xA)}}function ht(){var xA;if(!n())try{var Ae=h().parse(c(ee));sA=!0,W()({id:Gt,json:Ae,rootPath:[],onSort:(xA=zt(function*(De){var{operations:mA}=De;Z("onSort",mA),de(mA,!0)}),function(De){return xA.apply(this,arguments)}),onClose:()=>{sA=!1,he()}})}catch(De){x()(De)}}function tt(xA){var{id:Ae,rootPath:De,onTransform:mA,onClose:FA}=xA;try{var le=h().parse(c(ee));sA=!0,eA()({id:Ae||ft,json:le,rootPath:De||[],onTransform:Ne=>{mA?mA({operations:Ne,json:le,transformedJson:tl(le,Ne)}):(Z("onTransform",Ne),de(Ne,!0))},onClose:()=>{sA=!1,he(),FA&&FA()}})}catch(Ne){x()(Ne)}}function ze(){n()||tt({rootPath:[]})}function Te(){iA&&(c(AA)&&c(AA).querySelector(".cm-search")?w5(iA):m5(iA))}function ci(){if(n())return!1;Do();var xA=g().undo();return Z("undo",xA),aZ(xA)?(iA.dispatch({annotations:NA.of("undo"),changes:Pr.fromJSON(xA.undo.changes),selection:Ie.fromJSON(xA.undo.selection),scrollIntoView:!0}),!0):(S()(xA),!1)}function gn(){if(n())return!1;Do();var xA=g().redo();return Z("redo",xA),aZ(xA)?(iA.dispatch({annotations:NA.of("redo"),changes:Pr.fromJSON(xA.redo.changes),selection:Ie.fromJSON(xA.redo.selection),scrollIntoView:!0}),!0):(b()(xA),!1)}function hn(){N(rA,!0),Bi(s(),!0,!0)}function Ke(){v()(Da.tree)}function nn(){Yo()}function Si(xA){Z("select validation error",xA);var{from:Ae,to:De}=Kt(xA);Ae!==void 0&&De!==void 0&&(Li(Ae,De),he())}function Li(xA,Ae){Z("setSelection",{anchor:xA,head:Ae}),iA&&iA.dispatch(iA.state.update({selection:{anchor:xA,head:Ae},scrollIntoView:!0}))}function Zi(xA,Ae){if(Ae.state.selection.ranges.length===1){var De=Ae.state.selection.ranges[0],mA=c(ee).slice(De.from,De.to);if(mA==="{"||mA==="["){var FA=mR.default.parse(c(ee)),le=Object.keys(FA.pointers).find(nt=>{var rt;return((rt=FA.pointers[nt].value)===null||rt===void 0?void 0:rt.pos)===De.from}),Ne=FA.pointers[le];le&&Ne&&Ne.value&&Ne.valueEnd&&(Z("pointer found, selecting inner contents of path:",le,Ne),Li(Ne.value.pos+1,Ne.valueEnd.pos-1))}}}function bt(){return RV(cn,{delay:300})}function on(){return!!c(AA)&&getComputedStyle(c(AA)).getPropertyValue("--jse-theme").includes("dark")}function Kt(xA){var{path:Ae,message:De,severity:mA}=xA,{line:FA,column:le,from:Ne,to:nt}=y_(c(A).escapeValue(c(ee)),Ae);return{path:Ae,line:FA,column:le,from:Ne,to:nt,message:De,severity:mA,actions:[]}}function G(xA,Ae){var{line:De,column:mA,position:FA,message:le}=xA;return{path:[],line:De,column:mA,from:FA,to:FA,severity:Qc.error,message:le,actions:Ae&&!n()?[{name:"Auto repair",apply:()=>OA()}]:void 0}}function dt(xA){return{from:xA.from||0,to:xA.to||0,message:xA.message||"",actions:xA.actions,severity:xA.severity}}function Bi(xA,Ae,De){var mA=eR(xA,C(),h()),FA=!Mi(xA,DA),le=DA;Z("setCodeMirrorContent",{isChanged:FA,emitChange:Ae,forceUpdate:De}),iA&&(FA||De)&&(DA=xA,N(ee,mA),yo(c(ee),c(rA))||iA.dispatch({changes:{from:0,to:iA.state.doc.length,insert:c(A).escapeValue(c(ee))}}),HA(),FA&&Ae&&Ba(DA,le))}function Qn(xA){return N_(xA)?Ie.fromJSON(xA):void 0}function un(){return Vn.apply(this,arguments)}function Vn(){return Vn=zt(function*(){Z("refresh"),yield(function(){return Bo.apply(this,arguments)})()}),Vn.apply(this,arguments)}function Yo(){if(iA){var xA=iA?c(A).unescapeValue(iA.state.doc.toString()):"",Ae=xA!==c(ee);if(Z("onChangeCodeMirrorValue",{isChanged:Ae}),Ae){var De=DA;N(ee,xA),DA={text:c(ee)},HA(),Ba(DA,De),Ro(),Xo()}}}function Bo(){return(Bo=zt(function*(){if(Ro(),iA){var xA=on();return Z("updateTheme",{dark:xA}),iA.dispatch({effects:[XA.reconfigure(gi.theme({},{dark:xA}))]}),new Promise(Ae=>setTimeout(Ae))}return Promise.resolve()})).apply(this,arguments)}function No(xA){var Ae=ed.of(typeof xA=="number"?" ".repeat(xA):xA);return xA===" "?[Ae]:[Ae,k5A]}qR({onMount:As,onDestroy:Dg,getWindow:()=>Xf(c(IA)),hasFocus:()=>sA&&document.hasFocus()||RR(c(IA)),onFocus:F(),onBlur:()=>{Do(),z()()}});var Zo=ME(Yo,300);function Do(){Zo.flush()}function Ba(xA,Ae){m()&&m()(xA,Ae,{contentErrors:fn(),patchResult:void 0})}function Xo(){k()(ra(c(aA).selection))}function ra(xA){return Me({type:oo.text},xA.toJSON())}function yo(xA,Ae){return!!xA&&xA.length>S_&&!Ae}var ge=BA(x_,!0),mi=BA(void 0,!0);function cn(){if(yo(c(ee),c(rA)))return[];var xA=fn();if(oZ(xA)){var{parseError:Ae,isRepairable:De}=xA;return[dt(G(Ae,De))]}return i6A(xA)?xA.validationErrors.map(Kt).map(dt):[]}function fn(){Z("validate:start"),Do();var xA=Ho(c(A).escapeValue(c(ee)),E(),h(),f());return oZ(xA)?(N(ge,xA.isRepairable?AZ:"invalid"),N(mi,xA.parseError),N(UA,[])):(N(ge,x_),N(mi,void 0),N(UA,xA?.validationErrors||[])),Z("validate:end"),xA}var Ho=xE(y8A);function ya(){c(mi)&&(function(xA){Z("select parse error",xA);var Ae=G(xA,!1);Li(Ae.from!=null?Ae.from:0,Ae.to!=null?Ae.to:0),he()})(c(mi))}var _i={icon:Qz,text:"Show me",title:"Move to the parse error location",onClick:ya};KA(()=>K(d()),()=>{N(A,xR({escapeControlCharacters:!1,escapeUnicodeCharacters:d()}))}),KA(()=>K(s()),()=>{Bi(s(),!1,!1)}),KA(()=>K(l()),()=>{(function(xA){if(N_(xA)){var Ae=Qn(xA);!iA||!Ae||c(aA)&&c(aA).selection.eq(Ae)||(Z("applyExternalSelection",Ae),iA.dispatch({selection:Ae}))}})(l())}),KA(()=>K(E()),()=>{(function(xA){Z("updateLinter",xA),iA&&iA.dispatch({effects:Ue.reconfigure(bt())})})(E())}),KA(()=>K(C()),()=>{(function(xA){iA&&(Z("updateIndentation",xA),iA.dispatch({effects:YA.reconfigure(No(xA))}))})(C())}),KA(()=>K(I()),()=>{(function(xA){iA&&(Z("updateTabSize",xA),iA.dispatch({effects:fA.reconfigure(qa.tabSize.of(xA))}))})(I())}),KA(()=>K(n()),()=>{(function(xA){iA&&(Z("updateReadOnly",xA),iA.dispatch({effects:[_e.reconfigure(qa.readOnly.of(xA))]}))})(n())}),KA(()=>(c(vA),K(d())),()=>{c(vA)!==d()&&(N(vA,d()),Z("forceUpdateText",{escapeUnicodeCharacters:d()}),iA&&iA.dispatch({changes:{from:0,to:iA.state.doc.length,insert:c(A).escapeValue(c(ee))}}))}),KA(()=>(c(ge),K(n()),CC),()=>{N(i,c(ge)!==AZ||n()?[_i]:[{icon:CC,text:"Auto repair",title:"Automatically repair JSON",onClick:OA},_i])}),Rn();var Eo={focus:he,collapse:Ot,expand:j,patch:TA,handlePatch:de,openTransformModal:tt,refresh:un,flush:Do,validate:fn};ni(!0);var Za,vo=L5A(),Ta=dA(vo),Jn=xA=>{var Ae=it(()=>(c(ee),wA(()=>c(ee).length===0))),De=it(()=>!c(Ae)),mA=it(()=>!c(Ae)),FA=it(()=>!c(Ae)),le=it(()=>!c(Ae)),Ne=it(()=>!c(Ae)),nt=it(()=>!c(Ae));(function(rt,xt){Nt(xt,!1);var On=BA(void 0,!0),Ti=L(xt,"readOnly",9,!1),zi=L(xt,"onExpandAll",9),Xt=L(xt,"onCollapseAll",9),Ji=L(xt,"onFormat",9),va=L(xt,"onCompact",9),Ut=L(xt,"onSort",9),st=L(xt,"onTransform",9),Oi=L(xt,"onToggleSearch",9),Xi=L(xt,"onUndo",9),Wn=L(xt,"onRedo",9),pn=L(xt,"canExpandAll",9),_t=L(xt,"canCollapseAll",9),sa=L(xt,"canUndo",9),zo=L(xt,"canRedo",9),D=L(xt,"canFormat",9),M=L(xt,"canCompact",9),R=L(xt,"canSort",9),V=L(xt,"canTransform",9),_=L(xt,"onRenderMenu",9),q=BA(void 0,!0),nA=BA(void 0,!0),cA={type:"button",icon:m4,title:"Search (Ctrl+F)",className:"jse-search",onClick:Oi()},MA=BA(void 0,!0);KA(()=>(K(zi()),K(pn())),()=>{N(q,{type:"button",icon:K$,title:"Expand all",className:"jse-expand-all",onClick:zi(),disabled:!pn()})}),KA(()=>(K(Xt()),K(_t())),()=>{N(nA,{type:"button",icon:U$,title:"Collapse all",className:"jse-collapse-all",onClick:Xt(),disabled:!_t()})}),KA(()=>(K(Ti()),c(q),c(nA),K(Ji()),K(D()),K(va()),K(M()),K(Ut()),K(R()),K(st()),K(V()),K(Xi()),K(sa()),K(Wn()),K(zo())),()=>{N(MA,Ti()?[c(q),c(nA),{type:"separator"},cA,{type:"space"}]:[c(q),c(nA),{type:"separator"},{type:"button",icon:FZ,title:"Format JSON: add proper indentation and new lines (Ctrl+I)",className:"jse-format",onClick:Ji(),disabled:Ti()||!D()},{type:"button",icon:bwA,title:"Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)",className:"jse-compact",onClick:va(),disabled:Ti()||!M()},{type:"separator"},{type:"button",icon:y4,title:"Sort",className:"jse-sort",onClick:Ut(),disabled:Ti()||!R()},{type:"button",icon:p4,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:st(),disabled:Ti()||!V()},cA,{type:"separator"},{type:"button",icon:Y8,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Xi(),disabled:!sa()},{type:"button",icon:O8,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Wn(),disabled:!zo()},{type:"space"}])}),KA(()=>(K(_()),c(MA)),()=>{N(On,_()(c(MA))||c(MA))}),Rn(),ni(!0),KD(rt,{get items(){return c(On)}}),Ft()})(xA,{get readOnly(){return n()},onExpandAll:$,onCollapseAll:oA,onFormat:Qe,onCompact:GA,onSort:ht,onTransform:ze,onToggleSearch:Te,onUndo:ci,onRedo:gn,get canExpandAll(){return c(De)},get canCollapseAll(){return c(mA)},get canFormat(){return c(FA)},get canCompact(){return c(le)},get canSort(){return c(Ne)},get canTransform(){return c(nt)},get canUndo(){return K(g()),wA(()=>g().canUndo)},get canRedo(){return K(g()),wA(()=>g().canRedo)},get onRenderMenu(){return P()}})};jA(Ta,xA=>{o()&&xA(Jn)});var Ui=_A(Ta,2),qt=xA=>{var Ae=x5A(),De=_A(dA(Ae),2),mA=dA(De),FA=_A(De,2);Se(()=>mg(mA,"width: ".concat(c(pA)>0?c(zA)/c(pA)*100:0,"%"))),fe("click",FA,oi),CA(xA,Ae)};jA(Ui,xA=>{c($A)&&xA(qt)});var Nn=_A(Ui,2),ho=xA=>{var Ae,De=it(()=>(c(ee),c(rA),wA(()=>yo(c(ee),c(rA))))),mA=N5A(),FA=et(mA);Oo(FA,xt=>N(AA,xt),()=>c(AA));var le=_A(FA,2),Ne=xt=>{var On=_5A(),Ti=et(On),zi=it(()=>(K(iD),K(S_),c(ee),wA(()=>"The JSON document is larger than ".concat(iD(S_),", ")+"and may crash your browser when loading it in text mode. Actual size: ".concat(iD(c(ee).length),"."))));Yl(Ti,{get icon(){return z2},type:"error",get message(){return c(zi)},actions:[{text:"Open anyway",title:"Open the document in text mode. This may freeze or crash your browser.",onClick:hn},{text:"Open in tree mode",title:"Open the document in tree mode. Tree mode can handle large documents.",onClick:Ke},{text:"Cancel",title:"Cancel opening this large document.",onClick:nn}],onClose:he});var Xt=dA(_A(Ti,2));Se(Ji=>Lt(Xt,Ji),[()=>(K(SC),c(ee),K(cD),wA(()=>SC(c(ee)||"",cD)))]),CA(xt,On)};jA(le,xt=>{c(De)&&xt(Ne)});var nt=_A(le,2),rt=xt=>{var On=R5A(),Ti=et(On),zi=st=>{(function(Oi,Xi){Nt(Xi,!1);var Wn=L(Xi,"editorState",8),pn=BA(),_t=BA(),sa=BA(),zo=BA(),D=BA();KA(()=>K(Wn()),()=>{var MA;N(pn,(MA=Wn())===null||MA===void 0||(MA=MA.selection)===null||MA===void 0||(MA=MA.main)===null||MA===void 0?void 0:MA.head)}),KA(()=>(c(pn),K(Wn())),()=>{var MA;N(_t,c(pn)!==void 0?(MA=Wn())===null||MA===void 0||(MA=MA.doc)===null||MA===void 0?void 0:MA.lineAt(c(pn)):void 0)}),KA(()=>c(_t),()=>{N(sa,c(_t)!==void 0?c(_t).number:void 0)}),KA(()=>(c(_t),c(pn)),()=>{N(zo,c(_t)!==void 0&&c(pn)!==void 0?c(pn)-c(_t).from+1:void 0)}),KA(()=>K(Wn()),()=>{var MA;N(D,(MA=Wn())===null||MA===void 0||(MA=MA.selection)===null||MA===void 0||(MA=MA.ranges)===null||MA===void 0?void 0:MA.reduce((ne,se)=>ne+se.to-se.from,0))}),Rn(),ni();var M=b5A(),R=dA(M),V=MA=>{var ne=D5A(),se=dA(ne);Se(()=>{var Ee;return Lt(se,"Line: ".concat((Ee=c(sa))!==null&&Ee!==void 0?Ee:""))}),CA(MA,ne)};jA(R,MA=>{c(sa)!==void 0&&MA(V)});var _=_A(R,2),q=MA=>{var ne=y5A(),se=dA(ne);Se(()=>{var Ee;return Lt(se,"Column: ".concat((Ee=c(zo))!==null&&Ee!==void 0?Ee:""))}),CA(MA,ne)};jA(_,MA=>{c(zo)!==void 0&&MA(q)});var nA=_A(_,2),cA=MA=>{var ne=v5A(),se=dA(ne);Se(()=>{var Ee;return Lt(se,"Selection: ".concat((Ee=c(D))!==null&&Ee!==void 0?Ee:""," characters"))}),CA(MA,ne)};jA(nA,MA=>{c(D)!==void 0&&c(D)>0&&MA(cA)}),CA(Oi,M),Ft()})(st,{get editorState(){return c(aA)}})};jA(Ti,st=>{a()&&st(zi)});var Xt=_A(Ti,2),Ji=st=>{Yl(st,{type:"error",get icon(){return z2},get message(){return c(mi),wA(()=>c(mi).message)},get actions(){return c(i)},onClick:ya,onClose:he})};jA(Xt,st=>{c(mi)&&st(Ji)});var va=_A(Xt,2),Ut=st=>{var Oi=it(()=>[{icon:FZ,text:"Format",title:"Format JSON: add proper indentation and new lines (Ctrl+I)",onClick:Qe},{icon:D4,text:"No thanks",title:"Close this message",onClick:()=>N(uA,!1)}]);Yl(st,{type:"success",message:"Do you want to format the JSON?",get actions(){return c(Oi)},onClose:he})};jA(va,st=>{c(mi),c(uA),K(XW),c(ee),wA(()=>!c(mi)&&c(uA)&&XW(c(ee)))&&st(Ut)}),VR(_A(va,2),{get validationErrors(){return c(UA)},selectError:Si}),CA(xt,On)};jA(nt,xt=>{c(De)||xt(rt)}),Se(()=>Ae=ii(FA,1,"jse-contents svelte-k2b9e6",null,Ae,{"jse-hidden":c(De)})),CA(xA,mA)},Fo=xA=>{CA(xA,F5A())};return jA(Nn,xA=>{X?xA(Fo,!1):xA(ho)}),Oo(vo,xA=>N(IA,xA),()=>c(IA)),Se(()=>Za=ii(vo,1,"jse-text-mode svelte-k2b9e6",null,Za,{"no-main-menu":!o()})),CA(t,vo),jt(e,"focus",he),jt(e,"collapse",Ot),jt(e,"expand",j),jt(e,"patch",TA),jt(e,"handlePatch",de),jt(e,"openTransformModal",tt),jt(e,"refresh",un),jt(e,"flush",Do),jt(e,"validate",fn),Ft(Eo)}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-inline-value.svelte-1jv89ui { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + line-height: var(--jse-line-height, calc(1em + 4px)); + border: none; + padding: 0 calc(0.5 * var(--jse-padding, 10px)); + background: transparent; + color: inherit; + cursor: inherit; +} +.jse-inline-value.jse-highlight.svelte-1jv89ui { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-inline-value.jse-highlight.jse-active.svelte-1jv89ui { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +}`);var K5A=JA('');Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-column-header.svelte-5pxwfq { + background: none; + border: none; + font-family: inherit; + font-size: inherit; + color: inherit; + display: flex; + gap: var(--jse-padding, 10px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); + width: 100%; +} +.jse-column-header.svelte-5pxwfq:hover { + background: var(--jse-table-header-background-highlight, #e8e8e8); +} +.jse-column-header.svelte-5pxwfq:not(.jse-column-header.jse-readonly) { + cursor: pointer; +} +.jse-column-header.svelte-5pxwfq span.jse-column-sort-icon:where(.svelte-5pxwfq) { + height: 1em; +}`);var U5A=JA(''),T5A=JA('');Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-table-mode-welcome.svelte-1b9gnk8 { + flex: 1; + display: flex; + flex-direction: column; + overflow: auto; + align-items: center; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode-welcome.svelte-1b9gnk8:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-before:where(.svelte-1b9gnk8) { + flex: 1; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) { + display: flex; + flex-direction: column; + gap: var(--jse-padding, 10px); + max-width: 400px; + margin: 2em var(--jse-padding, 10px); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-arrays-info:where(.svelte-1b9gnk8) { + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) { + display: flex; + align-items: center; + gap: var(--jse-padding, 10px); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) { + flex: 1; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) .jse-nested-property-count:where(.svelte-1b9gnk8) { + opacity: 0.5; + white-space: nowrap; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8) { + text-align: left; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-after:where(.svelte-1b9gnk8) { + flex: 2; +}`);var J5A=JA(`An empty document cannot be opened in table mode. You can go to tree mode instead, or paste + a JSON Array using Ctrl+V.`,1),O5A=JA(''),Y5A=JA('
      '),H5A=JA('
      ');function z5A(t,e){Nt(e,!0);var A=Il(()=>e.json?(function(E){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,m=[];return(function v(k,S){ia(k)&&S.length{v(k[b],S.concat(b))}),Vo(k)&&m.push(S)})(E,[]),m})(e.json).slice(0,99).filter(E=>E.length>0):[]),i=Il(()=>!en(c(A))),n=Il(()=>e.json===void 0&&(e.text===""||e.text===void 0)),o=Il(()=>c(i)?"Object with nested arrays":c(n)?"An empty document":ia(e.json)?"An object":Vo(e.json)?"An empty array":"A ".concat(kR(e.json,e.parser))),a=H5A();a.__click=()=>e.onClick();var r=_A(dA(a),2),s=dA(r),l=dA(s),g=_A(s,2),C=dA(g),I=E=>{CA(E,dr(`An object cannot be opened in table mode. You can open a nested array instead, or open the + document in tree mode.`))},d=E=>{var f=Fi(),m=et(f),v=S=>{CA(S,J5A())},k=S=>{var b=dr();Se(()=>{var x;return Lt(b,"".concat((x=c(o))!==null&&x!==void 0?x:""," cannot be opened in table mode. You can open the document in tree mode instead."))}),CA(S,b)};jA(m,S=>{c(n)&&!e.readOnly?S(v):S(k,!1)},!0),CA(E,f)};jA(C,E=>{c(i)?E(I):E(d,!1)});var h=_A(g,2);da(h,17,()=>c(A),ka,(E,f)=>{var m=Il(()=>(function(W){return Xe(e.json,W).length})(c(f))),v=Y5A(),k=dA(v),S=dA(k),b=dA(_A(S)),x=_A(k,2);x.__click=()=>e.openJSONEditorModal(c(f));var F=dA(x),z=_A(x,2),P=W=>{var eA=O5A();eA.__click=()=>e.extractPath(c(f)),CA(W,eA)};jA(z,W=>{e.readOnly||W(P)}),Se(W=>{var eA;Lt(S,'"'.concat(W??"",'" ')),Lt(b,"(".concat((eA=c(m))!==null&&eA!==void 0?eA:""," ").concat(c(m)!==1?"items":"item",")")),Lt(F,e.readOnly?"View":"Edit")},[()=>Bl(c(f))]),CA(E,v)}),_A(h,2).__click=()=>e.onChangeMode(Da.tree),Se(()=>Lt(l,c(o))),CA(t,a),Ft()}Vf(["click"]);Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-column-header.svelte-1wgrwv3 { + background: none; + border: none; + font-family: inherit; + font-size: inherit; + color: inherit; + display: flex; + gap: var(--jse-padding, 10px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); + width: 100%; +} +.jse-column-header.svelte-1wgrwv3:hover { + background: var(--jse-table-header-background-highlight, #e8e8e8); +} +.jse-column-header.svelte-1wgrwv3:not(.jse-column-header.jse-readonly) { + cursor: pointer; +}`);var P5A=JA('');Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-table-mode.svelte-1p86y3c { + flex: 1; + display: flex; + flex-direction: column; + position: relative; + background: var(--jse-background-color, #fff); + min-width: 0; + min-height: 0; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-text-color, #4d4d4d); + line-height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-table-mode.no-main-menu.svelte-1p86y3c { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-search-box-container:where(.svelte-1p86y3c) { + position: relative; + height: 0; + top: calc(var(--jse-line-height, calc(1em + 4px)) + 2 * var(--jse-padding, 10px)); + margin-right: calc(var(--jse-padding, 10px) + 20px); + margin-left: var(--jse-padding, 10px); + text-align: right; + z-index: 3; +} +.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) { + position: fixed; + right: 0; + top: 0; + width: 0; + height: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) .jse-hidden-input:where(.svelte-1p86y3c) { + width: 0; + height: 0; + padding: 0; + border: 0; + outline: none; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) { + flex: 1; + align-items: flex-start; + flex-direction: column; + display: flex; + overflow: auto; + overflow-anchor: none; + scrollbar-gutter: stable; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) { + border-collapse: collapse; + border-spacing: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-start-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c), +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { + margin: 0; + padding: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-search-box-background:where(.svelte-1p86y3c) { + background: var(--jse-table-header-background, #f5f5f5); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { + padding-bottom: var(--jse-padding, 10px); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c):hover { + background-color: var(--jse-table-row-odd-background, rgba(0, 0, 0, 0.05)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) { + padding: 0 var(--jse-padding, 10px) 0 0; + vertical-align: top; + white-space: nowrap; + height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c), .jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { + font-weight: normal; + text-align: left; + color: var(--jse-text-readonly, #8d8d8d); + background: var(--jse-table-header-background, #f5f5f5); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) { + padding: 0; + position: sticky; + top: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) .jse-table-root-error:where(.svelte-1p86y3c) { + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { + padding: 0 var(--jse-padding, 10px) 0 calc(0.5 * var(--jse-padding, 10px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c) { + display: inline-block; + cursor: var(--jse-contents-cursor, pointer); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c):hover { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer.jse-selected-value:where(.svelte-1p86y3c) { + background: var(--jse-selection-background-color, #d3d3d3); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-context-menu-anchor:where(.svelte-1p86y3c) { + display: inline-flex; + position: relative; + vertical-align: top; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) { + align-items: unset; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading-space:where(.svelte-1p86y3c) { + flex: 1; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading:where(.svelte-1p86y3c) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +}`);var j5A=JA('
      '),q5A=JA(''),V5A=JA(''),W5A=JA(' '),Z5A=JA('
      '),X5A=JA('
      '),$5A=JA(''),ADA=JA(''),eDA=JA('
      ',1),tDA=JA(" ",1),iDA=JA(' ',1),nDA=JA('
      loading...
      '),oDA=JA('
      ',1);function aDA(t,e){Nt(e,!1);var A=BA(void 0,!0),i=BA(void 0,!0),n=BA(void 0,!0),o=or("jsoneditor:TableMode"),{openAbsolutePopup:a,closeAbsolutePopup:r}=kI("absolute-popup"),s=R$(),l=Y2(),g=Y2(),C=typeof window>"u";o("isSSR:",C);var I=L(e,"readOnly",9),d=L(e,"externalContent",9),h=L(e,"externalSelection",9),E=L(e,"history",9),f=L(e,"truncateTextSize",9),m=L(e,"mainMenuBar",9),v=L(e,"escapeControlCharacters",9),k=L(e,"escapeUnicodeCharacters",9),S=L(e,"flattenColumns",9),b=L(e,"parser",9),x=L(e,"parseMemoizeOne",9),F=L(e,"validator",9),z=L(e,"validationParser",9),P=L(e,"indentation",9),W=L(e,"onChange",9),eA=L(e,"onChangeMode",9),Z=L(e,"onSelect",9),EA=L(e,"onUndo",9),X=L(e,"onRedo",9),iA=L(e,"onRenderValue",9),AA=L(e,"onRenderMenu",9),IA=L(e,"onRenderContextMenu",9),aA=L(e,"onFocus",9),rA=L(e,"onBlur",9),uA=L(e,"onSortModal",9),UA=L(e,"onTransformModal",9),$A=L(e,"onJSONEditorModal",9),zA=BA(void 0,!0),pA=BA(void 0,!0),PA=BA(void 0,!0),Ue=BA(void 0,!0),_e=BA(void 0,!0);qR({onMount:As,onDestroy:Dg,getWindow:()=>Xf(c(pA)),hasFocus:()=>xe&&document.hasFocus()||RR(c(pA)),onFocus:()=>{oi=!0,aA()&&aA()()},onBlur:()=>{oi=!1,rA()&&rA()()}});var YA,fA=BA(void 0,!0),XA=BA(void 0,!0),DA=BA(void 0,!0),ee=BA(void 0,!0),NA=BA(void 0,!0),ke=BA(void 0,!0),HA=BA(!1,!0),vA=BA(!1,!0);function Gt(_){N(ke,(YA=_)?f$(c(fA),YA.items):void 0)}function ft(_){return he.apply(this,arguments)}function he(){return(he=zt(function*(_){N(OA,void 0),yield un(_)})).apply(this,arguments)}function Ot(){N(HA,!1),N(vA,!1),G()}var He=BA(1e4,!0),je=BA([],!0),pt=BA(void 0,!0),xe=!1,oi=!1,j=BA(!1,!0),$=BA({},!0),oA=BA(600,!0),sA=BA(0,!0),TA=18;function de(_){N(OA,_)}function Qe(_){c(OA)&&_!==void 0&&(vr(_,hd(c(OA)))&&vr(_,It(c(OA)))||(o("clearing selection: path does not exist anymore",c(OA)),N(OA,void 0)))}var GA=BA(c(fA)!==void 0?oR({json:c(fA)}):void 0,!0),OA=BA(Kf(h())?h():void 0,!0),ht=BA(void 0,!0),tt=BA(!1,!0);function ze(_){if(!I()){o("onSortByHeader",_);var q=_.sortDirection===ug.desc?-1:1;Li(T$(c(fA),[],_.path,q),(nA,cA)=>({state:cA,sortedColumn:_}))}}As(()=>{c(OA)&&Yo(It(c(OA)))});var Te=BA(void 0,!0);function ci(_){if(_.json!==void 0||_.text!==void 0){var q=c(fA)!==void 0&&_.json!==void 0;E().add({type:"tree",undo:{patch:q?[{op:"replace",path:"",value:_.json}]:void 0,json:_.json,text:_.text,documentState:_.documentState,textIsRepaired:_.textIsRepaired,selection:D0(_.selection),sortedColumn:_.sortedColumn},redo:{patch:q?[{op:"replace",path:"",value:c(fA)}]:void 0,json:c(fA),text:c(XA),documentState:c(GA),textIsRepaired:c(tt),selection:D0(c(OA)),sortedColumn:c(ht)}})}}var gn=BA([],!0),hn=xE(N$);function Ke(_,q,nA,cA){vh(()=>{var MA;try{MA=hn(_,q,nA,cA)}catch(ne){MA=[{path:[],message:"Failed to validate: "+ne.message,severity:Qc.warning}]}Mi(MA,c(gn))||(o("validationErrors changed:",MA),N(gn,MA))},MA=>o("validationErrors updated in ".concat(MA," ms")))}function nn(){return o("validate"),c(DA)?{parseError:c(DA),isRepairable:!1}:(Ke(c(fA),F(),b(),z()),en(c(gn))?void 0:{validationErrors:c(gn)})}function Si(_,q){if(o("patch",_,q),c(fA)===void 0)throw new Error("Cannot apply patch: no JSON");var nA=c(fA),cA={json:void 0,text:c(XA),documentState:c(GA),selection:D0(c(OA)),sortedColumn:c(ht),textIsRepaired:c(tt)},MA=u$(c(fA),_),ne=r$(c(fA),c(GA),_),se=WwA(c(ht),_,c(je)),Ee=typeof q=="function"?q(ne.json,ne.documentState,c(OA)):void 0;return N(fA,Ee?.json!==void 0?Ee.json:ne.json),N(GA,Ee?.state!==void 0?Ee.state:ne.documentState),N(OA,Ee?.selection!==void 0?Ee.selection:c(OA)),N(ht,Ee?.sortedColumn!==void 0?Ee.sortedColumn:se),N(XA,void 0),N(tt,!1),N(ee,void 0),N(NA,void 0),N(DA,void 0),E().add({type:"tree",undo:Me({patch:MA},cA),redo:{patch:_,json:void 0,text:void 0,documentState:c(GA),selection:D0(c(OA)),sortedColumn:c(ht),textIsRepaired:c(tt)}}),{json:c(fA),previousJson:nA,undo:MA,redo:_}}function Li(_,q){o("handlePatch",_,q);var nA={json:c(fA),text:c(XA)},cA=Si(_,q);return Zi(nA,cA),cA}function Zi(_,q){if((_.json!==void 0||_?.text!==void 0)&&W()){if(c(XA)!==void 0){var nA={text:c(XA),json:void 0};W()(nA,_,{contentErrors:nn(),patchResult:q})}else if(c(fA)!==void 0){var cA={text:void 0,json:c(fA)};W()(cA,_,{contentErrors:nn(),patchResult:q})}}}function bt(_){o("pasted json as text",_),N(ee,_)}function on(_){o("pasted multiline text",{pastedText:_}),N(NA,_)}function Kt(_){var q=parseInt(_[0],10),nA=[String(q+1),..._.slice(1)];return vr(c(fA),nA)?Hi(nA):Hi(_)}function G(){o("focus"),c(Ue)&&(c(Ue).focus(),c(Ue).select())}function dt(_){N(sA,_.target.scrollTop)}function Bi(){c(OA)||N(OA,(function(){if(Vo(c(fA))&&!en(c(fA))&&!en(c(je)))return Hi(["0",...c(je)[0]])})())}function Qn(){if(c(tt)&&c(fA)!==void 0){var _={json:c(fA),text:c(XA)},q={json:c(fA),documentState:c(GA),selection:c(OA),sortedColumn:c(ht),text:c(XA),textIsRepaired:c(tt)};N(XA,void 0),N(tt,!1),Qe(c(fA)),ci(q),Zi(_,void 0)}return{json:c(fA),text:c(XA)}}function un(_){var{scrollToWhenVisible:q=!0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},nA=c(HA)?vf:0,cA=GZ(_,c(je),$,TA),MA=cA-c(sA)+nA+TA,ne=Bo(_);if(o("scrollTo",{path:_,top:cA,scrollTop:c(sA),elem:ne}),!c(PA))return Promise.resolve();var se=c(PA).getBoundingClientRect();if(ne&&!q){var Ee=ne.getBoundingClientRect();if(Ee.bottom>se.top&&Ee.top{s(ne,{container:c(PA),offset:Pe,duration:300,callback:()=>{Vn(_),Re()}})}:Re=>{s(MA,{container:c(PA),offset:Pe,duration:300,callback:()=>{Ro(),Vn(_),Re()}})})}function Vn(_){var q=Bo(_);if(q&&c(PA)){var nA=c(PA).getBoundingClientRect(),cA=q.getBoundingClientRect();if(cA.right>nA.right){var MA=cA.right-nA.right;Tl(PA,c(PA).scrollLeft+=MA)}if(cA.leftPe){var Re=MA-Pe;Tl(PA,c(PA).scrollTop+=Re)}if(cAk0(_.slice(1),ne)),MA=cA?_.slice(0,1).concat(cA):_;return(q=(nA=c(PA))===null||nA===void 0?void 0:nA.querySelector('td[data-path="'.concat(eD(MA),'"]')))!==null&&q!==void 0?q:void 0}function No(_){var q,{anchor:nA,left:cA,top:MA,width:ne,height:se,offsetTop:Ee,offsetLeft:Pe,showTip:Re}=_,Le=(function(yA){var{json:WA,documentState:Ge,selection:ye,readOnly:be,onEditValue:ot,onEditRow:Vt,onToggleEnforceString:Gi,onCut:Fn,onCopy:$i,onPaste:Qo,onRemove:$t,onDuplicateRow:$o,onInsertBeforeRow:Zn,onInsertAfterRow:Aa,onRemoveRow:mn}=yA,Tt=WA!==void 0,an=!!ye,Ai=WA!==void 0&&ye?Xe(WA,It(ye)):void 0,yt=Tt&&(Co(ye)||nr(ye)||En(ye)),Ci=!be&&Tt&&ye!==void 0&&dD(ye),la=Ci&&!aa(Ai),Xn=!be&&yt,ea=ye!==void 0&&v0(WA,Ge,It(ye));return[{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"label",text:"Table cell:"},{type:"dropdown-button",main:{type:"button",onClick:()=>ot(),icon:F1,text:"Edit",title:"Edit the value (Double-click on the value)",disabled:!Ci},width:"11em",items:[{type:"button",icon:F1,text:"Edit",title:"Edit the value (Double-click on the value)",onClick:()=>ot(),disabled:!Ci},{type:"button",icon:ea?X9:eS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>Gi(),disabled:!la}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Fn(!0),icon:L1,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!Xn},width:"10em",items:[{type:"button",icon:L1,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>Fn(!0),disabled:be||!yt},{type:"button",icon:L1,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>Fn(!1),disabled:be||!yt}]},{type:"dropdown-button",main:{type:"button",onClick:()=>$i(!0),icon:IC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!yt},width:"12em",items:[{type:"button",icon:IC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>$i(!1),disabled:!yt},{type:"button",icon:IC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>$i(!1),disabled:!yt}]},{type:"button",onClick:()=>Qo(),icon:V9,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:be||!an},{type:"button",onClick:()=>$t(),icon:T8,text:"Remove",title:"Remove selected contents (Delete)",disabled:be||!yt}]},{type:"column",items:[{type:"label",text:"Table row:"},{type:"button",onClick:()=>Vt(),icon:F1,text:"Edit row",title:"Edit the current row",disabled:be||!an||!Tt},{type:"button",onClick:()=>$o(),icon:Z9,text:"Duplicate row",title:"Duplicate the current row (Ctrl+D)",disabled:be||!an||!Tt},{type:"button",onClick:()=>Zn(),icon:G1,text:"Insert before",title:"Insert a row before the current row",disabled:be||!an||!Tt},{type:"button",onClick:()=>Aa(),icon:G1,text:"Insert after",title:"Insert a row after the current row",disabled:be||!an||!Tt},{type:"button",onClick:()=>mn(),icon:T8,text:"Remove row",title:"Remove current row",disabled:be||!an||!Tt}]}]}]})({json:c(fA),documentState:c(GA),selection:c(OA),readOnly:I(),onEditValue:Ba,onEditRow:Xo,onToggleEnforceString:ra,onCut:Za,onCopy:Ta,onPaste:mi,onRemove:Ui,onDuplicateRow:Nn,onInsertBeforeRow:ho,onInsertAfterRow:Fo,onRemoveRow:xA}),ai=(q=IA()(Le))!==null&&q!==void 0?q:Le;if(ai!==!1){var Yn={left:cA,top:MA,offsetTop:Ee,offsetLeft:Pe,width:ne,height:se,anchor:nA,closeOnOuterClick:!0,onClose:()=>{xe=!1,G()}};xe=!0;var tA=a(W$,{tip:Re?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:ai,onRequestClose(){r(tA),G()}},Yn)}}function Zo(_){if(!tr(c(OA)))if(_&&(_.stopPropagation(),_.preventDefault()),_&&_.type==="contextmenu"&&_.target!==c(Ue))No({left:_.clientX,top:_.clientY,width:xC,height:kC,showTip:!1});else{var q,nA=(q=c(PA))===null||q===void 0?void 0:q.querySelector(".jse-table-cell.jse-selected-value");if(nA)No({anchor:nA,offsetTop:2,width:xC,height:kC,showTip:!1});else{var cA,MA=(cA=c(PA))===null||cA===void 0?void 0:cA.getBoundingClientRect();MA&&No({top:MA.top+2,left:MA.left+2,width:xC,height:kC,showTip:!1})}}}function Do(_){No({anchor:t$(_.target,"BUTTON"),offsetTop:0,width:xC,height:kC,showTip:!0})}function Ba(){if(!I()&&c(OA)){var _=It(c(OA));aa(Xe(c(fA),_))?rt(_):N(OA,Hi(_))}}function Xo(){!I()&&c(OA)&&rt(It(c(OA)).slice(0,1))}function ra(){if(!I()&&En(c(OA))){var _=c(OA).path,q=vt(_),nA=Xe(c(fA),_),cA=!v0(c(fA),c(GA),_),MA=cA?String(nA):$h(String(nA),b());o("handleToggleEnforceString",{enforceString:cA,value:nA,updatedValue:MA}),Li([{op:"replace",path:q,value:MA}],(ne,se)=>({state:_D(c(fA),se,_,{type:"value",enforceString:cA})}))}}function yo(){return ge.apply(this,arguments)}function ge(){return(ge=zt(function*(){if(o("apply pasted json",c(ee)),c(ee)){var{onPasteAsJson:_}=c(ee);_(),setTimeout(G)}})).apply(this,arguments)}function mi(){return cn.apply(this,arguments)}function cn(){return(cn=zt(function*(){try{mA(yield navigator.clipboard.readText())}catch(_){console.error(_),N(j,!0)}})).apply(this,arguments)}function fn(){return Ho.apply(this,arguments)}function Ho(){return(Ho=zt(function*(){o("apply pasted multiline text",c(NA)),c(NA)&&(mA(JSON.stringify(c(NA))),setTimeout(G))})).apply(this,arguments)}function ya(){o("clear pasted json"),N(ee,void 0),G()}function _i(){o("clear pasted multiline text"),N(NA,void 0),G()}function Eo(){eA()(Da.text)}function Za(_){return vo.apply(this,arguments)}function vo(){return(vo=zt(function*(_){yield H$({json:c(fA),selection:c(OA),indentation:_?P():void 0,readOnly:I(),parser:b(),onPatch:Li})})).apply(this,arguments)}function Ta(){return Jn.apply(this,arguments)}function Jn(){return Jn=zt(function*(){var _=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(fA)!==void 0&&(yield z$({json:c(fA),selection:c(OA),indentation:_?P():void 0,parser:b()}))}),Jn.apply(this,arguments)}function Ui(){j$({json:c(fA),text:c(XA),selection:c(OA),keepSelection:!0,readOnly:I(),onChange:W(),onPatch:Li})}function qt(_){I()||(o("extract",{path:_}),Li(E$(c(fA),Hi(_))))}function Nn(){(function(_){var{json:q,selection:nA,columns:cA,readOnly:MA,onPatch:ne}=_;if(!MA&&q!==void 0&&nA&&Dh(nA)){var{rowIndex:se,columnIndex:Ee}=hg(It(nA),cA);ps("duplicate row",{rowIndex:se});var Pe=[String(se)];ne(B$(q,[Pe]),(Re,Le)=>({state:Le,selection:Hi(sd({rowIndex:se({state:Yn,selection:Hi(sd({rowIndex:Pe,columnIndex:Ee},cA))}))}})({json:c(fA),selection:c(OA),columns:c(je),readOnly:I(),onPatch:Li})}function xA(){(function(_){var{json:q,selection:nA,columns:cA,readOnly:MA,onPatch:ne}=_;if(!MA&&q!==void 0&&nA&&Dh(nA)){var{rowIndex:se,columnIndex:Ee}=hg(It(nA),cA);ps("remove row",{rowIndex:se}),ne(ED([[String(se)]]),(Pe,Re)=>{var Le=se0?se-1:void 0,ai=Le!==void 0?Hi(sd({rowIndex:Le,columnIndex:Ee},cA)):void 0;return ps("remove row new selection",{rowIndex:se,newRowIndex:Le,newSelection:ai}),{state:Re,selection:ai}})}})({json:c(fA),selection:c(OA),columns:c(je),readOnly:I(),onPatch:Li})}function Ae(){return(Ae=zt(function*(_){yield q$({char:_,selectInside:!1,json:c(fA),selection:c(OA),readOnly:I(),parser:b(),onPatch:Li,onReplaceJson:FA,onSelect:de})})).apply(this,arguments)}function De(_){var q;_.preventDefault(),mA((q=_.clipboardData)===null||q===void 0?void 0:q.getData("text/plain"))}function mA(_){_!==void 0&&P$({clipboardText:_,json:c(fA),selection:c(OA),readOnly:I(),parser:b(),onPatch:Li,onChangeText:le,onPasteMultilineText:on,openRepairModal:xt})}function FA(_,q){var nA={json:c(fA),text:c(XA)},cA={json:c(fA),documentState:c(GA),selection:c(OA),sortedColumn:c(ht),text:c(XA),textIsRepaired:c(tt)},MA=Ul(_,c(GA)),ne=typeof q=="function"?q(_,MA,c(OA)):void 0;N(fA,ne?.json!==void 0?ne.json:_),N(GA,ne?.state!==void 0?ne.state:MA),N(OA,ne?.selection!==void 0?ne.selection:c(OA)),N(ht,void 0),N(XA,void 0),N(tt,!1),N(DA,void 0),Qe(c(fA)),ci(cA),Zi(nA,void 0)}function le(_,q){o("handleChangeText");var nA={json:c(fA),text:c(XA)},cA={json:c(fA),documentState:c(GA),selection:c(OA),sortedColumn:c(ht),text:c(XA),textIsRepaired:c(tt)};try{N(fA,x()(_)),N(GA,Ul(c(fA),c(GA))),N(XA,void 0),N(tt,!1),N(DA,void 0)}catch(ne){try{N(fA,x()(ag(_))),N(GA,Ul(c(fA),c(GA))),N(XA,_),N(tt,!0),N(DA,void 0)}catch(se){N(fA,void 0),N(GA,void 0),N(XA,_),N(tt,!1),N(DA,c(XA)!==""?Th(c(XA),ne.message||String(ne)):void 0)}}if(typeof q=="function"){var MA=q(c(fA),c(GA),c(OA));N(fA,MA?.json!==void 0?MA.json:c(fA)),N(GA,MA?.state!==void 0?MA.state:c(GA)),N(OA,MA?.selection!==void 0?MA.selection:c(OA))}Qe(c(fA)),ci(cA),Zi(nA,void 0)}function Ne(_){o("select validation error",_),N(OA,Hi(_.path)),un(_.path)}function nt(_){if(c(fA)!==void 0){var{id:q,onTransform:nA,onClose:cA}=_,MA=_.rootPath||[];xe=!0,UA()({id:q||g,json:c(fA),rootPath:MA||[],onTransform:ne=>{nA?nA({operations:ne,json:c(fA),transformedJson:tl(c(fA),ne)}):(o("onTransform",MA,ne),Li(ne))},onClose:()=>{xe=!1,setTimeout(G),cA&&cA()}})}}function rt(_){o("openJSONEditorModal",{path:_}),xe=!0,$A()({content:{json:Xe(c(fA),_)},path:_,onPatch:Li,onClose:()=>{xe=!1,setTimeout(G)}})}function xt(_,q){N(_e,{text:_,onParse:nA=>Zf(nA,cA=>Wf(cA,b())),onRepair:jX,onApply:q,onClose:G})}function On(){(function(_){I()||c(fA)===void 0||(xe=!0,uA()({id:l,json:c(fA),rootPath:_,onSort:q=>{var{operations:nA,itemPath:cA,direction:MA}=q;o("onSort",nA,_,cA,MA),Li(nA,(ne,se)=>({state:se,sortedColumn:{path:cA,sortDirection:MA===-1?ug.desc:ug.asc}}))},onClose:()=>{xe=!1,setTimeout(G)}}))})([])}function Ti(){nt({rootPath:[]})}function zi(_){o("openFind",{findAndReplace:_}),N(HA,!1),N(vA,!1),Ro(),N(HA,!0),N(vA,_)}function Xt(){if(!I()&&E().canUndo){var _=E().undo();if(ID(_)){var q={json:c(fA),text:c(XA)};N(fA,_.undo.patch?tl(c(fA),_.undo.patch):_.undo.json),N(GA,_.undo.documentState),N(OA,_.undo.selection),N(ht,_.undo.sortedColumn),N(XA,_.undo.text),N(tt,_.undo.textIsRepaired),N(DA,void 0),o("undo",{item:_,json:c(fA)}),Zi(q,_.undo.patch&&_.redo.patch?{json:c(fA),previousJson:q.json,redo:_.undo.patch,undo:_.redo.patch}:void 0),G(),c(OA)&&un(It(c(OA)),{scrollToWhenVisible:!1})}else EA()(_)}}function Ji(){if(!I()&&E().canRedo){var _=E().redo();if(ID(_)){var q={json:c(fA),text:c(XA)};N(fA,_.redo.patch?tl(c(fA),_.redo.patch):_.redo.json),N(GA,_.redo.documentState),N(OA,_.redo.selection),N(ht,_.redo.sortedColumn),N(XA,_.redo.text),N(tt,_.redo.textIsRepaired),N(DA,void 0),o("redo",{item:_,json:c(fA)}),Zi(q,_.undo.patch&&_.redo.patch?{json:c(fA),previousJson:q.json,redo:_.redo.patch,undo:_.undo.patch}:void 0),G(),c(OA)&&un(It(c(OA)),{scrollToWhenVisible:!1})}else X()(_)}}function va(_){N(oA,_.getBoundingClientRect().height)}KA(()=>(K(v()),K(k())),()=>{N(zA,xR({escapeControlCharacters:v(),escapeUnicodeCharacters:k()}))}),KA(()=>c(HA),()=>{(function(_){if(c(PA)){var q=_?vf:-100;c(PA).scrollTo({top:Tl(PA,c(PA).scrollTop+=q),left:c(PA).scrollLeft})}})(c(HA))}),KA(()=>K(d()),()=>{(function(_){var q={json:c(fA)},nA=Rf(_)?_.text!==c(XA):!Mi(q.json,_.json);if(o("update external content",{isChanged:nA}),nA){var cA={json:c(fA),documentState:c(GA),selection:c(OA),sortedColumn:c(ht),text:c(XA),textIsRepaired:c(tt)};if(Rf(_))try{N(fA,x()(_.text)),N(GA,Ul(c(fA),c(GA))),N(XA,_.text),N(tt,!1),N(DA,void 0)}catch(MA){try{N(fA,x()(ag(_.text))),N(GA,Ul(c(fA),c(GA))),N(XA,_.text),N(tt,!0),N(DA,void 0)}catch(ne){N(fA,void 0),N(GA,void 0),N(XA,_.text),N(tt,!1),N(DA,c(XA)!==""?Th(c(XA),MA.message||String(MA)):void 0)}}else N(fA,_.json),N(GA,Ul(c(fA),c(GA))),N(XA,void 0),N(tt,!1),N(DA,void 0);Qe(c(fA)),N(ht,void 0),ci(cA)}})(d())}),KA(()=>K(h()),()=>{(function(_){Mi(c(OA),_)||(o("applyExternalSelection",{selection:c(OA),externalSelection:_}),Kf(_)&&N(OA,_))})(h())}),KA(()=>(c(je),c(fA),K(S()),c(He)),()=>{N(je,Vo(c(fA))?(function(_,q){var nA=new Set(q.map(vt)),cA=new Set(_.map(vt));for(var MA of nA)cA.has(MA)||nA.delete(MA);for(var ne of cA)nA.has(ne)||nA.add(ne);return[...nA].map(Es)})(PwA(c(fA),S(),c(He)),c(je)):[])}),KA(()=>(c(fA),c(je)),()=>{N(pt,!(!c(fA)||en(c(je))))}),KA(()=>(c(fA),c(He)),()=>{N(A,Array.isArray(c(fA))&&c(fA).length>c(He))}),KA(()=>(c(sA),c(oA),c(fA),c(HA),vf),()=>{N(i,jwA(c(sA),c(oA),c(fA),$,TA,c(HA)?vf:0))}),KA(()=>c(fA),()=>{c(fA),c(PA)&&c(PA).scrollTo({top:c(PA).scrollTop,left:c(PA).scrollLeft})}),KA(()=>c(OA),()=>{var _;_=c(OA),Mi(_,h())||(o("onSelect",_),Z()(_))}),KA(()=>(K(I()),K(f()),K(b()),c(zA),c(fA),c(GA),K(iA())),()=>{N(Te,{mode:Da.table,readOnly:I(),truncateTextSize:f(),parser:b(),normalization:c(zA),getJson:()=>c(fA),getDocumentState:()=>c(GA),findElement:Bo,findNextInside:Kt,focus:G,onPatch:(_,q)=>Li((function(nA,cA){return nA.flatMap(MA=>{if($6(MA)){var ne=Es(MA.path);if(ne.length>0){for(var se=[MA],Ee=Yi(ne);Ee.length>0&&!vr(cA,Ee);)se.unshift({op:"add",path:vt(Ee),value:{}}),Ee=Yi(Ee);return se}}return MA})})(_,c(fA)),q),onSelect:de,onFind:zi,onPasteJson:bt,onRenderValue:iA()})}),KA(()=>(c(fA),K(F()),K(b()),K(z())),()=>{Ke(c(fA),F(),b(),z())}),KA(()=>(c(gn),c(je)),()=>{N(n,qwA(c(gn),c(je)))}),Rn();var Ut={validate:nn,patch:Si,focus:G,acceptAutoRepair:Qn,scrollTo:un,findElement:Bo,openTransformModal:nt};ni(!0);var st=oDA();fe("mousedown",NC,function(_){!AQ(_.target,q=>q===c(pA))&&tr(c(OA))&&(o("click outside the editor, exit edit mode"),N(OA,D0(c(OA))),oi&&c(Ue)&&(c(Ue).focus(),c(Ue).blur()),o("blur (outside editor)"),c(Ue)&&c(Ue).blur())});var Oi,Xi=et(st),Wn=dA(Xi),pn=_=>{(function(q,nA){Nt(nA,!1);var cA=L(nA,"containsValidArray",9),MA=L(nA,"readOnly",9),ne=L(nA,"showSearch",13,!1),se=L(nA,"history",9),Ee=L(nA,"onSort",9),Pe=L(nA,"onTransform",9),Re=L(nA,"onContextMenu",9),Le=L(nA,"onUndo",9),ai=L(nA,"onRedo",9),Yn=L(nA,"onRenderMenu",9);function tA(){ne(!ne())}var yA=BA(void 0,!0),WA=BA(void 0,!0);KA(()=>(K(MA()),K(Ee()),K(cA()),K(Pe()),K(Re()),K(Le()),K(se()),K(ai())),()=>{N(yA,MA()?[{type:"space"}]:[{type:"button",icon:y4,title:"Sort",className:"jse-sort",onClick:Ee(),disabled:MA()||!cA()},{type:"button",icon:p4,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:Pe(),disabled:MA()||!cA()},{type:"button",icon:m4,title:"Search (Ctrl+F)",className:"jse-search",onClick:tA,disabled:!cA()},{type:"button",icon:W9,title:LR,className:"jse-contextmenu",onClick:Re()},{type:"separator"},{type:"button",icon:Y8,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Le(),disabled:!se().canUndo},{type:"button",icon:O8,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:ai(),disabled:!se().canRedo},{type:"space"}])}),KA(()=>(K(Yn()),c(yA)),()=>{N(WA,Yn()(c(yA))||c(yA))}),Rn(),ni(!0),KD(q,{get items(){return c(WA)}}),Ft()})(_,{get containsValidArray(){return c(pt)},get readOnly(){return I()},get history(){return E()},onSort:On,onTransform:Ti,onUndo:Xt,onRedo:Ji,onContextMenu:Do,get onRenderMenu(){return AA()},get showSearch(){return c(HA)},set showSearch(q){N(HA,q)},$$legacy:!0})};jA(Wn,_=>{m()&&_(pn)});var _t=_A(Wn,2),sa=_=>{var q=iDA(),nA=et(q),cA=dA(nA);cA.readOnly=!0,Oo(cA,Ee=>N(Ue,Ee),()=>c(Ue));var MA=_A(nA,2),ne=Ee=>{var Pe=eDA(),Re=et(Pe);J$(dA(Re),{get json(){return c(fA)},get documentState(){return c(GA)},get parser(){return b()},get showSearch(){return c(HA)},get showReplace(){return c(vA)},get readOnly(){return I()},get columns(){return c(je)},onSearch:Gt,onFocus:ft,onPatch:Li,onClose:Ot});var Le=_A(Re,2),ai=dA(Le),Yn=dA(ai),tA=dA(Yn),yA=dA(tA),WA=dA(yA),Ge=yt=>{var Ci=it(()=>(K(Eh),c(n),wA(()=>{var Ea;return Eh([],(Ea=c(n))===null||Ea===void 0?void 0:Ea.root)}))),la=Fi(),Xn=et(la),ea=Ea=>{var Er=j5A();Rh(dA(Er),{get validationError(){return c(Ci)},get onExpand(){return Qg}}),CA(Ea,Er)};jA(Xn,Ea=>{c(Ci)&&Ea(ea)}),CA(yt,la)};jA(WA,yt=>{K(en),c(n),wA(()=>{var Ci;return!en((Ci=c(n))===null||Ci===void 0?void 0:Ci.root)})&&yt(Ge)});var ye=_A(yA);da(ye,1,()=>c(je),ka,(yt,Ci)=>{var la=q5A();(function(Xn,ea){Nt(ea,!1);var Ea=BA(void 0,!0),Er=BA(void 0,!0),L0=BA(void 0,!0),fl=L(ea,"path",9),bg=L(ea,"sortedColumn",9),Rc=L(ea,"readOnly",9),Mg=L(ea,"onSort",9);KA(()=>(K(fl()),Bl),()=>{N(Ea,en(fl())?"values":Bl(fl()))}),KA(()=>(K(bg()),K(fl())),()=>{var xa;N(Er,bg()&&Mi(fl(),(xa=bg())===null||xa===void 0?void 0:xa.path)?bg().sortDirection:void 0)}),KA(()=>(c(Er),eZ),()=>{N(L0,c(Er)?eZ[c(Er)]:void 0)}),Rn(),ni(!0);var is,hr=T5A(),pl=dA(hr),G0=dA(pl),ml=_A(pl,2),Ln=xa=>{var _a=U5A(),YI=dA(_a),Jd=it(()=>(c(Er),K(ug),K(c0),K(AS),wA(()=>c(Er)===ug.asc?c0:AS)));tn(YI,{get data(){return c(Jd)}}),Se(()=>_n(_a,"title","Currently sorted in ".concat(c(L0)," order"))),CA(xa,_a)};jA(ml,xa=>{c(Er)!==void 0&&xa(Ln)}),Se(xa=>{is=ii(hr,1,"jse-column-header svelte-5pxwfq",null,is,{"jse-readonly":Rc()}),_n(hr,"title",Rc()?c(Ea):c(Ea)+" (Click to sort the data by this column)"),Lt(G0,xa)},[()=>(K(SC),c(Ea),K(50),wA(()=>SC(c(Ea),50)))]),fe("click",hr,function(){Rc()||Mg()({path:fl(),sortDirection:c(Er)===ug.asc?ug.desc:ug.asc})}),CA(Xn,hr),Ft()})(dA(la),{get path(){return c(Ci)},get sortedColumn(){return c(ht)},get readOnly(){return I()},onSort:ze}),CA(yt,la)});var be=_A(ye),ot=yt=>{var Ci=V5A(),la=dA(Ci),Xn=it(()=>(c(fA),wA(()=>Array.isArray(c(fA))?c(fA).length:0)));(function(ea,Ea){Nt(Ea,!1);var Er=L(Ea,"count",9),L0=L(Ea,"maxSampleCount",9),fl=L(Ea,"readOnly",9),bg=L(Ea,"onRefresh",9);ni(!0);var Rc,Mg=P5A();tn(dA(Mg),{get data(){return Bz}}),Se(()=>{Rc=ii(Mg,1,"jse-column-header svelte-1wgrwv3",null,Rc,{"jse-readonly":fl()}),_n(Mg,"title","The Columns are created by sampling ".concat(L0()," items out of ").concat(Er(),". ")+"If you're missing a column, click here to sample all of the items instead of a subset. This is slower.")}),fe("click",Mg,()=>bg()()),CA(ea,Mg),Ft()})(la,{get count(){return c(Xn)},get maxSampleCount(){return c(He)},get readOnly(){return I()},onRefresh:()=>N(He,1/0)}),CA(yt,Ci)};jA(be,yt=>{c(A)&&yt(ot)});var Vt,Gi,Fn=_A(tA),$i=dA(Fn),Qo=_A(Fn);da(Qo,1,()=>(c(i),wA(()=>c(i).visibleItems)),ka,(yt,Ci,la)=>{var Xn=it(()=>(c(i),wA(()=>c(i).startIndex+la))),ea=it(()=>(c(n),K(c(Xn)),wA(()=>c(n).rows[c(Xn)]))),Ea=it(()=>(K(Eh),K(c(Xn)),K(c(ea)),wA(()=>{var is;return Eh([String(c(Xn))],(is=c(ea))===null||is===void 0?void 0:is.row)}))),Er=it(()=>(K(m0),c(fA),c(ke),K(c(Xn)),wA(()=>m0(c(fA),c(ke),[String(c(Xn))])))),L0=ADA(),fl=dA(L0);GX(fl,()=>c(Xn),is=>{var hr=W5A(),pl=dA(hr),G0=_A(pl),ml=Ln=>{Rh(Ln,{get validationError(){return c(Ea)},get onExpand(){return Qg}})};jA(G0,Ln=>{c(Ea)&&Ln(ml)}),ms(hr,(Ln,xa)=>q5?.(Ln,xa),()=>Ln=>(function(xa,_a){$[_a]=xa.getBoundingClientRect().height})(Ln,c(Xn))),Se(()=>{var Ln;return Lt(pl,"".concat((Ln=c(Xn))!==null&&Ln!==void 0?Ln:""," "))}),CA(is,hr)});var bg=_A(fl);da(bg,1,()=>c(je),ka,(is,hr,pl,G0)=>{var ml,Ln=it(()=>(K(c(Xn)),c(hr),wA(()=>[String(c(Xn))].concat(c(hr))))),xa=it(()=>(K(Xe),c(Ci),c(hr),wA(()=>Xe(c(Ci),c(hr))))),_a=it(()=>(K(En),c(OA),K(k0),K(c(Ln)),wA(()=>En(c(OA))&&k0(c(OA).path,c(Ln))))),YI=it(()=>(K(c(ea)),wA(()=>{var Ra;return(Ra=c(ea))===null||Ra===void 0?void 0:Ra.columns[pl]}))),Jd=it(()=>(K(Eh),K(c(Ln)),K(c(YI)),wA(()=>Eh(c(Ln),c(YI))))),HI=X5A(),DQ=dA(HI),Od=dA(DQ),yQ=Ra=>{var Hl=it(()=>(K(hD),K(m0),c(Ci),K(c(Er)),c(hr),wA(()=>hD(m0(c(Ci),c(Er),c(hr)))))),vQ=it(()=>(K(c(Hl)),wA(()=>!!c(Hl)&&c(Hl).some(PI=>PI.active)))),bQ=it(()=>(K(en),K(c(Hl)),wA(()=>!en(c(Hl)))));(function(PI,Fr){Nt(Fr,!1);var MQ=L(Fr,"path",9),wF=L(Fr,"value",9),DF=L(Fr,"parser",9),_iA=L(Fr,"isSelected",9),RiA=L(Fr,"containsSearchResult",9),NiA=L(Fr,"containsActiveSearchResult",9),FiA=L(Fr,"onEdit",9);ni(!0);var yF,L3=K5A(),LiA=dA(L3);Se(SQ=>{yF=ii(L3,1,"jse-inline-value svelte-1jv89ui",null,yF,{"jse-selected":_iA(),"jse-highlight":RiA(),"jse-active":NiA()}),Lt(LiA,SQ)},[()=>(K(SC),K(DF()),K(wF()),K(50),wA(()=>{var SQ;return SC((SQ=DF().stringify(wF()))!==null&&SQ!==void 0?SQ:"",50)}))]),fe("dblclick",L3,()=>FiA()(MQ())),CA(PI,L3),Ft()})(Ra,{get path(){return c(Ln)},get value(){return c(xa)},get parser(){return b()},get isSelected(){return c(_a)},get containsSearchResult(){return c(bQ)},get containsActiveSearchResult(){return c(vQ)},onEdit:rt})},Hv=Ra=>{var Hl=it(()=>(K(m0),c(fA),c(ke),K(c(Ln)),wA(()=>{var Fr;return(Fr=m0(c(fA),c(ke),c(Ln)))===null||Fr===void 0?void 0:Fr.searchResults}))),vQ=it(()=>c(xa)!==void 0?c(xa):""),bQ=it(()=>(K(v0),c(fA),c(GA),K(c(Ln)),wA(()=>v0(c(fA),c(GA),c(Ln))))),PI=it(()=>c(_a)?c(OA):void 0);G$(Ra,{get path(){return c(Ln)},get value(){return c(vQ)},get enforceString(){return c(bQ)},get selection(){return c(PI)},get searchResultItems(){return c(Hl)},get context(){return c(Te)}})};jA(Od,Ra=>{K(aa),K(c(xa)),wA(()=>aa(c(xa)))?Ra(yQ):Ra(Hv,!1)});var zv=_A(Od),Pv=Ra=>{var Hl=Z5A();cI(dA(Hl),{selected:!0,onContextMenu:No}),CA(Ra,Hl)};jA(zv,Ra=>{K(I()),K(c(_a)),K(tr),c(OA),wA(()=>!I()&&c(_a)&&!tr(c(OA)))&&Ra(Pv)});var Nc=_A(DQ,2),zI=Ra=>{Rh(Ra,{get validationError(){return c(Jd)},get onExpand(){return Qg}})};jA(Nc,Ra=>{c(Jd)&&Ra(zI)}),Se(Ra=>{_n(HI,"data-path",Ra),ml=ii(DQ,1,"jse-value-outer svelte-1p86y3c",null,ml,{"jse-selected-value":c(_a)})},[()=>(K(eD),K(c(Ln)),wA(()=>eD(c(Ln))))]),CA(is,HI)});var Rc=_A(bg),Mg=is=>{CA(is,$5A())};jA(Rc,is=>{c(A)&&is(Mg)}),CA(yt,L0)});var $t,$o=dA(_A(Qo));Oo(Le,yt=>N(PA,yt),()=>c(PA)),ms(Le,(yt,Ci)=>q5?.(yt,Ci),()=>va),_r(()=>fe("scroll",Le,dt));var Zn=_A(Le,2),Aa=yt=>{var Ci=it(()=>(c(ee),wA(()=>"You pasted a JSON ".concat(Array.isArray(c(ee).contents)?"array":"object"," as text")))),la=it(()=>[{icon:CC,text:"Paste as JSON instead",title:"Paste the text as JSON instead of a single value",onMouseDown:yo},{text:"Leave as is",title:"Keep the pasted content as a single value",onClick:ya}]);Yl(yt,{type:"info",get message(){return c(Ci)},get actions(){return c(la)}})};jA(Zn,yt=>{c(ee)&&yt(Aa)});var mn=_A(Zn,2),Tt=yt=>{var Ci=it(()=>[{icon:CC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:fn},{text:"Leave as is",title:"Keep the pasted array",onClick:_i}]);Yl(yt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(Ci)}})};jA(mn,yt=>{c(NA)&&yt(Tt)});var an=_A(mn,2),Ai=yt=>{var Ci=it(()=>I()?[]:[{icon:J8,text:"Ok",title:"Accept the repaired document",onClick:Qn},{icon:w4,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Eo}]);Yl(yt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(Ci)},onClose:G})};jA(an,yt=>{c(tt)&&yt(Ai)}),VR(_A(an,2),{get validationErrors(){return c(gn)},selectError:Ne}),Se(()=>{Vt=ii(Fn,1,"jse-table-invisible-start-section svelte-1p86y3c",null,Vt,{"jse-search-box-background":c(HA)}),_n($i,"colspan",(c(je),wA(()=>c(je).length))),Gi=mg($i,"",Gi,{height:(c(i),wA(()=>c(i).startHeight+"px"))}),_n($o,"colspan",(c(je),wA(()=>c(je).length))),$t=mg($o,"",$t,{height:(c(i),wA(()=>c(i).endHeight+"px"))})}),CA(Ee,Pe)},se=Ee=>{var Pe=Fi(),Re=et(Pe),Le=Yn=>{var tA=tDA(),yA=et(tA),WA=it(()=>I()?[]:[{icon:w4,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Eo}]);Yl(yA,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(WA)}}),V$(_A(yA,2),{get text(){return c(XA)},get json(){return c(fA)},get indentation(){return P()},get parser(){return b()}}),CA(Yn,tA)},ai=Yn=>{z5A(Yn,{get text(){return c(XA)},get json(){return c(fA)},get readOnly(){return I()},get parser(){return b()},openJSONEditorModal:rt,extractPath:qt,get onChangeMode(){return eA()},onClick:()=>{G()}})};jA(Re,Yn=>{c(DA)&&c(XA)!==void 0&&c(XA)!==""?Yn(Le):Yn(ai,!1)},!0),CA(Ee,Pe)};jA(MA,Ee=>{c(pt)?Ee(ne):Ee(se,!1)}),fe("paste",cA,De),CA(_,q)},zo=_=>{CA(_,nDA())};jA(_t,_=>{C?_(zo,!1):_(sa)}),Oo(Xi,_=>N(pA,_),()=>c(pA));var D=_A(Xi,2),M=_=>{F$(_,{onClose:()=>N(j,!1)})};jA(D,_=>{c(j)&&_(M)});var R=_A(D,2),V=_=>{L$(_,DI(()=>c(_e),{onClose:()=>{var q;(q=c(_e))===null||q===void 0||q.onClose(),N(_e,void 0)}}))};return jA(R,_=>{c(_e)&&_(V)}),Se(()=>Oi=ii(Xi,1,"jse-table-mode svelte-1p86y3c",null,Oi,{"no-main-menu":!m()})),fe("mousedown",Xi,function(_){if(_.buttons===1||_.buttons===2){var q=_.target;q.isContentEditable||G();var nA=i$(q);if(nA){if(tr(c(OA))&&Uf(c(fA),c(OA),nA))return;N(OA,Hi(nA)),_.preventDefault()}}}),fe("keydown",Xi,function(_){var q=TC(_);if(o("keydown",{combo:q,key:_.key}),q==="Ctrl+X"&&(_.preventDefault(),Za(!0)),q==="Ctrl+Shift+X"&&(_.preventDefault(),Za(!1)),q==="Ctrl+C"&&(_.preventDefault(),Ta(!0)),q==="Ctrl+Shift+C"&&(_.preventDefault(),Ta(!1)),q==="Ctrl+D"&&(_.preventDefault(),Nn()),q!=="Delete"&&q!=="Backspace"||(_.preventDefault(),Ui()),q==="Insert"&&_.preventDefault(),q==="Ctrl+A"&&_.preventDefault(),q==="Ctrl+Q"&&Zo(_),q==="ArrowLeft"&&(_.preventDefault(),Bi(),c(OA))){var nA=(function(Pe,Re){var{rowIndex:Le,columnIndex:ai}=hg(It(Re),Pe);return ai>0?Hi(sd({rowIndex:Le,columnIndex:ai-1},Pe)):Re})(c(je),c(OA));N(OA,nA),Yo(It(nA))}if(q==="ArrowRight"&&(_.preventDefault(),Bi(),c(OA))){var cA=(function(Pe,Re){var{rowIndex:Le,columnIndex:ai}=hg(It(Re),Pe);return ai0?Hi(sd({rowIndex:Le-1,columnIndex:ai},Pe)):Re})(c(je),c(OA));N(OA,MA),Yo(It(MA))}if(q==="ArrowDown"&&(_.preventDefault(),Bi(),c(OA))){var ne=(function(Pe,Re,Le){var{rowIndex:ai,columnIndex:Yn}=hg(It(Le),Re);return aiN(zA,$)}).get()),pA=BA(s());function PA($){if(rZ($)){N(pA,$.undo.mode);var oA=c(zA).items(),sA=oA.findIndex(de=>de===$),TA=sA!==-1?oA[sA-1]:void 0;$A("handleUndo",{index:sA,item:$,items:oA,prevItem:TA}),TA&&i(TA.redo.selection),F()(c(pA))}}function Ue($){if(rZ($)){N(pA,$.redo.mode);var oA=c(zA).items(),sA=oA.findIndex(de=>de===$),TA=sA!==-1?oA[sA+1]:void 0;$A("handleRedo",{index:sA,item:$,items:oA,nextItem:TA}),TA&&i(TA.undo.selection),F()(c(pA))}}var _e=BA(),YA={type:"separator"},fA=BA(),XA=BA();function DA($){if(c(rA))return c(rA).patch($);if(c(uA))return c(uA).patch($);if(c(UA))return c(UA).patch($);throw new Error('Method patch is not available in mode "'.concat(c(pA),'"'))}function ee($,oA){if(c(rA))return c(rA).expand($,oA);if(c(UA))return c(UA).expand($,oA);throw new Error('Method expand is not available in mode "'.concat(c(pA),'"'))}function NA($,oA){if(c(rA))return c(rA).collapse($,oA);if(c(UA))return c(UA).collapse($,oA);throw new Error('Method collapse is not available in mode "'.concat(c(pA),'"'))}function ke($){if(c(UA))c(UA).openTransformModal($);else if(c(rA))c(rA).openTransformModal($);else{if(!c(uA))throw new Error('Method transform is not available in mode "'.concat(c(pA),'"'));c(uA).openTransformModal($)}}function HA(){if(c(UA))return c(UA).validate();if(c(rA))return c(rA).validate();if(c(uA))return c(uA).validate();throw new Error('Method validate is not available in mode "'.concat(c(pA),'"'))}function vA(){return c(rA)?c(rA).acceptAutoRepair():A()}function Gt($){if(c(rA))return c(rA).scrollTo($);if(c(uA))return c(uA).scrollTo($);throw new Error('Method scrollTo is not available in mode "'.concat(c(pA),'"'))}function ft($){if(c(rA))return c(rA).findElement($);if(c(uA))return c(uA).findElement($);throw new Error('Method findElement is not available in mode "'.concat(c(pA),'"'))}function he(){c(UA)?c(UA).focus():c(rA)?c(rA).focus():c(uA)&&c(uA).focus()}function Ot(){return He.apply(this,arguments)}function He(){return(He=zt(function*(){c(UA)&&(yield c(UA).refresh())})).apply(this,arguments)}KA(()=>K(s()),()=>{(function($){if($!==c(pA)){var oA={type:"mode",undo:{mode:c(pA),selection:void 0},redo:{mode:$,selection:void 0}};c(pA)==="text"&&c(UA)&&c(UA).flush(),$A("add history item",oA),c(zA).add(oA),N(pA,$)}})(s())}),KA(()=>(c(pA),K(F())),()=>{N(_e,[{type:"button",text:"text",title:"Switch to text mode (current mode: ".concat(c(pA),")"),className:"jse-group-button jse-first"+(c(pA)===Da.text?" jse-selected":""),onClick:()=>F()(Da.text)},{type:"button",text:"tree",title:"Switch to tree mode (current mode: ".concat(c(pA),")"),className:"jse-group-button "+(c(pA)===Da.tree?" jse-selected":""),onClick:()=>F()(Da.tree)},{type:"button",text:"table",title:"Switch to table mode (current mode: ".concat(c(pA),")"),className:"jse-group-button jse-last"+(c(pA)===Da.table?" jse-selected":""),onClick:()=>F()(Da.table)}])}),KA(()=>(c(_e),K(eA()),c(pA),K(b()),K(n())),()=>{N(fA,$=>{var oA=nR($[0])?c(_e).concat($):c(_e).concat(YA,$),sA=h4(oA);return eA()(oA,{mode:c(pA),modal:b(),readOnly:n()})||sA})}),KA(()=>(K(Z()),c(pA),K(b()),K(n()),K(i())),()=>{N(XA,$=>{var oA,sA=h4($);return(oA=Z()($,{mode:c(pA),modal:b(),readOnly:n(),selection:i()}))!==null&&oA!==void 0?oA:!n()&&sA})}),Rn();var je={patch:DA,expand:ee,collapse:NA,transform:ke,validate:HA,acceptAutoRepair:vA,scrollTo:Gt,findElement:ft,focus:he,refresh:Ot};ni();var pt=Fi(),xe=et(pt),oi=$=>{Oo(G5A($,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(zA)},get readOnly(){return n()},get indentation(){return o()},get tabSize(){return a()},get mainMenuBar(){return l()},get statusBar(){return C()},get askToFormat(){return I()},get escapeUnicodeCharacters(){return h()},get parser(){return f()},get validator(){return v()},get validationParser(){return k()},get onChange(){return x()},get onChangeMode(){return F()},get onSelect(){return z()},onUndo:PA,onRedo:Ue,get onError(){return EA()},get onFocus(){return X()},get onBlur(){return iA()},get onRenderMenu(){return c(fA)},get onSortModal(){return AA()},get onTransformModal(){return IA()},$$legacy:!0}),oA=>N(UA,oA),()=>c(UA))},j=$=>{var oA=Fi(),sA=et(oA),TA=Qe=>{Oo(aDA(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(zA)},get readOnly(){return n()},get truncateTextSize(){return r()},get mainMenuBar(){return l()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return h()},get flattenColumns(){return E()},get parser(){return f()},get parseMemoizeOne(){return m()},get validator(){return v()},get validationParser(){return k()},get indentation(){return o()},get onChange(){return x()},get onChangeMode(){return F()},get onSelect(){return z()},onUndo:PA,onRedo:Ue,get onRenderValue(){return P()},get onFocus(){return X()},get onBlur(){return iA()},get onRenderMenu(){return c(fA)},get onRenderContextMenu(){return c(XA)},get onSortModal(){return AA()},get onTransformModal(){return IA()},get onJSONEditorModal(){return aA()},$$legacy:!0}),GA=>N(uA,GA),()=>c(uA))},de=Qe=>{Oo(pR(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(zA)},get readOnly(){return n()},get indentation(){return o()},get truncateTextSize(){return r()},get mainMenuBar(){return l()},get navigationBar(){return g()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return h()},get parser(){return f()},get parseMemoizeOne(){return m()},get validator(){return v()},get validationParser(){return k()},get pathParser(){return S()},get onError(){return EA()},get onChange(){return x()},get onChangeMode(){return F()},get onSelect(){return z()},onUndo:PA,onRedo:Ue,get onRenderValue(){return P()},get onClassName(){return W()},get onFocus(){return X()},get onBlur(){return iA()},get onRenderMenu(){return c(fA)},get onRenderContextMenu(){return c(XA)},get onSortModal(){return AA()},get onTransformModal(){return IA()},get onJSONEditorModal(){return aA()},$$legacy:!0}),GA=>N(rA,GA),()=>c(rA))};jA(sA,Qe=>{c(pA),K(Da),wA(()=>c(pA)===Da.table)?Qe(TA):Qe(de,!1)},!0),CA($,oA)};return jA(xe,$=>{c(pA),K(Da),wA(()=>c(pA)===Da.text||String(c(pA))==="code")?$(oi):$(j,!1)}),CA(t,pt),jt(e,"patch",DA),jt(e,"expand",ee),jt(e,"collapse",NA),jt(e,"transform",ke),jt(e,"validate",HA),jt(e,"acceptAutoRepair",vA),jt(e,"scrollTo",Gt),jt(e,"findElement",ft),jt(e,"focus",he),jt(e,"refresh",Ot),Ft(je)}Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-wrapper.svelte-t4zsk3 { + flex: 1; + display: flex; + min-width: 0; + min-height: 0; + flex-direction: column; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) { + font-weight: bold; + display: block; + box-sizing: border-box; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) .jse-label-inner:where(.svelte-t4zsk3) { + margin-top: calc(2 * var(--jse-padding, 10px)); + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); + box-sizing: border-box; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-modal-inline-editor:where(.svelte-t4zsk3) { + flex: 1; + min-height: 150px; + min-width: 0; + max-width: 100%; + display: flex; + --jse-theme-color: var(--jse-modal-editor-theme-color, #707070); + --jse-theme-color-highlight: var(--jse-modal-editor-theme-color-highlight, #646464); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) { + gap: var(--jse-padding, 10px); + align-items: center; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) .jse-error:where(.svelte-t4zsk3) { + flex: 1; + color: var(--jse-error-color, #ee5341); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-secondary-background, #d3d3d3); + color: var(--jse-button-secondary-color, var(--jse-text-color, #4d4d4d)); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):hover { + background: var(--jse-button-secondary-background-highlight, #e1e1e1); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):disabled { + background: var(--jse-button-secondary-background-disabled, #9d9d9d); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3) { + border: var(--jse-input-border, 1px solid #d8dbdf); + outline: none; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: inherit; + background: var(--jse-input-background, var(--jse-background-color, #fff)); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):read-only { + background: var(--jse-input-background-readonly, transparent); +}`);var rDA=JA('
      '),sDA=JA(''),lDA=JA(''),gDA=JA(''),cDA=JA('
      Path
      Contents
      ',1),CDA=JA('
      '),IDA={};Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-contents.svelte-lwzlls { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) th:where(.svelte-lwzlls), +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) td:where(.svelte-lwzlls) { + text-align: left; + vertical-align: middle; + font-weight: normal; + padding-bottom: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-lwzlls input.jse-path:where(.svelte-lwzlls) { + width: 100%; + box-sizing: border-box; + padding: 5px 10px; + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: var(--jse-input-radius, 3px); + font-family: inherit; + font-size: inherit; + background: inherit; + background: var(--jse-input-background-readonly, transparent); + color: inherit; + outline: none; +} +.jse-modal-contents.svelte-lwzlls .svelte-select input { + box-sizing: border-box; +} +.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) { + height: 200px; +} +.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) .jse-error:where(.svelte-lwzlls) { + color: var(--jse-error-color, #ee5341); +}`);var Qh=kD(()=>IDA),dDA=JA('Property'),BDA=JA('
      '),EDA=JA('
      Path
      Direction
      ',1);Zt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-main.svelte-1l55585 { + width: 100%; + height: 100%; + min-width: 0; + min-height: 150px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + position: relative; + display: flex; + flex-direction: row; +} +.jse-main.svelte-1l55585:not(.jse-focus) { + --jse-selection-background-color: var(--jse-selection-background-inactive-color, #e8e8e8); + --jse-context-menu-pointer-background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); +}`);var hDA=JA('
      ',1);function QDA(t,e){Nt(e,!1);var A=BA(void 0,!0),i=or("jsoneditor:JSONEditor"),n={text:""},o=void 0,a=!1,r=Da.tree,s=!0,l=!0,g=!0,C=!0,I=!1,d=!1,h=!0,E=JSON,f=void 0,m=JSON,v={parse:p6A,stringify:Bl},k=[OmA],S=k[0].id,b=Qg,x=void 0,F=void 0,z=f6A,P=Qg,W=Qg,eA=Qg,Z=Qg,EA=ge=>{console.error(ge),alert(ge.toString())},X=Qg,iA=Qg,AA=L(e,"content",13,n),IA=L(e,"selection",13,o),aA=L(e,"readOnly",13,a),rA=L(e,"indentation",13,2),uA=L(e,"tabSize",13,4),UA=L(e,"truncateTextSize",13,1e3),$A=L(e,"mode",13,r),zA=L(e,"mainMenuBar",13,s),pA=L(e,"navigationBar",13,l),PA=L(e,"statusBar",13,g),Ue=L(e,"askToFormat",13,C),_e=L(e,"escapeControlCharacters",13,I),YA=L(e,"escapeUnicodeCharacters",13,d),fA=L(e,"flattenColumns",13,h),XA=L(e,"parser",13,E),DA=L(e,"validator",13,f),ee=L(e,"validationParser",13,m),NA=L(e,"pathParser",13,v),ke=L(e,"queryLanguages",13,k),HA=L(e,"queryLanguageId",13,S),vA=L(e,"onChangeQueryLanguage",13,b),Gt=L(e,"onChange",13,x),ft=L(e,"onSelect",13,F),he=L(e,"onRenderValue",13,z),Ot=L(e,"onClassName",13,P),He=L(e,"onRenderMenu",13,W),je=L(e,"onRenderContextMenu",13,eA),pt=L(e,"onChangeMode",13,Z),xe=L(e,"onError",13,EA),oi=L(e,"onFocus",13,X),j=L(e,"onBlur",13,iA),$=BA(wh(),!0),oA=BA(!1,!0),sA=BA(void 0,!0),TA=BA(void 0,!0),de=BA(void 0,!0),Qe=BA(void 0,!0),GA=BA(XA(),!0);function OA(){return AA()}function ht(ge){i("set");var mi=v_(ge);if(mi)throw new Error(mi);N($,wh()),AA(ge),Ro()}function tt(ge){i("update");var mi=v_(ge);if(mi)throw new Error(mi);AA(ge),Ro()}function ze(ge){var mi=c(sA).patch(ge);return Ro(),mi}function Te(ge){IA(ge),Ro()}function ci(ge,mi){c(sA).expand(ge,mi),Ro()}function gn(ge){var mi=arguments.length>1&&arguments[1]!==void 0&&arguments[1];c(sA).collapse(ge,mi),Ro()}function hn(){var ge=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};c(sA).transform(ge),Ro()}function Ke(){return c(sA).validate()}function nn(){var ge=c(sA).acceptAutoRepair();return Ro(),ge}function Si(ge){return Li.apply(this,arguments)}function Li(){return(Li=zt(function*(ge){yield c(sA).scrollTo(ge)})).apply(this,arguments)}function Zi(ge){return c(sA).findElement(ge)}function bt(){c(sA).focus(),Ro()}function on(){return Kt.apply(this,arguments)}function Kt(){return(Kt=zt(function*(){yield c(sA).refresh()})).apply(this,arguments)}function G(ge){var mi,cn,fn,Ho,ya,_i,Eo,Za,vo,Ta,Jn,Ui,qt,Nn,ho,Fo,xA,Ae,De,mA,FA,le,Ne,nt,rt,xt,On,Ti,zi,Xt,Ji,va=Object.keys(ge);for(var Ut of va)switch(Ut){case"content":AA((mi=ge[Ut])!==null&&mi!==void 0?mi:n);break;case"selection":IA((cn=ge[Ut])!==null&&cn!==void 0?cn:o);break;case"readOnly":aA((fn=ge[Ut])!==null&&fn!==void 0?fn:a);break;case"indentation":rA((Ho=ge[Ut])!==null&&Ho!==void 0?Ho:2);break;case"tabSize":uA((ya=ge[Ut])!==null&&ya!==void 0?ya:4);break;case"truncateTextSize":UA((_i=ge[Ut])!==null&&_i!==void 0?_i:1e3);break;case"mode":$A((Eo=ge[Ut])!==null&&Eo!==void 0?Eo:r);break;case"mainMenuBar":zA((Za=ge[Ut])!==null&&Za!==void 0?Za:s);break;case"navigationBar":pA((vo=ge[Ut])!==null&&vo!==void 0?vo:l);break;case"statusBar":PA((Ta=ge[Ut])!==null&&Ta!==void 0?Ta:g);break;case"askToFormat":Ue((Jn=ge[Ut])!==null&&Jn!==void 0?Jn:C);break;case"escapeControlCharacters":_e((Ui=ge[Ut])!==null&&Ui!==void 0?Ui:I);break;case"escapeUnicodeCharacters":YA((qt=ge[Ut])!==null&&qt!==void 0?qt:d);break;case"flattenColumns":fA((Nn=ge[Ut])!==null&&Nn!==void 0?Nn:h);break;case"parser":XA((ho=ge[Ut])!==null&&ho!==void 0?ho:E);break;case"validator":DA((Fo=ge[Ut])!==null&&Fo!==void 0?Fo:f);break;case"validationParser":ee((xA=ge[Ut])!==null&&xA!==void 0?xA:m);break;case"pathParser":NA((Ae=ge[Ut])!==null&&Ae!==void 0?Ae:v);break;case"queryLanguages":ke((De=ge[Ut])!==null&&De!==void 0?De:k);break;case"queryLanguageId":HA((mA=ge[Ut])!==null&&mA!==void 0?mA:S);break;case"onChangeQueryLanguage":vA((FA=ge[Ut])!==null&&FA!==void 0?FA:b);break;case"onChange":Gt((le=ge[Ut])!==null&&le!==void 0?le:x);break;case"onRenderValue":he((Ne=ge[Ut])!==null&&Ne!==void 0?Ne:z);break;case"onClassName":Ot((nt=ge[Ut])!==null&&nt!==void 0?nt:P);break;case"onRenderMenu":He((rt=ge[Ut])!==null&&rt!==void 0?rt:W);break;case"onRenderContextMenu":je((xt=ge[Ut])!==null&&xt!==void 0?xt:eA);break;case"onChangeMode":pt((On=ge[Ut])!==null&&On!==void 0?On:Z);break;case"onSelect":ft((Ti=ge[Ut])!==null&&Ti!==void 0?Ti:F);break;case"onError":xe((zi=ge[Ut])!==null&&zi!==void 0?zi:EA);break;case"onFocus":oi((Xt=ge[Ut])!==null&&Xt!==void 0?Xt:X);break;case"onBlur":j((Ji=ge[Ut])!==null&&Ji!==void 0?Ji:iA);break;default:st(Ut)}function st(Oi){i('Unknown property "'.concat(Oi,'"'))}ke().some(Oi=>Oi.id===HA())||HA(ke()[0].id),Ro()}function dt(){return Bi.apply(this,arguments)}function Bi(){return(Bi=zt(function*(){throw new Error("class method destroy() is deprecated. It is replaced with a method destroy() in the vanilla library.")})).apply(this,arguments)}function Qn(ge,mi,cn){AA(ge),Gt()&&Gt()(ge,mi,cn)}function un(ge){IA(ge),ft()&&ft()(h4(ge))}function Vn(){N(oA,!0),oi()&&oi()()}function Yo(){N(oA,!1),j()&&j()()}function Bo(ge){return No.apply(this,arguments)}function No(){return(No=zt(function*(ge){$A()!==ge&&($A(ge),Ro(),bt(),pt()(ge))})).apply(this,arguments)}function Zo(ge){i("handleChangeQueryLanguage",ge),HA(ge),vA()(ge)}function Do(ge){var{id:mi,json:cn,rootPath:fn,onTransform:Ho,onClose:ya}=ge;aA()||N(Qe,{id:mi,json:cn,rootPath:fn,indentation:rA(),truncateTextSize:UA(),escapeControlCharacters:_e(),escapeUnicodeCharacters:YA(),parser:XA(),parseMemoizeOne:c(A),validationParser:ee(),pathParser:NA(),queryLanguages:ke(),queryLanguageId:HA(),onChangeQueryLanguage:Zo,onRenderValue:he(),onRenderMenu:_i=>He()(_i,{mode:$A(),modal:!0,readOnly:aA()}),onRenderContextMenu:_i=>je()(_i,{mode:$A(),modal:!0,readOnly:aA(),selection:IA()}),onClassName:Ot(),onTransform:Ho,onClose:ya})}function Ba(ge){aA()||N(de,ge)}function Xo(ge){var{content:mi,path:cn,onPatch:fn,onClose:Ho}=ge;i("onJSONEditorModal",{content:mi,path:cn}),N(TA,{content:mi,path:cn,onPatch:fn,readOnly:aA(),indentation:rA(),tabSize:uA(),truncateTextSize:UA(),mainMenuBar:zA(),navigationBar:pA(),statusBar:PA(),askToFormat:Ue(),escapeControlCharacters:_e(),escapeUnicodeCharacters:YA(),flattenColumns:fA(),parser:XA(),validator:void 0,validationParser:ee(),pathParser:NA(),onRenderValue:he(),onClassName:Ot(),onRenderMenu:He(),onRenderContextMenu:je(),onSortModal:Ba,onTransformModal:Do,onClose:Ho})}function ra(ge){ge.stopPropagation()}KA(()=>(K(XA()),c(GA),K(AA()),wh),()=>{if(!VX(XA(),c(GA))){if(i("parser changed, recreate editor"),Nf(AA())){var ge=c(GA).stringify(AA().json);AA({json:ge!==void 0?XA().parse(ge):void 0})}N(GA,XA()),N($,wh())}}),KA(()=>K(AA()),()=>{var ge=v_(AA());ge&&console.error("Error: "+ge)}),KA(()=>K(IA()),()=>{IA()===null&&console.warn("selection is invalid: it is null but should be undefined")}),KA(()=>K(XA()),()=>{N(A,xE(XA().parse))}),KA(()=>K($A()),()=>{i("mode changed to",$A())}),Rn();var yo={get:OA,set:ht,update:tt,patch:ze,select:Te,expand:ci,collapse:gn,transform:hn,validate:Ke,acceptAutoRepair:nn,scrollTo:Si,findElement:Zi,focus:bt,refresh:on,updateProps:G,destroy:dt};return ni(!0),tR(t,{children:(ge,mi)=>{var cn,fn=hDA(),Ho=et(fn);GX(dA(Ho),()=>c($),Jn=>{Oo(UZ(Jn,{get externalMode(){return $A()},get content(){return AA()},get selection(){return IA()},get readOnly(){return aA()},get indentation(){return rA()},get tabSize(){return uA()},get truncateTextSize(){return UA()},get statusBar(){return PA()},get askToFormat(){return Ue()},get mainMenuBar(){return zA()},get navigationBar(){return pA()},get escapeControlCharacters(){return _e()},get escapeUnicodeCharacters(){return YA()},get flattenColumns(){return fA()},get parser(){return XA()},get parseMemoizeOne(){return c(A)},get validator(){return DA()},get validationParser(){return ee()},get pathParser(){return NA()},insideModal:!1,get onError(){return xe()},onChange:Qn,onChangeMode:Bo,onSelect:un,get onRenderValue(){return he()},get onClassName(){return Ot()},onFocus:Vn,onBlur:Yo,get onRenderMenu(){return He()},get onRenderContextMenu(){return je()},onSortModal:Ba,onTransformModal:Do,onJSONEditorModal:Xo,$$legacy:!0}),Ui=>N(sA,Ui),()=>c(sA))});var ya=_A(Ho,2),_i=Jn=>{(function(Ui,qt){var Nn,ho;Nt(qt,!1);var Fo=BA(void 0,!0),xA=BA(void 0,!0),Ae=BA(void 0,!0),De=BA(void 0,!0),mA=or("jsoneditor:SortModal"),FA=L(qt,"id",9),le=L(qt,"json",9),Ne=L(qt,"rootPath",9),nt=L(qt,"onSort",9),rt=L(qt,"onClose",9),xt={value:1,label:"ascending"},On=[xt,{value:-1,label:"descending"}],Ti="".concat(FA(),":").concat(vt(Ne())),zi=BA((Nn=Qh()[Ti])===null||Nn===void 0?void 0:Nn.selectedProperty,!0),Xt=BA(((ho=Qh()[Ti])===null||ho===void 0?void 0:ho.selectedDirection)||xt,!0),Ji=BA(void 0,!0);function va(){try{var st,Oi,Xi;N(Ji,void 0);var Wn=((st=c(zi))===null||st===void 0?void 0:st.value)||((Oi=c(De))===null||Oi===void 0||(Oi=Oi[0])===null||Oi===void 0?void 0:Oi.value)||[],pn=(Xi=c(Xt))===null||Xi===void 0?void 0:Xi.value,_t=T$(le(),Ne(),Wn,pn);nt()!==void 0&&Ne()!==void 0&&nt()({operations:_t,rootPath:Ne(),itemPath:Wn,direction:pn}),rt()()}catch(sa){N(Ji,String(sa))}}function Ut(st){st.focus()}KA(()=>(K(le()),K(Ne())),()=>{N(Fo,Xe(le(),Ne()))}),KA(()=>c(Fo),()=>{N(xA,Array.isArray(c(Fo)))}),KA(()=>(c(xA),c(Fo)),()=>{N(Ae,c(xA)?AR(c(Fo)):void 0)}),KA(()=>(c(Ae),BI),()=>{N(De,c(Ae)?c(Ae).map(BI):void 0)}),KA(()=>(Qh(),c(zi),c(Xt)),()=>{Qh(Qh()[Ti]={selectedProperty:c(zi),selectedDirection:c(Xt)}),mA("store state in memory",Ti,Qh()[Ti])}),Rn(),ni(!0),Of(Ui,{get onClose(){return rt()},className:"jse-sort-modal",children:(st,Oi)=>{var Xi=EDA(),Wn=et(Xi),pn=it(()=>c(xA)?"Sort array items":"Sort object keys");wD(Wn,{get title(){return c(pn)},get onClose(){return rt()}});var _t=dA(_A(Wn,2)),sa=_A(dA(_t)),zo=dA(sa),D=_A(dA(zo)),M=dA(D),R=_A(zo),V=se=>{var Ee=dDA(),Pe=_A(dA(Ee));Cd(dA(Pe),{showChevron:!0,get items(){return c(De)},get value(){return c(zi)},set value(Re){N(zi,Re)},$$legacy:!0}),CA(se,Ee)};jA(R,se=>{c(xA),c(De),wA(()=>{var Ee;return c(xA)&&c(De)&&((Ee=c(De))===null||Ee===void 0?void 0:Ee.length)>1})&&se(V)});var _=_A(R),q=_A(dA(_));Cd(dA(q),{showChevron:!0,clearable:!1,get items(){return On},get value(){return c(Xt)},set value(se){N(Xt,se)},$$legacy:!0});var nA=_A(_t,2),cA=dA(nA),MA=se=>{var Ee=BDA(),Pe=dA(Ee);Se(()=>Lt(Pe,c(Ji))),CA(se,Ee)};jA(cA,se=>{c(Ji)&&se(MA)});var ne=dA(_A(nA,2));_r(()=>fe("click",ne,va)),ms(ne,se=>Ut?.(se)),Se(se=>{Dd(M,se),ne.disabled=(c(xA),c(De),c(zi),wA(()=>{var Ee;return!!(c(xA)&&c(De)&&((Ee=c(De))===null||Ee===void 0?void 0:Ee.length)>1)&&!c(zi)}))},[()=>(K(Ne()),K(en),K(Bl),wA(()=>Ne()&&!en(Ne())?Bl(Ne()):"(document root)"))]),CA(st,Xi)},$$slots:{default:!0}}),Ft()})(Jn,DI(()=>c(de),{onClose:()=>{var Ui;(Ui=c(de))===null||Ui===void 0||Ui.onClose(),N(de,void 0)}}))};jA(ya,Jn=>{c(de)&&Jn(_i)});var Eo=_A(ya,2),Za=Jn=>{p5A(Jn,DI(()=>c(Qe),{onClose:()=>{var Ui;(Ui=c(Qe))===null||Ui===void 0||Ui.onClose(),N(Qe,void 0)}}))};jA(Eo,Jn=>{c(Qe)&&Jn(Za)});var vo=_A(Eo,2),Ta=Jn=>{(function(Ui,qt){Nt(qt,!1);var Nn=BA(void 0,!0),ho=BA(void 0,!0),Fo=BA(void 0,!0),xA=BA(void 0,!0),Ae=or("jsoneditor:JSONEditorModal"),De=L(qt,"content",9),mA=L(qt,"path",9),FA=L(qt,"onPatch",9),le=L(qt,"readOnly",9),Ne=L(qt,"indentation",9),nt=L(qt,"tabSize",9),rt=L(qt,"truncateTextSize",9),xt=L(qt,"mainMenuBar",9),On=L(qt,"navigationBar",9),Ti=L(qt,"statusBar",9),zi=L(qt,"askToFormat",9),Xt=L(qt,"escapeControlCharacters",9),Ji=L(qt,"escapeUnicodeCharacters",9),va=L(qt,"flattenColumns",9),Ut=L(qt,"parser",9),st=L(qt,"validator",9),Oi=L(qt,"validationParser",9),Xi=L(qt,"pathParser",9),Wn=L(qt,"onRenderValue",9),pn=L(qt,"onClassName",9),_t=L(qt,"onRenderMenu",9),sa=L(qt,"onRenderContextMenu",9),zo=L(qt,"onSortModal",9),D=L(qt,"onTransformModal",9),M=L(qt,"onClose",9),R=BA(void 0,!0),V=BA(void 0,!0),_={mode:cA(De()),content:De(),selection:void 0,relativePath:mA()},q=BA([_],!0),nA=BA(void 0,!0);function cA(yA){return Nf(yA)&&Vo(yA.json)?Da.table:Da.tree}function MA(){var yA,WA=(yA=ki(c(q)))===null||yA===void 0?void 0:yA.selection;Kf(WA)&&c(R).scrollTo(It(WA))}function ne(){if(Ae("handleApply"),!le())try{N(nA,void 0);var yA=c(Nn).relativePath,WA=c(Nn).content,Ge=[{op:"replace",path:vt(yA),value:WW(WA,Ut()).json}];if(c(q).length>1){var ye=WW(c(q)[c(q).length-2].content,Ut()).json,be={json:tl(ye,Ge)},ot=Me(Me({},c(q)[c(q).length-2]||_),{},{content:be});N(q,[...c(q).slice(0,c(q).length-2),ot]),Ro(),MA()}else FA()(Ge),M()()}catch(Vt){N(nA,String(Vt))}}function se(){if(Ae("handleClose"),c(V))N(V,!1);else if(c(q).length>1){var yA;N(q,Yi(c(q))),Ro(),(yA=c(R))===null||yA===void 0||yA.focus(),MA(),N(nA,void 0)}else M()()}function Ee(yA){Ae("handleChange",yA),Le(WA=>Me(Me({},WA),{},{content:yA}))}function Pe(yA){Ae("handleChangeSelection",yA),Le(WA=>Me(Me({},WA),{},{selection:yA}))}function Re(yA){Ae("handleChangeMode",yA),Le(WA=>Me(Me({},WA),{},{mode:yA}))}function Le(yA){var WA=yA(ki(c(q)));N(q,[...Yi(c(q)),WA])}function ai(yA){N(nA,yA.toString()),console.error(yA)}function Yn(yA){var WA,{content:Ge,path:ye}=yA;Ae("handleJSONEditorModal",{content:Ge,path:ye});var be={mode:cA(Ge),content:Ge,selection:void 0,relativePath:ye};N(q,[...c(q),be]),Ro(),(WA=c(R))===null||WA===void 0||WA.focus()}function tA(yA){yA.focus()}As(()=>{var yA;(yA=c(R))===null||yA===void 0||yA.focus()}),KA(()=>c(q),()=>{N(Nn,ki(c(q))||_)}),KA(()=>c(q),()=>{N(ho,c(q).flatMap(yA=>yA.relativePath))}),KA(()=>(c(ho),Bl),()=>{N(Fo,en(c(ho))?"(document root)":Bl(c(ho)))}),KA(()=>K(Ut()),()=>{N(xA,xE(Ut().parse))}),Rn(),ni(!0),Of(Ui,{onClose:se,className:"jse-jsoneditor-modal",get fullscreen(){return c(V)},children:(yA,WA)=>{var Ge=CDA();tR(dA(Ge),{children:(ye,be)=>{var ot=cDA(),Vt=et(ot),Gi=it(()=>(c(q),wA(()=>c(q).length>1?" (".concat(c(q).length,")"):"")));wD(Vt,{get title(){var Ai;return"Edit nested content ".concat((Ai=c(Gi))!==null&&Ai!==void 0?Ai:"")},fullScreenButton:!0,onClose:se,get fullscreen(){return c(V)},set fullscreen(Ai){N(V,Ai)},$$legacy:!0});var Fn=_A(Vt,2),$i=_A(dA(Fn),2),Qo=_A($i,4);Oo(UZ(dA(Qo),{get externalMode(){return c(Nn),wA(()=>c(Nn).mode)},get content(){return c(Nn),wA(()=>c(Nn).content)},get selection(){return c(Nn),wA(()=>c(Nn).selection)},get readOnly(){return le()},get indentation(){return Ne()},get tabSize(){return nt()},get truncateTextSize(){return rt()},get statusBar(){return Ti()},get askToFormat(){return zi()},get mainMenuBar(){return xt()},get navigationBar(){return On()},get escapeControlCharacters(){return Xt()},get escapeUnicodeCharacters(){return Ji()},get flattenColumns(){return va()},get parser(){return Ut()},get parseMemoizeOne(){return c(xA)},get validator(){return st()},get validationParser(){return Oi()},get pathParser(){return Xi()},insideModal:!0,onError:ai,onChange:Ee,onChangeMode:Re,onSelect:Pe,get onRenderValue(){return Wn()},get onClassName(){return pn()},get onFocus(){return Qg},get onBlur(){return Qg},get onRenderMenu(){return _t()},get onRenderContextMenu(){return sa()},get onSortModal(){return zo()},get onTransformModal(){return D()},onJSONEditorModal:Yn,$$legacy:!0}),Ai=>N(R,Ai),()=>c(R));var $t=dA(_A(Qo,2)),$o=Ai=>{var yt=rDA(),Ci=dA(yt);Se(()=>Lt(Ci,c(nA))),CA(Ai,yt)};jA($t,Ai=>{c(nA)&&Ai($o)});var Zn=_A($t,2),Aa=Ai=>{var yt=sDA();tn(dA(yt),{get data(){return uz}}),fe("click",yt,se),CA(Ai,yt)};jA(Zn,Ai=>{c(q),wA(()=>c(q).length>1)&&Ai(Aa)});var mn=_A(Zn,2),Tt=Ai=>{var yt=lDA();_r(()=>fe("click",yt,ne)),ms(yt,Ci=>tA?.(Ci)),CA(Ai,yt)},an=Ai=>{var yt=gDA();fe("click",yt,se),CA(Ai,yt)};jA(mn,Ai=>{le()?Ai(an,!1):Ai(Tt)}),Se(()=>Dd($i,c(Fo))),CA(ye,ot)},$$slots:{default:!0}}),CA(yA,Ge)},$$slots:{default:!0}}),Ft()})(Jn,DI(()=>c(TA),{onClose:()=>{var Ui;(Ui=c(TA))===null||Ui===void 0||Ui.onClose(),N(TA,void 0)}}))};jA(vo,Jn=>{c(TA)&&Jn(Ta)}),Se(()=>cn=ii(Ho,1,"jse-main svelte-1l55585",null,cn,{"jse-focus":c(oA)})),fe("keydown",Ho,ra),CA(ge,fn)},$$slots:{default:!0}}),jt(e,"get",OA),jt(e,"set",ht),jt(e,"update",tt),jt(e,"patch",ze),jt(e,"select",Te),jt(e,"expand",ci),jt(e,"collapse",gn),jt(e,"transform",hn),jt(e,"validate",Ke),jt(e,"acceptAutoRepair",nn),jt(e,"scrollTo",Si),jt(e,"findElement",Zi),jt(e,"focus",bt),jt(e,"refresh",on),jt(e,"updateProps",G),jt(e,"destroy",dt),Ft(yo)}function $$(t){var{target:e,props:A}=t,i=amA(QDA,{target:e,props:A});return i.destroy=zt(function*(){return(function(n,o){var a=Z_.get(n);return a?(Z_.delete(n),a(o)):Promise.resolve()})(i)}),Ro(),i}var vc=class t{constructor(e){this.el=e}jsonString;editor=null;ngAfterViewInit(){let e={text:this.jsonString};setTimeout(()=>{this.editor=$$({target:document.getElementById("json-editor"),props:{content:e,mode:Da.text,mainMenuBar:!1,statusBar:!1}})})}getJsonString(){return this.editor?.get().text}static \u0275fac=function(A){return new(A||t)(ct(ce))};static \u0275cmp=SA({type:t,selectors:[["app-json-editor"]],inputs:{jsonString:"jsonString"},decls:1,vars:0,consts:[["id","json-editor",1,"json-editor-container","jse-theme-dark"]],template:function(A,i){A&1&&Kn(0,"div",0)},styles:[".jse-theme-dark[_ngcontent-%COMP%]{--jse-theme: dark;--jse-theme-color: #2f6dd0;--jse-theme-color-highlight: #467cd2;--jse-background-color: #1e1e1e;--jse-text-color: #d4d4d4;--jse-text-color-inverse: #4d4d4d;--jse-main-border: 1px solid #4f4f4f;--jse-menu-color: #fff;--jse-modal-background: #2f2f2f;--jse-modal-overlay-background: rgba(0, 0, 0, .5);--jse-modal-code-background: #2f2f2f;--jse-tooltip-color: var(--jse-text-color);--jse-tooltip-background: #4b4b4b;--jse-tooltip-border: 1px solid #737373;--jse-tooltip-action-button-color: inherit;--jse-tooltip-action-button-background: #737373;--jse-panel-background: #333333;--jse-panel-background-border: 1px solid #464646;--jse-panel-color: var(--jse-text-color);--jse-panel-color-readonly: #737373;--jse-panel-border: 1px solid #3c3c3c;--jse-panel-button-color-highlight: #e5e5e5;--jse-panel-button-background-highlight: #464646;--jse-navigation-bar-background: #656565;--jse-navigation-bar-background-highlight: #7e7e7e;--jse-navigation-bar-dropdown-color: var(--jse-text-color);--jse-context-menu-background: #4b4b4b;--jse-context-menu-background-highlight: #595959;--jse-context-menu-separator-color: #595959;--jse-context-menu-color: var(--jse-text-color);--jse-context-menu-pointer-background: #737373;--jse-context-menu-pointer-background-highlight: #818181;--jse-context-menu-pointer-color: var(--jse-context-menu-color);--jse-key-color: #9cdcfe;--jse-value-color: var(--jse-text-color);--jse-value-color-number: #b5cea8;--jse-value-color-boolean: #569cd6;--jse-value-color-null: #569cd6;--jse-value-color-string: #ce9178;--jse-value-color-url: #ce9178;--jse-delimiter-color: #949494;--jse-edit-outline: 2px solid var(--jse-text-color);--jse-selection-background-color: #464646;--jse-selection-background-inactive-color: #333333;--jse-hover-background-color: #343434;--jse-active-line-background-color: rgba(255, 255, 255, .06);--jse-search-match-background-color: #343434;--jse-collapsed-items-background-color: #333333;--jse-collapsed-items-selected-background-color: #565656;--jse-collapsed-items-link-color: #b2b2b2;--jse-collapsed-items-link-color-highlight: #ec8477;--jse-search-match-color: #724c27;--jse-search-match-outline: 1px solid #966535;--jse-search-match-active-color: #9f6c39;--jse-search-match-active-outline: 1px solid #bb7f43;--jse-tag-background: #444444;--jse-tag-color: #bdbdbd;--jse-table-header-background: #333333;--jse-table-header-background-highlight: #424242;--jse-table-row-odd-background: rgba(255, 255, 255, .1);--jse-input-background: #3d3d3d;--jse-input-border: var(--jse-main-border);--jse-button-background: #808080;--jse-button-background-highlight: #7a7a7a;--jse-button-color: #e0e0e0;--jse-button-secondary-background: #494949;--jse-button-secondary-background-highlight: #5d5d5d;--jse-button-secondary-background-disabled: #9d9d9d;--jse-button-secondary-color: var(--jse-text-color);--jse-a-color: #55abff;--jse-a-color-highlight: #4387c9;--jse-svelte-select-background: #3d3d3d;--jse-svelte-select-border: 1px solid #4f4f4f;--list-background: #3d3d3d;--item-hover-bg: #505050;--multi-item-bg: #5b5b5b;--input-color: #d4d4d4;--multi-clear-bg: #8a8a8a;--multi-item-clear-icon-color: #d4d4d4;--multi-item-outline: 1px solid #696969;--list-shadow: 0 2px 8px 0 rgba(0, 0, 0, .4);--jse-color-picker-background: #656565;--jse-color-picker-border-box-shadow: #8c8c8c 0 0 0 1px}.json-editor-container[_ngcontent-%COMP%]{height:100%} .jse-message.jse-error{display:none} .cm-gutters.cm-gutters-before{display:none} .jse-text-mode{border-radius:10px} .jse-contents{border-radius:10px;border-bottom:1px solid #4f4f4f}"]})};var uDA=(t,e)=>e.name;function fDA(t,e){if(t&1&&y(0),t&2){let A=p();ue(" Configure ",A.selectedBuiltInTool," ")}}function pDA(t,e){if(t&1&&y(0),t&2){let A=p();ue(" ",A.isEditMode?"Edit Built-in Tool":"Add Built-in Tool"," ")}}function mDA(t,e){if(t&1){let A=hA();B(0,"div",8),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.onToolSelected(n))}),B(1,"mat-icon",9),y(2),Q(),B(3,"span",10),y(4),Q()()}if(t&2){let A=e.$implicit,i=p(3);RA("selected",i.selectedBuiltInTool===A),u(2),lA(i.getToolIcon(A)),u(2),lA(A)}}function wDA(t,e){if(t&1&&(B(0,"div",4)(1,"h3",5),y(2),Q(),B(3,"div",6),Je(4,mDA,5,4,"div",7,hi),Q()()),t&2){let A=e.$implicit;u(2),lA(A.name),u(2),Oe(A.tools)}}function DDA(t,e){if(t&1&&(B(0,"div",1),Je(1,wDA,6,1,"div",4,uDA),Q()),t&2){let A=p();u(),Oe(A.toolCategories)}}function yDA(t,e){if(t&1&&(B(0,"div",2)(1,"h3",11),y(2,"Configure Tool Arguments"),Q(),QA(3,"app-json-editor",12),Q()),t&2){let A=p();u(3),H("jsonString",A.toolArgsString)}}function vDA(t,e){if(t&1){let A=hA();B(0,"button",14),U("click",function(){T(A);let n=p(2);return J(n.backToToolSelection())}),y(1,"Back"),Q()}}function bDA(t,e){if(t&1){let A=hA();O(0,vDA,2,0,"button",13),B(1,"button",14),U("click",function(){T(A);let n=p();return J(n.saveArgs())}),y(2),Q()}if(t&2){let A=p();Y(A.isEditMode?-1:0),u(2),lA(A.isEditMode?"Save":"Create")}}function MDA(t,e){if(t&1){let A=hA();B(0,"button",14),U("click",function(){T(A);let n=p();return J(n.cancel())}),y(1,"Cancel"),Q(),B(2,"button",15),U("click",function(){T(A);let n=p();return J(n.addTool())}),y(3),Q()}if(t&2){let A=p();u(3),ue(" ",A.isEditMode?"Save":"Create"," ")}}var kd=class t{constructor(e,A){this.data=e;this.dialogRef=A}jsonEditorComponent;selectedBuiltInTool="google_search";toolCategories=[{name:"Search Tools",tools:["google_search","EnterpriseWebSearchTool","VertexAiSearchTool"]},{name:"Context Tools",tools:["FilesRetrieval","load_memory","preload_memory","url_context","VertexAiRagRetrieval"]},{name:"Agent Function Tools",tools:["exit_loop","get_user_choice","load_artifacts","LongRunningFunctionTool"]}];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);isEditMode=!1;showArgsEditor=!1;toolArgs={};toolArgsString="";ngOnInit(){if(this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName){this.selectedBuiltInTool=this.data.toolName;let e=this.builtInToolArgs.get(this.data.toolName);if(e&&e.length>0){if(this.data.toolArgs)this.toolArgs=gA({},this.data.toolArgs),delete this.toolArgs.skip_summarization;else{this.toolArgs={};for(let A of e)this.toolArgs[A]=""}this.toolArgsString=JSON.stringify(this.toolArgs,null,2),this.showArgsEditor=!0}}}onToolSelected(e){this.selectedBuiltInTool=e;let A=this.builtInToolArgs.get(e);A&&A.length>0&&(this.initializeToolArgs(e,A),this.showArgsEditor=!0)}initializeToolArgs(e,A){this.toolArgs={};for(let i of A)this.toolArgs[i]="";this.toolArgsString=JSON.stringify(this.toolArgs,null,2)}backToToolSelection(){this.showArgsEditor=!1,this.toolArgs={},this.toolArgsString=""}saveArgs(){if(this.jsonEditorComponent)try{this.toolArgsString=this.jsonEditorComponent.getJsonString(),this.toolArgs=JSON.parse(this.toolArgsString)}catch(e){alert("Invalid JSON: "+e);return}this.addTool()}addTool(){let e={toolType:"Built-in tool",name:this.selectedBuiltInTool,isEditMode:this.isEditMode};Object.keys(this.toolArgs).length>0&&(e.args=this.toolArgs),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}getToolIcon(e){return sE(e,"Built-in tool")}static \u0275fac=function(A){return new(A||t)(ct(qo),ct(lo))};static \u0275cmp=SA({type:t,selectors:[["app-built-in-tool-dialog"]],viewQuery:function(A,i){if(A&1&&Jt(vc,5),A&2){let n;ae(n=re())&&(i.jsonEditorComponent=n.first)}},decls:9,vars:3,consts:[["mat-dialog-title","",1,"dialog-title"],[1,"tool-categories-container"],[1,"args-editor-container"],["align","end"],[1,"tool-category"],[1,"category-title"],[1,"tool-list"],[1,"tool-item",3,"selected"],[1,"tool-item",3,"click"],[1,"tool-icon"],[1,"tool-name"],[1,"args-editor-title"],[3,"jsonString"],["mat-button",""],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(B(0,"h2",0),O(1,fDA,1,1)(2,pDA,1,1),Q(),B(3,"mat-dialog-content"),O(4,DDA,3,0,"div",1)(5,yDA,4,1,"div",2),Q(),B(6,"mat-dialog-actions",3),O(7,bDA,3,2)(8,MDA,4,1),Q()),A&2&&(u(),Y(i.showArgsEditor?1:2),u(3),Y(i.showArgsEditor?5:4),u(3),Y(i.showArgsEditor?7:8))},dependencies:[si,ln,fa,Na,Wt,pa,pi,vc],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.tool-categories-container[_ngcontent-%COMP%]{padding:16px 0}.tool-category[_ngcontent-%COMP%]{margin-bottom:24px}.tool-category[_ngcontent-%COMP%]:last-child{margin-bottom:0}.category-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 12px;padding-left:8px}.tool-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:all .2s ease;border:1px solid var(--builder-tool-item-border-color);min-width:0}.tool-item.selected[_ngcontent-%COMP%]{border:1px solid #8ab4f8}.tool-item[_ngcontent-%COMP%] .tool-icon[_ngcontent-%COMP%]{color:#8ab4f8;margin-right:12px;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%]{font-family:Google Sans;font-size:14px;color:var(--mdc-dialog-supporting-text-color)!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.args-editor-container[_ngcontent-%COMP%]{padding:16px 0}.args-editor-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 16px}"]})};function SDA(t,e){if(t&1){let A=hA();Dl(0),B(1,"div",6)(2,"div",7),U("click",function(){T(A);let n=p();return J(n.toggleToolInfo())}),B(3,"mat-icon",8),y(4,"info"),Q(),B(5,"div",9)(6,"span"),y(7,"Tool Information"),Q()(),B(8,"button",10)(9,"mat-icon"),y(10),Q()()(),B(11,"div",11)(12,"div",12)(13,"div",13),y(14),Q(),B(15,"div",14),y(16),Q()(),B(17,"div",15)(18,"a",16)(19,"mat-icon"),y(20,"open_in_new"),Q(),B(21,"span"),y(22,"View Official Documentation"),Q()()()()(),yl()}if(t&2){let A,i,n,o=p();u(10),lA(o.isToolInfoExpanded?"expand_less":"expand_more"),u(),RA("expanded",o.isToolInfoExpanded),u(3),lA((A=o.getToolInfo())==null?null:A.shortDescription),u(2),lA((i=o.getToolInfo())==null?null:i.detailedDescription),u(2),H("href",(n=o.getToolInfo())==null?null:n.docLink,Go)}}function kDA(t,e){t&1&&(B(0,"mat-hint",19),y(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),Q())}function xDA(t,e){if(t&1){let A=hA();B(0,"mat-form-field",2)(1,"mat-label"),y(2),Q(),B(3,"input",17),Di("ngModelChange",function(n){T(A);let o=p();return di(o.inputValue,n)||(o.inputValue=n),J(n)}),U("keydown",function(n){T(A);let o=p();return J(o.onKeyDown(n))}),Q(),Et(4,kDA,2,0,"mat-hint",18),Q()}if(t&2){let A=p();u(2),lA(A.data.inputLabel||"Input"),u(),wi("ngModel",A.inputValue),H("placeholder",A.data.inputPlaceholder||"Enter value"),u(),H("ngIf",!A.isInputValid())}}var bc=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.inputValue=A.inputValue||""}inputValue="";isToolInfoExpanded=!1;isInputValid(){let e=this.inputValue.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}onCancel(){this.dialogRef.close()}onConfirm(){if(this.data.showInput){let e=this.inputValue.trim();if(!this.isInputValid())return;this.dialogRef.close(e)}else this.dialogRef.close("confirm")}onKeyDown(e){e.key==="Enter"&&this.data.showInput&&this.onConfirm()}getToolInfo(){if(this.data.toolType)return ic.getToolDetailedInfo(this.data.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-confirmation-dialog"]],decls:12,vars:6,consts:[["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%","margin-top","16px"],["align","end"],["mat-button","",3,"click"],["mat-button","","color","primary","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","cdkFocusInitial","",3,"ngModelChange","keydown","ngModel","placeholder"],["style","font-size: 11px; color: #666;",4,"ngIf"],[2,"font-size","11px","color","#666"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1),Q(),B(2,"mat-dialog-content"),Et(3,SDA,23,6,"ng-container",1),B(4,"p"),y(5),Q(),O(6,xDA,5,4,"mat-form-field",2),Q(),B(7,"mat-dialog-actions",3)(8,"button",4),U("click",function(){return i.onCancel()}),y(9,"Cancel"),Q(),B(10,"button",5),U("click",function(){return i.onConfirm()}),y(11),Q()()),A&2&&(u(),lA(i.data.title),u(2),H("ngIf",i.data.showToolInfo&&i.getToolInfo()),u(2),lA(i.data.message),u(),Y(i.data.showInput?6:-1),u(4),H("disabled",i.data.showInput&&!i.isInputValid()),u(),ue(" ",i.data.confirmButtonText||"Confirm"," "))},dependencies:[si,Js,qi,pi,ji,Wt,fa,Na,pa,Ya,Ko,vs,s1,Ps,ua,ln,Dn,yn,ko],styles:["mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px;color:var(--mdc-dialog-supporting-text-color)}mat-dialog-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)}.tool-info-container[_ngcontent-%COMP%]{border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mdc-dialog-supporting-text-color)!important;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};var tAA=["*",[["mat-chip-avatar"],["","matChipAvatar",""]],[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],iAA=["*","mat-chip-avatar, [matChipAvatar]","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function _DA(t,e){t&1&&(B(0,"span",3),Ve(1,1),Q())}function RDA(t,e){t&1&&(B(0,"span",6),Ve(1,2),Q())}function NDA(t,e){t&1&&(B(0,"span",3),Ve(1,1),B(2,"span",7),Ct(),B(3,"svg",8),QA(4,"path",9),Q()()())}function FDA(t,e){t&1&&(B(0,"span",6),Ve(1,2),Q())}var LDA=`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} +`;var nAA=["*"],GDA=`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} +`,eN=new kA("mat-chips-default-options",{providedIn:"root",factory:()=>({separatorKeyCodes:[13]})}),XR=new kA("MatChipAvatar"),AAA=new kA("MatChipTrailingIcon"),eAA=new kA("MatChipEdit"),$R=new kA("MatChipRemove"),tN=new kA("MatChip"),oAA=(()=>{class t{_elementRef=w(ce);_parentChip=w(tN);_isPrimary=!0;_isLeading=!1;get disabled(){return this._disabled||this._parentChip?.disabled||!1}set disabled(A){this._disabled=A}_disabled=!1;tabIndex=-1;_allowFocusWhenDisabled=!1;_getDisabledAttribute(){return this.disabled&&!this._allowFocusWhenDisabled?"":null}constructor(){w(eo).load(lr),this._elementRef.nativeElement.nodeName==="BUTTON"&&this._elementRef.nativeElement.setAttribute("type","button")}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matChipContent",""]],hostAttrs:[1,"mat-mdc-chip-action","mdc-evolution-chip__action","mdc-evolution-chip__action--presentational"],hostVars:8,hostBindings:function(i,n){i&2&&(te("disabled",n._getDisabledAttribute())("aria-disabled",n.disabled),RA("mdc-evolution-chip__action--primary",n._isPrimary)("mdc-evolution-chip__action--secondary",!n._isPrimary)("mdc-evolution-chip__action--trailing",!n._isPrimary&&!n._isLeading))},inputs:{disabled:[2,"disabled","disabled",Be],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?-1:Cn(A)],_allowFocusWhenDisabled:"_allowFocusWhenDisabled"}})}return t})(),iN=(()=>{class t extends oAA{_getTabindex(){return this.disabled&&!this._allowFocusWhenDisabled?null:this.tabIndex.toString()}_handleClick(A){!this.disabled&&this._isPrimary&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&this._isPrimary&&!this._parentChip._isEditing&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matChipAction",""]],hostVars:3,hostBindings:function(i,n){i&1&&U("click",function(a){return n._handleClick(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(te("tabindex",n._getTabindex()),RA("mdc-evolution-chip__action--presentational",!1))},features:[mt]})}return t})(),aAA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["mat-chip-avatar"],["","matChipAvatar",""]],hostAttrs:["role","img",1,"mat-mdc-chip-avatar","mdc-evolution-chip__icon","mdc-evolution-chip__icon--primary"],features:[Bt([{provide:XR,useExisting:t}])]})}return t})();var rAA=(()=>{class t extends iN{_isPrimary=!1;_handleClick(A){this.disabled||(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matChipRemove",""]],hostAttrs:["role","button",1,"mat-mdc-chip-remove","mat-mdc-chip-trailing-icon","mat-focus-indicator","mdc-evolution-chip__icon","mdc-evolution-chip__icon--trailing"],hostVars:1,hostBindings:function(i,n){i&2&&te("aria-hidden",null)},features:[Bt([{provide:$R,useExisting:t}]),mt]})}return t})(),t3=(()=>{class t{_changeDetectorRef=w(wt);_elementRef=w(ce);_tagName=w(ZF);_ngZone=w(qe);_focusMonitor=w($a);_globalRippleOptions=w(r2,{optional:!0});_document=w(ti);_onFocus=new ie;_onBlur=new ie;_isBasicChip=!1;role=null;_hasFocusInternal=!1;_pendingFocus=!1;_actionChanges;_animationsDisabled=An();_allLeadingIcons;_allTrailingIcons;_allEditIcons;_allRemoveIcons;_hasFocus(){return this._hasFocusInternal}id=w(In).getId("mat-mdc-chip-");ariaLabel=null;ariaDescription=null;_chipListDisabled=!1;_hadFocusOnRemove=!1;_textElement;get value(){return this._value!==void 0?this._value:this._textElement.textContent.trim()}set value(A){this._value=A}_value;color;removable=!0;highlighted=!1;disableRipple=!1;get disabled(){return this._disabled||this._chipListDisabled}set disabled(A){this._disabled=A}_disabled=!1;removed=new LA;destroyed=new LA;basicChipAttrName="mat-basic-chip";leadingIcon;editIcon;trailingIcon;removeIcon;primaryAction;_rippleLoader=w(Sp);_injector=w(Dt);constructor(){let A=w(eo);A.load(lr),A.load(o2),this._monitorFocus(),this._rippleLoader?.configureRipple(this._elementRef.nativeElement,{className:"mat-mdc-chip-ripple",disabled:this._isRippleDisabled()})}ngOnInit(){this._isBasicChip=this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName)||this._tagName.toLowerCase()===this.basicChipAttrName}ngAfterViewInit(){this._textElement=this._elementRef.nativeElement.querySelector(".mat-mdc-chip-action-label"),this._pendingFocus&&(this._pendingFocus=!1,this.focus())}ngAfterContentInit(){this._actionChanges=Ki(this._allLeadingIcons.changes,this._allTrailingIcons.changes,this._allEditIcons.changes,this._allRemoveIcons.changes).subscribe(()=>this._changeDetectorRef.markForCheck())}ngDoCheck(){this._rippleLoader.setDisabled(this._elementRef.nativeElement,this._isRippleDisabled())}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement),this._actionChanges?.unsubscribe(),this.destroyed.emit({chip:this}),this.destroyed.complete()}remove(){this.removable&&(this._hadFocusOnRemove=this._hasFocus(),this.removed.emit({chip:this}))}_isRippleDisabled(){return this.disabled||this.disableRipple||this._animationsDisabled||this._isBasicChip||!this._hasInteractiveActions()||!!this._globalRippleOptions?.disabled}_hasTrailingIcon(){return!!(this.trailingIcon||this.removeIcon)}_handleKeydown(A){(A.keyCode===8&&!A.repeat||A.keyCode===46)&&(A.preventDefault(),this.remove())}focus(){this.disabled||(this.primaryAction?this.primaryAction.focus():this._pendingFocus=!0)}_getSourceAction(A){return this._getActions().find(i=>{let n=i._elementRef.nativeElement;return n===A||n.contains(A)})}_getActions(){let A=[];return this.editIcon&&A.push(this.editIcon),this.primaryAction&&A.push(this.primaryAction),this.removeIcon&&A.push(this.removeIcon),A}_handlePrimaryActionInteraction(){}_hasInteractiveActions(){return this._getActions().length>0}_edit(A){}_monitorFocus(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{let i=A!==null;i!==this._hasFocusInternal&&(this._hasFocusInternal=i,i?this._onFocus.next({chip:this}):(this._changeDetectorRef.markForCheck(),setTimeout(()=>this._ngZone.run(()=>this._onBlur.next({chip:this})))))})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-basic-chip"],["","mat-basic-chip",""],["mat-chip"],["","mat-chip",""]],contentQueries:function(i,n,o){if(i&1&&jo(o,XR,5)(o,eAA,5)(o,AAA,5)(o,$R,5)(o,XR,5)(o,AAA,5)(o,eAA,5)(o,$R,5),i&2){let a;ae(a=re())&&(n.leadingIcon=a.first),ae(a=re())&&(n.editIcon=a.first),ae(a=re())&&(n.trailingIcon=a.first),ae(a=re())&&(n.removeIcon=a.first),ae(a=re())&&(n._allLeadingIcons=a),ae(a=re())&&(n._allTrailingIcons=a),ae(a=re())&&(n._allEditIcons=a),ae(a=re())&&(n._allRemoveIcons=a)}},viewQuery:function(i,n){if(i&1&&Jt(iN,5),i&2){let o;ae(o=re())&&(n.primaryAction=o.first)}},hostAttrs:[1,"mat-mdc-chip"],hostVars:31,hostBindings:function(i,n){i&1&&U("keydown",function(a){return n._handleKeydown(a)}),i&2&&(ha("id",n.id),te("role",n.role)("aria-label",n.ariaLabel),ro("mat-"+(n.color||"primary")),RA("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",n.leadingIcon)("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-basic-chip",n._isBasicChip)("mat-mdc-standard-chip",!n._isBasicChip)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon())("_mat-animation-noopable",n._animationsDisabled))},inputs:{role:"role",id:"id",ariaLabel:[0,"aria-label","ariaLabel"],ariaDescription:[0,"aria-description","ariaDescription"],value:"value",color:"color",removable:[2,"removable","removable",Be],highlighted:[2,"highlighted","highlighted",Be],disableRipple:[2,"disableRipple","disableRipple",Be],disabled:[2,"disabled","disabled",Be]},outputs:{removed:"removed",destroyed:"destroyed"},exportAs:["matChip"],features:[Bt([{provide:tN,useExisting:t}])],ngContentSelectors:iAA,decls:8,vars:2,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipContent",""],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"]],template:function(i,n){i&1&&(Rt(tAA),QA(0,"span",0),B(1,"span",1)(2,"span",2),O(3,_DA,2,0,"span",3),B(4,"span",4),Ve(5),QA(6,"span",5),Q()()(),O(7,RDA,2,0,"span",6)),i&2&&(u(3),Y(n.leadingIcon?3:-1),u(4),Y(n._hasTrailingIcon()?7:-1))},dependencies:[oAA],styles:[`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} +`],encapsulation:2,changeDetection:0})}return t})();var nN=(()=>{class t extends t3{_defaultOptions=w(eN,{optional:!0});chipListSelectable=!0;_chipListMultiple=!1;_chipListHideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get selectable(){return this._selectable&&this.chipListSelectable}set selectable(A){this._selectable=A,this._changeDetectorRef.markForCheck()}_selectable=!0;get selected(){return this._selected}set selected(A){this._setSelectedState(A,!1,!0)}_selected=!1;get ariaSelected(){return this.selectable?this.selected.toString():null}basicChipAttrName="mat-basic-chip-option";selectionChange=new LA;ngOnInit(){super.ngOnInit(),this.role="presentation"}select(){this._setSelectedState(!0,!1,!0)}deselect(){this._setSelectedState(!1,!1,!0)}selectViaInteraction(){this._setSelectedState(!0,!0,!0)}toggleSelected(A=!1){return this._setSelectedState(!this.selected,A,!0),this.selected}_handlePrimaryActionInteraction(){this.disabled||(this.focus(),this.selectable&&this.toggleSelected(!0))}_hasLeadingGraphic(){return this.leadingIcon?!0:!this._chipListHideSingleSelectionIndicator||this._chipListMultiple}_setSelectedState(A,i,n){A!==this.selected&&(this._selected=A,n&&this.selectionChange.emit({source:this,isUserInput:i,selected:this.selected}),this._changeDetectorRef.markForCheck())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-basic-chip-option"],["","mat-basic-chip-option",""],["mat-chip-option"],["","mat-chip-option",""]],hostAttrs:[1,"mat-mdc-chip","mat-mdc-chip-option"],hostVars:37,hostBindings:function(i,n){i&2&&(ha("id",n.id),te("tabindex",null)("aria-label",null)("aria-description",null)("role",n.role),RA("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--filter",!n._isBasicChip)("mdc-evolution-chip--selectable",!n._isBasicChip)("mat-mdc-chip-selected",n.selected)("mat-mdc-chip-multiple",n._chipListMultiple)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-chip-with-avatar",n.leadingIcon)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--selected",n.selected)("mdc-evolution-chip--selecting",!n._animationsDisabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-primary-graphic",n._hasLeadingGraphic())("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon()))},inputs:{selectable:[2,"selectable","selectable",Be],selected:[2,"selected","selected",Be]},outputs:{selectionChange:"selectionChange"},features:[Bt([{provide:t3,useExisting:t},{provide:tN,useExisting:t}]),mt],ngContentSelectors:iAA,decls:8,vars:6,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipAction","","role","option",3,"_allowFocusWhenDisabled"],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"],[1,"mdc-evolution-chip__checkmark"],["viewBox","-2 -3 30 30","focusable","false","aria-hidden","true",1,"mdc-evolution-chip__checkmark-svg"],["fill","none","stroke","currentColor","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-evolution-chip__checkmark-path"]],template:function(i,n){i&1&&(Rt(tAA),QA(0,"span",0),B(1,"span",1)(2,"button",2),O(3,NDA,5,0,"span",3),B(4,"span",4),Ve(5),QA(6,"span",5),Q()()(),O(7,FDA,2,0,"span",6)),i&2&&(u(2),H("_allowFocusWhenDisabled",!0),te("aria-description",n.ariaDescription)("aria-label",n.ariaLabel)("aria-selected",n.ariaSelected),u(),Y(n._hasLeadingGraphic()?3:-1),u(4),Y(n._hasTrailingIcon()?7:-1))},dependencies:[iN],styles:[LDA],encapsulation:2,changeDetection:0})}return t})();var oN=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_dir=w(fo,{optional:!0});_lastDestroyedFocusedChipIndex=null;_keyManager;_destroyed=new ie;_defaultRole="presentation";get chipFocusChanges(){return this._getChipStream(A=>A._onFocus)}get chipDestroyedChanges(){return this._getChipStream(A=>A.destroyed)}get chipRemovedChanges(){return this._getChipStream(A=>A.removed)}get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._syncChipsState()}_disabled=!1;get empty(){return!this._chips||this._chips.length===0}get role(){return this._explicitRole?this._explicitRole:this.empty?null:this._defaultRole}tabIndex=0;set role(A){this._explicitRole=A}_explicitRole=null;get focused(){return this._hasFocusedChip()}_chips;_chipActions=new xg;constructor(){}ngAfterViewInit(){this._setUpFocusManagement(),this._trackChipSetChanges(),this._trackDestroyedFocusedChip()}ngOnDestroy(){this._keyManager?.destroy(),this._chipActions.destroy(),this._destroyed.next(),this._destroyed.complete()}_hasFocusedChip(){return this._chips&&this._chips.some(A=>A._hasFocus())}_syncChipsState(){this._chips?.forEach(A=>{A._chipListDisabled=this._disabled,A._changeDetectorRef.markForCheck()})}focus(){}_handleKeydown(A){this._originatesFromChip(A)&&this._keyManager.onKeydown(A)}_isValidIndex(A){return A>=0&&Athis._elementRef.nativeElement.tabIndex=A))}_getChipStream(A){return this._chips.changes.pipe(Sn(null),Ei(()=>Ki(...this._chips.map(A))))}_originatesFromChip(A){let i=A.target;for(;i&&i!==this._elementRef.nativeElement;){if(i.classList.contains("mat-mdc-chip"))return!0;i=i.parentElement}return!1}_setUpFocusManagement(){this._chips.changes.pipe(Sn(this._chips)).subscribe(A=>{let i=[];A.forEach(n=>n._getActions().forEach(o=>i.push(o))),this._chipActions.reset(i),this._chipActions.notifyOnChanges()}),this._keyManager=new H0(this._chipActions).withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr").withHomeAndEnd().skipPredicate(A=>this._skipPredicate(A)),this.chipFocusChanges.pipe(Qt(this._destroyed)).subscribe(({chip:A})=>{let i=A._getSourceAction(document.activeElement);i&&this._keyManager.updateActiveItem(i)}),this._dir?.change.pipe(Qt(this._destroyed)).subscribe(A=>this._keyManager.withHorizontalOrientation(A))}_skipPredicate(A){return A.disabled}_trackChipSetChanges(){this._chips.changes.pipe(Sn(null),Qt(this._destroyed)).subscribe(()=>{this.disabled&&Promise.resolve().then(()=>this._syncChipsState()),this._redirectDestroyedChipFocus()})}_trackDestroyedFocusedChip(){this.chipDestroyedChanges.pipe(Qt(this._destroyed)).subscribe(A=>{let n=this._chips.toArray().indexOf(A.chip),o=A.chip._hasFocus(),a=A.chip._hadFocusOnRemove&&this._keyManager.activeItem&&A.chip._getActions().includes(this._keyManager.activeItem),r=o||a;this._isValidIndex(n)&&r&&(this._lastDestroyedFocusedChipIndex=n)})}_redirectDestroyedChipFocus(){if(this._lastDestroyedFocusedChipIndex!=null){if(this._chips.length){let A=Math.min(this._lastDestroyedFocusedChipIndex,this._chips.length-1),i=this._chips.toArray()[A];i.disabled?this._chips.length===1?this.focus():this._keyManager.setPreviousItemActive():i.focus()}else this.focus();this._lastDestroyedFocusedChipIndex=null}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-chip-set"]],contentQueries:function(i,n,o){if(i&1&&jo(o,t3,5),i&2){let a;ae(a=re())&&(n._chips=a)}},hostAttrs:[1,"mat-mdc-chip-set","mdc-evolution-chip-set"],hostVars:1,hostBindings:function(i,n){i&1&&U("keydown",function(a){return n._handleKeydown(a)}),i&2&&te("role",n.role)},inputs:{disabled:[2,"disabled","disabled",Be],role:"role",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:Cn(A)]},ngContentSelectors:nAA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Rt(),wn(0,"div",0),Ve(1),Gn())},styles:[`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} +`],encapsulation:2,changeDetection:0})}return t})(),AN=class{source;value;constructor(e,A){this.source=e,this.value=A}},KDA={provide:as,useExisting:Ja(()=>aN),multi:!0},aN=(()=>{class t extends oN{_onTouched=()=>{};_onChange=()=>{};_defaultRole="listbox";_defaultOptions=w(eN,{optional:!0});get multiple(){return this._multiple}set multiple(A){this._multiple=A,this._syncListboxProperties()}_multiple=!1;get selected(){let A=this._chips.toArray().filter(i=>i.selected);return this.multiple?A:A[0]}ariaOrientation="horizontal";get selectable(){return this._selectable}set selectable(A){this._selectable=A,this._syncListboxProperties()}_selectable=!0;compareWith=(A,i)=>A===i;required=!1;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncListboxProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get chipSelectionChanges(){return this._getChipStream(A=>A.selectionChange)}get chipBlurChanges(){return this._getChipStream(A=>A._onBlur)}get value(){return this._value}set value(A){this._chips&&this._chips.length&&this._setSelectionByValue(A,!1),this._value=A}_value;change=new LA;_chips=void 0;ngAfterContentInit(){this._chips.changes.pipe(Sn(null),Qt(this._destroyed)).subscribe(()=>{this.value!==void 0&&Promise.resolve().then(()=>{this._setSelectionByValue(this.value,!1)}),this._syncListboxProperties()}),this.chipBlurChanges.pipe(Qt(this._destroyed)).subscribe(()=>this._blur()),this.chipSelectionChanges.pipe(Qt(this._destroyed)).subscribe(A=>{this.multiple||this._chips.forEach(i=>{i!==A.source&&i._setSelectedState(!1,!1,!1)}),A.isUserInput&&this._propagateChanges()})}focus(){if(this.disabled)return;let A=this._getFirstSelectedChip();A&&!A.disabled?A.focus():this._chips.length>0?this._keyManager.setFirstItemActive():this._elementRef.nativeElement.focus()}writeValue(A){A!=null?this.value=A:this.value=void 0}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}_setSelectionByValue(A,i=!0){this._clearSelection(),Array.isArray(A)?A.forEach(n=>this._selectValue(n,i)):this._selectValue(A,i)}_blur(){this.disabled||setTimeout(()=>{this.focused||this._markAsTouched()})}_keydown(A){A.keyCode===9&&super._allowFocusEscape()}_markAsTouched(){this._onTouched(),this._changeDetectorRef.markForCheck()}_propagateChanges(){let A=null;Array.isArray(this.selected)?A=this.selected.map(i=>i.value):A=this.selected?this.selected.value:void 0,this._value=A,this.change.emit(new AN(this,A)),this._onChange(A),this._changeDetectorRef.markForCheck()}_clearSelection(A){this._chips.forEach(i=>{i!==A&&i.deselect()})}_selectValue(A,i){let n=this._chips.find(o=>o.value!=null&&this.compareWith(o.value,A));return n&&(i?n.selectViaInteraction():n.select()),n}_syncListboxProperties(){this._chips&&Promise.resolve().then(()=>{this._chips.forEach(A=>{A._chipListMultiple=this.multiple,A.chipListSelectable=this._selectable,A._chipListHideSingleSelectionIndicator=this.hideSingleSelectionIndicator,A._changeDetectorRef.markForCheck()})})}_getFirstSelectedChip(){return Array.isArray(this.selected)?this.selected.length?this.selected[0]:void 0:this.selected}_skipPredicate(A){return!1}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-chip-listbox"]],contentQueries:function(i,n,o){if(i&1&&jo(o,nN,5),i&2){let a;ae(a=re())&&(n._chips=a)}},hostAttrs:[1,"mdc-evolution-chip-set","mat-mdc-chip-listbox"],hostVars:10,hostBindings:function(i,n){i&1&&U("focus",function(){return n.focus()})("blur",function(){return n._blur()})("keydown",function(a){return n._keydown(a)}),i&2&&(ha("tabIndex",n.disabled||n.empty?-1:n.tabIndex),te("role",n.role)("aria-required",n.role?n.required:null)("aria-disabled",n.disabled.toString())("aria-multiselectable",n.multiple)("aria-orientation",n.ariaOrientation),RA("mat-mdc-chip-list-disabled",n.disabled)("mat-mdc-chip-list-required",n.required))},inputs:{multiple:[2,"multiple","multiple",Be],ariaOrientation:[0,"aria-orientation","ariaOrientation"],selectable:[2,"selectable","selectable",Be],compareWith:"compareWith",required:[2,"required","required",Be],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",Be],value:"value"},outputs:{change:"change"},features:[Bt([KDA]),mt],ngContentSelectors:nAA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Rt(),wn(0,"div",0),Ve(1),Gn())},styles:[GDA],encapsulation:2,changeDetection:0})}return t})();var UD=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({providers:[gB,{provide:eN,useValue:{separatorKeyCodes:[13]}}],imports:[Yc,fi]})}return t})();var lAA=(()=>{class t{get vertical(){return this._vertical}set vertical(A){this._vertical=mr(A)}_vertical=!1;get inset(){return this._inset}set inset(A){this._inset=mr(A)}_inset=!1;static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(i,n){i&2&&(te("aria-orientation",n.vertical?"vertical":"horizontal"),RA("mat-divider-vertical",n.vertical)("mat-divider-horizontal",!n.vertical)("mat-divider-inset",n.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px} +`],encapsulation:2,changeDetection:0})}return t})(),gAA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var TD=class t{themeService=w(eg);get currentTheme(){return this.themeService.currentTheme()}get themeIcon(){return this.currentTheme==="light"?"dark_mode":"light_mode"}get themeTooltip(){return this.currentTheme==="light"?"Switch to dark mode":"Switch to light mode"}toggleTheme(){this.themeService.toggleTheme()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-theme-toggle"]],decls:3,vars:2,consts:[["mat-icon-button","","aria-label","Toggle theme",1,"theme-toggle-button",3,"click","matTooltip"]],template:function(A,i){A&1&&(B(0,"button",0),U("click",function(){return i.toggleTheme()}),B(1,"mat-icon"),y(2),Q()()),A&2&&(H("matTooltip",i.themeTooltip),u(2),lA(i.themeIcon))},dependencies:[Tn,Wt,qi,ji,Fa,dn],styles:[".theme-toggle-button[_ngcontent-%COMP%]{color:var(--side-panel-mat-icon-color);width:24px;height:24px;padding:0}.theme-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.theme-toggle-button[_ngcontent-%COMP%]:hover{opacity:.8}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color);border-radius:50%;transition:all .2s ease;margin-right:0!important}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);opacity:1}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}"]})};var cAA=(t,e)=>e.name;function TDA(t,e){if(t&1&&y(0),t&2){let A=p().$implicit;ue(" AgentTool: ",A.name," ")}}function JDA(t,e){if(t&1&&y(0),t&2){let A=p().$implicit;ue(" ",A.name," ")}}function ODA(t,e){t&1&&(B(0,"mat-icon",28),y(1,"chevron_right"),Q())}function YDA(t,e){if(t&1){let A=hA();B(0,"div",27),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.selectAgentFromBreadcrumb(n))}),O(1,TDA,1,1)(2,JDA,1,1),Q(),O(3,ODA,2,0,"mat-icon",28)}if(t&2){let A=e.$implicit,i=e.$index,n=p(2);RA("current-agent",(n.currentSelectedAgent==null?null:n.currentSelectedAgent.name)===A.name),u(),Y(i===0&&n.isInAgentToolContext()?1:2),u(2),Y(i0?0:-1)}}function eyA(t,e){if(t&1){let A=hA();B(0,"div",15)(1,"div",16)(2,"div"),y(3," Tools "),Q(),B(4,"div")(5,"button",40,2)(7,"mat-icon"),y(8,"add"),Q()(),B(9,"mat-menu",null,3)(11,"button",23),U("click",function(){T(A);let n=p();return J(n.addTool("Function tool"))}),B(12,"span"),y(13,"Function tool"),Q()(),B(14,"button",23),U("click",function(){T(A);let n=p();return J(n.addTool("Built-in tool"))}),B(15,"span"),y(16,"Built-in tool"),Q()(),B(17,"button",23),U("click",function(){T(A);let n=p();return J(n.createAgentTool())}),B(18,"span"),y(19,"Agent tool"),Q()()()()(),O(20,AyA,1,1),Ht(21,"async"),Q()}if(t&2){let A,i=Qi(10),n=p();u(5),H("matMenuTriggerFor",i),u(6),H("matTooltip",n.toolMenuTooltips("Function tool")),u(3),H("matTooltip",n.toolMenuTooltips("Built-in tool")),u(3),H("matTooltip",n.toolMenuTooltips("Agent tool")),u(3),Y((A=ri(21,5,n.toolsMap$))?20:-1,A)}}function tyA(t,e){if(t&1){let A=hA();B(0,"mat-chip",43),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.selectAgent(n))}),B(1,"mat-icon",44),y(2),Q(),B(3,"span",45),y(4),Q(),B(5,"button",48),U("click",function(n){let o=T(A).$implicit;return p(2).deleteSubAgent(o.name),J(n.stopPropagation())}),B(6,"mat-icon"),y(7,"cancel"),Q()()()}if(t&2){let A=e.$implicit,i=p(2);u(2),lA(i.getAgentIcon(A.agent_class)),u(2),lA(A.name)}}function iyA(t,e){if(t&1&&(B(0,"div",20)(1,"mat-chip-set",47),Je(2,tyA,8,2,"mat-chip",42,cAA),Q()()),t&2){let A=p();u(2),Oe(A.agentConfig.sub_agents)}}function nyA(t,e){if(t&1){let A=hA();QA(0,"mat-divider"),B(1,"div",22),y(2,"Model (LLM) Interaction"),Q(),B(3,"button",23),U("click",function(){T(A);let n=p();return J(n.addCallback("before_model"))}),B(4,"span"),y(5,"Before Model"),Q()(),B(6,"button",23),U("click",function(){T(A);let n=p();return J(n.addCallback("after_model"))}),B(7,"span"),y(8,"After Model"),Q()(),QA(9,"mat-divider"),B(10,"div",22),y(11,"Tool Execution"),Q(),B(12,"button",23),U("click",function(){T(A);let n=p();return J(n.addCallback("before_tool"))}),B(13,"span"),y(14,"Before Tool"),Q()(),B(15,"button",23),U("click",function(){T(A);let n=p();return J(n.addCallback("after_tool"))}),B(16,"span"),y(17,"After Tool"),Q()()}if(t&2){let A=p();u(3),H("matTooltip",A.callbackMenuTooltips("before_model")),u(3),H("matTooltip",A.callbackMenuTooltips("after_model")),u(6),H("matTooltip",A.callbackMenuTooltips("before_tool")),u(3),H("matTooltip",A.callbackMenuTooltips("after_tool"))}}function oyA(t,e){if(t&1){let A=hA();B(0,"div",52),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.editCallback(n))}),B(1,"mat-chip",53)(2,"span",54)(3,"span",55),y(4),Q(),B(5,"span",56),y(6),Q()()(),B(7,"button",57),U("click",function(n){let o=T(A).$implicit,a=p(3);return a.deleteCallback(a.agentConfig.name,o),J(n.stopPropagation())}),B(8,"mat-icon"),y(9,"remove"),Q()()()}if(t&2){let A=e.$implicit;u(4),lA(A.type),u(2),lA(A.name)}}function ayA(t,e){if(t&1&&(B(0,"div",49)(1,"mat-chip-set",50),Je(2,oyA,10,2,"div",51,hi),Q()()),t&2){let A=p(),i=p();u(2),Oe(A.get(i.agentConfig.name))}}function ryA(t,e){if(t&1&&O(0,ayA,4,0,"div",49),t&2){let A=e,i=p();Y(i.agentConfig&&A.get(i.agentConfig.name)&&A.get(i.agentConfig.name).length>0?0:-1)}}var JD=class t{CALLBACKS_TAB_INDEX=3;jsonEditorComponent;appNameInput="";exitBuilderMode=new LA;closePanel=new LA;featureFlagService=w(yr);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();toolArgsString=bA("");editingToolArgs=bA(!1);editingTool=null;selectedTabIndex=0;agentConfig={isRoot:!1,name:"",agent_class:"",model:"",instruction:"",sub_agents:[],tools:[],callbacks:[]};hierarchyPath=[];currentSelectedAgent=void 0;isRootAgentEditable=!0;models=["gemini-2.5-flash","gemini-2.5-pro"];agentTypes=["LlmAgent","LoopAgent","ParallelAgent","SequentialAgent"];agentBuilderService=w(e0);dialog=w(Or);agentService=w($s);snackBar=w(h2);router=w(ls);cdr=w(wt);selectedTool=void 0;toolAgentName="";toolTypes=["Custom tool","Function tool","Built-in tool","Agent Tool"];editingCallback=null;selectedCallback=void 0;callbackTypes=["before_agent","before_model","before_tool","after_tool","after_model","after_agent"];builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);header="Select an agent or tool to edit";toolsMap$;callbacksMap$;getJsonStringForEditor(e){if(!e)return"{}";let A=gA({},e);return delete A.skip_summarization,JSON.stringify(A,null,2)}constructor(){this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.callbacksMap$=this.agentBuilderService.getAgentCallbacksMap(),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.agentConfig=e,this.currentSelectedAgent=e,e&&(this.editingTool=null,this.editingCallback=null,this.header="Agent configuration",this.updateBreadcrumb(e)),this.cdr.markForCheck()}),this.agentBuilderService.getSelectedTool().subscribe(e=>{this.selectedTool=e,!(e&&e.toolType==="Agent Tool")&&(e?(this.editingTool=e,this.editingToolArgs.set(!1),setTimeout(()=>{let A=e.toolType=="Function tool"?"Function tool":e.name;if(e.toolType=="Function tool"&&!e.name&&(e.name="Function tool"),e.toolType==="Custom tool")e.args||(e.args={}),this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0);else{let i=this.builtInToolArgs.get(A);if(i){e.args||(e.args={});for(let n of i)e.args&&(e.args[n]="")}this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0)}this.cdr.markForCheck()}),this.selectedTabIndex=2):this.editingTool=null,this.cdr.markForCheck())}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e,e?(this.selectCallback(e),this.selectedTabIndex=this.CALLBACKS_TAB_INDEX):this.editingCallback=null,this.cdr.markForCheck()}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{this.agentConfig&&e&&this.agentConfig.name===e.agentName&&(this.agentConfig=Ye(gA({},this.agentConfig),{callbacks:e.callbacks}),this.cdr.markForCheck())}),this.agentBuilderService.getSideTabChangeRequest().subscribe(e=>{e==="tools"?this.selectedTabIndex=2:e==="config"&&(this.selectedTabIndex=0)})}getObjectKeys(e){return e?Object.keys(e).filter(A=>A!=="skip_summarization"):[]}getCallbacksByType(){let e=new Map;return this.callbackTypes.forEach(A=>{e.set(A,[])}),this.agentConfig?.callbacks&&this.agentConfig.callbacks.forEach(A=>{let i=e.get(A.type);i&&i.push(A)}),e}updateBreadcrumb(e){this.hierarchyPath=this.buildHierarchyPath(e)}buildHierarchyPath(e){let A=[],i=this.findContextualRoot(e);return i?e.name===i.name?[i]:this.findPathToAgent(i,e,[i])||[e]:[e]}isInAgentToolContext(){return!this.hierarchyPath||this.hierarchyPath.length===0?!1:this.hierarchyPath[0]?.isAgentTool===!0}findContextualRoot(e){if(e.isAgentTool)return e;let A=this.agentBuilderService.getNodes();for(let n of A)if(n.isAgentTool&&this.findPathToAgent(n,e,[n]))return n;let i=this.agentBuilderService.getRootNode();if(i&&this.findPathToAgent(i,e,[i]))return i;if(e.isRoot)return e;for(let n of A)if(n.isRoot&&this.findPathToAgent(n,e,[n]))return n;return i}findPathToAgent(e,A,i){if(e.name===A.name)return i;for(let n of e.sub_agents){let o=[...i,n],a=this.findPathToAgent(n,A,o);if(a)return a}return null}selectAgentFromBreadcrumb(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectAgent(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectTool(e){if(e.toolType==="Agent Tool"){let A=e.name;this.agentBuilderService.requestNewTab(A);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){this.editTool(e);return}this.agentBuilderService.setSelectedTool(e)}editTool(e){if(!this.agentConfig)return;let A;e.toolType==="Built-in tool"?A=this.dialog.open(kd,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):A=this.dialog.open(v2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),A.afterClosed().subscribe(i=>{if(i&&i.isEditMode){let n=this.agentConfig.tools?.findIndex(o=>o.name===e.name);n!==void 0&&n!==-1&&this.agentConfig.tools&&(this.agentConfig.tools[n].name=i.name,i.args&&(this.agentConfig.tools[n].args=i.args),this.agentBuilderService.setAgentTools(this.agentConfig.name,this.agentConfig.tools))}})}addTool(e){if(this.agentConfig){let A;e==="Built-in tool"?A=this.dialog.open(kd,{width:"700px",maxWidth:"90vw",data:{}}):A=this.dialog.open(v2,{width:"500px",data:{toolType:e}}),A.afterClosed().subscribe(i=>{if(i){let n={toolType:i.toolType,name:i.name};this.agentBuilderService.addTool(this.agentConfig.name,n),this.agentBuilderService.setSelectedTool(n)}})}}addCallback(e){if(this.agentConfig){let A=this.agentConfig?.callbacks?.map(n=>n.name)??[];this.dialog.open(o4,{width:"500px",data:{callbackType:e,existingCallbackNames:A}}).afterClosed().subscribe(n=>{if(n){let o={name:n.name,type:n.type};this.agentBuilderService.addCallback(this.agentConfig.name,o)}})}}editCallback(e){if(!this.agentConfig)return;let A=this.agentConfig.callbacks?.map(n=>n.name)??[];this.dialog.open(o4,{width:"500px",data:{callbackType:e.type,existingCallbackNames:A,isEditMode:!0,callback:e,availableCallbackTypes:this.callbackTypes}}).afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=this.agentBuilderService.updateCallback(this.agentConfig.name,e.name,Ye(gA({},e),{name:n.name,type:n.type}));o.success?this.cdr.markForCheck():console.error("Failed to update callback:",o.error)}})}deleteCallback(e,A){this.dialog.open(bc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success?this.cdr.markForCheck():console.error("Failed to delete callback:",o.error)}})}addSubAgent(e){e&&this.agentBuilderService.setAddSubAgentSubject(e)}deleteSubAgent(e){this.agentBuilderService.setDeleteSubAgentSubject(e)}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(bc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{if(a==="confirm")if(A.toolType==="Agent Tool"){let r=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,r)}else this.agentBuilderService.deleteTool(e,A)})}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}backToToolList(){this.editingTool=null,this.agentBuilderService.setSelectedTool(void 0)}editToolArgs(){this.editingToolArgs.set(!0)}cancelEditToolArgs(e){this.editingToolArgs.set(!1),this.toolArgsString.set(this.getJsonStringForEditor(e?.args))}saveToolArgs(e){if(this.jsonEditorComponent&&e)try{let A=JSON.parse(this.jsonEditorComponent.getJsonString()),i=e.args?e.args.skip_summarization:!1;e.args=A,e.args.skip_summarization=i,this.toolArgsString.set(JSON.stringify(e.args,null,2)),this.editingToolArgs.set(!1)}catch(A){console.error("Error parsing tool arguments JSON",A)}}onToolTypeSelectionChange(e){e?.toolType==="Built-in tool"?(e.name="google_search",this.onBuiltInToolSelectionChange(e)):e?.toolType==="Custom tool"?(e.args={},this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0)):e&&(e.name="",e.args={skip_summarization:!1},this.toolArgsString.set("{}"),this.editingToolArgs.set(!1))}onBuiltInToolSelectionChange(e){e&&(this.editingToolArgs.set(!1),setTimeout(()=>{e.args={skip_summarization:!1};let A=this.builtInToolArgs.get(e.name);if(A)for(let i of A)e.args&&(e.args[i]="");this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0),this.cdr.markForCheck()}))}selectCallback(e){this.editingCallback=e}backToCallbackList(){this.editingCallback=null}onCallbackTypeChange(e){}createAgentTool(){this.dialog.open(bc,{width:"750px",height:"450px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name",showToolInfo:!0,toolType:"Agent tool"}}).afterClosed().subscribe(A=>{if(A&&typeof A=="string"){let i=this.agentConfig?.name||"root_agent";this.agentBuilderService.requestNewTab(A,i)}})}saveChanges(){if(!this.agentBuilderService.getRootNode()){this.snackBar.open("Please create an agent first.","OK");return}this.appNameInput?this.saveAgent(this.appNameInput):this.agentService.getApp().subscribe(A=>{A?this.saveAgent(A):this.snackBar.open("No agent selected. Please select an agent first.","OK")})}cancelChanges(){this.agentService.agentChangeCancel(this.appNameInput).subscribe(e=>{}),this.exitBuilderMode.emit()}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this.snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();s0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o&&this.agentService.agentBuild(i).subscribe(a=>{a?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this.snackBar.open("Something went wrong, please try again","OK")})})}getToolIcon(e){return sE(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}addSubAgentWithType(e){if(!this.agentConfig?.name)return;let A=this.agentConfig.agent_class!=="LlmAgent";this.agentBuilderService.setAddSubAgentSubject(this.agentConfig.name,e,A)}callbackMenuTooltips(e){return ic.getCallbackMenuTooltips(e)}toolMenuTooltips(e){return ic.getToolMenuTooltips(e)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-builder-tabs"]],viewQuery:function(A,i){if(A&1&&Jt(vc,5),A&2){let n;ae(n=re())&&(i.jsonEditorComponent=n.first)}},inputs:{appNameInput:"appNameInput"},outputs:{exitBuilderMode:"exitBuilderMode",closePanel:"closePanel"},decls:77,vars:12,consts:[["subAgentMenu","matMenu"],["callbacksMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["toolsMenu","matMenu"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[2,"display","flex","align-items","center","gap","8px","margin-right","15px"],["matTooltip","Collapse panel",1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer",3,"click"],[1,"builder-tabs-container"],[1,"builder-tab-content"],[1,"agent-breadcrumb-container"],[1,"content-wrapper"],[1,"builder-panel-wrapper"],[1,"panel-title"],[1,"config-form"],["mat-icon-button","","type","button","aria-label","Add sub agent",1,"panel-action-button",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],[1,"tools-chips-container"],["mat-icon-button","","type","button","aria-label","Add callback",1,"panel-action-button",3,"matMenuTriggerFor"],[1,"menu-header"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[1,"action-buttons"],["mat-raised-button","","color","secondary",1,"save-button",3,"click"],["mat-button","",1,"cancel-button",3,"click"],[1,"breadcrumb-chip",3,"click"],[1,"breadcrumb-arrow"],[1,"form-row"],[1,"agent-name-field"],["matInput","",3,"ngModelChange","ngModel","disabled"],[1,"agent-type-field"],["disabled","",3,"ngModelChange","ngModel"],[3,"value"],[3,"ngModel"],[3,"ngModelChange","ngModel"],["matInput","","rows","5",3,"ngModelChange","ngModel"],["matInput","","rows","3",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","aria-label","Add tool",1,"panel-action-button",3,"matMenuTriggerFor"],["aria-label","Tools"],[1,"tool-chip"],[1,"tool-chip",3,"click"],["matChipAvatar","",1,"tool-icon"],[1,"tool-chip-name"],["matChipRemove","","aria-label","Remove tool",3,"click"],["aria-label","Sub Agents"],["matChipRemove","","aria-label","Remove sub agent",3,"click"],[1,"tools-chips-container","callbacks-list"],["aria-label","Callbacks"],[1,"callback-row"],[1,"callback-row",3,"click"],[1,"callback-chip"],[1,"chip-content"],[1,"chip-type"],[1,"chip-name"],["mat-icon-button","","aria-label","Remove callback",1,"callback-remove",3,"click"]],template:function(A,i){if(A&1&&(B(0,"div",4)(1,"div",5)(2,"div",6)(3,"div",7),QA(4,"img",8),y(5," Agent Development Kit "),Q(),B(6,"div",9),QA(7,"app-theme-toggle"),B(8,"span",10),U("click",function(){return i.closePanel.emit()}),y(9,"left_panel_close"),Q()()()()(),B(10,"div",11)(11,"div",12),O(12,HDA,3,0,"div",13),B(13,"div",14)(14,"div",15)(15,"div",16),y(16," Configuration "),Q(),B(17,"div"),O(18,ZDA,16,7,"div",17),Q()(),O(19,eyA,22,7,"div",15),B(20,"div",15)(21,"div",16)(22,"div"),y(23," Sub Agents "),Q(),B(24,"div")(25,"button",18)(26,"mat-icon"),y(27,"add"),Q()(),B(28,"mat-menu",null,0)(30,"button",19),U("click",function(){return i.addSubAgentWithType("LlmAgent")}),B(31,"mat-icon"),y(32,"psychology"),Q(),B(33,"span"),y(34,"LLM Agent"),Q()(),B(35,"button",19),U("click",function(){return i.addSubAgentWithType("SequentialAgent")}),B(36,"mat-icon"),y(37,"more_horiz"),Q(),B(38,"span"),y(39,"Sequential Agent"),Q()(),B(40,"button",19),U("click",function(){return i.addSubAgentWithType("LoopAgent")}),B(41,"mat-icon"),y(42,"sync"),Q(),B(43,"span"),y(44,"Loop Agent"),Q()(),B(45,"button",19),U("click",function(){return i.addSubAgentWithType("ParallelAgent")}),B(46,"mat-icon"),y(47,"density_medium"),Q(),B(48,"span"),y(49,"Parallel Agent"),Q()()()()(),O(50,iyA,4,0,"div",20),Q(),B(51,"div",15)(52,"div",16)(53,"div"),y(54," Callbacks "),Q(),B(55,"div")(56,"button",21)(57,"mat-icon"),y(58,"add"),Q()(),B(59,"mat-menu",null,1)(61,"div",22),y(62,"Agent Lifecycle"),Q(),B(63,"button",23),U("click",function(){return i.addCallback("before_agent")}),B(64,"span"),y(65,"Before Agent"),Q()(),B(66,"button",23),U("click",function(){return i.addCallback("after_agent")}),B(67,"span"),y(68,"After Agent"),Q()(),O(69,nyA,18,4),Q()()(),O(70,ryA,1,1),Ht(71,"async"),Q()(),B(72,"div",24)(73,"button",25),U("click",function(){return i.saveChanges()}),y(74," Save "),Q(),B(75,"button",26),U("click",function(){return i.cancelChanges()}),y(76," Cancel "),Q()()()()),A&2){let n,o=Qi(29),a=Qi(60);u(12),Y(i.hierarchyPath.length>0?12:-1),u(6),Y(i.agentConfig?18:-1),u(),Y((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?19:-1),u(6),H("matMenuTriggerFor",o),u(25),Y(i.agentConfig&&i.agentConfig.sub_agents&&i.agentConfig.sub_agents.length>0?50:-1),u(6),H("matMenuTriggerFor",a),u(7),H("matTooltip",i.callbackMenuTooltips("before_agent")),u(3),H("matTooltip",i.callbackMenuTooltips("after_agent")),u(3),Y((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?69:-1),u(),Y((n=ri(71,10,i.callbacksMap$))?70:-1,n)}},dependencies:[si,ln,Dn,YQ,yn,ub,ko,pi,tc,tO,Ko,Wt,ua,ji,vs,Yr,Xl,dn,Zs,$c,Ml,UD,t3,aAA,rAA,oN,gAA,lAA,TD,os],styles:[".builder-tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:40px;height:calc(95vh - 20px);display:flex;flex-direction:column}.agent-breadcrumb-container[_ngcontent-%COMP%]{padding:2px 20px 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--builder-border-color)}.breadcrumb-chip[_ngcontent-%COMP%]{color:var(--builder-text-muted-color);font-family:Google Sans;font-size:16px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;display:inline-block;-webkit-user-select:none;user-select:none}.breadcrumb-chip[_ngcontent-%COMP%]:hover{color:var(--builder-text-link-color)}.breadcrumb-chip.current-agent[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-weight:500}.breadcrumb-arrow[_ngcontent-%COMP%]{color:var(--builder-breadcrumb-separator-color);font-size:16px;width:16px;height:16px}.builder-tab-content[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);display:flex;flex-direction:column;flex:1;overflow:hidden}.builder-tab-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:8px 0;font-size:14px;line-height:1.5}.components-section[_ngcontent-%COMP%]{margin-bottom:32px}.components-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;margin:0 0 16px;text-transform:uppercase;letter-spacing:.5px}.config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;margin-top:20px}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{display:flex;gap:16px;align-items:flex-start}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-name-field[_ngcontent-%COMP%]{flex:1}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-type-field[_ngcontent-%COMP%]{width:32%}.config-form[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.config-form[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-bottom:8px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%]{margin-top:16px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500}.config-form[_ngcontent-%COMP%] .tool-args-header[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.json-editor-wrapper[_ngcontent-%COMP%]{height:300px;max-height:300px}.tab-content-container[_ngcontent-%COMP%]{margin-top:20px;overflow-y:auto}.agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px}.sub-agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px;margin-left:16px}.tree-view[_ngcontent-%COMP%] expand-button[_ngcontent-%COMP%]{border:0}.node-item[_ngcontent-%COMP%]{display:flex;align-items:center}.node-icon[_ngcontent-%COMP%]{margin-right:14px}.node-name[_ngcontent-%COMP%]{margin-top:2px;display:flex;align-items:center}.no-tools-message[_ngcontent-%COMP%]{display:block;color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;margin-bottom:16px;text-align:center}.tools-list[_ngcontent-%COMP%]{list-style:none;padding:0}.tool-name[_ngcontent-%COMP%]{cursor:pointer;padding:11px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.tool-name[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.tool-name[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.tool-list-item-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px}.tools-chips-container[_ngcontent-%COMP%]{margin-top:12px;padding:0 4px}.tools-chips-container.callbacks-list[_ngcontent-%COMP%]{padding-right:0;padding-left:0}.callback-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;cursor:pointer}.callback-remove[_ngcontent-%COMP%]{color:var(--builder-icon-color);cursor:pointer;width:32px;height:32px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0}.callback-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center;transform:translateY(.5px)}.back-button[_ngcontent-%COMP%]{margin-bottom:16px}.add-tool-button[_ngcontent-%COMP%]{width:100%;border:none;border-radius:4px;margin-top:12px;cursor:pointer}.add-tool-button-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.add-tool-button-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--builder-add-button-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.agent-tool-section[_ngcontent-%COMP%]{margin-top:16px;padding:16px;border:1px solid var(--builder-border-color);border-radius:8px}.agent-tool-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:16px;font-weight:500;margin:0 0 8px}.agent-tool-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 16px;line-height:1.5}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]{color:var(--builder-button-primary-text-color);font-weight:500}.no-callbacks-message[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;text-align:center}.callback-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px}.callback-section[_ngcontent-%COMP%]{margin-top:16px}.callback-section[_ngcontent-%COMP%] .callback-section-label[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500;text-transform:none}.callback-groups-wrapper[_ngcontent-%COMP%]{margin-top:16px}.callback-group[_ngcontent-%COMP%]{margin-top:5px}.callback-list[_ngcontent-%COMP%]{padding:8px 0}.no-callbacks-in-type[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;font-style:italic;padding:12px;text-align:center}.callback-item[_ngcontent-%COMP%]{cursor:pointer;padding:8px 12px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.callback-item[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.callback-item[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.add-callback-icon[_ngcontent-%COMP%]{color:var(--builder-button-primary-background-color)}mat-tab-group[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:16px 20px 0;min-height:0}mat-tab-group[_ngcontent-%COMP%]{flex:1;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden}.action-buttons[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:16px 20px;border-top:1px solid var(--builder-border-color);flex-shrink:0;margin-top:auto}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]{color:var(--builder-button-primary-text-color);font-weight:500}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]{color:var(--builder-button-secondary-text-color);border:1px solid var(--builder-button-secondary-border-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]:hover{color:var(--builder-button-secondary-hover-text-color)}.builder-panel-wrapper[_ngcontent-%COMP%]{border-bottom:1px solid var(--builder-border-color);padding:12px 24px}.panel-title[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color);font-family:Google Sans;font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;justify-content:space-between}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%]{color:var(--builder-icon-color);width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center}.content-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center}"],changeDetection:0})};var _I=new kA("MARKDOWN_COMPONENT");var syA=["chatMessages"],lyA=(t,e)=>({"user-message":t,"bot-message":e}),gyA=t=>({text:t,thought:!1});function cyA(t,e){t&1&&(B(0,"div",7)(1,"mat-icon",12),y(2,"smart_toy"),Q(),B(3,"h3"),y(4,"Assistant Ready"),Q(),B(5,"p"),y(6,"Your builder assistant is ready to help you build agents."),Q()())}function CyA(t,e){t&1&&(B(0,"div",15)(1,"span",16),y(2,"\u30FB\u30FB\u30FB"),Q()())}function IyA(t,e){if(t&1&&(B(0,"div",19),y(1),Q()),t&2){let A=p(3).$implicit;u(),lA(A.text)}}function dyA(t,e){if(t&1&&sn(0,20),t&2){let A=p(3).$implicit,i=p(2);H("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",Ks(2,gyA,A.text))}}function ByA(t,e){if(t&1&&(B(0,"div",18),y(1,"Assistant"),Q(),O(2,IyA,2,1,"div",19)(3,dyA,1,4,"ng-container",20)),t&2){let A=p(2).$implicit;u(2),Y(A.isError?2:3)}}function EyA(t,e){if(t&1&&(B(0,"div",17),y(1),Q()),t&2){let A=p(2).$implicit;u(),lA(A.text)}}function hyA(t,e){if(t&1&&O(0,ByA,4,1)(1,EyA,2,1,"div",17),t&2){let A=p().$implicit;Y(A.role==="bot"?0:1)}}function QyA(t,e){if(t&1&&(B(0,"div",13)(1,"mat-card",14),O(2,CyA,3,0,"div",15)(3,hyA,2,1),Q()()),t&2){let A=e.$implicit;H("ngClass",U0(2,lyA,A.role==="user",A.role==="bot")),u(2),Y(A.isLoading?2:3)}}function uyA(t,e){if(t&1&&Je(0,QyA,4,5,"div",13,hi),t&2){let A=p();Oe(A.messages)}}var OD=class t{isVisible=!0;appName="";closePanel=new LA;reloadCanvas=new LA;assistantAppName="__adk_agent_builder_assistant";userId="user";currentSession="";userMessage="";messages=[];shouldAutoScroll=!1;isGenerating=!1;chatMessages;markdownComponent=w(_I);agentService=w($s);sessionService=w(Al);agentBuilderService=w(e0);constructor(){}ngOnInit(){this.sessionService.createSession(this.userId,this.assistantAppName).subscribe(e=>{this.currentSession=e.id;let A={appName:this.assistantAppName,userId:this.userId,sessionId:e.id,newMessage:{role:"user",parts:[{text:"hello"}]},streaming:!1,stateDelta:{root_directory:`${this.appName}/tmp/${this.appName}`}};this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0,this.agentService.runSse(A).subscribe({next:i=>lt(this,null,function*(){if(i.errorCode){let n=this.messages[this.messages.length-1];n.role==="bot"&&n.isLoading&&(n.text=`Error Code: ${i.errorCode}`,n.isLoading=!1,n.isError=!0,this.shouldAutoScroll=!0),this.isGenerating=!1;return}if(i.content){let n="";for(let o of i.content.parts)o.text&&(n+=o.text);if(n){let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text=n,o.isLoading=!1,this.shouldAutoScroll=!0)}}}),error:i=>{console.error("SSE error:",i);let n=this.messages[this.messages.length-1];n.role==="bot"&&n.isLoading&&(n.text="Sorry, I encountered an error. Please try again.",n.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})})}onClosePanel(){this.closePanel.emit()}sendMessage(e){if(e.trim()){this.saveAgent(this.appName),e!="____Something went wrong, please try again"&&this.messages.push({role:"user",text:e});let A=e;this.userMessage="",this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0;let i={appName:this.assistantAppName,userId:this.userId,sessionId:this.currentSession,newMessage:{role:"user",parts:[{text:A}]},streaming:!1};this.agentService.runSse(i).subscribe({next:n=>lt(this,null,function*(){if(n.errorCode){let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text=`Error Code: ${n.errorCode}`,o.isLoading=!1,o.isError=!0,this.shouldAutoScroll=!0),this.isGenerating=!1;return}if(n.content){let o="";for(let a of n.content.parts)a.text&&(o+=a.text);if(o){let a=this.messages[this.messages.length-1];a.role==="bot"&&a.isLoading&&(a.text=o,a.isLoading=!1,this.shouldAutoScroll=!0,this.reloadCanvas.emit())}}}),error:n=>{console.error("SSE error:",n);let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text="Sorry, I encountered an error. Please try again.",o.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})}}ngAfterViewChecked(){this.shouldAutoScroll&&(this.scrollToBottom(),this.shouldAutoScroll=!1)}scrollToBottom(){try{this.chatMessages&&setTimeout(()=>{this.chatMessages.nativeElement.scrollTop=this.chatMessages.nativeElement.scrollHeight},50)}catch(e){console.error("Error scrolling to bottom:",e)}}onKeyDown(e){if(e.key==="Enter"){if(e.shiftKey)return;this.userMessage?.trim()&&this.currentSession&&(e.preventDefault(),this.sendMessage(this.userMessage))}}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A)return;let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();s0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{console.log(o?"save to tmp":"something went wrong")})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-builder-assistant"]],viewQuery:function(A,i){if(A&1&&Jt(syA,5),A&2){let n;ae(n=re())&&(i.chatMessages=n.first)}},inputs:{isVisible:"isVisible",appName:"appName"},outputs:{closePanel:"closePanel",reloadCanvas:"reloadCanvas"},decls:21,vars:6,consts:[["chatMessages",""],[1,"builder-assistant-panel"],[1,"panel-header"],[1,"panel-title"],["mat-icon-button","","matTooltip","Close assistant panel",1,"close-btn",3,"click"],[1,"panel-content"],[1,"chat-messages"],[1,"assistant-placeholder"],[1,"chat-input-container"],[1,"input-wrapper"],["cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","5","placeholder","Ask Gemini to build your agent",1,"assistant-input-box",3,"ngModelChange","keydown","ngModel","disabled"],["mat-icon-button","","matTooltip","Send message",1,"send-button",3,"click","disabled"],[1,"large-icon"],[3,"ngClass"],[1,"message-card"],[1,"loading-message"],[1,"dots"],[1,"message-text"],[1,"bot-label"],[1,"error-message"],[3,"ngComponentOutlet","ngComponentOutletInputs"]],template:function(A,i){if(A&1){let n=hA();B(0,"div",1)(1,"div",2)(2,"div",3)(3,"mat-icon"),y(4,"auto_awesome"),Q(),B(5,"span"),y(6,"Assistant"),Q()(),B(7,"button",4),U("click",function(){return i.onClosePanel()}),B(8,"mat-icon"),y(9,"close"),Q()()(),B(10,"div",5)(11,"div",6,0),O(13,cyA,7,0,"div",7)(14,uyA,2,0),Q(),B(15,"div",8)(16,"div",9)(17,"textarea",10),Di("ngModelChange",function(a){return T(n),di(i.userMessage,a)||(i.userMessage=a),J(a)}),U("keydown",function(a){return i.onKeyDown(a)}),Q(),B(18,"button",11),U("click",function(){return i.sendMessage(i.userMessage.trim())}),B(19,"mat-icon"),y(20,"send"),Q()()()()()()}A&2&&(RA("hidden",!i.isVisible),u(13),Y(i.messages.length===0?13:14),u(4),wi("ngModel",i.userMessage),H("disabled",i.isGenerating),u(),H("disabled",!i.userMessage.trim()||i.isGenerating))},dependencies:[si,zl,Tc,ln,Dn,yn,ko,Wt,ji,dn,Nm,lB,_p],styles:[".builder-assistant-panel[_ngcontent-%COMP%]{position:fixed;right:0;top:72px;width:400px;height:calc(100vh - 72px);background-color:var(--mat-sys-surface-container);border-left:1px solid var(--mat-sys-outline-variant);box-shadow:-2px 0 10px #0006;display:flex;flex-direction:column;transition:transform .3s ease}.builder-assistant-panel.hidden[_ngcontent-%COMP%]{transform:translate(100%)}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mat-sys-outline-variant)}.panel-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-weight:400;font-size:16px;color:var(--mat-sys-on-surface);font-family:Google Sans,Helvetica Neue,sans-serif}.panel-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:20px;width:20px;height:20px}.close-btn[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.close-btn[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.panel-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden}.assistant-placeholder[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:300px;color:var(--mat-sys-on-surface-variant)}.assistant-placeholder[_ngcontent-%COMP%] .large-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px;margin-bottom:16px;color:var(--mat-sys-primary)}.assistant-placeholder[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:20px;font-weight:500;color:var(--mat-sys-on-surface);font-family:Google Sans,Helvetica Neue,sans-serif}.assistant-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5;color:var(--mat-sys-on-surface-variant)}.chat-messages[_ngcontent-%COMP%]{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column}.chat-input-container[_ngcontent-%COMP%]{padding:16px 20px 20px;border-top:none}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:50px;padding:10px 6px 10px 18px;gap:8px}.assistant-input-box[_ngcontent-%COMP%]{flex:1;color:var(--mat-sys-on-surface);background-color:transparent;border:none;padding:0;resize:none;overflow:hidden;font-family:Google Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:20px;min-height:20px;max-height:120px}.assistant-input-box[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant);font-size:14px}.assistant-input-box[_ngcontent-%COMP%]:focus{outline:none}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--mat-sys-outline);border-radius:4px}.send-button[_ngcontent-%COMP%]{color:var(--mat-sys-primary);width:36px;height:36px;min-width:36px;flex-shrink:0;margin:0;padding:0}.send-button[_ngcontent-%COMP%]:disabled{color:var(--mat-sys-outline)}.send-button[_ngcontent-%COMP%]:hover:not(:disabled){color:var(--mat-sys-primary);border-radius:50%}.send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.message-card[_ngcontent-%COMP%]{padding:10px 16px;margin:6px 0;font-size:14px;font-weight:400;position:relative;display:block;box-shadow:none;line-height:1.5;width:100%}.user-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:12px}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline-variant);border-radius:4px;color:var(--mat-sys-on-surface);padding:8px 12px}.bot-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:0}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{border:none;border-radius:0;color:var(--mat-sys-on-surface);padding:0;margin:0}.bot-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--mat-sys-on-surface-variant);margin-bottom:8px;font-family:Google Sans,Helvetica Neue,sans-serif}.error-message[_ngcontent-%COMP%]{color:var(--mat-app-warn, #d32f2f);font-family:Google Sans,Helvetica Neue,sans-serif;font-size:14px;white-space:pre-line;word-break:break-word;padding:8px 12px}.message-text[_ngcontent-%COMP%]{white-space:pre-line;word-break:break-word;overflow-wrap:break-word;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%] p{margin:0;line-height:1.4}.message-text[_ngcontent-%COMP%] p:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] p:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] ul, .message-text[_ngcontent-%COMP%] ol{margin:0;padding-left:1.5em}.message-text[_ngcontent-%COMP%] li{margin:0}.message-text[_ngcontent-%COMP%] code{padding:2px 4px;border-radius:3px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.message-text[_ngcontent-%COMP%] pre{padding:8px 12px;border-radius:6px;overflow-x:auto;margin:.5em 0}.message-text[_ngcontent-%COMP%] pre code{padding:0}.message-text[_ngcontent-%COMP%] blockquote{border-left:3px solid var(--mat-sys-primary);padding-left:12px;margin:.5em 0;font-style:italic;color:var(--mat-sys-on-surface-variant)}.message-text[_ngcontent-%COMP%] strong{font-weight:600}.message-text[_ngcontent-%COMP%] em{font-style:italic}.loading-message[_ngcontent-%COMP%]{display:flex;align-items:center;color:var(--mat-sys-on-surface-variant);font-family:Google Sans,Helvetica Neue,sans-serif;padding:0;margin:0}.loading-message[_ngcontent-%COMP%] .dots[_ngcontent-%COMP%]{font-size:24px;letter-spacing:-12px;animation:_ngcontent-%COMP%_pulse 1.4s ease-in-out infinite;display:inline-block;line-height:1}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:.3}50%{opacity:1}}"]})};var eQ=class t{constructor(e,A){this.http=e;this.zone=A}apiServerDomain=Dr.getApiServerBaseUrl();_currentApp=new ei("");currentApp=this._currentApp.asObservable();isLoading=new ei(!1);getApp(){return this.currentApp}setApp(e){this._currentApp.next(e)}getLoadingState(){return this.isLoading}runSse(e){let A=this.apiServerDomain+"/run_sse";return this.isLoading.next(!0),new vi(i=>{let n=this;fetch(A,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify(e)}).then(o=>{let a=o.body?.getReader(),r=new TextDecoder("utf-8"),s="",l=()=>{a?.read().then(({done:g,value:C})=>{if(this.isLoading.next(!0),g)return this.isLoading.next(!1),i.complete();let I=r.decode(C,{stream:!0});s+=I;try{s.split(/\r?\n/).filter(h=>h.startsWith("data:")).forEach(h=>{let E=h.replace(/^data:\s*/,""),f=JSON.parse(E);n.zone.run(()=>i.next(f))}),s=""}catch(d){d instanceof SyntaxError&&l()}l()}).catch(g=>{n.zone.run(()=>i.error(g))})};l()}).catch(o=>{n.zone.run(()=>i.error(o))})})}listApps(){if(this.apiServerDomain!=null){let e=this.apiServerDomain+"/list-apps?relative_path=./";return this.http.get(e)}return new vi}getVersion(){if(this.apiServerDomain!=null){let e=this.apiServerDomain+"/version";return this.http.get(e)}return new vi}agentBuild(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save";return this.http.post(A,e)}return new vi}agentBuildTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save?tmp=true";return this.http.post(A,e)}return new vi}getAgentBuilder(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}`;return this.http.get(A,{responseType:"text"})}return new vi}getAgentBuilderTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&tmp=true`;return this.http.get(A,{responseType:"text"})}return new vi}getSubAgentBuilder(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&file_path=${A}&tmp=true`;return this.http.get(i,{responseType:"text"})}return new vi}agentChangeCancel(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}/cancel`;return this.http.post(A,{})}return new vi}getAppInfo(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/dev/build_graph/${e}`;return this.http.get(A)}return new vi}getAppGraphImage(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/dev/build_graph_image/${e}`,o={dark_mode:A};return i&&(o.node=i),this.http.get(n,{params:o})}return new vi}static \u0275fac=function(A){return new(A||t)(Lo(fr),Lo(qe))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var YD="http://www.w3.org/1999/xhtml",rN={svg:"http://www.w3.org/2000/svg",xhtml:YD,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function YC(t){var e=t+="",A=e.indexOf(":");return A>=0&&(e=t.slice(0,A))!=="xmlns"&&(t=t.slice(A+1)),rN.hasOwnProperty(e)?{space:rN[e],local:t}:t}function pyA(t){return function(){var e=this.ownerDocument,A=this.namespaceURI;return A===YD&&e.documentElement.namespaceURI===YD?e.createElement(t):e.createElementNS(A,t)}}function myA(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function HD(t){var e=YC(t);return(e.local?myA:pyA)(e)}function wyA(){}function xd(t){return t==null?wyA:function(){return this.querySelector(t)}}function CAA(t){typeof t!="function"&&(t=xd(t));for(var e=this._groups,A=e.length,i=new Array(A),n=0;n=k&&(k=v+1);!(b=f[k])&&++k=0;)(a=i[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function DAA(t){t||(t=LyA);function e(C,I){return C&&I?t(C.__data__,I.__data__):!C-!I}for(var A=this._groups,i=A.length,n=new Array(i),o=0;oe?1:t>=e?0:NaN}function yAA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function vAA(){return Array.from(this)}function bAA(){for(var t=this._groups,e=0,A=t.length;e1?this.each((e==null?YyA:typeof e=="function"?zyA:HyA)(t,e,A??"")):RI(this.node(),t)}function RI(t,e){return t.style.getPropertyValue(e)||jD(t).getComputedStyle(t,null).getPropertyValue(e)}function PyA(t){return function(){delete this[t]}}function jyA(t,e){return function(){this[t]=e}}function qyA(t,e){return function(){var A=e.apply(this,arguments);A==null?delete this[t]:this[t]=A}}function RAA(t,e){return arguments.length>1?this.each((e==null?PyA:typeof e=="function"?qyA:jyA)(t,e)):this.node()[t]}function NAA(t){return t.trim().split(/^|\s+/)}function lN(t){return t.classList||new FAA(t)}function FAA(t){this._node=t,this._names=NAA(t.getAttribute("class")||"")}FAA.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function LAA(t,e){for(var A=lN(t),i=-1,n=e.length;++i=0&&(A=e.slice(i+1),e=e.slice(0,i)),{type:e,name:A}})}function CvA(t){return function(){var e=this.__on;if(e){for(var A=0,i=-1,n=e.length,o;A{}};function eeA(){for(var t=0,e=arguments.length,A={},i;t=0&&(i=A.slice(n+1),A=A.slice(0,n)),A&&!e.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:i}})}qD.prototype=eeA.prototype={constructor:qD,on:function(t,e){var A=this._,i=QvA(t+"",A),n,o=-1,a=i.length;if(arguments.length<2){for(;++o0)for(var A=new Array(n),i=0,n,o;i()=>t;function l3(t,{sourceEvent:e,subject:A,target:i,identifier:n,active:o,x:a,y:r,dx:s,dy:l,dispatch:g}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:A,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:r,enumerable:!0,configurable:!0},dx:{value:s,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:g}})}l3.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function fvA(t){return!t.ctrlKey&&!t.button}function pvA(){return this.parentNode}function mvA(t,e){return e??{x:t.x,y:t.y}}function wvA(){return navigator.maxTouchPoints||"ontouchstart"in this}function WD(){var t=fvA,e=pvA,A=mvA,i=wvA,n={},o=_d("start","drag","end"),a=0,r,s,l,g,C=0;function I(S){S.on("mousedown.drag",d).filter(i).on("touchstart.drag",f).on("touchmove.drag",m,teA).on("touchend.drag touchcancel.drag",v).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(S,b){if(!(g||!t.call(this,S,b))){var x=k(this,e.call(this,S,b),S,b,"mouse");x&&(Nr(S.view).on("mousemove.drag",h,Rd).on("mouseup.drag",E,Rd),a3(S.view),VD(S),l=!1,r=S.clientX,s=S.clientY,x("start",S))}}function h(S){if(NI(S),!l){var b=S.clientX-r,x=S.clientY-s;l=b*b+x*x>C}n.mouse("drag",S)}function E(S){Nr(S.view).on("mousemove.drag mouseup.drag",null),r3(S.view,l),NI(S),n.mouse("end",S)}function f(S,b){if(t.call(this,S,b)){var x=S.changedTouches,F=e.call(this,S,b),z=x.length,P,W;for(P=0;P>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):A===8?XD(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):A===4?XD(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=yvA.exec(t))?new hl(e[1],e[2],e[3],1):(e=vvA.exec(t))?new hl(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=bvA.exec(t))?XD(e[1],e[2],e[3],e[4]):(e=MvA.exec(t))?XD(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=SvA.exec(t))?leA(e[1],e[2]/100,e[3]/100,1):(e=kvA.exec(t))?leA(e[1],e[2]/100,e[3]/100,e[4]):ieA.hasOwnProperty(t)?aeA(ieA[t]):t==="transparent"?new hl(NaN,NaN,NaN,0):null}function aeA(t){return new hl(t>>16&255,t>>8&255,t&255,1)}function XD(t,e,A,i){return i<=0&&(t=e=A=NaN),new hl(t,e,A,i)}function RvA(t){return t instanceof C3||(t=FI(t)),t?(t=t.rgb(),new hl(t.r,t.g,t.b,t.opacity)):new hl}function iQ(t,e,A,i){return arguments.length===1?RvA(t):new hl(t,e,A,i??1)}function hl(t,e,A,i){this.r=+t,this.g=+e,this.b=+A,this.opacity=+i}ZD(hl,iQ,cN(C3,{brighter(t){return t=t==null?Ay:Math.pow(Ay,t),new hl(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?g3:Math.pow(g3,t),new hl(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new hl(Fd(this.r),Fd(this.g),Fd(this.b),ey(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:reA,formatHex:reA,formatHex8:NvA,formatRgb:seA,toString:seA}));function reA(){return`#${Nd(this.r)}${Nd(this.g)}${Nd(this.b)}`}function NvA(){return`#${Nd(this.r)}${Nd(this.g)}${Nd(this.b)}${Nd((isNaN(this.opacity)?1:this.opacity)*255)}`}function seA(){let t=ey(this.opacity);return`${t===1?"rgb(":"rgba("}${Fd(this.r)}, ${Fd(this.g)}, ${Fd(this.b)}${t===1?")":`, ${t})`}`}function ey(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Fd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Nd(t){return t=Fd(t),(t<16?"0":"")+t.toString(16)}function leA(t,e,A,i){return i<=0?t=e=A=NaN:A<=0||A>=1?t=e=NaN:e<=0&&(t=NaN),new Mc(t,e,A,i)}function ceA(t){if(t instanceof Mc)return new Mc(t.h,t.s,t.l,t.opacity);if(t instanceof C3||(t=FI(t)),!t)return new Mc;if(t instanceof Mc)return t;t=t.rgb();var e=t.r/255,A=t.g/255,i=t.b/255,n=Math.min(e,A,i),o=Math.max(e,A,i),a=NaN,r=o-n,s=(o+n)/2;return r?(e===o?a=(A-i)/r+(A0&&s<1?0:a,new Mc(a,r,s,t.opacity)}function CeA(t,e,A,i){return arguments.length===1?ceA(t):new Mc(t,e,A,i??1)}function Mc(t,e,A,i){this.h=+t,this.s=+e,this.l=+A,this.opacity=+i}ZD(Mc,CeA,cN(C3,{brighter(t){return t=t==null?Ay:Math.pow(Ay,t),new Mc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?g3:Math.pow(g3,t),new Mc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,A=this.l,i=A+(A<.5?A:1-A)*e,n=2*A-i;return new hl(CN(t>=240?t-240:t+120,n,i),CN(t,n,i),CN(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new Mc(geA(this.h),$D(this.s),$D(this.l),ey(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=ey(this.opacity);return`${t===1?"hsl(":"hsla("}${geA(this.h)}, ${$D(this.s)*100}%, ${$D(this.l)*100}%${t===1?")":`, ${t})`}`}}));function geA(t){return t=(t||0)%360,t<0?t+360:t}function $D(t){return Math.max(0,Math.min(1,t||0))}function CN(t,e,A){return(t<60?e+(A-e)*t/60:t<180?A:t<240?e+(A-e)*(240-t)/60:e)*255}function IN(t,e,A,i,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*A+(1+3*t+3*o-3*a)*i+a*n)/6}function IeA(t){var e=t.length-1;return function(A){var i=A<=0?A=0:A>=1?(A=1,e-1):Math.floor(A*e),n=t[i],o=t[i+1],a=i>0?t[i-1]:2*n-o,r=i()=>t;function FvA(t,e){return function(A){return t+A*e}}function LvA(t,e,A){return t=Math.pow(t,A),e=Math.pow(e,A)-t,A=1/A,function(i){return Math.pow(t+i*e,A)}}function BeA(t){return(t=+t)==1?ty:function(e,A){return A-e?LvA(e,A,t):dN(isNaN(e)?A:e)}}function ty(t,e){var A=e-t;return A?FvA(t,A):dN(isNaN(t)?e:t)}var iy=(function t(e){var A=BeA(e);function i(n,o){var a=A((n=iQ(n)).r,(o=iQ(o)).r),r=A(n.g,o.g),s=A(n.b,o.b),l=ty(n.opacity,o.opacity);return function(g){return n.r=a(g),n.g=r(g),n.b=s(g),n.opacity=l(g),n+""}}return i.gamma=t,i})(1);function EeA(t){return function(e){var A=e.length,i=new Array(A),n=new Array(A),o=new Array(A),a,r;for(a=0;aA&&(o=e.slice(A,o),r[a]?r[a]+=o:r[++a]=o),(i=i[0])===(n=n[0])?r[a]?r[a]+=n:r[++a]=n:(r[++a]=null,s.push({i:a,x:vg(i,n)})),A=BN.lastIndex;return A180?g+=360:g-l>180&&(l+=360),I.push({i:C.push(n(C)+"rotate(",null,i)-2,x:vg(l,g)})):g&&C.push(n(C)+"rotate("+g+i)}function r(l,g,C,I){l!==g?I.push({i:C.push(n(C)+"skewX(",null,i)-2,x:vg(l,g)}):g&&C.push(n(C)+"skewX("+g+i)}function s(l,g,C,I,d,h){if(l!==C||g!==I){var E=d.push(n(d)+"scale(",null,",",null,")");h.push({i:E-4,x:vg(l,C)},{i:E-2,x:vg(g,I)})}else(C!==1||I!==1)&&d.push(n(d)+"scale("+C+","+I+")")}return function(l,g){var C=[],I=[];return l=t(l),g=t(g),o(l.translateX,l.translateY,g.translateX,g.translateY,C,I),a(l.rotate,g.rotate,C,I),r(l.skewX,g.skewX,C,I),s(l.scaleX,l.scaleY,g.scaleX,g.scaleY,C,I),l=g=null,function(d){for(var h=-1,E=I.length,f;++h=0&&t._call.call(void 0,e),t=t._next;--nQ}function meA(){Ld=(ry=E3.now())+sy,nQ=d3=0;try{yeA()}finally{nQ=0,PvA(),Ld=0}}function zvA(){var t=E3.now(),e=t-ry;e>weA&&(sy-=e,ry=t)}function PvA(){for(var t,e=ay,A,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(A=e._next,e._next=null,e=t?t._next=A:ay=A);B3=t,mN(i)}function mN(t){if(!nQ){d3&&(d3=clearTimeout(d3));var e=t-Ld;e>24?(t<1/0&&(d3=setTimeout(meA,t-E3.now()-sy)),I3&&(I3=clearInterval(I3))):(I3||(ry=E3.now(),I3=setInterval(zvA,weA)),nQ=1,DeA(meA))}}function gy(t,e,A){var i=new h3;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,A),i}var jvA=_d("start","end","cancel","interrupt"),qvA=[],MeA=0,veA=1,Cy=2,cy=3,beA=4,Iy=5,u3=6;function LI(t,e,A,i,n,o){var a=t.__transition;if(!a)t.__transition={};else if(A in a)return;VvA(t,A,{name:e,index:i,group:n,on:jvA,tween:qvA,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:MeA})}function f3(t,e){var A=Br(t,e);if(A.state>MeA)throw new Error("too late; already scheduled");return A}function es(t,e){var A=Br(t,e);if(A.state>cy)throw new Error("too late; already running");return A}function Br(t,e){var A=t.__transition;if(!A||!(A=A[e]))throw new Error("transition not found");return A}function VvA(t,e,A){var i=t.__transition,n;i[e]=A,A.timer=ly(o,0,A.time);function o(l){A.state=veA,A.timer.restart(a,A.delay,A.time),A.delay<=l&&a(l-A.delay)}function a(l){var g,C,I,d;if(A.state!==veA)return s();for(g in i)if(d=i[g],d.name===A.name){if(d.state===cy)return gy(a);d.state===beA?(d.state=u3,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[g]):+gCy&&i.state=0&&(e=e.slice(0,A)),!e||e==="start"})}function BbA(t,e,A){var i,n,o=dbA(e)?f3:es;return function(){var a=o(this,t),r=a.on;r!==i&&(n=(i=r).copy()).on(e,A),a.on=n}}function UeA(t,e){var A=this._id;return arguments.length<2?Br(this.node(),A).on.on(t):this.each(BbA(A,t,e))}function EbA(t){return function(){var e=this.parentNode;for(var A in this.__transition)if(+A!==t)return;e&&e.removeChild(this)}}function TeA(){return this.on("end.remove",EbA(this._id))}function JeA(t){var e=this._name,A=this._id;typeof t!="function"&&(t=xd(t));for(var i=this._groups,n=i.length,o=new Array(n),a=0;a()=>t;function wN(t,{sourceEvent:e,target:A,transform:i,dispatch:n}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:A,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:n}})}function Sc(t,e,A){this.k=t,this.x=e,this.y=A}Sc.prototype={constructor:Sc,scale:function(t){return t===1?this:new Sc(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Sc(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var GI=new Sc(1,0,0);DN.prototype=Sc.prototype;function DN(t){for(;!t.__zoom;)if(!(t=t.parentNode))return GI;return t.__zoom}function hy(t){t.stopImmediatePropagation()}function aQ(t){t.preventDefault(),t.stopImmediatePropagation()}function xbA(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function _bA(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function $eA(){return this.__zoom||GI}function RbA(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function NbA(){return navigator.maxTouchPoints||"ontouchstart"in this}function FbA(t,e,A){var i=t.invertX(e[0][0])-A[0][0],n=t.invertX(e[1][0])-A[1][0],o=t.invertY(e[0][1])-A[0][1],a=t.invertY(e[1][1])-A[1][1];return t.translate(n>i?(i+n)/2:Math.min(0,i)||Math.max(0,n),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function yN(){var t=xbA,e=_bA,A=FbA,i=RbA,n=NbA,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],r=250,s=pN,l=_d("start","zoom","end"),g,C,I,d=500,h=150,E=0,f=10;function m(X){X.property("__zoom",$eA).on("wheel.zoom",z,{passive:!1}).on("mousedown.zoom",P).on("dblclick.zoom",W).filter(n).on("touchstart.zoom",eA).on("touchmove.zoom",Z).on("touchend.zoom touchcancel.zoom",EA).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}m.transform=function(X,iA,AA,IA){var aA=X.selection?X.selection():X;aA.property("__zoom",$eA),X!==aA?b(X,iA,AA,IA):aA.interrupt().each(function(){x(this,arguments).event(IA).start().zoom(null,typeof iA=="function"?iA.apply(this,arguments):iA).end()})},m.scaleBy=function(X,iA,AA,IA){m.scaleTo(X,function(){var aA=this.__zoom.k,rA=typeof iA=="function"?iA.apply(this,arguments):iA;return aA*rA},AA,IA)},m.scaleTo=function(X,iA,AA,IA){m.transform(X,function(){var aA=e.apply(this,arguments),rA=this.__zoom,uA=AA==null?S(aA):typeof AA=="function"?AA.apply(this,arguments):AA,UA=rA.invert(uA),$A=typeof iA=="function"?iA.apply(this,arguments):iA;return A(k(v(rA,$A),uA,UA),aA,a)},AA,IA)},m.translateBy=function(X,iA,AA,IA){m.transform(X,function(){return A(this.__zoom.translate(typeof iA=="function"?iA.apply(this,arguments):iA,typeof AA=="function"?AA.apply(this,arguments):AA),e.apply(this,arguments),a)},null,IA)},m.translateTo=function(X,iA,AA,IA,aA){m.transform(X,function(){var rA=e.apply(this,arguments),uA=this.__zoom,UA=IA==null?S(rA):typeof IA=="function"?IA.apply(this,arguments):IA;return A(GI.translate(UA[0],UA[1]).scale(uA.k).translate(typeof iA=="function"?-iA.apply(this,arguments):-iA,typeof AA=="function"?-AA.apply(this,arguments):-AA),rA,a)},IA,aA)};function v(X,iA){return iA=Math.max(o[0],Math.min(o[1],iA)),iA===X.k?X:new Sc(iA,X.x,X.y)}function k(X,iA,AA){var IA=iA[0]-AA[0]*X.k,aA=iA[1]-AA[1]*X.k;return IA===X.x&&aA===X.y?X:new Sc(X.k,IA,aA)}function S(X){return[(+X[0][0]+ +X[1][0])/2,(+X[0][1]+ +X[1][1])/2]}function b(X,iA,AA,IA){X.on("start.zoom",function(){x(this,arguments).event(IA).start()}).on("interrupt.zoom end.zoom",function(){x(this,arguments).event(IA).end()}).tween("zoom",function(){var aA=this,rA=arguments,uA=x(aA,rA).event(IA),UA=e.apply(aA,rA),$A=AA==null?S(UA):typeof AA=="function"?AA.apply(aA,rA):AA,zA=Math.max(UA[1][0]-UA[0][0],UA[1][1]-UA[0][1]),pA=aA.__zoom,PA=typeof iA=="function"?iA.apply(aA,rA):iA,Ue=s(pA.invert($A).concat(zA/pA.k),PA.invert($A).concat(zA/PA.k));return function(_e){if(_e===1)_e=PA;else{var YA=Ue(_e),fA=zA/YA[2];_e=new Sc(fA,$A[0]-YA[0]*fA,$A[1]-YA[1]*fA)}uA.zoom(null,_e)}})}function x(X,iA,AA){return!AA&&X.__zooming||new F(X,iA)}function F(X,iA){this.that=X,this.args=iA,this.active=0,this.sourceEvent=null,this.extent=e.apply(X,iA),this.taps=0}F.prototype={event:function(X){return X&&(this.sourceEvent=X),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(X,iA){return this.mouse&&X!=="mouse"&&(this.mouse[1]=iA.invert(this.mouse[0])),this.touch0&&X!=="touch"&&(this.touch0[1]=iA.invert(this.touch0[0])),this.touch1&&X!=="touch"&&(this.touch1[1]=iA.invert(this.touch1[0])),this.that.__zoom=iA,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(X){var iA=Nr(this.that).datum();l.call(X,this.that,new wN(X,{sourceEvent:this.sourceEvent,target:m,type:X,transform:this.that.__zoom,dispatch:l}),iA)}};function z(X,...iA){if(!t.apply(this,arguments))return;var AA=x(this,iA).event(X),IA=this.__zoom,aA=Math.max(o[0],Math.min(o[1],IA.k*Math.pow(2,i.apply(this,arguments)))),rA=yg(X);if(AA.wheel)(AA.mouse[0][0]!==rA[0]||AA.mouse[0][1]!==rA[1])&&(AA.mouse[1]=IA.invert(AA.mouse[0]=rA)),clearTimeout(AA.wheel);else{if(IA.k===aA)return;AA.mouse=[rA,IA.invert(rA)],Gd(this),AA.start()}aQ(X),AA.wheel=setTimeout(uA,h),AA.zoom("mouse",A(k(v(IA,aA),AA.mouse[0],AA.mouse[1]),AA.extent,a));function uA(){AA.wheel=null,AA.end()}}function P(X,...iA){if(I||!t.apply(this,arguments))return;var AA=X.currentTarget,IA=x(this,iA,!0).event(X),aA=Nr(X.view).on("mousemove.zoom",$A,!0).on("mouseup.zoom",zA,!0),rA=yg(X,AA),uA=X.clientX,UA=X.clientY;a3(X.view),hy(X),IA.mouse=[rA,this.__zoom.invert(rA)],Gd(this),IA.start();function $A(pA){if(aQ(pA),!IA.moved){var PA=pA.clientX-uA,Ue=pA.clientY-UA;IA.moved=PA*PA+Ue*Ue>E}IA.event(pA).zoom("mouse",A(k(IA.that.__zoom,IA.mouse[0]=yg(pA,AA),IA.mouse[1]),IA.extent,a))}function zA(pA){aA.on("mousemove.zoom mouseup.zoom",null),r3(pA.view,IA.moved),aQ(pA),IA.event(pA).end()}}function W(X,...iA){if(t.apply(this,arguments)){var AA=this.__zoom,IA=yg(X.changedTouches?X.changedTouches[0]:X,this),aA=AA.invert(IA),rA=AA.k*(X.shiftKey?.5:2),uA=A(k(v(AA,rA),IA,aA),e.apply(this,iA),a);aQ(X),r>0?Nr(this).transition().duration(r).call(b,uA,IA,X):Nr(this).call(m.transform,uA,IA,X)}}function eA(X,...iA){if(t.apply(this,arguments)){var AA=X.touches,IA=AA.length,aA=x(this,iA,X.changedTouches.length===IA).event(X),rA,uA,UA,$A;for(hy(X),uA=0;uA{let A=Math.max(0,Math.min(t.x+t.width,e.x+e.width)-Math.max(t.x,e.x)),i=Math.max(0,Math.min(t.y+t.height,e.y+e.height)-Math.max(t.y,e.y));return Math.ceil(A*i)};function dtA(t){if(t.length===0)return{x:0,y:0,width:0,height:0};let e={x:1/0,y:1/0,x2:-1/0,y2:-1/0};return t.forEach(A=>{let i=nMA(A);e=aMA(e,i)}),oMA(e)}function iMA(t,e,A){let i=e.find(o=>o.rawNode.id===t);if(!i)return[];let n=uy(i);return e.filter(o=>{if(o.rawNode.id===t)return!1;let a=tMA(uy(o),n);return A?.partially?a>0:a>=n.width*n.height})}function nMA(t){return{x:t.point().x,y:t.point().y,x2:t.point().x+t.size().width,y2:t.point().y+t.size().height}}function uy(t){return{x:t.globalPoint().x,y:t.globalPoint().y,width:t.width(),height:t.height()}}function oMA({x:t,y:e,x2:A,y2:i}){return{x:t,y:e,width:A-t,height:i-e}}function aMA(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y),x2:Math.max(t.x2,e.x2),y2:Math.max(t.y2,e.y2)}}var fy=class{constructor(e){this.settings=e,this.curve=e.curve??"bezier",this.type=e.type??"default",this.mode=e.mode??"strict";let A=this.getValidators(e);this.validator=i=>A.every(n=>n(i))}getValidators(e){let A=[];return A.push(rMA),this.mode==="loose"&&A.push(sMA),e.validator&&A.push(e.validator),A}},rMA=t=>t.source!==t.target,sMA=t=>t.sourceHandle!==void 0&&t.targetHandle!==void 0;function sQ(t){return t.split("").reduce((e,A)=>(e=(e<<5)-e+A.charCodeAt(0),e&e),0)}var ul=(()=>{class t{constructor(){this.nodes=bA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawNodes=pe(()=>this.nodes().map(A=>A.rawNode)),this.edges=bA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawEdges=pe(()=>this.edges().map(A=>A.edge)),this.validEdges=pe(()=>{let A=this.nodes();return this.edges().filter(i=>A.includes(i.source())&&A.includes(i.target()))}),this.connection=bA(new fy({})),this.markers=pe(()=>{let A=new Map;this.validEdges().forEach(n=>{if(n.edge.markers?.start){let o=sQ(JSON.stringify(n.edge.markers.start));A.set(o,n.edge.markers.start)}if(n.edge.markers?.end){let o=sQ(JSON.stringify(n.edge.markers.end));A.set(o,n.edge.markers.end)}});let i=this.connection().settings.marker;if(i){let n=sQ(JSON.stringify(i));A.set(n,i)}return A}),this.entities=pe(()=>[...this.nodes(),...this.edges()]),this.minimap=bA(null)}getNode(A){return this.nodes().find(({rawNode:i})=>i.id===A)}getDetachedEdges(){return this.edges().filter(A=>A.detached())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function lMA(t,e,A,i,n,o){let a=e/(t.width*(1+o)),r=A/(t.height*(1+o)),s=Math.min(a,r),l=gMA(s,i,n),g=t.x+t.width/2,C=t.y+t.height/2,I=e/2-g*l,d=A/2-C*l;return{x:I,y:d,zoom:l}}function gMA(t,e=0,A=1){return Math.min(Math.max(t,e),A)}function cMA(t,e,A){let i=t.zoom;return{x:-t.x/i,y:-t.y/i,width:e/i,height:A/i}}function CMA(t,e,A,i){let n=cMA(e,A,i);return!(t.x+t.widthn.x+n.width||t.y+t.heightn.y+n.height)}var IMA={detachedGroupsLayer:!1,virtualization:!1,virtualizationZoomThreshold:.5,lazyLoadTrigger:"immediate"},ts=(()=>{class t{constructor(){this.entitiesSelectable=bA(!0),this.elevateNodesOnSelect=bA(!0),this.elevateEdgesOnSelect=bA(!0),this.view=bA([400,400]),this.computedFlowWidth=bA(0),this.computedFlowHeight=bA(0),this.minZoom=bA(.5),this.maxZoom=bA(3),this.background=bA({type:"solid",color:"#fff"}),this.snapGrid=bA([1,1]),this.optimization=bA(IMA)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),Kd=(()=>{class t{constructor(){this.entitiesService=w(ul),this.flowSettingsService=w(ts),this.writableViewport=bA({changeType:"initial",state:t.getDefaultViewport(),duration:0}),this.readableViewport=bA(t.getDefaultViewport()),this.viewportChangeEnd$=new ie}static getDefaultViewport(){return{zoom:1,x:0,y:0}}fitView(A={padding:.1,duration:0,nodes:[]}){let i=this.getBoundsNodes(A.nodes??[]),n=lMA(dtA(i),this.flowSettingsService.computedFlowWidth(),this.flowSettingsService.computedFlowHeight(),this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom(),A.padding??.1),o=A.duration??0;this.writableViewport.set({changeType:"absolute",state:n,duration:o})}triggerViewportChangeEvent(A){A==="end"&&this.viewportChangeEnd$.next()}getBoundsNodes(A){return A?.length?A.map(i=>this.entitiesService.nodes().find(({rawNode:n})=>n.id===i)).filter(i=>!!i):this.entitiesService.nodes()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function PC(t){return t!==void 0}var My=(()=>{class t{constructor(){this.element=w(ce).nativeElement}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["svg","rootSvgRef",""]]})}}return t})();function AtA(){let t=window.navigator.userAgent.toLowerCase(),e=/(macintosh|macintel|macppc|mac68k|macos)/i,A=/(win32|win64|windows|wince)/i,i=/(iphone|ipad|ipod)/i,n=null;return e.test(t)?n="macos":i.test(t)?n="ios":A.test(t)?n="windows":/android/.test(t)?n="android":!n&&/linux/.test(t)&&(n="linux"),n}var SN=(()=>{class t{constructor(){this.actions=bA({multiSelection:[AtA()==="macos"?"MetaLeft":"ControlLeft",AtA()==="macos"?"MetaRight":"ControlRight"]}),this.actionsActive={multiSelection:!1},po(this.actions).pipe(Ei(()=>Ki(Gc(document,"keydown").pipe(Ii(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!0)})),Gc(document,"keyup").pipe(Ii(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!1)})))),wr()).subscribe()}setShortcuts(A){this.actions.update(i=>gA(gA({},i),A))}isActiveAction(A){return this.actionsActive[A]}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),b3=(()=>{class t{constructor(){this.flowEntitiesService=w(ul),this.keyboardService=w(SN),this.viewport$=new ie,this.resetSelection=this.viewport$.pipe(Ii(({start:A,end:i,target:n})=>{if(A&&i&&n){let o=t.delta,a=Math.abs(i.x-A.x),r=Math.abs(i.y-A.y),s=ai.selected.set(!1)),A&&A.selected.set(!0))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),vN=(()=>{class t{constructor(){this.rootSvg=w(My).element,this.host=w(ce).nativeElement,this.selectionService=w(b3),this.viewportService=w(Kd),this.flowSettingsService=w(ts),this.zone=w(qe),this.rootSvgSelection=Nr(this.rootSvg),this.transform=bA(""),this.viewportForSelection={},this.manualViewportChangeEffect=Ao(()=>{let A=this.viewportService.writableViewport(),i=A.state;if(A.changeType!=="initial"){if(PC(i.zoom)&&!PC(i.x)&&!PC(i.y)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.scaleTo,i.zoom);return}if(PC(i.x)&&PC(i.y)&&!PC(i.zoom)){let n=ca(this.viewportService.readableViewport).zoom;this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,GI.translate(i.x,i.y).scale(n));return}if(PC(i.x)&&PC(i.y)&&PC(i.zoom)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,GI.translate(i.x,i.y).scale(i.zoom));return}}},{allowSignalWrites:!0}),this.handleZoom=({transform:A})=>{this.viewportService.readableViewport.set(bN(A)),this.transform.set(A.toString())},this.handleZoomStart=({transform:A})=>{this.viewportForSelection={start:bN(A)}},this.handleZoomEnd=({transform:A,sourceEvent:i})=>{this.zone.run(()=>{this.viewportForSelection=Ye(gA({},this.viewportForSelection),{end:bN(A),target:dMA(i)}),this.viewportService.triggerViewportChangeEvent("end"),this.selectionService.setViewport(this.viewportForSelection)})},this.filterCondition=A=>A.type==="mousedown"||A.type==="touchstart"?A.target.closest(".vflow-node")===null:!0}ngOnInit(){this.zone.runOutsideAngular(()=>{this.zoomBehavior=yN().scaleExtent([this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom()]).filter(this.filterCondition).on("start",this.handleZoomStart).on("zoom",this.handleZoom).on("end",this.handleZoomEnd),this.rootSvgSelection.call(this.zoomBehavior).on("dblclick.zoom",null)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["g","mapContext",""]],hostVars:1,hostBindings:function(i,n){i&2&&te("transform",n.transform())}})}}return t})(),bN=t=>({zoom:t.k,x:t.x,y:t.y}),dMA=t=>{if(t instanceof Event&&t.target instanceof Element)return t.target},py=t=>Math.round(t*100)/100;function Ql(t,e){return Math.ceil(t/e)*e}var KI=(()=>{class t{constructor(){this.status=bA({state:"idle",payload:null})}setIdleStatus(){this.status.set({state:"idle",payload:null})}setConnectionStartStatus(A,i){this.status.set({state:"connection-start",payload:{source:A,sourceHandle:i}})}setReconnectionStartStatus(A,i,n){this.status.set({state:"reconnection-start",payload:{source:A,sourceHandle:i,oldEdge:n}})}setConnectionValidationStatus(A,i,n,o,a){this.status.set({state:"connection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A}})}setReconnectionValidationStatus(A,i,n,o,a,r){this.status.set({state:"reconnection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A,oldEdge:r}})}setConnectionEndStatus(A,i,n,o){this.status.set({state:"connection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o}})}setReconnectionEndStatus(A,i,n,o,a){this.status.set({state:"reconnection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o,oldEdge:a}})}setNodeDragStartStatus(A){this.status.set({state:"node-drag-start",payload:{node:A}})}setNodeDragEndStatus(A){this.status.set({state:"node-drag-end",payload:{node:A}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function etA(t){return t.state==="node-drag-start"}function BMA(t){return t.state==="node-drag-end"}var BtA=(()=>{class t{constructor(){this.entitiesService=w(ul),this.settingsService=w(ts),this.flowStatusService=w(KI)}enable(A,i){Nr(A).call(this.getDragBehavior(i))}disable(A){Nr(A).call(WD().on("drag",null))}destroy(A){Nr(A).on(".drag",null)}getDragBehavior(A){let i=[],n=[],o=a=>A.dragHandlesCount()?!!a.target.closest(".vflow-drag-handle"):!0;return WD().filter(o).on("start",a=>{i=this.getDragNodes(A),this.flowStatusService.setNodeDragStartStatus(A),n=i.map(r=>({x:r.point().x-a.x,y:r.point().y-a.y}))}).on("drag",a=>{i.forEach((r,s)=>{let l={x:py(a.x+n[s].x),y:py(a.y+n[s].y)};this.moveNode(r,l)})}).on("end",()=>{this.flowStatusService.setNodeDragEndStatus(A)})}getDragNodes(A){return A.selected()?this.entitiesService.nodes().filter(i=>i.selected()&&i.draggable()):[A]}moveNode(A,i){i=this.alignToGrid(i);let n=A.parent();n&&(i.x=Math.min(n.width()-A.width(),i.x),i.x=Math.max(0,i.x),i.y=Math.min(n.height()-A.height(),i.y),i.y=Math.max(0,i.y)),A.setPoint(i)}alignToGrid(A){let[i,n]=this.settingsService.snapGrid();return i>1&&(A.x=Ql(A.x,i)),n>1&&(A.y=Ql(A.y,n)),A}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),my=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","edge",""]]})}}return t})(),ttA=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","connection",""]]})}}return t})(),itA=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","edgeLabelHtml",""]]})}}return t})(),lQ=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","nodeHtml",""]]})}}return t})(),ntA=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","nodeSvg",""]]})}}return t})(),wy=(()=>{class t{constructor(){this.templateRef=w(ao)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["ng-template","groupNode",""]]})}}return t})();function otA(t,e){let A=t.reduce((i,n)=>(i[n.rawNode.id]=n,i),{});e.forEach(i=>{i.source.set(A[i.edge.source]),i.target.set(A[i.edge.target])})}function D3(t){try{return new Proxy(t,{apply:()=>{}})(),!0}catch(e){return!1}}var kN=(()=>{class t{constructor(){this._event$=new ie,this.event$=this._event$.asObservable()}pushEvent(A){this._event$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),gQ=(()=>{class t{constructor(){this.model=bA(null)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),EtA=(()=>{class t{constructor(){this.eventBus=w(kN),this.nodeService=w(gQ),this.destroyRef=w(sr),this.selected=this.nodeService.model().selected,this.data=bA(void 0)}ngOnInit(){this.trackEvents().pipe(wr(this.destroyRef)).subscribe()}trackEvents(){let A=Object.getOwnPropertyNames(this),i=new Map;for(let n of A){let o=this[n];o instanceof LA&&i.set(o,n),o instanceof qF&&i.set(EMA(o),n)}return Ki(...Array.from(i.keys()).map(n=>n.pipe(Ii(o=>{this.eventBus.pushEvent({nodeId:this.nodeService.model()?.rawNode.id??"",eventName:i.get(n),eventPayload:o})}))))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,standalone:!1})}}return t})();function EMA(t){return new vi(e=>{let A=t.subscribe(i=>{e.next(i)});return()=>{A.unsubscribe()}})}var hMA=(()=>{class t extends EtA{constructor(){super(...arguments),this.node=me.required()}ngOnInit(){let A=this.node().data;A&&(this.data=A),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})()}static{this.\u0275dir=VA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[mt]})}}return t})(),QMA=(()=>{class t extends EtA{constructor(){super(...arguments),this.node=me.required()}ngOnInit(){this.node().data&&this.data.set(this.node().data),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})()}static{this.\u0275dir=VA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[mt]})}}return t})();function htA(t){return Object.prototype.isPrototypeOf.call(QMA,t)}function QtA(t){return Object.prototype.isPrototypeOf.call(hMA,t)}function uMA(t){return typeof t.point=="function"}function fMA(t){return htA(t.type)?!0:D3(t.type)&&!D3(t.point)}function pMA(t){return QtA(t.type)?!0:D3(t.type)&&D3(t.point)}var Dy=2;function mMA(t){return uMA(t)?t:Ye(gA({},wMA(t)),{id:t.id,type:t.type})}function wMA(t){let e={};for(let A in t)Object.prototype.hasOwnProperty.call(t,A)&&(e[A]=bA(t[A]));return e}function DMA(t,e,A){!e&&KF(t);let i=e??w(Dt);return A?Xa(i,A):i}function y3(t,e){let A=DMA(y3,e?.injector),i;return pe(()=>(i||(i=ca(()=>Ar(t,Ye(gA({},e),{injector:A})))),i()))}function yMA(t){return t.rawNode.type==="default-group"||t.rawNode.type==="template-group"}var Ud=(()=>{class t{constructor(){this.flowEntitiesService=w(ul),this.flowSettingsService=w(ts),this.viewportService=w(Kd),this.nodes=pe(()=>this.flowSettingsService.optimization().virtualization?this.viewportNodesAfterInteraction().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.nodes()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.groups=pe(()=>this.nodes().filter(A=>!!A.children().length||yMA(A))),this.nonGroups=pe(()=>this.nodes().filter(A=>!this.groups().includes(A))),this.viewportNodes=pe(()=>{let A=this.flowEntitiesService.nodes(),i=this.viewportService.readableViewport(),n=this.flowSettingsService.computedFlowWidth(),o=this.flowSettingsService.computedFlowHeight();return A.filter(a=>{let{x:r,y:s}=a.globalPoint(),l=a.width(),g=a.height();return CMA({x:r,y:s,width:l,height:g},i,n,o)})}),this.viewportNodesAfterInteraction=y3(Ki(po(this.flowEntitiesService.nodes).pipe(Hd(U3),gt(A=>!!A.length)),this.viewportService.viewportChangeEnd$.pipe(Ls(300))).pipe(we(()=>{let A=this.viewportService.readableViewport(),i=this.flowSettingsService.optimization().virtualizationZoomThreshold;return A.zoomMath.max(...this.flowEntitiesService.nodes().map(A=>A.renderOrder())))}pullNode(A){A.renderOrder.set(this.maxOrder()+1),A.children().forEach(i=>this.pullNode(i))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function yy(t,e){e||(e={equal:Object.is});let A;return pe(()=>A=t(A),e)}var vMA=(()=>{class t{static{this.defaultWidth=100}static{this.defaultHeight=50}static{this.defaultColor="#1b262c"}constructor(A){this.rawNode=A,this.entitiesService=w(ul),this.settingsService=w(ts),this.nodeRenderingService=w(Ud),this.isVisible=bA(!1),this.point=bA({x:0,y:0}),this.width=bA(t.defaultWidth),this.height=bA(t.defaultHeight),this.size=pe(()=>({width:this.width(),height:this.height()})),this.styleWidth=pe(()=>this.controlledByResizer()?`${this.width()}px`:"100%"),this.styleHeight=pe(()=>this.controlledByResizer()?`${this.height()}px`:"100%"),this.foWidth=pe(()=>this.width()+Dy),this.foHeight=pe(()=>this.height()+Dy),this.renderOrder=bA(0),this.selected=bA(!1),this.preview=bA({style:{}}),this.globalPoint=pe(()=>{let n=this.parent(),o=this.point().x,a=this.point().y;for(;n!==null;)o+=n.point().x,a+=n.point().y,n=n.parent();return{x:o,y:a}}),this.pointTransform=pe(()=>`translate(${this.globalPoint().x}, ${this.globalPoint().y})`),this.handles=bA([]),this.draggable=bA(!0),this.dragHandlesCount=bA(0),this.magnetRadius=20,this.isComponentType=fMA(this.rawNode)||pMA(this.rawNode),this.shouldLoad=yy(n=>{if(n||this.settingsService.optimization().lazyLoadTrigger==="immediate")return!0;if(this.settingsService.optimization().lazyLoadTrigger==="viewport"){if(htA(this.rawNode.type)||QtA(this.rawNode.type))return!0;if(D3(this.rawNode.type)||this.rawNode.type==="html-template"||this.rawNode.type==="svg-template"||this.rawNode.type==="template-group")return this.nodeRenderingService.viewportNodes().includes(this)}return!0}),this.componentInstance$=po(this.shouldLoad).pipe(gt(Boolean),Ei(()=>this.rawNode.type()),Po(()=>oe(this.rawNode.type)),Gs(1)),this.text=bA(""),this.componentTypeInputs={node:this.rawNode},this.parent=pe(()=>this.entitiesService.nodes().find(n=>n.rawNode.id===this.parentId())??null),this.children=pe(()=>this.entitiesService.nodes().filter(n=>n.parentId()===this.rawNode.id)),this.color=bA(t.defaultColor),this.controlledByResizer=bA(!1),this.resizable=bA(!1),this.resizing=bA(!1),this.resizerTemplate=bA(null),this.context={$implicit:{}},this.parentId=bA(null);let i=mMA(A);i.point&&(this.point=i.point),i.width&&(this.width=i.width),i.height&&(this.height=i.height),i.draggable&&(this.draggable=i.draggable),i.parentId&&(this.parentId=i.parentId),i.preview&&(this.preview=i.preview),i.type==="default-group"&&i.color&&(this.color=i.color),i.type==="default-group"&&i.resizable&&(this.resizable=i.resizable),i.type==="default"&&i.text&&(this.text=i.text),i.type==="html-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="svg-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="template-group"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),this.point$=po(this.point),this.width$=po(this.width),this.height$=po(this.height),this.size$=po(this.size),this.selected$=po(this.selected),this.handles$=po(this.handles)}setPoint(A){this.point.set(A)}}return t})(),m3=class{constructor(e){this.edgeLabel=e,this.size=bA({width:0,height:0})}};function jC(t,e,A){return{x:(1-A)*t.x+A*e.x,y:(1-A)*t.y+A*e.y}}function xN({sourcePoint:t,targetPoint:e}){return{path:`M ${t.x},${t.y}L ${e.x},${e.y}`,labelPoints:{start:jC(t,e,.15),center:jC(t,e,.5),end:jC(t,e,.85)}}}function _N({sourcePoint:t,targetPoint:e,sourcePosition:A,targetPosition:i}){let n={x:t.x-e.x,y:t.y-e.y},o=atA(t,A,n),a=atA(e,i,n),r=`M${t.x},${t.y} C${o.x},${o.y} ${a.x},${a.y} ${e.x},${e.y}`;return bMA(r,t,e,o,a)}function atA(t,e,A){let i={x:0,y:0};switch(e){case"top":i.y=1;break;case"bottom":i.y=-1;break;case"right":i.x=1;break;case"left":i.x=-1;break}let n={x:A.x*Math.abs(i.x),y:A.y*Math.abs(i.y)},a=.25*25*Math.sqrt(Math.abs(n.x+n.y));return{x:t.x+i.x*a,y:t.y-i.y*a}}function bMA(t,e,A,i,n){return{path:t,labelPoints:{start:MN(e,A,i,n,.1),center:MN(e,A,i,n,.5),end:MN(e,A,i,n,.9)}}}function MN(t,e,A,i,n){let o=jC(t,A,n),a=jC(A,i,n),r=jC(i,e,n);return jC(jC(o,a,n),jC(a,r,n),n)}var rtA={left:{x:-1,y:0},right:{x:1,y:0},top:{x:0,y:-1},bottom:{x:0,y:1}};function MMA(t,e){let A=Math.abs(e.x-t.x)/2,i=e.xe==="left"||e==="right"?t.xMath.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));function kMA({source:t,sourcePosition:e="bottom",target:A,targetPosition:i="top",offset:n}){let o=rtA[e],a=rtA[i],r={x:t.x+o.x*n,y:t.y+o.y*n},s={x:A.x+a.x*n,y:A.y+a.y*n},l=SMA({source:r,sourcePosition:e,target:s}),g=l.x!==0?"x":"y",C=l[g],I=[],d,h,E={x:0,y:0},f={x:0,y:0},[m,v]=MMA(t,A);if(o[g]*a[g]===-1){d=m,h=v;let S=[{x:d,y:r.y},{x:d,y:s.y}],b=[{x:r.x,y:h},{x:s.x,y:h}];o[g]===C?I=g==="x"?S:b:I=g==="x"?b:S}else{let S=[{x:r.x,y:s.y}],b=[{x:s.x,y:r.y}];if(g==="x"?I=o.x===C?b:S:I=o.y===C?S:b,e===i){let W=Math.abs(t[g]-A[g]);if(W<=n){let eA=Math.min(n-1,n-W);o[g]===C?E[g]=(r[g]>t[g]?-1:1)*eA:f[g]=(s[g]>A[g]?-1:1)*eA}}if(e!==i){let W=g==="x"?"y":"x",eA=o[g]===a[W],Z=r[W]>s[W],EA=r[W]=P?(d=(x.x+F.x)/2,h=I[0].y):(d=I[0].x,h=(x.y+F.y)/2)}return[[t,{x:r.x+E.x,y:r.y+E.y},...I,{x:s.x+f.x,y:s.y+f.y},A],d,h]}function xMA(t,e,A,i){let n=Math.min(stA(t,e)/2,stA(e,A)/2,i),{x:o,y:a}=e;if(t.x===o&&o===A.x||t.y===a&&a===A.y)return`L${o} ${a}`;if(t.y===a){let l=t.x{let m="";return f>0&&f{let E=I*h;if(E<=0)return o[0];if(E>=I)return o[l-1];let f=0,m=l-1;for(;f>>1;C[F](this.source()?.shouldLoad()??!1)&&(this.target()?.shouldLoad()??!1)),this.renderOrder=bA(0),this.detached=pe(()=>{let A=this.source(),i=this.target();if(!A||!i)return!0;let n=!1,o=!1;return this.edge.sourceHandle?n=!!A.handles().find(a=>a.rawHandle.id===this.edge.sourceHandle):n=!!A.handles().find(a=>a.rawHandle.type==="source"),this.edge.targetHandle?o=!!i.handles().find(a=>a.rawHandle.id===this.edge.targetHandle):o=!!i.handles().find(a=>a.rawHandle.type==="target"),!n||!o}),this.detached$=po(this.detached),this.path=pe(()=>{let A=this.sourceHandle(),i=this.targetHandle();if(!A||!i)return{path:""};let n=this.getPathFactoryParams(A,i);switch(this.curve){case"straight":return xN(n);case"bezier":return _N(n);case"smooth-step":return rQ(n);case"step":return rQ(n,0);default:return this.curve(n)}}),this.sourceHandle=yy(A=>{let i=null;return this.floating?i=this.closestHandles().sourceHandle:this.edge.sourceHandle?i=this.source()?.handles().find(n=>n.rawHandle.id===this.edge.sourceHandle)??null:i=this.source()?.handles().find(n=>n.rawHandle.type==="source")??null,i===null?A:i}),this.targetHandle=yy(A=>{let i=null;return this.floating?i=this.closestHandles().targetHandle:this.edge.targetHandle?i=this.target()?.handles().find(n=>n.rawHandle.id===this.edge.targetHandle)??null:i=this.target()?.handles().find(n=>n.rawHandle.type==="target")??null,i===null?A:i}),this.closestHandles=pe(()=>{let A=this.source(),i=this.target();if(!A||!i)return{sourceHandle:null,targetHandle:null};let n=this.flowEntitiesService.connection().mode==="strict"?A.handles().filter(l=>l.rawHandle.type==="source"):A.handles(),o=this.flowEntitiesService.connection().mode==="strict"?i.handles().filter(l=>l.rawHandle.type==="target"):i.handles();if(n.length===0||o.length===0)return{sourceHandle:null,targetHandle:null};let a=1/0,r=null,s=null;for(let l of n)for(let g of o){let C=l.pointAbsolute(),I=g.pointAbsolute(),d=Math.sqrt(Math.pow(C.x-I.x,2)+Math.pow(C.y-I.y,2));d{let A=this.edge.markers?.start;return A?`url(#${sQ(JSON.stringify(A))})`:""}),this.markerEndUrl=pe(()=>{let A=this.edge.markers?.end;return A?`url(#${sQ(JSON.stringify(A))})`:""}),this.context={$implicit:{edge:this.edge,path:pe(()=>this.path().path),markerStart:this.markerStartUrl,markerEnd:this.markerEndUrl,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}},this.edgeLabels={},this.type=e.type??"default",this.curve=e.curve??"bezier",this.reconnectable=e.reconnectable??!1,this.floating=e.floating??!1,e.edgeLabels?.start&&(this.edgeLabels.start=new m3(e.edgeLabels.start)),e.edgeLabels?.center&&(this.edgeLabels.center=new m3(e.edgeLabels.center)),e.edgeLabels?.end&&(this.edgeLabels.end=new m3(e.edgeLabels.end))}getPathFactoryParams(e,A){return{mode:"edge",edge:this.edge,sourcePoint:e.pointAbsolute(),targetPoint:A.pointAbsolute(),sourcePosition:e.rawHandle.position,targetPosition:A.rawHandle.position,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}},vy=class{static nodes(e,A){let i=new Map;return A.forEach(n=>i.set(n.rawNode,n)),e.map(n=>i.get(n)??new vMA(n))}static edges(e,A){let i=new Map;return A.forEach(n=>i.set(n.edge,n)),e.map(n=>i.has(n)?i.get(n):new RN(n))}},_MA=25,NN=(()=>{class t{constructor(){this.entitiesService=w(ul),this.nodesPositionChange$=po(this.entitiesService.nodes).pipe(Ei(A=>Ki(...A.map(i=>i.point$.pipe(wl(1),we(()=>i))))),we(A=>[{type:"position",id:A.rawNode.id,point:A.point()},...this.entitiesService.nodes().filter(i=>i!==A&&i.selected()).map(i=>({type:"position",id:i.rawNode.id,point:i.point()}))])),this.nodeSizeChange$=po(this.entitiesService.nodes).pipe(Ei(A=>Ki(...A.map(i=>i.size$.pipe(wl(1),we(()=>i))))),we(A=>[{type:"size",id:A.rawNode.id,size:A.size()}])),this.nodeAddChange$=po(this.entitiesService.nodes).pipe(VC(),we(([A,i])=>i.filter(n=>!A.includes(n))),gt(A=>!!A.length),we(A=>A.map(i=>({type:"add",id:i.rawNode.id})))),this.nodeRemoveChange$=po(this.entitiesService.nodes).pipe(VC(),we(([A,i])=>A.filter(n=>!i.includes(n))),gt(A=>!!A.length),we(A=>A.map(i=>({type:"remove",id:i.rawNode.id})))),this.nodeSelectedChange$=po(this.entitiesService.nodes).pipe(Ei(A=>Ki(...A.map(i=>i.selected$.pipe(kg(),wl(1),we(()=>i))))),we(A=>[{type:"select",id:A.rawNode.id,selected:A.selected()}])),this.changes$=Ki(this.nodesPositionChange$,this.nodeSizeChange$,this.nodeAddChange$,this.nodeRemoveChange$,this.nodeSelectedChange$).pipe(Hd(U3,_MA))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),RMA=(t,e)=>t.length===e.length&&[...new Set([...t,...e])].every(A=>t.filter(i=>i===A).length===e.filter(i=>i===A).length),FN=(()=>{class t{constructor(){this.entitiesService=w(ul),this.edgeDetachedChange$=Ki(po(pe(()=>{let A=this.entitiesService.nodes();return ca(this.entitiesService.edges).filter(({source:n,target:o})=>!A.includes(n())||!A.includes(o()))})),po(this.entitiesService.edges).pipe(Ei(A=>RF(...A.map(i=>i.detached$.pipe(we(()=>i))))),we(A=>A.filter(i=>i.detached())),wl(2))).pipe(kg(RMA),gt(A=>!!A.length),we(A=>A.map(({edge:i})=>({type:"detached",id:i.id})))),this.edgeAddChange$=po(this.entitiesService.edges).pipe(VC(),we(([A,i])=>i.filter(n=>!A.includes(n))),gt(A=>!!A.length),we(A=>A.map(({edge:i})=>({type:"add",id:i.id})))),this.edgeRemoveChange$=po(this.entitiesService.edges).pipe(VC(),we(([A,i])=>A.filter(n=>!i.includes(n))),gt(A=>!!A.length),we(A=>A.map(({edge:i})=>({type:"remove",id:i.id})))),this.edgeSelectChange$=po(this.entitiesService.edges).pipe(Ei(A=>Ki(...A.map(i=>i.selected$.pipe(kg(),wl(1),we(()=>i))))),we(A=>[{type:"select",id:A.edge.id,selected:A.selected()}])),this.changes$=Ki(this.edgeDetachedChange$,this.edgeAddChange$,this.edgeRemoveChange$,this.edgeSelectChange$).pipe(Hd(U3))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),NMA=(()=>{class t{constructor(){this.nodesChangeService=w(NN),this.edgesChangeService=w(FN),this.onNodesChange=kn(this.nodesChangeService.changes$),this.onNodesChangePosition=kn(this.nodeChangesOfType("position"),{alias:"onNodesChange.position"}),this.onNodesChangePositionSignle=kn(this.singleChange(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.single"}),this.onNodesChangePositionMany=kn(this.manyChanges(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.many"}),this.onNodesChangeSize=kn(this.nodeChangesOfType("size"),{alias:"onNodesChange.size"}),this.onNodesChangeSizeSingle=kn(this.singleChange(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.single"}),this.onNodesChangeSizeMany=kn(this.manyChanges(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.many"}),this.onNodesChangeAdd=kn(this.nodeChangesOfType("add"),{alias:"onNodesChange.add"}),this.onNodesChangeAddSingle=kn(this.singleChange(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.single"}),this.onNodesChangeAddMany=kn(this.manyChanges(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.many"}),this.onNodesChangeRemove=kn(this.nodeChangesOfType("remove"),{alias:"onNodesChange.remove"}),this.onNodesChangeRemoveSingle=kn(this.singleChange(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.single"}),this.onNodesChangeRemoveMany=kn(this.manyChanges(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.many"}),this.onNodesChangeSelect=kn(this.nodeChangesOfType("select"),{alias:"onNodesChange.select"}),this.onNodesChangeSelectSingle=kn(this.singleChange(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.single"}),this.onNodesChangeSelectMany=kn(this.manyChanges(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.many"}),this.onEdgesChange=kn(this.edgesChangeService.changes$),this.onNodesChangeDetached=kn(this.edgeChangesOfType("detached"),{alias:"onEdgesChange.detached"}),this.onNodesChangeDetachedSingle=kn(this.singleChange(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.single"}),this.onNodesChangeDetachedMany=kn(this.manyChanges(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.many"}),this.onEdgesChangeAdd=kn(this.edgeChangesOfType("add"),{alias:"onEdgesChange.add"}),this.onEdgeChangeAddSingle=kn(this.singleChange(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.single"}),this.onEdgeChangeAddMany=kn(this.manyChanges(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.many"}),this.onEdgeChangeRemove=kn(this.edgeChangesOfType("remove"),{alias:"onEdgesChange.remove"}),this.onEdgeChangeRemoveSingle=kn(this.singleChange(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.single"}),this.onEdgeChangeRemoveMany=kn(this.manyChanges(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.many"}),this.onEdgeChangeSelect=kn(this.edgeChangesOfType("select"),{alias:"onEdgesChange.select"}),this.onEdgeChangeSelectSingle=kn(this.singleChange(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.single"}),this.onEdgeChangeSelectMany=kn(this.manyChanges(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.many"})}nodeChangesOfType(A){return this.nodesChangeService.changes$.pipe(we(i=>i.filter(n=>n.type===A)),gt(i=>!!i.length))}edgeChangesOfType(A){return this.edgesChangeService.changes$.pipe(we(i=>i.filter(n=>n.type===A)),gt(i=>!!i.length))}singleChange(A){return A.pipe(gt(i=>i.length===1),we(([i])=>i))}manyChanges(A){return A.pipe(gt(i=>i.length>1))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","changesController",""]],outputs:{onNodesChange:"onNodesChange",onNodesChangePosition:"onNodesChange.position",onNodesChangePositionSignle:"onNodesChange.position.single",onNodesChangePositionMany:"onNodesChange.position.many",onNodesChangeSize:"onNodesChange.size",onNodesChangeSizeSingle:"onNodesChange.size.single",onNodesChangeSizeMany:"onNodesChange.size.many",onNodesChangeAdd:"onNodesChange.add",onNodesChangeAddSingle:"onNodesChange.add.single",onNodesChangeAddMany:"onNodesChange.add.many",onNodesChangeRemove:"onNodesChange.remove",onNodesChangeRemoveSingle:"onNodesChange.remove.single",onNodesChangeRemoveMany:"onNodesChange.remove.many",onNodesChangeSelect:"onNodesChange.select",onNodesChangeSelectSingle:"onNodesChange.select.single",onNodesChangeSelectMany:"onNodesChange.select.many",onEdgesChange:"onEdgesChange",onNodesChangeDetached:"onEdgesChange.detached",onNodesChangeDetachedSingle:"onEdgesChange.detached.single",onNodesChangeDetachedMany:"onEdgesChange.detached.many",onEdgesChangeAdd:"onEdgesChange.add",onEdgeChangeAddSingle:"onEdgesChange.add.single",onEdgeChangeAddMany:"onEdgesChange.add.many",onEdgeChangeRemove:"onEdgesChange.remove",onEdgeChangeRemoveSingle:"onEdgesChange.remove.single",onEdgeChangeRemoveMany:"onEdgesChange.remove.many",onEdgeChangeSelect:"onEdgesChange.select",onEdgeChangeSelectSingle:"onEdgesChange.select.single",onEdgeChangeSelectMany:"onEdgesChange.select.many"}})}}return t})(),Sy=(()=>{class t{constructor(){this.host=w(ce).nativeElement,this.initialTouch$=new ie,this.prevTouchEvent=null,this.mouseMovement$=Gc(this.host,"mousemove").pipe(we(A=>({x:A.clientX,y:A.clientY,movementX:A.movementX,movementY:A.movementY,target:A.target,originalEvent:A})),Hd(Yd),WC()),this.touchMovement$=Ki(this.initialTouch$,Gc(this.host,"touchmove")).pipe(Ii(A=>A.preventDefault()),we(A=>{let i=A.touches[0]?.clientX??0,n=A.touches[0]?.clientY??0,o=this.prevTouchEvent?A.touches[0].pageX-this.prevTouchEvent.touches[0].pageX:0,a=this.prevTouchEvent?A.touches[0].pageY-this.prevTouchEvent.touches[0].pageY:0,r=document.elementFromPoint(i,n);return{x:i,y:n,movementX:o,movementY:a,target:r,originalEvent:A}}),Ii(A=>this.prevTouchEvent=A.originalEvent),Hd(Yd),WC()),this.pointerMovement$=Ki(this.mouseMovement$,this.touchMovement$),this.touchEnd$=Gc(this.host,"touchend").pipe(we(A=>{let i=A.changedTouches[0]?.clientX??0,n=A.changedTouches[0]?.clientY??0,o=document.elementFromPoint(i,n);return{x:i,y:n,target:o,originalEvent:A}}),Ii(()=>this.prevTouchEvent=null),WC()),this.mouseUp$=Gc(this.host,"mouseup").pipe(we(A=>{let i=A.clientX,n=A.clientY,o=A.target;return{x:i,y:n,target:o,originalEvent:A}}),WC()),this.documentPointerEnd$=Ki(Gc(document,"mouseup"),Gc(document,"touchend")).pipe(WC())}setInitialTouch(A){this.initialTouch$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["svg","rootPointer",""]]})}}return t})(),w3=(()=>{class t{constructor(){this.pointerMovementDirective=w(Sy),this.rootSvg=w(My).element,this.host=w(ce).nativeElement,this.svgCurrentSpacePoint=pe(()=>{let A=this.pointerMovement();return A?this.documentPointToFlowPoint({x:A.x,y:A.y}):{x:0,y:0}}),this.pointerMovement=Ar(this.pointerMovementDirective.pointerMovement$)}documentPointToFlowPoint(A){let i=this.rootSvg.createSVGPoint();return i.x=A.x,i.y=A.y,i.matrixTransform(this.host.getScreenCTM().inverse())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["g","spacePointContext",""]]})}}return t})();function FMA(t){return typeof t=="string"?{type:"solid",color:t}:t}function by(t,e,A){let i=A.value;return A.value=function(...n){queueMicrotask(()=>{i?.apply(this,n)})},A}var utA=(()=>{class t{constructor(){this.toolbars=bA([]),this.nodeToolbarsMap=pe(()=>{let A=new Map;return this.toolbars().forEach(i=>{let n=A.get(i.node)??[];A.set(i.node,[...n,i])}),A})}addToolbar(A){this.toolbars.update(i=>[...i,A])}removeToolbar(A){this.toolbars.update(i=>i.filter(n=>n!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return kQ([by],t.prototype,"addToolbar",null),kQ([by],t.prototype,"removeToolbar",null),t})();function ky(t,e){return new vi(A=>{let i=new ResizeObserver(n=>{e.run(()=>A.next(n))});return t.forEach(n=>i.observe(n)),()=>i.disconnect()})}var LMA=(()=>{class t{constructor(){this.zone=w(qe),this.destroyRef=w(sr),this.settingsService=w(ts),this.model=me.required(),this.edgeModel=me.required(),this.point=me({x:0,y:0}),this.htmlTemplate=me(),this.edgeLabelWrapperRef=So.required("edgeLabelWrapper"),this.edgeLabelPoint=pe(()=>{let A=this.point(),{width:i,height:n}=this.model().size();return{x:A.x-i/2,y:A.y-n/2}}),this.edgeLabelStyle=pe(()=>{let A=this.model().edgeLabel;if(A.type==="default"&&A.style){let i=this.settingsService.background(),n="transparent";return i.type==="dots"&&(n=i.backgroundColor??"#fff"),i.type==="solid"&&(n=i.color),A.style.backgroundColor=A.style.backgroundColor??n,A.style}return null})}ngAfterViewInit(){let A=this.edgeLabelWrapperRef().nativeElement;ky([A],this.zone).pipe(Sn(null),Ii(()=>{let i=A.clientWidth+Dy,n=A.clientHeight+Dy;this.model().size.set({width:i,height:n})}),wr(this.destroyRef)).subscribe()}getLabelContext(){return{$implicit:{edge:this.edgeModel().edge,label:this.model().edgeLabel}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","edgeLabel",""]],viewQuery:function(i,n){i&1&&ns(n.edgeLabelWrapperRef,LbA,5),i&2&&ur()},inputs:{model:[1,"model"],edgeModel:[1,"edgeModel"],point:[1,"point"],htmlTemplate:[1,"htmlTemplate"]},attrs:GbA,decls:1,vars:1,consts:[["edgeLabelWrapper",""],[1,"edge-label-wrapper"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){if(i&1&&O(0,ObA,2,2),i&2){let o;Y((o=n.model())?0:-1,o)}},dependencies:[Jc],styles:[".edge-label-wrapper[_ngcontent-%COMP%]{width:max-content;margin-top:1px;margin-left:1px}"],changeDetection:0})}}return t})();function ftA(t){let e={};return t.sourceHandle.rawHandle.type==="source"?(e.source=t.source,e.sourceHandle=t.sourceHandle):(e.source=t.target,e.sourceHandle=t.targetHandle),t.targetHandle.rawHandle.type==="target"?(e.target=t.target,e.targetHandle=t.targetHandle):(e.target=t.source,e.targetHandle=t.sourceHandle),e}var ptA=(()=>{class t{constructor(){this.statusService=w(KI),this.flowEntitiesService=w(ul),this.onConnect=kn(po(this.statusService.status).pipe(gt(A=>A.state==="connection-end"),we(A=>Qy(A,this.isStrictMode())),Ii(()=>this.statusService.setIdleStatus()),gt(A=>this.flowEntitiesService.connection().validator(A)))),this.connect=kn(po(this.statusService.status).pipe(gt(A=>A.state==="connection-end"),we(A=>Qy(A,this.isStrictMode())),Ii(()=>this.statusService.setIdleStatus()),gt(A=>this.flowEntitiesService.connection().validator(A)))),this.onReconnect=kn(po(this.statusService.status).pipe(gt(A=>A.state==="reconnection-end"),we(A=>{let i=Qy(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),Ii(()=>this.statusService.setIdleStatus()),gt(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.reconnect=kn(po(this.statusService.status).pipe(gt(A=>A.state==="reconnection-end"),we(A=>{let i=Qy(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),Ii(()=>this.statusService.setIdleStatus()),gt(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.isStrictMode=pe(()=>this.flowEntitiesService.connection().mode==="strict")}startConnection(A){this.statusService.setConnectionStartStatus(A.parentNode,A)}startReconnection(A,i){this.statusService.setReconnectionStartStatus(A.parentNode,A,i)}validateConnection(A){let i=this.statusService.status();if(i.state==="connection-start"||i.state==="reconnection-start"){let n=i.state==="reconnection-start",o=i.payload.source,a=A.parentNode,r=i.payload.sourceHandle,s=A;if(this.isStrictMode()){let g=ftA({source:i.payload.source,sourceHandle:i.payload.sourceHandle,target:A.parentNode,targetHandle:A});o=g.source,a=g.target,r=g.sourceHandle,s=g.targetHandle}let l=this.flowEntitiesService.connection().validator({source:o.rawNode.id,target:a.rawNode.id,sourceHandle:r.rawHandle.id,targetHandle:s.rawHandle.id});A.state.set(l?"valid":"invalid"),n?this.statusService.setReconnectionValidationStatus(l,i.payload.source,A.parentNode,i.payload.sourceHandle,A,i.payload.oldEdge):this.statusService.setConnectionValidationStatus(l,i.payload.source,A.parentNode,i.payload.sourceHandle,A)}}resetValidateConnection(A){A.state.set("idle");let i=this.statusService.status();(i.state==="connection-validation"||i.state==="reconnection-validation")&&(i.state==="reconnection-validation"?this.statusService.setReconnectionStartStatus(i.payload.source,i.payload.sourceHandle,i.payload.oldEdge):this.statusService.setConnectionStartStatus(i.payload.source,i.payload.sourceHandle))}endConnection(){let A=this.statusService.status();if(A.state==="connection-validation"||A.state==="reconnection-validation"){let i=A.state==="reconnection-validation",n=A.payload.source,o=A.payload.sourceHandle,a=A.payload.target,r=A.payload.targetHandle;i?this.statusService.setReconnectionEndStatus(n,a,o,r,A.payload.oldEdge):this.statusService.setConnectionEndStatus(n,a,o,r)}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","onConnect",""],["","onReconnect",""],["","connect",""],["","reconnect",""]],outputs:{onConnect:"onConnect",connect:"connect",onReconnect:"onReconnect",reconnect:"reconnect"}})}}return t})();function Qy(t,e){let A=t.payload.source,i=t.payload.target,n=t.payload.sourceHandle,o=t.payload.targetHandle;if(e){let g=ftA({source:t.payload.source,sourceHandle:t.payload.sourceHandle,target:t.payload.target,targetHandle:t.payload.targetHandle});A=g.source,i=g.target,n=g.sourceHandle,o=g.targetHandle}let a=A.rawNode.id,r=i.rawNode.id,s=n.rawHandle.id,l=o.rawHandle.id;return{source:a,target:r,sourceHandle:s,targetHandle:l}}var v3=(()=>{class t{constructor(){this.flowEntitiesService=w(ul),this.flowSettingsService=w(ts),this.edges=pe(()=>this.flowSettingsService.optimization().virtualization?this.viewportEdges().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.validEdges()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.viewportEdges=pe(()=>this.flowEntitiesService.validEdges().filter(A=>{let i=A.sourceHandle(),n=A.targetHandle();return i&&n})),this.maxOrder=pe(()=>Math.max(...this.flowEntitiesService.validEdges().map(A=>A.renderOrder())))}pull(A){A.renderOrder()!==0&&this.maxOrder()===A.renderOrder()||A.renderOrder.set(this.maxOrder()+1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function GMA(t){return window.TouchEvent&&t instanceof TouchEvent}var TN=(()=>{class t{constructor(){this.hostElement=w(ce).nativeElement,this.pointerMovementDirective=w(Sy),this.pointerOver=ui(),this.pointerOut=ui(),this.pointerStart=ui(),this.pointerEnd=ui(),this.wasPointerOver=!1,this.touchEnd=this.pointerMovementDirective.touchEnd$.pipe(gt(({target:A})=>A===this.hostElement),Ii(({originalEvent:A})=>this.pointerEnd.emit(A)),wr()).subscribe(),this.touchOverOut=this.pointerMovementDirective.touchMovement$.pipe(Ii(({target:A,originalEvent:i})=>{this.handleTouchOverAndOut(A,i)}),wr()).subscribe()}onPointerStart(A){this.pointerStart.emit(A),GMA(A)&&this.pointerMovementDirective.setInitialTouch(A)}onPointerEnd(A){this.pointerEnd.emit(A)}onMouseOver(A){this.pointerOver.emit(A)}onMouseOut(A){this.pointerOut.emit(A)}handleTouchOverAndOut(A,i){A===this.hostElement?(this.pointerOver.emit(i),this.wasPointerOver=!0):(this.wasPointerOver&&this.pointerOut.emit(i),this.wasPointerOver=!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","pointerStart",""],["","pointerEnd",""],["","pointerOver",""],["","pointerOut",""]],hostBindings:function(i,n){i&1&&U("mousedown",function(a){return n.onPointerStart(a)})("touchstart",function(a){return n.onPointerStart(a)})("mouseup",function(a){return n.onPointerEnd(a)})("mouseover",function(a){return n.onMouseOver(a)})("mouseout",function(a){return n.onMouseOut(a)})},outputs:{pointerOver:"pointerOver",pointerOut:"pointerOut",pointerStart:"pointerStart",pointerEnd:"pointerEnd"}})}}return t})(),JN=(()=>{class t{constructor(){this.injector=w(Dt),this.selectionService=w(b3),this.flowSettingsService=w(ts),this.flowStatusService=w(KI),this.edgeRenderingService=w(v3),this.connectionController=w(ptA,{optional:!0}),this.model=me.required(),this.edgeTemplate=me(),this.edgeLabelHtmlTemplate=me(),this.isReconnecting=pe(()=>{let A=this.flowStatusService.status();return(A.state==="reconnection-start"||A.state==="reconnection-validation")&&A.payload.oldEdge===this.model()})}select(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}pull(){this.flowSettingsService.elevateEdgesOnSelect()&&this.edgeRenderingService.pull(this.model())}startReconnection(A,i){A.stopPropagation(),this.connectionController?.startReconnection(i,this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","edge",""]],hostAttrs:[1,"selectable"],hostVars:2,hostBindings:function(i,n){i&2&&ut("visibility",n.isReconnecting()?"hidden":"visible")},inputs:{model:[1,"model"],edgeTemplate:[1,"edgeTemplate"],edgeLabelHtmlTemplate:[1,"edgeLabelHtmlTemplate"]},attrs:YbA,decls:6,vars:6,consts:[[1,"edge"],[1,"interactive-edge",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["edgeLabel","",3,"model","point","edgeModel","htmlTemplate"],["r","10",1,"reconnect-handle"],["r","10",1,"reconnect-handle",3,"pointerStart"]],template:function(i,n){if(i&1&&(O(0,HbA,2,6),O(1,PbA,1,1),O(2,qbA,1,1),O(3,WbA,1,1),O(4,XbA,1,1),O(5,e7A,2,2)),i&2){let o,a,r;Y(n.model().type==="default"?0:-1),u(),Y(n.model().type==="template"&&n.edgeTemplate()?1:-1),u(),Y((o=n.model().edgeLabels.start)?2:-1,o),u(),Y((a=n.model().edgeLabels.center)?3:-1,a),u(),Y((r=n.model().edgeLabels.end)?4:-1,r),u(),Y(n.model().sourceHandle()&&n.model().targetHandle()?5:-1)}},dependencies:[Jc,LMA,TN],styles:[".edge[_ngcontent-%COMP%]{fill:none;stroke-width:2;stroke:#b1b1b7}.edge_selected[_ngcontent-%COMP%]{stroke-width:2.5;stroke:#0f4c75}.interactive-edge[_ngcontent-%COMP%]{fill:none;stroke-width:20;stroke:transparent}.reconnect-handle[_ngcontent-%COMP%]{fill:transparent;cursor:move}"],changeDetection:0})}}return t})(),LN=(()=>{class t{constructor(){this.node=bA(null)}createHandle(A){let i=this.node();i&&i.handles.update(n=>[...n,A])}destroyHandle(A){let i=this.node();i&&i.handles.update(n=>n.filter(o=>o!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return kQ([by],t.prototype,"createHandle",null),t})(),KMA=(()=>{class t{constructor(){this.handleModel=me.required({alias:"handleSizeController"}),this.handleWrapper=w(ce)}ngAfterViewInit(){let A=this.handleWrapper.nativeElement,i=A.getBBox(),n=UMA(A);this.handleModel().size.set({width:i.width+n,height:i.height+n})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","handleSizeController",""]],inputs:{handleModel:[1,"handleSizeController","handleModel"]}})}}return t})();function UMA(t){let e=t.firstElementChild;if(e){let A=getComputedStyle(e).strokeWidth,i=Number(A.replace("px",""));return isNaN(i)?0:i}return 0}var TMA=(()=>{class t{constructor(){this.selected=me(!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["default-node"]],hostVars:2,hostBindings:function(i,n){i&2&&RA("selected",n.selected())},inputs:{selected:[1,"selected"]},ngContentSelectors:UN,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),Ve(0))},styles:["[_nghost-%COMP%]{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.selected[_nghost-%COMP%]{border-width:2px}"],changeDetection:0})}}return t})(),JMA=(()=>{class t{get model(){return this.nodeAccessor.model()}constructor(){this.nodeAccessor=w(gQ),this.rootPointer=w(Sy),this.viewportService=w(Kd),this.spacePointContext=w(w3),this.settingsService=w(ts),this.hostRef=w(ce),this.resizable=me(),this.resizerColor=me("#2e414c"),this.gap=me(1.5),this.resizer=So.required("resizer"),this.lineGap=3,this.handleSize=6,this.resizeSide=null,this.zoom=pe(()=>this.viewportService.readableViewport().zoom??0),this.minWidth=0,this.minHeight=0,this.maxWidth=1/0,this.maxHeight=1/0,this.resizeOnGlobalMouseMove=this.rootPointer.pointerMovement$.pipe(gt(()=>this.resizeSide!==null),gt(A=>A.movementX!==0||A.movementY!==0),Ii(A=>this.resize(A)),wr()).subscribe(),this.endResizeOnGlobalMouseUp=this.rootPointer.documentPointerEnd$.pipe(Ii(()=>this.endResize()),wr()).subscribe(),Ao(()=>{let A=this.resizable();typeof A=="boolean"?this.model.resizable.set(A):this.model.resizable.set(!0)},{allowSignalWrites:!0})}ngOnInit(){this.model.controlledByResizer.set(!0),this.model.resizerTemplate.set(this.resizer())}ngOnDestroy(){this.model.controlledByResizer.set(!1)}ngAfterViewInit(){this.minWidth=+getComputedStyle(this.hostRef.nativeElement).minWidth.replace("px","")||0,this.minHeight=+getComputedStyle(this.hostRef.nativeElement).minHeight.replace("px","")||0,this.maxWidth=+getComputedStyle(this.hostRef.nativeElement).maxWidth.replace("px","")||1/0,this.maxHeight=+getComputedStyle(this.hostRef.nativeElement).maxHeight.replace("px","")||1/0}startResize(A,i){i.stopPropagation(),this.resizeSide=A,this.model.resizing.set(!0)}resize(A){if(!this.resizeSide)return;let i=OMA(A.movementX,A.movementY,this.zoom()),n=this.applyResize(this.resizeSide,this.model,i,this.getDistanceToEdge(A)),{x:o,y:a,width:r,height:s}=YMA(n,this.model,this.resizeSide,this.minWidth,this.minHeight,this.maxWidth,this.maxHeight);this.model.setPoint({x:o,y:a}),this.model.width.set(r),this.model.height.set(s)}endResize(){this.resizeSide=null,this.model.resizing.set(!1)}getDistanceToEdge(A){let i=this.spacePointContext.documentPointToFlowPoint({x:A.x,y:A.y}),{x:n,y:o}=this.model.globalPoint();return{left:i.x-n,right:i.x-(n+this.model.width()),top:i.y-o,bottom:i.y-(o+this.model.height())}}applyResize(A,i,n,o){let{x:a,y:r}=i.point(),s=i.width(),l=i.height(),[g,C]=this.settingsService.snapGrid();switch(A){case"left":{let I=n.x+o.left,d=Ql(a+I,g),h=d-a;return{x:d,y:r,width:s-h,height:l}}case"right":{let I=n.x+o.right,d=Ql(s+I,g);return{x:a,y:r,width:d,height:l}}case"top":{let I=n.y+o.top,d=Ql(r+I,C),h=d-r;return{x:a,y:d,width:s,height:l-h}}case"bottom":{let I=n.y+o.bottom,d=Ql(l+I,C);return{x:a,y:r,width:s,height:d}}case"top-left":{let I=n.x+o.left,d=n.y+o.top,h=Ql(a+I,g),E=Ql(r+d,C),f=h-a,m=E-r;return{x:h,y:E,width:s-f,height:l-m}}case"top-right":{let I=n.x+o.right,d=n.y+o.top,h=Ql(r+d,C),E=h-r;return{x:a,y:h,width:Ql(s+I,g),height:l-E}}case"bottom-left":{let I=n.x+o.left,d=n.y+o.bottom,h=Ql(a+I,g),E=h-a;return{x:h,y:r,width:s-E,height:Ql(l+d,C)}}case"bottom-right":{let I=n.x+o.right,d=n.y+o.bottom;return{x:a,y:r,width:Ql(s+I,g),height:Ql(l+d,C)}}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["","resizable",""]],viewQuery:function(i,n){i&1&&ns(n.resizer,t7A,5),i&2&&ur()},inputs:{resizable:[1,"resizable"],resizerColor:[1,"resizerColor"],gap:[1,"gap"]},attrs:i7A,ngContentSelectors:UN,decls:3,vars:0,consts:[["resizer",""],["stroke-width","2",1,"top",3,"pointerStart"],["stroke-width","2",1,"left",3,"pointerStart"],["stroke-width","2",1,"bottom",3,"pointerStart"],["stroke-width","2",1,"right",3,"pointerStart"],[1,"top-left",3,"pointerStart"],[1,"top-right",3,"pointerStart"],[1,"bottom-left",3,"pointerStart"],[1,"bottom-right",3,"pointerStart"]],template:function(i,n){i&1&&(Rt(),Et(0,n7A,9,40,"ng-template",null,0,$C),Ve(2))},dependencies:[TN],styles:[".top[_ngcontent-%COMP%]{cursor:n-resize}.left[_ngcontent-%COMP%]{cursor:w-resize}.right[_ngcontent-%COMP%]{cursor:e-resize}.bottom[_ngcontent-%COMP%]{cursor:s-resize}.top-left[_ngcontent-%COMP%]{cursor:nw-resize}.top-right[_ngcontent-%COMP%]{cursor:ne-resize}.bottom-left[_ngcontent-%COMP%]{cursor:sw-resize}.bottom-right[_ngcontent-%COMP%]{cursor:se-resize}"],changeDetection:0})}}return kQ([by],t.prototype,"ngAfterViewInit",null),t})();function OMA(t,e,A){return{x:py(t/A),y:py(e/A)}}function YMA(t,e,A,i,n,o,a){let{x:r,y:s,width:l,height:g}=t;l=Math.max(l,0),g=Math.max(g,0),l=Math.max(i,l),g=Math.max(n,g),l=Math.min(o,l),g=Math.min(a,g),r=Math.min(r,e.point().x+e.width()-i),s=Math.min(s,e.point().y+e.height()-n),r=Math.max(r,e.point().x+e.width()-o),s=Math.max(s,e.point().y+e.height()-a);let C=e.parent();if(C){let d=C.width(),h=C.height(),E=e.point().x,f=e.point().y;r=Math.max(r,0),s=Math.max(s,0),A.includes("left")&&r===0&&(l=Math.min(l,E+e.width())),A.includes("top")&&s===0&&(g=Math.min(g,f+e.height())),l=Math.min(l,d-r),g=Math.min(g,h-s)}let I=dtA(e.children());return I&&(A.includes("left")&&(r=Math.min(r,e.point().x+e.width()-(I.x+I.width)),l=Math.max(l,I.x+I.width)),A.includes("right")&&(l=Math.max(l,I.x+I.width)),A.includes("bottom")&&(g=Math.max(g,I.y+I.height)),A.includes("top")&&(s=Math.min(s,e.point().y+e.height()-(I.y+I.height)),g=Math.max(g,I.y+I.height))),{x:r,y:s,width:l,height:g}}var GN=class{constructor(e,A){this.rawHandle=e,this.parentNode=A,this.strokeWidth=2,this.size=bA({width:10+2*this.strokeWidth,height:10+2*this.strokeWidth}),this.pointAbsolute=pe(()=>({x:this.parentNode.globalPoint().x+this.hostOffset().x+this.sizeOffset().x,y:this.parentNode.globalPoint().y+this.hostOffset().y+this.sizeOffset().y})),this.state=bA("idle"),this.updateHostSizeAndPosition$=new ie,this.hostSize=Ar(this.updateHostSizeAndPosition$.pipe(we(()=>this.getHostSize())),{initialValue:{width:0,height:0}}),this.hostPosition=Ar(this.updateHostSizeAndPosition$.pipe(we(()=>({x:this.hostReference instanceof HTMLElement?this.hostReference.offsetLeft:0,y:this.hostReference instanceof HTMLElement?this.hostReference.offsetTop:0}))),{initialValue:{x:0,y:0}}),this.hostOffset=pe(()=>{switch(this.rawHandle.position){case"left":return{x:-this.rawHandle.userOffsetX,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"right":return{x:-this.rawHandle.userOffsetX+this.parentNode.size().width,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"top":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY};case"bottom":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY+this.parentNode.size().height}}}),this.sizeOffset=pe(()=>{switch(this.rawHandle.position){case"left":return{x:-(this.size().width/2),y:0};case"right":return{x:this.size().width/2,y:0};case"top":return{x:0,y:-(this.size().height/2)};case"bottom":return{x:0,y:this.size().height/2}}}),this.hostReference=this.rawHandle.hostReference,this.template=this.rawHandle.template,this.templateContext={$implicit:{point:this.hostOffset,state:this.state,node:this.parentNode.rawNode}}}updateHost(){this.updateHostSizeAndPosition$.next()}getHostSize(){return this.hostReference instanceof HTMLElement?{width:this.hostReference.offsetWidth,height:this.hostReference.offsetHeight}:this.hostReference instanceof SVGGraphicsElement?this.hostReference.getBBox():{width:0,height:0}}},M3=(()=>{class t{constructor(){this.injector=w(Dt),this.handleService=w(LN),this.element=w(ce).nativeElement,this.destroyRef=w(sr),this.position=me.required(),this.type=me.required(),this.id=me(),this.template=me(),this.offsetX=me(0),this.offsetY=me(0)}ngOnInit(){Xa(this.injector,()=>{let A=this.handleService.node();if(A){let i=new GN({position:this.position(),type:this.type(),id:this.id(),hostReference:this.element.parentElement,template:this.template(),userOffsetX:this.offsetX(),userOffsetY:this.offsetY()},A);this.handleService.createHandle(i),requestAnimationFrame(()=>i.updateHost()),this.destroyRef.onDestroy(()=>this.handleService.destroyHandle(i))}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["handle"]],inputs:{position:[1,"position"],type:[1,"type"],id:[1,"id"],template:[1,"template"],offsetX:[1,"offsetX"],offsetY:[1,"offsetY"]},decls:0,vars:0,template:function(i,n){},encapsulation:2,changeDetection:0})}}return t})(),HMA=(()=>{class t{constructor(){this.nodeAccessor=w(gQ),this.zone=w(qe),this.destroyRef=w(sr),this.hostElementRef=w(ce)}ngOnInit(){this.nodeAccessor.model().handles$.pipe(Ei(i=>ky([...i.map(n=>n.hostReference),this.hostElementRef.nativeElement],this.zone).pipe(we(()=>i))),Ii(i=>{i.forEach(n=>n.updateHost())}),wr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","nodeHandlesController",""]]})}}return t})(),zMA=(()=>{class t{constructor(){this.nodeAccessor=w(gQ),this.zone=w(qe),this.destroyRef=w(sr),this.hostElementRef=w(ce)}ngOnInit(){let A=this.nodeAccessor.model(),i=this.hostElementRef.nativeElement;Ki(ky([i],this.zone)).pipe(Sn(null),gt(()=>!A.resizing()),Ii(()=>{A.width.set(i.clientWidth),A.height.set(i.clientHeight)}),wr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","nodeResizeController",""]]})}}return t})(),mtA=(()=>{class t{constructor(){this.injector=w(Dt),this.handleService=w(LN),this.draggableService=w(BtA),this.flowStatusService=w(KI),this.nodeRenderingService=w(Ud),this.flowSettingsService=w(ts),this.selectionService=w(b3),this.hostRef=w(ce),this.nodeAccessor=w(gQ),this.overlaysService=w(utA),this.connectionController=w(ptA,{optional:!0}),this.model=me.required(),this.nodeTemplate=me(),this.nodeSvgTemplate=me(),this.groupNodeTemplate=me(),this.showMagnet=pe(()=>this.flowStatusService.status().state==="connection-start"||this.flowStatusService.status().state==="connection-validation"||this.flowStatusService.status().state==="reconnection-start"||this.flowStatusService.status().state==="reconnection-validation"),this.toolbars=pe(()=>this.overlaysService.nodeToolbarsMap().get(this.model()))}ngOnInit(){this.model().isVisible.set(!0),this.nodeAccessor.model.set(this.model()),this.handleService.node.set(this.model()),Ao(()=>{this.model().draggable()?this.draggableService.enable(this.hostRef.nativeElement,this.model()):this.draggableService.disable(this.hostRef.nativeElement)},{injector:this.injector})}ngOnDestroy(){this.model().isVisible.set(!1),this.draggableService.destroy(this.hostRef.nativeElement)}startConnection(A,i){A.stopPropagation(),this.connectionController?.startConnection(i)}validateConnection(A){this.connectionController?.validateConnection(A)}resetValidateConnection(A){this.connectionController?.resetValidateConnection(A)}endConnection(){this.connectionController?.endConnection()}pullNode(){this.flowSettingsService.elevateNodesOnSelect()&&this.nodeRenderingService.pullNode(this.model())}selectNode(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","node",""]],hostAttrs:[1,"vflow-node"],inputs:{model:[1,"model"],nodeTemplate:[1,"nodeTemplate"],nodeSvgTemplate:[1,"nodeSvgTemplate"],groupNodeTemplate:[1,"groupNodeTemplate"]},features:[Bt([LN,gQ])],attrs:o7A,decls:11,vars:7,consts:[[1,"selectable"],["nodeHandlesController","",1,"selectable"],["rx","5","ry","5",1,"default-group-node",3,"resizable","gap","resizerColor","default-group-node_selected","stroke","fill"],[1,"selectable",3,"click"],["nodeHandlesController","",3,"selected"],[3,"outerHTML"],["type","source","position","right"],["type","target","position","left"],["nodeHandlesController","","nodeResizeController","",1,"wrapper"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["nodeHandlesController","",1,"selectable",3,"click"],[3,"ngComponentOutlet","ngComponentOutletInputs","ngComponentOutletInjector"],["rx","5","ry","5",1,"default-group-node",3,"click","resizable","gap","resizerColor"],[3,"ngTemplateOutlet"],["r","5",1,"default-handle"],[3,"handleSizeController"],[1,"magnet"],["r","5",1,"default-handle",3,"pointerStart","pointerEnd"],[3,"pointerStart","pointerEnd","handleSizeController"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"magnet",3,"pointerEnd","pointerOver","pointerOut"]],template:function(i,n){if(i&1&&(O(0,a7A,5,12,":svg:foreignObject",0),O(1,r7A,3,9,":svg:foreignObject",0),O(2,s7A,2,3,":svg:g",1),O(3,g7A,2,3),O(4,c7A,1,11,":svg:rect",2),O(5,C7A,2,3,":svg:g",1),O(6,B7A,1,1),Je(7,p7A,4,4,null,null,hi),Je(9,m7A,2,4,":svg:foreignObject",null,hi)),i&2){let o;Y(n.model().rawNode.type==="default"?0:-1),u(),Y(n.model().rawNode.type==="html-template"&&n.nodeTemplate()?1:-1),u(),Y(n.model().rawNode.type==="svg-template"&&n.nodeSvgTemplate()?2:-1),u(),Y(n.model().isComponentType?3:-1),u(),Y(n.model().rawNode.type==="default-group"?4:-1),u(),Y(n.model().rawNode.type==="template-group"&&n.groupNodeTemplate()?5:-1),u(),Y((o=n.model().resizerTemplate())?6:-1,o),u(),Oe(n.model().handles()),u(2),Oe(n.toolbars())}},dependencies:[TN,TMA,M3,Jc,Tc,JMA,KMA,HMA,zMA,os],styles:[".magnet[_ngcontent-%COMP%]{opacity:0}.wrapper[_ngcontent-%COMP%]{display:table-cell}.default-group-node[_ngcontent-%COMP%]{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected[_ngcontent-%COMP%]{stroke-width:2px}.default-handle[_ngcontent-%COMP%]{stroke:#fff;fill:#1b262c}"],changeDetection:0})}}return t})(),PMA=(()=>{class t{constructor(){this.flowStatusService=w(KI),this.spacePointContext=w(w3),this.flowEntitiesService=w(ul),this.model=me.required(),this.template=me(),this.path=pe(()=>{let A=this.flowStatusService.status(),i=this.model().curve;if(A.state==="connection-start"||A.state==="reconnection-start"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=this.spacePointContext.svgCurrentSpacePoint(),s=ltA(n.rawHandle.position),l=this.getPathFactoryParams(o,r,a,s);switch(i){case"straight":return xN(l).path;case"bezier":return _N(l).path;case"smooth-step":return rQ(l).path;case"step":return rQ(l,0).path;default:return i(l).path}}if(A.state==="connection-validation"||A.state==="reconnection-validation"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=A.payload.targetHandle,s=A.payload.valid?r.pointAbsolute():this.spacePointContext.svgCurrentSpacePoint(),l=A.payload.valid?r.rawHandle.position:ltA(n.rawHandle.position),g=this.getPathFactoryParams(o,s,a,l);switch(i){case"straight":return xN(g).path;case"bezier":return _N(g).path;case"smooth-step":return rQ(g).path;case"step":return rQ(g,0).path;default:return i(g).path}}return null}),this.markerUrl=pe(()=>{let A=this.model().settings.marker;return A?`url(#${sQ(JSON.stringify(A))})`:""}),this.defaultColor="rgb(177, 177, 183)"}getContext(){return{$implicit:{path:this.path,marker:this.markerUrl}}}getPathFactoryParams(A,i,n,o){return{mode:"connection",sourcePoint:A,targetPoint:i,sourcePosition:n,targetPosition:o,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","connection",""]],inputs:{model:[1,"model"],template:[1,"template"]},attrs:w7A,decls:2,vars:2,consts:[["fill","none","stroke-width","2"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){i&1&&(O(0,y7A,1,1),O(1,M7A,1,1)),i&2&&(Y(n.model().type==="default"?0:-1),u(),Y(n.model().type==="template"?1:-1))},dependencies:[Jc],encapsulation:2,changeDetection:0})}}return t})();function ltA(t){switch(t){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}function jMA(){return String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now()}var qMA="#fff",VMA=20,WMA=2,gtA="rgb(177, 177, 183)",ctA=.1,ZMA=!0,XMA=(()=>{class t{constructor(){this.viewportService=w(Kd),this.rootSvg=w(My).element,this.settingsService=w(ts),this.backgroundSignal=this.settingsService.background,this.scaledGap=pe(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.gap??VMA):0}),this.x=pe(()=>this.viewportService.readableViewport().x%this.scaledGap()),this.y=pe(()=>this.viewportService.readableViewport().y%this.scaledGap()),this.patternColor=pe(()=>{let A=this.backgroundSignal();return A.type==="dots"?A.color??gtA:gtA}),this.patternSize=pe(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.size??WMA)/2:0}),this.bgImageSrc=pe(()=>{let A=this.backgroundSignal();return A.type==="image"?A.src:""}),this.imageSize=y3(po(this.backgroundSignal).pipe(Ei(()=>$MA(this.bgImageSrc())),we(A=>({width:A.naturalWidth,height:A.naturalHeight}))),{initialValue:{width:0,height:0}}),this.scaledImageWidth=pe(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().width*i*(A.scale??ctA)}return 0}),this.scaledImageHeight=pe(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().height*i*(A.scale??ctA)}return 0}),this.imageX=pe(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().x%this.scaledImageWidth():A.fixed?0:this.viewportService.readableViewport().x:0}),this.imageY=pe(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().y%this.scaledImageHeight():A.fixed?0:this.viewportService.readableViewport().y:0}),this.repeated=pe(()=>{let A=this.backgroundSignal();return A.type==="image"&&(A.repeat??ZMA)}),this.patternId=jMA(),this.patternUrl=`url(#${this.patternId})`,Ao(()=>{let A=this.backgroundSignal();A.type==="dots"&&(this.rootSvg.style.backgroundColor=A.backgroundColor??qMA),A.type==="solid"&&(this.rootSvg.style.backgroundColor=A.color)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","background",""]],attrs:S7A,decls:2,vars:2,consts:[["patternUnits","userSpaceOnUse"],["x","0","y","0","width","100%","height","100%"]],template:function(i,n){i&1&&(O(0,k7A,3,10),O(1,R7A,2,2)),i&2&&(Y(n.backgroundSignal().type==="dots"?0:-1),u(),Y(n.backgroundSignal().type==="image"?1:-1))},encapsulation:2,changeDetection:0})}}return t})();function $MA(t){let e=new Image;return e.src=t,new Promise(A=>{e.onload=()=>A(e)})}var A9A=(()=>{class t{constructor(){this.markers=me.required(),this.defaultColor="rgb(177, 177, 183)"}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["defs","flowDefs",""]],inputs:{markers:[1,"markers"]},attrs:N7A,decls:3,vars:2,consts:[["viewBox","-10 -10 20 20","refX","0","refY","0"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed",3,"stroke","stroke-width","fill"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default",3,"stroke","stroke-width"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default"]],template:function(i,n){i&1&&(Je(0,G7A,3,7,":svg:marker",0,hi),Ht(2,"keyvalue")),i&2&&Oe(ri(2,0,n.markers()))},dependencies:[oL],styles:[".marker__arrow_default[_ngcontent-%COMP%]{stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;fill:none}.marker__arrow_closed[_ngcontent-%COMP%]{stroke-linecap:round;stroke-linejoin:round}"],changeDetection:0})}}return t})(),e9A=(()=>{class t{constructor(){this.host=w(ce),this.flowSettingsService=w(ts),this.flowWidth=pe(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[0]}),this.flowHeight=pe(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[1]}),ky([this.host.nativeElement],w(qe)).pipe(Ii(([A])=>{this.flowSettingsService.computedFlowWidth.set(A.contentRect.width),this.flowSettingsService.computedFlowHeight.set(A.contentRect.height)}),wr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["svg","flowSizeController",""]],hostVars:2,hostBindings:function(i,n){i&2&&te("width",n.flowWidth())("height",n.flowHeight())}})}}return t})(),t9A=(()=>{class t{constructor(){this.flowStatusService=w(KI)}resetConnection(){let A=this.flowStatusService.status();(A.state==="connection-start"||A.state==="reconnection-start")&&this.flowStatusService.setIdleStatus()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["svg","rootSvgContext",""]],hostBindings:function(i,n){i&1&&U("mouseup",function(){return n.resetConnection()},Pd)("touchend",function(){return n.resetConnection()},Pd)("contextmenu",function(){return n.resetConnection()})}})}}return t})();function KN(t,e){let A=[];for(let i of e){let{x:n,y:o}=i.globalPoint();t.x>=n&&t.x<=n+i.width()&&t.y>=o&&t.y<=o+i.height()&&A.push({x:t.x-n,y:t.y-o,spaceNodeId:i.rawNode.id})}return A.reverse(),A.push({spaceNodeId:null,x:t.x,y:t.y}),A}var ON=(()=>{class t{static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})(),i9A=(()=>{class t extends ON{shouldRenderNode(A){return!A.isVisible()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})()}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function n9A(t,e){if(Object.keys(e.preview().style).length){r9A(t,e);return}if(e.rawNode.type==="default"){o9A(t,e);return}if(e.rawNode.type==="default-group"){a9A(t,e);return}s9A(t,e)}function o9A(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();wtA(t,e,5),t.fillStyle="white",t.fill(),t.strokeStyle="#1b262c",t.lineWidth=1.5,t.stroke(),t.fillStyle="black",t.font="14px Arial",t.textAlign="center",t.textBaseline="middle";let o=A.x+i/2,a=A.y+n/2;t.fillText(e.text(),o,a)}function a9A(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.globalAlpha=.05,t.fillStyle=e.color(),t.fillRect(A.x,A.y,i,n),t.globalAlpha=1,t.strokeStyle=e.color(),t.lineWidth=1.5,t.strokeRect(A.x,A.y,i,n)}function r9A(t,e){let A=e.globalPoint(),i=e.width(),n=e.height(),o=e.preview().style;if(o.borderRadius){let a=parseFloat(o.borderRadius);wtA(t,e,a)}else t.beginPath(),t.rect(A.x,A.y,i,n),t.closePath();o.backgroundColor&&(t.fillStyle=o.backgroundColor),o.borderColor&&(t.strokeStyle=o.borderColor),o.borderWidth&&(t.lineWidth=parseFloat(o.borderWidth)),t.fill(),t.stroke()}function s9A(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.fillStyle="rgb(0 0 0 / 10%)",t.fillRect(A.x,A.y,i,n)}function wtA(t,e,A){let i=e.globalPoint(),n=e.width(),o=e.height();t.beginPath(),t.moveTo(i.x+A,i.y),t.lineTo(i.x+n-A,i.y),t.quadraticCurveTo(i.x+n,i.y,i.x+n,i.y+A),t.lineTo(i.x+n,i.y+o-A),t.quadraticCurveTo(i.x+n,i.y+o,i.x+n-A,i.y+o),t.lineTo(i.x+A,i.y+o),t.quadraticCurveTo(i.x,i.y+o,i.x,i.y+o-A),t.lineTo(i.x,i.y+A),t.quadraticCurveTo(i.x,i.y,i.x+A,i.y),t.closePath()}var l9A=(()=>{class t{constructor(){this.viewportService=w(Kd),this.renderStrategy=w(ON),this.nodeRenderingService=w(Ud),this.renderer2=w(Pi),this.element=w(ce).nativeElement,this.ctx=this.element.getContext("2d"),this.width=me(0),this.height=me(0),this.dpr=window.devicePixelRatio,Ao(()=>{this.renderer2.setProperty(this.element,"width",this.width()*this.dpr),this.renderer2.setProperty(this.element,"height",this.height()*this.dpr),this.renderer2.setStyle(this.element,"width",`${this.width()}px`),this.renderer2.setStyle(this.element,"height",`${this.height()}px`),this.ctx.scale(this.dpr,this.dpr)}),Ao(()=>{let A=this.viewportService.readableViewport();this.ctx.clearRect(0,0,this.width(),this.height()),this.ctx.save(),this.ctx.setTransform(A.zoom*this.dpr,0,0,A.zoom*this.dpr,A.x*this.dpr,A.y*this.dpr);for(let i=0;i{class t{constructor(){this.nodeRenderingService=w(Ud),this.edgeRenderingService=w(v3),this.flowEntitiesService=w(ul),this.settingsService=w(ts),this.flowInitialized=bA(!1),w(qe).runOutsideAngular(()=>lt(this,null,function*(){yield g9A(2),this.flowInitialized.set(!0)}))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=qA({token:t,factory:t.\u0275fac})}}return t})();function g9A(t){return new Promise(e=>{let A=0;function i(){A++,A{class t{constructor(){this.nodeRenderingService=w(Ud),this.flowStatus=w(KI),this.tolerance=me(10),this.lineColor=me("#1b262c"),this.isNodeDragging=pe(()=>etA(this.flowStatus.status())),this.intersections=yy(A=>{let i=this.flowStatus.status();if(etA(i)){let n=i.payload.node,o=ItA(uy(n)),a=this.nodeRenderingService.viewportNodes().filter(I=>I!==n).filter(I=>!n.children().includes(I)).map(I=>ItA(uy(I))),r=[],s=o.x,l=o.y,g=1/0,C=1/0;return a.forEach(I=>{let d=o.left+o.width/2,h=I.left+I.width/2;for(let[m,v,k,S]of[[d,h,h-o.width/2,!0],[o.left,I.left,I.left,!1],[o.left,I.right,I.right,!1],[o.right,I.left,I.left-o.width,!1],[o.right,I.right,I.right-o.width,!1]]){let b=Math.abs(m-v);if(b<=this.tolerance()){let x=Math.min(o.top,I.top),F=Math.max(o.bottom,I.bottom);if(r.push({x:v,y:x,x2:v,y2:F,isCenter:S}),bA.payload.node),we(A=>[A,this.intersections()]),Ii(([A,i])=>{if(i){let n={x:i.snappedX,y:i.snappedY},o=A.parent()?[A.parent()]:[];A.setPoint(KN(n,o)[0])}}),wr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","alignmentHelper",""]],inputs:{tolerance:[1,"tolerance"],lineColor:[1,"lineColor"]},attrs:U7A,decls:1,vars:1,template:function(i,n){i&1&&O(0,O7A,1,1),i&2&&Y(n.isNodeDragging()?0:-1)},encapsulation:2,changeDetection:0})}}return t})();var xy=(()=>{class t{constructor(){this.viewportService=w(Kd),this.flowEntitiesService=w(ul),this.nodesChangeService=w(NN),this.edgesChangeService=w(FN),this.nodeRenderingService=w(Ud),this.edgeRenderingService=w(v3),this.flowSettingsService=w(ts),this.componentEventBusService=w(kN),this.keyboardService=w(SN),this.injector=w(Dt),this.flowRenderingService=w(CtA),this.alignmentHelper=me(!1),this.nodeModels=this.nodeRenderingService.nodes,this.groups=this.nodeRenderingService.groups,this.nonGroups=this.nodeRenderingService.nonGroups,this.edgeModels=this.edgeRenderingService.edges,this.onComponentNodeEvent=kn(this.componentEventBusService.event$),this.nodeTemplateDirective=J0(lQ),this.nodeSvgTemplateDirective=J0(ntA),this.groupNodeTemplateDirective=J0(wy),this.edgeTemplateDirective=J0(my),this.edgeLabelHtmlDirective=J0(itA),this.connectionTemplateDirective=J0(ttA),this.mapContext=So(vN),this.spacePointContext=So.required(w3),this.viewport=this.viewportService.readableViewport.asReadonly(),this.nodesChange=y3(this.nodesChangeService.changes$,{initialValue:[]}),this.edgesChange=y3(this.edgesChangeService.changes$,{initialValue:[]}),this.initialized=this.flowRenderingService.flowInitialized.asReadonly(),this.viewportChange$=po(this.viewportService.readableViewport).pipe(wl(1)),this.nodesChange$=this.nodesChangeService.changes$,this.edgesChange$=this.edgesChangeService.changes$,this.initialized$=po(this.flowRenderingService.flowInitialized),this.markers=this.flowEntitiesService.markers,this.minimap=this.flowEntitiesService.minimap,this.flowOptimization=this.flowSettingsService.optimization,this.flowWidth=this.flowSettingsService.computedFlowWidth,this.flowHeight=this.flowSettingsService.computedFlowHeight}set view(A){this.flowSettingsService.view.set(A)}set minZoom(A){this.flowSettingsService.minZoom.set(A)}set maxZoom(A){this.flowSettingsService.maxZoom.set(A)}set background(A){this.flowSettingsService.background.set(FMA(A))}set optimization(A){this.flowSettingsService.optimization.update(i=>gA(gA({},i),A))}set entitiesSelectable(A){this.flowSettingsService.entitiesSelectable.set(A)}set keyboardShortcuts(A){this.keyboardService.setShortcuts(A)}set connection(A){this.flowEntitiesService.connection.set(A)}get connection(){return this.flowEntitiesService.connection()}set snapGrid(A){this.flowSettingsService.snapGrid.set(A)}set elevateNodesOnSelect(A){this.flowSettingsService.elevateNodesOnSelect.set(A)}set elevateEdgesOnSelect(A){this.flowSettingsService.elevateEdgesOnSelect.set(A)}set nodes(A){let i=Xa(this.injector,()=>vy.nodes(A,this.flowEntitiesService.nodes()));otA(i,this.flowEntitiesService.edges()),this.flowEntitiesService.nodes.set(i),i.forEach(n=>this.nodeRenderingService.pullNode(n))}set edges(A){let i=Xa(this.injector,()=>vy.edges(A,this.flowEntitiesService.edges()));otA(this.flowEntitiesService.nodes(),i),this.flowEntitiesService.edges.set(i)}viewportTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}zoomTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:{zoom:A},duration:0})}panTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}fitView(A){this.viewportService.fitView(A)}getNode(A){return this.flowEntitiesService.getNode(A)?.rawNode}getDetachedEdges(){return this.flowEntitiesService.getDetachedEdges().map(A=>A.edge)}documentPointToFlowPoint(A,i){let n=this.spacePointContext().documentPointToFlowPoint(A);return i?.spaces?KN(n,this.nodeRenderingService.groups()):n}getIntesectingNodes(A,i={partially:!0}){return iMA(A,this.nodeModels(),i).map(n=>n.rawNode)}toNodeSpace(A,i){let n=this.nodeModels().find(a=>a.rawNode.id===A);if(!n)return{x:1/0,y:1/0};if(i===null)return n.globalPoint();let o=this.nodeModels().find(a=>a.rawNode.id===i);return o?KN(n.globalPoint(),[o])[0]:{x:1/0,y:1/0}}trackNodes(A,{rawNode:i}){return i}trackEdges(A,{edge:i}){return i}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["vflow"]],contentQueries:function(i,n,o){i&1&&ep(o,n.nodeTemplateDirective,lQ,5)(o,n.nodeSvgTemplateDirective,ntA,5)(o,n.groupNodeTemplateDirective,wy,5)(o,n.edgeTemplateDirective,my,5)(o,n.edgeLabelHtmlDirective,itA,5)(o,n.connectionTemplateDirective,ttA,5),i&2&&ur(6)},viewQuery:function(i,n){i&1&&ns(n.mapContext,vN,5)(n.spacePointContext,w3,5),i&2&&ur(2)},inputs:{view:"view",minZoom:"minZoom",maxZoom:"maxZoom",background:"background",optimization:"optimization",entitiesSelectable:"entitiesSelectable",keyboardShortcuts:"keyboardShortcuts",connection:[2,"connection","connection",A=>new fy(A)],snapGrid:"snapGrid",elevateNodesOnSelect:"elevateNodesOnSelect",elevateEdgesOnSelect:"elevateEdgesOnSelect",nodes:"nodes",alignmentHelper:[1,"alignmentHelper"],edges:"edges"},outputs:{onComponentNodeEvent:"onComponentNodeEvent"},features:[Bt([BtA,Kd,KI,ul,NN,FN,Ud,v3,b3,ts,kN,SN,utA,{provide:ON,useClass:i9A},CtA]),Z3([{directive:NMA,outputs:["onNodesChange","onNodesChange","onNodesChange.position","onNodesChange.position","onNodesChange.position.single","onNodesChange.position.single","onNodesChange.position.many","onNodesChange.position.many","onNodesChange.size","onNodesChange.size","onNodesChange.size.single","onNodesChange.size.single","onNodesChange.size.many","onNodesChange.size.many","onNodesChange.add","onNodesChange.add","onNodesChange.add.single","onNodesChange.add.single","onNodesChange.add.many","onNodesChange.add.many","onNodesChange.remove","onNodesChange.remove","onNodesChange.remove.single","onNodesChange.remove.single","onNodesChange.remove.many","onNodesChange.remove.many","onNodesChange.select","onNodesChange.select","onNodesChange.select.single","onNodesChange.select.single","onNodesChange.select.many","onNodesChange.select.many","onEdgesChange","onEdgesChange","onEdgesChange.detached","onEdgesChange.detached","onEdgesChange.detached.single","onEdgesChange.detached.single","onEdgesChange.detached.many","onEdgesChange.detached.many","onEdgesChange.add","onEdgesChange.add","onEdgesChange.add.single","onEdgesChange.add.single","onEdgesChange.add.many","onEdgesChange.add.many","onEdgesChange.remove","onEdgesChange.remove","onEdgesChange.remove.single","onEdgesChange.remove.single","onEdgesChange.remove.many","onEdgesChange.remove.many","onEdgesChange.select","onEdgesChange.select","onEdgesChange.select.single","onEdgesChange.select.single","onEdgesChange.select.many","onEdgesChange.select.many"]}])],decls:11,vars:8,consts:[["flow",""],["rootSvgRef","","rootSvgContext","","rootPointer","","flowSizeController","",1,"root-svg"],["flowDefs","",3,"markers"],["background",""],["mapContext","","spacePointContext",""],["connection","",3,"model","template"],[3,"ngTemplateOutlet"],["previewFlow","",1,"preview-flow",3,"width","height"],["alignmentHelper",""],["alignmentHelper","",3,"tolerance","lineColor"],["node","",3,"model","groupNodeTemplate"],["edge","",3,"model","edgeTemplate","edgeLabelHtmlTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate","groupNodeTemplate"]],template:function(i,n){if(i&1&&(Ct(),B(0,"svg",1,0),QA(2,"defs",2)(3,"g",3),B(4,"g",4),O(5,z7A,2,1),QA(6,"g",5),O(7,V7A,6,0),O(8,X7A,4,0),Q(),O(9,$7A,1,1,":svg:ng-container",6),Q(),O(10,AMA,1,2,"canvas",7)),i&2){let o,a,r;u(2),H("markers",n.markers()),u(3),Y((o=n.alignmentHelper())?5:-1,o),u(),H("model",n.connection)("template",(a=n.connectionTemplateDirective())==null?null:a.templateRef),u(),Y(n.flowOptimization().detachedGroupsLayer?7:-1),u(),Y(n.flowOptimization().detachedGroupsLayer?-1:8),u(),Y((r=n.minimap())?9:-1,r),u(),Y(n.flowOptimization().virtualization?10:-1)}},dependencies:[My,t9A,Sy,e9A,A9A,XMA,vN,w3,PMA,mtA,JN,Jc,l9A,c9A],styles:["[_nghost-%COMP%]{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}[_nghost-%COMP%] *{box-sizing:border-box}.root-svg[_ngcontent-%COMP%]{grid-row-start:1;grid-column-start:1}.preview-flow[_ngcontent-%COMP%]{pointer-events:none;grid-row-start:1;grid-column-start:1}"],changeDetection:0})}}return t})();var _y=(()=>{class t{constructor(){this.flowSettingsService=w(ts),this.selectionService=w(b3),this.parentEdge=w(JN,{optional:!0}),this.parentNode=w(mtA,{optional:!0}),this.host=w(ce),this.selectOnEvent=this.getEvent$().pipe(Ii(()=>this.select()),wr()).subscribe()}select(){let A=this.entity();A&&this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(A)}entity(){return this.parentNode?this.parentNode.model():this.parentEdge?this.parentEdge.model():null}getEvent$(){return Gc(this.host.nativeElement,"click")}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=VA({type:t,selectors:[["","selectable",""]]})}}return t})();var DtA=(()=>{class t{constructor(){this.edge=w(JN),this.flowSettingsService=w(ts),this.edgeRenderingService=w(v3),this.model=this.edge.model(),this.context=this.model.context.$implicit}pull(){this.flowSettingsService.elevateEdgesOnSelect()&&this.edgeRenderingService.pull(this.model)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=SA({type:t,selectors:[["g","customTemplateEdge",""]],hostBindings:function(i,n){i&1&&U("mousedown",function(){return n.pull()})("touchstart",function(){return n.pull()})},attrs:eMA,ngContentSelectors:UN,decls:3,vars:1,consts:[["interactiveEdge",""],[1,"interactive-edge"]],template:function(i,n){i&1&&(Rt(),Ve(0),Ct(),Kn(1,"path",1,0)),i&2&&(u(),te("d",n.context.path()))},styles:[".interactive-edge[_ngcontent-%COMP%]{fill:none;stroke-width:20;stroke:transparent}"],changeDetection:0})}}return t})();var C9A=["canvas"],I9A=["svgCanvas"],d9A=()=>({type:"dots",color:"#424242",size:1,gap:12}),B9A=()=>[12,12],E9A=(t,e)=>e.name;function h9A(t,e){if(t&1){let A=hA();B(0,"div",6)(1,"div",11)(2,"button",12),U("click",function(){T(A);let n=p();return J(n.backToMainCanvas())}),B(3,"mat-icon"),y(4,"arrow_back"),Q()(),B(5,"div",13)(6,"span",14),y(7,"smart_toy"),Q(),B(8,"div",15)(9,"h3",16),y(10),Q(),B(11,"p",17),y(12,"Agent Tool"),Q()()()()()}if(t&2){let A=p();u(2),H("matTooltip",A.getBackButtonTooltip()),u(8),lA(A.currentAgentTool())}}function Q9A(t,e){if(t&1){let A=hA();B(0,"span",18),U("click",function(){T(A);let n=p();return J(n.toggleSidePanelRequest.emit())}),y(1,"left_panel_open"),Q()}}function u9A(t,e){if(t&1){let A=hA();Ct(),B(0,"foreignObject"),rr(),B(1,"div",27),U("click",function(n){return n.stopPropagation()}),B(2,"button",28,0),U("click",function(n){return n.stopPropagation()}),B(4,"mat-icon"),y(5,"add"),Q()(),B(6,"span",29),y(7,"Add sub-agent"),Q(),B(8,"mat-menu",null,1)(10,"button",30),U("click",function(n){let o;T(A);let a=Qi(3),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("LlmAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),B(11,"mat-icon"),y(12,"psychology"),Q(),B(13,"span"),y(14,"LLM Agent"),Q()(),B(15,"button",30),U("click",function(n){let o;T(A);let a=Qi(3),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("SequentialAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),B(16,"mat-icon"),y(17,"more_horiz"),Q(),B(18,"span"),y(19,"Sequential Agent"),Q()(),B(20,"button",30),U("click",function(n){let o;T(A);let a=Qi(3),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("LoopAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),B(21,"mat-icon"),y(22,"sync"),Q(),B(23,"span"),y(24,"Loop Agent"),Q()(),B(25,"button",30),U("click",function(n){let o;T(A);let a=Qi(3),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("ParallelAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),B(26,"mat-icon"),y(27,"density_medium"),Q(),B(28,"span"),y(29,"Parallel Agent"),Q()()()()()}if(t&2){let A=Qi(9),i=p().$implicit;te("width",200)("height",100)("x",i.width()/2-100)("y",i.height()/2-40),u(2),H("matMenuTriggerFor",A)}}function f9A(t,e){t&1&&(Ct(),QA(0,"handle",26))}function p9A(t,e){if(t&1){let A=hA();Ct(),B(0,"g")(1,"rect",21),U("click",function(n){let o=T(A).$implicit,a=p(2);return J(a.onGroupClick(o.node,n))})("pointerdown",function(n){let o=T(A).$implicit,a=p(2);return J(a.onGroupPointerDown(o.node,n))}),Q(),B(2,"foreignObject",22),rr(),B(3,"div",23)(4,"mat-icon",24),y(5),Q(),B(6,"span",25),y(7),Q()()(),O(8,u9A,30,5,":svg:foreignObject"),O(9,f9A,1,0,":svg:handle",26),Q()}if(t&2){let A,i,n=e.$implicit,o=p(2);u(),ut("stroke",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.8)":"rgba(0, 187, 234, 0.3)")("fill",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.1)":"rgba(0, 187, 234, 0.03)")("stroke-width",o.isGroupSelected(n.node)?3:2),te("width",n.width())("height",n.height()),u(),te("width",200)("height",32),u(3),lA(o.getAgentIcon(n.node.data==null||(A=n.node.data())==null?null:A.agent_class)),u(2),lA(n.node.data==null||(i=n.node.data())==null?null:i.agent_class),u(),Y(o.isGroupEmpty(n.node.id)?8:-1),u(),Y(o.shouldShowTopHandle(n.node)?9:-1)}}function m9A(t,e){t&1&&(B(0,"span",35),y(1,"Root"),Q())}function w9A(t,e){if(t&1){let A=hA();B(0,"button",43),U("click",function(n){T(A),p();let o=zn(0);return p(2).openDeleteSubAgentDialog(o),J(n.stopPropagation())}),B(1,"mat-icon"),y(2,"delete"),Q()()}}function D9A(t,e){if(t&1){let A=hA();B(0,"div",46),U("click",function(n){let o=T(A).$implicit,a=p(2).$implicit;return p(2).selectTool(o,a.node),J(n.stopPropagation())}),B(1,"mat-icon",47),y(2),Q(),B(3,"span",48),y(4),Q()()}if(t&2){let A=e.$implicit,i=p(4);u(2),lA(i.getToolIcon(A)),u(2),lA(A.name)}}function y9A(t,e){if(t&1&&(B(0,"div",38)(1,"div",44),Je(2,D9A,5,2,"div",45,E9A),Q()()),t&2){p();let A=zn(3);u(2),Oe(A)}}function v9A(t,e){if(t&1){let A=hA();B(0,"div",39)(1,"button",49,2),U("click",function(n){return n.stopPropagation()}),B(3,"span",50),y(4,"+"),Q()(),B(5,"mat-menu",null,3)(7,"button",30),U("click",function(n){let o;T(A);let a=Qi(2),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("LlmAgent",(o=r.node.data())==null?null:o.name,a,n))}),B(8,"mat-icon"),y(9,"psychology"),Q(),B(10,"span"),y(11,"LLM Agent"),Q()(),B(12,"button",30),U("click",function(n){let o;T(A);let a=Qi(2),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("SequentialAgent",(o=r.node.data())==null?null:o.name,a,n))}),B(13,"mat-icon"),y(14,"more_horiz"),Q(),B(15,"span"),y(16,"Sequential Agent"),Q()(),B(17,"button",30),U("click",function(n){let o;T(A);let a=Qi(2),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("LoopAgent",(o=r.node.data())==null?null:o.name,a,n))}),B(18,"mat-icon"),y(19,"sync"),Q(),B(20,"span"),y(21,"Loop Agent"),Q()(),B(22,"button",30),U("click",function(n){let o;T(A);let a=Qi(2),r=p().$implicit,s=p(2);return J(s.handleAgentTypeSelection("ParallelAgent",(o=r.node.data())==null?null:o.name,a,n))}),B(23,"mat-icon"),y(24,"density_medium"),Q(),B(25,"span"),y(26,"Parallel Agent"),Q()()()()}if(t&2){let A=Qi(6);u(),H("matMenuTriggerFor",A)}}function b9A(t,e){t&1&&QA(0,"handle",40)}function M9A(t,e){t&1&&QA(0,"handle",26)}function S9A(t,e){t&1&&QA(0,"handle",41)}function k9A(t,e){t&1&&QA(0,"handle",42)}function x9A(t,e){if(t&1){let A=hA();ta(0)(1),Ht(2,"async"),ta(3),B(4,"div",31),U("click",function(n){let o=T(A).$implicit,a=p(2);return J(a.onCustomTemplateNodeClick(o.node,n))})("pointerdown",function(n){let o=T(A).$implicit,a=p(2);return J(a.onNodePointerDown(o.node,n))}),B(5,"div",32)(6,"div",33)(7,"mat-icon",34),y(8),Q(),y(9),O(10,m9A,2,0,"span",35),Q(),B(11,"div",36),O(12,w9A,3,0,"button",37),Q()(),O(13,y9A,4,0,"div",38),O(14,v9A,27,1,"div",39),O(15,b9A,1,0,"handle",40),O(16,M9A,1,0,"handle",26),O(17,S9A,1,0,"handle",41),O(18,k9A,1,0,"handle",42),Q()}if(t&2){let A=e.$implicit,i=p(2),n=A.node.data==null?null:A.node.data(),o=ga((n==null?null:n.name)||"root_agent"),a=ri(2,17,i.toolsMap$);u(3);let s=ga(i.getToolsForNode(o,a)).length>0;u(),RA("custom-node_selected",i.isNodeSelected(A.node))("custom-node_has-tools",s)("in-group",A.node.parentId&&A.node.parentId()),u(4),lA(i.getAgentIcon(n==null?null:n.agent_class)),u(),ue(" ",o," "),u(),Y(i.isRootAgent(o)?10:-1),u(2),Y(i.isRootAgentForCurrentTab(o)?-1:12),u(),Y(s?13:-1),u(),Y(i.shouldShowAddButton(A.node)?14:-1),u(),Y(i.shouldShowLeftHandle(A.node)?15:-1),u(),Y(i.shouldShowTopHandle(A.node)?16:-1),u(),Y(i.shouldShowRightHandle(A.node)?17:-1),u(),Y(i.shouldShowBottomHandle(A.node)?18:-1)}}function _9A(t,e){if(t&1&&(B(0,"vflow",8),Et(1,p9A,10,14,"ng-template",19)(2,x9A,19,20,"ng-template",20),Q()),t&2){let A=p();H("nodes",A.vflowNodes())("edges",A.edges())("background",Rg(4,d9A))("snapGrid",Rg(5,B9A))}}function R9A(t,e){t&1&&(B(0,"div",9)(1,"div",51)(2,"mat-icon",52),y(3,"touch_app"),Q(),B(4,"h4"),y(5,"Start Building Your ADK"),Q(),B(6,"p"),y(7,"Drag components from the left panel to create your workflow"),Q(),B(8,"div",53)(9,"div",54)(10,"mat-icon"),y(11,"drag_indicator"),Q(),B(12,"span"),y(13,"Drag to move nodes"),Q()(),B(14,"div",54)(15,"mat-icon"),y(16,"link"),Q(),B(17,"span"),y(18,"Shift + Click to connect nodes"),Q()()()()())}var cQ=class t{constructor(e,A,i){this.dialog=e;this.agentService=A;this.router=i;this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.agentBuilderService.getSelectedTool().subscribe(n=>{this.selectedTool=n})}_snackBar=w(h2);canvasRef;svgCanvasRef;agentBuilderService=w(e0);cdr=w(wt);showSidePanel=!0;showBuilderAssistant=!1;appNameInput="";toggleSidePanelRequest=new LA;builderAssistantCloseRequest=new LA;ctx;connections=bA([]);nodeId=1;edgeId=1;callbackId=1;toolId=1;appName="";nodes=bA([]);edges=bA([]);workflowShellWidth=340;workflowGroupWidth=420;workflowGroupHeight=220;workflowGroupYOffset=180;workflowGroupXOffset=-40;workflowInnerNodePoint={x:40,y:80};groupNodes=bA([]);vflowNodes=pe(()=>[...this.groupNodes(),...this.nodes()]);selectedAgents=[];selectedTool;selectedCallback;currentAgentTool=bA(null);agentToolBoards=bA(new Map);isAgentToolMode=!1;navigationStack=[];existingAgent=void 0;toolsMap$;nodePositions=new Map;ngOnInit(){this.agentService.getApp().subscribe(e=>{e&&(this.appName=e)}),this.appNameInput&&(this.appName=this.appNameInput),this.agentBuilderService.getNewTabRequest().subscribe(e=>{if(e){let{tabName:A,currentAgentName:i}=e;this.switchToAgentToolBoard(A,i)}}),this.agentBuilderService.getTabDeletionRequest().subscribe(e=>{e&&this.deleteAgentToolBoard(e)}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{if(e){let A=this.nodes().find(i=>i.data?i.data().name===e.agentName:void 0);if(A&&A.data){let i=A.data();i.callbacks=e.callbacks,A.data.set(i)}}}),this.agentBuilderService.getDeleteSubAgentSubject().subscribe(e=>{e&&this.openDeleteSubAgentDialog(e)}),this.agentBuilderService.getAddSubAgentSubject().subscribe(e=>{e.parentAgentName&&this.addSubAgent(e.parentAgentName,e.agentClass,e.isFromEmptyGroup)}),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.selectedAgents=this.nodes().filter(A=>A.data&&A.data().name===e?.name)}),this.toolsMap$.subscribe(e=>{this.nodes().some(i=>i.parentId&&i.parentId())&&this.groupNodes().length>0&&this.updateGroupDimensions()})}ngOnChanges(e){e.appNameInput&&e.appNameInput.currentValue&&(this.appName=e.appNameInput.currentValue)}ngAfterViewInit(){}onCustomTemplateNodeClick(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!0})}onNodePointerDown(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!1})}onGroupClick(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!0})}onGroupPointerDown(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!1})}onCanvasClick(e){let A=e.target;if(!A)return;let i=[".custom-node",".action-button-bar",".add-subagent-btn",".open-panel-btn",".agent-tool-banner",".mat-mdc-menu-panel"];A.closest(i.join(","))||this.clearCanvasSelection()}shouldIgnoreNodeInteraction(e){return e?!!e.closest("mat-chip, .add-subagent-btn, .mat-mdc-menu-panel"):!1}selectAgentNode(e,A={}){if(!e?.data)return;let i=this.agentBuilderService.getNode(e.data().name);i&&(this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedNode(i),this.nodePositions.set(i.name,gA({},e.point())),A.openConfig&&this.agentBuilderService.requestSideTabChange("config"))}handleAgentTypeSelection(e,A,i,n,o=!1){n.stopPropagation(),i?.closeMenu(),this.onAgentTypeSelected(e,A,o)}clearCanvasSelection(){!this.selectedAgents.length&&!this.selectedTool&&!this.selectedCallback||(this.selectedAgents=[],this.selectedTool=void 0,this.selectedCallback=void 0,this.agentBuilderService.setSelectedNode(void 0),this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedCallback(void 0),this.cdr.markForCheck())}onAddResource(e){}onAgentTypeSelected(e,A,i=!1){A&&this.addSubAgent(A,e,i)}generateNodeId(){return this.nodeId+=1,this.nodeId.toString()}generateEdgeId(){return this.edgeId+=1,this.edgeId.toString()}createNode(e,A,i){let n=bA(e),a={id:this.generateNodeId(),point:bA(gA({},A)),type:"html-template",data:n};return i&&(a.parentId=bA(i)),this.nodePositions.set(e.name,gA({},a.point())),a}createWorkflowGroup(e,A,i,n,o,a){let r,s=null;if(n){let d=(o||this.groupNodes()).find(h=>h.id===n);if(d){let h=d.point(),E=d.height?d.height():this.workflowGroupHeight;if(a&&o){let f=a.filter(m=>m.parentId&&m.parentId()===d.id);if(f.length>0){let z=0;for(let P of f){let W=P.data?P.data():void 0,eA=120;W&&W.tools&&W.tools.length>0&&(eA+=20+W.tools.length*36),z=Math.max(z,eA)}E=Math.max(220,80+z+40)}}r={x:h.x,y:h.y+E+60},s=null}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset}}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset};let l=this.generateNodeId(),g={id:l,point:bA(r),type:"template-group",data:bA(e),parentId:bA(s),width:bA(this.workflowGroupWidth),height:bA(this.workflowGroupHeight)},C=e.agent_class==="SequentialAgent"?{id:this.generateEdgeId(),source:A.id,sourceHandle:"source-bottom",target:l,targetHandle:"target-top"}:null;return{groupNode:g,edge:C}}calculateWorkflowChildPosition(e,A){let r=(A-20)/2;return{x:45+e*428,y:r}}createAgentNodeWithGroup(e,A,i,n,o){let a=this.createNode(e,A,i),r=null,s=null;if(this.isWorkflowAgent(e.agent_class)){let l=this.createWorkflowGroup(e,a,A,i,n,o);r=l.groupNode,s=l.edge}return{shellNode:a,groupNode:r,groupEdge:s}}createWorkflowChildEdge(e,A){return this.createWorkflowChildEdgeFromArrays(e,A,this.nodes(),this.groupNodes())}createWorkflowChildEdgeFromArrays(e,A,i,n){if(!A)return null;let o=n.find(r=>r.id===A);if(!o||!o.data)return null;let a=o.data().agent_class;if(a==="LoopAgent"||a==="ParallelAgent"){let r=i.find(s=>s.data&&s.data().name===o.data().name);if(r)return{id:this.generateEdgeId(),source:r.id,sourceHandle:"source-bottom",target:e.id,targetHandle:"target-top"}}if(a==="SequentialAgent"){let r=i.filter(g=>g.parentId&&g.parentId()===A);if(r.length===0)return null;r.sort((g,C)=>g.point().x-C.point().x);let s=r.findIndex(g=>g.id===e.id);if(s<=0)return null;let l=r[s-1];return{id:this.generateEdgeId(),source:l.id,sourceHandle:"source-right",target:e.id,targetHandle:"target-left"}}return null}isWorkflowAgent(e){return e?e==="SequentialAgent"||e==="ParallelAgent"||e==="LoopAgent":!1}addSubAgent(e,A="LlmAgent",i=!1){let n=this.nodes().find(C=>C.data&&C.data().name===e);if(!n||!n.data)return;let a={name:this.agentBuilderService.getNextSubAgentName(),agent_class:A,model:"gemini-2.5-flash",instruction:"You are a sub-agent that performs specialized tasks.",isRoot:!1,sub_agents:[],tools:[]},r=this.isWorkflowAgent(n.data().agent_class),s=n.parentId&&n.parentId()&&this.groupNodes().some(C=>C.id===n.parentId()),l,g=null;if(i&&r){let C=n.data();if(!C)return;let I=this.groupNodes().find(v=>v.data&&v.data()?.name===C.name);if(!I){console.error("Could not find group for workflow node");return}let d=this.agentBuilderService.getNode(n.data().name);if(!d){console.error("Could not find clicked agent data");return}let h=d.sub_agents.length,E=I.height?I.height():this.workflowGroupHeight,f=this.calculateWorkflowChildPosition(h,E),m=this.createAgentNodeWithGroup(a,f,I.id);l=m.shellNode,g=m.groupNode,d.sub_agents.push(a),g&&this.groupNodes.set([...this.groupNodes(),g]),m.groupEdge&&this.edges.set([...this.edges(),m.groupEdge])}else if(s){let C=n.parentId()??void 0,I=this.groupNodes().find(k=>k.id===C);if(!I||!I.data){console.error("Could not find parent group node");return}let d=I.data().name,h=this.agentBuilderService.getNode(d);if(!h){console.error("Could not find workflow parent agent");return}let E=h.sub_agents.length,f=I.height?I.height():this.workflowGroupHeight,m=this.calculateWorkflowChildPosition(E,f),v=this.createAgentNodeWithGroup(a,m,C);l=v.shellNode,g=v.groupNode,h.sub_agents.push(a),g&&this.groupNodes.set([...this.groupNodes(),g]),v.groupEdge&&this.edges.set([...this.edges(),v.groupEdge])}else{let C=n.data().sub_agents.length,I={x:n.point().x+C*400,y:n.point().y+300},d=this.createAgentNodeWithGroup(a,I);l=d.shellNode,g=d.groupNode;let h=this.agentBuilderService.getNode(n.data().name);h&&h.sub_agents.push(a),g&&this.groupNodes.set([...this.groupNodes(),g]),d.groupEdge&&this.edges.set([...this.edges(),d.groupEdge])}if(this.agentBuilderService.addNode(a),this.nodes.set([...this.nodes(),l]),this.selectedAgents=[l],(s||r)&&this.updateGroupDimensions(),r||s){let C=l.parentId?l.parentId()??void 0:void 0,I=this.createWorkflowChildEdge(l,C);I&&this.edges.set([...this.edges(),I])}else{let C={id:this.generateEdgeId(),source:n.id,sourceHandle:"source-bottom",target:l.id,targetHandle:"target-top"};this.edges.set([...this.edges(),C])}this.agentBuilderService.setSelectedNode(a),this.agentBuilderService.requestSideTabChange("config")}addTool(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i=A.data();if(!i)return;this.dialog.open(v2,{width:"500px"}).afterClosed().subscribe(o=>{if(o)if(o.toolType==="Agent Tool")this.createAgentTool(i.name);else{let a={toolType:o.toolType,name:o.name};this.agentBuilderService.addTool(i.name,a),this.agentBuilderService.setSelectedTool(a)}})}addCallback(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i={name:`callback_${this.callbackId}`,type:"before_agent",code:`def callback_function(callback_context): + # Add your callback logic here + return None`,description:"Auto-generated callback"};this.callbackId++;let n=this.agentBuilderService.addCallback(A.data().name,i);n.success||this._snackBar.open(n.error||"Failed to add callback","Close",{duration:3e3,panelClass:["error-snackbar"]})}createAgentTool(e){this.dialog.open(bc,{width:"750px",height:"310px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name"}}).afterClosed().subscribe(i=>{i&&typeof i=="string"&&this.agentBuilderService.requestNewTab(i,e)})}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(bc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{a==="confirm"&&this.deleteToolWithoutDialog(e,A)})}deleteToolWithoutDialog(e,A){if(A.toolType==="Agent Tool"){let i=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,i)}else this.agentBuilderService.deleteTool(e,A)}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}deleteCallback(e,A){this.dialog.open(bc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success||this._snackBar.open(o.error||"Failed to delete callback","Close",{duration:3e3,panelClass:["error-snackbar"]}),this.cdr.detectChanges()}})}openDeleteSubAgentDialog(e){this.dialog.open(bc,{data:{title:"Delete sub agent",message:`Are you sure you want to delete ${e}? This will also delete all the underlying sub agents and tools.`,confirmButtonText:"Delete"}}).afterClosed().subscribe(i=>{i==="confirm"&&this.deleteSubAgent(e)})}deleteSubAgent(e){let A=this.agentBuilderService.getNode(e);if(!A)return;let i=this.agentBuilderService.getParentNode(this.agentBuilderService.getRootNode(),A,void 0,this.agentToolBoards());i&&(this.deleteSubAgentHelper(A,i),this.agentBuilderService.getSelectedNode().pipe(uo(1),gt(n=>!!n)).subscribe(n=>{this.agentBuilderService.getNodes().includes(n)||this.agentBuilderService.setSelectedNode(i)}))}isNodeInSequentialWorkflow(e){if(!e.parentId||!e.parentId())return!1;let A=e.parentId(),i=this.groupNodes().find(n=>n.id===A);return!i||!i.data?!1:i.data().agent_class==="SequentialAgent"}getSequentialSiblings(e){if(!e.parentId||!e.parentId())return{previous:void 0,next:void 0};let A=e.parentId(),i=this.nodes().filter(o=>o.parentId&&o.parentId()===A);i.sort((o,a)=>o.point().x-a.point().x);let n=i.findIndex(o=>o.id===e.id);return n===-1?{previous:void 0,next:void 0}:{previous:n>0?i[n-1]:void 0,next:nn.data&&n.data().name===e.name);if(i){let n=this.isNodeInSequentialWorkflow(i),o,a;if(n){let s=this.getSequentialSiblings(i);o=s.previous,a=s.next}this.nodes.set(this.nodes().filter(s=>s.id!==i.id));let r=this.groupNodes().find(s=>s.data&&s.data().name===e.name);if(r){this.groupNodes.set(this.groupNodes().filter(l=>l.id!==r.id));let s=this.edges().filter(l=>l.target!==i.id&&l.source!==i.id&&l.target!==r.id&&l.source!==r.id);this.edges.set(s)}else{let s=this.edges().filter(l=>l.target!==i.id&&l.source!==i.id);this.edges.set(s)}if(n&&o&&a){let s={id:this.generateEdgeId(),source:o.id,sourceHandle:"source-right",target:a.id,targetHandle:"target-left"};this.edges.set([...this.edges(),s])}}this.nodePositions.delete(e.name),A.sub_agents=A.sub_agents.filter(n=>n.name!==e.name),this.agentBuilderService.deleteNode(e),i&&i.parentId&&i.parentId()&&this.updateGroupDimensions()}selectTool(e,A){if(e.toolType==="Agent Tool"){let i=e.name;this.switchToAgentToolBoard(i);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.editTool(e,i)}return}if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedTool(e)}editTool(e,A){let i;e.toolType==="Built-in tool"?i=this.dialog.open(kd,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):i=this.dialog.open(v2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),i.afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=A.tools?.findIndex(a=>a.name===e.name);o!==void 0&&o!==-1&&A.tools&&(A.tools[o].name=n.name,n.args&&(A.tools[o].args=n.args),this.agentBuilderService.setAgentTools(A.name,A.tools))}})}selectCallback(e,A){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedCallback(e)}openToolsTab(e){if(e.data){let A=this.agentBuilderService.getNode(e.data().name);A&&this.agentBuilderService.setSelectedNode(A)}this.agentBuilderService.requestSideTabChange("tools")}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this._snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentToolBoards();s0.generateYamlFile(A,i,e,n),this.agentService.agentBuild(i).subscribe(o=>{o?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this._snackBar.open("Something went wrong, please try again","OK")})}isRootAgent(e){let A=this.agentBuilderService.getRootNode();return A?A.name===e:!1}isRootAgentForCurrentTab(e){return this.isAgentToolMode&&this.currentAgentTool()?e===this.currentAgentTool():this.isRootAgent(e)}shouldShowHorizontalHandle(e,A){if(!e.parentId||!e.parentId())return!1;let i=e.parentId(),n=this.groupNodes().find(s=>s.id===i);if(!n||!n.data||n.data().agent_class!=="SequentialAgent")return!1;let a=this.nodes().filter(s=>s.parentId&&s.parentId()===i);if(a.length<=1)return!1;a.sort((s,l)=>s.point().x-l.point().x);let r=a.findIndex(s=>s.id===e.id);return A==="left"?r>0:r0):!1}shouldShowTopHandle(e){let A=e.data?e.data():void 0,i=A?.name,n=i?this.isRootAgent(i):!1;if(e.type==="template-group")return A?.agent_class==="SequentialAgent";if(n)return!1;if(e.parentId&&e.parentId()){let a=e.parentId(),r=this.groupNodes().find(s=>s.id===a);if(r&&r.data){let s=r.data().agent_class;if(s==="LoopAgent"||s==="ParallelAgent")return!0}return!1}return!0}getToolsForNode(e,A){return!e||!A?[]:A.get(e)??[]}loadFromYaml(e,A){try{let i=iE(e);this.agentBuilderService.clear(),this.nodePositions.clear(),this.agentToolBoards.set(new Map),this.agentBuilderService.setAgentToolBoards(new Map),this.currentAgentTool.set(null),this.isAgentToolMode=!1,this.navigationStack=[];let n=Ye(gA({name:i.name||"root_agent",agent_class:i.agent_class||"LlmAgent",model:i.model||"gemini-2.5-flash",instruction:i.instruction||"",description:i.description||""},i.max_iterations&&{max_iterations:i.max_iterations}),{isRoot:!0,sub_agents:i.sub_agents||[],tools:this.parseToolsFromYaml(i.tools||[]),callbacks:this.parseCallbacksFromYaml(i)});this.agentBuilderService.addNode(n),this.agentBuilderService.setSelectedNode(n),this.processAgentToolsFromYaml(n.tools||[],A),this.loadAgentBoard(n)}catch(i){console.error("Error parsing YAML:",i)}}parseToolsFromYaml(e){return e.map(A=>{let i={name:A.name,toolType:this.determineToolType(A),toolAgentName:A.name};if(A.name==="AgentTool"&&A.args&&A.args.agent&&A.args.agent.config_path){i.toolType="Agent Tool";let o=A.args.agent.config_path.replace("./","").replace(".yaml","");i.name=o,i.toolAgentName=o,i.args=A.args}else A.args&&(i.args=A.args);return i})}parseCallbacksFromYaml(e){let A=[];return Object.keys(e).forEach(i=>{if(i.endsWith("_callback")&&Array.isArray(e[i])){let n=i.replace("_callback","");e[i].forEach(o=>{o.name&&A.push({name:o.name,type:n})})}}),A}determineToolType(e){return e.name==="AgentTool"&&e.args&&e.args.agent?"Agent Tool":e.name&&e.name.includes(".")&&e.args?"Custom tool":e.name&&e.name.includes(".")&&!e.args?"Function tool":"Built-in tool"}processAgentToolsFromYaml(e,A){let i=e.filter(n=>n.toolType==="Agent Tool");for(let n of i)this.agentToolBoards().has(n.name)||this.loadAgentToolConfiguration(n,A)}loadAgentToolConfiguration(e,A){let i=e.name;this.agentService.getSubAgentBuilder(A,`${i}.yaml`).subscribe({next:n=>{if(n)try{let o=iE(n),a=Ye(gA({name:o.name||i,agent_class:o.agent_class||"LlmAgent",model:o.model||"gemini-2.5-flash",instruction:o.instruction||`You are the ${i} agent that can be used as a tool by other agents.`,description:o.description||""},o.max_iterations&&{max_iterations:o.max_iterations}),{isRoot:!1,sub_agents:o.sub_agents||[],tools:this.parseToolsFromYaml(o.tools||[]),callbacks:this.parseCallbacksFromYaml(o),isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization}),r=this.agentToolBoards();if(r.set(i,a),this.agentToolBoards.set(r),this.agentBuilderService.setAgentToolBoards(r),this.agentBuilderService.addNode(a),this.processAgentToolsFromYaml(a.tools||[],A),a.sub_agents&&a.sub_agents.length>0)for(let s of a.sub_agents)s.config_path&&this.agentService.getSubAgentBuilder(A,s.config_path).subscribe(l=>{if(l){let g=iE(l);this.processAgentToolsFromYaml(this.parseToolsFromYaml(g.tools||[]),A)}})}catch(o){console.error(`Error parsing YAML for agent tool ${i}:`,o),this.createDefaultAgentToolConfiguration(e)}else this.createDefaultAgentToolConfiguration(e)},error:n=>{console.error(`Error loading agent tool configuration for ${i}:`,n),this.createDefaultAgentToolConfiguration(e)}})}createDefaultAgentToolConfiguration(e){let A=e.name,i={name:A,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${A} agent that can be used as a tool by other agents.`,isRoot:!1,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization},n=this.agentToolBoards();n.set(A,i),this.agentToolBoards.set(n),this.agentBuilderService.setAgentToolBoards(n),this.agentBuilderService.addNode(i)}loadAgentTools(e){e.tools?(e.tools=e.tools.filter(A=>A.name&&A.name.trim()!==""),e.tools.forEach(A=>{A.toolType!=="Agent Tool"&&(A.name.includes(".")&&A.args?A.toolType="Custom tool":A.name.includes(".")&&!A.args?A.toolType="Function tool":A.toolType="Built-in tool")})):e.tools=[]}isNodeSelected(e){return this.selectedAgents.includes(e)}isGroupSelected(e){if(!e.data)return!1;let A=e.data().name,i=this.nodes().find(n=>n.data&&n.data().name===A);return i?this.isNodeSelected(i):!1}loadSubAgents(e,A){return lt(this,null,function*(){let i=[{node:A,depth:1,index:1,parentShellId:void 0,parentAgent:void 0,parentGroupId:void 0}],n=[],o=[],a=[];for(;i.length>0;){let{node:r,depth:s,index:l,parentShellId:g,parentAgent:C,parentGroupId:I}=i.shift(),d=r;if(r.config_path)try{let S=yield J3(this.agentService.getSubAgentBuilder(e,r.config_path));d=iE(S),d.tools&&(d.tools=this.parseToolsFromYaml(d.tools||[])),this.processAgentToolsFromYaml(d.tools||[],e)}catch(S){console.error(`Failed to load agent from ${r.config_path}`,S);continue}if(C&&C.sub_agents){let S=C.sub_agents.indexOf(r);S!==-1&&(C.sub_agents[S]=d,this.agentBuilderService.addNode(C))}this.agentBuilderService.addNode(d);let h=this.nodePositions.get(d.name),E=this.isWorkflowAgent(d.agent_class),f=C?this.isWorkflowAgent(C.agent_class):!1,m,v,k=null;if(f&&!d.isRoot){let S=C?.sub_agents.indexOf(d)??l,b=o.find(z=>z.id===I),x=b?.height?b.height():this.workflowGroupHeight;m=h??this.calculateWorkflowChildPosition(S,x);let F=this.createAgentNodeWithGroup(d,m,I??void 0,o,n);v=F.shellNode,k=F.groupNode,n.push(v),k&&o.push(k),F.groupEdge&&a.push(F.groupEdge)}else{if(h)m=h;else if(!g)m={x:100,y:150};else{let b=n.find(x=>x.id===g);b?m={x:b.point().x+(l-1)*400,y:b.point().y+300}:m={x:100,y:s*150+50}}let S=this.createAgentNodeWithGroup(d,m,void 0,o,n);v=S.shellNode,k=S.groupNode,n.push(v),E&&!d.isRoot&&(k&&o.push(k),S.groupEdge&&a.push(S.groupEdge))}if(g)if(I){let S=this.createWorkflowChildEdgeFromArrays(v,I,n,o);S&&a.push(S)}else{let S={id:this.generateEdgeId(),source:g,sourceHandle:"source-bottom",target:v.id,targetHandle:"target-top"};a.push(S)}if(d.sub_agents&&d.sub_agents.length>0){let S=1,b=E&&k?k.id:I;for(let x of d.sub_agents)i.push({node:x,parentShellId:v.id,depth:s+1,index:S,parentAgent:d,parentGroupId:b}),S++}}this.nodes.set(n),this.groupNodes.set(o),this.edges.set(a),this.updateGroupDimensions()})}switchToAgentToolBoard(e,A){let i=this.currentAgentTool()||"main";i!==e&&this.navigationStack.push(i);let n=this.agentToolBoards(),o=n.get(e);if(!o){o={isRoot:!1,name:e,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${e} agent that can be used as a tool by other agents.`,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!1};let a=new Map(n);a.set(e,o),this.agentToolBoards.set(a),this.agentBuilderService.setAgentToolBoards(a),A?this.addAgentToolToAgent(e,A):this.addAgentToolToRoot(e)}this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(o),this.agentBuilderService.setSelectedNode(o),this.agentBuilderService.requestSideTabChange("config")}backToMainCanvas(){if(this.navigationStack.length>0){let e=this.navigationStack.pop();if(e==="main"){this.currentAgentTool.set(null),this.isAgentToolMode=!1;let A=this.agentBuilderService.getRootNode();A&&(this.loadAgentBoard(A),this.agentBuilderService.setSelectedNode(A),this.agentBuilderService.requestSideTabChange("config"))}else{let i=this.agentToolBoards().get(e);i&&(this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(i),this.agentBuilderService.setSelectedNode(i),this.agentBuilderService.requestSideTabChange("config"))}}else{this.currentAgentTool.set(null),this.isAgentToolMode=!1;let e=this.agentBuilderService.getRootNode();e&&(this.loadAgentBoard(e),this.agentBuilderService.setSelectedNode(e),this.agentBuilderService.requestSideTabChange("config"))}}loadAgentBoard(e){return lt(this,null,function*(){if(this.captureCurrentNodePositions(),this.nodes.set([]),this.groupNodes.set([]),this.edges.set([]),this.nodeId=0,this.edgeId=0,this.loadAgentTools(e),this.agentBuilderService.addNode(e),e.tools&&e.tools.length>0?this.agentBuilderService.setAgentTools(e.name,e.tools):this.agentBuilderService.setAgentTools(e.name,[]),e.sub_agents&&e.sub_agents.length>0)yield this.loadSubAgents(this.appName,e);else{let A=this.nodePositions.get(e.name)??{x:100,y:150},i=this.createNode(e,A);if(this.nodes.set([i]),this.isWorkflowAgent(e.agent_class)){let{groupNode:n,edge:o}=this.createWorkflowGroup(e,i,A);this.groupNodes.set([n]),o&&this.edges.set([o])}}this.agentBuilderService.setSelectedNode(e)})}addAgentToolToAgent(e,A){let i=this.agentBuilderService.getNode(A);if(i){if(i.tools&&i.tools.some(o=>o.name===e))return;let n={name:e,toolType:"Agent Tool",toolAgentName:e};i.tools||(i.tools=[]),i.tools.push(n),i.tools=i.tools.filter(o=>o.name&&o.name.trim()!==""),this.agentBuilderService.setAgentTools(A,i.tools)}}addAgentToolToRoot(e){let A=this.agentBuilderService.getRootNode();if(A){if(A.tools&&A.tools.some(n=>n.name===e))return;let i={name:e,toolType:"Agent Tool",toolAgentName:e};A.tools||(A.tools=[]),A.tools.push(i),this.agentBuilderService.setAgentTools("root_agent",A.tools)}}deleteAgentToolBoard(e){let A=this.agentToolBoards(),i=new Map(A);i.delete(e),this.agentToolBoards.set(i),this.agentBuilderService.setAgentToolBoards(i);let n=this.agentBuilderService.getNodes();for(let o of n)o.tools&&(o.tools=o.tools.filter(a=>!(a.toolType==="Agent Tool"&&(a.toolAgentName===e||a.name===e))),this.agentBuilderService.setAgentTools(o.name,o.tools));this.navigationStack=this.navigationStack.filter(o=>o!==e),this.currentAgentTool()===e&&this.backToMainCanvas()}getBackButtonTooltip(){if(this.navigationStack.length>0){let e=this.navigationStack[this.navigationStack.length-1];return e==="main"?"Back to Main Canvas":`Back to ${e}`}return"Back to Main Canvas"}onBuilderAssistantClose(){this.builderAssistantCloseRequest.emit()}reloadCanvasFromYaml(){this.appNameInput&&this.agentService.getAgentBuilderTmp(this.appNameInput).subscribe({next:e=>{e&&this.loadFromYaml(e,this.appNameInput)},error:e=>{console.error("Error reloading canvas:",e)}})}captureCurrentNodePositions(){for(let e of this.nodes()){if(!e?.data)continue;let A=e.data();A&&this.nodePositions.set(A.name,gA({},e.point()))}}updateGroupDimensions(){for(let s of this.groupNodes()){if(!s.data)continue;let l=s.data().name,g=this.nodes().filter(m=>m.parentId&&m.parentId()===s.id);if(g.length===0){s.width&&s.width.set(480),s.height&&s.height.set(220);continue}g.sort((m,v)=>m.point().x-v.point().x),g.forEach((m,v)=>{let F={x:45+v*428,y:80};if(m.point.set(F),m.data){let z=m.data();z&&this.nodePositions.set(z.name,F)}});let C=1/0,I=1/0,d=-1/0,h=-1/0;for(let m of g){let v=m.point(),k=m.data?m.data():void 0,S=120;k&&k.tools&&k.tools.length>0&&(S+=20+k.tools.length*36),C=Math.min(C,v.x),I=Math.min(I,v.y),d=Math.max(d,v.x+340+68),h=Math.max(h,v.y+S)}let E=d-C+80,f=h-I+80;s.width&&s.width.set(Math.max(480,E)),s.height&&s.height.set(Math.max(220,f))}}getToolIcon(e){return sE(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}isGroupEmpty(e){return!this.nodes().some(i=>i.parentId&&i.parentId()===e)}shouldShowAddButton(e){let A=e.data?e.data():void 0;if(!A)return!1;let i=this.isWorkflowAgent(A.agent_class),n=e.parentId&&e.parentId();if(i&&!n||!this.isNodeSelected(e))return!1;if(n&&e.parentId){let o=e.parentId(),a=this.nodes().filter(s=>s.parentId&&s.parentId()===o);if(a.length===0)return!0;let r=a.reduce((s,l)=>l.point().x>s.point().x?l:s,a[0]);return e.id===r.id}return!0}static \u0275fac=function(A){return new(A||t)(ct(Or),ct(eQ),ct(ls))};static \u0275cmp=SA({type:t,selectors:[["app-canvas"]],viewQuery:function(A,i){if(A&1&&Jt(C9A,5)(I9A,5),A&2){let n;ae(n=re())&&(i.canvasRef=n.first),ae(n=re())&&(i.svgCanvasRef=n.first)}},inputs:{showSidePanel:"showSidePanel",showBuilderAssistant:"showBuilderAssistant",appNameInput:"appNameInput"},outputs:{toggleSidePanelRequest:"toggleSidePanelRequest",builderAssistantCloseRequest:"builderAssistantCloseRequest"},features:[Yt],decls:7,vars:8,consts:[["emptyGroupMenuTrigger","matMenuTrigger"],["emptyGroupMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["agentMenu","matMenu"],[1,"canvas-container"],[1,"canvas-workspace",3,"click"],[1,"agent-tool-banner"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn"],["view","auto",3,"nodes","edges","background","snapGrid"],[1,"canvas-instructions"],[3,"closePanel","reloadCanvas","isVisible","appName"],[1,"banner-content"],["mat-icon-button","",1,"back-to-main-btn",3,"click","matTooltip"],[1,"banner-info"],[1,"material-symbols-outlined","banner-icon"],[1,"banner-text"],[1,"agent-tool-name"],[1,"banner-subtitle"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn",3,"click"],["groupNode",""],["nodeHtml",""],["selectable","","rx","12","ry","12",3,"click","pointerdown"],["x","12","y","12"],[1,"workflow-group-chip"],[1,"workflow-chip-icon"],[1,"workflow-chip-label"],["type","target","position","top","id","target-top"],[1,"empty-group-placeholder",3,"click"],["mat-icon-button","","matTooltip","Add sub-agent","aria-label","Add sub-agent",3,"click","matMenuTriggerFor"],[1,"empty-group-label"],["mat-menu-item","",3,"click"],["selectable","",1,"custom-node",3,"click","pointerdown"],[1,"node-title-wrapper"],[1,"node-title"],[2,"margin-right","5px"],[1,"node-badge"],[1,"action-button-bar"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn"],[1,"tools-container"],[1,"add-subagent-container"],["type","target","position","left","id","target-left"],["type","source","position","right","id","source-right"],["type","source","position","bottom","id","source-bottom"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn",3,"click"],[1,"tools-list"],[1,"tool-item"],[1,"tool-item",3,"click"],[1,"tool-item-icon"],[1,"tool-item-name"],["matIconButton","","matTooltip","Add sub-agent","aria-label","Add sub-agent",1,"add-subagent-btn",3,"click","matMenuTriggerFor"],[1,"add-subagent-symbol"],[1,"instruction-content"],[1,"instruction-icon"],[1,"instruction-tips"],[1,"tip"]],template:function(A,i){A&1&&(B(0,"div",4)(1,"div",5),U("click",function(o){return i.onCanvasClick(o)}),O(2,h9A,13,2,"div",6),O(3,Q9A,2,0,"span",7),O(4,_9A,3,6,"vflow",8),O(5,R9A,19,0,"div",9),Q(),B(6,"app-builder-assistant",10),U("closePanel",function(){return i.onBuilderAssistantClose()})("reloadCanvas",function(){return i.reloadCanvasFromYaml()}),Q()()),A&2&&(u(),RA("has-banner",i.currentAgentTool()),u(),Y(i.currentAgentTool()?2:-1),u(),Y(i.showSidePanel?-1:3),u(),Y(i.vflowNodes().length>0?4:-1),u(),Y(i.vflowNodes().length===0?5:-1),u(),H("isVisible",i.showBuilderAssistant)("appName",i.appName))},dependencies:[xy,M3,_y,lQ,wy,Wt,dn,Zs,Ml,$c,OD,os],styles:['[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;flex:1;min-height:0}.canvas-container[_ngcontent-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;border-radius:8px;overflow:hidden;box-shadow:var(--builder-canvas-shadow);flex:1;min-height:0;position:relative}.canvas-header[_ngcontent-%COMP%]{padding:16px 24px;border-bottom:2px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.canvas-controls[_ngcontent-%COMP%]{display:flex;gap:8px}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border:1px solid var(--builder-button-border-color);color:var(--builder-button-text-color);transition:all .3s ease}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-color:var(--builder-button-hover-border-color);transform:translateY(-1px)}.canvas-workspace[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;min-height:0;width:100%;height:100%}.agent-tool-banner[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;border-bottom:2px solid rgba(59,130,246,.3);box-shadow:0 4px 16px #0000004d}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%]{padding:12px 20px;display:flex;align-items:center;gap:16px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]{color:#fff;border:1px solid rgba(255,255,255,.2);transition:all .2s ease}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05)}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px;color:#ffffffe6}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .agent-tool-name[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;line-height:1.2}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .banner-subtitle[_ngcontent-%COMP%]{margin:0;color:#fffc;font-size:12px;font-weight:400;line-height:1}.canvas-workspace[_ngcontent-%COMP%]:has(.agent-tool-banner) vflow[_ngcontent-%COMP%]{padding-top:68px}.canvas-workspace.has-banner[_ngcontent-%COMP%] vflow{padding-top:68px!important} vflow{width:100%!important;height:100%!important;display:block!important} vflow .root-svg{color:var(--builder-text-primary-color)!important;width:100%!important;height:100%!important;min-width:100%!important;min-height:100%!important}.diagram-canvas[_ngcontent-%COMP%]{display:block;width:100%;height:100%;cursor:crosshair;transition:cursor .2s ease;object-fit:contain;image-rendering:pixelated}.diagram-canvas[_ngcontent-%COMP%]:active{cursor:grabbing}.canvas-instructions[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none}.instruction-content[_ngcontent-%COMP%]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:2px solid var(--builder-canvas-instruction-border);border-radius:16px;padding:32px;box-shadow:var(--builder-canvas-shadow)}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--builder-button-text-color);margin-bottom:16px;animation:_ngcontent-%COMP%_pulse 2s infinite}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;font-weight:600;margin:0 0 12px;font-family:Google Sans,Helvetica Neue,sans-serif}.instruction-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 24px;line-height:1.5}.instruction-tips[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.tip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;color:var(--builder-accent-color);font-size:13px}.tip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.connection-mode-indicator[_ngcontent-%COMP%]{position:absolute;top:20px;left:50%;transform:translate(-50%);animation:_ngcontent-%COMP%_slideDown .3s ease-out}.connection-indicator-content[_ngcontent-%COMP%]{color:#fff;padding:12px 20px;border-radius:24px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #1b73e866;border:1px solid rgba(255,255,255,.2)}.connection-indicator-content[_ngcontent-%COMP%] .connection-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;animation:_ngcontent-%COMP%_pulse 1.5s infinite}.connection-indicator-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500;white-space:nowrap}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:#fff;border:1px solid rgba(255,255,255,.3);width:32px;height:32px;min-width:32px}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{transform:scale(1.1)}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translate(-50%) translateY(-20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.canvas-footer[_ngcontent-%COMP%]{padding:12px 24px;border-top:1px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.node-count[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--builder-text-secondary-color);font-size:13px;font-weight:500}.node-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--builder-accent-color)}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.canvas-workspace.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:2px dashed #00bbea;border-radius:8px;margin:16px;animation:_ngcontent-%COMP%_dashMove 1s linear infinite}@keyframes _ngcontent-%COMP%_dashMove{0%{border-color:#8ab4f84d}50%{border-color:#8ab4f8cc}to{border-color:#8ab4f84d}}@media(max-width:768px){.canvas-header[_ngcontent-%COMP%]{padding:12px 16px}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.instruction-content[_ngcontent-%COMP%]{padding:24px;margin:16px}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.canvas-footer[_ngcontent-%COMP%]{padding:8px 16px;flex-direction:column;gap:8px}}.custom-node[_ngcontent-%COMP%]{width:340px;border:1px solid var(--builder-canvas-node-border);border-radius:8px;align-items:center;position:relative;max-height:none;padding-bottom:0;overflow:visible}.custom-node[_ngcontent-%COMP%]:hover{border-color:var(--builder-canvas-node-hover-border)}.custom-node_selected[_ngcontent-%COMP%]{border:2px solid;border-color:var(--builder-accent-color)}.custom-node_selected[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{--mdc-chip-outline-color: var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%]:hover{border-color:var(--builder-accent-color)}[_nghost-%COMP%] .default-group-node{border:2px solid var(--builder-canvas-group-border)!important}.node-title-wrapper[_ngcontent-%COMP%]{padding-top:12px;padding-bottom:12px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center}.node-title[_ngcontent-%COMP%]{padding-left:12px;padding-right:12px;display:flex;align-items:center;color:var(--builder-text-primary-color);font-weight:500}.node-badge[_ngcontent-%COMP%]{margin-left:8px;padding:2px 6px;border-radius:999px;color:var(--builder-accent-color);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.tools-container[_ngcontent-%COMP%]{padding:8px 12px;border-top:1px solid var(--builder-border-color)}.tools-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:4px;cursor:pointer;transition:background-color .2s ease;color:var(--builder-text-primary-color)}.tool-item[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{font-size:22px;width:22px;height:22px;color:var(--builder-text-primary-color);flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-item-name[_ngcontent-%COMP%]{font-family:Google Sans,sans-serif;font-size:15px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-item.more-tools[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-style:italic}.tool-item.more-tools[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%]{border-bottom-color:var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%] .node-title[_ngcontent-%COMP%]{color:var(--builder-accent-color)}.tools-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callbacks-container[_ngcontent-%COMP%]{padding:12px 6px 12px 12px}.callbacks-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callback-type[_ngcontent-%COMP%]{font-size:11px;color:var(--builder-accent-color);padding:2px 6px;border-radius:4px;margin-left:4px;font-weight:500}.add-callback-btn[_ngcontent-%COMP%]{border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-callback-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-callback-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);transform:scale(1.1)}.instruction-title[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px}.instructions[_ngcontent-%COMP%]{font-family:Google Sans;margin-bottom:10px}.agent-resources[_ngcontent-%COMP%]{padding:8px 12px}.empty-resource[_ngcontent-%COMP%]{margin-top:8px;color:var(--builder-text-secondary-color);margin-bottom:8px;display:flex;font-size:13px}.empty-resource[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:none}.action-button-bar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-right:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;pointer-events:auto;border-radius:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);transform:scale(1.1)}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.action-button-bar[_ngcontent-%COMP%] .delete-subagent-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color)}.add-tool-btn[_ngcontent-%COMP%]{border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-tool-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-tool-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);transform:scale(1.1)}.add-subagent-container[_ngcontent-%COMP%]{position:absolute;left:50%;bottom:-68px;transform:translate(-50%);display:flex;justify-content:center;pointer-events:none}.custom-node.in-group[_ngcontent-%COMP%] .add-subagent-container[_ngcontent-%COMP%]{left:auto;right:-68px;bottom:50%;transform:translateY(50%)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:50%;border:2px solid var(--builder-accent-color);color:var(--builder-accent-color);display:flex;align-items:center;justify-content:center;padding:0;box-sizing:border-box;transition:transform .2s ease,box-shadow .2s ease,background .2s ease;pointer-events:auto}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%] .add-subagent-symbol[_ngcontent-%COMP%]{font-size:28px;line-height:1;font-weight:400}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05);box-shadow:var(--builder-canvas-add-btn-shadow)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:var(--builder-canvas-add-btn-shadow)}.open-panel-btn[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;color:var(--builder-text-tertiary-color);cursor:pointer;margin-left:20px;margin-top:20px}.custom-node[_ngcontent-%COMP%]:hover .action-button-bar[_ngcontent-%COMP%], .custom-node.custom-node_selected[_ngcontent-%COMP%] .action-button-bar[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}[_nghost-%COMP%] div[nodehandlescontroller][noderesizecontroller].wrapper{height:0px!important;overflow:visible!important}[_nghost-%COMP%] foreignObject.selectable, [_nghost-%COMP%] foreignObject.selectable>div{overflow:visible!important}[_nghost-%COMP%] .interactive-edge{stroke:var(--builder-accent-color)!important;stroke-width:2!important}[_nghost-%COMP%] .default-handle{stroke:var(--builder-accent-color)!important;stroke-width:1!important;fill:var(--builder-canvas-handle-fill)!important}[_nghost-%COMP%] .reconnect-handle{stroke:var(--builder-accent-color)!important;stroke-width:2!important;fill:var(--builder-canvas-reconnect-handle-fill)!important}[_nghost-%COMP%] .workflow-group-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--builder-canvas-workflow-chip-border);border-radius:16px;color:var(--builder-accent-color);font-family:Google Sans,sans-serif;font-size:12px;font-weight:500;height:32px;box-sizing:border-box;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-icon{font-size:16px;width:16px;height:16px;line-height:16px}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-label{color:var(--builder-text-primary-color);font-weight:500;font-size:12px;line-height:1}[_nghost-%COMP%] .empty-group-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;border-radius:8px;text-align:center;border:2px dashed var(--builder-canvas-empty-group-border);transition:all .3s ease}[_nghost-%COMP%] .empty-group-placeholder:hover{border-color:var(--builder-canvas-empty-group-hover-border)}[_nghost-%COMP%] .empty-group-placeholder button{border:2px solid var(--builder-accent-color);color:var(--builder-accent-color);width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease}[_nghost-%COMP%] .empty-group-placeholder button:hover{transform:scale(1.1);box-shadow:var(--builder-canvas-add-btn-shadow)}[_nghost-%COMP%] .empty-group-placeholder button mat-icon{font-size:24px;width:24px;height:24px}[_nghost-%COMP%] .empty-group-placeholder .empty-group-label{font-size:13px;font-weight:500;color:var(--builder-text-secondary-color);font-family:Google Sans,sans-serif}']})};function N9A(t,e){t&1&&Kn(0,"div",2)}var F9A=new kA("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var CQ=(()=>{class t{_elementRef=w(ce);_ngZone=w(qe);_changeDetectorRef=w(wt);_renderer=w(Pi);_cleanupTransitionEnd;constructor(){let A=XQ(),i=w(F9A,{optional:!0});this._isNoopAnimation=A==="di-disabled",A==="reduced-motion"&&this._elementRef.nativeElement.classList.add("mat-progress-bar-reduced-motion"),i&&(i.color&&(this.color=this._defaultColor=i.color),this.mode=i.mode||this.mode)}_isNoopAnimation;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";get value(){return this._value}set value(A){this._value=vtA(A||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(A){this._bufferValue=vtA(A||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new LA;get mode(){return this._mode}set mode(A){this._mode=A,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=A=>{this.animationEnd.observers.length===0||!A.target||!A.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(i,n){i&2&&(te("aria-valuenow",n._isIndeterminate()?null:n.value)("mode",n.mode),ro("mat-"+n.color),RA("_mat-animation-noopable",n._isNoopAnimation)("mdc-linear-progress--animation-ready",!n._isNoopAnimation)("mdc-linear-progress--indeterminate",n._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",Cn],bufferValue:[2,"bufferValue","bufferValue",Cn],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(i,n){i&1&&(wn(0,"div",0),Kn(1,"div",1),O(2,N9A,1,0,"div",2),Gn(),wn(3,"div",3),Kn(4,"span",4),Gn(),wn(5,"div",5),Kn(6,"span",4),Gn()),i&2&&(u(),ut("flex-basis",n._getBufferBarFlexBasis()),u(),Y(n.mode==="buffer"?2:-1),u(),ut("transform",n._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar{--mat-progress-bar-animation-multiplier: 1;display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mat-progress-bar-reduced-motion{--mat-progress-bar-animation-multiplier: 2}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mat-progress-bar-track-height, 4px),var(--mat-progress-bar-active-indicator-height, 4px))}@media(forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mat-progress-bar-track-height, 4px);border-radius:var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none))}.mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle, var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2), transparent 0);background-repeat:repeat-x;background-size:calc(calc(var(--mat-progress-bar-track-height, 4px) / 2)*5);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}} +`],encapsulation:2,changeDetection:0})}return t})();function vtA(t,e=0,A=100){return Math.max(e,Math.min(A,t))}var IQ=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[fi]})}return t})();var L9A=["switch"],G9A=["*"];function K9A(t,e){t&1&&(B(0,"span",11),Ct(),B(1,"svg",13),QA(2,"path",14),Q(),B(3,"svg",15),QA(4,"path",16),Q()())}var U9A=new kA("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1,hideIcon:!1,disabledInteractive:!1})}),Ry=class{source;checked;constructor(e,A){this.source=e,this.checked=A}},T9A=(()=>{class t{_elementRef=w(ce);_focusMonitor=w($a);_changeDetectorRef=w(wt);defaults=w(U9A);_onChange=A=>{};_onTouched=()=>{};_validatorOnChange=()=>{};_uniqueId;_checked=!1;_createChangeEvent(A){return new Ry(this,A)}_labelId;get buttonId(){return`${this.id||this._uniqueId}-button`}_switchElement;focus(){this._switchElement.nativeElement.focus()}_noopAnimations=An();_focused=!1;name=null;id;labelPosition="after";ariaLabel=null;ariaLabelledby=null;ariaDescribedby;required=!1;color;disabled=!1;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(A){this._checked=A,this._changeDetectorRef.markForCheck()}hideIcon;disabledInteractive;change=new LA;toggleChange=new LA;get inputId(){return`${this.id||this._uniqueId}-input`}constructor(){w(eo).load(lr);let A=w(new Us("tabindex"),{optional:!0}),i=this.defaults;this.tabIndex=A==null?0:parseInt(A)||0,this.color=i.color||"accent",this.id=this._uniqueId=w(In).getId("mat-mdc-slide-toggle-"),this.hideIcon=i.hideIcon??!1,this.disabledInteractive=i.disabledInteractive??!1,this._labelId=this._uniqueId+"-label"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{A==="keyboard"||A==="program"?(this._focused=!0,this._changeDetectorRef.markForCheck()):A||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnChanges(A){A.required&&this._validatorOnChange()}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(A){this.checked=!!A}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorOnChange=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}_handleClick(){this.disabled||(this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new Ry(this,this.checked))))}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-slide-toggle"]],viewQuery:function(i,n){if(i&1&&Jt(L9A,5),i&2){let o;ae(o=re())&&(n._switchElement=o.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:13,hostBindings:function(i,n){i&2&&(ha("id",n.id),te("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),ro(n.color?"mat-"+n.color:""),RA("mat-mdc-slide-toggle-focused",n._focused)("mat-mdc-slide-toggle-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],required:[2,"required","required",Be],color:"color",disabled:[2,"disabled","disabled",Be],disableRipple:[2,"disableRipple","disableRipple",Be],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:Cn(A)],checked:[2,"checked","checked",Be],hideIcon:[2,"hideIcon","hideIcon",Be],disabledInteractive:[2,"disabledInteractive","disabledInteractive",Be]},outputs:{change:"change",toggleChange:"toggleChange"},exportAs:["matSlideToggle"],features:[Bt([{provide:as,useExisting:Ja(()=>t),multi:!0},{provide:Oc,useExisting:t,multi:!0}]),Yt],ngContentSelectors:G9A,decls:14,vars:27,consts:[["switch",""],["mat-internal-form-field","",3,"labelPosition"],["role","switch","type","button",1,"mdc-switch",3,"click","tabIndex","disabled"],[1,"mat-mdc-slide-toggle-touch-target"],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],[1,"mdc-label",3,"click","for"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"]],template:function(i,n){if(i&1&&(Rt(),B(0,"div",1)(1,"button",2,0),U("click",function(){return n._handleClick()}),QA(3,"div",3)(4,"span",4),B(5,"span",5)(6,"span",6)(7,"span",7),QA(8,"span",8),Q(),B(9,"span",9),QA(10,"span",10),Q(),O(11,K9A,5,0,"span",11),Q()()(),B(12,"label",12),U("click",function(a){return a.stopPropagation()}),Ve(13),Q()()),i&2){let o=Qi(2);H("labelPosition",n.labelPosition),u(),RA("mdc-switch--selected",n.checked)("mdc-switch--unselected",!n.checked)("mdc-switch--checked",n.checked)("mdc-switch--disabled",n.disabled)("mat-mdc-slide-toggle-disabled-interactive",n.disabledInteractive),H("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex)("disabled",n.disabled&&!n.disabledInteractive),te("id",n.buttonId)("name",n.name)("aria-label",n.ariaLabel)("aria-labelledby",n._getAriaLabelledBy())("aria-describedby",n.ariaDescribedby)("aria-required",n.required||null)("aria-checked",n.checked)("aria-disabled",n.disabled&&n.disabledInteractive?"true":null),u(9),H("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),u(),Y(n.hideIcon?-1:11),u(),H("for",n.buttonId),te("id",n._labelId)}},dependencies:[rs,W6],styles:[`.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative;width:var(--mat-slide-toggle-track-width, 52px)}.mdc-switch.mdc-switch--disabled{cursor:default;pointer-events:none}.mdc-switch.mat-mdc-slide-toggle-disabled-interactive{pointer-events:auto}.mdc-switch__track{overflow:hidden;position:relative;width:100%;height:var(--mat-slide-toggle-track-height, 32px);border-radius:var(--mat-slide-toggle-track-shape, var(--mat-sys-corner-full))}.mdc-switch--disabled.mdc-switch .mdc-switch__track{opacity:var(--mat-slide-toggle-disabled-track-opacity, 0.12)}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%;border-width:var(--mat-slide-toggle-track-outline-width, 2px);border-color:var(--mat-slide-toggle-track-outline-color, var(--mat-sys-outline))}.mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track::after{border-width:var(--mat-slide-toggle-selected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-selected-track-outline-color, transparent)}.mdc-switch--disabled .mdc-switch__track::before,.mdc-switch--disabled .mdc-switch__track::after{border-width:var(--mat-slide-toggle-disabled-unselected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-disabled-unselected-track-outline-color, var(--mat-sys-on-surface))}@media(forced-colors: active){.mdc-switch__track{border-color:currentColor}}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0);background:var(--mat-slide-toggle-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-hover-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-focus-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-pressed-track-color, var(--mat-sys-surface-variant))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before,.mdc-switch.mdc-switch--disabled .mdc-switch__track::before{background:var(--mat-slide-toggle-disabled-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch__track::after{transform:translateX(-100%);background:var(--mat-slide-toggle-selected-track-color, var(--mat-sys-primary))}[dir=rtl] .mdc-switch__track::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::after{transform:translateX(0)}.mdc-switch--selected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-hover-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-focus-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-pressed-track-color, var(--mat-sys-primary))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after,.mdc-switch.mdc-switch--disabled .mdc-switch__track::after{background:var(--mat-slide-toggle-disabled-selected-track-color, var(--mat-sys-on-surface))}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0);width:calc(100% - var(--mat-slide-toggle-handle-width))}[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto;transition:width 75ms cubic-bezier(0.4, 0, 0.2, 1),height 75ms cubic-bezier(0.4, 0, 0.2, 1),margin 75ms cubic-bezier(0.4, 0, 0.2, 1);width:var(--mat-slide-toggle-handle-width);height:var(--mat-slide-toggle-handle-height);border-radius:var(--mat-slide-toggle-handle-shape, var(--mat-sys-corner-full))}[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle{width:var(--mat-slide-toggle-unselected-handle-size, 16px);height:var(--mat-slide-toggle-unselected-handle-size, 16px);margin:var(--mat-slide-toggle-unselected-handle-horizontal-margin, 0 8px)}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin, 0 4px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle{width:var(--mat-slide-toggle-selected-handle-size, 24px);height:var(--mat-slide-toggle-selected-handle-size, 24px);margin:var(--mat-slide-toggle-selected-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-selected-with-icon-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons){width:var(--mat-slide-toggle-with-icon-handle-size, 24px);height:var(--mat-slide-toggle-with-icon-handle-size, 24px)}.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle{width:var(--mat-slide-toggle-pressed-handle-size, 28px);height:var(--mat-slide-toggle-pressed-handle-size, 28px)}.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-selected-pressed-handle-horizontal-margin, 0 22px)}.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-unselected-pressed-handle-horizontal-margin, 0 2px)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-selected-handle-opacity, 1)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-unselected-handle-opacity, 0.38)}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}@media(forced-colors: active){.mdc-switch__handle::before,.mdc-switch__handle::after{border-color:currentColor}}.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-handle-color, var(--mat-sys-on-primary))}.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-hover-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-focus-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-pressed-handle-color, var(--mat-sys-primary-container))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after,.mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-selected-handle-color, var(--mat-sys-surface))}.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-handle-color, var(--mat-sys-outline))}.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-hover-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-focus-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-pressed-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-unselected-handle-color, var(--mat-sys-on-surface))}.mdc-switch__handle::before{background:var(--mat-slide-toggle-handle-surface-color)}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-handle-elevation-shadow)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow,.mdc-switch.mdc-switch--disabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-disabled-handle-elevation-shadow)}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1;width:var(--mat-slide-toggle-state-layer-size, 40px);height:var(--mat-slide-toggle-state-layer-size, 40px)}.mdc-switch__ripple::after{content:"";opacity:0}.mdc-switch--disabled .mdc-switch__ripple::after{display:none}.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after{display:block}.mdc-switch:hover .mdc-switch__ripple::after{transition:75ms opacity cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after,.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-pressed-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-hover-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-focus-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-pressed-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch__icons{position:relative;height:100%;width:100%;z-index:1;transform:translateZ(0)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-unselected-icon-opacity, 0.38)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-selected-icon-opacity, 0.38)}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--unselected .mdc-switch__icon{width:var(--mat-slide-toggle-unselected-icon-size, 16px);height:var(--mat-slide-toggle-unselected-icon-size, 16px);fill:var(--mat-slide-toggle-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__icon{width:var(--mat-slide-toggle-selected-icon-size, 16px);height:var(--mat-slide-toggle-selected-icon-size, 16px);fill:var(--mat-slide-toggle-selected-icon-color, var(--mat-sys-on-primary-container))}.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-selected-icon-color, var(--mat-sys-on-surface))}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{-webkit-user-select:none;user-select:none;display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-focus-indicator::before{content:""}.mat-mdc-slide-toggle .mat-internal-form-field{color:var(--mat-slide-toggle-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-slide-toggle-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-slide-toggle-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-slide-toggle-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-slide-toggle-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-slide-toggle-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}.mat-mdc-slide-toggle .mdc-switch:enabled+.mdc-label{cursor:pointer}.mat-mdc-slide-toggle .mdc-switch--disabled+label{color:var(--mat-slide-toggle-disabled-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-slide-toggle label:empty{display:none}.mat-mdc-slide-toggle-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-slide-toggle-touch-target-size, 48px);width:100%;transform:translate(-50%, -50%);display:var(--mat-slide-toggle-touch-target-display, block)}[dir=rtl] .mat-mdc-slide-toggle-touch-target{left:auto;right:50%;transform:translate(50%, -50%)} +`],encapsulation:2,changeDetection:0})}return t})(),MtA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[T9A,fi]})}return t})();var J9A={cancelEditingTooltip:"Cancel editing",saveEvalMessageTooltip:"Save eval case message",thoughtChipLabel:"Thought",outcomeLabel:"Outcome",outputLabel:"Output",actualToolUsesLabel:"Actual tool uses:",expectedToolUsesLabel:"Expected tool uses:",actualResponseLabel:"Actual response:",expectedResponseLabel:"Expected response:",matchScoreLabel:"Match score",thresholdLabel:"Threshold",evalPassLabel:"PASS",evalFailLabel:"FAIL",editEvalMessageTooltip:"Edit eval case message",deleteEvalMessageTooltip:"Delete eval case message",editFunctionArgsTooltip:"Edit function arguments",typeMessagePlaceholder:"Type a message...",sendMessageTooltip:"Send message",uploadFileTooltip:"Upload local file",moreOptionsTooltip:"More options",updateStateMenuLabel:"Update state",updateStateMenuTooltip:"Update the session state",turnOffMicTooltip:"Hang up",useMicTooltip:"Call",turnOffCamTooltip:"Turn off camera",useCamTooltip:"Use camera",updatedSessionStateChipLabel:"Updated session state",proactiveAudioTooltip:"Enable the model to speak spontaneously without waiting for user input",affectiveDialogTooltip:"Enable the model to respond with emotional expression",sessionResumptionTooltip:"Allow the session to resume from a previous state",saveLiveBlobTooltip:"Save the recorded live stream data"},UI=new kA("Chat Panel Messages",{factory:()=>J9A});function O9A(t,e){if(t&1&&(B(0,"div",1),y(1),Q()),t&2){let A=p();u(),lA(A.title)}}var Ny=class t{title="";set json(e){if(typeof e=="string")try{this.parsedJson=JSON.parse(e)}catch(A){this.parsedJson=e}else this.parsedJson=e}parsedJson={};static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-json-tooltip"]],inputs:{title:"title",json:"json"},decls:4,vars:3,consts:[[1,"tooltip-shell"],[1,"tooltip-title"],[1,"tooltip-content"],[3,"json","expanded"]],template:function(A,i){A&1&&(B(0,"div",0),O(1,O9A,2,1,"div",1),B(2,"div",2),QA(3,"ngx-json-viewer",3),Q()()),A&2&&(u(),Y(i.title?1:-1),u(2),H("json",i.parsedJson)("expanded",!0))},dependencies:[cs,$l],styles:["[_nghost-%COMP%]{display:block;font-size:12px;line-height:1.4;word-break:break-word;overflow:hidden}.tooltip-shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:800px;max-height:80vh;overflow:hidden}.tooltip-content[_ngcontent-%COMP%]{min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.tooltip-title[_ngcontent-%COMP%]{font-weight:600;font-size:9px;color:var(--mat-sys-primary);opacity:.5;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;background:inherit;z-index:1}ngx-json-viewer[_ngcontent-%COMP%]{display:block;height:auto!important;min-width:0}"]})};var TI=class t{json="";title="";overlayRef=null;overlay=w(v1);elementRef=w(ce);show(){if(!this.json)return;let e=this.overlay.position().flexibleConnectedTo(this.elementRef).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8},{originX:"center",originY:"bottom",overlayX:"center",overlayY:"top",offsetY:8},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",offsetY:-8},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",offsetY:-8}]).withViewportMargin(16).withPush(!1);this.overlayRef=this.overlay.create({positionStrategy:e,scrollStrategy:this.overlay.scrollStrategies.close(),panelClass:"json-tooltip-panel",maxWidth:"90vw"});let A=new Ss(Ny),i=this.overlayRef.attach(A);i.instance.json=this.json,i.instance.title=this.title,i.changeDetectorRef.detectChanges(),this.overlayRef.updatePosition()}hide(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}ngOnDestroy(){this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=VA({type:t,selectors:[["","appJsonTooltip",""]],hostBindings:function(A,i){A&1&&U("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{json:[0,"appJsonTooltip","json"],title:[0,"appJsonTooltipTitle","title"]}})},Fy=class t{tooltipTemplate;context={};disabled=!1;overlayRef=null;overlay=w(v1);elementRef=w(ce);viewContainerRef=w(Mo);show(){if(this.disabled||!this.tooltipTemplate)return;let e=this.overlay.position().flexibleConnectedTo(this.elementRef).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8},{originX:"center",originY:"bottom",overlayX:"center",overlayY:"top",offsetY:8},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",offsetY:-8},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",offsetY:-8}]).withViewportMargin(16).withPush(!1);this.overlayRef=this.overlay.create({positionStrategy:e,scrollStrategy:this.overlay.scrollStrategies.close(),panelClass:"html-tooltip-panel",maxWidth:"90vw"});let A=new Jr(this.tooltipTemplate,this.viewContainerRef,this.context);this.overlayRef.attach(A)}hide(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}ngOnDestroy(){this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=VA({type:t,selectors:[["","appHtmlTooltip",""]],hostBindings:function(A,i){A&1&&U("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{tooltipTemplate:[0,"appHtmlTooltip","tooltipTemplate"],context:[0,"appHtmlTooltipContext","context"],disabled:[0,"appHtmlTooltipDisabled","disabled"]}})};function Y9A(t,e){if(t&1&&(B(0,"div",3)(1,"mat-icon",4),y(2,"robot_2"),Q()()),t&2){let A=p();ut("background-color",A.color),RA("hidden",!A.author),H("appJsonTooltip",A.tooltip)}}function H9A(t,e){if(t&1&&(B(0,"div",5),y(1),Q()),t&2){let A=p();ut("background-color",A.color),RA("hidden",!A.author),H("appJsonTooltip",A.tooltip),u(),ue(" ",A.initial," ")}}function z9A(t,e){t&1&&(B(0,"div",2)(1,"mat-icon"),y(2,"person"),Q()())}var Ly=class t{role="user";author="";nodePath="";themeService=w(eg);stringToColorService=w(Q2);get tooltip(){if(this.role==="user")return"";let e={author:this.author,nodePath:this.nodePath||""};return JSON.stringify(e,null,2)}get color(){let e=this.getNodeName(this.nodePath||""),A=this.themeService.currentTheme();return this.stringToColorService.stc(e,A)}get initial(){let A=this.getNodeName(this.nodePath||"").match(/[A-Za-z0-9]/);return A?A[0].toUpperCase():"N"}getNodeName(e){return e.split(/[/.>]/).filter(Boolean).pop()||e}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-chat-avatar"]],inputs:{role:"role",author:"author",nodePath:"nodePath"},decls:3,vars:1,consts:[[1,"bot-avatar",3,"appJsonTooltip","hidden","background-color"],[1,"node-circle-icon",3,"background-color","appJsonTooltip","hidden"],[1,"user-avatar"],[1,"bot-avatar",3,"appJsonTooltip"],["fontSet","material-symbols-outlined"],[1,"node-circle-icon",3,"appJsonTooltip"]],template:function(A,i){A&1&&O(0,Y9A,3,5,"div",0)(1,H9A,2,6,"div",1)(2,z9A,3,0,"div",2),A&2&&Y(i.role==="bot"?0:i.role==="node"?1:i.role==="user"?2:-1)},dependencies:[si,Tn,Wt,qi,TI],styles:["[_nghost-%COMP%]{display:contents}.node-circle-icon[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:50%;margin-left:4px;margin-right:16px;margin-top:2px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;color:#fff;font-size:14px;font-weight:600;line-height:1;text-transform:uppercase}.bot-avatar[_ngcontent-%COMP%], .user-avatar[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.bot-avatar[_ngcontent-%COMP%]{margin-right:12px;color:#fff}.user-avatar[_ngcontent-%COMP%]{background-color:var(--mat-sys-primary);color:var(--mat-sys-on-primary)}.hidden[_ngcontent-%COMP%]{visibility:hidden}"]})};var Gy=new kA("FeedbackService");var P9A={goodResponseTooltip:"Good response",badResponseTooltip:"Bad response",feedbackAdditionalLabel:"Additional feedback (Optional)",feedbackCommentPlaceholderDown:"Share what could be improved in the response",feedbackCommentPlaceholderUp:"Share what you liked about the response",feedbackCancelButton:"Cancel",feedbackSubmitButton:"Submit",feedbackDialogTitle:"Reasons for feedback (Select all that apply)",feedbackReasonHallucination:"Hallucinated libraries / APIs etc",feedbackReasonIncomplete:"Incomplete answer",feedbackReasonFollowup:"Didn't understand followup",feedbackReasonFactual:"Factual errors",feedbackReasonLinks:"Broken/incorrect links",feedbackReasonIrrelevant:"Irrelevant information",feedbackReasonRepetitive:"Repetitive",feedbackReasonAccurate:"Accurate info",feedbackReasonHelpful:"Helpful",feedbackReasonConcise:"Concise",feedbackReasonUnderstanding:"Good understanding",feedbackReasonClear:"Clear and easy to follow"},StA=new kA("Message Feedback Messages",{factory:()=>P9A});function j9A(t,e){t&1&&(B(0,"mat-icon"),y(1,"thumb_up_filled"),Q())}function q9A(t,e){t&1&&(B(0,"mat-icon"),y(1,"thumb_up"),Q())}function V9A(t,e){t&1&&(B(0,"mat-icon"),y(1,"thumb_down_filled"),Q())}function W9A(t,e){t&1&&(B(0,"mat-icon"),y(1,"thumb_down"),Q())}function Z9A(t,e){if(t&1&&(B(0,"mat-chip-option",7),y(1),Q()),t&2){let A=e.$implicit;H("value",A),u(),ue(" ",A," ")}}function X9A(t,e){if(t&1){let A=hA();B(0,"div",4)(1,"div",5)(2,"h3"),y(3),Q(),B(4,"mat-chip-listbox",6),Je(5,Z9A,2,2,"mat-chip-option",7,hi),Q()(),B(7,"div",8)(8,"h3"),y(9),Q(),B(10,"mat-form-field",9)(11,"textarea",10),y(12," "),Q()()(),B(13,"div",11)(14,"button",12),U("click",function(){T(A);let n=p();return J(n.onDetailedFeedbackCancelled())}),y(15),Q(),B(16,"button",13),U("click",function(){T(A);let n=p();return J(n.onDetailedFeedbackSubmitted())}),y(17),Q()()()}if(t&2){let A=p();u(3),lA(A.i18n.feedbackDialogTitle),u(),H("formControl",A.selectedReasons),u(),Oe(A.reasons()),u(4),lA(A.i18n.feedbackAdditionalLabel),u(2),H("formControl",A.comment)("placeholder",A.feedbackPlaceholder()),u(4),ue(" ",A.i18n.feedbackCancelButton," "),u(2),ue(" ",A.i18n.feedbackSubmitButton," ")}}var Ky=class t{sessionName=me.required();eventId=me.required();i18n=w(StA);feedbackService=w(Gy);existingFeedback=$p({params:()=>({sessionName:this.sessionName(),eventId:this.eventId()}),stream:({params:e})=>this.feedbackService.getFeedback(e.sessionName,e.eventId)});selectedFeedbackDirection=bA(void 0);feedbackDirection=pe(()=>this.selectedFeedbackDirection()??this.existingFeedback.value()?.direction);isDetailedFeedbackVisible=bA(!1);feedbackPlaceholder=pe(()=>this.feedbackDirection()==="up"?this.i18n.feedbackCommentPlaceholderUp:this.i18n.feedbackCommentPlaceholderDown);positiveReasonsResource=$p({stream:()=>this.feedbackService.getPositiveFeedbackReasons()});negativeReasonsResource=$p({stream:()=>this.feedbackService.getNegativeFeedbackReasons()});reasons=pe(()=>this.feedbackDirection()==="up"?this.positiveReasonsResource.value():this.negativeReasonsResource.value());selectedReasons=new Os([]);comment=new Os("");isLoading=bA(!1);sendFeedback(e){this.feedbackDirection()===e?(this.isLoading.set(!0),this.feedbackService.deleteFeedback(this.sessionName(),this.eventId()).subscribe(()=>{this.isLoading.set(!1),this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()})):(this.selectedReasons.reset(),this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e}).subscribe(()=>{this.isLoading.set(!1),this.isDetailedFeedbackVisible.set(!0),this.selectedFeedbackDirection.set(e)}))}onDetailedFeedbackSubmitted(){let e=this.feedbackDirection();e&&(this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e,reasons:this.selectedReasons.value??[],comment:this.comment.value??void 0}).subscribe(()=>{this.isLoading.set(!1),this.resetDetailedFeedback()}))}onDetailedFeedbackCancelled(){this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()}resetDetailedFeedback(){this.isDetailedFeedbackVisible.set(!1),this.comment.reset(),this.selectedReasons.reset([])}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-message-feedback"]],inputs:{sessionName:[1,"sessionName"],eventId:[1,"eventId"]},decls:9,vars:7,consts:[[1,"message-feedback-container"],[1,"feedback-buttons"],["mat-icon-button","",3,"click","matTooltip","disabled"],["class","feedback-details-container",4,"ngIf"],[1,"feedback-details-container"],[1,"reasons-chips"],["multiple","",3,"formControl"],[3,"value"],[1,"additional-feedback"],["appearance","outline"],["matInput","",3,"formControl","placeholder"],[1,"actions"],["mat-stroked-button","",3,"click"],["mat-flat-button","","color","primary",3,"click"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"div",1)(2,"button",2),U("click",function(){return i.sendFeedback("up")}),O(3,j9A,2,0,"mat-icon")(4,q9A,2,0,"mat-icon"),Q(),B(5,"button",2),U("click",function(){return i.sendFeedback("down")}),O(6,V9A,2,0,"mat-icon")(7,W9A,2,0,"mat-icon"),Q()(),Et(8,X9A,18,7,"div",3),Q()),A&2&&(u(2),H("matTooltip",i.i18n.goodResponseTooltip)("disabled",i.isLoading()),u(),Y(i.feedbackDirection()==="up"?3:4),u(2),H("matTooltip",i.i18n.badResponseTooltip)("disabled",i.isLoading()),u(),Y(i.feedbackDirection()==="down"?6:7),u(2),H("ngIf",i.isDetailedFeedbackVisible()))},dependencies:[si,Js,n2,Dn,yn,XI,qi,pi,ji,UD,aN,nN,Ya,Ko,Tn,Wt,Ps,ua,Fa,dn],styles:[".message-feedback-container[_ngcontent-%COMP%]{display:block}.feedback-buttons[_ngcontent-%COMP%]{--mat-icon-button-touch-target-size: 32px;--button-size: 32px;--icon-size: 12px;margin-left:96px;display:flex}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:var(--button-size);height:var(--button-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:var(--icon-size);height:var(--icon-size);width:var(--icon-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%]{color:var(--side-panel-button-filled-label-text-color, white)}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.reasons-chips[_ngcontent-%COMP%]{margin-bottom:20px}.feedback-details-container[_ngcontent-%COMP%]{margin-left:54px;max-width:500px;padding:16px;border-radius:8px;margin-top:8px;border:1px solid var(--builder-border-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-weight:500;margin-bottom:8px;margin-top:0;color:var(--builder-text-secondary-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:60px;resize:vertical}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:18px;padding:0 16px;height:32px;line-height:32px;font-weight:500}"]})};function dQ(t){if(!t)return!1;if(t.name==="computer"){let i=t.args?.action,n=t.args?.coordinate;return["left_click","right_click","middle_click","double_click"].includes(i)&&Array.isArray(n)&&n.length===2}let e=["click_at","hover_at","type_text_at","scroll_at","drag_and_drop","mouse_move","scroll_document","wait_5_seconds","navigate","open_web_browser"].includes(t.name),A=t.args?.x!=null&&t.args?.y!=null||Array.isArray(t.args?.coordinate)&&t.args?.coordinate.length===2;return e}function F0(t){return t?!!t.response?.image?.data:!1}var YN=(a=>(a[a.INACTIVE=0]="INACTIVE",a[a.PENDING=1]="PENDING",a[a.RUNNING=2]="RUNNING",a[a.COMPLETED=3]="COMPLETED",a[a.INTERRUPTED=4]="INTERRUPTED",a[a.FAILED=5]="FAILED",a))(YN||{});var $9A=()=>({type:"dots",color:"#424242",size:1,gap:10});function ASA(t,e){t&1&&(B(0,"span",2),y(1,"(Pinned - Click X to close)"),Q())}function eSA(t,e){t&1&&(B(0,"span",2),y(1,"(Click to pin)"),Q())}function tSA(t,e){t&1&&(B(0,"mat-icon",10),y(1,"chevron_right"),Q())}function iSA(t,e){if(t&1){let A=hA();B(0,"span",9),U("click",function(){let n=T(A).$index,o=p(2);return J(o.navigateToLevel(n))}),y(1),Q(),O(2,tSA,2,0,"mat-icon",10)}if(t&2){let A=e.$implicit,i=e.$index,n=p(2);RA("active",i===n.breadcrumbs().length-1),u(),ue(" ",A," "),u(),Y(i0?17:-1)}}function sSA(t,e){if(t&1&&(Ct(),B(0,"g",24),QA(1,"path",25),Q()),t&2){let A=e.$implicit;u(),te("d",A.path())("stroke",A.edge.data!=null&&A.edge.data.isActive?"#42A5F5":"rgba(138, 180, 248, 0.8)")("stroke-width",A.edge.data!=null&&A.edge.data.isActive?"3":"2")("class",A.edge.data!=null&&A.edge.data.isActive?"active-edge":"")("marker-end",A.markerEnd())}}var Uy=class t{nodes=null;agentGraphData=null;nodePath=null;allNodes=null;isPinned=!1;onClose;graphNodes=bA([]);graphEdges=bA([]);NodeStatus=YN;connection={mode:"loose"};fullAgentData=null;navigationStack=[];breadcrumbs=bA([]);close(){this.onClose&&this.onClose()}ngOnInit(){this.buildGraph()}buildGraph(){if(this.agentGraphData?.root_agent){this.fullAgentData=this.agentGraphData.root_agent,this.navigationStack=[{name:this.agentGraphData.root_agent.name,data:this.agentGraphData.root_agent}],this.nodePath&&this.navigateToNodePath(this.nodePath),this.updateBreadcrumbs();let e=this.navigationStack[this.navigationStack.length-1].data;this.buildGraphFromStructure(e)}else this.buildGraphFromStateOnly()}buildGraphFromStructure(e){let A=[],i=[];if(e.nodes&&Array.isArray(e.nodes))this.buildMeshGraph(e.nodes,A,i);else if(e.graph&&e.graph.nodes){let n=VJ(e.graph.nodes,e.graph.edges||[],q6);e.graph.nodes.forEach((o,a)=>{let r=ec(o,`node_${a}`),s=this.nodes?this.nodes[r]:null,l=o.type||"agent",g=n.positions.get(r)||{x:q6.startX,y:q6.startY},C=oC(o),I=this.getNodeStatusAtLevel(r,o);A.push({id:r,type:"html-template",point:bA({x:g.x,y:g.y}),width:bA(180),height:bA(80),data:bA({name:r,type:l,status:I,input:s?.input,triggeredBy:s?.triggered_by,retryCount:s?.retry_count,runId:s?.run_id,hasNestedStructure:C,nodeData:o})})}),e.graph.edges&&e.graph.edges.forEach((o,a)=>{let r=ec(o.from_node),s=ec(o.to_node);if(r&&s){let l=this.getNodeStatusAtLevel(r,o.from_node),g=this.getNodeStatusAtLevel(s,o.to_node),C=l===2||l===3&&(g===2||g===1);i.push({id:`${r}_to_${s}_${a}`,source:r,target:s,type:"template",floating:!0,data:{isActive:C},markers:{end:{type:"arrow-closed",width:15,height:15,color:C?"#42A5F5":"rgba(138, 180, 248, 0.8)"}}})}})}this.graphNodes.set(A),this.graphEdges.set(i)}buildMeshGraph(e,A,i){let n=e.findIndex(I=>I.name===e[0]?.name||I.type==="coordinator"),o=n>=0?e[n]:null,a=e.filter((I,d)=>d!==n),r=100,s=200,l=300,C=400-(a.length-1)*l/2;if(o){let I=oC(o),d=ec(o),h=this.getNodeStatusAtLevel(d,o);A.push({id:d,type:"html-template",point:bA({x:400,y:r}),width:bA(180),height:bA(80),data:bA({name:d,type:"agent",status:h,hasNestedStructure:I,nodeData:o})})}a.forEach((I,d)=>{let h=C+d*l,E=r+s,f=oC(I),m=ec(I),v=this.getNodeStatusAtLevel(m,I);if(A.push({id:m,type:"html-template",point:bA({x:h,y:E}),width:bA(180),height:bA(80),data:bA({name:m,type:"agent",status:v,hasNestedStructure:f,nodeData:I})}),o){let k=ec(o),S=this.getNodeStatusAtLevel(k,o),b=S===2||S===3&&(v===2||v===1);i.push({id:`${k}_to_${m}`,source:k,target:m,type:"template",floating:!0,data:{isActive:b},markers:{end:{type:"arrow-closed",width:15,height:15,color:b?"#42A5F5":"rgba(138, 180, 248, 0.8)"}}})}})}buildGraphFromStateOnly(){let e=[],A=[];if(!this.nodes){this.graphNodes.set(e),this.graphEdges.set(A);return}let a=Object.keys(this.nodes);a.forEach((r,s)=>{let l=this.nodes[r];e.push({id:r,type:"html-template",point:bA({x:200,y:50+s*120}),width:bA(180),height:bA(80),data:bA({name:r,type:r==="__START__"?"start":"agent",status:l.status,input:l.input,triggeredBy:l.triggered_by,retryCount:l.retry_count,runId:l.run_id})})}),a.forEach(r=>{let s=this.nodes[r];if(s.triggered_by&&a.includes(s.triggered_by)){let g=this.nodes[s.triggered_by]?.status===2;A.push({id:`${s.triggered_by}_to_${r}`,source:s.triggered_by,target:r,type:"template",floating:!0,data:{isActive:g},markers:{end:{type:"arrow-closed",width:15,height:15,color:g?"#42A5F5":"rgba(138, 180, 248, 0.8)"}}})}}),this.graphNodes.set(e),this.graphEdges.set(A)}getStatusColor(e){switch(e){case 0:return"#757575";case 1:return"#FFA726";case 2:return"#42A5F5";case 3:return"#66BB6A";case 4:return"#FFCA28";case 5:return"#EF5350";default:return"#757575"}}getStatusLabel(e){switch(e){case 0:return"INACTIVE";case 1:return"PENDING";case 2:return"RUNNING";case 3:return"COMPLETED";case 4:return"INTERRUPTED";case 5:return"FAILED";default:return"UNKNOWN"}}getStatusIcon(e){switch(e){case 0:return"radio_button_unchecked";case 1:return"schedule";case 2:return"play_circle";case 3:return"check_circle";case 4:return"pause_circle";case 5:return"error";default:return"help"}}updateBreadcrumbs(){this.breadcrumbs.set(this.navigationStack.map(e=>e.name))}navigateIntoNode(e){let A=this.navigationStack[this.navigationStack.length-1].data,i=oE(A,e);i&&oC(i)&&(this.navigationStack.push({name:e,data:i}),this.updateBreadcrumbs(),this.buildGraphFromStructure(i))}navigateToLevel(e){if(e>=0&&e1?9:-1),u(2),H("nodes",i.graphNodes())("edges",i.graphEdges())("connection",i.connection)("background",Rg(8,$9A)))},dependencies:[si,Tn,Wt,qi,ji,xy,M3,_y,DtA,lQ,my],styles:[".workflow-graph-tooltip[_ngcontent-%COMP%]{width:500px;height:400px;border-radius:8px;padding:12px;display:flex;flex-direction:column;box-shadow:0 4px 16px #0006}.tooltip-header[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid rgba(255,255,255,.1);display:flex;align-items:center;gap:8px}.pinned-hint[_ngcontent-%COMP%]{font-size:12px;font-weight:400;opacity:.7;font-style:italic;flex:1}.close-button[_ngcontent-%COMP%]{width:24px;height:24px;line-height:24px;margin-left:auto}.close-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:18px}.breadcrumb-nav[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:8px;font-size:12px;color:var(--mdc-dialog-supporting-text-color)}.breadcrumb-item[_ngcontent-%COMP%]{cursor:pointer;padding:3px 6px;border-radius:3px;transition:background-color .2s}.breadcrumb-item.active[_ngcontent-%COMP%]{font-weight:500;cursor:default}.breadcrumb-separator[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;opacity:.5;margin:0 2px}.vflow-container[_ngcontent-%COMP%]{flex:1;min-height:0;border:1px solid rgba(255,255,255,.1);border-radius:4px;overflow:hidden;position:relative}.vflow-container[_ngcontent-%COMP%] vflow[_ngcontent-%COMP%]{width:100%;height:100%;display:block}.workflow-node[_ngcontent-%COMP%]{border:2px solid;border-radius:6px;padding:8px 12px;min-width:160px;box-shadow:0 2px 6px #0000004d;transition:all .2s}.workflow-node.expandable[_ngcontent-%COMP%]{cursor:pointer}.workflow-node.expandable[_ngcontent-%COMP%]:hover{box-shadow:0 4px 12px #8ab4f84d;transform:scale(1.02)}.node-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:4px}.node-type-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:#8ab4f8e6}.status-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;margin-left:auto}.node-label[_ngcontent-%COMP%]{font-weight:500;font-size:13px;color:var(--mdc-dialog-supporting-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.node-type[_ngcontent-%COMP%]{font-size:10px;color:#8ab4f8cc;font-weight:500;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.node-status[_ngcontent-%COMP%]{font-size:11px;font-weight:600;margin-top:2px}.node-retry[_ngcontent-%COMP%]{font-size:10px;color:var(--mdc-dialog-supporting-text-color);opacity:.7;margin-top:2px}[_nghost-%COMP%] .active-edge{animation:_ngcontent-%COMP%_dash 1.5s linear infinite;stroke-dasharray:8 4}@keyframes _ngcontent-%COMP%_dash{to{stroke-dashoffset:-12}}"]})};var Ty=class t{appWorkflowGraphTooltip=null;agentGraphData=null;nodePath=null;allNodes=null;overlay=w(v1);overlayPositionBuilder=w(qm);viewContainerRef=w(Mo);overlayRef=null;isPinned=!1;onClick(e){e.stopPropagation(),!(!this.appWorkflowGraphTooltip||Object.keys(this.appWorkflowGraphTooltip).length===0)&&(this.isPinned?this.hide():this.showPinned())}show(){this.isPinned||!this.appWorkflowGraphTooltip||Object.keys(this.appWorkflowGraphTooltip).length===0||this.overlayRef||this.showTooltip(!1)}hide(){this.isPinned||this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}showPinned(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null),this.isPinned=!0,this.showTooltip(!0)}showTooltip(e){if(this.overlayRef)return;let A=this.overlayPositionBuilder.flexibleConnectedTo(this.viewContainerRef.element).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8},{originX:"center",originY:"bottom",overlayX:"center",overlayY:"top",offsetY:8}]);this.overlayRef=this.overlay.create({positionStrategy:A,scrollStrategy:this.overlay.scrollStrategies.close(),hasBackdrop:e,backdropClass:e?"cdk-overlay-transparent-backdrop":void 0}),e&&this.overlayRef&&this.overlayRef.backdropClick().subscribe(()=>{this.isPinned=!1,this.hide()});let i=new Ss(Uy),n=this.overlayRef.attach(i);n.instance.nodes=this.appWorkflowGraphTooltip,n.instance.agentGraphData=this.agentGraphData,n.instance.nodePath=this.nodePath,n.instance.allNodes=this.allNodes,n.instance.isPinned=e,n.instance.onClose=()=>{this.isPinned=!1,this.hide()}}ngOnDestroy(){this.isPinned=!1,this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=VA({type:t,selectors:[["","appWorkflowGraphTooltip",""]],hostBindings:function(A,i){A&1&&U("click",function(o){return i.onClick(o)})("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{appWorkflowGraphTooltip:"appWorkflowGraphTooltip",agentGraphData:"agentGraphData",nodePath:"nodePath",allNodes:"allNodes"}})};function lSA(t,e){if(t&1){let A=hA();B(0,"div",5)(1,"img",10),U("load",function(n){T(A);let o=p(4);return J(o.onImageLoad(n))})("click",function(n){T(A),p(3);let o=zn(0);return p().openImageViewer(o),J(n.stopPropagation())}),Q(),QA(2,"div",11),Q()}if(t&2){p(3);let A=zn(0),i=p();u(),H("src",A,Go),u(),H("ngStyle",i.getClickBoxStyle())}}function gSA(t,e){t&1&&(B(0,"div",6)(1,"mat-icon",12),y(2,"image_not_supported"),Q(),B(3,"span",13),y(4,"No screenshot"),Q()())}function cSA(t,e){if(t&1){let A=hA();O(0,lSA,3,2,"div",5)(1,gSA,5,0,"div",6),B(2,"div",7)(3,"span",8),y(4),Q(),B(5,"mat-icon"),y(6,"arrow_forward"),Q()(),B(7,"div",5)(8,"img",9),U("click",function(n){T(A),p(2);let o=zn(1);return p().openImageViewer(o),J(n.stopPropagation())}),Q()()}if(t&2){p(2);let A=zn(0),i=zn(1),n=p();Y(A?0:1),u(4),lA(n.getActionName()),u(4),H("src",i,Go)}}function CSA(t,e){if(t&1){let A=hA();B(0,"div",5)(1,"img",10),U("load",function(n){T(A);let o=p(3);return J(o.onImageLoad(n))})("click",function(n){T(A),p(2);let o=zn(0);return p().openImageViewer(o),J(n.stopPropagation())}),Q(),QA(2,"div",11),Q()}if(t&2){p(2);let A=zn(0),i=p();u(),H("src",A,Go),u(),H("ngStyle",i.getClickBoxStyle())}}function ISA(t,e){if(t&1){let A=hA();B(0,"div",3),U("click",function(){T(A);let n=p(2);return J(n.clickEvent.emit(n.index))}),B(1,"div",4),O(2,cSA,9,3)(3,CSA,3,2,"div",5),Q()()}if(t&2){p();let A=zn(1);RA("dual-images",!!A),u(2),Y(A?2:3)}}function dSA(t,e){if(t&1){let A=hA();B(0,"div",14),U("click",function(){T(A);let n=p(2);return J(n.clickEvent.emit(n.index))}),B(1,"div",6)(2,"mat-icon",12),y(3,"image_not_supported"),Q(),B(4,"span",13),y(5,"No screenshot"),Q()()()}}function BSA(t,e){if(t&1&&(ta(0)(1),O(2,ISA,4,3,"div",1)(3,dSA,6,0,"div",2)),t&2){let A=p(),i=ga(A.getPreviousComputerUseScreenshot());u();let n=ga(A.getNextComputerUseScreenshot());u(),Y(i||n?2:3)}}function ESA(t,e){if(t&1){let A=hA();B(0,"div",15),U("click",function(){T(A);let n=p();return J(n.clickEvent.emit(n.index))}),B(1,"div",16)(2,"span",17),y(3),Q()(),QA(4,"img",18),B(5,"div",19)(6,"mat-icon",20),y(7,"computer"),Q(),B(8,"span",21),y(9),Q()()()}if(t&2){let A=p();u(3),lA(A.functionResponse.name),u(),H("src",A.getComputerUseScreenshot(),Go),u(5),lA(A.getComputerUseUrl())}}var Jy=class t{functionCall;functionResponse;allMessages=[];index=0;clickEvent=new LA;openImage=new LA;imageDimensions=new Map;VIRTUAL_WIDTH=1e3;VIRTUAL_HEIGHT=1e3;isComputerUseResponse(){return!!this.functionResponse&&F0(this.functionResponse)}isComputerUseClick(){return!!this.functionCall&&dQ(this.functionCall)}getComputerUseScreenshot(){return this.getScreenshotFromPayload(this.functionResponse?.response)}getComputerUseUrl(){return this.isComputerUseResponse()&&(this.functionResponse?.response).url||""}getPreviousComputerUseScreenshot(){for(let e=this.index-1;e>=0;e--){let A=this.allMessages[e];if(this.isMsgComputerUseResponse(A)&&A.functionResponses&&A.functionResponses.length>0)for(let i=A.functionResponses.length-1;i>=0;i--){let n=A.functionResponses[i];if(F0(n)){let a=n.response;return this.getScreenshotFromPayload(a)}let o=n.parts;if(Array.isArray(o))for(let a=o.length-1;a>=0;a--){let r=o[a];if(r.inlineData?.mimeType?.startsWith("image/")&&r.inlineData.data){let s=r.inlineData.mimeType,l=r.inlineData.data.replace(/-/g,"+").replace(/_/g,"/");return`data:${s};base64,${l}`}}}}return""}getNextComputerUseScreenshot(){for(let e=this.index+1;e0)for(let i=0;i0?e.functionResponses.some(A=>{if(F0(A))return!0;let i=A.parts;return Array.isArray(i)?i.some(n=>n.inlineData?.mimeType?.startsWith("image/")):!1}):!1}getScreenshotFromPayload(e){let A=e?.image;if(!A?.data)return"";let i=A.data;return i.startsWith("data:")?i:`data:${A.mimetype||"image/png"};base64,${i}`}getAllComputerUseScreenshots(){let e=[];for(let A of this.allMessages)if(this.isMsgComputerUseResponse(A)&&A.functionResponses)for(let i of A.functionResponses){if(F0(i)){let o=i.response;e.push(this.getScreenshotFromPayload(o))}let n=i.parts;if(Array.isArray(n)){for(let o of n)if(o.inlineData?.mimeType?.startsWith("image/")&&o.inlineData.data){let a=o.inlineData.mimeType,r=o.inlineData.data.replace(/-/g,"+").replace(/_/g,"/");e.push(`data:${a};base64,${r}`)}}}return e}getAllComputerUseUrls(){let e=[],A="";for(let i of this.allMessages)if(this.isMsgComputerUseResponse(i)&&i.functionResponses)for(let n of i.functionResponses){let o=n.response?.url;o&&(A=o),F0(n)&&e.push(A);let a=n.parts;if(Array.isArray(a))for(let r of a)r.inlineData?.mimeType?.startsWith("image/")&&r.inlineData.data&&e.push(A)}return e}getAllComputerUseCoordinates(){let e=[],A=null;for(let i of this.allMessages){let n=i.functionCalls;if(Array.isArray(n))for(let o of n)dQ(o)?A=o:o.name==="computer"&&(A=null);if(this.isMsgComputerUseResponse(i)&&i.functionResponses)for(let o of i.functionResponses){let a=!1;F0(o)&&(a=!0);let r=o.parts;if(Array.isArray(r))for(let s of r)s.inlineData?.mimeType?.startsWith("image/")&&s.inlineData.data&&(a=!0);a&&(A&&e.length>0&&(e[e.length-1]=this.getClickCoordinates(A)),e.push(null))}}return e}openImageViewer(e){let A=this.getAllComputerUseScreenshots(),i=this.getAllComputerUseUrls(),n=this.getAllComputerUseCoordinates(),o=A.indexOf(e);this.openImage.emit({images:A,currentIndex:o,urls:i,coordinates:n})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-computer-action"]],inputs:{functionCall:"functionCall",functionResponse:"functionResponse",allMessages:"allMessages",index:"index"},outputs:{clickEvent:"clickEvent",openImage:"openImage"},decls:2,vars:1,consts:[[1,"computer-use-container"],[1,"computer-use-container","click-visualization-container",3,"dual-images"],[1,"computer-use-container","click-visualization-container","fallback"],[1,"computer-use-container","click-visualization-container",3,"click"],[1,"images-wrapper-flex"],[1,"image-wrapper"],[1,"image-wrapper","fallback-image"],[1,"arrow-container"],[1,"action-name-above"],["alt","Next Screenshot",1,"computer-use-screenshot",3,"click","src"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"load","click","src"],[1,"click-overlay-box",3,"ngStyle"],[1,"missing-icon"],[1,"fallback-text"],[1,"computer-use-container","click-visualization-container","fallback",3,"click"],[1,"computer-use-container",3,"click"],[1,"computer-use-header"],[1,"computer-use-tool-name"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"src"],[1,"computer-use-footprint"],[1,"computer-icon"],[1,"url-text"]],template:function(A,i){A&1&&O(0,BSA,4,3)(1,ESA,10,3,"div",0),A&2&&Y(i.isComputerUseClick()?0:i.isComputerUseResponse()?1:-1)},dependencies:[si,Vd,Tn,Wt,Fa],styles:['[_nghost-%COMP%]{display:block}.computer-use-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;border-radius:12px;border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);overflow:hidden;cursor:pointer;margin:5px 5px 10px;transition:opacity .2s}.computer-use-container[_ngcontent-%COMP%]:hover{opacity:.9}.computer-use-tool-name[_ngcontent-%COMP%]{font-size:12px;font-family:monospace;font-weight:600;color:var(--chat-panel-input-field-textarea-color);opacity:.9;padding:12px}.computer-use-tool-name[_ngcontent-%COMP%] .actual-pixels[_ngcontent-%COMP%]{opacity:.6;margin-left:8px;font-weight:400}.computer-use-screenshot[_ngcontent-%COMP%]{width:100%;height:auto;display:block;border-bottom:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color)}.computer-use-footprint[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;gap:8px}.computer-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0}.url-text[_ngcontent-%COMP%]{font-size:11px;font-family:monospace;white-space:normal;word-break:break-all;color:var(--chat-panel-input-field-textarea-color);opacity:.8;min-width:0}.image-wrapper[_ngcontent-%COMP%]{position:relative;width:100%}.images-wrapper-flex[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:580px;gap:12px}.images-wrapper-flex[_ngcontent-%COMP%] .image-wrapper[_ngcontent-%COMP%]{flex:1;min-width:0}.images-wrapper-flex[_ngcontent-%COMP%] .image-wrapper[_ngcontent-%COMP%] .computer-use-screenshot[_ngcontent-%COMP%]{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;border-radius:8px}.arrow-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--chat-panel-input-field-textarea-color);opacity:.8;gap:4px}.arrow-container[_ngcontent-%COMP%] .action-name-above[_ngcontent-%COMP%]{font-size:11px;font-family:monospace;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:80px}.arrow-container[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:32px;width:32px;height:32px}.fallback-image[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-high, #e0e0e0);width:240px;height:120px;margin:0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--chat-panel-input-field-textarea-color);opacity:.7}.fallback-image[_ngcontent-%COMP%] .missing-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px}.fallback-image[_ngcontent-%COMP%] .fallback-text[_ngcontent-%COMP%]{font-size:14px;font-weight:500}.click-overlay-box[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;border:1px solid rgba(255,255,255,.8);border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 4px #00000080;pointer-events:none;display:flex;align-items:center;justify-content:center}.click-overlay-box[_ngcontent-%COMP%]:before{content:"";width:2px;height:2px;border-radius:50%;box-shadow:0 0 2px #fff}.click-overlay-box[_ngcontent-%COMP%]:after{content:"";position:absolute;width:100%;height:100%;border-radius:50%}']})};function hSA(t,e){if(t&1&&(B(0,"mat-icon"),y(1),Q()),t&2){let A=p();u(),lA(A.icon)}}var Oy=class t{icon="";text="";tooltipContent=null;tooltipTitle="";disabled=!1;buttonClick=new LA;handleClick(e){this.buttonClick.emit(e)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-hover-info-button"]],inputs:{icon:"icon",text:"text",tooltipContent:"tooltipContent",tooltipTitle:"tooltipTitle",disabled:"disabled"},outputs:{buttonClick:"buttonClick"},decls:3,vars:7,consts:[["mat-stroked-button","",1,"hover-info-button",3,"click","appJsonTooltip","appJsonTooltipTitle","disabled"]],template:function(A,i){A&1&&(B(0,"button",0),U("click",function(o){return i.handleClick(o)}),O(1,hSA,2,1,"mat-icon"),y(2),Q()),A&2&&(RA("icon-only",!i.text),H("appJsonTooltip",i.tooltipContent)("appJsonTooltipTitle",i.tooltipTitle)("disabled",i.disabled),u(),Y(i.icon?1:-1),u(),ue(" ",i.text,` +`))},dependencies:[si,qi,pi,Tn,Wt,TI],styles:[`.hover-info-button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)!important;background-color:var(--mat-sys-surface-container-high)!important;border-color:transparent!important;margin:5px 5px 5px 0;font-size:11px!important;padding:6px 12px!important;min-height:24px!important;height:24px!important;border-radius:8px!important;font-family:Roboto Mono,monospace!important;max-width:300px;text-align:left;display:inline-flex;align-items:center}.hover-info-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px!important;width:18px!important;height:18px!important;margin-right:6px!important;color:var(--mat-sys-on-surface)!important}.hover-info-button.icon-only[_ngcontent-%COMP%]{padding:0!important;min-width:24px!important;width:24px!important;justify-content:center}.hover-info-button.icon-only[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:-8px!important}.hover-info-button.icon-only[_ngcontent-%COMP%] .mdc-button__label[_ngcontent-%COMP%]{display:none!important}[_nghost-%COMP%] .hover-info-button{background-color:var(--mat-sys-surface-container-high)!important;color:var(--mat-sys-on-surface)!important}[_nghost-%COMP%] .hover-info-button .mdc-button__label{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important} + + + + + + + + + + + + + + + + +`]})};var t5e=K3(ktA());Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/});Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}});Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}});Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript"));Prism.languages.js=Prism.languages.javascript;(function(t){t.languages.typescript=t.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),t.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete t.languages.typescript.parameter,delete t.languages.typescript["literal-property"];var e=t.languages.extend("typescript",{});delete e["class-name"],t.languages.typescript["class-name"].inside=e,t.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e}}}}),t.languages.ts=t.languages.typescript})(Prism);(function(t){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;t.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},t.languages.css.atrule.inside.rest=t.languages.css;var A=t.languages.markup;A&&(A.tag.addInlined("style","css"),A.tag.addAttribute("style","css"))})(Prism);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}};Prism.languages.webmanifest=Prism.languages.json;(function(t){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",A={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},i={bash:A,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};t.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:i},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:A}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:i},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:i.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:i.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},A.inside=t.languages.bash;for(var n=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=i.variable[1].inside,a=0;a]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/};Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python;Prism.languages.py=Prism.languages.python;(function(t){var e=/[*&][^\s[\]{},]+/,A=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,i="(?:"+A.source+"(?:[ ]+"+e.source+")?|"+e.source+"(?:[ ]+"+A.source+")?)",n=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source}),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(r,s){s=(s||"").replace(/m/g,"")+"m";var l=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,function(){return i}).replace(/<>/g,function(){return r});return RegExp(l,s)}t.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,function(){return i})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,function(){return i}).replace(/<>/g,function(){return"(?:"+n+"|"+o+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(o),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:A,important:e,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},t.languages.yml=t.languages.yaml})(Prism);var uSA=t=>({color:t}),BQ=class t{text=me("");thought=me(!1);static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-markdown"]],inputs:{text:[1,"text"],thought:[1,"thought"]},features:[Bt([Bu()])],decls:1,vars:4,consts:[[3,"data","ngStyle"]],template:function(A,i){A&1&&QA(0,"markdown",0),A&2&&H("data",i.text())("ngStyle",Ks(2,uSA,i.thought()?"#9aa0a6":"inherit"))},dependencies:[si,Vd,sU,rU],encapsulation:2})};var xtA=(t,e)=>e.key;function fSA(t,e){if(t&1){let A=hA();B(0,"div",7)(1,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("form"))}),y(2,"Form"),Q(),B(3,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("json"))}),y(4,"JSON"),Q(),B(5,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("payload"))}),y(6,"Payload"),Q(),B(7,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("response schema"))}),y(8,"Schema"),Q()()}if(t&2){let A=p(3);u(),RA("active",A.activeTab==="form"),u(2),RA("active",A.activeTab==="json"),u(2),RA("active",A.activeTab==="payload"),u(2),RA("active",A.activeTab==="response schema")}}function pSA(t,e){if(t&1){let A=hA();B(0,"div",9)(1,"div",12),y(2),Q(),B(3,"div",13)(4,"div",14),y(5,"Payload"),Q(),QA(6,"ngx-json-viewer",15),Q(),B(7,"div",16)(8,"div",17)(9,"label",18)(10,"input",19),Di("ngModelChange",function(n){T(A);let o=p(3);return di(o.confirmationModel.confirmed,n)||(o.confirmationModel.confirmed=n),J(n)}),Q(),B(11,"span"),y(12,"Confirmed"),Q()()(),B(13,"button",20),U("click",function(){T(A);let n=p(3);return J(n.onSend())}),y(14," Submit "),Q()()()}if(t&2){let A=p(3);u(2),ue(" ",A.functionCall.args==null||A.functionCall.args.toolConfirmation==null?null:A.functionCall.args.toolConfirmation.hint," "),u(4),H("json",A.functionCall.args==null||A.functionCall.args.originalFunctionCall==null?null:A.functionCall.args.originalFunctionCall.args),u(4),H("id",NQ("confirmed-checkbox-",A.functionCall.id)),wi("ngModel",A.confirmationModel.confirmed)}}function mSA(t,e){t&1&&y(0," *")}function wSA(t,e){if(t&1&&(B(0,"div",28),y(1),Q()),t&2){let A=p(2).$implicit;u(),lA(A.description)}}function DSA(t,e){if(t&1){let A=hA();B(0,"input",27),Di("ngModelChange",function(n){T(A);let o=p().$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q(),O(1,wSA,2,1,"div",28)}if(t&2){let A=p().$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key]),u(),Y(A.description?1:-1)}}function ySA(t,e){if(t&1){let A=hA();B(0,"input",31),Di("ngModelChange",function(n){T(A);let o=p(2).$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q()}if(t&2){let A=p(2).$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key])}}function vSA(t,e){if(t&1){let A=hA();B(0,"input",32),Di("ngModelChange",function(n){T(A);let o=p(2).$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q()}if(t&2){let A=p(2).$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key])}}function bSA(t,e){if(t&1&&(B(0,"div",28),y(1),Q()),t&2){let A=p(2).$implicit;u(),lA(A.description)}}function MSA(t,e){if(t&1&&(O(0,ySA,1,2,"input",29)(1,vSA,1,2,"input",30),O(2,bSA,2,1,"div",28)),t&2){let A=p().$implicit;Y(A.type==="number"||A.type==="integer"?0:1),u(2),Y(A.description?2:-1)}}function SSA(t,e){if(t&1&&(B(0,"div",25),y(1),O(2,mSA,1,0),Q(),B(3,"div",26),O(4,DSA,2,3)(5,MSA,3,2),Q()),t&2){let A=e.$implicit;u(),ue(" ",A.title),u(),Y(A.required?2:-1),u(2),Y(A.type==="boolean"?4:5)}}function kSA(t,e){if(t&1){let A=hA();B(0,"div",21),Je(1,SSA,6,3,null,null,xtA),B(3,"div",23)(4,"button",24),U("click",function(){T(A);let n=p(4);return J(n.onSend())}),y(5," Submit "),Q()()()}if(t&2){let A=p(4);u(),Oe(A.formFields)}}function xSA(t,e){if(t&1){let A=hA();B(0,"div",22)(1,"textarea",33),Di("ngModelChange",function(n){T(A);let o=p(4);return di(o.formModelJson,n)||(o.formModelJson=n),J(n)}),U("ngModelChange",function(n){T(A);let o=p(4);return J(o.onJsonInputChange(n))}),Q()(),B(2,"div",23)(3,"button",24),U("click",function(){T(A);let n=p(4);return J(n.onSend())}),y(4," Submit "),Q()()}if(t&2){let A=p(4);u(),wi("ngModel",A.formModelJson)}}function _SA(t,e){if(t&1&&(B(0,"div",22)(1,"pre"),y(2),Q()()),t&2){let A=p(4);u(2),lA(A.getPayloadJson())}}function RSA(t,e){if(t&1&&(B(0,"div",22)(1,"pre"),y(2),Q()()),t&2){let A=p(4);u(2),lA(A.getResponseSchemaJson())}}function NSA(t,e){if(t&1&&(B(0,"div",10),O(1,kSA,6,0,"div",21)(2,xSA,5,1)(3,_SA,3,1,"div",22)(4,RSA,3,1,"div",22),Q()),t&2){let A=p(3);u(),Y(A.activeTab==="form"?1:A.activeTab==="json"?2:A.activeTab==="payload"?3:A.activeTab==="response schema"?4:-1)}}function FSA(t,e){if(t&1){let A=hA();B(0,"input",34),Di("ngModelChange",function(n){T(A);let o=p(3);return di(o.functionCall.userResponse,n)||(o.functionCall.userResponse=n),J(n)}),U("keydown.enter",function(){T(A);let n=p(3);return J(n.onSend())}),Q(),B(1,"button",35),U("click",function(){T(A);let n=p(3);return J(n.onSend())}),B(2,"mat-icon"),y(3,"send"),Q()()}if(t&2){let A=p(3);wi("ngModel",A.functionCall.userResponse),u(),H("disabled",!A.functionCall.userResponse)}}function LSA(t,e){if(t&1&&(B(0,"div",2)(1,"div",4),QA(2,"app-markdown",5),Q(),B(3,"div",6),O(4,fSA,9,8,"div",7),B(5,"div",8),O(6,pSA,15,5,"div",9)(7,NSA,5,1,"div",10)(8,FSA,4,2),Q()()()),t&2){let A=p(2);u(2),H("text",A.getPromptText()),u(2),Y(A.formFields.length>0?4:-1),u(2),Y(A.isConfirmationRequest?6:A.formFields.length>0?7:8)}}function GSA(t,e){if(t&1){let A=hA();B(0,"div",7)(1,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("form"))}),y(2,"Form"),Q(),B(3,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("json"))}),y(4,"JSON"),Q(),B(5,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("payload"))}),y(6,"Payload"),Q(),B(7,"div",11),U("click",function(){T(A);let n=p(3);return J(n.setActiveTab("response schema"))}),y(8,"Schema"),Q()()}if(t&2){let A=p(3);u(),RA("active",A.activeTab==="form"),u(2),RA("active",A.activeTab==="json"),u(2),RA("active",A.activeTab==="payload"),u(2),RA("active",A.activeTab==="response schema")}}function KSA(t,e){if(t&1){let A=hA();B(0,"div",9)(1,"div",12),y(2),Q(),B(3,"div",13)(4,"div",14),y(5,"Payload"),Q(),QA(6,"ngx-json-viewer",15),Q(),B(7,"div",16)(8,"div",17)(9,"label",18)(10,"input",19),Di("ngModelChange",function(n){T(A);let o=p(3);return di(o.confirmationModel.confirmed,n)||(o.confirmationModel.confirmed=n),J(n)}),Q(),B(11,"span"),y(12,"Confirmed"),Q()()(),B(13,"button",20),U("click",function(){T(A);let n=p(3);return J(n.onSend())}),y(14," Submit "),Q()()()}if(t&2){let A=p(3);u(2),ue(" ",A.functionCall.args==null||A.functionCall.args.toolConfirmation==null?null:A.functionCall.args.toolConfirmation.hint," "),u(4),H("json",A.functionCall.args==null||A.functionCall.args.originalFunctionCall==null?null:A.functionCall.args.originalFunctionCall.args),u(4),H("id",NQ("confirmed-checkbox-standalone-",A.functionCall.id)),wi("ngModel",A.confirmationModel.confirmed)}}function USA(t,e){t&1&&y(0," *")}function TSA(t,e){if(t&1&&(B(0,"div",28),y(1),Q()),t&2){let A=p(2).$implicit;u(),lA(A.description)}}function JSA(t,e){if(t&1){let A=hA();B(0,"input",27),Di("ngModelChange",function(n){T(A);let o=p().$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q(),O(1,TSA,2,1,"div",28)}if(t&2){let A=p().$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key]),u(),Y(A.description?1:-1)}}function OSA(t,e){if(t&1){let A=hA();B(0,"input",31),Di("ngModelChange",function(n){T(A);let o=p(2).$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q()}if(t&2){let A=p(2).$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key])}}function YSA(t,e){if(t&1){let A=hA();B(0,"input",32),Di("ngModelChange",function(n){T(A);let o=p(2).$implicit,a=p(5);return di(a.formModel[o.key],n)||(a.formModel[o.key]=n),J(n)}),Q()}if(t&2){let A=p(2).$implicit,i=p(5);H("id",A.key),wi("ngModel",i.formModel[A.key])}}function HSA(t,e){if(t&1&&(B(0,"div",28),y(1),Q()),t&2){let A=p(2).$implicit;u(),lA(A.description)}}function zSA(t,e){if(t&1&&(O(0,OSA,1,2,"input",29)(1,YSA,1,2,"input",30),O(2,HSA,2,1,"div",28)),t&2){let A=p().$implicit;Y(A.type==="number"||A.type==="integer"?0:1),u(2),Y(A.description?2:-1)}}function PSA(t,e){if(t&1&&(B(0,"div",25),y(1),O(2,USA,1,0),Q(),B(3,"div",26),O(4,JSA,2,3)(5,zSA,3,2),Q()),t&2){let A=e.$implicit;u(),ue(" ",A.title),u(),Y(A.required?2:-1),u(2),Y(A.type==="boolean"?4:5)}}function jSA(t,e){if(t&1){let A=hA();B(0,"div",21),Je(1,PSA,6,3,null,null,xtA),B(3,"div",23)(4,"button",24),U("click",function(){T(A);let n=p(4);return J(n.onSend())}),y(5," Submit "),Q()()()}if(t&2){let A=p(4);u(),Oe(A.formFields)}}function qSA(t,e){if(t&1){let A=hA();B(0,"div",22)(1,"textarea",33),Di("ngModelChange",function(n){T(A);let o=p(4);return di(o.formModelJson,n)||(o.formModelJson=n),J(n)}),U("ngModelChange",function(n){T(A);let o=p(4);return J(o.onJsonInputChange(n))}),Q()(),B(2,"div",23)(3,"button",24),U("click",function(){T(A);let n=p(4);return J(n.onSend())}),y(4," Submit "),Q()()}if(t&2){let A=p(4);u(),wi("ngModel",A.formModelJson)}}function VSA(t,e){if(t&1&&(B(0,"div",22)(1,"pre"),y(2),Q()()),t&2){let A=p(4);u(2),lA(A.getPayloadJson())}}function WSA(t,e){if(t&1&&(B(0,"div",22)(1,"pre"),y(2),Q()()),t&2){let A=p(4);u(2),lA(A.getResponseSchemaJson())}}function ZSA(t,e){if(t&1&&(B(0,"div",10),O(1,jSA,6,0,"div",21)(2,qSA,5,1)(3,VSA,3,1,"div",22)(4,WSA,3,1,"div",22),Q()),t&2){let A=p(3);u(),Y(A.activeTab==="form"?1:A.activeTab==="json"?2:A.activeTab==="payload"?3:A.activeTab==="response schema"?4:-1)}}function XSA(t,e){if(t&1){let A=hA();B(0,"input",34),Di("ngModelChange",function(n){T(A);let o=p(3);return di(o.functionCall.userResponse,n)||(o.functionCall.userResponse=n),J(n)}),U("keydown.enter",function(){T(A);let n=p(3);return J(n.onSend())}),Q(),B(1,"button",35),U("click",function(){T(A);let n=p(3);return J(n.onSend())}),B(2,"mat-icon"),y(3,"send"),Q()()}if(t&2){let A=p(3);wi("ngModel",A.functionCall.userResponse),u(),H("disabled",!A.functionCall.userResponse)}}function $SA(t,e){if(t&1&&(B(0,"div",3),O(1,GSA,9,8,"div",7),B(2,"div",8),O(3,KSA,15,5,"div",9)(4,ZSA,5,1,"div",10)(5,XSA,4,2),Q()()),t&2){let A=p(2);u(),Y(A.formFields.length>0?1:-1),u(2),Y(A.isConfirmationRequest?3:A.formFields.length>0?4:5)}}function AkA(t,e){if(t&1&&(B(0,"div",1),U("click",function(i){return i.stopPropagation()}),O(1,LSA,9,3,"div",2)(2,$SA,6,2,"div",3),Q()),t&2){let A=p();u(),Y(A.hasMessage()?1:2)}}var Hy=class t{functionCall;appName;userId;sessionId;responseComplete=new LA;formModel={};formFields=[];activeTab="form";formModelJson="";confirmationModel={confirmed:!1,payload:""};get isConfirmationRequest(){return this.functionCall?.name==="adk_request_confirmation"}cdr=w(wt);ngOnChanges(e){e.functionCall&&this.initForm()}initForm(){if(this.formModel={},this.formFields=[],this.isConfirmationRequest){this.confirmationModel.confirmed=this.functionCall.args?.toolConfirmation?.confirmed||!1,this.confirmationModel.payload=JSON.stringify(this.functionCall.args?.originalFunctionCall?.args||{},null,2);return}let e=this.functionCall?.args?.response_schema;if(e&&e.type==="object"&&e.properties)for(let A of Object.keys(e.properties)){let i=e.properties[A],n=i.type;if(!n&&i.anyOf){let o=i.anyOf.find(a=>a.type!=="null");o&&(n=o.type)}this.formFields.push({key:A,type:n,title:i.title||A,description:i.description||"",required:e.required?.includes(A)||!1}),n==="boolean"?this.formModel[A]=!1:n==="number"||n==="integer"?this.formModel[A]=null:this.formModel[A]=""}}getCleanedFormModel(){let e=this.functionCall?.args?.response_schema;if(!e||e.type!=="object"||!e.properties)return this.formModel;let A=gA({},this.formModel);for(let i of Object.keys(e.properties)){let n=e.properties[i],o=A[i];if(o!=null&&o!==""){let a=n.type;if(!a&&n.anyOf){let r=n.anyOf.find(s=>s.type!=="null");r&&(a=r.type)}a==="integer"?A[i]=parseInt(o,10):a==="number"&&(A[i]=parseFloat(o))}else A[i]=null}return A}updateFormModelJson(){this.formModelJson=JSON.stringify(this.getCleanedFormModel(),null,2)}onJsonInputChange(e){try{let A=JSON.parse(e);this.formModel=A}catch(A){}}setActiveTab(e){this.activeTab=e,e==="json"&&this.updateFormModelJson()}hasMessage(){return!!(this.functionCall.args?.prompt||this.functionCall.args?.message)}getPromptText(){return this.functionCall.args?.prompt||this.functionCall.args?.message||"Please provide your response"}hasPayload(){return this.functionCall.args?.payload!==void 0&&this.functionCall.args?.payload!==null}getPayloadJson(){try{return JSON.stringify(this.functionCall.args?.payload||{},null,2)}catch(e){return""}}hasResponseSchema(){return!!this.functionCall.args?.response_schema}getResponseSchemaJson(){try{return JSON.stringify(this.functionCall.args?.response_schema||{},null,2)}catch(e){return""}}onSend(){if(this.isConfirmationRequest){let o={};try{o=JSON.parse(this.confirmationModel.payload)}catch(s){o=this.functionCall.args?.originalFunctionCall?.args||{}}let a={confirmed:this.confirmationModel.confirmed,payload:o};this.functionCall.responseStatus="sent",this.cdr.detectChanges();let r={role:"user",parts:[{functionResponse:{id:this.functionCall.id,name:this.functionCall.name,response:a}}],functionCallEventId:this.functionCall.functionCallEventId};this.responseComplete.emit(r);return}let e,A=this.functionCall?.args?.response_schema;if(A&&A.type==="object"&&A.properties&&this.formFields.length>0){let o=this.getCleanedFormModel();e=o,this.functionCall.userResponse=JSON.stringify(o),this.functionCall.sentUserResponse=this.functionCall.userResponse}else{if(!this.functionCall.userResponse||!this.functionCall.userResponse.trim())return;this.functionCall.sentUserResponse=this.functionCall.userResponse;try{let o=JSON.parse(this.functionCall.userResponse);typeof o=="object"&&o!==null?e=o:e={result:this.functionCall.userResponse}}catch(o){e={result:this.functionCall.userResponse}}}this.functionCall.responseStatus="sent",this.cdr.detectChanges();let n={role:"user",parts:[{functionResponse:{id:this.functionCall.id,name:this.functionCall.name,response:e}}],functionCallEventId:this.functionCall.functionCallEventId};this.responseComplete.emit(n)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-long-running-response"]],inputs:{functionCall:"functionCall",appName:"appName",userId:"userId",sessionId:"sessionId"},outputs:{responseComplete:"responseComplete"},features:[Yt],decls:1,vars:1,consts:[[1,"response-chip-container"],[1,"response-chip-container",3,"click"],[1,"message-box"],[1,"request-card-standalone"],[1,"message-content"],[3,"text"],[1,"request-card"],[1,"tabs-header"],[1,"input-container"],[1,"confirmation-container",2,"width","100%"],[1,"tabs-content"],[1,"tab-link",3,"click"],[1,"confirmation-hint",2,"margin-bottom","10px","font-size","13px","font-weight","600","color","var(--mat-sys-on-surface)"],[1,"confirmation-payload",2,"margin-bottom","10px"],[1,"field-label",2,"margin-bottom","5px","font-size","12px","font-weight","500","color","var(--mat-sys-on-surface-variant)"],[3,"json"],[1,"confirmation-footer",2,"display","flex","justify-content","space-between","align-items","center","margin-top","10px"],[1,"confirmation-checkbox",2,"font-size","12px"],[2,"display","flex","align-items","center","gap","6px","cursor","pointer"],["type","checkbox",2,"cursor","pointer",3,"ngModelChange","id","ngModel"],["mat-raised-button","","color","primary",1,"form-submit-button",2,"margin-top","0",3,"click"],[1,"schema-form","grid-layout"],[1,"json-view"],[1,"grid-submit"],["mat-raised-button","","color","primary",1,"form-submit-button",3,"click"],[1,"grid-label"],[1,"grid-value"],["type","checkbox",3,"ngModelChange","id","ngModel"],[1,"field-description"],["type","number",1,"form-input",3,"id","ngModel"],["type","text",1,"form-input",3,"id","ngModel"],["type","number",1,"form-input",3,"ngModelChange","id","ngModel"],["type","text",1,"form-input",3,"ngModelChange","id","ngModel"],[1,"json-textarea",3,"ngModelChange","ngModel"],["placeholder","Enter your response...",1,"response-input",3,"ngModelChange","keydown.enter","ngModel"],["mat-icon-button","",1,"send-button",3,"click","disabled"]],template:function(A,i){A&1&&O(0,AkA,3,1,"div",0),A&2&&Y(i.functionCall.responseStatus!=="sent"&&i.functionCall.responseStatus!=="sending"?0:-1)},dependencies:[ln,Dn,YQ,rb,yn,ko,ji,pi,Wt,BQ,cs,$l],styles:["[_nghost-%COMP%]{display:block}.response-chip-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;margin:5px 5px 5px 0}.message-box[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-high);border:1px solid var(--mat-sys-outline-variant);border-radius:20px;padding:12px 16px;box-shadow:none;display:flex;flex-direction:column;gap:12px}.message-content[_ngcontent-%COMP%]{flex:1;font-size:12px}.request-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;width:100%}.request-card-standalone[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--mat-sys-surface-container-high) 70%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid color-mix(in srgb,var(--mat-sys-outline-variant) 30%,transparent);border-radius:12px;padding:12px;box-shadow:0 4px 16px #0003;display:flex;flex-direction:column;gap:8px;max-width:400px}.data-buttons[_ngcontent-%COMP%]{display:flex;gap:8px}.input-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;width:100%}.input-container[_ngcontent-%COMP%] .response-input[_ngcontent-%COMP%]{flex:1;border:1px solid var(--mat-sys-outline-variant);border-radius:4px;padding:4px 8px;background:var(--mat-sys-surface-container);outline:none;font-size:12px;font-family:inherit;color:var(--mat-sys-on-surface);caret-color:var(--mat-sys-primary)}.input-container[_ngcontent-%COMP%] .response-input[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant);opacity:.6}.input-container[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]{color:var(--mat-sys-primary);width:24px;height:24px;min-width:24px;padding:0;line-height:24px;box-sizing:border-box}.input-container[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]:disabled{color:var(--mat-sys-on-surface-variant);opacity:.3}.input-container[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.tabs-header[_ngcontent-%COMP%]{display:flex;gap:8px;border-bottom:1px solid var(--mat-sys-outline-variant);margin-bottom:8px;padding-bottom:4px}.tab-link[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:var(--mat-sys-on-surface-variant);cursor:pointer;padding:2px 6px;border-radius:4px}.tab-link[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.tab-link.active[_ngcontent-%COMP%]{color:var(--mat-sys-primary);background:var(--mat-sys-primary-container)}.tabs-content[_ngcontent-%COMP%]{width:100%}.json-view[_ngcontent-%COMP%]{padding:4px 0;max-height:200px;overflow:auto}.json-view[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;font-size:10px;font-family:monospace;color:var(--mat-sys-on-surface)}.json-view[_ngcontent-%COMP%] .json-textarea[_ngcontent-%COMP%]{width:100%;height:150px;margin:0;font-size:10px;font-family:monospace;color:var(--mat-sys-on-surface);background:transparent;border:1px solid var(--mat-sys-outline-variant);border-radius:4px;padding:4px;resize:vertical;box-sizing:border-box}.json-view[_ngcontent-%COMP%] .json-textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--mat-sys-primary)}.schema-form.grid-layout[_ngcontent-%COMP%]{display:grid;grid-template-columns:max-content 1fr;gap:4px 8px;align-items:start;width:100%;padding:4px 2px}.grid-label[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:var(--mat-sys-on-surface);text-align:right;white-space:nowrap;padding-top:6px}.grid-value[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px;width:100%}.grid-value[_ngcontent-%COMP%] .form-input[_ngcontent-%COMP%]{width:100%;border:1px solid var(--mat-sys-outline-variant);border-radius:4px;padding:4px 6px;font-size:11px;background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface);box-sizing:border-box;height:28px}.grid-value[_ngcontent-%COMP%] .form-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--mat-sys-primary)}.grid-value[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{margin:4px 0;align-self:flex-start}.field-description[_ngcontent-%COMP%]{font-size:10px;color:var(--mat-sys-on-surface-variant);opacity:.8}.grid-submit[_ngcontent-%COMP%]{grid-column:1/-1;display:flex;justify-content:flex-end;margin-top:4px}.form-submit-button[_ngcontent-%COMP%]{align-self:flex-end;margin-top:2px;height:28px!important;line-height:28px!important;font-size:11px!important}"]})};function ekA(t,e){if(t&1&&QA(0,"a2ui-surface",0),t&2){let A=p();H("surfaceId",A.surfaceId())("surface",A.surface())}}var zy=class t{processor=w(CL);beginRendering=null;surfaceUpdate=null;dataModelUpdate=null;surfaceId=bA(null);activeSurface=bA(null);surface=pe(()=>this.activeSurface());constructor(){}ngOnChanges(e){let A=[],i=null;e.beginRendering&&this.beginRendering&&Object.keys(this.beginRendering).length>0&&(A.push(this.beginRendering),i=this.beginRendering?.beginRendering?.surfaceId??i),e.surfaceUpdate&&this.surfaceUpdate&&Object.keys(this.surfaceUpdate).length>0&&(A.push(this.surfaceUpdate),i=this.surfaceUpdate?.surfaceUpdate?.surfaceId??i),e.dataModelUpdate&&this.dataModelUpdate&&Object.keys(this.dataModelUpdate).length>0&&(A.push(this.dataModelUpdate),i=this.dataModelUpdate?.dataModelUpdate?.surfaceId??i),A.length>0&&this.processor.processMessages(A),i&&this.surfaceId.set(i);let n=this.surfaceId();if(n){let o=this.processor.getSurfaces();o.has(n)&&this.activeSurface.set(o.get(n))}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-a2ui-canvas"]],inputs:{beginRendering:"beginRendering",surfaceUpdate:"surfaceUpdate",dataModelUpdate:"dataModelUpdate"},features:[Yt],decls:1,vars:1,consts:[[3,"surfaceId","surface"]],template:function(A,i){A&1&&O(0,ekA,1,2,"a2ui-surface",0),A&2&&Y(i.surface()?0:-1)},dependencies:[si,BL],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;overflow:auto}[_nghost-%COMP%] *{box-sizing:border-box}.canvas[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:16px;box-sizing:border-box;min-height:100%}"],changeDetection:0})};var _tA=(t,e)=>({text:t,thought:e});function tkA(t,e){if(t&1&&(B(0,"div",1),y(1),Q()),t&2){let A=p();u(),lA(A.type)}}function ikA(t,e){if(t&1&&QA(0,"img",8),t&2){let A=p().$implicit;H("src",A.url,Go)}}function nkA(t,e){if(t&1&&(B(0,"a",9),y(1),Q()),t&2){let A=p(2).$implicit;H("href",A.url,Go),u(),lA(A.file.name)}}function okA(t,e){if(t&1&&y(0),t&2){let A=p(2).$implicit;ue(" ",A.file.name," ")}}function akA(t,e){if(t&1&&(B(0,"mat-icon"),y(1,"insert_drive_file"),Q(),O(2,nkA,2,2,"a",9)(3,okA,1,1)),t&2){let A=p().$implicit;u(2),Y(A.url?2:3)}}function rkA(t,e){if(t&1&&(B(0,"div",7),O(1,ikA,1,1,"img",8),O(2,akA,4,1),Q()),t&2){let A=e.$implicit;u(),Y(A.file.type.startsWith("image/")?1:-1),u(),Y(A.file.type.startsWith("image/")?-1:2)}}function skA(t,e){if(t&1&&(B(0,"div",4),Je(1,rkA,3,2,"div",7,hi),Q()),t&2){let A=p(2);u(),Oe(A.uiEvent.attachments)}}function lkA(t,e){if(t&1&&(B(0,"div",5),sn(1,10),Q()),t&2){let A=p(2);H("appJsonTooltip",A.jsonOutputData),u(),H("ngComponentOutlet",A.markdownComponent)("ngComponentOutletInputs",U0(3,_tA,A.uiEvent.text||A.rawMessageText,A.uiEvent.thought))}}function gkA(t,e){if(t&1){let A=hA();B(0,"div",12)(1,"textarea",13,0),U("ngModelChange",function(n){T(A);let o=p(4);return J(o.userEditEvalCaseMessageChange.emit(n))})("keydown",function(n){T(A);let o=p(4);return J(o.handleKeydown.emit({event:n,message:o.uiEvent}))}),Q(),B(3,"div",14)(4,"span",15),U("click",function(){T(A);let n=p(4);return J(n.cancelEditMessage.emit(n.uiEvent))}),y(5," close "),Q(),B(6,"span",16),U("click",function(){T(A);let n=p(4);return J(n.saveEditMessage.emit(n.uiEvent))}),y(7," check "),Q()()()}if(t&2){let A=p(4);u(),H("ngModel",A.userEditEvalCaseMessage),u(3),H("matTooltip",A.i18n.cancelEditingTooltip),u(2),H("matTooltip",A.i18n.saveEvalMessageTooltip)}}function ckA(t,e){if(t&1&&sn(0,10),t&2){let A=p(4);H("ngComponentOutlet",A.markdownComponent)("ngComponentOutletInputs",U0(2,_tA,A.uiEvent.text,A.uiEvent.thought))}}function CkA(t,e){if(t&1&&O(0,gkA,8,3,"div",12)(1,ckA,1,5,"ng-container",10),t&2){let A=p(3);Y(A.uiEvent.isEditing?0:1)}}function IkA(t,e){if(t&1&&(B(0,"div"),QA(1,"div",17),Q()),t&2){let A=p(3);u(),H("innerHTML",A.renderGooglerSearch(A.uiEvent.renderedContent),Kc)}}function dkA(t,e){if(t&1&&QA(0,"app-a2ui-canvas",11),t&2){let A=p(3);H("beginRendering",A.uiEvent.a2uiData.beginRendering)("surfaceUpdate",A.uiEvent.a2uiData.surfaceUpdate)("dataModelUpdate",A.uiEvent.a2uiData.dataModelUpdate)}}function BkA(t,e){if(t&1&&(B(0,"div")(1,"div"),O(2,CkA,2,1),Q(),O(3,IkA,2,1,"div"),O(4,dkA,1,3,"app-a2ui-canvas",11),Q()),t&2){let A=p(2);u(2),Y(A.uiEvent.text?2:-1),u(),Y(A.uiEvent.renderedContent?3:-1),u(),Y(A.uiEvent.a2uiData?4:-1)}}function EkA(t,e){if(t&1&&(B(0,"code"),y(1),Q()),t&2){let A=p(2);u(),ue(" ",A.uiEvent.executableCode.code," ")}}function hkA(t,e){if(t&1&&(B(0,"div")(1,"div"),y(2),Q(),B(3,"div"),y(4),Q()()),t&2){let A=p(2);u(2),ba("",A.i18n.outcomeLabel,": ",A.uiEvent.codeExecutionResult.outcome),u(2),ba("",A.i18n.outputLabel,": ",A.uiEvent.codeExecutionResult.output)}}function QkA(t,e){if(t&1){let A=hA();B(0,"div",18)(1,"img",19),U("click",function(){T(A);let n=p(4);return J(n.openViewImageDialog.emit(n.uiEvent.inlineData.data))}),Q()()}if(t&2){let A=p(4);u(),H("src",A.uiEvent.inlineData.data,Go)}}function ukA(t,e){if(t&1&&(B(0,"div"),QA(1,"app-audio-player",20),Q()),t&2){let A=p(4);u(),H("base64data",A.uiEvent.inlineData.data)}}function fkA(t,e){if(t&1){let A=hA();B(0,"div")(1,"div",21)(2,"mat-icon"),y(3,"description"),Q(),B(4,"button",22),U("click",function(){T(A);let n=p(4);return J(n.openBase64InNewTab.emit({data:n.uiEvent.inlineData.data,mimeType:n.uiEvent.inlineData.mimeType}))}),y(5),Q()()()}if(t&2){let A=p(4);u(5),ue(" ",A.uiEvent.inlineData.name," ")}}function pkA(t,e){if(t&1){let A=hA();B(0,"div")(1,"button",22),U("click",function(){T(A);let n=p(4);return J(n.openBase64InNewTab.emit({data:n.uiEvent.inlineData.data,mimeType:n.uiEvent.inlineData.mimeType}))}),y(2),Q()()}if(t&2){let A=p(4);u(2),ue(" ",A.uiEvent.inlineData.name," ")}}function mkA(t,e){if(t&1&&(B(0,"div")(1,"div"),O(2,QkA,2,1,"div",18)(3,ukA,2,1,"div")(4,fkA,6,1,"div")(5,pkA,3,1,"div"),Q()()),t&2){let A,i=p(3);u(2),Y((A=i.uiEvent.inlineData.mediaType)===i.MediaType.IMAGE?2:A===i.MediaType.AUDIO?3:A===i.MediaType.TEXT?4:5)}}function wkA(t,e){if(t&1){let A=hA();B(0,"div")(1,"img",23),U("click",function(){T(A);let n=p(4);return J(n.openViewImageDialog.emit(n.uiEvent.inlineData.data))}),Q()()}if(t&2){let A=p(4);u(),H("src",A.uiEvent.inlineData.data,Go)}}function DkA(t,e){if(t&1&&(B(0,"div",7)(1,"mat-icon"),y(2,"insert_drive_file"),Q(),B(3,"a",9),y(4),Q()()),t&2){let A=p(4);u(3),H("href",A.uiEvent.inlineData.data,Go),u(),lA(A.uiEvent.inlineData.displayName)}}function ykA(t,e){if(t&1&&(B(0,"div"),O(1,wkA,2,1,"div")(2,DkA,5,2,"div",7),Q()),t&2){let A=p(3);u(),Y(A.uiEvent.inlineData.mimeType.startsWith("image/")?1:2)}}function vkA(t,e){if(t&1&&O(0,mkA,6,1,"div")(1,ykA,3,1,"div"),t&2){let A=p(2);Y(A.uiEvent.role==="bot"?0:1)}}function bkA(t,e){if(t&1&&(B(0,"div",24),QA(1,"app-audio-player",20),Q()),t&2){let A=p(4);u(),H("base64data",A.audioUrl||"")}}function MkA(t,e){if(t&1&&O(0,bkA,2,1,"div",24),t&2){let A=e.$implicit;Y(A.fileData&&A.fileData.mimeType.startsWith("audio/")?0:-1)}}function SkA(t,e){if(t&1&&Je(0,MkA,1,1,null,null,hi),t&2){let A=p(2);Oe(A.uiEvent.event.content.parts)}}function kkA(t,e){if(t&1&&(B(0,"div",27)(1,"div",28),y(2),Q(),QA(3,"ngx-json-viewer",29),Q(),B(4,"div",30)(5,"div",31),y(6),Q(),QA(7,"ngx-json-viewer",29),Q()),t&2){let A=p(3);u(2),lA(A.i18n.actualToolUsesLabel),u(),H("json",A.uiEvent.actualInvocationToolUses),u(3),lA(A.i18n.expectedToolUsesLabel),u(),H("json",A.uiEvent.expectedInvocationToolUses)}}function xkA(t,e){if(t&1&&(B(0,"div",27)(1,"div",28),y(2),Q(),B(3,"div"),y(4),Q()(),B(5,"div",30)(6,"div",31),y(7),Q(),B(8,"div"),y(9),Q()()),t&2){let A=p(3);u(2),lA(A.i18n.actualResponseLabel),u(2),lA(A.uiEvent.actualFinalResponse),u(3),lA(A.i18n.expectedResponseLabel),u(2),lA(A.uiEvent.expectedFinalResponse)}}function _kA(t,e){if(t&1&&(B(0,"div",26)(1,"span",32),y(2),Q(),B(3,"span",33),y(4),Q()()),t&2){let A=p(3);u(2),ba("",A.i18n.matchScoreLabel,": ",A.uiEvent.evalScore),u(2),ba("",A.i18n.thresholdLabel,": ",A.uiEvent.evalThreshold)}}function RkA(t,e){if(t&1&&(B(0,"div",6)(1,"div",25),O(2,kkA,8,4)(3,xkA,10,4),Q(),O(4,_kA,5,4,"div",26),Q()),t&2){let A=p(2);u(2),Y(A.uiEvent.actualInvocationToolUses?2:A.uiEvent.actualFinalResponse?3:-1),u(2),Y(A.uiEvent.evalScore!==void 0&&A.uiEvent.evalThreshold!==void 0?4:-1)}}function NkA(t,e){if(t&1&&(O(0,skA,3,0,"div",4),O(1,lkA,2,6,"div",5)(2,BkA,5,3,"div"),O(3,EkA,2,1,"code"),O(4,hkA,5,4,"div"),O(5,vkA,2,1),O(6,SkA,2,0),O(7,RkA,5,2,"div",6)),t&2){let A=p();Y(A.uiEvent.attachments?0:-1),u(),Y(A.uiEvent.event.nodeInfo!=null&&A.uiEvent.event.nodeInfo.messageAsOutput?1:A.uiEvent.thought||A.uiEvent.text||A.uiEvent.renderedContent||A.uiEvent.a2uiData||A.uiEvent.event.inputTranscription||A.uiEvent.event.outputTranscription?2:-1),u(2),Y(A.uiEvent.executableCode?3:-1),u(),Y(A.uiEvent.codeExecutionResult?4:-1),u(),Y(A.uiEvent.inlineData?5:-1),u(),Y(A.uiEvent.event.content.parts?6:-1),u(),Y(A.uiEvent.failedMetric&&A.uiEvent.evalStatus===2?7:-1)}}function FkA(t,e){if(t&1&&QA(0,"ngx-json-viewer",2),t&2){let A=p();H("json",A.uiEvent.event.output)("appJsonTooltip",(A.uiEvent.event.nodeInfo==null?null:A.uiEvent.event.nodeInfo.outputFor)||A.uiEvent.nodePath)}}function LkA(t,e){if(t&1&&QA(0,"ngx-json-viewer",3),t&2){let A=p();H("json",A.uiEvent.error)("appJsonTooltip",A.uiEvent.error)}}function GkA(t,e){if(t&1&&y(0),t&2){let A=p(2);ue(" ",A.uiEvent.event.inputTranscription.text," ")}}function KkA(t,e){if(t&1&&y(0),t&2){let A=p(2);ue(" ",A.uiEvent.event.outputTranscription.text," ")}}function UkA(t,e){if(t&1&&O(0,GkA,1,1)(1,KkA,1,1),t&2){let A=p();Y(A.role==="user"&&A.uiEvent.event.inputTranscription?0:A.role==="bot"&&A.uiEvent.event.outputTranscription?1:-1)}}var Py=class t{uiEvent;type="message";role="bot";evalStatus;userEditEvalCaseMessage="";userEditEvalCaseMessageChange=new LA;handleKeydown=new LA;cancelEditMessage=new LA;saveEditMessage=new LA;openViewImageDialog=new LA;openBase64InNewTab=new LA;i18n=w(UI);sanitizer=w(Cs);markdownComponent=w(_I);MediaType=aC;renderGooglerSearch(e){return this.sanitizer.bypassSecurityTrustHtml(e)}get rawMessageText(){let e=this.uiEvent.event?.content?.parts;return e?e.filter(A=>A.text).map(A=>A.text).join(""):""}get jsonOutputData(){if(this.uiEvent.event?.nodeInfo?.messageAsOutput===!0){let e=this.rawMessageText;if(e)try{return JSON.parse(e)}catch(A){return null}}return null}get hasAudio(){if(this.uiEvent.inlineData?.mediaType==="audio")return!0;let e=this.uiEvent.event?.content?.parts;return e?e.some(A=>A.fileData&&A.fileData.mimeType&&A.fileData.mimeType.startsWith("audio/")):!1}audioUrl=null;ngOnChanges(e){e.uiEvent&&this.uiEvent&&this.checkAndLoadAudio()}http=w(fr);artifactService=w(TB);changeDetectorRef=w(wt);checkAndLoadAudio(){let e=this.uiEvent.event?.content?.parts;if(e){let A=e.find(i=>i.fileData&&i.fileData.mimeType&&i.fileData.mimeType.startsWith("audio/pcm"));A&&A.fileData&&this.loadAudio(A.fileData.fileUri)}}loadAudio(e){if(!e||!e.startsWith("artifact://"))return;let A=e.substring(11).split("/"),i=A[0],n=A[1],o=A[2],a=A.slice(3).join("/"),r=a.indexOf("#"),s=r!==-1?a.substring(0,r):a,l=r!==-1?a.substring(r+1):"0",g=s.lastIndexOf("/"),C=g!==-1?s.substring(g+1):s;this.artifactService.getLatestArtifact(n,i,o,C).subscribe(I=>{let d="";if(I.inlineData&&I.inlineData.data?d=I.inlineData.data:I.data&&(d=I.data),d){let h=this.base64ToArrayBuffer(d),E=h.byteLength-h.byteLength%2,f=h.slice(0,E),v=this.pcmToWav(f,24e3,1),k=new FileReader;k.onloadend=()=>{this.audioUrl=k.result,this.changeDetectorRef.detectChanges()},k.readAsDataURL(v)}})}base64ToArrayBuffer(e){let A=e.replace(/\s/g,""),i=A.indexOf(",");for(i!==-1&&(A=A.substring(i+1)),A=A.replace(/-/g,"+").replace(/_/g,"/");A.length%4!==0;)A+="=";let n=window.atob(A),o=n.length,a=new Uint8Array(o);for(let r=0;rA.toString(16).padStart(2,"0")).join(" ")}pcmToWav(e,A,i){let n=new ArrayBuffer(44),o=new DataView(n);return this.writeString(o,0,"RIFF"),o.setUint32(4,36+e.byteLength,!0),this.writeString(o,8,"WAVE"),this.writeString(o,12,"fmt "),o.setUint32(16,16,!0),o.setUint16(20,1,!0),o.setUint16(22,i,!0),o.setUint32(24,A,!0),o.setUint32(28,A*i*2,!0),o.setUint16(32,i*2,!0),o.setUint16(34,16,!0),this.writeString(o,36,"data"),o.setUint32(40,e.byteLength,!0),new Blob([n,e],{type:"audio/wav"})}writeString(e,A,i){for(let n=0;n({"eval-pass":t,"eval-fail":e}),HN=t=>({hidden:t}),zN=(t,e)=>e.id;function JkA(t,e){if(t&1){let A=hA();B(0,"app-content-bubble",10),U("userEditEvalCaseMessageChange",function(n){T(A);let o=p();return J(o.userEditEvalCaseMessageChange.emit(n))})("handleKeydown",function(n){T(A);let o=p();return J(o.handleKeydown.emit(n))})("cancelEditMessage",function(n){T(A);let o=p();return J(o.cancelEditMessage.emit(n))})("saveEditMessage",function(n){T(A);let o=p();return J(o.saveEditMessage.emit(n))})("openViewImageDialog",function(n){T(A);let o=p();return J(o.openViewImageDialog.emit({images:[n],currentIndex:0}))})("openBase64InNewTab",function(n){T(A);let o=p();return J(o.openBase64InNewTab.emit(n))}),Q()}if(t&2){let A=p();H("type",A.uiEvent.thought?"thought":"message")("role",A.uiEvent.role)("evalStatus",A.uiEvent.evalStatus)("uiEvent",A.uiEvent)("userEditEvalCaseMessage",A.userEditEvalCaseMessage)}}function OkA(t,e){if(t&1&&QA(0,"app-content-bubble",1),t&2){let A=p();H("uiEvent",A.uiEvent)}}function YkA(t,e){if(t&1&&QA(0,"app-content-bubble",2),t&2){let A=p();H("uiEvent",A.uiEvent)}}function HkA(t,e){if(t&1&&QA(0,"app-content-bubble",3),t&2){let A=p();H("uiEvent",A.uiEvent)}}function zkA(t,e){t&1&&QA(0,"app-hover-info-button",5),t&2&&H("icon","stop_circle")("text","Turn Complete")("tooltipContent","The agent has completed this turn")("tooltipTitle","Turn Complete")}function PkA(t,e){t&1&&QA(0,"app-hover-info-button",5),t&2&&H("icon","report")("text","Interrupted")("tooltipContent","The stream was interrupted")("tooltipTitle","Interrupted")}function jkA(t,e){if(t&1&&QA(0,"app-hover-info-button",5),t&2){let A=e.$implicit;H("icon","bolt")("text",A.name)("tooltipContent",A.args||"")("tooltipTitle","Function Call")}}function qkA(t,e){if(t&1){let A=hA();B(0,"app-computer-action",14),U("clickEvent",function(n){T(A);let o=p(3);return J(o.clickEvent.emit(n))})("openImage",function(n){T(A);let o=p(3);return J(o.openViewImageDialog.emit(n))}),Q()}if(t&2){let A=p().$implicit,i=p(2);H("functionCall",A)("allMessages",i.uiEvents)("index",i.index)}}function VkA(t,e){if(t&1&&O(0,qkA,1,3,"app-computer-action",13),t&2){let A=e.$implicit,i=p(2);Y(i.isComputerUseClick(A)?0:-1)}}function WkA(t,e){if(t&1&&(B(0,"div",11),Je(1,jkA,1,4,"app-hover-info-button",5,zN),Q(),B(3,"div",12),Je(4,VkA,1,1,null,null,zN),Q()),t&2){let A=p();u(),Oe(A.uiEvent.functionCalls),u(3),Oe(A.uiEvent.functionCalls)}}function ZkA(t,e){if(t&1){let A=hA();B(0,"app-computer-action",16),U("clickEvent",function(n){T(A);let o=p(3);return J(o.clickEvent.emit(n))}),Q()}if(t&2){let A=p().$implicit,i=p(2);H("functionResponse",A)("allMessages",i.uiEvents)("index",i.index)}}function XkA(t,e){if(t&1&&QA(0,"app-hover-info-button",5),t&2){let A=p().$implicit;H("icon","check")("text",A.name)("tooltipContent",A.response||"")("tooltipTitle","Function Response")}}function $kA(t,e){if(t&1&&O(0,ZkA,1,3,"app-computer-action",15)(1,XkA,1,4,"app-hover-info-button",5),t&2){let A=e.$implicit,i=p(2);Y(i.isComputerUseResponse(A)?0:1)}}function AxA(t,e){if(t&1&&Je(0,$kA,2,1,null,null,hi),t&2){let A=p();Oe(A.uiEvent.functionResponses)}}function exA(t,e){if(t&1&&QA(0,"app-hover-info-button",5),t&2){let A=p(),i=zn(9);H("icon","data_object")("text","State: "+i.join(", "))("tooltipContent",A.getFilteredStateDelta(A.uiEvent.stateDelta))("tooltipTitle","State Update")}}function txA(t,e){if(t&1&&QA(0,"app-hover-info-button",5),t&2){let A=p();H("icon","attachment")("text","Artifact")("tooltipContent",A.uiEvent.artifactDelta)("tooltipTitle","Artifact")}}function ixA(t,e){if(t&1&&QA(0,"app-content-bubble",6),t&2){let A=p();H("uiEvent",A.uiEvent)}}function nxA(t,e){if(t&1&&QA(0,"app-hover-info-button",5),t&2){let A=p();H("icon","route")("text","route: "+A.String(A.uiEvent.route))("tooltipContent",A.uiEvent.route)("tooltipTitle","Route")}}function oxA(t,e){if(t&1){let A=hA();B(0,"button",17),U("click",function(n){T(A);let o=p();return J(o.agentStateClick.emit({event:n,index:o.index}))}),B(1,"mat-icon"),y(2,"account_tree"),Q(),y(3," Agent State "),Q()}if(t&2){let A=p();H("appWorkflowGraphTooltip",A.getWorkflowNodes())("agentGraphData",A.agentGraphData)("nodePath",A.uiEvent.nodePath)("allNodes",A.allWorkflowNodes)}}function axA(t,e){if(t&1&&QA(0,"app-hover-info-button",8),t&2){let A=p();H("icon","check_circle")("text",A.getEndOfAgentAuthor()+" completed!")}}function rxA(t,e){if(t&1){let A=hA();B(0,"app-long-running-response",19),U("responseComplete",function(n){T(A);let o=p(3);return J(o.longRunningResponseComplete.emit(n))}),Q()}if(t&2){let A=p().$implicit,i=p(2);H("functionCall",A)("appName",i.appName)("userId",i.userId)("sessionId",i.sessionId)}}function sxA(t,e){if(t&1&&O(0,rxA,1,4,"app-long-running-response",18),t&2){let A=e.$implicit,i=p(2);Y(A.needsResponse&&!i.hasFunctionResponse(A.id)?0:-1)}}function lxA(t,e){if(t&1&&Je(0,sxA,1,1,null,null,zN),t&2){let A=p();Oe(A.uiEvent.functionCalls)}}function gxA(t,e){if(t&1&&(B(0,"div",9)(1,"span",20),y(2),Q()()),t&2){let A=p();H("ngClass",U0(2,TkA,A.uiEvent.evalStatus===1,A.uiEvent.evalStatus===2)),u(2),lA(A.uiEvent.evalStatus===1?A.i18n.evalPassLabel:A.uiEvent.evalStatus===2?A.i18n.evalFailLabel:"")}}function cxA(t,e){if(t&1){let A=hA();B(0,"div")(1,"span",21),U("click",function(){T(A);let n=p(2);return J(n.editEvalCaseMessage.emit(n.uiEvent))}),y(2," edit "),Q(),B(3,"span",21),U("click",function(){T(A);let n=p(2);return J(n.deleteEvalCaseMessage.emit({message:n.uiEvent,index:n.index}))}),y(4," delete "),Q()()}if(t&2){let A=p(2);u(),H("ngClass",Ks(4,HN,A.isEvalCaseEditing))("matTooltip",A.i18n.editEvalMessageTooltip),u(2),H("ngClass",Ks(6,HN,A.isEvalCaseEditing))("matTooltip",A.i18n.deleteEvalMessageTooltip)}}function CxA(t,e){if(t&1){let A=hA();B(0,"div")(1,"span",21),U("click",function(){T(A);let n=p(2);return J(n.editFunctionArgs.emit(n.uiEvent))}),y(2," edit "),Q()()}if(t&2){let A=p(2);u(),H("ngClass",Ks(2,HN,A.isEvalCaseEditing))("matTooltip",A.i18n.editFunctionArgsTooltip)}}function IxA(t,e){if(t&1&&O(0,cxA,5,8,"div")(1,CxA,3,4,"div"),t&2){let A=p();Y(A.uiEvent.text?0:A.isEditFunctionArgsEnabled&&A.uiEvent.functionCalls&&A.uiEvent.functionCalls.length>0?1:-1)}}var EQ=class t{uiEvent;index;uiEvents=[];appName="";userId="";sessionId="";sessionName="";evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;isEditFunctionArgsEnabled=!1;userEditEvalCaseMessage="";agentGraphData=null;allWorkflowNodes=null;handleKeydown=new LA;cancelEditMessage=new LA;saveEditMessage=new LA;userEditEvalCaseMessageChange=new LA;openViewImageDialog=new LA;openBase64InNewTab=new LA;editEvalCaseMessage=new LA;deleteEvalCaseMessage=new LA;editFunctionArgs=new LA;clickEvent=new LA;longRunningResponseComplete=new LA;agentStateClick=new LA;i18n=w(UI);Object=Object;String=String;shouldShowMessageCard(e){return!!(e.text||e.attachments||e.inlineData||e.executableCode||e.codeExecutionResult||e.a2uiData||e.renderedContent||e.isLoading||e.failedMetric&&e.evalStatus===2||e.event?.content?.parts?.some(A=>A.fileData))}isComputerUseClick(e){return dQ(e)}isComputerUseResponse(e){return F0(e)}getFilteredStateKeys(e){return e?Object.keys(e).filter(A=>A!=="__llm_request_key__"):[]}getFilteredStateDelta(e){if(!e)return null;let A=gA({},e);return delete A.__llm_request_key__,A}hasWorkflowNodes(){let e=this.uiEvent.event?.actions?.agentState?.nodes;return!!e&&Object.keys(e).length>0}getWorkflowNodes(){return this.uiEvent.event?.actions?.agentState?.nodes||null}hasEndOfAgent(){return this.uiEvent.event?.actions?.endOfAgent===!0}getEndOfAgentAuthor(){return this.uiEvent.event?.author||"Agent"}hasFunctionResponse(e){return e?this.uiEvents.some(A=>A.functionResponses?.some(i=>i.id===e)):!1}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-event-content"]],inputs:{uiEvent:"uiEvent",index:"index",uiEvents:"uiEvents",appName:"appName",userId:"userId",sessionId:"sessionId",sessionName:"sessionName",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",userEditEvalCaseMessage:"userEditEvalCaseMessage",agentGraphData:"agentGraphData",allWorkflowNodes:"allWorkflowNodes"},outputs:{handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",clickEvent:"clickEvent",longRunningResponseComplete:"longRunningResponseComplete",agentStateClick:"agentStateClick"},decls:19,vars:18,consts:[[3,"type","role","evalStatus","uiEvent","userEditEvalCaseMessage"],["type","output",3,"uiEvent"],["type","transcription","role","user",3,"uiEvent"],["type","transcription","role","bot",3,"uiEvent"],[1,"event-chips-container"],[3,"icon","text","tooltipContent","tooltipTitle"],["type","error",3,"uiEvent"],["mat-stroked-button","",1,"event-action-button",3,"appWorkflowGraphTooltip","agentGraphData","nodePath","allNodes"],[3,"icon","text"],[3,"ngClass"],[3,"userEditEvalCaseMessageChange","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","type","role","evalStatus","uiEvent","userEditEvalCaseMessage"],[1,"function-calls-buttons"],[1,"function-calls-previews"],[3,"functionCall","allMessages","index"],[3,"clickEvent","openImage","functionCall","allMessages","index"],[3,"functionResponse","allMessages","index"],[3,"clickEvent","functionResponse","allMessages","index"],["mat-stroked-button","",1,"event-action-button",3,"click","appWorkflowGraphTooltip","agentGraphData","nodePath","allNodes"],[3,"functionCall","appName","userId","sessionId"],[3,"responseComplete","functionCall","appName","userId","sessionId"],[2,"font-family","monospace"],[1,"material-symbols-outlined","eval-case-edit-button",3,"click","ngClass","matTooltip"]],template:function(A,i){if(A&1&&(O(0,JkA,1,5,"app-content-bubble",0),O(1,OkA,1,1,"app-content-bubble",1),O(2,YkA,1,1,"app-content-bubble",2),O(3,HkA,1,1,"app-content-bubble",3),B(4,"div",4),O(5,zkA,1,4,"app-hover-info-button",5),O(6,PkA,1,4,"app-hover-info-button",5),O(7,WkA,6,0),O(8,AxA,2,0),ta(9),O(10,exA,1,4,"app-hover-info-button",5),O(11,txA,1,4,"app-hover-info-button",5),O(12,ixA,1,1,"app-content-bubble",6),O(13,nxA,1,4,"app-hover-info-button",5),O(14,oxA,4,4,"button",7),O(15,axA,1,2,"app-hover-info-button",8),Q(),O(16,lxA,2,0),O(17,gxA,3,5,"div",9),O(18,IxA,2,1)),A&2){Y(i.shouldShowMessageCard(i.uiEvent)?0:-1),u(),Y(i.uiEvent.event.output?1:-1),u(),Y(i.uiEvent.event.inputTranscription?2:-1),u(),Y(i.uiEvent.event.outputTranscription?3:-1),u(2),Y(i.uiEvent.event.turnComplete?5:-1),u(),Y(i.uiEvent.event.interrupted?6:-1),u(),Y(i.uiEvent.functionCalls&&i.uiEvent.functionCalls.length>0?7:-1),u(),Y(i.uiEvent.functionResponses&&i.uiEvent.functionResponses.length>0?8:-1),u();let n=ga(i.getFilteredStateKeys(i.uiEvent.stateDelta));u(),Y(n.length>0?10:-1),u(),Y(i.uiEvent.artifactDelta?11:-1),u(),Y(i.uiEvent.error?12:-1),u(),Y(i.uiEvent.route?13:-1),u(),Y(i.hasWorkflowNodes()?14:-1),u(),Y(i.hasEndOfAgent()?15:-1),u(),Y(i.uiEvent.functionCalls&&i.uiEvent.functionCalls.length>0?16:-1),u(),Y(i.uiEvent.evalStatus===1||i.uiEvent.evalStatus===2?17:-1),u(),Y(i.evalCase&&i.isEvalEditMode?18:-1)}},dependencies:[si,zl,Tn,Wt,qi,pi,Fa,dn,Ty,Jy,Hy,Oy,Py],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;width:100%}app-content-bubble[_ngcontent-%COMP%] + app-content-bubble[_ngcontent-%COMP%]{margin-top:5px}.event-chips-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;width:100%}.user[_nghost-%COMP%] .event-chips-container[_ngcontent-%COMP%], .user [_nghost-%COMP%] .event-chips-container[_ngcontent-%COMP%]{justify-content:flex-end}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:#2e7d32}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--mat-sys-error)}.hidden[_ngcontent-%COMP%]{visibility:hidden}.event-action-button[_ngcontent-%COMP%]{margin:5px}.function-calls-previews[_ngcontent-%COMP%]{width:100%}"]})};function dxA(t,e){if(t&1&&QA(0,"app-chat-avatar",1),t&2){let A=p();H("role",A.uiEvent.event.content?"bot":"node")("author",A.uiEvent.author)("nodePath",A.uiEvent.nodePath)}}function BxA(t,e){t&1&&QA(0,"app-chat-avatar",3)}function ExA(t,e){if(t&1&&QA(0,"app-message-feedback",4),t&2){let A=p();H("sessionName",A.sessionName)("eventId",A.uiEvent.event.id||"")}}var jy=class t{uiEvent;index;uiEvents=[];isSelected=!1;isSelectable=!0;appName="";userId="";sessionId="";sessionName="";evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;isEditFunctionArgsEnabled=!1;userEditEvalCaseMessage="";agentGraphData=null;allWorkflowNodes=null;isUserFeedbackEnabled=!1;isLoadingAgentResponse=!1;rowClick=new LA;handleKeydown=new LA;cancelEditMessage=new LA;saveEditMessage=new LA;userEditEvalCaseMessageChange=new LA;openViewImageDialog=new LA;openBase64InNewTab=new LA;editEvalCaseMessage=new LA;deleteEvalCaseMessage=new LA;editFunctionArgs=new LA;clickEvent=new LA;longRunningResponseComplete=new LA;agentStateClick=new LA;onRowClick(e){this.isSelectable&&this.rowClick.emit({event:e,uiEvent:this.uiEvent,index:this.index})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-event-row"]],hostAttrs:[1,"message-row-container"],hostVars:8,hostBindings:function(A,i){A&1&&U("click",function(o){return i.onRowClick(o)}),A&2&&RA("selected",i.isSelected)("user",i.uiEvent.role==="user")("bot",i.uiEvent.role==="bot")("selectable",i.isSelectable)},inputs:{uiEvent:"uiEvent",index:"index",uiEvents:"uiEvents",isSelected:"isSelected",isSelectable:"isSelectable",appName:"appName",userId:"userId",sessionId:"sessionId",sessionName:"sessionName",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",userEditEvalCaseMessage:"userEditEvalCaseMessage",agentGraphData:"agentGraphData",allWorkflowNodes:"allWorkflowNodes",isUserFeedbackEnabled:"isUserFeedbackEnabled",isLoadingAgentResponse:"isLoadingAgentResponse"},outputs:{rowClick:"rowClick",handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",clickEvent:"clickEvent",longRunningResponseComplete:"longRunningResponseComplete",agentStateClick:"agentStateClick"},decls:6,vars:20,consts:[[1,"event-number-container"],[3,"role","author","nodePath"],[1,"message-content",3,"userEditEvalCaseMessageChange","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","clickEvent","longRunningResponseComplete","agentStateClick","uiEvent","index","uiEvents","appName","userId","sessionId","sessionName","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userEditEvalCaseMessage","agentGraphData","allWorkflowNodes"],["role","user"],[3,"sessionName","eventId"]],template:function(A,i){A&1&&(B(0,"div",0),y(1),Q(),O(2,dxA,1,3,"app-chat-avatar",1),B(3,"app-event-content",2),U("userEditEvalCaseMessageChange",function(o){return i.userEditEvalCaseMessageChange.emit(o)})("handleKeydown",function(o){return i.handleKeydown.emit(o)})("cancelEditMessage",function(o){return i.cancelEditMessage.emit(o)})("saveEditMessage",function(o){return i.saveEditMessage.emit(o)})("openViewImageDialog",function(o){return i.openViewImageDialog.emit(o)})("openBase64InNewTab",function(o){return i.openBase64InNewTab.emit(o)})("editEvalCaseMessage",function(o){return i.editEvalCaseMessage.emit(o)})("deleteEvalCaseMessage",function(o){return i.deleteEvalCaseMessage.emit(o)})("editFunctionArgs",function(o){return i.editFunctionArgs.emit(o)})("clickEvent",function(o){return i.clickEvent.emit(o)})("longRunningResponseComplete",function(o){return i.longRunningResponseComplete.emit(o)})("agentStateClick",function(o){return i.agentStateClick.emit(o)}),Q(),O(4,BxA,1,0,"app-chat-avatar",3),O(5,ExA,1,2,"app-message-feedback",4)),A&2&&(RA("hidden",!i.isSelectable),u(),ue(" #",i.index+1," "),u(),Y(i.uiEvent.role==="bot"&&!i.uiEvent.isLoading?2:-1),u(),H("uiEvent",i.uiEvent)("index",i.index)("uiEvents",i.uiEvents)("appName",i.appName)("userId",i.userId)("sessionId",i.sessionId)("sessionName",i.sessionName)("evalCase",i.evalCase)("isEvalEditMode",i.isEvalEditMode)("isEvalCaseEditing",i.isEvalCaseEditing)("isEditFunctionArgsEnabled",i.isEditFunctionArgsEnabled)("userEditEvalCaseMessage",i.userEditEvalCaseMessage)("agentGraphData",i.agentGraphData)("allWorkflowNodes",i.allWorkflowNodes),u(),Y(i.uiEvent.role==="user"?4:-1),u(),Y(i.isUserFeedbackEnabled&&!i.isLoadingAgentResponse&&i.uiEvent.role==="bot"?5:-1))},dependencies:[si,Ky,Ly,EQ],styles:[".generated-image-container[_ngcontent-%COMP%]{max-width:400px;margin-left:20px}.generated-image[_ngcontent-%COMP%]{max-width:100%;min-width:40px;border-radius:8px}.html-artifact-container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:flex-start;align-items:center}app-content-bubble[_ngcontent-%COMP%] + app-content-bubble[_ngcontent-%COMP%]{margin-top:5px}.event-chips-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;width:100%}[_nghost-%COMP%]{display:flex;flex-direction:row;flex-wrap:nowrap;margin-left:-20px;margin-right:-20px;padding:4px 20px;border:2px solid transparent;border-radius:4px;transition:all .2s ease}.selectable[_nghost-%COMP%]:hover{border-color:var(--mat-sys-outline-variant, rgba(0, 0, 0, .12))}.selected[_nghost-%COMP%]{background-color:var(--mat-sys-secondary-container, rgba(0, 0, 0, .08))!important}app-message-feedback[_ngcontent-%COMP%]{width:100%}.user[_nghost-%COMP%]{justify-content:flex-end;align-items:flex-start;gap:15px}.bot[_nghost-%COMP%]{align-items:flex-start;padding-right:48px}.bot[_nghost-%COMP%] app-chat-avatar[_ngcontent-%COMP%]{align-self:flex-start}.message-content[_ngcontent-%COMP%]{display:contents}.bot[_nghost-%COMP%] > .message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-width:0;align-items:flex-start}.user[_nghost-%COMP%] > .message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-width:0;align-items:flex-end}.bot[_nghost-%COMP%]:focus-within app-content-bubble[_ngcontent-%COMP%] .content-bubble{border:1px solid var(--mat-sys-outline)}.message-textarea[_ngcontent-%COMP%]{max-width:100%;border:none;background-color:transparent;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}app-content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}app-content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--mat-sys-outline-variant);padding-right:8px;min-width:350px;max-width:350px}app-content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}app-content-bubble[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--mat-sys-outline-variant);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.header-actual[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:#2e7d32}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--mat-sys-error)}.hidden[_ngcontent-%COMP%]{visibility:hidden}.image-preview-chat[_ngcontent-%COMP%]{max-width:90%;max-height:70vh;width:auto;height:auto;border-radius:8px;cursor:pointer;transition:transform .2s ease-in-out}.attachment[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .message-text p{white-space:pre-line;word-break:break-word;overflow-wrap:break-word}.event-number-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-self:flex-start;min-width:30px;margin-top:10px;margin-right:8px;font-size:12px;font-weight:600;text-align:center;color:var(--mat-sys-on-surface-variant)}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.link-style-button[_ngcontent-%COMP%]{border:none;padding:0;font:inherit;color:var(--mat-sys-primary)!important;text-decoration:underline;cursor:pointer;outline:none;font-size:14px}.cancel-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-outline-variant);cursor:pointer;margin-right:16px}.save-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-primary);cursor:pointer;margin-right:16px}"]})};function hxA(t,e){if(t&1){let A=hA();B(0,"button",3),U("click",function(){T(A);let n=p();return J(n.toggleVideoRecording.emit())}),B(1,"mat-icon"),y(2,"videocam"),Q()(),B(3,"div",4),QA(4,"div",5)(5,"div",5)(6,"div",5)(7,"div",5),Q()}if(t&2){let A=p();RA("recording",A.isVideoRecording),H("matTooltip",A.isVideoRecording?A.i18n.turnOffCamTooltip:A.i18n.useCamTooltip)("disabled",!A.isBidiStreamingEnabled),u(4),ut("height",4+A.micVolume*16,"px"),u(),ut("height",4+A.micVolume*24,"px"),u(),ut("height",4+A.micVolume*18,"px"),u(),ut("height",4+A.micVolume*14,"px")}}function QxA(t,e){if(t&1){let A=hA();B(0,"div",2)(1,"div",6),y(2,"Live Flags"),Q(),B(3,"div",7)(4,"mat-checkbox",8),U("change",function(n){T(A);let o=p();return J(o.flags.proactiveAudio=n.checked)}),y(5,"Proactive Audio"),Q()(),B(6,"div",7)(7,"mat-checkbox",8),U("change",function(n){T(A);let o=p();return J(o.flags.enableAffectiveDialog=n.checked)}),y(8,"Affective Dialog"),Q()(),B(9,"div",7)(10,"mat-checkbox",8),U("change",function(n){T(A);let o=p();return J(o.flags.enableSessionResumption=n.checked)}),y(11,"Session Resumption"),Q()(),B(12,"div",7)(13,"mat-checkbox",8),U("change",function(n){T(A);let o=p();return J(o.flags.saveLiveBlob=n.checked)}),y(14,"Save Live Blob"),Q()()()}if(t&2){let A=p();u(4),H("checked",A.flags.proactiveAudio)("matTooltip",A.i18n.proactiveAudioTooltip),u(3),H("checked",A.flags.enableAffectiveDialog)("matTooltip",A.i18n.affectiveDialogTooltip),u(3),H("checked",A.flags.enableSessionResumption)("matTooltip",A.i18n.sessionResumptionTooltip),u(3),H("checked",A.flags.saveLiveBlob)("matTooltip",A.i18n.saveLiveBlobTooltip)}}var qy=class t{get inCall(){return this.isAudioRecording}isAudioRecording=!1;isVideoRecording=!1;micVolume=0;isBidiStreamingEnabled=!1;toggleAudioRecording=new LA;toggleVideoRecording=new LA;i18n=w(UI);showFlags=!1;flags={proactiveAudio:!1,enableAffectiveDialog:!1,enableSessionResumption:!1,saveLiveBlob:!1};onCallClick(){this.showFlags=!1,this.toggleAudioRecording.emit(this.flags)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-call-controls"]],hostVars:2,hostBindings:function(A,i){A&2&&RA("in-call",i.inCall)},inputs:{isAudioRecording:"isAudioRecording",isVideoRecording:"isVideoRecording",micVolume:"micVolume",isBidiStreamingEnabled:"isBidiStreamingEnabled"},outputs:{toggleAudioRecording:"toggleAudioRecording",toggleVideoRecording:"toggleVideoRecording"},decls:6,vars:6,consts:[[1,"call-btn-container",3,"mouseenter","mouseleave"],["mat-icon-button","",1,"audio-rec-btn",3,"click","disabled"],[1,"flags-panel"],["mat-icon-button","",1,"video-rec-btn",3,"click","matTooltip","disabled"],[1,"mic-visualizer"],[1,"bar"],[1,"flags-title"],[1,"flag-item"],["matTooltipPosition","left",3,"change","checked","matTooltip"]],template:function(A,i){A&1&&(O(0,hxA,8,12),B(1,"div",0),U("mouseenter",function(){return i.showFlags=!0})("mouseleave",function(){return i.showFlags=!1}),B(2,"button",1),U("click",function(){return i.onCallClick()}),B(3,"mat-icon"),y(4),Q()(),O(5,QxA,15,8,"div",2),Q()),A&2&&(Y(i.isAudioRecording?0:-1),u(2),RA("recording",i.isAudioRecording),H("disabled",!i.isBidiStreamingEnabled),u(2),lA(i.isAudioRecording?"call_end":"call"),u(),Y(i.showFlags&&!i.isAudioRecording?5:-1))},dependencies:[si,qi,ji,Tn,Wt,Fa,dn,AO,tc],styles:['[_nghost-%COMP%]{display:flex;align-items:center;gap:4px;border-radius:28px;transition:all .2s ease}.in-call[_nghost-%COMP%]{background-color:var(--mat-sys-surface-variant)}button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)!important}button.recording[_ngcontent-%COMP%]{background-color:var(--mat-sys-error)!important;color:var(--mat-sys-on-error, #ffffff)!important}button.audio-rec-btn[_ngcontent-%COMP%]:not(.recording){color:#34a853!important}.mic-visualizer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:3px;height:24px;margin-right:8px;width:24px}.mic-visualizer[_ngcontent-%COMP%] .bar[_ngcontent-%COMP%]{width:4px;background-color:#34a853;border-radius:2px;transition:height .1s ease-out}.call-btn-container[_ngcontent-%COMP%]{position:relative;display:inline-block}.flags-panel[_ngcontent-%COMP%]{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;background:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:12px;padding:12px;box-shadow:0 4px 20px #00000026;z-index:100;width:250px;display:flex;flex-direction:column;gap:8px;animation:_ngcontent-%COMP%_fadeIn .2s ease-out}.flags-panel[_ngcontent-%COMP%]:before{content:"";position:absolute;bottom:-8px;left:0;right:0;height:8px;background:transparent}.flags-panel[_ngcontent-%COMP%] .flags-title[_ngcontent-%COMP%]{font-weight:600;font-size:14px;color:var(--mat-sys-on-surface);margin-bottom:4px}.flags-panel[_ngcontent-%COMP%] .flag-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--mat-sys-on-surface-variant)}.flags-panel[_ngcontent-%COMP%] .flag-item[_ngcontent-%COMP%] .flag-label[_ngcontent-%COMP%]{font-weight:500}.flags-panel[_ngcontent-%COMP%] .flag-item[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{--mdc-checkbox-state-layer-size: 30px}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}']})};var uxA=t=>({$implicit:t});function fxA(t,e){t&1&&QA(0,"div",9)}function pxA(t,e){if(t&1&&(B(0,"span",15),y(1),Q()),t&2){let A=p(2).$implicit,i=p();ut("right",100-i.getRelativeStart(A.span),"%"),u(),lA(i.formatDuration(A.span.end_time-A.span.start_time))}}function mxA(t,e){if(t&1){let A=hA();B(0,"div",6),U("click",function(){T(A);let n=p().$implicit,o=p();return J(o.selectRow(n))}),B(1,"div",7)(2,"div",8),Je(3,fxA,1,0,"div",9,ws),Q(),B(5,"span",10),y(6),Q(),B(7,"div",11),y(8),Q()(),B(9,"div",12)(10,"div",13),y(11),Q(),O(12,pxA,2,3,"span",14),Q()()}if(t&2){let A=p().$implicit,i=p(),n=Qi(12);RA("selected",i.rowSelected(A)),H("id",NQ("trace-node-",A.span.span_id))("appHtmlTooltip",n)("appHtmlTooltipContext",Ks(19,uxA,i.getUiEvent(A)))("appHtmlTooltipDisabled",!i.getUiEvent(A)),u(3),Oe(i.getArray(A.level)),u(2),RA("is-event-row",i.isEventRow(A)),u(),ue(" ",i.getSpanIcon(A.span.name)," "),u(),RA("is-event-row",i.isEventRow(A)),u(),ue(" ",i.formatSpanName(A.span.name)," "),u(2),ut("left",i.getRelativeStart(A.span),"%")("width",i.getRelativeWidth(A.span),"%"),u(),ue(" ",i.formatDuration(A.span.end_time-A.span.start_time)," "),u(),Y(i.getRelativeWidth(A.span)<10?12:-1)}}function wxA(t,e){if(t&1&&O(0,mxA,13,21,"div",5),t&2){let A=e.$implicit,i=p();Y(i.shouldShowNode(A)?0:-1)}}function DxA(t,e){if(t&1&&(B(0,"div",16),QA(1,"app-event-content",17),Q()),t&2){let A=p().$implicit;u(),H("uiEvent",A)("index",0)}}function yxA(t,e){if(t&1&&O(0,DxA,2,2,"div",16),t&2){let A=e.$implicit;Y(A?0:-1)}}var Vy=class t{spans=[];invocationId="";uiEvents=[];shouldShowEvent;tree=[];baseStartTimeMs=0;totalDurationMs=1;rootLatencyNanos=0;flatTree=[];shouldShowNode(e){let A=this.getUiEvent(e);return A&&this.shouldShowEvent?this.shouldShowEvent(A):!0}traceLabelIconMap=new Map([["Invocation","start"],["agent_run","robot"],["invoke_agent","robot_2"],["tool","build"],["execute_tool","build"],["call_llm","chat"]]);selectedRow=void 0;traceService=w(Ag);constructor(){}selectRootSpan(){if(this.tree&&this.tree.length>0){if(this.selectedRow&&this.selectedRow.span_id===this.tree[0].span_id)return;this.traceService.selectedRow(this.tree[0])}}isRootSpanSelected(){return!this.selectedRow||!this.tree||this.tree.length===0?!1:String(this.selectedRow.span_id)===String(this.tree[0].span_id)}ngOnInit(){this.rebuildTree(),this.traceService.selectedTraceRow$.subscribe(e=>{this.selectedRow=e,e&&setTimeout(()=>{let A=document.getElementById("trace-node-"+e.span_id);A&&A.scrollIntoView({behavior:"smooth",block:"nearest"})},50)})}ngOnChanges(e){e.spans&&!e.spans.isFirstChange()&&this.rebuildTree()}rebuildTree(){if(!this.spans||this.spans.length===0){this.tree=[],this.flatTree=[],this.rootLatencyNanos=0;return}this.tree=this.buildSpanTree(this.spans),this.flatTree=[],this.tree.forEach(A=>{A.children&&this.flatTree.push(...this.flattenTree(A.children,0))});let e=this.getGlobalTimes(this.spans);this.baseStartTimeMs=e.start,this.totalDurationMs=e.duration,this.tree&&this.tree.length>0?this.rootLatencyNanos=this.tree[0].end_time-this.tree[0].start_time:this.rootLatencyNanos=0}buildSpanTree(e){let A=e.map(o=>gA({},o)),i=new Map,n=[];return A.forEach(o=>i.set(o.span_id,o)),A.forEach(o=>{if(o.parent_span_id&&i.has(o.parent_span_id)){let a=i.get(o.parent_span_id);a.children=a.children||[],a.children.push(o)}else n.push(o)}),n}getGlobalTimes(e){let A=Math.min(...e.map(n=>this.toMs(n.start_time))),i=Math.max(...e.map(n=>this.toMs(n.end_time)));return{start:A,duration:i-A}}toMs(e){return e/1e6}formatDuration(e){if(e===0)return"0us";if(e<1e3)return`${e}ns`;if(e<1e6)return`${(e/1e3).toFixed(2)}us`;if(e<1e9)return`${(e/1e6).toFixed(2)}ms`;if(e<6e10)return`${(e/1e9).toFixed(2)}s`;let A=Math.floor(e/6e10),i=(e%6e10/1e9).toFixed(2);return`${A}m ${i}s`}getRelativeStart(e){return(this.toMs(e.start_time)-this.baseStartTimeMs)/this.totalDurationMs*100}getRelativeWidth(e){return(this.toMs(e.end_time)-this.toMs(e.start_time))/this.totalDurationMs*100}flattenTree(e,A=0){return e.flatMap(n=>[{span:n,level:A},...n.children?this.flattenTree(n.children,A+1):[]])}getSpanIcon(e){for(let[A,i]of this.traceLabelIconMap.entries())if(e.startsWith(A))return i;return"start"}formatSpanName(e){return e.startsWith("invoke_agent ")||e.startsWith("execute_tool ")?e.substring(13):e}getArray(e){return Array.from({length:e})}selectRow(e){this.selectedRow&&this.selectedRow.span_id==e.span.span_id||this.traceService.selectedRow(e.span)}rowSelected(e){return!this.selectedRow||!e?.span?!1:String(this.selectedRow.span_id)===String(e.span.span_id)}isEventRow(e){if(!e.span.attributes)return!1;let A=e?.span.attributes["gcp.vertex.agent.event_id"];return A&&this.uiEvents&&this.uiEvents.length>0?this.uiEvents.some(i=>i.event?.id===A):!1}getEventId(e){return e?.span?.attributes?.["gcp.vertex.agent.event_id"]??""}getUiEvent(e){let A=this.getEventId(e);return A&&this.uiEvents&&this.uiEvents.length>0&&this.uiEvents.find(i=>i.event?.id===A)||null}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-trace-tree"]],inputs:{spans:"spans",invocationId:"invocationId",uiEvents:"uiEvents",shouldShowEvent:"shouldShowEvent"},features:[Yt],decls:13,vars:6,consts:[["eventTooltip",""],[1,"invocation-id-container",3,"click"],[1,"invocation-id",3,"matTooltip"],[1,"total-latency"],[1,"trace-container"],[1,"trace-row",3,"selected","id","appHtmlTooltip","appHtmlTooltipContext","appHtmlTooltipDisabled"],[1,"trace-row",3,"click","id","appHtmlTooltip","appHtmlTooltipContext","appHtmlTooltipDisabled"],[1,"trace-row-left"],[1,"trace-indent"],[1,"indent-connector"],[1,"material-symbols-outlined",2,"margin-right","8px"],[1,"trace-label"],[1,"trace-bar-container"],[1,"trace-bar"],[1,"short-trace-bar-duration",3,"right"],[1,"short-trace-bar-duration"],[1,"event-tooltip-container"],[3,"uiEvent","index"]],template:function(A,i){A&1&&(B(0,"div")(1,"div",1),U("click",function(){return i.selectRootSpan()}),B(2,"span"),y(3,"Invocation ID: "),Q(),B(4,"div",2),y(5),Q(),B(6,"span",3),y(7),Q()(),B(8,"div",4),Je(9,wxA,1,1,null,null,hi),Q()(),Et(11,yxA,1,1,"ng-template",null,0,$C)),A&2&&(u(),RA("selected",i.isRootSpanSelected()),te("id",i.tree&&i.tree.length>0?"trace-node-"+i.tree[0].span_id:null),u(3),H("matTooltip",i.invocationId),u(),lA(i.invocationId),u(2),ue("Total latency: ",i.formatDuration(i.rootLatencyNanos)),u(2),Oe(i.flatTree))},dependencies:[qi,Tn,Fa,dn,Fy,EQ],styles:[".trace-container[_ngcontent-%COMP%]{white-space:nowrap;font-size:12px;overflow-x:auto;padding:8px}.trace-label[_ngcontent-%COMP%]{color:var(--trace-label-color, #e3e3e3);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:12px}.trace-bar-container[_ngcontent-%COMP%]{position:relative;height:18px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--mat-sys-primary);border-radius:4px;padding-left:6px;box-sizing:border-box;overflow:hidden;font-size:11px;line-height:18px;color:var(--mat-sys-on-primary);font-family:Google Sans;transition:background-color .2s,color .2s}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-duration-color, #888);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;position:relative;height:32px}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:#ccc}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:#ccc}.trace-label[_ngcontent-%COMP%]{flex:1;min-width:0;font-size:13px}.trace-bar-container[_ngcontent-%COMP%]{flex:1;min-width:0}.short-trace-bar-duration[_ngcontent-%COMP%]{position:absolute;color:var(--trace-tree-short-trace-bar-duration-color);padding-right:6px}.trace-row[_ngcontent-%COMP%]{align-items:center;cursor:pointer;scroll-margin-top:40px}.trace-row[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant, rgba(0, 0, 0, .04))}.trace-row.selected[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container, rgba(0, 0, 0, .08))}.trace-row-left[_ngcontent-%COMP%]{display:flex;min-width:250px;width:20%;max-width:350px}.invocation-id-container[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:11px;font-weight:600;letter-spacing:.3px;margin-bottom:6px;padding:8px 12px;border-radius:12px 12px 0 0;background-color:var(--mat-sys-surface);display:flex;width:100%;box-sizing:border-box;align-items:center;position:sticky;top:-20px;z-index:10;box-shadow:0 2px 4px #0000000d;cursor:pointer}.invocation-id-container[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant)}.invocation-id-container.selected[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container, rgba(0, 0, 0, .08))}.invocation-id-container[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]:first-child{opacity:.8;margin-right:6px;text-transform:uppercase}.invocation-id[_ngcontent-%COMP%]{font-family:Google Sans Mono,Roboto Mono,monospace;padding:2px 6px;border-radius:4px;color:var(--mat-sys-on-surface)}.total-latency[_ngcontent-%COMP%]{margin-left:auto;background:transparent;color:var(--mat-sys-on-surface);padding:2px 8px;font-size:11px;font-weight:600;letter-spacing:.2px}.trace-row-left[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .trace-row-left[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-span-div-color)}.trace-row-left[_ngcontent-%COMP%] .is-event-row[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-is-event-row-color)}.event-tooltip-container[_ngcontent-%COMP%]{max-width:800px;max-height:200px;overflow:auto;padding:8px;background:var(--mat-sys-surface-container-low, #202124);color:var(--mat-sys-on-surface, #e8eaed);border-radius:8px;box-shadow:0 4px 16px #00000080;border:1px solid var(--mat-sys-outline-variant, rgba(255, 255, 255, .1))}.event-tooltip-container[_ngcontent-%COMP%] app-content-bubble{max-height:160px;overflow-y:auto;display:block}"]})};var vxA=["videoContainer"],bxA=["autoScroll"],MxA=["messageTextarea"],SxA=t=>({text:t,thought:!1}),RtA=()=>[],kxA=(t,e)=>e.metricName;function xxA(t,e){t&1&&(B(0,"span",14),y(1,"PASS"),Q())}function _xA(t,e){t&1&&(B(0,"span",15),y(1,"FAIL"),Q())}function RxA(t,e){if(t&1&&(B(0,"span",21),y(1),Q()),t&2){let A=e.$implicit;ut("color",A.evalStatus==1?"var(--app-color-success)":"var(--app-color-error)"),u(),ba(" ",A.metricName,": ",A.score," ")}}function NxA(t,e){if(t&1&&(B(0,"div")(1,"span",17),y(2,"Metrics"),Q(),B(3,"div",19),Je(4,RxA,2,4,"span",20,kxA),Q()()),t&2){p();let A=zn(0);u(4),Oe(A.overallEvalMetricResults)}}function FxA(t,e){if(t&1&&(ta(0),B(1,"div",8)(2,"div",11)(3,"h3",12),y(4,"Evaluation Result"),Q(),B(5,"div",13),O(6,xxA,2,0,"span",14)(7,_xA,2,0,"span",15),Q()(),B(8,"div",16)(9,"div")(10,"span",17),y(11,"Case ID"),Q(),B(12,"div",18),y(13),Q()(),B(14,"div")(15,"span",17),y(16,"Set ID"),Q(),B(17,"div",18),y(18),Q()(),O(19,NxA,6,0,"div"),Q()()),t&2){let A=ga(p(2).evalCaseResult());u(6),Y(A.finalEvalStatus==1?6:7),u(7),lA(A.evalId),u(5),lA(A.setId),u(),Y(A.overallEvalMetricResults!=null&&A.overallEvalMetricResults.length?19:-1)}}function LxA(t,e){if(t&1&&(B(0,"div",9),sn(1,22),Q()),t&2){let A=p(2);u(),H("ngComponentOutlet",A.markdownComponent)("ngComponentOutletInputs",Ks(2,SxA,A.agentReadme))}}function GxA(t,e){if(t&1&&(B(0,"div",25),QA(1,"app-trace-tree",26),Q()),t&2){let A=p().$implicit,i=p(2);ut("display",i.viewMode==="traces"?"":"none"),u(),H("spans",A.event.invocationId?i.spansByInvocationId.get(A.event.invocationId)||Rg(6,RtA):Rg(7,RtA))("invocationId",A.event.invocationId||"")("uiEvents",i.uiEvents)("shouldShowEvent",i.shouldShowEvent)}}function KxA(t,e){if(t&1){let A=hA();B(0,"app-event-row",23),U("rowClick",function(n){T(A);let o=p(2);return J(o.handleRowClick(n.event,n.uiEvent,n.index))})("handleKeydown",function(n){T(A);let o=p(2);return J(o.handleKeydown.emit(n))})("cancelEditMessage",function(n){T(A);let o=p(2);return J(o.cancelEditMessage.emit(n))})("saveEditMessage",function(n){T(A);let o=p(2);return J(o.saveEditMessage.emit(n))})("userEditEvalCaseMessageChange",function(n){T(A);let o=p(2);return J(o.userEditEvalCaseMessageChange.emit(n))})("openViewImageDialog",function(n){T(A);let o=p(2);return J(o.openViewImageDialog.emit(n))})("openBase64InNewTab",function(n){T(A);let o=p(2);return J(o.openBase64InNewTab.emit(n))})("editEvalCaseMessage",function(n){T(A);let o=p(2);return J(o.editEvalCaseMessage.emit(n))})("deleteEvalCaseMessage",function(n){T(A);let o=p(2);return J(o.deleteEvalCaseMessage.emit(n))})("editFunctionArgs",function(n){T(A);let o=p(2);return J(o.editFunctionArgs.emit(n))})("clickEvent",function(n){T(A);let o=p(2);return J(o.clickEvent.emit(n))})("longRunningResponseComplete",function(n){T(A);let o=p(2);return J(o.longRunningResponseComplete.emit(n))})("agentStateClick",function(n){T(A);let o=p(2);return J(o.handleAgentStateClick(n.event,n.index))}),Q(),O(1,GxA,2,8,"div",24)}if(t&2){let A=e.$implicit,i=e.$index,n=p(2),o=n.shouldShowEvent?n.shouldShowEvent(A):!0;ut("display",n.viewMode==="events"&&o||n.viewMode==="traces"&&A.role==="user"&&o?"":"none"),H("isSelectable",n.viewMode!=="traces")("uiEvent",A)("index",i)("uiEvents",n.uiEvents)("isSelected",n.isMessageEventSelected(i))("appName",n.appName)("userId",n.userId)("sessionId",n.sessionId)("sessionName",n.sessionName())("evalCase",n.evalCase)("isEvalEditMode",n.isEvalEditMode)("isEvalCaseEditing",n.isEvalCaseEditing)("isEditFunctionArgsEnabled",n.isEditFunctionArgsEnabled)("userEditEvalCaseMessage",n.userEditEvalCaseMessage)("agentGraphData",n.agentGraphData)("allWorkflowNodes",n.getAllWorkflowNodes(i))("isUserFeedbackEnabled",n.isUserFeedbackEnabled()??!1)("isLoadingAgentResponse",n.isLoadingAgentResponse()??!1),u(),Y(A.role==="bot"&&n.isFirstEventForInvocation(A,i)?1:-1)}}function UxA(t,e){t&1&&(B(0,"div",10),QA(1,"mat-progress-bar",27),Q())}function TxA(t,e){if(t&1){let A=hA();B(0,"div",7,0),U("scroll",function(n){T(A);let o=p();return J(o.onScroll.next(n))}),O(2,FxA,20,5,"div",8),O(3,LxA,2,4,"div",9),Je(4,KxA,2,21,null,null,hi),O(6,UxA,2,0,"div",10),Q()}if(t&2){let A=p();u(2),Y(A.showEvalSummary()&&A.evalCaseResult()?2:-1),u(),Y(A.uiEvents.length===0&&A.agentReadme?3:-1),u(),Oe(A.uiEvents),u(2),Y(A.isLoadingAgentResponse()?6:-1)}}function JxA(t,e){if(t&1){let A=hA();B(0,"div",45),QA(1,"img",46),B(2,"button",47),U("click",function(){T(A);let n=p().$index,o=p(4);return J(o.removeFile.emit(n))}),B(3,"mat-icon",48),y(4,"close"),Q()()()}if(t&2){let A=p().$implicit;u(),H("src",A.url,Go)}}function OxA(t,e){if(t&1){let A=hA();B(0,"div",44)(1,"button",47),U("click",function(){T(A);let n=p().$index,o=p(4);return J(o.removeFile.emit(n))}),B(2,"mat-icon",48),y(3,"close"),Q()(),B(4,"div",49)(5,"mat-icon"),y(6,"insert_drive_file"),Q(),B(7,"span"),y(8),Q()()()}if(t&2){let A=p().$implicit;u(8),lA(A.file.name)}}function YxA(t,e){if(t&1&&(B(0,"div"),O(1,JxA,5,1,"div",45)(2,OxA,9,1,"div",44),Q()),t&2){let A=e.$implicit;u(),Y(A.file.type.startsWith("image/")?1:A.file.type.startsWith("image/")?-1:2)}}function HxA(t,e){if(t&1){let A=hA();B(0,"div",44)(1,"button",47),U("click",function(){T(A);let n=p(4);return J(n.removeStateUpdate.emit())}),B(2,"mat-icon",48),y(3,"close"),Q()(),B(4,"div",49)(5,"span"),y(6),Q()()()}if(t&2){let A=p(4);u(6),lA(A.i18n.updatedSessionStateChipLabel)}}function zxA(t,e){if(t&1&&(B(0,"div",33),Je(1,YxA,3,1,"div",null,hi),O(3,HxA,7,1,"div",44),Q()),t&2){let A=p(3);u(),Oe(A.selectedFiles),u(2),Y(A.updatedSessionState?3:-1)}}function PxA(t,e){if(t&1){let A=hA();B(0,"div",29)(1,"input",30,1),U("change",function(n){T(A);let o=p(2);return J(o.fileSelect.emit(n))}),Q(),B(3,"div",31)(4,"mat-form-field",32),O(5,zxA,4,1,"div",33),B(6,"textarea",34,2),U("ngModelChange",function(n){T(A);let o=p(2);return J(o.userInputChange.emit(n))})("keydown.enter",function(n){T(A);let o=p(2);return J(o.sendMessage.emit(n))}),Q(),B(8,"button",35),U("click",function(n){T(A);let o=p(2);return J(o.sendMessage.emit(n))}),B(9,"mat-icon"),y(10,"send"),Q()()(),QA(11,"div",36,3),Q(),B(13,"div",37)(14,"div",38)(15,"button",39),Ht(16,"async"),U("click",function(){T(A);let n=Qi(2);return J(n.click())}),B(17,"mat-icon"),y(18,"attach_file"),Q()(),B(19,"button",40),Ht(20,"async"),B(21,"mat-icon"),y(22,"more_vert"),Q()(),B(23,"mat-menu",null,4)(25,"span",41),U("click",function(){T(A);let n=p(2);return J(n.updateState.emit())}),y(26),Q()()(),B(27,"div",42)(28,"app-call-controls",43),Ht(29,"async"),U("toggleAudioRecording",function(n){T(A);let o=p(2);return J(o.toggleAudioRecording.emit(n))})("toggleVideoRecording",function(){T(A);let n=p(2);return J(n.toggleVideoRecording.emit())}),Q()()()()}if(t&2){let A=Qi(24),i=p(2);RA("video-streaming",i.isVideoRecording),u(5),Y(i.selectedFiles.length&&i.appName!=""||i.updatedSessionState?5:-1),u(),H("ngModel",i.userInput)("placeholder",i.i18n.typeMessagePlaceholder),u(2),H("matTooltip",i.i18n.sendMessageTooltip),u(3),RA("visible",i.isVideoRecording),u(4),H("matTooltip",i.i18n.uploadFileTooltip)("disabled",!ri(16,19,i.isMessageFileUploadEnabledObs)),u(4),H("matMenuTriggerFor",A)("matTooltip",i.i18n.moreOptionsTooltip)("disabled",!ri(20,21,i.isManualStateUpdateEnabledObs)),u(6),H("matTooltip",i.i18n.updateStateMenuTooltip),u(),ue(" ",i.i18n.updateStateMenuLabel," "),u(2),H("isAudioRecording",i.isAudioRecording)("isVideoRecording",i.isVideoRecording)("micVolume",i.micVolume)("isBidiStreamingEnabled",ri(29,23,i.isBidiStreamingEnabledObs)??!1)}}function jxA(t,e){if(t&1&&O(0,PxA,30,25,"div",28),t&2){let A=p();Y(A.canEditSession()?0:-1)}}function qxA(t,e){t&1&&(B(0,"div",6),QA(1,"mat-progress-spinner",50),Q())}var hQ=class t{appName="";agentReadme="";sessionName=me("");uiEvents=[];traceData=[];isChatMode=!0;evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;agentGraphData=null;isEditFunctionArgsEnabled=!1;isTokenStreamingEnabled=!1;useSse=!1;userInput="";userEditEvalCaseMessage="";selectedFiles=[];updatedSessionState=null;selectedMessageIndex=void 0;isAudioRecording=!1;micVolume=0;isVideoRecording=!1;userId="";sessionId="";viewMode="events";shouldShowEvent;spansByInvocationId=new Map;eventsScrollTop=-1;tracesScrollTop=-1;userInputChange=new LA;userEditEvalCaseMessageChange=new LA;clickEvent=new LA;handleKeydown=new LA;cancelEditMessage=new LA;saveEditMessage=new LA;openViewImageDialog=new LA;openBase64InNewTab=new LA;editEvalCaseMessage=new LA;deleteEvalCaseMessage=new LA;editFunctionArgs=new LA;fileSelect=new LA;removeFile=new LA;removeStateUpdate=new LA;sendMessage=new LA;updateState=new LA;toggleAudioRecording=new LA;toggleVideoRecording=new LA;longRunningResponseComplete=new LA;toggleHideIntermediateEvents=new LA;toggleSse=new LA;videoContainer;scrollContainer;textarea;scrollInterrupted=!1;scrollHeight=0;lastMessageRef=null;nextPageToken="";scrollTimeout=null;mutationObserver=null;i18n=w(UI);uiStateService=w(tg);themeService=w(eg);stringToColorService=w(Q2);markdownComponent=w(_I);featureFlagService=w(yr);agentService=w($s);sessionService=w(Al);destroyRef=w(sr);MediaType=aC;JSON=JSON;Object=Object;String=String;isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled();canEditSession=bA(!0);isUserFeedbackEnabled=Ar(this.featureFlagService.isFeedbackServiceEnabled());isLoadingAgentResponse=Ar(this.agentService.getLoadingState());hideMoreOptionsButton=Ar(this.featureFlagService.isMoreOptionsButtonHidden());onScroll=new ie;sanitizer=w(Cs);hideIntermediateEvents=me(!1);invocationDisplayMap=me(new Map);evalCaseResult=me(null);showEvalSummary=me(!1);constructor(){Ao(()=>{let e=this.sessionName();e&&(this.nextPageToken="",this.featureFlagService.isInfinityMessageScrollingEnabled().pipe($n(),gt(A=>A)).subscribe(()=>{this.uiStateService.lazyLoadMessages(e,{pageSize:100,pageToken:this.nextPageToken}).pipe($n()).subscribe()}))})}ngOnInit(){this.uiStateService.isSessionLoading().pipe(wr(this.destroyRef)).subscribe(e=>{e||this.focusInput()}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe($n(),gt(e=>e),Ei(()=>Ki(this.uiStateService.onNewMessagesLoaded().pipe(Ii(e=>{this.nextPageToken=e.nextPageToken??"",e.isBackground||this.restoreScrollPosition()})),this.onScroll.pipe(Ei(e=>{let A=e.target;return A.scrollTop!==0?ar:this.nextPageToken?(this.scrollHeight=A.scrollHeight,this.uiStateService.lazyLoadMessages(this.sessionName(),{pageSize:100,pageToken:this.nextPageToken}).pipe($n(),Po(()=>_F))):ar})))),wr(this.destroyRef)).subscribe()}ngAfterViewInit(){if(this.scrollContainer?.nativeElement){let e=this.scrollContainer.nativeElement;e.addEventListener("scroll",()=>{let A=Math.abs(e.scrollHeight-e.scrollTop-e.clientHeight)<50;this.scrollInterrupted=!A}),this.mutationObserver=new MutationObserver(()=>{this.scrollInterrupted||this.scrollToBottom()}),this.mutationObserver.observe(e,{childList:!0,subtree:!0,characterData:!0}),this.destroyRef.onDestroy(()=>{this.mutationObserver?.disconnect()})}}ngOnChanges(e){if(e.viewMode){let A=e.viewMode.previousValue,i=e.viewMode.currentValue;this.scrollContainer?.nativeElement&&(A==="events"?this.eventsScrollTop=this.scrollContainer.nativeElement.scrollTop:A==="traces"&&(this.tracesScrollTop=this.scrollContainer.nativeElement.scrollTop)),setTimeout(()=>{this.scrollContainer?.nativeElement&&(i==="events"&&this.eventsScrollTop!==-1?this.scrollContainer.nativeElement.scrollTop=this.eventsScrollTop:i==="traces"&&this.tracesScrollTop!==-1?this.scrollContainer.nativeElement.scrollTop=this.tracesScrollTop:this.scrollToBottom())})}if(e.appName&&this.focusInput(),(e.appName||e.uiEvents)&&this.uiEvents.length===0&&this.agentReadme&&setTimeout(()=>this.scrollToTop(),0),e.uiEvents){let A=this.uiEvents[this.uiEvents.length-1];A!==this.lastMessageRef&&((A?.role==="user"||A?.isLoading===!0)&&(this.scrollInterrupted=!1),this.scrollToBottom()),this.lastMessageRef=A}e.traceData&&this.traceData&&this.rebuildTrace()}rebuildTrace(){let e=this.traceData.reduce((A,i)=>{let n=i.trace_id,o=A.get(n);return o?(o.push(i),o.sort((a,r)=>a.start_time-r.start_time)):A.set(n,[i]),A},new Map);this.spansByInvocationId=new Map;for(let[A,i]of e){let n=i.find(o=>o.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in o.attributes)?.attributes["gcp.vertex.agent.invocation_id"];n&&this.spansByInvocationId.set(n,i)}}isFirstEventForInvocation(e,A){if(!e.event?.invocationId)return!1;for(let i=A-1;i>=0;i--){let n=this.uiEvents[i];if(n.role==="bot"&&n.event?.invocationId===e.event?.invocationId)return!1}return!0}scrollToBottom(){this.sessionId&&(this.scrollInterrupted||(this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.scrollContainer?.nativeElement.scrollTo({top:this.scrollContainer.nativeElement.scrollHeight,behavior:"auto"}),this.scrollTimeout=null},50)))}scrollToTop(){setTimeout(()=>{this.scrollContainer?.nativeElement.scrollTo({top:0,behavior:"smooth"})},50)}focusInput(){setTimeout(()=>{this.textarea?.nativeElement?.focus()},50)}isMessageEventSelected(e){return e===this.selectedMessageIndex}restoreScrollPosition(){if(!this.scrollHeight){this.scrollInterrupted=!1,this.scrollToBottom();return}let e=this.scrollContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight-this.scrollHeight,this.scrollHeight=0)}getAllWorkflowNodes(e){let A={};for(let i=0;i<=e;i++){let o=this.uiEvents[i].event,a=o?.actions?.agentState?.nodes,r=o?.nodeInfo?.path;a&&r&&(A[r]||(A[r]={}),Object.assign(A[r],a))}return Object.keys(A).length>0?A:null}handleAgentStateClick(e,A){e.stopPropagation(),A===this.selectedMessageIndex||this.clickEvent.emit(A)}handleRowClick(e,A,i){let n=window.getSelection();n&&n.toString().length>0||this.clickEvent.emit(i)}handleKeyboardNavigation(e){if(this.selectedMessageIndex===void 0)return;let A=document.activeElement;if(A&&(A.tagName==="INPUT"||A.tagName==="TEXTAREA"||A.isContentEditable)||e.key!=="ArrowUp"&&e.key!=="ArrowDown")return;e.preventDefault();let i;e.key==="ArrowDown"?i=this.selectedMessageIndex+1>=this.uiEvents.length?0:this.selectedMessageIndex+1:i=this.selectedMessageIndex-1<0?this.uiEvents.length-1:this.selectedMessageIndex-1,this.clickEvent.emit(i),this.scrollToSelectedMessage(i)}scrollToSelectedMessage(e){let A=e!==void 0?e:this.selectedMessageIndex;A!==void 0&&setTimeout(()=>{if(!this.scrollContainer?.nativeElement)return;let i=this.scrollContainer.nativeElement.querySelectorAll(".message-row-container");i&&i[A]&&i[A].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},50)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-chat-panel"]],viewQuery:function(A,i){if(A&1&&Jt(vxA,5,ce)(bxA,5)(MxA,5),A&2){let n;ae(n=re())&&(i.videoContainer=n.first),ae(n=re())&&(i.scrollContainer=n.first),ae(n=re())&&(i.textarea=n.first)}},hostBindings:function(A,i){A&1&&U("keydown",function(o){return i.handleKeyboardNavigation(o)},ZC)},inputs:{appName:"appName",agentReadme:"agentReadme",sessionName:[1,"sessionName"],uiEvents:"uiEvents",traceData:"traceData",isChatMode:"isChatMode",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",agentGraphData:"agentGraphData",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",isTokenStreamingEnabled:"isTokenStreamingEnabled",useSse:"useSse",userInput:"userInput",userEditEvalCaseMessage:"userEditEvalCaseMessage",selectedFiles:"selectedFiles",updatedSessionState:"updatedSessionState",selectedMessageIndex:"selectedMessageIndex",isAudioRecording:"isAudioRecording",micVolume:"micVolume",isVideoRecording:"isVideoRecording",userId:"userId",sessionId:"sessionId",viewMode:"viewMode",shouldShowEvent:"shouldShowEvent",hideIntermediateEvents:[1,"hideIntermediateEvents"],invocationDisplayMap:[1,"invocationDisplayMap"],evalCaseResult:[1,"evalCaseResult"],showEvalSummary:[1,"showEvalSummary"]},outputs:{userInputChange:"userInputChange",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",clickEvent:"clickEvent",handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",fileSelect:"fileSelect",removeFile:"removeFile",removeStateUpdate:"removeStateUpdate",sendMessage:"sendMessage",updateState:"updateState",toggleAudioRecording:"toggleAudioRecording",toggleVideoRecording:"toggleVideoRecording",longRunningResponseComplete:"longRunningResponseComplete",toggleHideIntermediateEvents:"toggleHideIntermediateEvents",toggleSse:"toggleSse"},features:[Yt],decls:5,vars:5,consts:[["autoScroll",""],["fileInput",""],["messageTextarea",""],["videoContainer",""],["moreMenu","matMenu"],[1,"chat-messages"],[1,"loading-spinner-container"],[1,"chat-messages",3,"scroll"],[1,"eval-result-summary",2,"margin","16px","padding","16px","border-radius","8px","background","var(--mat-sys-surface-container)","border","1px solid var(--mat-sys-outline-variant)"],[1,"readme-content"],[1,"agent-loading-indicator"],[2,"display","flex","justify-content","space-between","align-items","center"],[2,"margin","0","color","var(--mat-sys-primary)"],[1,"status-card__summary"],[1,"status-card__passed",2,"font-size","16px","font-weight","600","font-family","monospace"],[1,"status-card__failed",2,"font-size","16px","font-weight","600","font-family","monospace"],[2,"margin-top","12px","display","flex","gap","24px"],[2,"color","var(--mat-sys-on-surface-variant)","font-size","13px"],[2,"font-weight","500"],[2,"display","flex","gap","8px","margin-top","4px"],[2,"font-size","13px","font-weight","500",3,"color"],[2,"font-size","13px","font-weight","500"],[3,"ngComponentOutlet","ngComponentOutletInputs"],[3,"rowClick","handleKeydown","cancelEditMessage","saveEditMessage","userEditEvalCaseMessageChange","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","clickEvent","longRunningResponseComplete","agentStateClick","isSelectable","uiEvent","index","uiEvents","isSelected","appName","userId","sessionId","sessionName","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userEditEvalCaseMessage","agentGraphData","allWorkflowNodes","isUserFeedbackEnabled","isLoadingAgentResponse"],[1,"trace-tree-container",3,"display"],[1,"trace-tree-container"],[3,"spans","invocationId","uiEvents","shouldShowEvent"],["mode","indeterminate"],[1,"chat-input",3,"video-streaming"],[1,"chat-input"],["type","file","multiple","","hidden","",3,"change"],[1,"chat-input-content-row"],["appearance","outline","subscriptSizing","dynamic",1,"input-field"],[1,"file-preview"],["matInput","","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","10",1,"chat-input-box",3,"ngModelChange","keydown.enter","ngModel","placeholder"],["mat-icon-button","","matSuffix","",1,"send-message-btn",3,"click","matTooltip"],[1,"video-container"],[1,"chat-input-actions"],[1,"chat-input-actions-left"],["mat-icon-button","",1,"chat-action-button",3,"click","matTooltip","disabled"],["mat-icon-button","",1,"chat-action-button",3,"matMenuTriggerFor","matTooltip","disabled"],["mat-menu-item","",3,"click","matTooltip"],[1,"chat-input-actions-right"],[3,"toggleAudioRecording","toggleVideoRecording","isAudioRecording","isVideoRecording","micVolume","isBidiStreamingEnabled"],[1,"file-container"],[1,"image-container"],["alt","preview",1,"image-preview",3,"src"],["mat-icon-button","",1,"delete-button",3,"click"],["color","warn"],[1,"file-info"],["mode","indeterminate","diameter","50"]],template:function(A,i){if(A&1&&(ta(0),Ht(1,"async"),O(2,TxA,7,3,"div",5),O(3,jxA,1,1),O(4,qxA,2,0,"div",6)),A&2){let n=ri(1,3,i.uiStateService.isSessionLoading());u(2),Y(i.appName!=""&&!n?2:-1),u(),Y(i.appName!=""&&i.isChatMode&&!n?3:-1),u(),Y(n?4:-1)}},dependencies:[si,Tc,ln,Dn,yn,ko,Tn,Wt,CT,IQ,CQ,qi,ji,Ps,ua,Ko,Tb,_p,lB,Ya,LB,Zs,Ml,$c,E2,gs,MtA,cs,Fa,dn,BT,$0,jy,qy,Vy,os],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}.generated-image-container[_ngcontent-%COMP%]{max-width:400px;margin-left:20px}.generated-image[_ngcontent-%COMP%]{max-width:100%;min-width:40px;border-radius:8px}.html-artifact-container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:flex-start;align-items:center}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;position:relative}.chat-sub-toolbar[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;height:48px;flex-shrink:0;padding:0 20px;background-color:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{border-radius:16px;height:28px;align-items:center}.chat-sub-toolbar[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle-label-content{line-height:28px;padding:0 12px;font-size:13px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-bar-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;background-color:transparent;border:none;margin-left:16px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:14px;padding:0 10px;font-size:13px;height:28px;cursor:pointer;transition:background-color .2s ease}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-label[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:var(--mat-sys-on-surface-variant);padding:0;margin-left:4px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:transparent;border:1px dashed var(--mat-sys-outline-variant);border-radius:14px;padding:0 10px;font-size:13px;font-weight:500;height:28px;cursor:pointer;transition:all .2s ease;color:var(--mat-sys-on-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant);border-color:var(--mat-sys-outline);color:var(--mat-sys-on-surface)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;margin-right:4px} .filter-panel{min-width:max-content!important;max-width:50vw} .filter-panel .mat-mdc-menu-item{min-height:32px!important;font-size:12px!important} .filter-panel .mat-mdc-menu-item .mat-mdc-menu-item-text, .filter-panel .mat-mdc-menu-item .mdc-list-item__primary-text{font-size:12px!important;line-height:normal}.trace-tree-container[_ngcontent-%COMP%]{margin:12px 48px 12px 12px;border-radius:12px;border:none;background:var(--mat-sys-surface-container-lowest, #fff);box-shadow:0 4px 20px #0000000d,0 1px 3px #0000000a}.chat-input[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:10px;width:min(960px,88%);margin:0 auto;position:relative;transition:all .3s ease}.chat-input[_ngcontent-%COMP%] .chat-input-content-row[_ngcontent-%COMP%]{display:flex;gap:16px;align-items:flex-end;width:100%}.video-container[_ngcontent-%COMP%]{display:none;border-radius:12px;overflow:hidden;background:var(--mat-sys-surface-variant);border:1px solid var(--mat-sys-outline-variant);width:200px}.video-container.visible[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;flex-shrink:0;box-shadow:0 8px 24px #00000026}.video-container[_ngcontent-%COMP%] video{width:100%!important;height:auto!important;max-height:280px;object-fit:cover;border-radius:12px;transform:scaleX(-1)}.input-field[_ngcontent-%COMP%]{flex-grow:1;position:relative}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);border:none;box-sizing:content-box;caret-color:var(--mat-sys-primary)}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant)}.input-field[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--mat-sys-primary)!important}.chat-input-actions[_ngcontent-%COMP%]{width:100%;margin-top:10px;display:flex;justify-content:space-between;align-items:center}.chat-input-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)!important}.chat-input-actions[_ngcontent-%COMP%] button.recording[_ngcontent-%COMP%]{background-color:var(--mat-sys-error)!important;color:var(--mat-sys-on-error, #ffffff)!important}.chat-input-actions-left[_ngcontent-%COMP%], .chat-input-actions-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.image-container[_ngcontent-%COMP%]{position:relative;display:inline-block;border-radius:12px;overflow:hidden}.image-preview[_ngcontent-%COMP%]{display:block;width:100%;height:auto;border-radius:12px;width:80px;height:80px}.delete-button[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;border:none;border-radius:50%;padding:8px;cursor:pointer;color:var(--mat-sys-error);display:flex;align-items:center;justify-content:center;scale:.7}.delete-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}.file-container[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;gap:8px;height:80px;border-radius:12px}.file-info[_ngcontent-%COMP%]{margin-right:60px;padding-top:20px;padding-left:16px}.chat-input-box[_ngcontent-%COMP%]{caret-color:#fff}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.messages-loading-container[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:1em}.agent-loading-indicator[_ngcontent-%COMP%]{margin-top:16px;margin-bottom:8px;padding:0 20px;width:240px}.readme-content[_ngcontent-%COMP%]{padding:0 20px;font-size:14px;line-height:1.8;color:var(--mat-sys-on-surface)}"]})};var VxA={cancelButton:"Cancel",saveButton:"Save",invalidJsonAlert:"Invalid JSON: "},NtA=new kA("Edit Json Dialog Messages",{factory:()=>VxA});var S3=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.jsonString=JSON.stringify(A.jsonContent,null,2),this.functionName=A.functionName||""}jsonEditorComponent=So(vc);jsonString="";functionName="";i18n=w(NtA);ngOnInit(){}onSave(){try{this.jsonString=this.jsonEditorComponent().getJsonString();let e=JSON.parse(this.jsonString);this.dialogRef.close(e)}catch(e){alert(this.i18n.invalidJsonAlert+e)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-edit-json-dialog"]],viewQuery:function(A,i){A&1&&ns(i.jsonEditorComponent,vc,5),A&2&&ur()},decls:11,vars:5,consts:[[1,"dialog-container"],["mat-dialog-title",""],[1,"editor"],[3,"jsonString"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"h2",1),y(2),Q(),B(3,"mat-dialog-content",2),y(4),QA(5,"app-json-editor",3),Q(),B(6,"mat-dialog-actions",4)(7,"button",5),y(8),Q(),B(9,"button",6),U("click",function(){return i.onSave()}),y(10),Q()()()),A&2&&(u(2),lA(i.data.dialogHeader),u(2),ue(" ",i.functionName," "),u(),H("jsonString",i.jsonString),u(3),lA(i.i18n.cancelButton),u(2),lA(i.i18n.saveButton))},dependencies:[fa,Na,vc,pa,pi,B2],styles:[".dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--edit-json-dialog-container-box-shadow-color)}.editor[_ngcontent-%COMP%]{padding-top:12px;height:300px}"]})};var WxA=[[["caption"]],[["colgroup"],["col"]],"*"],ZxA=["caption","colgroup, col","*"];function XxA(t,e){t&1&&Ve(0,2)}function $xA(t,e){t&1&&(B(0,"thead",0),sn(1,1),Q(),B(2,"tbody",0),sn(3,2)(4,3),Q(),B(5,"tfoot",0),sn(6,4),Q())}function A_A(t,e){t&1&&sn(0,1)(1,2)(2,3)(3,4)}var kc=new kA("CDK_TABLE");var Xy=(()=>{class t{template=w(ao);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkCellDef",""]]})}return t})(),$y=(()=>{class t{template=w(ao);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkHeaderCellDef",""]]})}return t})(),GtA=(()=>{class t{template=w(ao);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkFooterCellDef",""]]})}return t})(),QQ=(()=>{class t{_table=w(kc,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(A){this._setNameInput(A)}_name;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(A){A!==this._stickyEnd&&(this._stickyEnd=A,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(A){A&&(this._name=A,this.cssClassFriendlyName=A.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkColumnDef",""]],contentQueries:function(i,n,o){if(i&1&&jo(o,Xy,5)(o,$y,5)(o,GtA,5),i&2){let a;ae(a=re())&&(n.cell=a.first),ae(a=re())&&(n.headerCell=a.first),ae(a=re())&&(n.footerCell=a.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",Be],stickyEnd:[2,"stickyEnd","stickyEnd",Be]}})}return t})(),Zy=class{constructor(e,A){A.nativeElement.classList.add(...e._columnCssClassName)}},KtA=(()=>{class t extends Zy{constructor(){super(w(QQ),w(ce))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[mt]})}return t})();var UtA=(()=>{class t extends Zy{constructor(){let A=w(QQ),i=w(ce);super(A,i);let n=A._table?._getCellRole();n&&i.nativeElement.setAttribute("role",n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[mt]})}return t})();var jN=(()=>{class t{template=w(ao);_differs=w(ZI);columns;_columnsDiffer;constructor(){}ngOnChanges(A){if(!this._columnsDiffer){let i=A.columns&&A.columns.currentValue||[];this._columnsDiffer=this._differs.find(i).create(),this._columnsDiffer.diff(i)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(A){return this instanceof qN?A.headerCell.template:this instanceof VN?A.footerCell.template:A.cell.template}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,features:[Yt]})}return t})(),qN=(()=>{class t extends jN{_table=w(kc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(w(ao),w(ZI))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",Be]},features:[mt,Yt]})}return t})(),VN=(()=>{class t extends jN{_table=w(kc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(w(ao),w(ZI))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",Be]},features:[mt,Yt]})}return t})(),Av=(()=>{class t extends jN{_table=w(kc,{optional:!0});when;constructor(){super(w(ao),w(ZI))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[mt]})}return t})(),x3=(()=>{class t{_viewContainer=w(Mo);cells;context;static mostRecentCellOutlet=null;constructor(){t.mostRecentCellOutlet=this}ngOnDestroy(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","cdkCellOutlet",""]]})}return t})();var WN=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&sn(0,0)},dependencies:[x3],encapsulation:2})}return t})(),TtA=(()=>{class t{templateRef=w(ao);_contentClassNames=["cdk-no-data-row","cdk-row"];_cellClassNames=["cdk-cell","cdk-no-data-cell"];_cellSelector="td, cdk-cell, [cdk-cell], .cdk-cell";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["ng-template","cdkNoDataRow",""]]})}return t})(),FtA=["top","bottom","left","right"],PN=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(e=>this._updateCachedSizes(e)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(e,A,i=!0,n=!0,o,a,r){this._isNativeHtmlTable=e,this._stickCellCss=A,this._isBrowser=i,this._needsPositionStickyOnElement=n,this.direction=o,this._positionListener=a,this._tableInjector=r,this._borderCellCss={top:`${A}-border-elem-top`,bottom:`${A}-border-elem-bottom`,left:`${A}-border-elem-left`,right:`${A}-border-elem-right`}}clearStickyPositioning(e,A){(A.includes("left")||A.includes("right"))&&this._removeFromStickyColumnReplayQueue(e);let i=[];for(let n of e)n.nodeType===n.ELEMENT_NODE&&i.push(n,...Array.from(n.children));Hn({write:()=>{for(let n of i)this._removeStickyStyle(n,A)}},{injector:this._tableInjector})}updateStickyColumns(e,A,i,n=!0,o=!0){if(!e.length||!this._isBrowser||!(A.some(f=>f)||i.some(f=>f))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let a=e[0],r=a.children.length,s=this.direction==="rtl",l=s?"right":"left",g=s?"left":"right",C=A.lastIndexOf(!0),I=i.indexOf(!0),d,h,E;o&&this._updateStickyColumnReplayQueue({rows:[...e],stickyStartStates:[...A],stickyEndStates:[...i]}),Hn({earlyRead:()=>{d=this._getCellWidths(a,n),h=this._getStickyStartColumnPositions(d,A),E=this._getStickyEndColumnPositions(d,i)},write:()=>{for(let f of e)for(let m=0;m!!f)&&(this._positionListener.stickyColumnsUpdated({sizes:C===-1?[]:d.slice(0,C+1).map((f,m)=>A[m]?f:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:I===-1?[]:d.slice(I).map((f,m)=>i[m+I]?f:null).reverse()}))}},{injector:this._tableInjector})}stickRows(e,A,i){if(!this._isBrowser)return;let n=i==="bottom"?e.slice().reverse():e,o=i==="bottom"?A.slice().reverse():A,a=[],r=[],s=[];Hn({earlyRead:()=>{for(let l=0,g=0;l{let l=o.lastIndexOf(!0);for(let g=0;g{let i=e.querySelector("tfoot");i&&(A.some(n=>!n)?this._removeStickyStyle(i,["bottom"]):this._addStickyStyle(i,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(e,A){if(!e.classList.contains(this._stickCellCss))return;for(let n of A)e.style[n]="",e.classList.remove(this._borderCellCss[n]);FtA.some(n=>A.indexOf(n)===-1&&e.style[n])?e.style.zIndex=this._getCalculatedZIndex(e):(e.style.zIndex="",this._needsPositionStickyOnElement&&(e.style.position=""),e.classList.remove(this._stickCellCss))}_addStickyStyle(e,A,i,n){e.classList.add(this._stickCellCss),n&&e.classList.add(this._borderCellCss[A]),e.style[A]=`${i}px`,e.style.zIndex=this._getCalculatedZIndex(e),this._needsPositionStickyOnElement&&(e.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(e){let A={top:100,bottom:10,left:1,right:1},i=0;for(let n of FtA)e.style[n]&&(i+=A[n]);return i?`${i}`:""}_getCellWidths(e,A=!0){if(!A&&this._cachedCellWidths.length)return this._cachedCellWidths;let i=[],n=e.children;for(let o=0;o0;o--)A[o]&&(i[o]=n,n+=e[o]);return i}_retrieveElementSize(e){let A=this._elemSizeCache.get(e);if(A)return A;let i=e.getBoundingClientRect(),n={width:i.width,height:i.height};return this._resizeObserver&&(this._elemSizeCache.set(e,n),this._resizeObserver.observe(e,{box:"border-box"})),n}_updateStickyColumnReplayQueue(e){this._removeFromStickyColumnReplayQueue(e.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(e)}_removeFromStickyColumnReplayQueue(e){let A=new Set(e);for(let i of this._updatedStickyColumnsParamsToReplay)i.rows=i.rows.filter(n=>!A.has(n));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(i=>!!i.rows.length)}_updateCachedSizes(e){let A=!1;for(let i of e){let n=i.borderBoxSize?.length?{width:i.borderBoxSize[0].inlineSize,height:i.borderBoxSize[0].blockSize}:{width:i.contentRect.width,height:i.contentRect.height};n.width!==this._elemSizeCache.get(i.target)?.width&&e_A(i.target)&&(A=!0),this._elemSizeCache.set(i.target,n)}A&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let i of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(i.rows,i.stickyStartStates,i.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function e_A(t){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(e=>t.classList.contains(e))}var k3=new kA("STICKY_POSITIONING_LISTENER");var ZN=(()=>{class t{viewContainer=w(Mo);elementRef=w(ce);constructor(){let A=w(kc);A._rowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","rowOutlet",""]]})}return t})(),XN=(()=>{class t{viewContainer=w(Mo);elementRef=w(ce);constructor(){let A=w(kc);A._headerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","headerRowOutlet",""]]})}return t})(),$N=(()=>{class t{viewContainer=w(Mo);elementRef=w(ce);constructor(){let A=w(kc);A._footerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","footerRowOutlet",""]]})}return t})(),AF=(()=>{class t{viewContainer=w(Mo);elementRef=w(ce);constructor(){let A=w(kc);A._noDataRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","noDataRowOutlet",""]]})}return t})(),eF=(()=>{class t{_differs=w(ZI);_changeDetectorRef=w(wt);_elementRef=w(ce);_dir=w(fo,{optional:!0});_platform=w(li);_viewRepeater;_viewportRuler=w(Ms);_injector=w(Dt);_virtualScrollViewport=w(ET,{optional:!0,host:!0});_positionListener=w(k3,{optional:!0})||w(k3,{optional:!0,skipSelf:!0});_document=w(ti);_data;_renderedRange;_onDestroy=new ie;_renderRows;_renderChangeSubscription=null;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef=null;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow=null;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_headerRowStickyUpdates=new ie;_footerRowStickyUpdates=new ie;_disableVirtualScrolling=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let A=this._elementRef.nativeElement.getAttribute("role");return A==="grid"||A==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(A){this._trackByFn=A}_trackByFn;get dataSource(){return this._dataSource}set dataSource(A){this._dataSource!==A&&(this._switchDataSource(A),this._changeDetectorRef.markForCheck())}_dataSource;_dataSourceChanges=new ie;_dataStream=new ie;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(A){this._multiTemplateDataRows=A,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._virtualScrollEnabled()?!0:this._fixedLayout}set fixedLayout(A){this._fixedLayout=A,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;recycleRows=!1;contentChanged=new LA;viewChange=new ei({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;constructor(){w(new Us("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((i,n)=>this.trackBy?this.trackBy(n.dataIndex,n.data):n)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(Qt(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._viewRepeater=this.recycleRows||this._virtualScrollEnabled()?new Fm:new Lm,this._virtualScrollEnabled()&&this._setupVirtualScrolling(this._virtualScrollViewport),this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(A=>{A?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._headerRowStickyUpdates.complete(),this._footerRowStickyUpdates.complete(),this._onDestroy.next(),this._onDestroy.complete(),Ru(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let A=this._dataDiffer.diff(this._renderRows);if(!A){this._updateNoDataRow(),this.contentChanged.next();return}let i=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(A,i,(n,o,a)=>this._getEmbeddedViewArgs(n.item,a),n=>n.item.data,n=>{n.operation===Jg.INSERTED&&n.context&&this._renderCellTemplateForItem(n.record.item.rowDef,n.context)}),this._updateRowIndexContext(),A.forEachIdentityChange(n=>{let o=i.get(n.currentIndex);o.context.$implicit=n.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(A){this._customColumnDefs.add(A)}removeColumnDef(A){this._customColumnDefs.delete(A)}addRowDef(A){this._customRowDefs.add(A)}removeRowDef(A){this._customRowDefs.delete(A)}addHeaderRowDef(A){this._customHeaderRowDefs.add(A),this._headerRowDefChanged=!0}removeHeaderRowDef(A){this._customHeaderRowDefs.delete(A),this._headerRowDefChanged=!0}addFooterRowDef(A){this._customFooterRowDefs.add(A),this._footerRowDefChanged=!0}removeFooterRowDef(A){this._customFooterRowDefs.delete(A),this._footerRowDefChanged=!0}setNoDataRow(A){this._customNoDataRow=A}updateStickyHeaderRowStyles(){let A=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let n=LtA(this._headerRowOutlet,"thead");n&&(n.style.display=A.length?"":"none")}let i=this._headerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["top"]),this._stickyStyler.stickRows(A,i,"top"),this._headerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyFooterRowStyles(){let A=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let n=LtA(this._footerRowOutlet,"tfoot");n&&(n.style.display=A.length?"":"none")}let i=this._footerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["bottom"]),this._stickyStyler.stickRows(A,i,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,i),this._footerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyColumnStyles(){let A=this._getRenderedRows(this._headerRowOutlet),i=this._getRenderedRows(this._rowOutlet),n=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this.fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...A,...i,...n],["left","right"]),this._stickyColumnStylesNeedReset=!1),A.forEach((o,a)=>{this._addStickyColumnStyles([o],this._headerRowDefs[a])}),this._rowDefs.forEach(o=>{let a=[];for(let r=0;r{this._addStickyColumnStyles([o],this._footerRowDefs[a])}),Array.from(this._columnDefsByName.values()).forEach(o=>o.resetStickyChanged())}stickyColumnsUpdated(A){this._positionListener?.stickyColumnsUpdated(A)}stickyEndColumnsUpdated(A){this._positionListener?.stickyEndColumnsUpdated(A)}stickyHeaderRowsUpdated(A){this._headerRowStickyUpdates.next(A),this._positionListener?.stickyHeaderRowsUpdated(A)}stickyFooterRowsUpdated(A){this._footerRowStickyUpdates.next(A),this._positionListener?.stickyFooterRowsUpdated(A)}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let i=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||i,this._forceRecalculateCellWidths=i,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){if(!Array.isArray(this._data)||!this._renderedRange)return[];let A=[],i=Math.min(this._data.length,this._renderedRange.end),n=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let o=this._renderedRange.start;o{let r=n&&n.has(a)?n.get(a):[];if(r.length){let s=r.shift();return s.dataIndex=i,s}else return{data:A,rowDef:a,dataIndex:i}})}_cacheColumnDefs(){this._columnDefsByName.clear(),Wy(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(i=>{this._columnDefsByName.has(i.name),this._columnDefsByName.set(i.name,i)})}_cacheRowDefs(){this._headerRowDefs=Wy(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=Wy(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=Wy(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let A=this._rowDefs.filter(i=>!i.when);this._defaultRowDef=A[0]}_renderUpdatedColumns(){let A=(a,r)=>{let s=!!r.getColumnsDiff();return a||s},i=this._rowDefs.reduce(A,!1);i&&this._forceRenderDataRows();let n=this._headerRowDefs.reduce(A,!1);n&&this._forceRenderHeaderRows();let o=this._footerRowDefs.reduce(A,!1);return o&&this._forceRenderFooterRows(),i||n||o}_switchDataSource(A){this._data=[],Ru(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),A||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=A}_observeRenderChanges(){if(!this.dataSource)return;let A;Ru(this.dataSource)?A=this.dataSource.connect(this):zd(this.dataSource)?A=this.dataSource:Array.isArray(this.dataSource)&&(A=oe(this.dataSource)),this._renderChangeSubscription=Qr([A,this.viewChange]).pipe(Qt(this._onDestroy)).subscribe(([i,n])=>{this._data=i||[],this._renderedRange=n,this._dataStream.next(i),this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((A,i)=>this._renderRow(this._headerRowOutlet,A,i)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((A,i)=>this._renderRow(this._footerRowOutlet,A,i)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(A,i){let n=Array.from(i?.columns||[]).map(r=>{let s=this._columnDefsByName.get(r);return s}),o=n.map(r=>r.sticky),a=n.map(r=>r.stickyEnd);this._stickyStyler.updateStickyColumns(A,o,a,!this.fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(A){let i=[];for(let n=0;n!o.when||o.when(i,A));else{let o=this._rowDefs.find(a=>a.when&&a.when(i,A))||this._defaultRowDef;o&&n.push(o)}return n.length,n}_getEmbeddedViewArgs(A,i){let n=A.rowDef,o={$implicit:A.data};return{templateRef:n.template,context:o,index:i}}_renderRow(A,i,n,o={}){let a=A.viewContainer.createEmbeddedView(i.template,o,n);return this._renderCellTemplateForItem(i,o),a}_renderCellTemplateForItem(A,i){for(let n of this._getCellTemplates(A))x3.mostRecentCellOutlet&&x3.mostRecentCellOutlet._viewContainer.createEmbeddedView(n,i);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let A=this._rowOutlet.viewContainer;for(let i=0,n=A.length;i{let n=this._columnDefsByName.get(i);return A.extractCellTemplate(n)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let A=(i,n)=>i||n.hasStickyChanged();this._headerRowDefs.reduce(A,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(A,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(A,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let A=this._dir?this._dir.value:"ltr",i=this._injector;this._stickyStyler=new PN(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,A,this,i),(this._dir?this._dir.change:oe()).pipe(Qt(this._onDestroy)).subscribe(n=>{this._stickyStyler.direction=n,this.updateStickyColumnStyles()})}_setupVirtualScrolling(A){let i=typeof requestAnimationFrame<"u"?Yd:jv;this.viewChange.next({start:0,end:0}),A.renderedRangeStream.pipe(jI(0,i),Qt(this._onDestroy)).subscribe(this.viewChange),A.attach({dataStream:this._dataStream,measureRangeSize:(n,o)=>this._measureRangeSize(n,o)}),Qr([A.renderedContentOffset,this._headerRowStickyUpdates]).pipe(Qt(this._onDestroy)).subscribe(([n,o])=>{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a!i._table||i._table===this)}_updateNoDataRow(){let A=this._customNoDataRow||this._noDataRow;if(!A)return;let i=this._rowOutlet.viewContainer.length===0;if(i===this._isShowingNoDataRow)return;let n=this._noDataRowOutlet.viewContainer;if(i){let o=n.createEmbeddedView(A.templateRef),a=o.rootNodes[0];if(o.rootNodes.length===1&&a?.nodeType===this._document.ELEMENT_NODE){a.setAttribute("role","row"),a.classList.add(...A._contentClassNames);let r=a.querySelectorAll(A._cellSelector);for(let s=0;s=A.end||i!=="vertical")return 0;let n=this.viewChange.value,o=this._rowOutlet.viewContainer;A.startn.end;let a=A.start-n.start,r=A.end-A.start,s,l;for(let I=0;I-1;I--){let d=o.get(I+a);if(d&&d.rootNodes.length){l=d.rootNodes[d.rootNodes.length-1];break}}let g=s?.getBoundingClientRect?.(),C=l?.getBoundingClientRect?.();return g&&C?C.bottom-g.top:0}_virtualScrollEnabled(){return!this._disableVirtualScrolling&&this._virtualScrollViewport!=null}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(i,n,o){if(i&1&&jo(o,TtA,5)(o,QQ,5)(o,Av,5)(o,qN,5)(o,VN,5),i&2){let a;ae(a=re())&&(n._noDataRow=a.first),ae(a=re())&&(n._contentColumnDefs=a),ae(a=re())&&(n._contentRowDefs=a),ae(a=re())&&(n._contentHeaderRowDefs=a),ae(a=re())&&(n._contentFooterRowDefs=a)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(i,n){i&2&&RA("cdk-table-fixed-layout",n.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",Be],fixedLayout:[2,"fixedLayout","fixedLayout",Be],recycleRows:[2,"recycleRows","recycleRows",Be]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[Bt([{provide:kc,useExisting:t},{provide:k3,useValue:null}])],ngContentSelectors:ZxA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Rt(WxA),Ve(0),Ve(1,1),O(2,XxA,1,0),O(3,$xA,7,0)(4,A_A,4,0)),i&2&&(u(2),Y(n._isServer?2:-1),u(),Y(n._isNativeHtmlTable?3:4))},dependencies:[XN,ZN,AF,$N],styles:[`.cdk-table-fixed-layout{table-layout:fixed} +`],encapsulation:2})}return t})();function Wy(t,e){return t.concat(Array.from(e))}function LtA(t,e){let A=e.toUpperCase(),i=t.viewContainer.element.nativeElement;for(;i;){let n=i.nodeType===1?i.nodeName:null;if(n===A)return i;if(n==="TABLE")break;i=i.parentNode}return null}var t_A=[[["caption"]],[["colgroup"],["col"]],"*"],i_A=["caption","colgroup, col","*"];function n_A(t,e){t&1&&Ve(0,2)}function o_A(t,e){t&1&&(B(0,"thead",0),sn(1,1),Q(),B(2,"tbody",2),sn(3,3)(4,4),Q(),B(5,"tfoot",0),sn(6,5),Q())}function a_A(t,e){t&1&&sn(0,1)(1,3)(2,4)(3,5)}var JtA=(()=>{class t extends eF{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(i,n){i&2&&RA("mat-table-fixed-layout",n.fixedLayout)},exportAs:["matTable"],features:[Bt([{provide:eF,useExisting:t},{provide:kc,useExisting:t},{provide:k3,useValue:null}]),mt],ngContentSelectors:i_A,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Rt(t_A),Ve(0),Ve(1,1),O(2,n_A,1,0),O(3,o_A,7,0)(4,a_A,4,0)),i&2&&(u(2),Y(n._isServer?2:-1),u(),Y(n._isNativeHtmlTable?3:4))},dependencies:[XN,ZN,AF,$N],styles:[`.mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:var(--mat-table-header-container-height, 56px)}mat-row{min-height:var(--mat-table-row-item-container-height, 52px)}mat-footer-row{min-height:var(--mat-table-footer-container-height, 52px)}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-sys-surface))}.mat-table-fixed-layout{table-layout:fixed}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:start;text-overflow:ellipsis}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:start}.mdc-data-table__row:last-child>.mat-mdc-header-cell{border-bottom:none}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child>.mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch} +`],encapsulation:2})}return t})(),OtA=(()=>{class t extends Xy{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matCellDef",""]],features:[Bt([{provide:Xy,useExisting:t}]),mt]})}return t})(),YtA=(()=>{class t extends $y{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matHeaderCellDef",""]],features:[Bt([{provide:$y,useExisting:t}]),mt]})}return t})();var HtA=(()=>{class t extends QQ{get name(){return this._name}set name(A){this._setNameInput(A)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[Bt([{provide:QQ,useExisting:t}]),mt]})}return t})(),ztA=(()=>{class t extends KtA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[mt]})}return t})();var PtA=(()=>{class t extends UtA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[mt]})}return t})();var jtA=(()=>{class t extends Av{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[Bt([{provide:Av,useExisting:t}]),mt]})}return t})();var qtA=(()=>{class t extends WN{static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[Bt([{provide:WN,useExisting:t}]),mt],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&sn(0,0)},dependencies:[x3],encapsulation:2})}return t})();var r_A=9007199254740991,Td=class extends _u{_data;_renderData=new ei([]);_filter=new ei("");_internalPageChanges=new ie;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(e){e=Array.isArray(e)?e:[],this._data.next(e),this._renderChangesSubscription||this._filterData(e)}get filter(){return this._filter.value}set filter(e){this._filter.next(e),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(e){this._sort=e,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(e){this._paginator=e,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(e,A)=>{let i=e[A];if(Ep(i)){let n=Number(i);return n{let i=A.active,n=A.direction;return!i||n==""?e:e.sort((o,a)=>{let r=this.sortingDataAccessor(o,i),s=this.sortingDataAccessor(a,i),l=typeof r,g=typeof s;l!==g&&(l==="number"&&(r+=""),g==="number"&&(s+=""));let C=0;return r!=null&&s!=null?r>s?C=1:r{let i=A.trim().toLowerCase();return Object.values(e).some(n=>`${n}`.toLowerCase().includes(i))};constructor(e=[]){super(),this._data=new ei(e),this._updateChangeSubscription()}_updateChangeSubscription(){let e=this._sort?Ki(this._sort.sortChange,this._sort.initialized):oe(null),A=this._paginator?Ki(this._paginator.page,this._internalPageChanges,this._paginator.initialized):oe(null),i=this._data,n=Qr([i,this._filter]).pipe(we(([r])=>this._filterData(r))),o=Qr([n,e]).pipe(we(([r])=>this._orderData(r))),a=Qr([o,A]).pipe(we(([r])=>this._pageData(r)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=a.subscribe(r=>this._renderData.next(r))}_filterData(e){return this.filteredData=this.filter==null||this.filter===""?e:e.filter(A=>this.filterPredicate(A,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(e){return this.sort?this.sortData(e.slice(),this.sort):e}_pageData(e){if(!this.paginator)return e;let A=this.paginator.pageIndex*this.paginator.pageSize;return e.slice(A,A+this.paginator.pageSize)}_updatePaginator(e){Promise.resolve().then(()=>{let A=this.paginator;if(A&&(A.length=e,A.pageIndex>0)){let i=Math.ceil(A.length/A.pageSize)-1||0,n=Math.min(A.pageIndex,i);n!==A.pageIndex&&(A.pageIndex=n,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var uQ=[{metricName:"tool_trajectory_avg_score",threshold:1},{metricName:"response_match_score",threshold:.7}];var ev="0123456789abcdef",tv=class t{constructor(e){this.bytes=e}static ofInner(e){if(e.length!==16)throw new TypeError("not 128-bit length");return new t(e)}static fromFieldsV7(e,A,i,n){if(!Number.isInteger(e)||!Number.isInteger(A)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||A<0||i<0||n<0||e>0xffffffffffff||A>4095||i>1073741823||n>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/2**40,o[1]=e/2**32,o[2]=e/2**24,o[3]=e/2**16,o[4]=e/2**8,o[5]=e,o[6]=112|A>>>8,o[7]=A,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new t(o)}static parse(e){var A,i,n,o;let a;switch(e.length){case 32:a=(A=/^[0-9a-f]{32}$/i.exec(e))===null||A===void 0?void 0:A[0];break;case 36:a=(i=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||i===void 0?void 0:i.slice(1,6).join("");break;case 38:a=(n=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e))===null||n===void 0?void 0:n.slice(1,6).join("");break;case 45:a=(o=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||o===void 0?void 0:o.slice(1,6).join("");break;default:break}if(a){let r=new Uint8Array(16);for(let s=0;s<16;s+=4){let l=parseInt(a.substring(2*s,2*s+8),16);r[s+0]=l>>>24,r[s+1]=l>>>16,r[s+2]=l>>>8,r[s+3]=l}return new t(r)}else throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let A=0;A>>4),e+=ev.charAt(this.bytes[A]&15),(A===3||A===5||A===7||A===9)&&(e+="-");return e}toHex(){let e="";for(let A=0;A>>4),e+=ev.charAt(this.bytes[A]&15);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(A=>A===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(A=>A===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new t(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let A=0;A<16;A++){let i=this.bytes[A]-e.bytes[A];if(i!==0)return Math.sign(i)}return 0}},tF=class{constructor(e){this.timestamp_biased=0,this.counter=0,this.random=e??s_A()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,A){let i=this.generateOrAbortCore(e,A);return i===void 0&&(this.timestamp_biased=0,i=this.generateOrAbortCore(e,A)),i}generateOrAbortCore(e,A){if(!Number.isInteger(e)||e<0||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit unsigned integer");if(A<0||A>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e++,e>this.timestamp_biased)this.timestamp_biased=e,this.resetCounter();else if(e+A>=this.timestamp_biased)this.counter++,this.counter>4398046511103&&(this.timestamp_biased++,this.resetCounter());else return;return tv.fromFieldsV7(this.timestamp_biased-1,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=this.random.nextUint32()*1024+(this.random.nextUint32()&1023)}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,tv.ofInner(e)}},s_A=()=>{if(typeof crypto<"u"&&typeof crypto.getRandomValues<"u")return new iF;if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");return{nextUint32:()=>Math.trunc(Math.random()*65536)*65536+Math.trunc(Math.random()*65536)}},iF=class{constructor(){this.buffer=new Uint32Array(8),this.cursor=65535}nextUint32(){return this.cursor>=this.buffer.length&&(crypto.getRandomValues(this.buffer),this.cursor=0),this.buffer[this.cursor++]}},VtA;var iv=()=>l_A().toString(),l_A=()=>(VtA||(VtA=new tF)).generateV4();function g_A(t,e){t&1&&(B(0,"div",1),QA(1,"mat-progress-spinner",6),Q()),t&2&&(u(),H("diameter",28)("strokeWidth",3))}function c_A(t,e){if(t&1){let A=hA();B(0,"mat-form-field",2)(1,"input",7),Di("ngModelChange",function(n){T(A);let o=p();return di(o.newCaseId,n)||(o.newCaseId=n),J(n)}),U("keydown.enter",function(){T(A);let n=p();return J(n.createNewEvalCase())}),Q()()}if(t&2){let A=p();u(),wi("ngModel",A.newCaseId)}}var nv=class t{evalService=w(t0);data=w(qo);dialogRef=w(lo);newCaseId=this.data.defaultName||"case_"+iv().slice(0,6);loading=!1;constructor(){}createNewEvalCase(){if(!this.newCaseId||this.newCaseId=="")alert("Cannot create eval set with empty id!");else{if(this.data.existingCases?.includes(this.newCaseId)&&!confirm(`Eval case "${this.newCaseId}" already exists. Do you want to overwrite it?`))return;this.loading=!0,this.evalService.addCurrentSession(this.data.appName,this.data.evalSetId,this.newCaseId,this.data.sessionId,this.data.userId).subscribe({next:e=>{this.dialogRef.close(!0)},error:e=>{this.loading=!1,alert("Failed to add session to eval set!")}})}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-add-eval-session-dialog"]],decls:11,vars:3,consts:[["mat-dialog-title",""],[2,"display","flex","justify-content","center","padding","20px"],[2,"padding-left","20px","padding-right","24px"],["align","end"],["mat-button","","mat-dialog-close","",3,"disabled"],["mat-button","","cdkFocusInitial","",3,"click","disabled"],["mode","indeterminate",3,"diameter","strokeWidth"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1,"Add Current Session To Eval Set"),Q(),B(2,"mat-dialog-content"),y(3,` Please enter the eval case name +`),Q(),O(4,g_A,2,2,"div",1)(5,c_A,2,1,"mat-form-field",2),B(6,"mat-dialog-actions",3)(7,"button",4),y(8,"Cancel"),Q(),B(9,"button",5),U("click",function(){return i.createNewEvalCase()}),y(10,"Create"),Q()()),A&2&&(u(4),Y(i.loading?4:5),u(3),H("disabled",i.loading),u(2),H("disabled",i.loading))},dependencies:[fa,Na,Ko,ua,ln,Dn,yn,ko,pa,pi,B2,gs],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important}"]})};var C_A={allEvalSetsHeader:"Eval sets",createNewEvalSetTooltip:"Create new evaluation set",createNewEvalSetTitle:"Create New Evaluation Set",evalSetDescription:"An evaluation set is a curated collection of evaluation cases, where each case includes input-output examples for assessing agent performance.",createEvalSetButton:"Create Evaluation Set",runEvaluationButton:"Run All",runSelectedEvaluationButton:"Run Selected",viewEvalRunHistoryTooltip:"View eval run history",caseIdHeader:"Case ID",resultHeader:"Result",viewEvalRunResultTooltip:"View eval run result",passStatus:"Pass",failStatus:"Fail",passStatusCaps:"PASS",failStatusCaps:"FAIL",passedSuffix:"Passed",failedSuffix:"Failed",addSessionToSetButtonPrefix:"From Current Session",deleteEvalCaseTooltip:"Delete eval case",editEvalCaseTooltip:"Edit eval case",deleteEvalSetTooltip:"Delete eval set"},WtA=new kA("Eval Tab Messages",{factory:()=>C_A});function I_A(t,e){if(t&1){let A=hA();B(0,"mat-form-field",1)(1,"mat-label"),y(2,"Execution Mode"),Q(),B(3,"mat-select",6),U("selectionChange",function(n){T(A);let o=p();return J(o.executionMode=n.value)}),B(4,"mat-option",7),y(5,"Live"),Q(),B(6,"mat-option",8),y(7,"Replay"),Q()()()}if(t&2){let A=p();u(3),H("value",A.executionMode)}}var ov=class t{evalService=w(t0);featureFlagService=w(yr);data=w(qo);dialogRef=w(lo);newSetId=this.data.defaultName||"evalset_"+iv().slice(0,6);executionMode="live";isEvalV2Enabled=!1;constructor(){this.featureFlagService.isEvalV2Enabled().subscribe(e=>{this.isEvalV2Enabled=e})}createNewEvalSet(){if(!this.newSetId||this.newSetId=="")alert("Cannot create eval set with empty id!");else{let e=this.isEvalV2Enabled?this.executionMode:void 0;this.evalService.createNewEvalSet(this.data.appName,this.newSetId,e).subscribe(A=>{this.dialogRef.close(!0)})}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-new-eval-set-dialog-component"]],decls:14,vars:2,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"],[3,"selectionChange","value"],["value","live"],["value","replay"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1,"Create New Eval Set"),Q(),B(2,"mat-dialog-content"),y(3,` Please enter the eval set name +`),Q(),B(4,"mat-form-field",1)(5,"mat-label"),y(6,"Eval Set Name"),Q(),B(7,"input",2),Di("ngModelChange",function(o){return di(i.newSetId,o)||(i.newSetId=o),o}),U("keydown.enter",function(){return i.createNewEvalSet()}),Q()(),O(8,I_A,8,1,"mat-form-field",1),B(9,"mat-dialog-actions",3)(10,"button",4),y(11,"Cancel"),Q(),B(12,"button",5),U("click",function(){return i.createNewEvalSet()}),y(13,"Create"),Q()()),A&2&&(u(7),wi("ngModel",i.newSetId),u(),Y(i.isEvalV2Enabled?8:-1))},dependencies:[fa,Na,Ko,ua,ln,Dn,yn,ko,pa,pi,B2,$0,vs,Xl,Yr],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important}"]})};var d_A=["knob"],B_A=["valueIndicatorContainer"];function E_A(t,e){if(t&1&&(B(0,"div",2,1)(2,"div",5)(3,"span",6),y(4),Q()()()),t&2){let A=p();u(4),lA(A.valueIndicatorText)}}var h_A=["trackActive"],Q_A=["*"];function u_A(t,e){if(t&1&&QA(0,"div"),t&2){let A=e.$implicit,i=e.$index,n=p(3);ro(A===0?"mdc-slider__tick-mark--active":"mdc-slider__tick-mark--inactive"),ut("transform",n._calcTickMarkTransform(i))}}function f_A(t,e){if(t&1&&Je(0,u_A,1,4,"div",8,ws),t&2){let A=p(2);Oe(A._tickMarks)}}function p_A(t,e){if(t&1&&(B(0,"div",6,1),O(2,f_A,2,0),Q()),t&2){let A=p();u(2),Y(A._cachedWidth?2:-1)}}function m_A(t,e){if(t&1&&QA(0,"mat-slider-visual-thumb",7),t&2){let A=p();H("discrete",A.discrete)("thumbPosition",1)("valueIndicatorText",A.startValueIndicatorText)}}var xi=(function(t){return t[t.START=1]="START",t[t.END=2]="END",t})(xi||{}),fQ=(function(t){return t[t.ACTIVE=0]="ACTIVE",t[t.INACTIVE=1]="INACTIVE",t})(fQ||{}),nF=new kA("_MatSlider"),ZtA=new kA("_MatSliderThumb"),w_A=new kA("_MatSliderRangeThumb"),XtA=new kA("_MatSliderVisualThumb");var D_A=(()=>{class t{_cdr=w(wt);_ngZone=w(qe);_slider=w(nF);_renderer=w(Pi);_listenerCleanups;discrete=!1;thumbPosition;valueIndicatorText;_ripple;_knob;_valueIndicatorContainer;_sliderInput;_sliderInputEl;_hoverRippleRef;_focusRippleRef;_activeRippleRef;_isHovered=!1;_isActive=!1;_isValueIndicatorVisible=!1;_hostElement=w(ce).nativeElement;_platform=w(li);constructor(){}ngAfterViewInit(){let A=this._slider._getInput(this.thumbPosition);A&&(this._ripple.radius=24,this._sliderInput=A,this._sliderInputEl=this._sliderInput._hostElement,this._ngZone.runOutsideAngular(()=>{let i=this._sliderInputEl,n=this._renderer;this._listenerCleanups=[n.listen(i,"pointermove",this._onPointerMove),n.listen(i,"pointerdown",this._onDragStart),n.listen(i,"pointerup",this._onDragEnd),n.listen(i,"pointerleave",this._onMouseLeave),n.listen(i,"focus",this._onFocus),n.listen(i,"blur",this._onBlur)]}))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A())}_onPointerMove=A=>{if(this._sliderInput._isFocused)return;let i=this._hostElement.getBoundingClientRect(),n=this._slider._isCursorOnSliderThumb(A,i);this._isHovered=n,n?this._showHoverRipple():this._hideRipple(this._hoverRippleRef)};_onMouseLeave=()=>{this._isHovered=!1,this._hideRipple(this._hoverRippleRef)};_onFocus=()=>{this._hideRipple(this._hoverRippleRef),this._showFocusRipple(),this._hostElement.classList.add("mdc-slider__thumb--focused")};_onBlur=()=>{this._isActive||this._hideRipple(this._focusRippleRef),this._isHovered&&this._showHoverRipple(),this._hostElement.classList.remove("mdc-slider__thumb--focused")};_onDragStart=A=>{A.button===0&&(this._isActive=!0,this._showActiveRipple())};_onDragEnd=()=>{this._isActive=!1,this._hideRipple(this._activeRippleRef),this._sliderInput._isFocused||this._hideRipple(this._focusRippleRef),this._platform.SAFARI&&this._showHoverRipple()};_showHoverRipple(){this._isShowingRipple(this._hoverRippleRef)||(this._hoverRippleRef=this._showRipple({enterDuration:0,exitDuration:0}),this._hoverRippleRef?.element.classList.add("mat-mdc-slider-hover-ripple"))}_showFocusRipple(){this._isShowingRipple(this._focusRippleRef)||(this._focusRippleRef=this._showRipple({enterDuration:0,exitDuration:0},!0),this._focusRippleRef?.element.classList.add("mat-mdc-slider-focus-ripple"))}_showActiveRipple(){this._isShowingRipple(this._activeRippleRef)||(this._activeRippleRef=this._showRipple({enterDuration:225,exitDuration:400}),this._activeRippleRef?.element.classList.add("mat-mdc-slider-active-ripple"))}_isShowingRipple(A){return A?.state===ys.FADING_IN||A?.state===ys.VISIBLE}_showRipple(A,i){if(!this._slider.disabled&&(this._showValueIndicator(),this._slider._isRange&&this._slider._getThumb(this.thumbPosition===xi.START?xi.END:xi.START)._showValueIndicator(),!(this._slider._globalRippleOptions?.disabled&&!i)))return this._ripple.launch({animation:this._slider._noopAnimations?{enterDuration:0,exitDuration:0}:A,centered:!0,persistent:!0})}_hideRipple(A){if(A?.fadeOut(),this._isShowingAnyRipple())return;this._slider._isRange||this._hideValueIndicator();let i=this._getSibling();i._isShowingAnyRipple()||(this._hideValueIndicator(),i._hideValueIndicator())}_showValueIndicator(){this._hostElement.classList.add("mdc-slider__thumb--with-indicator")}_hideValueIndicator(){this._hostElement.classList.remove("mdc-slider__thumb--with-indicator")}_getSibling(){return this._slider._getThumb(this.thumbPosition===xi.START?xi.END:xi.START)}_getValueIndicatorContainer(){return this._valueIndicatorContainer?.nativeElement}_getKnob(){return this._knob.nativeElement}_isShowingAnyRipple(){return this._isShowingRipple(this._hoverRippleRef)||this._isShowingRipple(this._focusRippleRef)||this._isShowingRipple(this._activeRippleRef)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-slider-visual-thumb"]],viewQuery:function(i,n){if(i&1&&Jt(rs,5)(d_A,5)(B_A,5),i&2){let o;ae(o=re())&&(n._ripple=o.first),ae(o=re())&&(n._knob=o.first),ae(o=re())&&(n._valueIndicatorContainer=o.first)}},hostAttrs:[1,"mdc-slider__thumb","mat-mdc-slider-visual-thumb"],inputs:{discrete:"discrete",thumbPosition:"thumbPosition",valueIndicatorText:"valueIndicatorText"},features:[Bt([{provide:XtA,useExisting:t}])],decls:4,vars:2,consts:[["knob",""],["valueIndicatorContainer",""],[1,"mdc-slider__value-indicator-container"],[1,"mdc-slider__thumb-knob"],["matRipple","",1,"mat-focus-indicator",3,"matRippleDisabled"],[1,"mdc-slider__value-indicator"],[1,"mdc-slider__value-indicator-text"]],template:function(i,n){i&1&&(O(0,E_A,5,1,"div",2),QA(1,"div",3,0)(3,"div",4)),i&2&&(Y(n.discrete?0:-1),u(3),H("matRippleDisabled",!0))},dependencies:[rs],styles:[`.mat-mdc-slider-visual-thumb .mat-ripple{height:100%;width:100%}.mat-mdc-slider .mdc-slider__tick-marks{justify-content:start}.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--inactive{position:absolute;left:2px} +`],encapsulation:2,changeDetection:0})}return t})(),$tA=(()=>{class t{_ngZone=w(qe);_cdr=w(wt);_elementRef=w(ce);_dir=w(fo,{optional:!0});_globalRippleOptions=w(r2,{optional:!0});_trackActive;_thumbs;_input;_inputs;get disabled(){return this._disabled}set disabled(A){this._disabled=A;let i=this._getInput(xi.END),n=this._getInput(xi.START);i&&(i.disabled=this._disabled),n&&(n.disabled=this._disabled)}_disabled=!1;get discrete(){return this._discrete}set discrete(A){this._discrete=A,this._updateValueIndicatorUIs()}_discrete=!1;get showTickMarks(){return this._showTickMarks}set showTickMarks(A){this._showTickMarks=A,this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI())}_showTickMarks=!1;get min(){return this._min}set min(A){let i=A==null||isNaN(A)?this._min:A;this._min!==i&&this._updateMin(i)}_min=0;color;disableRipple=!1;_updateMin(A){let i=this._min;this._min=A,this._isRange?this._updateMinRange({old:i,new:A}):this._updateMinNonRange(A),this._onMinMaxOrStepChange()}_updateMinRange(A){let i=this._getInput(xi.END),n=this._getInput(xi.START),o=i.value,a=n.value;n.min=A.new,i.min=Math.max(A.new,n.value),n.max=Math.min(i.max,i.value),n._updateWidthInactive(),i._updateWidthInactive(),A.newA.old?this._onTranslateXChangeBySideEffect(n,i):this._onTranslateXChangeBySideEffect(i,n),o!==i.value&&this._onValueChange(i),a!==n.value&&this._onValueChange(n)}_updateMaxNonRange(A){let i=this._getInput(xi.END);if(i){let n=i.value;i.max=A,i._updateThumbUIByValue(),this._updateTrackUI(i),n!==i.value&&this._onValueChange(i)}}get step(){return this._step}set step(A){let i=isNaN(A)?this._step:A;this._step!==i&&this._updateStep(i)}_step=1;_updateStep(A){this._step=A,this._isRange?this._updateStepRange():this._updateStepNonRange(),this._onMinMaxOrStepChange()}_updateStepRange(){let A=this._getInput(xi.END),i=this._getInput(xi.START),n=A.value,o=i.value,a=i.value;A.min=this._min,i.max=this._max,A.step=this._step,i.step=this._step,this._platform.SAFARI&&(A.value=A.value,i.value=i.value),A.min=Math.max(this._min,i.value),i.max=Math.min(this._max,A.value),i._updateWidthInactive(),A._updateWidthInactive(),A.value`${A}`;_tickMarks;_noopAnimations=An();_dirChangeSubscription;_resizeObserver=null;_cachedWidth;_cachedLeft;_rippleRadius=24;startValueIndicatorText="";endValueIndicatorText="";_endThumbTransform;_startThumbTransform;_isRange=!1;_isRtl=!1;_hasViewInitialized=!1;_tickMarkTrackWidth=0;_hasAnimation=!1;_resizeTimer=null;_platform=w(li);constructor(){w(eo).load(lr),this._dir&&(this._dirChangeSubscription=this._dir.change.subscribe(()=>this._onDirChange()),this._isRtl=this._dir.value==="rtl")}_knobRadius=8;_inputPadding;ngAfterViewInit(){this._platform.isBrowser&&this._updateDimensions();let A=this._getInput(xi.END),i=this._getInput(xi.START);this._isRange=!!A&&!!i,this._cdr.detectChanges();let n=this._getThumb(xi.END);this._rippleRadius=n._ripple.radius,this._inputPadding=this._rippleRadius-this._knobRadius,this._isRange?this._initUIRange(A,i):this._initUINonRange(A),this._updateTrackUI(A),this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._observeHostResize(),this._cdr.detectChanges()}_initUINonRange(A){A.initProps(),A.initUI(),this._updateValueIndicatorUI(A),this._hasViewInitialized=!0,A._updateThumbUIByValue()}_initUIRange(A,i){A.initProps(),A.initUI(),i.initProps(),i.initUI(),A._updateMinMax(),i._updateMinMax(),A._updateStaticStyles(),i._updateStaticStyles(),this._updateValueIndicatorUIs(),this._hasViewInitialized=!0,A._updateThumbUIByValue(),i._updateThumbUIByValue()}ngOnDestroy(){this._dirChangeSubscription?.unsubscribe(),this._resizeObserver?.disconnect(),this._resizeObserver=null}_onDirChange(){this._isRtl=this._dir?.value==="rtl",this._isRange?this._onDirChangeRange():this._onDirChangeNonRange(),this._updateTickMarkUI()}_onDirChangeRange(){let A=this._getInput(xi.END),i=this._getInput(xi.START);A._setIsLeftThumb(),i._setIsLeftThumb(),A.translateX=A._calcTranslateXByValue(),i.translateX=i._calcTranslateXByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateWidthInactive(),i._updateWidthInactive(),A._updateThumbUIByValue(),i._updateThumbUIByValue()}_onDirChangeNonRange(){this._getInput(xi.END)._updateThumbUIByValue()}_observeHostResize(){typeof ResizeObserver>"u"||!ResizeObserver||this._ngZone.runOutsideAngular(()=>{this._resizeObserver=new ResizeObserver(()=>{this._isActive()||(this._resizeTimer&&clearTimeout(this._resizeTimer),this._onResize())}),this._resizeObserver.observe(this._elementRef.nativeElement)})}_isActive(){return this._getThumb(xi.START)._isActive||this._getThumb(xi.END)._isActive}_getValue(A=xi.END){let i=this._getInput(A);return i?i.value:this.min}_skipUpdate(){return!!(this._getInput(xi.START)?._skipUIUpdate||this._getInput(xi.END)?._skipUIUpdate)}_updateDimensions(){this._cachedWidth=this._elementRef.nativeElement.offsetWidth,this._cachedLeft=this._elementRef.nativeElement.getBoundingClientRect().left}_setTrackActiveStyles(A){let i=this._trackActive.nativeElement.style;i.left=A.left,i.right=A.right,i.transformOrigin=A.transformOrigin,i.transform=A.transform}_calcTickMarkTransform(A){let i=A*(this._tickMarkTrackWidth/(this._tickMarks.length-1));return`translateX(${this._isRtl?this._cachedWidth-6-i:i}px)`}_onTranslateXChange(A){this._hasViewInitialized&&(this._updateThumbUI(A),this._updateTrackUI(A),this._updateOverlappingThumbUI(A))}_onTranslateXChangeBySideEffect(A,i){this._hasViewInitialized&&(A._updateThumbUIByValue(),i._updateThumbUIByValue())}_onValueChange(A){this._hasViewInitialized&&(this._updateValueIndicatorUI(A),this._updateTickMarkUI(),this._cdr.detectChanges())}_onMinMaxOrStepChange(){this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.markForCheck())}_onResize(){if(this._hasViewInitialized){if(this._updateDimensions(),this._isRange){let A=this._getInput(xi.END),i=this._getInput(xi.START);A._updateThumbUIByValue(),i._updateThumbUIByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateMinMax(),i._updateMinMax(),A._updateWidthInactive(),i._updateWidthInactive()}else{let A=this._getInput(xi.END);A&&A._updateThumbUIByValue()}this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.detectChanges()}}_thumbsOverlap=!1;_areThumbsOverlapping(){let A=this._getInput(xi.START),i=this._getInput(xi.END);return!A||!i?!1:i.translateX-A.translateX<20}_updateOverlappingThumbClassNames(A){let i=A.getSibling(),n=this._getThumb(A.thumbPosition);this._getThumb(i.thumbPosition)._hostElement.classList.remove("mdc-slider__thumb--top"),n._hostElement.classList.toggle("mdc-slider__thumb--top",this._thumbsOverlap)}_updateOverlappingThumbUI(A){!this._isRange||this._skipUpdate()||this._thumbsOverlap!==this._areThumbsOverlapping()&&(this._thumbsOverlap=!this._thumbsOverlap,this._updateOverlappingThumbClassNames(A))}_updateThumbUI(A){if(this._skipUpdate())return;let i=this._getThumb(A.thumbPosition===xi.END?xi.END:xi.START);i._hostElement.style.transform=`translateX(${A.translateX}px)`}_updateValueIndicatorUI(A){if(this._skipUpdate())return;let i=this.displayWith(A.value);if(this._hasViewInitialized?A._valuetext.set(i):A._hostElement.setAttribute("aria-valuetext",i),this.discrete){A.thumbPosition===xi.START?this.startValueIndicatorText=i:this.endValueIndicatorText=i;let n=this._getThumb(A.thumbPosition);i.length<3?n._hostElement.classList.add("mdc-slider__thumb--short-value"):n._hostElement.classList.remove("mdc-slider__thumb--short-value")}}_updateValueIndicatorUIs(){let A=this._getInput(xi.END),i=this._getInput(xi.START);A&&this._updateValueIndicatorUI(A),i&&this._updateValueIndicatorUI(i)}_updateTickMarkTrackUI(){if(!this.showTickMarks||this._skipUpdate())return;let A=this._step&&this._step>0?this._step:1,n=(Math.floor(this.max/A)*A-this.min)/(this.max-this.min);this._tickMarkTrackWidth=(this._cachedWidth-6)*n}_updateTrackUI(A){this._skipUpdate()||(this._isRange?this._updateTrackUIRange(A):this._updateTrackUINonRange(A))}_updateTrackUIRange(A){let i=A.getSibling();if(!i||!this._cachedWidth)return;let n=Math.abs(i.translateX-A.translateX)/this._cachedWidth;A._isLeftThumb&&this._cachedWidth?this._setTrackActiveStyles({left:"auto",right:`${this._cachedWidth-i.translateX}px`,transformOrigin:"right",transform:`scaleX(${n})`}):this._setTrackActiveStyles({left:`${i.translateX}px`,right:"auto",transformOrigin:"left",transform:`scaleX(${n})`})}_updateTrackUINonRange(A){this._isRtl?this._setTrackActiveStyles({left:"auto",right:"0px",transformOrigin:"right",transform:`scaleX(${1-A.fillPercentage})`}):this._setTrackActiveStyles({left:"0px",right:"auto",transformOrigin:"left",transform:`scaleX(${A.fillPercentage})`})}_updateTickMarkUI(){if(!this.showTickMarks||this.step===void 0||this.min===void 0||this.max===void 0)return;let A=this.step>0?this.step:1;this._isRange?this._updateTickMarkUIRange(A):this._updateTickMarkUINonRange(A)}_updateTickMarkUINonRange(A){let i=this._getValue(),n=Math.max(Math.round((i-this.min)/A),0)+1,o=Math.max(Math.round((this.max-i)/A),0)-1;this._isRtl?n++:o++,this._tickMarks=Array(n).fill(fQ.ACTIVE).concat(Array(o).fill(fQ.INACTIVE))}_updateTickMarkUIRange(A){let i=this._getValue(),n=this._getValue(xi.START),o=Math.max(Math.round((n-this.min)/A),0),a=Math.max(Math.round((i-n)/A)+1,0),r=Math.max(Math.round((this.max-i)/A),0);this._tickMarks=Array(o).fill(fQ.INACTIVE).concat(Array(a).fill(fQ.ACTIVE),Array(r).fill(fQ.INACTIVE))}_getInput(A){if(A===xi.END&&this._input)return this._input;if(this._inputs?.length)return A===xi.START?this._inputs.first:this._inputs.last}_getThumb(A){return A===xi.END?this._thumbs?.last:this._thumbs?.first}_setTransition(A){this._hasAnimation=!this._platform.IOS&&A&&!this._noopAnimations,this._elementRef.nativeElement.classList.toggle("mat-mdc-slider-with-animation",this._hasAnimation)}_isCursorOnSliderThumb(A,i){let n=i.width/2,o=i.x+n,a=i.y+n,r=A.clientX-o,s=A.clientY-a;return Math.pow(r,2)+Math.pow(s,2)oF),multi:!0};var oF=(()=>{class t{_ngZone=w(qe);_elementRef=w(ce);_cdr=w(wt);_slider=w(nF);_platform=w(li);_listenerCleanups;get value(){return Cn(this._hostElement.value,0)}set value(A){A===null&&(A=this._getDefaultValue()),A=isNaN(A)?0:A;let i=A+"";if(!this._hasSetInitialValue){this._initialValue=i;return}this._isActive||this._setValue(i)}_setValue(A){this._hostElement.value=A,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges(),this._slider._cdr.markForCheck()}valueChange=new LA;dragStart=new LA;dragEnd=new LA;get translateX(){return this._slider.min>=this._slider.max?(this._translateX=this._tickMarkOffset,this._translateX):(this._translateX===void 0&&(this._translateX=this._calcTranslateXByValue()),this._translateX)}set translateX(A){this._translateX=A}_translateX;thumbPosition=xi.END;get min(){return Cn(this._hostElement.min,0)}set min(A){this._hostElement.min=A+"",this._cdr.detectChanges()}get max(){return Cn(this._hostElement.max,0)}set max(A){this._hostElement.max=A+"",this._cdr.detectChanges()}get step(){return Cn(this._hostElement.step,0)}set step(A){this._hostElement.step=A+"",this._cdr.detectChanges()}get disabled(){return Be(this._hostElement.disabled)}set disabled(A){this._hostElement.disabled=A,this._cdr.detectChanges(),this._slider.disabled!==this.disabled&&(this._slider.disabled=this.disabled)}get percentage(){return this._slider.min>=this._slider.max?this._slider._isRtl?1:0:(this.value-this._slider.min)/(this._slider.max-this._slider.min)}get fillPercentage(){return this._slider._cachedWidth?this._translateX===0?0:this.translateX/this._slider._cachedWidth:this._slider._isRtl?1:0}_hostElement=this._elementRef.nativeElement;_valuetext=bA("");_knobRadius=8;_tickMarkOffset=3;_isActive=!1;_isFocused=!1;_setIsFocused(A){this._isFocused=A}_hasSetInitialValue=!1;_initialValue;_formControl;_destroyed=new ie;_skipUIUpdate=!1;_onChangeFn;_onTouchedFn=()=>{};_isControlInitialized=!1;constructor(){let A=w(Pi);this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[A.listen(this._hostElement,"pointerdown",this._onPointerDown.bind(this)),A.listen(this._hostElement,"pointermove",this._onPointerMove.bind(this)),A.listen(this._hostElement,"pointerup",this._onPointerUp.bind(this))]})}ngOnDestroy(){this._listenerCleanups.forEach(A=>A()),this._destroyed.next(),this._destroyed.complete(),this.dragStart.complete(),this.dragEnd.complete()}initProps(){this._updateWidthInactive(),this.disabled!==this._slider.disabled&&(this._slider.disabled=!0),this.step=this._slider.step,this.min=this._slider.min,this.max=this._slider.max,this._initValue()}initUI(){this._updateThumbUIByValue()}_initValue(){this._hasSetInitialValue=!0,this._initialValue===void 0?this.value=this._getDefaultValue():(this._hostElement.value=this._initialValue,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges())}_getDefaultValue(){return this.min}_onBlur(){this._setIsFocused(!1),this._onTouchedFn()}_onFocus(){this._slider._setTransition(!1),this._slider._updateTrackUI(this),this._setIsFocused(!0)}_onChange(){this.valueChange.emit(this.value),this._isActive&&this._updateThumbUIByValue({withAnimation:!0})}_onInput(){this._onChangeFn?.(this.value),(this._slider.step||!this._isActive)&&this._updateThumbUIByValue({withAnimation:!0}),this._slider._onValueChange(this)}_onNgControlValueChange(){(!this._isActive||!this._isFocused)&&(this._slider._onValueChange(this),this._updateThumbUIByValue()),this._slider.disabled=this._formControl.disabled}_onPointerDown(A){if(!(this.disabled||A.button!==0)){if(this._platform.IOS){let i=this._slider._isCursorOnSliderThumb(A,this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect());this._isActive=i,this._updateWidthActive(),this._slider._updateDimensions();return}this._isActive=!0,this._setIsFocused(!0),this._updateWidthActive(),this._slider._updateDimensions(),this._slider.step||this._updateThumbUIByPointerEvent(A,{withAnimation:!0}),this.disabled||(this._handleValueCorrection(A),this.dragStart.emit({source:this,parent:this._slider,value:this.value}))}}_handleValueCorrection(A){this._skipUIUpdate=!0,setTimeout(()=>{this._skipUIUpdate=!1,this._fixValue(A)},0)}_fixValue(A){let i=A.clientX-this._slider._cachedLeft,n=this._slider._cachedWidth,o=this._slider.step===0?1:this._slider.step,a=Math.floor((this._slider.max-this._slider.min)/o),r=this._slider._isRtl?1-i/n:i/n,l=Math.round(r*a)/a*(this._slider.max-this._slider.min)+this._slider.min,g=Math.round(l/o)*o,C=this.value;if(g===C){this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation});return}this.value=g,this.valueChange.emit(this.value),this._onChangeFn?.(this.value),this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation})}_onPointerMove(A){!this._slider.step&&this._isActive&&this._updateThumbUIByPointerEvent(A)}_onPointerUp(){this._isActive&&(this._isActive=!1,this._platform.SAFARI&&this._setIsFocused(!1),this.dragEnd.emit({source:this,parent:this._slider,value:this.value}),setTimeout(()=>this._updateWidthInactive(),this._platform.IOS?10:0))}_clamp(A){let i=this._tickMarkOffset,n=this._slider._cachedWidth-this._tickMarkOffset;return Math.max(Math.min(A,n),i)}_calcTranslateXByValue(){return this._slider._isRtl?(1-this.percentage)*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset:this.percentage*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset}_calcTranslateXByPointerEvent(A){return A.clientX-this._slider._cachedLeft}_updateWidthActive(){}_updateWidthInactive(){this._hostElement.style.padding=`0 ${this._slider._inputPadding}px`,this._hostElement.style.width=`calc(100% + ${this._slider._inputPadding-this._tickMarkOffset*2}px)`,this._hostElement.style.left=`-${this._slider._rippleRadius-this._tickMarkOffset}px`}_updateThumbUIByValue(A){this.translateX=this._clamp(this._calcTranslateXByValue()),this._updateThumbUI(A)}_updateThumbUIByPointerEvent(A,i){this.translateX=this._clamp(this._calcTranslateXByPointerEvent(A)),this._updateThumbUI(i)}_updateThumbUI(A){this._slider._setTransition(!!A?.withAnimation),this._slider._onTranslateXChange(this)}writeValue(A){(this._isControlInitialized||A!==null)&&(this.value=A)}registerOnChange(A){this._onChangeFn=A,this._isControlInitialized=!0}registerOnTouched(A){this._onTouchedFn=A}setDisabledState(A){this.disabled=A}focus(){this._hostElement.focus()}blur(){this._hostElement.blur()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["input","matSliderThumb",""]],hostAttrs:["type","range",1,"mdc-slider__input"],hostVars:1,hostBindings:function(i,n){i&1&&U("change",function(){return n._onChange()})("input",function(){return n._onInput()})("blur",function(){return n._onBlur()})("focus",function(){return n._onFocus()}),i&2&&te("aria-valuetext",n._valuetext())},inputs:{value:[2,"value","value",Cn]},outputs:{valueChange:"valueChange",dragStart:"dragStart",dragEnd:"dragEnd"},exportAs:["matSliderThumb"],features:[Bt([y_A,{provide:ZtA,useExisting:t}])]})}return t})();var JI=class t{transform(e){if(!e)return"";let A=e.replace(/(_avg_score|_score|avg_score)$/,"");return A=A.replace(/_/g," "),A.split(" ").map(i=>i.charAt(0).toUpperCase()+i.slice(1).toLowerCase()).join(" ")}static \u0275fac=function(A){return new(A||t)};static \u0275pipe=Xv({name:"formatMetricName",type:t,pure:!0})};function v_A(t,e){if(t&1&&(B(0,"div",9)(1,"div",10)(2,"mat-checkbox",11)(3,"div",12)(4,"span",13),y(5),Ht(6,"formatMetricName"),Q(),B(7,"span",14),y(8),Q()()(),B(9,"div",15)(10,"div",16)(11,"span",17),y(12,"Threshold"),Q(),B(13,"div",18)(14,"mat-slider",19),QA(15,"input",20),Q(),B(16,"span",21),y(17),Q()()()()()()),t&2){let A,i=e.$implicit,n=p(2);u(2),H("formControlName",i.metricName+"_selected"),u(2),H("matTooltip",i.metricName),u(),lA(ri(6,10,i.metricName)),u(3),lA(i.description),u(),ut("visibility",(A=n.evalForm.get(i.metricName+"_selected"))!=null&&A.value?"visible":"hidden"),u(5),H("min",i.metricValueInfo.interval.minValue)("max",i.metricValueInfo.interval.maxValue),u(),H("formControlName",i.metricName+"_threshold"),u(2),ue(" ",n.evalForm.controls[i.metricName+"_threshold"].value," ")}}function b_A(t,e){if(t&1&&(B(0,"div"),Et(1,v_A,18,12,"div",8),Q()),t&2){let A=p();u(),H("ngForOf",A.metricsInfo)}}function M_A(t,e){if(t&1&&(B(0,"div")(1,"div",9)(2,"div",10)(3,"mat-checkbox",22)(4,"span",13),y(5),Ht(6,"formatMetricName"),Q()(),B(7,"div",15)(8,"div",16)(9,"span",17),y(10,"Threshold"),Q(),B(11,"div",18)(12,"mat-slider",23),QA(13,"input",24),Q(),B(14,"span",21),y(15),Q()()()()()(),B(16,"div",9)(17,"div",10)(18,"mat-checkbox",25)(19,"span",13),y(20),Ht(21,"formatMetricName"),Q()(),B(22,"div",15)(23,"div",16)(24,"span",17),y(25,"Threshold"),Q(),B(26,"div",18)(27,"mat-slider",23),QA(28,"input",26),Q(),B(29,"span",21),y(30),Q()()()()()()()),t&2){let A,i,n=p();u(4),H("matTooltip","tool_trajectory_avg_score"),u(),lA(ri(6,10,"tool_trajectory_avg_score")),u(2),ut("visibility",(A=n.evalForm.get("tool_trajectory_avg_score_selected"))!=null&&A.value?"visible":"hidden"),u(8),ue(" ",n.evalForm.controls.tool_trajectory_avg_score_threshold.value," "),u(4),H("matTooltip","response_match_score"),u(),lA(ri(21,12,"response_match_score")),u(2),ut("visibility",(i=n.evalForm.get("response_match_score_selected"))!=null&&i.value?"visible":"hidden"),u(8),ue(" ",n.evalForm.controls.response_match_score_threshold.value," ")}}var av=class t{constructor(e,A,i){this.dialogRef=e;this.fb=A;this.data=i;this.evalMetrics=this.data.evalMetrics||[],this.metricsInfo=this.data.metricsInfo||[],this.evalForm=this.fb.group({}),this.metricsInfo.forEach(n=>{let o=this.evalMetrics.find(l=>l.metricName===n.metricName),a=!!o,r=o?o.threshold:this.getDefaultThreshold(n);this.evalForm.addControl(`${n.metricName}_selected`,this.fb.control(a));let s=n.metricValueInfo.interval;this.evalForm.addControl(`${n.metricName}_threshold`,this.fb.control(r,[Ys.required,Ys.min(s.minValue),Ys.max(s.maxValue)]))}),this.metricsInfo.length===0&&this.addDefaultControls()}evalForm;evalMetrics=[];metricsInfo=[];addDefaultControls(){[{name:"tool_trajectory_avg_score",min:0,max:1,default:1},{name:"response_match_score",min:0,max:1,default:.7}].forEach(A=>{let i=this.evalMetrics.find(a=>a.metricName===A.name),n=!!i,o=i?i.threshold:A.default;this.evalForm.addControl(`${A.name}_selected`,this.fb.control(n)),this.evalForm.addControl(`${A.name}_threshold`,this.fb.control(o,[Ys.required,Ys.min(A.min),Ys.max(A.max)]))})}getDefaultThreshold(e){return e.metricName==="tool_trajectory_avg_score"?1:e.metricName==="response_match_score"?.7:e.metricValueInfo.interval.maxValue}onReset(){this.metricsInfo.forEach(e=>{let A=uQ.find(o=>o.metricName===e.metricName),i=!!A,n=A?A.threshold:this.getDefaultThreshold(e);this.evalForm.get(`${e.metricName}_selected`)?.setValue(i),this.evalForm.get(`${e.metricName}_threshold`)?.setValue(n)}),this.metricsInfo.length===0&&uQ.forEach(e=>{this.evalForm.get(`${e.metricName}_selected`)?.setValue(!0),this.evalForm.get(`${e.metricName}_threshold`)?.setValue(e.threshold)})}onStart(){if(this.evalForm.valid){let e=[];this.metricsInfo.length>0?this.metricsInfo.forEach(A=>{if(this.evalForm.get(`${A.metricName}_selected`)?.value){let n=this.evalForm.get(`${A.metricName}_threshold`)?.value;e.push({metricName:A.metricName,threshold:n})}}):["tool_trajectory_avg_score","response_match_score"].forEach(i=>{if(this.evalForm.get(`${i}_selected`)?.value){let o=this.evalForm.get(`${i}_threshold`)?.value;e.push({metricName:i,threshold:o})}}),this.dialogRef.close(e)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(YL),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-run-eval-config-dialog"]],decls:14,vars:3,consts:[[1,"dialog-container"],["mat-dialog-title","",1,"dialog-title"],[1,"eval-form",3,"formGroup"],[4,"ngIf"],["align","end",1,"dialog-actions"],["mat-button","",1,"reset-button",3,"click"],["mat-button","",1,"cancel-button",3,"click"],["mat-button","",1,"save-button",3,"click"],["class","metric-container",4,"ngFor","ngForOf"],[1,"metric-container"],[1,"metric-header"],[3,"formControlName"],[2,"display","flex","flex-direction","column"],[1,"metric-title",3,"matTooltip"],[1,"metric-description"],[1,"metric-slider-container","inline-slider"],[2,"display","flex","flex-direction","column","align-items","flex-start"],[1,"slider-label",2,"margin-right","0","font-size","11px","color","var(--mat-sys-on-surface-variant)"],[2,"display","flex","align-items","center"],["step","0.1","thumbLabel","",1,"threshold-slider",3,"min","max"],["matSliderThumb","",3,"formControlName"],[1,"threshold-value"],["formControlName","tool_trajectory_avg_score_selected"],["min","0","max","1","step","0.1","thumbLabel","",1,"threshold-slider"],["matSliderThumb","","formControlName","tool_trajectory_avg_score_threshold"],["formControlName","response_match_score_selected"],["matSliderThumb","","formControlName","response_match_score_threshold"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"h2",1),y(2,"EVALUATION METRICS"),Q(),B(3,"mat-dialog-content")(4,"form",2),Et(5,b_A,2,1,"div",3)(6,M_A,31,14,"div",3),Q()(),B(7,"mat-dialog-actions",4)(8,"button",5),U("click",function(){return i.onReset()}),y(9,"Reset to Default"),Q(),B(10,"button",6),U("click",function(){return i.onCancel()}),y(11,"Cancel"),Q(),B(12,"button",7),U("click",function(){return i.onStart()}),y(13,"Start"),Q()()()),A&2&&(u(4),H("formGroup",i.evalForm),u(),H("ngIf",i.metricsInfo.length>0),u(),H("ngIf",i.metricsInfo.length===0))},dependencies:[fa,Na,ln,JL,Dn,yn,NL,n2,i2,Qb,$tA,oF,pa,pi,tc,si,A2,Js,dn,JI],styles:[".dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:12px;width:680px;box-shadow:0 8px 16px var(--run-eval-config-dialog-container-box-shadow-color)}.metric-container[_ngcontent-%COMP%]{margin-bottom:6px;padding-bottom:4px;border-bottom:1px solid var(--run-eval-config-dialog-border-color, #e0e0e0)}.metric-container[_ngcontent-%COMP%]:last-child{border-bottom:none}.metric-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px}.metric-title[_ngcontent-%COMP%]{font-weight:600;font-size:1em}.metric-description[_ngcontent-%COMP%]{font-size:.85em;color:var(--run-eval-config-dialog-description-color, #666);margin-top:2px;white-space:normal}.metric-slider-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-left:28px}.inline-slider[_ngcontent-%COMP%]{margin-left:20px;flex:1;display:flex;justify-content:flex-end;align-items:center}.slider-label[_ngcontent-%COMP%]{margin-right:10px;font-size:.9em}.threshold-slider[_ngcontent-%COMP%]{max-width:80px;flex:1}.threshold-value[_ngcontent-%COMP%]{margin-left:10px;min-width:30px;text-align:right}h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}"]})};var xc=class t{constructor(e,A){this.dialogRef=e;this.data=A}onConfirm(){this.dialogRef.close(!0)}onCancel(){this.dialogRef.close(!1)}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-delete-session-dialog"]],decls:11,vars:4,consts:[[1,"confirm-delete-wrapper"],["mat-dialog-title",""],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"h2",1),y(2),Q(),B(3,"mat-dialog-content")(4,"p"),y(5),Q()(),B(6,"mat-dialog-actions",2)(7,"button",3),U("click",function(){return i.onCancel()}),y(8),Q(),B(9,"button",4),U("click",function(){return i.onConfirm()}),y(10),Q()()()),A&2&&(u(2),lA(i.data.title),u(3),lA(i.data.message),u(3),lA(i.data.cancelButtonText),u(2),lA(i.data.confirmButtonText))},dependencies:[fa,Na,pa,pi],encapsulation:2})};var S_A=["app-info-table",""],k_A=["*"];function x_A(t,e){if(t&1&&(wn(0,"thead")(1,"tr")(2,"th",2),y(3),Gn()()()),t&2){let A=p();u(3),lA(A.title())}}var OI=class t{title=me();static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["table","app-info-table",""]],hostAttrs:[1,"info-table"],inputs:{title:[1,"title"]},attrs:S_A,ngContentSelectors:k_A,decls:6,vars:1,consts:[[1,"label-col"],[1,"value-col"],["colspan","2"]],template:function(A,i){A&1&&(Rt(),wn(0,"colgroup"),Kn(1,"col",0)(2,"col",1),Gn(),O(3,x_A,4,1,"thead"),wn(4,"tbody"),Ve(5),Gn()),A&2&&(u(3),Y(i.title()?3:-1))},styles:["[_nghost-%COMP%]{display:table;width:100%;border-collapse:separate;border-spacing:0;font-family:inherit;font-size:13px;background-color:var(--mat-sys-surface);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;overflow:hidden;table-layout:fixed}[_nghost-%COMP%] thead[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-low)}[_nghost-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;padding:12px 16px;font-weight:500;color:var(--mat-sys-on-surface);border-bottom:1px solid var(--mat-sys-outline-variant)}[_nghost-%COMP%] .label-col[_ngcontent-%COMP%]{width:30%}[_nghost-%COMP%] tbody tr td{padding:10px 16px;color:var(--mat-sys-on-surface-variant);border-bottom:1px solid var(--mat-sys-outline-variant);overflow:hidden;overflow-wrap:anywhere}[_nghost-%COMP%] tbody tr td:first-child{font-weight:500;color:var(--mat-sys-on-surface);background-color:var(--mat-sys-surface-container-lowest);border-right:1px solid var(--mat-sys-outline-variant)}[_nghost-%COMP%] tbody tr:last-child td{border-bottom:none}"]})};var AiA=(t,e)=>e.timestamp,__A=(t,e)=>e.evalId;function R_A(t,e){t&1&&(B(0,"span",3),y(1,"Eval Sets"),Q())}function N_A(t,e){if(t&1){let A=hA();B(0,"span",9),U("click",function(){T(A);let n=p(2);return J(n.goToEvalSet())}),y(1),Q()}if(t&2){let A=p(2);u(),lA(A.selectedEvalSet())}}function F_A(t,e){if(t&1&&(B(0,"span",8),y(1),Q()),t&2){let A=p(2);u(),lA(A.selectedEvalSet())}}function L_A(t,e){if(t&1&&(B(0,"span",6),y(1,">"),Q(),O(2,N_A,2,1,"span",7)(3,F_A,2,1,"span",8)),t&2){let A=p();u(2),Y(A.selectedEvalTab()==="history"||A.selectedHistoryRun()||A.selectedEvalCase()?2:3)}}function G_A(t,e){t&1&&(B(0,"span",6),y(1,">"),Q(),B(2,"span",10),y(3,"Eval Cases"),Q())}function K_A(t,e){t&1&&(B(0,"span",6),y(1,">"),Q(),B(2,"span",11),y(3,"Runs"),Q())}function U_A(t,e){if(t&1&&(B(0,"span",6),y(1,">"),Q(),B(2,"span",12),y(3),Q()),t&2){let A=p();u(3),lA(A.formatTimestamp(A.selectedHistoryRun()))}}function T_A(t,e){if(t&1&&(B(0,"span",6),y(1,">"),Q(),B(2,"span",13),y(3),Q()),t&2){let A,i=p();u(3),lA((A=i.selectedEvalCase())==null?null:A.evalId)}}function J_A(t,e){if(t&1){let A=hA();B(0,"button",14),U("click",function(){T(A);let n=p();return J(n.openNewEvalSetDialog())}),B(1,"mat-icon"),y(2,"add"),Q(),y(3," New "),Q(),B(4,"button",15),U("click",function(){T(A);let n=p();return J(n.getEvalSet())}),B(5,"mat-icon"),y(6,"refresh"),Q()()}if(t&2){let A=p();H("matTooltip",A.i18n.createNewEvalSetTooltip)}}function O_A(t,e){}function Y_A(t,e){if(t&1){let A=hA();B(0,"div")(1,"div",16)(2,"div",17),y(3),Q(),B(4,"div",18),y(5),Q(),B(6,"div",19),U("click",function(){T(A);let n=p();return J(n.openNewEvalSetDialog())}),y(7),Q()()()}if(t&2){let A=p();u(3),ue(" ",A.i18n.createNewEvalSetTitle," "),u(2),ue(" ",A.i18n.evalSetDescription," "),u(2),ue(" ",A.i18n.createEvalSetButton," ")}}function H_A(t,e){if(t&1){let A=hA();B(0,"div",21),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.selectEvalSet(n))}),B(1,"div",22)(2,"span",23),y(3,"folder"),Q(),B(4,"div",24),y(5),Q()(),B(6,"div",25)(7,"button",26),U("click",function(n){let o=T(A).$implicit,a=p(2);return J(a.confirmDeleteEvalSet(n,o))}),B(8,"mat-icon"),y(9,"delete"),Q()()()()}if(t&2){let A=e.$implicit,i=p(2);u(5),lA(A),u(2),H("matTooltip",i.i18n.deleteEvalSetTooltip)}}function z_A(t,e){if(t&1&&(B(0,"div"),Je(1,H_A,10,2,"div",20,hi),Q()),t&2){let A=p();u(),Oe(A.evalsets)}}function P_A(t,e){t&1&&(B(0,"div",33),QA(1,"mat-progress-spinner",34),Q()),t&2&&(u(),H("diameter",28)("strokeWidth",3))}function j_A(t,e){if(t&1&&(B(0,"tr")(1,"td"),y(2,"Execution Mode"),Q(),B(3,"td")(4,"span",37),y(5),Q()()()),t&2){let A,i,n=p(4);u(4),H("matTooltip",((A=n.currentEvalSet())==null?null:A.model_execution_mode)||"N/A"),u(),lA(((i=n.currentEvalSet())==null?null:i.model_execution_mode)||"N/A")}}function q_A(t,e){if(t&1&&(B(0,"div",35)(1,"table",36)(2,"tr")(3,"td"),y(4,"Name"),Q(),B(5,"td")(6,"span",37),y(7),Q()()(),O(8,j_A,6,2,"tr"),B(9,"tr")(10,"td"),y(11,"Total Cases"),Q(),B(12,"td")(13,"span",37),y(14),Q()()(),B(15,"tr")(16,"td"),y(17,"Total Runs"),Q(),B(18,"td")(19,"span",37),y(20),Q()()()()()),t&2){let A=p(3);u(6),H("matTooltip",A.selectedEvalSet()),u(),lA(A.selectedEvalSet()),u(),Y(A.isEvalV2Enabled()?8:-1),u(5),H("matTooltip",A.evalCases.length.toString()),u(),lA(A.evalCases.length),u(5),H("matTooltip",A.getEvalHistoryOfCurrentSetSorted().length.toString()),u(),lA(A.getEvalHistoryOfCurrentSetSorted().length)}}function V_A(t,e){if(t&1){let A=hA();B(0,"div",45),U("click",function(){let n=T(A).$implicit,o=p(6);return J(o.getEvalCase(n))}),B(1,"mat-checkbox",46),U("click",function(n){return n.stopPropagation()})("change",function(n){let o=T(A).$implicit,a=p(6);return J(n?a.selection.toggle(o):null)}),Q(),B(2,"div",47),y(3),Q(),B(4,"button",48),U("click",function(n){let o=T(A).$implicit,a=p(6);return J(a.requestEditEvalCase(n,o))}),B(5,"mat-icon"),y(6,"edit"),Q()(),B(7,"button",26),U("click",function(n){let o=T(A).$implicit,a=p(6);return J(a.confirmDeleteEvalCase(n,o))}),B(8,"mat-icon"),y(9,"delete"),Q()()()}if(t&2){let A,i=e.$implicit,n=p(6);RA("selected-row",i===((A=n.selectedEvalCase())==null?null:A.evalId)),u(),H("checked",n.selection.isSelected(i)),u(2),ue(" ",i," "),u(),H("matTooltip",n.i18n.editEvalCaseTooltip),u(3),H("matTooltip",n.i18n.deleteEvalCaseTooltip)}}function W_A(t,e){if(t&1&&(B(0,"div",43),Je(1,V_A,10,6,"div",44,hi),Q()),t&2){let A=p(5);u(),Oe(A.evalCases)}}function Z_A(t,e){if(t&1){let A=hA();B(0,"div",39)(1,"mat-checkbox",40),U("change",function(n){T(A);let o=p(4);return J(n?o.toggleAllRows():null)}),Q(),B(2,"button",41),U("click",function(){T(A);let n=p(4);return J(n.openEvalConfigDialog())}),B(3,"mat-icon"),y(4,"play_arrow"),Q(),y(5),Q(),B(6,"button",42),U("click",function(){T(A);let n=p(4);return J(n.openNewEvalCaseDialog())}),B(7,"mat-icon"),y(8,"add"),Q(),y(9),Q(),QA(10,"span",4),B(11,"button",15),U("click",function(){T(A);let n=p(4);return J(n.listEvalCases())}),B(12,"mat-icon"),y(13,"refresh"),Q()()(),O(14,W_A,3,0,"div",43)}if(t&2){let A=p(4);u(),H("checked",A.selection.hasValue()&&A.isAllSelected())("indeterminate",A.selection.hasValue()&&!A.isAllSelected()),u(),H("disabled",A.evalCases.length==0),u(3),ue(" ",A.isAllSelected()||A.selection.isEmpty()?A.i18n.runEvaluationButton:A.i18n.runSelectedEvaluationButton," "),u(4),ue(" ",A.i18n.addSessionToSetButtonPrefix," "),u(5),Y(A.evalCases.length>0?14:-1)}}function X_A(t,e){if(t&1){let A=hA();B(0,"div",54),U("click",function(){let n=T(A).$implicit,o=p(5);return J(o.getHistorySession(n.result,n.timestamp))}),B(1,"div",47),y(2),Q(),QA(3,"div",4),B(4,"div",55)(5,"span",56),y(6),Q()()()}if(t&2){let A=e.$implicit,i=e.$index;p();let n=zn(7),o=p(4);RA("selected-row",A.timestamp==o.selectedHistoryRun()),u(2),ba(" #",n.length-i," ",o.formatTimestamp(A.timestamp)," "),u(3),H("ngClass",o.isMetricsSucceed(A.result)?"status-card__passed":"status-card__failed"),u(),ue(" ",o.getMetricsScore(A.result)," ")}}function $_A(t,e){t&1&&(B(0,"div",53),y(1," No runs found for this case. "),Q())}function ARA(t,e){if(t&1&&(B(0,"div",38)(1,"div",49)(2,"h3",50),y(3),Q()(),B(4,"h4",51),y(5,"Past Runs"),Q(),B(6,"div",43),ta(7),Je(8,X_A,7,6,"div",52,AiA),O(10,$_A,2,0,"div",53),Q()()),t&2){let A=p(4),i=A.selectedEvalCase();u(3),ue("Case: ",i.evalId),u(4);let n=ga(A.caseHistory());u(),Oe(n),u(2),Y(n.length===0?10:-1)}}function eRA(t,e){t&1&&(B(0,"div",16)(1,"div",17),y(2,"No Eval Cases"),Q(),B(3,"div",18),y(4,"Add a session to this set to get started."),Q()())}function tRA(t,e){if(t&1&&(B(0,"div"),O(1,Z_A,15,6)(2,ARA,11,3,"div",38),O(3,eRA,5,0,"div",16),Q()),t&2){let A=p(3);u(),Y(A.selectedEvalCase()?2:1),u(2),Y(A.evalCases.length===0?3:-1)}}function iRA(t,e){t&1&&(B(0,"div",16)(1,"div",17),y(2,"No Runs"),Q(),B(3,"div",18),y(4,"Run an evaluation to see results here."),Q()())}function nRA(t,e){if(t&1){let A=hA();B(0,"div",45),U("click",function(){let n=T(A).$implicit,o=p(6);return J(o.selectedHistoryRun.set(n.timestamp))}),B(1,"div",47),y(2),Q(),QA(3,"div",4),B(4,"div",59)(5,"span",60),y(6),Q(),B(7,"span",61),y(8,"|"),Q(),B(9,"span",62),y(10),Q()()()}if(t&2){let A=e.$implicit,i=e.$index;p(3);let n=zn(0),o=p(3);u(2),ba(" #",n.length-i," ",o.formatTimestamp(A.timestamp)," "),u(4),ba("",o.getPassCountForCurrentResult(A.evaluationResults.evaluationResults)," ",o.i18n.passStatusCaps),u(3),ut("color",o.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)===0?"gray":""),u(),ba("",o.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)," ",o.i18n.failStatusCaps)}}function oRA(t,e){if(t&1&&(B(0,"div",43),Je(1,nRA,11,8,"div",58,AiA),Q()),t&2){p(2);let A=zn(0);u(),Oe(A)}}function aRA(t,e){if(t&1&&(B(0,"span",61),y(1,"|"),Q(),B(2,"span",62),y(3),Q()),t&2){p(2);let A=zn(1),i=p(5);u(3),ba("",i.getFailCountForCurrentResult(A.evaluationResults)," ",i.i18n.failStatusCaps)}}function rRA(t,e){if(t&1&&(B(0,"span",69)(1,"span",70),y(2),Ht(3,"formatMetricName"),Q(),y(4,": "),B(5,"span",71),y(6),Ht(7,"number"),Q()()),t&2){let A=e.$implicit;u(),H("matTooltip",A.metricName),u(),lA(ri(3,3,A.metricName)),u(4),lA(T0(7,5,A.threshold,"1.2-2"))}}function sRA(t,e){if(t&1&&(B(0,"div",66),Je(1,rRA,8,8,"span",69,hi),Q()),t&2){let A=p(7);u(),Oe(A.currentHistoryMetrics())}}function lRA(t,e){if(t&1){let A=hA();B(0,"div",72),U("click",function(){let n=T(A).$implicit;p(2);let o=zn(0),a=p(5);return J(a.getHistorySession(n,o))}),B(1,"span"),y(2),Q(),B(3,"span",73),y(4),Q()()}if(t&2){let A=e.$implicit,i=p(7);u(2),ue(" ",A.evalId," "),u(),H("ngClass",i.isMetricsSucceed(A)?"status-card__passed":"status-card__failed"),u(),ue(" ",i.getMetricsScore(A)," ")}}function gRA(t,e){if(t&1&&(B(0,"div",63)(1,"div",64)(2,"div",65)(3,"div",59)(4,"span",60),y(5),Q(),O(6,aRA,4,2),Q(),O(7,sRA,3,0,"div",66),Q()()(),B(8,"div",67),Je(9,lRA,5,3,"div",68,__A),Q()),t&2){p();let A=zn(1),i=p(5);u(5),ba("",i.getPassCountForCurrentResult(A.evaluationResults)," ",i.i18n.passStatusCaps),u(),Y(i.getFailCountForCurrentResult(A.evaluationResults)>0?6:-1),u(),Y(i.currentHistoryMetrics().length>0?7:-1),u(2),Oe(A.evaluationResults)}}function cRA(t,e){if(t&1&&(ta(0)(1),O(2,gRA,11,4)),t&2){let A=p(5),i=ga(A.selectedHistoryRun());u();let n=ga(A.getEvalHistoryOfCurrentSet()[i]);u(),Y(n?2:-1)}}function CRA(t,e){if(t&1&&(B(0,"div",57),O(1,oRA,3,0,"div",43)(2,cRA,3,3),Q()),t&2){let A=p(4);u(),Y(A.selectedHistoryRun()?2:1)}}function IRA(t,e){if(t&1&&(ta(0),O(1,iRA,5,0,"div",16)(2,CRA,3,1,"div",57)),t&2){let A=ga(p(3).evalHistorySorted());u(),Y(A.length===0?1:2)}}function dRA(t,e){if(t&1&&(O(0,q_A,21,7,"div",35),O(1,tRA,4,2,"div"),O(2,IRA,3,2)),t&2){let A=p(2);Y(A.selectedEvalTab()==="info"?0:-1),u(),Y(A.selectedEvalTab()==="cases"?1:-1),u(),Y(A.selectedEvalTab()==="history"?2:-1)}}function BRA(t,e){if(t&1){let A=hA();B(0,"div",5)(1,"div",27)(2,"div",28)(3,"button",29),U("click",function(){T(A);let n=p();return n.selectedEvalTab.set("info"),n.selectedEvalCase.set(null),J(n.selectedHistoryRun.set(null))}),B(4,"mat-icon"),y(5,"info"),Q()(),B(6,"button",30),U("click",function(){T(A);let n=p();return n.selectedEvalTab.set("cases"),n.selectedEvalCase.set(null),J(n.selectedHistoryRun.set(null))}),B(7,"mat-icon"),y(8,"list"),Q()(),B(9,"button",31),U("click",function(){T(A);let n=p();return n.selectedEvalTab.set("history"),n.selectedEvalCase.set(null),n.selectedHistoryRun.set(null),J(n.getEvaluationResult())}),B(10,"mat-icon"),y(11,"history"),Q()()(),B(12,"div",32),O(13,P_A,2,2,"div",33)(14,dRA,3,3),Q()()()}if(t&2){let A=p();u(3),RA("active",A.selectedEvalTab()==="info"),u(3),RA("active",A.selectedEvalTab()==="cases"),u(3),RA("active",A.selectedEvalTab()==="history"),u(4),Y(A.evalRunning()?13:14)}}var rv=new kA("EVAL_TAB_COMPONENT"),_c=class t{checkboxes=XF(tc);appName=me("");userId=me("");sessionId=me("");sessionSelected=ui();shouldShowTab=ui();evalNotInstalledMsg=ui();evalCaseSelected=ui();evalSetIdSelected=ui();shouldReturnToSession=ui();editEvalCaseRequested=ui();evalCasesSubject=new ei([]);changeDetectorRef=w(wt);flagService=w(yr);i18n=w(WtA);displayedColumns=["select","evalId"];evalsets=[];selectedEvalSet=bA("");currentEvalSet=bA(null);evalHistorySorted=pe(()=>{let e=this.appEvaluationResults[this.appName()]?.[this.selectedEvalSet()]||{};return Object.keys(e).sort((i,n)=>n.localeCompare(i)).map(i=>({timestamp:i,evaluationResults:e[i]}))});currentHistoryMetrics=pe(()=>{let e=this.selectedHistoryRun()||this.evalHistorySorted()[0]?.timestamp;if(!e)return this.evalMetrics;let A=this.evalHistorySorted().find(i=>i.timestamp===e);return A?this.getEvalMetrics(A):this.evalMetrics});caseHistory=pe(()=>{let e=this.selectedEvalCase();if(!e)return[];let A=e.evalId,i=this.evalHistorySorted();return console.log("[DEBUG] caseHistory history:",i.map(n=>n.timestamp),"selectedHistoryRun:",this.selectedHistoryRun()),i.map(n=>{let o=n.evaluationResults.evaluationResults.find(a=>a.evalId===A);return{timestamp:n.timestamp,result:o}}).filter(n=>n.result!==void 0)});evalCases=[];selectedEvalCase=bA(null);deletedEvalCaseIndex=-1;dataSource=new Td(this.evalCases);selection=new V0(!0,[]);showEvalHistory=bA(!1);selectedEvalTab=bA("cases");selectedHistoryRun=bA(null);evalRunning=bA(!1);evalMetrics=uQ;isEvalV2Enabled=bA(!1);currentEvalResultBySet=new Map;dialog=w(Or);appEvaluationResults={};evalService=w(t0);sessionService=w(Al);constructor(){this.evalCasesSubject.subscribe(e=>{!this.selectedEvalCase()&&this.deletedEvalCaseIndex>=0&&e.length>0?(this.selectNewEvalCase(e),this.deletedEvalCaseIndex=-1):e.length===0&&this.shouldReturnToSession.emit(!0)})}ngOnChanges(e){e.appName&&(this.selectedEvalSet.set(""),this.evalCases=[],this.getEvalSet(),this.getEvaluationResult())}ngOnInit(){this.flagService.isEvalV2Enabled().pipe($n()).subscribe(A=>this.isEvalV2Enabled.set(A));let e=localStorage.getItem("adk_eval_metrics_selection");if(e)try{this.evalMetrics=JSON.parse(e)}catch(A){console.error("Error parsing saved eval metrics",A),this.evalMetrics=uQ}}selectNewEvalCase(e){let A=this.deletedEvalCaseIndex;this.deletedEvalCaseIndex===e.length&&(A=0),this.getEvalCase(e[A])}getEvalSet(){this.appName()!==""&&this.evalService.getEvalSets(this.appName()).pipe(Po(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),oe(null)):oe([]))).subscribe(e=>{e!==null&&(this.shouldShowTab.emit(!0),this.evalsets=e,this.changeDetectorRef.detectChanges())})}getNextDefaultEvalSetName(){let e=/^eval_set_(\d+)$/,A=0;for(let i of this.evalsets)if(typeof i=="string"){let n=i.match(e);if(n){let o=parseInt(n[1],10);o>A&&(A=o)}}return`eval_set_${A+1}`}openNewEvalSetDialog(){let e=this.getNextDefaultEvalSetName();this.dialog.open(ov,{width:"600px",data:{appName:this.appName(),defaultName:e}}).afterClosed().subscribe(i=>{i&&(this.getEvalSet(),this.changeDetectorRef.detectChanges())})}openNewEvalCaseDialog(){this.sessionId()&&this.sessionService.getSession(this.userId(),this.appName(),this.sessionId()).subscribe(e=>{let i=(e.state?.__session_metadata__?.displayName||this.sessionId()).replace(/ /g,"_").replace(/[^a-zA-Z0-9_-]/g,"");this.dialog.open(nv,{width:"600px",data:{appName:this.appName(),userId:this.userId(),sessionId:this.sessionId(),evalSetId:this.selectedEvalSet(),defaultName:i,existingCases:this.evalCases}}).afterClosed().subscribe(o=>{o&&(this.listEvalCases(),this.changeDetectorRef.detectChanges())})})}listEvalCases(){this.evalCases=[],this.evalService.listEvalCases(this.appName(),this.selectedEvalSet()).subscribe(e=>{this.evalCases=e,this.dataSource=new Td(this.evalCases),this.evalCasesSubject.next(this.evalCases),this.changeDetectorRef.detectChanges()})}runEval(){this.evalRunning.set(!0),this.evalService.runEval(this.appName(),this.selectedEvalSet(),this.selection.selected.length===0?this.dataSource.data:this.selection.selected,this.evalMetrics).pipe(Po(e=>(e.error?.detail?.includes("not installed")&&this.evalNotInstalledMsg.emit(e.error.detail),oe([])))).subscribe(e=>{this.currentEvalResultBySet.set(this.selectedEvalSet(),e),this.getEvaluationResult(!0),this.changeDetectorRef.detectChanges()})}selectEvalSet(e){this.selectedEvalSet.set(e),this.listEvalCases(),this.isEvalV2Enabled()&&this.evalService.getEvalSet(this.appName(),e).pipe(Po(A=>(console.error("Error fetching eval set details",A),oe(null)))).subscribe(A=>{this.currentEvalSet.set(A),this.changeDetectorRef.detectChanges()})}clearSelectedEvalSet(){if(this.selectedEvalTab()!=="cases"){this.selectedEvalTab.set("cases");return}this.selectedEvalSet.set(""),this.currentEvalSet.set(null)}clearAllNavigation(){this.selectedEvalSet.set(""),this.selectedHistoryRun.set(null),this.selectedEvalCase.set(null),this.currentEvalSet.set(null)}goToEvalSet(){this.selectedHistoryRun.set(null),this.selectedEvalCase.set(null)}isAllSelected(){let e=this.selection.selected.length,A=this.dataSource.data.length;return e===A}toggleAllRows(){if(this.isAllSelected()){this.selection.clear();return}this.selection.select(...this.dataSource.data)}getEvalResultForCase(e){let A=this.currentEvalResultBySet.get(this.selectedEvalSet())?.filter(i=>i.evalId==e);if(!(!A||A.length==0))return A[0].finalEvalStatus}formatToolUses(e){if(!e||!Array.isArray(e))return[];let A=[];for(let i of e)A.push({name:i.name,args:i.args});return A}addEvalCaseResultToEvents(e,A){let i=A.evalMetricResultPerInvocation,n=-1;if(i)for(let o=0;on.evalId==e)[0],i=A.sessionId;this.sessionService.getSession(this.userId(),this.appName(),i).subscribe(n=>{this.addEvalCaseResultToEvents(n,A);let o=this.fromApiResultToSession(n);this.sessionSelected.emit(o)})}toggleEvalHistoryButton(){this.showEvalHistory.set(!this.showEvalHistory())}getEvalHistoryOfCurrentSet(){return this.appEvaluationResults[this.appName()]?this.appEvaluationResults[this.appName()][this.selectedEvalSet()]||{}:{}}getEvalHistoryOfCurrentSetSorted(){let e=this.getEvalHistoryOfCurrentSet();return e?Object.keys(e).sort((n,o)=>o.localeCompare(n)).map(n=>({timestamp:n,evaluationResults:e[n]})):[]}getPassCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==1).length}getFailCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==2).length}getMetricsCounts(e){if(!e)return{passed:0,total:0};let A=0,i=0;if(e.evalMetricResults&&e.evalMetricResults.length>0)A=e.evalMetricResults.filter(n=>n.evalStatus===1).length,i=e.evalMetricResults.length;else if(e.evalMetricResultPerInvocation)for(let n of e.evalMetricResultPerInvocation)n.evalMetricResults&&(A+=n.evalMetricResults.filter(o=>o.evalStatus===1).length,i+=n.evalMetricResults.length);return{passed:A,total:i}}getMetricsScore(e){let{passed:A,total:i}=this.getMetricsCounts(e);return`${A}/${i}`}isMetricsSucceed(e){let{passed:A,total:i}=this.getMetricsCounts(e);return A===i}formatTimestamp(e){let A=Number(e);if(isNaN(A))return"Invalid timestamp provided";let i=new Date(A*1e3);if(isNaN(i.getTime()))return"Invalid date created from timestamp";let n={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return new Intl.DateTimeFormat("en-US",n).format(i)}getEvaluationStatusCardActionButtonIcon(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled?"keyboard_arrow_up":"keyboard_arrow_down"}toggleHistoryStatusCard(e){this.getEvalHistoryOfCurrentSet()[e].isToggled=!this.getEvalHistoryOfCurrentSet()[e].isToggled}isEvaluationStatusCardToggled(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled}generateHistoryEvaluationDatasource(e){return this.getEvalHistoryOfCurrentSet()[e].evaluationResults}getHistorySession(e,A){let i=e.sessionId,n=e.evalId;this.selectedHistoryRun.set(A),this.evalService.getEvalCase(this.appName(),this.selectedEvalSet(),n).subscribe(o=>{this.sessionService.getSession(this.userId(),this.appName(),i).subscribe(a=>{this.addEvalCaseResultToEvents(a,e);let r=this.fromApiResultToSession(a);r.evalCase=o,r.evalCaseResult=e,r.timestamp=A,this.sessionSelected.emit(r)})})}getEvalCase(e){this.evalService.getEvalCase(this.appName(),this.selectedEvalSet(),e).subscribe(A=>{this.selectedEvalCase.set(A),this.evalCaseSelected.emit(A),this.evalSetIdSelected.emit(this.selectedEvalSet())})}resetEvalCase(){this.selectedEvalCase.set(null)}resetEvalResults(){this.currentEvalResultBySet.clear()}confirmDeleteEvalCase(e,A){e.stopPropagation();let i={title:"Confirm delete",message:`Are you sure you want to delete ${A}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:i}).afterClosed().subscribe(o=>{o&&this.deleteEvalCase(A)})}requestEditEvalCase(e,A){e.stopPropagation(),this.evalService.getEvalCase(this.appName(),this.selectedEvalSet(),A).subscribe(i=>{this.selectedEvalCase.set(i),this.evalCaseSelected.emit(i),this.evalSetIdSelected.emit(this.selectedEvalSet()),this.editEvalCaseRequested.emit(i)})}deleteEvalCase(e){this.evalService.deleteEvalCase(this.appName(),this.selectedEvalSet(),e).subscribe(A=>{this.deletedEvalCaseIndex=this.evalCases.indexOf(e),this.selectedEvalCase.set(null),this.listEvalCases(),this.changeDetectorRef.detectChanges()})}confirmDeleteEvalSet(e,A){e.stopPropagation();let i={title:"Confirm delete",message:`Are you sure you want to delete eval set ${A}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:i}).afterClosed().subscribe(o=>{o&&this.deleteEvalSet(A)})}deleteEvalSet(e){this.evalService.deleteEvalSet(this.appName(),e).subscribe(A=>{this.getEvalSet(),this.changeDetectorRef.detectChanges()})}getEvaluationResult(e=!1){this.evalService.listEvalResults(this.appName()).pipe(Po(A=>A.status===404&&A.statusText==="Not Found"?(this.shouldShowTab.emit(!1),oe(null)):oe([])),Ei(A=>{if(!A||A.length===0)return oe([]);let i=A.map(n=>this.evalService.getEvalResult(this.appName(),n));return qC(i)})).subscribe(A=>{if(A.length===0)return;let i="";for(let n of A){this.appEvaluationResults[this.appName()]||(this.appEvaluationResults[this.appName()]={}),this.appEvaluationResults[this.appName()][n.evalSetId]||(this.appEvaluationResults[this.appName()][n.evalSetId]={});let o=n.creationTimestamp;(!i||o>i)&&(i=o);let a={isToggled:!1,evaluationResults:n.evalCaseResults.map(r=>({setId:r.id,evalId:r.evalId,finalEvalStatus:r.finalEvalStatus,evalMetricResults:r.evalMetricResults,evalMetricResultPerInvocation:r.evalMetricResultPerInvocation,sessionId:r.sessionId,sessionDetails:r.sessionDetails,overallEvalMetricResults:r.overallEvalMetricResults??[]}))};this.appEvaluationResults[this.appName()][n.evalSetId][o]=a}this.changeDetectorRef.detectChanges(),e&&i&&(this.selectedEvalTab.set("history"),this.selectedHistoryRun.set(i)),this.evalRunning.set(!1)})}openEvalConfigDialog(){this.evalService.getMetricsInfo(this.appName()).pipe(Po(e=>(console.error("Error fetching metrics info",e),oe({metricsInfo:[]})))).subscribe(e=>{this.dialog.open(av,{maxWidth:"90vw",maxHeight:"90vh",data:{evalMetrics:this.evalMetrics,metricsInfo:e.metricsInfo||[]}}).afterClosed().subscribe(i=>{i&&(this.evalMetrics=i,localStorage.setItem("adk_eval_metrics_selection",JSON.stringify(i)),this.runEval())})})}getEvalMetrics(e){if(!e||!e.evaluationResults||!e.evaluationResults.evaluationResults)return this.evalMetrics;let A=e.evaluationResults.evaluationResults;return A.length===0?this.evalMetrics:typeof A[0].overallEvalMetricResults>"u"||!A[0].overallEvalMetricResults||A[0].overallEvalMetricResults.length===0?this.evalMetrics:A[0].overallEvalMetricResults.map(n=>({metricName:n.metricName,threshold:n.threshold}))}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-eval-tab"]],viewQuery:function(A,i){A&1&&ns(i.checkboxes,tc,5),A&2&&ur()},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"]},outputs:{sessionSelected:"sessionSelected",shouldShowTab:"shouldShowTab",evalNotInstalledMsg:"evalNotInstalledMsg",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",shouldReturnToSession:"shouldReturnToSession",editEvalCaseRequested:"editEvalCaseRequested"},features:[Yt],decls:17,vars:11,consts:[[1,"eval-container"],[1,"eval-detail-header"],["mat-icon-button","","matTooltip","All Eval Sets",3,"click"],[1,"breadcrumb-item",2,"font-weight","500","color","var(--mat-sys-on-surface)"],[1,"spacer"],[1,"eval-details-container"],[1,"breadcrumb-separator"],["matTooltip","Eval Set",1,"breadcrumb-item","clickable"],["matTooltip","Eval Set",1,"breadcrumb-item"],["matTooltip","Eval Set",1,"breadcrumb-item","clickable",3,"click"],["matTooltip","Eval Cases",1,"breadcrumb-item"],["matTooltip","Runs",1,"breadcrumb-item"],["matTooltip","Run",1,"breadcrumb-item"],["matTooltip","Eval Case",1,"breadcrumb-item"],["mat-button","",3,"click","matTooltip"],["mat-icon-button","","matTooltip","Refresh",3,"click"],[1,"empty-eval-info"],[1,"info-title"],[1,"info-detail"],[1,"info-create",3,"click"],[1,"eval-set-row"],[1,"eval-set-row",3,"click"],[1,"eval-set-left"],[1,"material-symbols-outlined"],[1,"eval-set-name"],[1,"eval-set-right"],["mat-icon-button","",1,"delete-btn",3,"click","matTooltip"],[1,"eval-details-content"],[1,"vertical-tabs-sidebar"],["mat-icon-button","","matTooltip","Info","matTooltipPosition","right",3,"click"],["mat-icon-button","","matTooltip","Eval Cases","matTooltipPosition","right",3,"click"],["mat-icon-button","","matTooltip","Runs","matTooltipPosition","right",3,"click"],[1,"vertical-tabs-content"],[2,"display","flex","justify-content","center","align-items","center","padding","20px"],["mode","indeterminate",3,"diameter","strokeWidth"],[1,"info-tables-container"],["app-info-table",""],[3,"matTooltip"],[1,"eval-case-details",2,"padding","16px"],[1,"toolbar",2,"position","sticky","top","0","z-index","1"],[2,"margin-left","6px",3,"change","checked","indeterminate"],["mat-button","","color","primary",3,"click","disabled"],["mat-button","","color","accent",3,"click"],[1,"eval-cases-list"],[1,"eval-case-row",3,"selected-row"],[1,"eval-case-row",3,"click"],[3,"click","change","checked"],[1,"eval-case-id"],["mat-icon-button","",1,"edit-btn",3,"click","matTooltip"],[2,"margin-bottom","16px"],[2,"margin-top","0"],[2,"margin-bottom","8px"],[1,"eval-case-row","clickable",3,"selected-row"],[2,"padding","16px","text-align","center","color","var(--app-color-text-secondary)"],[1,"eval-case-row","clickable",3,"click"],[1,"status-card__summary",2,"width","50px","text-align","center"],[2,"font-family","monospace",3,"ngClass"],[2,"padding","16px"],[1,"eval-case-row"],[1,"status-card__summary"],[1,"status-card__passed",2,"font-family","monospace"],[1,"status-card__separator"],[1,"status-card__failed",2,"font-family","monospace"],[1,"status-card",2,"margin-top","0"],[1,"status-card__overview"],[1,"status-card__info"],[1,"status-card__metrics"],[1,"status-card__history-cases"],[1,"status-card__history-case",2,"display","flex","justify-content","space-between","align-items","center"],[1,"status-card__metric"],[1,"status-card__metric-name",3,"matTooltip"],[1,"status-card__metric-value"],[1,"status-card__history-case",2,"display","flex","justify-content","space-between","align-items","center",3,"click"],[2,"font-family","monospace","width","50px","text-align","center",3,"ngClass"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"div",1)(2,"button",2),U("click",function(){return i.clearAllNavigation()}),B(3,"mat-icon"),y(4,"home"),Q()(),O(5,R_A,2,0,"span",3),O(6,L_A,4,1),O(7,G_A,4,0),O(8,K_A,4,0),O(9,U_A,4,1),O(10,T_A,4,1),QA(11,"span",4),O(12,J_A,7,1),Q(),O(13,O_A,0,0),O(14,Y_A,8,3,"div"),O(15,z_A,3,0,"div"),O(16,BRA,15,7,"div",5),Q()),A&2&&(u(5),Y(i.selectedEvalSet()===""?5:-1),u(),Y(i.selectedEvalSet()!==""?6:-1),u(),Y(i.selectedEvalSet()!==""&&i.selectedEvalTab()==="cases"&&!i.selectedEvalCase()?7:-1),u(),Y(i.selectedEvalSet()!==""&&i.selectedEvalTab()==="history"&&!i.selectedHistoryRun()?8:-1),u(),Y(i.selectedHistoryRun()&&!i.selectedEvalCase()?9:-1),u(),Y(i.selectedEvalCase()?10:-1),u(2),Y(i.selectedEvalSet()===""?12:-1),u(),Y(i.selectedEvalSet()==""?13:-1),u(),Y(i.evalsets.length==0?14:-1),u(),Y(i.evalsets.length>0&&i.selectedEvalSet()==""?15:-1),u(),Y(i.selectedEvalSet()!=""?16:-1))},dependencies:[Wt,pi,ji,dn,tc,zl,gs,OI,$0,Ya,ip,JI],styles:[".eval-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;height:48px;flex-shrink:0;padding:0 10px;background-color:var(--mat-sys-surface-container, #f5f5f5);border-bottom:1px solid var(--mat-sys-outline-variant, #e0e0e0);gap:8px}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1 1 auto}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:32px!important;line-height:normal!important;border-radius:16px!important;font-size:13px!important;font-weight:500!important;display:inline-flex!important;align-items:center;justify-content:center}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-button[_ngcontent-%COMP%]{padding:0 12px!important}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:4px!important}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{width:32px!important;min-width:32px!important;padding:0!important;border-radius:50%!important}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:0!important}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{width:32px!important;height:32px!important;border-radius:50%!important}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px!important;width:20px!important;height:20px!important;line-height:20px!important;vertical-align:middle}.eval-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{vertical-align:middle}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%]{width:100%;background:transparent;border-top:1px solid var(--mat-sys-outline-variant, #e0e0e0)}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:600}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{vertical-align:middle;padding:6px 16px;border-bottom:1px solid var(--mat-sys-outline-variant, #e0e0e0)}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] tr.mat-header-row[_ngcontent-%COMP%]{display:none}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{cursor:pointer;background:transparent}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low, #f5f5f5)}.eval-container[_ngcontent-%COMP%] .eval-table[_ngcontent-%COMP%] tr.selected-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-high, #e0e0e0)}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%]{display:flex;align-items:center;border-bottom:1px solid var(--mat-sys-outline-variant);height:48px;flex-shrink:0;padding:0 16px;gap:8px}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1 1 auto}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .breadcrumb-separator[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin:0 4px}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .breadcrumb-item[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant)}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .breadcrumb-item.clickable[_ngcontent-%COMP%]{color:var(--mat-sys-primary);cursor:pointer}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .breadcrumb-item.clickable[_ngcontent-%COMP%]:hover{text-decoration:underline}.eval-container[_ngcontent-%COMP%] .eval-detail-header[_ngcontent-%COMP%] .breadcrumb-item[_ngcontent-%COMP%]:last-child{color:var(--mat-sys-on-surface);font-weight:500}.eval-container[_ngcontent-%COMP%] .eval-set-title[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--mat-sys-on-surface);margin-right:16px}.eval-case-id[_ngcontent-%COMP%]{cursor:pointer}.eval-set-actions[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--mat-sys-on-surface);font-style:normal;font-weight:700;font-size:14px}.empty-eval-info[_ngcontent-%COMP%]{margin-top:12px}.info-title[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);font-size:14px;font-weight:500;padding-top:13px;padding-right:16px;padding-left:16px}.info-detail[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:14px;font-weight:400;padding-top:13px;padding-right:16px;padding-left:16px;letter-spacing:.2px}.info-create[_ngcontent-%COMP%]{color:var(--mat-sys-primary);font-size:14px;font-style:normal;font-weight:500;padding-right:16px;padding-left:16px;margin-top:19px;padding-bottom:16px;cursor:pointer}.eval-set-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;cursor:pointer;padding:6px 16px;min-height:44px;border-bottom:1px solid var(--mat-sys-outline-variant, #e0e0e0);background:transparent}.eval-set-row[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low, #f5f5f5)}.eval-set-row[_ngcontent-%COMP%]:hover .delete-btn[_ngcontent-%COMP%]{opacity:1}.eval-set-row[_ngcontent-%COMP%] .eval-set-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.eval-set-row[_ngcontent-%COMP%] .eval-set-left[_ngcontent-%COMP%] span.material-symbols-outlined[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:20px}.eval-set-row[_ngcontent-%COMP%] .eval-set-name[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface)}.eval-set-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease-in-out;color:var(--mat-sys-outline)}.eval-set-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]:hover{color:var(--mat-sys-error)}.eval-set-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px!important;width:20px!important;height:20px!important;line-height:20px!important}.selected-eval-case[_ngcontent-%COMP%]{font-weight:900;color:var(--mat-sys-primary)}.save-session-btn[_ngcontent-%COMP%]{width:100%;border:none;border-radius:4px;margin-top:12px;cursor:pointer}.save-session-btn-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.save-session-btn-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--mat-sys-on-primary);font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.run-eval-btn[_ngcontent-%COMP%]{border-radius:4px;border:1px solid var(--mat-sys-outline);padding:8px 24px;margin-top:16px;color:var(--mat-sys-primary);cursor:pointer}.run-eval-btn[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-high)}.result-btn[_ngcontent-%COMP%]{display:flex;border-radius:4px;border:1px solid var(--mat-sys-outline-variant);margin-top:4px;cursor:pointer}.result-btn[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-high)}.result-btn.pass[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.result-btn.fail[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.evaluation-tab-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.evaluation-history-icon[_ngcontent-%COMP%]{cursor:pointer;margin-top:4px}.status-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;border-radius:8px;padding:12px 16px;margin-top:12px;background-color:var(--mat-sys-surface-container)}.status-card__overview[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.status-card__info[_ngcontent-%COMP%]{display:flex;flex-direction:column}.status-card__timestamp[_ngcontent-%COMP%]{font-size:.9em;color:var(--mat-sys-on-surface-variant);margin-bottom:5px}.status-card__summary[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.95em;font-weight:500;color:var(--mat-sys-on-surface)}.status-card__metrics[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;font-size:.75em;margin-top:3px}.status-card__metric[_ngcontent-%COMP%]{width:160px;display:flex;align-items:center;color:var(--mat-sys-on-surface);margin-right:12px;margin-bottom:4px}.status-card__metric-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.status-card__metric-value[_ngcontent-%COMP%]{margin-left:4px;flex-shrink:0}.status-card__failed[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.status-card__separator[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin:0 8px}.status-card__passed[_ngcontent-%COMP%]{color:#2e7d32}.status-card__action[_ngcontent-%COMP%]{display:flex;align-items:center}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);cursor:pointer;transition:transform .2s ease-in-out}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:1.2em;cursor:pointer}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__history-cases[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-top:3px;justify-content:flex-start;width:100%}.status-card__history-case[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:4px;padding:8px 12px;border-radius:4px;cursor:pointer;box-sizing:border-box}.status-card__history-case[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low, #f5f5f5)}.eval-spinner[_ngcontent-%COMP%]{margin-top:12px}.eval-details-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;overflow:hidden}.eval-details-content[_ngcontent-%COMP%]{display:flex;flex:1;overflow:hidden}.vertical-tabs-sidebar[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:48px;border-right:1px solid var(--mat-sys-outline-variant);padding-top:8px;align-items:center;gap:8px}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)!important;color:var(--mat-sys-on-secondary-container)!important}.vertical-tabs-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.eval-cases-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.eval-case-row[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer;padding:8px 16px;gap:12px;border-bottom:1px solid var(--mat-sys-outline-variant);background:transparent}.eval-case-row[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low)}.eval-case-row[_ngcontent-%COMP%]:hover .delete-btn[_ngcontent-%COMP%], .eval-case-row[_ngcontent-%COMP%]:hover .edit-btn[_ngcontent-%COMP%]{opacity:1}.eval-case-row.selected-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-high)}.eval-case-row[_ngcontent-%COMP%] .eval-case-id[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface);font-family:Google Sans Mono,monospace;flex:1}.eval-case-row[_ngcontent-%COMP%] .edit-btn[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease-in-out;color:var(--mat-sys-on-surface-variant)}.eval-case-row[_ngcontent-%COMP%] .edit-btn[_ngcontent-%COMP%]:hover{color:var(--mat-sys-primary)}.eval-case-row[_ngcontent-%COMP%] .edit-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px!important;width:20px!important;height:20px!important;line-height:20px!important}.eval-case-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease-in-out;color:var(--mat-sys-on-surface-variant)}.eval-case-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]:hover{color:var(--mat-sys-error)}.eval-case-row[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px!important;width:20px!important;height:20px!important;line-height:20px!important}.eval-case-row.header-row[_ngcontent-%COMP%]{cursor:default;background-color:var(--mat-sys-surface-container-lowest)}.eval-case-row.header-row[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-lowest)}.info-tables-container[_ngcontent-%COMP%]{padding:16px;overflow-y:auto;display:flex;flex-direction:column;gap:24px}"]})};var ERA={noSessionsFound:"No sessions found",readonlyChip:"Read-only",filterSessionsLabel:"Search using session ID"},eiA=new kA("Session Tab Messages",{factory:()=>ERA});function hRA(t,e){if(t&1&&(B(0,"div",1)(1,"mat-form-field",4)(2,"mat-label"),y(3),Q(),B(4,"mat-icon",5),y(5,"filter_list"),Q(),QA(6,"input",6),Q()()),t&2){let A=p();u(3),lA(A.i18n.filterSessionsLabel),u(3),H("formControl",A.filterControl)}}function QRA(t,e){t&1&&(B(0,"div",2),QA(1,"mat-progress-bar",7),Q())}function uRA(t,e){if(t&1&&(B(0,"div",3),y(1),Q()),t&2){let A=p();u(),ba("",A.i18n.noSessionsFound," for user '",A.userId,"'")}}function fRA(t,e){if(t&1&&(B(0,"div",18),y(1),Q()),t&2){let A=p().$implicit;H("title",A.id),u(),lA(A.id)}}function pRA(t,e){if(t&1&&(B(0,"div",19)(1,"mat-icon"),y(2,"visibility"),Q(),y(3),Q()),t&2){let A=p(3);u(3),ue(" ",A.i18n.readonlyChip," ")}}function mRA(t,e){if(t&1){let A=hA();B(0,"div",10),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.getSession(n.id))}),B(1,"div",11)(2,"div",12)(3,"div",13),y(4),Q(),B(5,"button",14),U("click",function(n){let o=T(A).$implicit,a=p(2);return J(a.promoteToTest(n,o))}),B(6,"mat-icon"),y(7,"fact_check"),Q()(),B(8,"button",15),U("click",function(n){let o=T(A).$implicit,a=p(2);return J(a.deleteSession(n,o))}),B(9,"mat-icon"),y(10,"delete"),Q()()(),B(11,"div",16)(12,"div",17),y(13),Q(),O(14,fRA,2,2,"div",18),Q()(),O(15,pRA,4,1,"div",19),Ht(16,"async"),Q()}if(t&2){let A=e.$implicit,i=p(2);H("ngClass",A.id===i.sessionId?"session-item current":"session-item"),u(3),RA("is-monospace",!i.hasDisplayName(A)),H("title",A.id),u(),lA(i.getSessionDisplayName(A)),u(9),lA(i.getDate(A)),u(),Y(i.hasDisplayName(A)?14:-1),u(),Y(ri(16,8,i.sessionService.canEdit(i.userId,A))===!1?15:-1)}}function wRA(t,e){t&1&&(B(0,"div",2),QA(1,"mat-progress-bar",7),Q())}function DRA(t,e){if(t&1){let A=hA();O(0,wRA,2,0,"div",2),B(1,"div",20)(2,"button",21),U("click",function(){T(A);let n=p(2);return J(n.loadMoreSessions())}),y(3,"Load more"),Q()()}if(t&2){p(2);let A=zn(3);Y(A?0:-1)}}function yRA(t,e){if(t&1&&(B(0,"div",8),Je(1,mRA,17,10,"div",9,hi),Q(),O(3,DRA,4,1),Ht(4,"async")),t&2){let A=p();u(),Oe(A.sessionList),u(2),Y(ri(4,1,A.isSessionFilteringEnabled)&&A.canLoadMoreSessions?3:-1)}}var sv=class t{userId="";appName="";sessionId="";sessionSelected=new LA;sessionReloaded=new LA;SESSIONS_PAGE_LIMIT=100;sessionList=[];canLoadMoreSessions=!1;pageToken="";filterControl=new Os("");editingSessionId=null;sessionNameControl=new Os("");refreshSessionsSubject=new ie;route=w(Vs);changeDetectorRef=w(wt);sessionService=w(Al);uiStateService=w(tg);i18n=w(eiA);featureFlagService=w(yr);dialog=w(Or);testsService=w(u2);isSessionFilteringEnabled=this.featureFlagService.isSessionFilteringEnabled();isLoadingMoreInProgress=bA(!1);isInitialized=bA(!1);constructor(){this.filterControl.valueChanges.pipe(Ls(300)).subscribe(()=>{this.pageToken="",this.sessionList=[],this.refreshSessionsSubject.next()}),this.refreshSessionsSubject.pipe(Ii(()=>{this.uiStateService.setIsSessionListLoading(!0)}),Ei(()=>{let e=this.filterControl.value||void 0;return this.isSessionFilteringEnabled?this.sessionService.listSessions(this.userId,this.appName,{filter:e,pageToken:this.pageToken,pageSize:this.SESSIONS_PAGE_LIMIT}).pipe(Po(()=>oe({items:[],nextPageToken:""}))):this.sessionService.listSessions(this.userId,this.appName).pipe(Po(()=>oe({items:[],nextPageToken:""})))}),Ii(({items:e,nextPageToken:A})=>{this.isInitialized.set(!0),this.sessionList=Array.from(new Map([...this.sessionList,...e].map(i=>[i.id,i])).values()).sort((i,n)=>Number(n.lastUpdateTime)-Number(i.lastUpdateTime)),this.pageToken=A??"",this.canLoadMoreSessions=!!A,this.changeDetectorRef.markForCheck()})).subscribe(()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)},()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)})}ngOnInit(){this.featureFlagService.isSessionFilteringEnabled().subscribe(e=>{if(e){let A=this.route.snapshot.queryParams.session;A&&this.filterControl.setValue(A)}}),setTimeout(()=>{this.refreshSessionsSubject.next()},500)}getSession(e){e&&this.sessionSelected.emit(e)}loadMoreSessions(){this.isLoadingMoreInProgress.set(!0),this.refreshSessionsSubject.next()}getSessionDisplayName(e){return e.state?.__session_metadata__?.displayName||e.id}hasDisplayName(e){return!!e.state?.__session_metadata__?.displayName}startEditSessionName(e){this.editingSessionId=e.id,this.sessionNameControl.setValue(this.getSessionDisplayName(e))}cancelEditSessionName(){this.editingSessionId=null,this.sessionNameControl.setValue("")}saveSessionName(e){if(!this.editingSessionId||!e.id)return;let A=this.sessionNameControl.value,i=e.state||{},n=Ye(gA({},i),{__session_metadata__:Ye(gA({},i.__session_metadata__||{}),{displayName:A})});e.state=n,this.editingSessionId=null,this.sessionService.updateSession(this.userId,this.appName,e.id,{stateDelta:n}).subscribe({error:()=>{}})}deleteSession(e,A){e.stopPropagation();let i=A.id,n=this.getSessionDisplayName(A),o=`Are you sure you want to delete session ${i}?`;n!==i&&(o=`Are you sure you want to delete session "${n}" (${i})?`);let a={title:"Confirm delete",message:o,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:a}).afterClosed().subscribe(s=>{s&&this.sessionService.deleteSession(this.userId,this.appName,i).subscribe(()=>{this.refreshSession(i)})})}promoteToTest(e,A){e.stopPropagation();let i=window.prompt("Enter test name (e.g., test1):");i&&this.sessionService.getSession(this.userId,this.appName,A.id).subscribe(n=>{let o={events:n.events};this.testsService.createTest(this.appName,i,o).subscribe({next:()=>{alert(`Test ${i} created successfully.`)},error:a=>{alert(`Error creating test: ${a.message||a}`)}})})}getDate(e){let A=e.lastUpdateTime||0;return new Date(A*1e3).toLocaleString()}fromApiResultToSession(e){return{id:e.id??"",appName:e.appName??"",userId:e.userId??"",state:e.state??{},events:e.events??[]}}reloadSession(e){this.sessionReloaded.emit(e)}refreshSession(e){let A=null;if(this.sessionList.length>0){let i=this.sessionList.findIndex(n=>n.id===e);i===this.sessionList.length-1&&(i=-1),A=this.sessionList[i+1]}return this.isSessionFilteringEnabled?this.filterControl.setValue(""):(this.sessionList=[],this.refreshSessionsSubject.next()),A}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-session-tab"]],inputs:{userId:"userId",appName:"appName",sessionId:"sessionId"},outputs:{sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded"},decls:8,vars:7,consts:[[1,"session-wrapper"],[1,"session-filter-container"],[1,"loading-spinner-container"],[1,"empty-state"],["appearance","outline",1,"session-filter"],["matPrefix",""],["matInput","",3,"formControl"],["mode","indeterminate"],[1,"session-tab-container",2,"margin-top","16px"],[3,"ngClass"],[3,"click","ngClass"],[1,"session-info"],[1,"session-header"],[1,"session-id",3,"title"],["mat-icon-button","","title","Promote to test",1,"action-btn","promote-btn",3,"click"],["mat-icon-button","","title","Delete session",1,"action-btn","delete-btn",3,"click"],[1,"session-sub-row"],[1,"session-date"],[1,"session-real-id",3,"title"],[1,"readonly-badge"],[1,"load-more"],["mat-button","","color","primary",3,"click"]],template:function(A,i){if(A&1&&(B(0,"div",0),O(1,hRA,7,2,"div",1),Ht(2,"async"),ta(3),Ht(4,"async"),O(5,QRA,2,0,"div",2)(6,uRA,2,2,"div",3)(7,yRA,5,3),Q()),A&2){u(),Y(ri(2,2,i.isSessionFilteringEnabled)?1:-1),u(2);let n=ga(ri(4,4,i.uiStateService.isSessionListLoading()));u(2),Y((n||!i.isInitialized())&&!i.isLoadingMoreInProgress()?5:!n&&i.isInitialized()&&i.sessionList.length===0?6:7)}},dependencies:[zl,CQ,Wt,Ya,Ko,vs,Ub,Ps,ua,ln,Dn,yn,n2,XI,qi,pi,ji,Tn,Xc,os],styles:[".session-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;font-size:14px;font-weight:700;color:var(--session-tab-session-wrapper-color);display:flex;flex-direction:column;overflow:hidden;height:100%}.session-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{color:initial;padding-top:1em;text-align:center;font-weight:400;font-style:italic}.session-wrapper[_ngcontent-%COMP%] .session-filter-container[_ngcontent-%COMP%]{border-radius:8px;padding:16px;margin-bottom:16px;margin-top:16px}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%]{width:100%}.session-tab-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.session-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;border:none;border-radius:8px;margin-bottom:4px;cursor:pointer}.session-item[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant, rgba(0, 0, 0, .04))}.session-item.current[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container, rgba(0, 0, 0, .08))}.session-item[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{margin-right:11px}.session-id[_ngcontent-%COMP%]{color:var(--session-tab-session-id-color);font-family:Roboto,sans-serif;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.session-id.is-monospace[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.session-sub-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:8px}.session-date[_ngcontent-%COMP%]{color:var(--session-tab-session-date-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.3px;white-space:nowrap}.session-real-id[_ngcontent-%COMP%]{color:var(--session-tab-session-id-color);font-family:Google Sans Mono,monospace;font-size:12px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.3px;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;text-align:right}.session-info[_ngcontent-%COMP%]{padding:11px;flex:1;min-width:0}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;height:24px;margin-bottom:2px}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .session-id[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .session-name-input[_ngcontent-%COMP%]{flex:1;height:20px;padding:0 4px;font-family:inherit;font-size:14px;border:1px solid var(--mat-sys-outline, #ccc);border-radius:4px;background:var(--mat-sys-surface, #fff);color:var(--mat-sys-on-surface, #000);outline:none;min-width:0;margin-right:4px}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .session-name-input[_ngcontent-%COMP%]:focus{border-color:var(--mat-sys-primary, #1976d2)}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;display:none}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] .mat-icon{font-size:16px;width:16px;height:16px;line-height:16px}.session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .save-btn[_ngcontent-%COMP%], .session-info[_ngcontent-%COMP%] .session-header[_ngcontent-%COMP%] .cancel-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:2px}.session-item[_ngcontent-%COMP%]:hover .action-btn.edit-btn[_ngcontent-%COMP%], .session-item[_ngcontent-%COMP%]:hover .action-btn.delete-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center}.loading-spinner-container[_ngcontent-%COMP%]{margin-left:auto;margin-right:auto;margin-top:2em;width:100%}.load-more[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-top:1em}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-right:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}"]})};var gF=["*"];function vRA(t,e){t&1&&Ve(0)}var bRA=["tabListContainer"],MRA=["tabList"],SRA=["tabListInner"],kRA=["nextPaginator"],xRA=["previousPaginator"],_RA=["content"];function RRA(t,e){}var NRA=["tabBodyWrapper"],FRA=["tabHeader"];function LRA(t,e){}function GRA(t,e){if(t&1&&Et(0,LRA,0,0,"ng-template",12),t&2){let A=p().$implicit;H("cdkPortalOutlet",A.templateLabel)}}function KRA(t,e){if(t&1&&y(0),t&2){let A=p().$implicit;lA(A.textLabel)}}function URA(t,e){if(t&1){let A=hA();B(0,"div",7,2),U("click",function(){let n=T(A),o=n.$implicit,a=n.$index,r=p(),s=Qi(1);return J(r._handleClick(o,s,a))})("cdkFocusChange",function(n){let o=T(A).$index,a=p();return J(a._tabFocusChanged(n,o))}),QA(2,"span",8)(3,"div",9),B(4,"span",10)(5,"span",11),O(6,GRA,1,1,null,12)(7,KRA,1,1),Q()()()}if(t&2){let A=e.$implicit,i=e.$index,n=Qi(1),o=p();ro(A.labelClass),RA("mdc-tab--active",o.selectedIndex===i),H("id",o._getTabLabelId(A,i))("disabled",A.disabled)("fitInkBarToContent",o.fitInkBarToContent),te("tabIndex",o._getTabIndex(i))("aria-posinset",i+1)("aria-setsize",o._tabs.length)("aria-controls",o._getTabContentId(i))("aria-selected",o.selectedIndex===i)("aria-label",A.ariaLabel||null)("aria-labelledby",!A.ariaLabel&&A.ariaLabelledby?A.ariaLabelledby:null),u(3),H("matRippleTrigger",n)("matRippleDisabled",A.disabled||o.disableRipple),u(3),Y(A.templateLabel?6:7)}}function TRA(t,e){t&1&&Ve(0)}function JRA(t,e){if(t&1){let A=hA();B(0,"mat-tab-body",13),U("_onCentered",function(){T(A);let n=p();return J(n._removeTabBodyWrapperHeight())})("_onCentering",function(n){T(A);let o=p();return J(o._setTabBodyWrapperHeight(n))})("_beforeCentering",function(n){T(A);let o=p();return J(o._bodyCentered(n))}),Q()}if(t&2){let A=e.$implicit,i=e.$index,n=p();ro(A.bodyClass),H("id",n._getTabContentId(i))("content",A.content)("position",A.position)("animationDuration",n.animationDuration)("preserveContent",n.preserveContent),te("tabindex",n.contentTabIndex!=null&&n.selectedIndex===i?n.contentTabIndex:null)("aria-labelledby",n._getTabLabelId(A,i))("aria-hidden",n.selectedIndex!==i)}}var ORA=new kA("MatTabContent"),YRA=(()=>{class t{template=w(ao);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matTabContent",""]],features:[Bt([{provide:ORA,useExisting:t}])]})}return t})(),HRA=new kA("MatTabLabel"),oiA=new kA("MAT_TAB"),cF=(()=>{class t extends hT{_closestTab=w(oiA,{optional:!0});static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[Bt([{provide:HRA,useExisting:t}]),mt]})}return t})(),aiA=new kA("MAT_TAB_GROUP"),CF=(()=>{class t{_viewContainerRef=w(Mo);_closestTabGroup=w(aiA,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(A){this._setTemplateLabelInput(A)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new ie;position=null;origin=null;isActive=!1;constructor(){w(eo).load(lr)}ngOnChanges(A){(A.hasOwnProperty("textLabel")||A.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new Jr(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(A){A&&A._closestTab===this&&(this._templateLabel=A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-tab"]],contentQueries:function(i,n,o){if(i&1&&jo(o,cF,5)(o,YRA,7,ao),i&2){let a;ae(a=re())&&(n.templateLabel=a.first),ae(a=re())&&(n._explicitContent=a.first)}},viewQuery:function(i,n){if(i&1&&Jt(ao,7),i&2){let o;ae(o=re())&&(n._implicitContent=o.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(i,n){i&2&&te("id",null)},inputs:{disabled:[2,"disabled","disabled",Be],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[Bt([{provide:oiA,useExisting:t}]),Yt],ngContentSelectors:gF,decls:1,vars:0,template:function(i,n){i&1&&(Rt(),X3(0,vRA,1,0,"ng-template"))},encapsulation:2})}return t})(),aF="mdc-tab-indicator--active",tiA="mdc-tab-indicator--no-transition",rF=class{_items;_currentItem;constructor(e){this._items=e}hide(){this._items.forEach(e=>e.deactivateInkBar()),this._currentItem=void 0}alignToElement(e){let A=this._items.find(n=>n.elementRef.nativeElement===e),i=this._currentItem;if(A!==i&&(i?.deactivateInkBar(),A)){let n=i?.elementRef.nativeElement.getBoundingClientRect?.();A.activateInkBar(n),this._currentItem=A}}},zRA=(()=>{class t{_elementRef=w(ce);_inkBarElement=null;_inkBarContentElement=null;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(A){this._fitToContent!==A&&(this._fitToContent=A,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(A){let i=this._elementRef.nativeElement;if(!A||!i.getBoundingClientRect||!this._inkBarContentElement){i.classList.add(aF);return}let n=i.getBoundingClientRect(),o=A.width/n.width,a=A.left-n.left;i.classList.add(tiA),this._inkBarContentElement.style.setProperty("transform",`translateX(${a}px) scaleX(${o})`),i.getBoundingClientRect(),i.classList.remove(tiA),i.classList.add(aF),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(aF)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let A=this._elementRef.nativeElement.ownerDocument||document,i=this._inkBarElement=A.createElement("span"),n=this._inkBarContentElement=A.createElement("span");i.className="mdc-tab-indicator",n.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",i.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let A=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;A.appendChild(this._inkBarElement)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",Be]}})}return t})();var riA=(()=>{class t extends zRA{elementRef=w(ce);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275dir=VA({type:t,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(i,n){i&2&&(te("aria-disabled",!!n.disabled),RA("mat-mdc-tab-disabled",n.disabled))},inputs:{disabled:[2,"disabled","disabled",Be]},features:[mt]})}return t})(),iiA={passive:!0},PRA=650,jRA=100,qRA=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_viewportRuler=w(Ms);_dir=w(fo,{optional:!0});_ngZone=w(qe);_platform=w(li);_sharedResizeObserver=w(kp);_injector=w(Dt);_renderer=w(Pi);_animationsDisabled=An();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new ie;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged=!1;_keyManager;_currentTextContent;_stopScrolling=new ie;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){let i=isNaN(A)?0:A;this._selectedIndex!=i&&(this._selectedIndexChanged=!0,this._selectedIndex=i,this._keyManager&&this._keyManager.updateActiveItem(i))}_selectedIndex=0;selectFocusedIndex=new LA;indexFocused=new LA;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),iiA),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),iiA))}ngAfterContentInit(){let A=this._dir?this._dir.change:oe("ltr"),i=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Ls(32),Qt(this._destroyed)),n=this._viewportRuler.change(150).pipe(Qt(this._destroyed)),o=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new H0(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),Hn(o,{injector:this._injector}),Ki(A,n,i,this._items.changes,this._itemsResized()).pipe(Qt(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),o()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(a=>{this.indexFocused.emit(a),this._setTabFocus(a)})}_itemsResized(){return typeof ResizeObserver!="function"?ar:this._items.changes.pipe(Sn(this._items),Ei(A=>new vi(i=>this._ngZone.runOutsideAngular(()=>{let n=new ResizeObserver(o=>i.next(o));return A.forEach(o=>n.observe(o.elementRef.nativeElement)),()=>{n.disconnect()}}))),wl(1),gt(A=>A.some(i=>i.contentRect.width>0&&i.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(A){if(!Qa(A))switch(A.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let i=this._items.get(this.focusIndex);i&&!i.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(A))}break;default:this._keyManager?.onKeydown(A)}}_onContentChanges(){let A=this._elementRef.nativeElement.textContent;A!==this._currentTextContent&&(this._currentTextContent=A||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(A){!this._isValidIndex(A)||this.focusIndex===A||!this._keyManager||this._keyManager.setActiveItem(A)}_isValidIndex(A){return this._items?!!this._items.toArray()[A]:!0}_setTabFocus(A){if(this._showPaginationControls&&this._scrollToLabel(A),this._items&&this._items.length){this._items.toArray()[A].focus();let i=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?i.scrollLeft=0:i.scrollLeft=i.scrollWidth-i.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let A=this.scrollDistance,i=this._getLayoutDirection()==="ltr"?-A:A;this._tabList.nativeElement.style.transform=`translateX(${Math.round(i)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(A){this._scrollTo(A)}_scrollHeader(A){let i=this._tabListContainer.nativeElement.offsetWidth,n=(A=="before"?-1:1)*i/3;return this._scrollTo(this._scrollDistance+n)}_handlePaginatorClick(A){this._stopInterval(),this._scrollHeader(A)}_scrollToLabel(A){if(this.disablePagination)return;let i=this._items?this._items.toArray()[A]:null;if(!i)return;let n=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:o,offsetWidth:a}=i.elementRef.nativeElement,r,s;this._getLayoutDirection()=="ltr"?(r=o,s=r+a):(s=this._tabListInner.nativeElement.offsetWidth-o,r=s-a);let l=this.scrollDistance,g=this.scrollDistance+n;rg&&(this.scrollDistance+=Math.min(s-g,r-l))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let A=this._tabListInner.nativeElement.scrollWidth,i=this._elementRef.nativeElement.offsetWidth,n=A-i>=5;n||(this.scrollDistance=0),n!==this._showPaginationControls&&(this._showPaginationControls=n,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let A=this._tabListInner.nativeElement.scrollWidth,i=this._tabListContainer.nativeElement.offsetWidth;return A-i||0}_alignInkBarToSelectedTab(){let A=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,i=A?A.elementRef.nativeElement:null;i?this._inkBar.alignToElement(i):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(A,i){i&&i.button!=null&&i.button!==0||(this._stopInterval(),Y3(PRA,jRA).pipe(Qt(Ki(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:n,distance:o}=this._scrollHeader(A);(o===0||o>=n)&&this._stopInterval()}))}_scrollTo(A){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let i=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(i,A)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:i,distance:this._scrollDistance}}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,inputs:{disablePagination:[2,"disablePagination","disablePagination",Be],selectedIndex:[2,"selectedIndex","selectedIndex",Cn]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return t})(),VRA=(()=>{class t extends qRA{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new rF(this._items),super.ngAfterContentInit()}_itemSelected(A){A.preventDefault()}static \u0275fac=(()=>{let A;return function(n){return(A||(A=bi(t)))(n||t)}})();static \u0275cmp=SA({type:t,selectors:[["mat-tab-header"]],contentQueries:function(i,n,o){if(i&1&&jo(o,riA,4),i&2){let a;ae(a=re())&&(n._items=a)}},viewQuery:function(i,n){if(i&1&&Jt(bRA,7)(MRA,7)(SRA,7)(kRA,5)(xRA,5),i&2){let o;ae(o=re())&&(n._tabListContainer=o.first),ae(o=re())&&(n._tabList=o.first),ae(o=re())&&(n._tabListInner=o.first),ae(o=re())&&(n._nextPaginator=o.first),ae(o=re())&&(n._previousPaginator=o.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(i,n){i&2&&RA("mat-mdc-tab-header-pagination-controls-enabled",n._showPaginationControls)("mat-mdc-tab-header-rtl",n._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",Be]},features:[mt],ngContentSelectors:gF,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(i,n){i&1&&(Rt(),B(0,"div",5,0),U("click",function(){return n._handlePaginatorClick("before")})("mousedown",function(a){return n._handlePaginatorPress("before",a)})("touchend",function(){return n._stopInterval()}),QA(2,"div",6),Q(),B(3,"div",7,1),U("keydown",function(a){return n._handleKeydown(a)}),B(5,"div",8,2),U("cdkObserveContent",function(){return n._onContentChanges()}),B(7,"div",9,3),Ve(9),Q()()(),B(10,"div",10,4),U("mousedown",function(a){return n._handlePaginatorPress("after",a)})("click",function(){return n._handlePaginatorClick("after")})("touchend",function(){return n._stopInterval()}),QA(12,"div",6),Q()),i&2&&(RA("mat-mdc-tab-header-pagination-disabled",n._disableScrollBefore),H("matRippleDisabled",n._disableScrollBefore||n.disableRipple),u(3),RA("_mat-animation-noopable",n._animationsDisabled),u(2),te("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby||null),u(5),RA("mat-mdc-tab-header-pagination-disabled",n._disableScrollAfter),H("matRippleDisabled",n._disableScrollAfter||n.disableRipple))},dependencies:[rs,tG],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}} +`],encapsulation:2})}return t})(),WRA=new kA("MAT_TABS_CONFIG"),niA=(()=>{class t extends Wl{_host=w(sF);_ngZone=w(qe);_centeringSub=bo.EMPTY;_leavingSub=bo.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(Sn(this._host._isCenterPosition())).subscribe(A=>{this._host._content&&A&&!this.hasAttached()&&this._ngZone.run(()=>{Promise.resolve().then(),this.attach(this._host._content)})}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this._ngZone.run(()=>this.detach())})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=VA({type:t,selectors:[["","matTabBodyHost",""]],features:[mt]})}return t})(),sF=(()=>{class t{_elementRef=w(ce);_dir=w(fo,{optional:!0});_ngZone=w(qe);_injector=w(Dt);_renderer=w(Pi);_diAnimationsDisabled=An();_eventCleanups;_initialized=!1;_fallbackTimer;_positionIndex;_dirChangeSubscription=bo.EMPTY;_position;_previousPosition;_onCentering=new LA;_beforeCentering=new LA;_afterLeavingCenter=new LA;_onCentered=new LA(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(A){this._positionIndex=A,this._computePositionAnimationState()}constructor(){if(this._dir){let A=w(wt);this._dirChangeSubscription=this._dir.change.subscribe(i=>{this._computePositionAnimationState(i),A.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),Hn(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(A=>A()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement,i=n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),n.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(A,"transitionstart",n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(A,"transitionend",i),this._renderer.listen(A,"transitioncancel",i)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let A=this._position==="center";this._beforeCentering.emit(A),A&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(A){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",A)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(A=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=A=="ltr"?"left":"right":this._positionIndex>0?this._position=A=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),Hn(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-tab-body"]],viewQuery:function(i,n){if(i&1&&Jt(niA,5)(_RA,5),i&2){let o;ae(o=re())&&(n._portalHost=o.first),ae(o=re())&&(n._contentElement=o.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(i,n){i&2&&te("inert",n._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(i,n){i&1&&(B(0,"div",1,0),Et(2,RRA,0,0,"ng-template",2),Q()),i&2&&RA("mat-tab-body-content-left",n._position==="left")("mat-tab-body-content-right",n._position==="right")("mat-tab-body-content-can-animate",n._position==="center"||n._previousPosition==="center")},dependencies:[niA,W0],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-tab-body-animating>.mat-mdc-tab-body-content{min-height:1px}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)} +`],encapsulation:2})}return t})(),lv=(()=>{class t{_elementRef=w(ce);_changeDetectorRef=w(wt);_ngZone=w(qe);_tabsSubscription=bo.EMPTY;_tabLabelSubscription=bo.EMPTY;_tabBodySubscription=bo.EMPTY;_diAnimationsDisabled=An();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new xg;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(A){this._fitInkBarToContent=A,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){this._indexToSelect=isNaN(A)?null:A}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(A){let i=A+"";this._animationDuration=/^\d+$/.test(i)?A+"ms":i}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(A){this._contentTabIndex=isNaN(A)?null:A}_contentTabIndex=null;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(A){let i=this._elementRef.nativeElement.classList;i.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),A&&i.add("mat-tabs-with-background",`mat-background-${A}`),this._backgroundColor=A}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new LA;focusChange=new LA;animationDone=new LA;selectedTabChange=new LA(!0);_groupId;_isServer=!w(li).isBrowser;constructor(){let A=w(WRA,{optional:!0});this._groupId=w(In).getId("mat-tab-group-"),this.animationDuration=A&&A.animationDuration?A.animationDuration:"500ms",this.disablePagination=A&&A.disablePagination!=null?A.disablePagination:!1,this.dynamicHeight=A&&A.dynamicHeight!=null?A.dynamicHeight:!1,A?.contentTabIndex!=null&&(this.contentTabIndex=A.contentTabIndex),this.preserveContent=!!A?.preserveContent,this.fitInkBarToContent=A&&A.fitInkBarToContent!=null?A.fitInkBarToContent:!1,this.stretchTabs=A&&A.stretchTabs!=null?A.stretchTabs:!0,this.alignTabs=A&&A.alignTabs!=null?A.alignTabs:null}ngAfterContentChecked(){let A=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=A){let i=this._selectedIndex==null;if(!i){this.selectedTabChange.emit(this._createChangeEvent(A));let n=this._tabBodyWrapper.nativeElement;n.style.minHeight=n.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((n,o)=>n.isActive=o===A),i||(this.selectedIndexChange.emit(A),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((i,n)=>{i.position=n-A,this._selectedIndex!=null&&i.position==0&&!i.origin&&(i.origin=A-this._selectedIndex)}),this._selectedIndex!==A&&(this._selectedIndex=A,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let A=this._clampTabIndex(this._indexToSelect);if(A===this._selectedIndex){let i=this._tabs.toArray(),n;for(let o=0;o{i[A].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(A))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(Sn(this._allTabs)).subscribe(A=>{this._tabs.reset(A.filter(i=>i._closestTabGroup===this||!i._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(A){let i=this._tabHeader;i&&(i.focusIndex=A)}_focusChanged(A){this._lastFocusedTabIndex=A,this.focusChange.emit(this._createChangeEvent(A))}_createChangeEvent(A){let i=new lF;return i.index=A,this._tabs&&this._tabs.length&&(i.tab=this._tabs.toArray()[A]),i}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=Ki(...this._tabs.map(A=>A._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(A){return Math.min(this._tabs.length-1,Math.max(A||0,0))}_getTabLabelId(A,i){return A.id||`${this._groupId}-label-${i}`}_getTabContentId(A){return`${this._groupId}-content-${A}`}_setTabBodyWrapperHeight(A){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=A;return}let i=this._tabBodyWrapper.nativeElement;i.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(i.style.height=A+"px")}_removeTabBodyWrapperHeight(){let A=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=A.clientHeight,A.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(A,i,n){i.focusIndex=n,A.disabled||(this.selectedIndex=n)}_getTabIndex(A){let i=this._lastFocusedTabIndex??this.selectedIndex;return A===i?0:-1}_tabFocusChanged(A,i){A&&A!=="mouse"&&A!=="touch"&&(this._tabHeader.focusIndex=i)}_bodyCentered(A){A&&this._tabBodies?.forEach((i,n)=>i._setActiveClass(n===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=SA({type:t,selectors:[["mat-tab-group"]],contentQueries:function(i,n,o){if(i&1&&jo(o,CF,5),i&2){let a;ae(a=re())&&(n._allTabs=a)}},viewQuery:function(i,n){if(i&1&&Jt(NRA,5)(FRA,5)(sF,5),i&2){let o;ae(o=re())&&(n._tabBodyWrapper=o.first),ae(o=re())&&(n._tabHeader=o.first),ae(o=re())&&(n._tabBodies=o)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(i,n){i&2&&(te("mat-align-tabs",n.alignTabs),ro("mat-"+(n.color||"primary")),ut("--mat-tab-animation-duration",n.animationDuration),RA("mat-mdc-tab-group-dynamic-height",n.dynamicHeight)("mat-mdc-tab-group-inverted-header",n.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",n.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",Be],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",Be],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",Be],selectedIndex:[2,"selectedIndex","selectedIndex",Cn],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",Cn],disablePagination:[2,"disablePagination","disablePagination",Be],disableRipple:[2,"disableRipple","disableRipple",Be],preserveContent:[2,"preserveContent","preserveContent",Be],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[Bt([{provide:aiA,useExisting:t}])],ngContentSelectors:gF,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(i,n){i&1&&(Rt(),B(0,"mat-tab-header",3,0),U("indexFocused",function(a){return n._focusChanged(a)})("selectFocusedIndex",function(a){return n.selectedIndex=a}),Je(2,URA,8,17,"div",4,hi),Q(),O(4,TRA,1,0),B(5,"div",5,1),Je(7,JRA,1,10,"mat-tab-body",6,hi),Q()),i&2&&(H("selectedIndex",n.selectedIndex||0)("disableRipple",n.disableRipple)("disablePagination",n.disablePagination),Ap("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby),u(2),Oe(n._tabs),u(2),Y(n._isServer?4:-1),u(),RA("_mat-animation-noopable",n._animationsDisabled()),u(2),Oe(n._tabs))},dependencies:[VRA,riA,Db,rs,Wl,sF],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1;touch-action:manipulation}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important} +`],encapsulation:2})}return t})(),lF=class{index;tab};var ZRA=["consoleArea"];function XRA(t,e){t&1&&QA(0,"mat-progress-bar",3)}var _3=class t{constructor(e,A){this.dialogRef=e;this.data=A}consoleOutput=bA("");isLoading=bA(!0);subscription;consoleArea;ngOnInit(){this.subscription=this.data.output$.subscribe({next:e=>{this.consoleOutput.update(A=>A+e),this.scrollToBottom()},complete:()=>{this.isLoading.set(!1)}})}ngOnDestroy(){this.subscription?.unsubscribe()}scrollToBottom(){setTimeout(()=>{if(this.consoleArea){let e=this.consoleArea.nativeElement;e.scrollTop=e.scrollHeight}},0)}close(){this.dialogRef.close()}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-console-dialog"]],viewQuery:function(A,i){if(A&1&&Jt(ZRA,5),A&2){let n;ae(n=re())&&(i.consoleArea=n.first)}},decls:11,vars:3,consts:[["consoleArea",""],["mat-dialog-title",""],[1,"mat-typography"],["mode","indeterminate",2,"margin-bottom","8px"],[1,"console-box"],["align","end"],["mat-button","",3,"click"]],template:function(A,i){A&1&&(B(0,"h2",1),y(1),Q(),B(2,"mat-dialog-content",2),O(3,XRA,1,0,"mat-progress-bar",3),B(4,"div",4,0)(6,"pre"),y(7),Q()()(),B(8,"mat-dialog-actions",5)(9,"button",6),U("click",function(){return i.close()}),y(10,"Close"),Q()()),A&2&&(u(),lA(i.data.title),u(2),Y(i.isLoading()?3:-1),u(4),lA(i.consoleOutput()))},dependencies:[si,qi,pi,Xc,fa,pa,Na,IQ,CQ],styles:[".console-box[_ngcontent-%COMP%]{background-color:#1e1e1e;color:#dcdcdc;padding:16px;border-radius:4px;min-height:200px;flex:1;overflow-y:auto;font-family:Roboto Mono,monospace;font-size:12px}.console-box[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;white-space:pre-wrap;word-wrap:break-word} .mat-mdc-dialog-content{max-height:70vh!important;overflow:hidden!important;display:flex;flex-direction:column}"]})};function $RA(t,e){t&1&&(B(0,"div",7),QA(1,"mat-spinner",8),Q())}var R3=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.inputValue=A.value}inputValue;loading=bA(!1);onCancel(){this.dialogRef.close()}onSubmitClick(){this.inputValue&&(this.loading.set(!0),this.data.onSubmit(this.inputValue).subscribe({next:()=>{this.loading.set(!1),this.dialogRef.close(!0)},error:e=>{this.loading.set(!1),window.alert(`Operation failed: ${e.message||e}`)}}))}static \u0275fac=function(A){return new(A||t)(ct(lo),ct(qo))};static \u0275cmp=SA({type:t,selectors:[["app-prompt-dialog"]],decls:13,vars:7,consts:[["mat-dialog-title",""],[1,"full-width"],["matInput","",3,"ngModelChange","ngModel","disabled"],["class","spinner-container",4,"ngIf"],["align","end"],["mat-button","",3,"click","disabled"],["mat-button","","color","primary",3,"click","disabled"],[1,"spinner-container"],["diameter","40"]],template:function(A,i){A&1&&(B(0,"h2",0),y(1),Q(),B(2,"mat-dialog-content")(3,"mat-form-field",1)(4,"mat-label"),y(5),Q(),B(6,"input",2),Di("ngModelChange",function(o){return di(i.inputValue,o)||(i.inputValue=o),o}),Q()(),Et(7,$RA,2,0,"div",3),Q(),B(8,"mat-dialog-actions",4)(9,"button",5),U("click",function(){return i.onCancel()}),y(10,"Cancel"),Q(),B(11,"button",6),U("click",function(){return i.onSubmitClick()}),y(12,"Submit"),Q()()),A&2&&(u(),lA(i.data.title),u(4),lA(i.data.label),u(),wi("ngModel",i.inputValue),H("disabled",i.loading()),u(),H("ngIf",i.loading()),u(2),H("disabled",i.loading()),u(2),H("disabled",i.loading()||!i.inputValue))},dependencies:[si,Js,Xc,fa,pa,Na,qi,pi,Ya,Ko,vs,Ps,ua,E2,gs,ln,Dn,yn,ko],styles:[".full-width[_ngcontent-%COMP%]{width:100%}.spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:16px}"]})};function ANA(t,e){t&1&&(B(0,"div",6)(1,"mat-icon"),y(2,"assignment_late"),Q(),B(3,"span"),y(4,"No tests found for this agent."),Q()())}function eNA(t,e){t&1&&(B(0,"th",13),y(1," Test Name "),Q())}function tNA(t,e){if(t&1&&(B(0,"td",14),y(1),Q()),t&2){let A=e.$implicit;u(),ue(" ",A.replace(".json","")," ")}}function iNA(t,e){t&1&&(B(0,"th",13),y(1," Actions "),Q())}function nNA(t,e){if(t&1){let A=hA();B(0,"td",14)(1,"button",15),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.runTest(n))}),B(2,"mat-icon"),y(3,"play_arrow"),Q()(),B(4,"button",16),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.rebuildTest(n))}),B(5,"mat-icon"),y(6,"sync"),Q()(),B(7,"button",17),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.renameTest(n))}),B(8,"mat-icon"),y(9,"edit"),Q()(),B(10,"button",18),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.deleteTest(n))}),B(11,"mat-icon"),y(12,"delete"),Q()()()}if(t&2){let A=p(2);u(),H("disabled",A.isRunning()||A.isRebuilding()),u(3),H("disabled",A.isRunning()||A.isRebuilding()),u(3),H("disabled",A.isRunning()||A.isRebuilding()),u(3),H("disabled",A.isRunning()||A.isRebuilding())}}function oNA(t,e){if(t&1){let A=hA();B(0,"tr",19),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.selectTest(n))}),Q()}if(t&2){let A=e.$implicit,i=p(2);RA("selected-row",A===i.selectedTest())}}function aNA(t,e){if(t&1&&(B(0,"table",7),Dl(1,8),Et(2,eNA,2,0,"th",9)(3,tNA,2,1,"td",10),yl(),Dl(4,11),Et(5,iNA,2,0,"th",9)(6,nNA,13,4,"td",10),yl(),Et(7,oNA,1,2,"tr",12),Q()),t&2){let A=p();H("dataSource",A.dataSource),u(7),H("matRowDefColumns",A.displayedColumns)}}var gv=class t{appName=me("");sessionId=me("");userId=me("");isViewOnlySession=me(!1);testsService=w(u2);dialog=w(Or);sessionService=w(Al);dataSource=new Td([]);consoleOutput=bA("");selectedTest=bA(null);testSelected=ui();isRunning=bA(!1);isRebuilding=bA(!1);displayedColumns=["name","actions"];ngOnInit(){this.loadTests()}ngOnChanges(e){e.appName&&!e.appName.isFirstChange()&&this.loadTests()}loadTests(){this.appName()&&this.testsService.listTests(this.appName()).subscribe(e=>{this.dataSource.data=e})}selectTest(e){this.selectedTest.set(e),this.testsService.getTest(this.appName(),e).subscribe(A=>{this.testSelected.emit({testName:e,events:A.events||[]})})}promoteCurrentSessionToTest(){this.sessionId()&&this.sessionService.getSession(this.userId(),this.appName(),this.sessionId()).subscribe(e=>{let i=(e.state?.__session_metadata__?.displayName||this.sessionId()).replace(/ /g,"_").replace(/[^a-zA-Z0-9_-]/g,""),n={events:e.events};this.dialog.open(R3,{data:{title:"Add Current Session as Test",label:"Test Name",value:i,onSubmit:o=>this.testsService.createTest(this.appName(),o,n).pipe(Ei(()=>this.testsService.rebuildTests(this.appName(),o)))}}).afterClosed().subscribe(o=>{o&&this.loadTests()})})}renameTest(e){this.dialog.open(R3,{data:{title:"Rename Test",label:"New Name",value:e.replace(".json",""),onSubmit:A=>{let i=A.replace(/ /g,"_").replace(/[^a-zA-Z0-9_-]/g,"");return this.testsService.getTest(this.appName(),e).pipe(Ei(n=>this.testsService.createTest(this.appName(),i,n)),Ei(()=>this.testsService.deleteTest(this.appName(),e)))}}}).afterClosed().subscribe(A=>{A&&this.loadTests()})}runAllTests(){this.runTest()}runTest(e){this.isRunning.set(!0);let A=new ie;this.dialog.open(_3,{width:"90vw",maxWidth:"1200px",height:"80vh",data:{title:`Running ${e||"all tests"}`,output$:A.asObservable()}}),this.testsService.runTests(this.appName(),e).subscribe({next:i=>{A.next(i)},error:i=>{A.next(` +Error: ${i.message||i}`),this.isRunning.set(!1),A.complete()},complete:()=>{this.isRunning.set(!1),A.complete()}})}deleteTest(e){confirm(`Are you sure you want to delete test ${e}?`)&&this.testsService.deleteTest(this.appName(),e).subscribe(()=>{this.loadTests()})}rebuildAllTests(){this.rebuildTest()}rebuildTest(e){this.isRebuilding.set(!0);let A=new ie;this.dialog.open(_3,{width:"90vw",maxWidth:"1200px",height:"80vh",data:{title:`Rebuilding ${e||"all tests"}`,output$:A.asObservable()}}),A.next(`Rebuilding tests... +`),this.testsService.rebuildTests(this.appName(),e).subscribe({next:()=>{A.next(`Successfully rebuilt tests. +`),this.isRebuilding.set(!1),this.loadTests(),A.complete()},error:i=>{A.next(`Error rebuilding tests: ${i.message||i} +`),this.isRebuilding.set(!1),A.complete()}})}clearConsole(){this.consoleOutput.set("")}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-tests-tab"]],inputs:{appName:[1,"appName"],sessionId:[1,"sessionId"],userId:[1,"userId"],isViewOnlySession:[1,"isViewOnlySession"]},outputs:{testSelected:"testSelected"},features:[Yt],decls:20,vars:4,consts:[[1,"tests-container"],[1,"toolbar"],["mat-button","","color","primary",3,"click","disabled"],["mat-button","","color","accent",3,"click","disabled"],[1,"spacer"],["mat-icon-button","","matTooltip","Refresh",3,"click"],[1,"empty-state"],["mat-table","",1,"tests-table",3,"dataSource"],["matColumnDef","name"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","actions"],["mat-row","",3,"selected-row","click",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","color","primary","matTooltip","Run Test",3,"click","disabled"],["mat-icon-button","","color","accent","matTooltip","Rebuild Test",3,"click","disabled"],["mat-icon-button","","color","primary","matTooltip","Rename Test",3,"click","disabled"],["mat-icon-button","","color","warn","matTooltip","Delete Test",3,"click","disabled"],["mat-row","",3,"click"]],template:function(A,i){A&1&&(B(0,"div",0)(1,"div",1)(2,"button",2),U("click",function(){return i.promoteCurrentSessionToTest()}),B(3,"mat-icon"),y(4,"add"),Q(),y(5," From Current Session "),Q(),B(6,"button",2),U("click",function(){return i.runAllTests()}),B(7,"mat-icon"),y(8,"playlist_play"),Q(),y(9," Run All "),Q(),B(10,"button",3),U("click",function(){return i.rebuildAllTests()}),B(11,"mat-icon"),y(12,"sync"),Q(),y(13," Rebuild All "),Q(),QA(14,"span",4),B(15,"button",5),U("click",function(){return i.loadTests()}),B(16,"mat-icon"),y(17,"refresh"),Q()()(),O(18,ANA,5,0,"div",6)(19,aNA,8,2,"table",7),Q()),A&2&&(u(2),H("disabled",!i.sessionId()||i.isViewOnlySession()),u(4),H("disabled",i.isRunning()||i.isRebuilding()||i.dataSource.data.length===0),u(4),H("disabled",i.isRunning()||i.isRebuilding()||i.dataSource.data.length===0),u(8),Y(i.dataSource.data.length===0?18:19))},dependencies:[si,qi,pi,ji,Tn,Wt,JtA,HtA,YtA,ztA,OtA,PtA,jtA,qtA,Fa,dn,E2,IQ,Xc],styles:[".tests-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;height:48px;flex-shrink:0;padding:0 10px;background-color:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant);gap:8px}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1 1 auto}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{height:32px!important;line-height:normal!important;border-radius:16px!important;font-size:13px!important;font-weight:500!important;display:inline-flex!important;align-items:center;justify-content:center}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-button[_ngcontent-%COMP%]{padding:0 12px!important}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:4px!important}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%]{width:32px!important;min-width:32px!important;padding:0!important;border-radius:50%!important}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin-right:0!important}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button.mat-mdc-icon-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{width:32px!important;height:32px!important;border-radius:50%!important}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px!important;width:20px!important;height:20px!important;line-height:20px!important;vertical-align:middle}.tests-container[_ngcontent-%COMP%] .toolbar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{vertical-align:middle}.tests-container[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;color:var(--mat-sys-on-surface-variant);font-style:italic;gap:8px}.tests-container[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%]{width:100%;background:transparent;border-top:1px solid var(--mat-sys-outline-variant, #e0e0e0)}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:600}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{vertical-align:middle;padding:6px 16px;border-bottom:1px solid var(--mat-sys-outline-variant, #e0e0e0)}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr.mat-header-row[_ngcontent-%COMP%]{display:none}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{cursor:pointer;background:transparent}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-container-low, #f5f5f5)}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td.mat-column-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{opacity:1}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr.selected-row[_ngcontent-%COMP%]{background-color:var(--mat-sys-surface-container-high, #e0e0e0)}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td.mat-column-actions[_ngcontent-%COMP%]{text-align:right}.tests-container[_ngcontent-%COMP%] .tests-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td.mat-column-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{opacity:0;transition:opacity .2s ease-in-out}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%]{margin-top:16px;display:flex;flex-direction:column;gap:8px;flex:1;min-height:200px}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.1rem;font-weight:600}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--mat-sys-on-surface-variant)}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-actions[_ngcontent-%COMP%] .running-status[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse 1.5s infinite}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-box[_ngcontent-%COMP%]{background-color:#1e1e1e;color:#d4d4d4;padding:12px;border-radius:4px;font-family:Courier New,Courier,monospace;font-size:.85rem;overflow:auto;flex:1;margin:0;white-space:pre-wrap;word-break:break-all;border:1px solid #333}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-box[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#555;border-radius:4px}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#777}.tests-container[_ngcontent-%COMP%] .console-section[_ngcontent-%COMP%] .console-box[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:#1e1e1e}@keyframes _ngcontent-%COMP%_pulse{0%{opacity:.6}50%{opacity:1}to{opacity:.6}}"]})};var rNA={stateIsEmpty:"State is empty"},siA=new kA("State Tab Messages",{factory:()=>rNA});function sNA(t,e){if(t&1&&(B(0,"div",1),y(1),Q()),t&2){let A=p();u(),lA(A.i18n.stateIsEmpty)}}function lNA(t,e){if(t&1&&(B(0,"div"),QA(1,"ngx-json-viewer",2),Q()),t&2){let A=p();u(),H("json",A.sessionState)}}var cv=class t{sessionState;i18n=w(siA);get isEmptyState(){return!this.sessionState||Object.keys(this.sessionState).length===0}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-state-tab"]],inputs:{sessionState:"sessionState"},decls:3,vars:1,consts:[[1,"state-wrapper"],[1,"empty-state"],[3,"json"]],template:function(A,i){A&1&&(B(0,"div",0),O(1,sNA,2,1,"div",1)(2,lNA,2,1,"div"),Q()),A&2&&(u(),Y(i.isEmptyState?1:2))},dependencies:[cs,$l],styles:[".state-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;margin-top:16px}.state-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{text-align:center;font-style:italic}"]})};var gNA=(t,e)=>e.span_id;function cNA(t,e){if(t&1){let A=hA();B(0,"span",20)(1,"a",24),U("click",function(){let n;T(A);let o=p(3);return J(o.selectSpanById((n=o.selectedSpan())==null?null:n.parent_span_id))}),y(2),Q(),B(3,"button",21),U("click",function(){let n;T(A);let o=p(3);return J(o.copyToClipboard((n=o.selectedSpan())==null?null:n.parent_span_id))}),B(4,"mat-icon"),y(5),Q()()()}if(t&2){let A,i,n,o=p(3);u(),H("matTooltip",((A=o.selectedSpan())==null?null:A.parent_span_id)||""),u(),lA((i=o.selectedSpan())==null?null:i.parent_span_id),u(3),lA(o.copiedId===((n=o.selectedSpan())==null?null:n.parent_span_id)?"check":"content_copy")}}function CNA(t,e){t&1&&y(0," None ")}function INA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td")(4,"span",20)(5,"a",24),U("click",function(){let n=T(A).$implicit,o=p(4);return J(o.selectSpanById(n.span_id))}),y(6),Q(),B(7,"button",21),U("click",function(){let n=T(A).$implicit,o=p(4);return J(o.copyToClipboard(n.span_id))}),B(8,"mat-icon"),y(9),Q()()()()()}if(t&2){let A=e.$implicit,i=p(4);u(2),lA(A.name),u(3),H("matTooltip",A.span_id),u(),lA(A.span_id),u(3),lA(i.copiedId===A.span_id?"check":"content_copy")}}function dNA(t,e){if(t&1&&(B(0,"table",22),Je(1,INA,10,4,"tr",null,gNA),Q()),t&2){let A=p(3);u(),Oe(A.selectedSpanChildren)}}function BNA(t,e){if(t&1){let A=hA();B(0,"table",23)(1,"tr")(2,"td"),y(3,"Event ID"),Q(),B(4,"td")(5,"span",20)(6,"a",24),U("click",function(){T(A);let n=p(3);return J(n.switchToEvent.emit(n.selectedSpan().attributes["gcp.vertex.agent.event_id"]))}),y(7),Q(),B(8,"button",21),U("click",function(){T(A);let n=p(3);return J(n.copyToClipboard(n.selectedSpan().attributes["gcp.vertex.agent.event_id"]))}),B(9,"mat-icon"),y(10),Q()()()()()()}if(t&2){let A=p(3);u(6),H("matTooltip",A.selectedSpan().attributes["gcp.vertex.agent.event_id"]||""),u(),lA(A.selectedSpan().attributes["gcp.vertex.agent.event_id"]),u(3),lA(A.copiedId===A.selectedSpan().attributes["gcp.vertex.agent.event_id"]?"check":"content_copy")}}function ENA(t,e){if(t&1){let A=hA();B(0,"div",13)(1,"table",15)(2,"tr")(3,"td"),y(4,"Name"),Q(),B(5,"td")(6,"span",16)(7,"span",17),y(8),Q(),B(9,"button",18),U("click",function(){let n;T(A);let o=p(2);return J(o.copyToClipboard((n=o.selectedSpan())==null?null:n.name))}),B(10,"mat-icon"),y(11),Q()()()()(),B(12,"tr")(13,"td"),y(14,"Span ID"),Q(),B(15,"td",19)(16,"span",20)(17,"span",17),y(18),Q(),B(19,"button",21),U("click",function(){let n;T(A);let o=p(2);return J(o.copyToClipboard((n=o.selectedSpan())==null?null:n.span_id))}),B(20,"mat-icon"),y(21),Q()()()()(),B(22,"tr")(23,"td"),y(24,"Parent ID"),Q(),B(25,"td"),O(26,cNA,6,3,"span",20)(27,CNA,1,0),Q()(),B(28,"tr")(29,"td"),y(30,"Trace ID"),Q(),B(31,"td",19)(32,"span",20)(33,"span",17),y(34),Q(),B(35,"button",21),U("click",function(){let n;T(A);let o=p(2);return J(o.copyToClipboard((n=o.selectedSpan())==null?null:n.trace_id))}),B(36,"mat-icon"),y(37),Q()()()()(),B(38,"tr")(39,"td"),y(40,"Start Time"),Q(),B(41,"td")(42,"span",16)(43,"span",17),y(44),Q(),B(45,"button",18),U("click",function(){let n;T(A);let o=p(2);return J(o.copyToClipboard(o.formatTime((n=o.selectedSpan())==null?null:n.start_time),"startTime"))}),B(46,"mat-icon"),y(47),Q()()()()(),B(48,"tr")(49,"td"),y(50,"End Time"),Q(),B(51,"td")(52,"span",16)(53,"span",17),y(54),Q(),B(55,"button",18),U("click",function(){let n;T(A);let o=p(2);return J(o.copyToClipboard(o.formatTime((n=o.selectedSpan())==null?null:n.end_time),"endTime"))}),B(56,"mat-icon"),y(57),Q()()()()()(),O(58,dNA,3,0,"table",22),O(59,BNA,11,3,"table",23),Q()}if(t&2){let A,i,n,o,a,r,s,l,g,C,I,d,h,E,f,m=p(2);u(7),H("matTooltip",((A=m.selectedSpan())==null?null:A.name)||""),u(),lA((i=m.selectedSpan())==null?null:i.name),u(3),lA(m.copiedId===((n=m.selectedSpan())==null?null:n.name)?"check":"content_copy"),u(6),H("matTooltip",((o=m.selectedSpan())==null?null:o.span_id)||""),u(),lA((a=m.selectedSpan())==null?null:a.span_id),u(3),lA(m.copiedId===((r=m.selectedSpan())==null?null:r.span_id)?"check":"content_copy"),u(5),Y((s=m.selectedSpan())!=null&&s.parent_span_id?26:27),u(7),H("matTooltip",((l=m.selectedSpan())==null?null:l.trace_id)||""),u(),lA((g=m.selectedSpan())==null?null:g.trace_id),u(3),lA(m.copiedId===((C=m.selectedSpan())==null?null:C.trace_id)?"check":"content_copy"),u(6),H("matTooltip",m.formatTime((I=m.selectedSpan())==null?null:I.start_time)),u(),lA(m.formatTime((d=m.selectedSpan())==null?null:d.start_time)),u(3),lA(m.copiedId==="startTime"?"check":"content_copy"),u(6),H("matTooltip",m.formatTime((h=m.selectedSpan())==null?null:h.end_time)),u(),lA(m.formatTime((E=m.selectedSpan())==null?null:E.end_time)),u(3),lA(m.copiedId==="endTime"?"check":"content_copy"),u(),Y(m.selectedSpanChildren.length>0?58:-1),u(),Y((f=m.selectedSpan())!=null&&f.attributes&&m.selectedSpan().attributes["gcp.vertex.agent.event_id"]?59:-1)}}function hNA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td")(4,"span",16)(5,"span"),y(6),Q(),B(7,"button",18),U("click",function(){let n,o=T(A).$implicit,a=p(4);return J(a.copyToClipboard((n=a.selectedSpan().attributes[o])==null?null:n.toString()))}),B(8,"mat-icon"),y(9),Q()()()()()}if(t&2){let A,i=e.$implicit,n=p(4);u(2),lA(i),u(4),lA(n.selectedSpan().attributes[i]),u(3),lA(n.copiedId===((A=n.selectedSpan().attributes[i])==null?null:A.toString())?"check":"content_copy")}}function QNA(t,e){if(t&1&&(B(0,"table",15),Je(1,hNA,10,3,"tr",null,hi),Q()),t&2){let A=p(3);u(),Oe(A.Object.keys(A.selectedSpan().attributes))}}function uNA(t,e){t&1&&(B(0,"div",1),y(1,"No attributes available"),Q())}function fNA(t,e){if(t&1&&(B(0,"div",13),O(1,QNA,3,0,"table",15)(2,uNA,2,0,"div",1),Q()),t&2){let A,i=p(2);u(),Y((A=i.selectedSpan())!=null&&A.attributes&&i.Object.keys(i.selectedSpan().attributes).length>0?1:2)}}function pNA(t,e){if(t&1){let A=hA();B(0,"div",14),QA(1,"ngx-json-viewer",25),B(2,"button",26),U("click",function(){T(A);let n=p(2);return J(n.copyJsonToClipboard(n.selectedSpan(),"raw"))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p(2);u(),H("json",A.selectedSpan()),u(3),lA(A.copiedId==="raw"?"check":"content_copy")}}function mNA(t,e){if(t&1){let A=hA();B(0,"div",0)(1,"div",2)(2,"mat-paginator",3),U("page",function(n){T(A);let o=p();return J(o.onPage(n))}),Q(),B(3,"div",4),y(4),Q(),QA(5,"div",5),B(6,"button",6),U("click",function(){T(A);let n=p();return J(n.traceService.selectedRow(void 0))}),B(7,"mat-icon"),y(8,"remove_selection"),Q()()(),B(9,"div",7)(10,"div",8)(11,"button",9),U("click",function(){T(A);let n=p();return J(n.selectedDetailTab.set("info"))}),B(12,"mat-icon"),y(13,"info"),Q()(),B(14,"button",10),U("click",function(){T(A);let n=p();return J(n.selectedDetailTab.set("attributes"))}),B(15,"mat-icon"),y(16,"list_alt"),Q()(),B(17,"button",11),U("click",function(){T(A);let n=p();return J(n.selectedDetailTab.set("raw"))}),B(18,"mat-icon"),y(19,"data_object"),Q()()(),B(20,"div",12),O(21,ENA,60,18,"div",13),O(22,fNA,3,1,"div",13),O(23,pNA,5,2,"div",14),Q()()()}if(t&2){let A,i=p();u(2),H("length",i.orderedTraceData.length)("pageSize",1)("pageIndex",i.selectedSpanIndex),u(2),ue(" ",(A=i.selectedSpan())==null?null:A.name," "),u(7),RA("active",i.selectedDetailTab()==="info"),u(3),RA("active",i.selectedDetailTab()==="attributes"),u(3),RA("active",i.selectedDetailTab()==="raw"),u(4),Y(i.selectedDetailTab()==="info"?21:-1),u(),Y(i.selectedDetailTab()==="attributes"?22:-1),u(),Y(i.selectedDetailTab()==="raw"?23:-1)}}function wNA(t,e){t&1&&(B(0,"div",1),y(1,"Select a trace span to view its details"),Q())}var IF=class t extends b1{nextPageLabel="Next Span";previousPageLabel="Previous Span";firstPageLabel="First Span";lastPageLabel="Last Span";getRangeLabel=(e,A,i)=>i===0?"Span 0 of 0":(i=Math.max(i,0),`Span ${e*A+1} of ${i}`);static \u0275fac=(()=>{let e;return function(i){return(e||(e=bi(t)))(i||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac})},Cv=class t{_traceData=[];orderedTraceData=[];set traceData(e){this._traceData=e||[],this.orderedTraceData=this.computeOrdered(this._traceData)}get traceData(){return this._traceData}computeOrdered(e){let A=e.map(a=>gA({},a)),i=new Map,n=[];A.forEach(a=>i.set(a.span_id,a)),A.forEach(a=>{if(a.parent_span_id&&i.has(a.parent_span_id)){let r=i.get(a.parent_span_id);r.children=r.children||[],r.children.push(a)}else n.push(a)});let o=a=>a.flatMap(r=>[r,...r.children?o(r.children):[]]);return o(n)}traceService=w(Ag);selectedSpan=Ar(this.traceService.selectedTraceRow$);static getValidTraceTab(e){return e==="info"||e==="attributes"||e==="raw"?e:"info"}selectedDetailTab=bA(t.getValidTraceTab(localStorage.getItem("adk-trace-tab-selected-tab")));switchToEvent=ui();constructor(){Ao(()=>{localStorage.setItem("adk-trace-tab-selected-tab",this.selectedDetailTab())})}formatTime(e){return e?new Date(e/1e6).toLocaleString():"N/A"}get selectedSpanChildren(){let e=this.selectedSpan();return e?e.children&&e.children.length>0?e.children:this.traceData.filter(A=>A.parent_span_id===e.span_id):[]}selectSpanById(e){if(!e)return;let A=this.traceData.find(i=>String(i.span_id)===String(e));A&&this.traceService.selectedRow(A)}get selectedSpanIndex(){let e=this.selectedSpan();if(!e)return;let A=this.orderedTraceData.findIndex(i=>i.span_id===e.span_id);return A===-1?void 0:A}onPage(e){e.pageIndex>=0&&e.pageIndex=this.orderedTraceData.length?0:this.selectedSpanIndex+1:i=this.selectedSpanIndex-1<0?this.orderedTraceData.length-1:this.selectedSpanIndex-1,this.traceService.selectedRow(this.orderedTraceData[i])}Object=Object;copiedId=null;copyToClipboard(e,A){e&&navigator.clipboard.writeText(e).then(()=>{this.copiedId=A||e,setTimeout(()=>this.copiedId=null,2e3)})}copyJsonToClipboard(e,A){if(!e)return;let i=JSON.stringify(e,null,2);navigator.clipboard.writeText(i).then(()=>{this.copiedId=A,setTimeout(()=>this.copiedId=null,2e3)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-trace-tab"]],hostBindings:function(A,i){A&1&&U("keydown",function(o){return i.handleKeyboardNavigation(o)},ZC)},inputs:{traceData:"traceData"},outputs:{switchToEvent:"switchToEvent"},features:[Bt([{provide:b1,useClass:IF}])],decls:2,vars:1,consts:[[1,"event-details-container"],[1,"empty-state"],[1,"event-details-header"],["hidePageSize","","aria-label","Select span",1,"event-paginator",3,"page","length","pageSize","pageIndex"],[1,"span-title"],[2,"flex-grow","1"],["mat-icon-button","","matTooltip","Clear selection",3,"click"],[1,"event-details-content"],[1,"vertical-tabs-sidebar"],["mat-icon-button","","matTooltip","Info","matTooltipPosition","right",3,"click"],["mat-icon-button","","matTooltip","Attributes","matTooltipPosition","right",3,"click"],["mat-icon-button","","matTooltip","Raw JSON","matTooltipPosition","right",3,"click"],[1,"vertical-tabs-content"],[1,"info-tables-container"],[1,"json-viewer-container","json-viewer-wrapper"],["app-info-table",""],[1,"value-cell"],[3,"matTooltip"],["mat-icon-button","","matTooltip","Copy",1,"copy-value-button",3,"click"],[1,"id-text"],[1,"id-cell"],["mat-icon-button","","matTooltip","Copy",1,"copy-id-button",3,"click"],["app-info-table","","title","Children"],["app-info-table","","title","Events"],["href","javascript:void(0)",1,"span-link","id-text",3,"click","matTooltip"],[3,"json"],["mat-icon-button","","matTooltip","Copy JSON",1,"floating-copy-button",3,"click"]],template:function(A,i){A&1&&O(0,mNA,24,13,"div",0)(1,wNA,2,0,"div",1),A&2&&Y(i.selectedSpan()!==void 0?0:1)},dependencies:[qi,ji,Tn,Wt,Fa,dn,cs,$l,n6,OI],styles:["[_nghost-%COMP%]{display:block;height:100%}.json-viewer-container[_ngcontent-%COMP%]{margin:10px}.event-paginator[_ngcontent-%COMP%]{display:flex;justify-content:center;background-color:transparent}.event-paginator[_ngcontent-%COMP%] .mat-mdc-paginator-range-label{order:2;margin:0 0 0 8px}.span-title[_ngcontent-%COMP%]{font-weight:500;font-family:Google Sans Mono,monospace;font-size:13px;color:var(--mat-sys-on-surface);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:300px;margin-left:16px}.event-details-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.event-details-content[_ngcontent-%COMP%]{display:flex;flex:1;overflow:hidden}.vertical-tabs-sidebar[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:48px;border-right:1px solid var(--mat-sys-outline-variant);padding-top:8px;align-items:center;gap:8px}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)!important;color:var(--mat-sys-on-secondary-container)!important}.vertical-tabs-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.event-details-header[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;border-bottom:1px solid var(--mat-sys-outline-variant);height:48px;flex-shrink:0}.empty-state[_ngcontent-%COMP%]{padding:16px;text-align:center;color:var(--mat-sys-on-surface-variant);font-style:italic;font-size:14px}.info-tables-container[_ngcontent-%COMP%]{padding:16px;overflow-y:auto;display:flex;flex-direction:column;gap:24px}.span-link[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none;cursor:pointer}.span-link[_ngcontent-%COMP%]:hover{text-decoration:underline}.id-text[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace;font-size:11px}.id-cell[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;overflow:hidden}.id-cell[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child, .value-cell[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.id-cell[_ngcontent-%COMP%]:hover .copy-id-button[_ngcontent-%COMP%], .id-cell[_ngcontent-%COMP%]:hover .copy-value-button[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]:hover .copy-id-button[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]:hover .copy-value-button[_ngcontent-%COMP%]{opacity:1}.copy-id-button[_ngcontent-%COMP%], .copy-value-button[_ngcontent-%COMP%]{width:28px!important;height:28px!important;padding:0!important;line-height:28px!important;flex-shrink:0;margin:-4px 0!important;opacity:0;transition:opacity .2s ease-in-out;border-radius:4px!important;overflow:hidden!important}.copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:4px!important}.copy-id-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%], .copy-value-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px}.json-viewer-wrapper[_ngcontent-%COMP%]{position:relative}.json-viewer-wrapper[_ngcontent-%COMP%]:hover .floating-copy-button[_ngcontent-%COMP%]{opacity:1}.floating-copy-button[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;z-index:10;opacity:0;transition:opacity .2s ease-in-out;background-color:var(--mat-sys-surface-container-high)!important;border-radius:4px!important;overflow:hidden!important;width:28px!important;height:28px!important;line-height:28px!important;padding:0!important}.floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:4px!important}.floating-copy-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px}.floating-copy-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-secondary-container)!important;color:var(--mat-sys-on-secondary-container)!important}"]})};var DNA={agentDevelopmentKitLabel:"Agent Development Kit",disclosureTooltip:"ADK Web is for development purposes. It has access to all the data and should not be used in production.",collapsePanelTooltip:"Collapse panel",eventsTabLabel:"Events",stateTabLabel:"State",artifactsTabLabel:"Artifacts",sessionsTabLabel:"Sessions",evalTabLabel:"Evals",testsTabLabel:"Tests",selectEventAriaLabel:"Select event",infoTabLabel:"Info",graphTabLabel:"Graph",requestDetailsTabLabel:"Request",responseDetailsTabLabel:"Response",responseIsNotAvailable:"Response is not available",requestIsNotAvailable:"Request is not available",clearSelectionButtonLabel:"Remove selection"},pQ=new kA("Side Panel Messages",{factory:()=>DNA});var yNA=["eventMenuTrigger"],vNA=["graphContainer"],bNA=(t,e)=>e.span_id,MNA=(t,e)=>e.modality,SNA=(t,e)=>e.id,kNA=(t,e)=>e.key;function xNA(t,e){if(t&1){let A=hA();B(0,"button",10),U("click",function(){T(A);let n=p();return J(n.selectedDetailTab="graph")}),B(1,"mat-icon"),y(2,"account_tree"),Q()()}if(t&2){let A=p();RA("active",A.selectedDetailTab==="graph"),H("matTooltip",XC(A.i18n.graphTabLabel))}}function _NA(t,e){if(t&1){let A=hA();B(0,"div",30),QA(1,"ngx-json-viewer",31),B(2,"button",32),U("click",function(){T(A);let n=p(3);return J(n.copyJsonToClipboard(n.selectedEvent().nodeInfo.outputFor,"nodeInfo.outputFor"))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p(3);u(),H("json",A.selectedEvent().nodeInfo.outputFor),u(3),lA(A.copiedId==="nodeInfo.outputFor"?"check":"content_copy")}}function RNA(t,e){t&1&&y(0," N/A ")}function NNA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2,"Message As Output"),Q(),B(3,"td")(4,"span",23)(5,"span",21),y(6),Q(),B(7,"button",24),U("click",function(){T(A);let n=p(3);return J(n.copyToClipboard(n.selectedEvent().nodeInfo.messageAsOutput))}),B(8,"mat-icon"),y(9),Q()()()()()}if(t&2){let A,i=p(3);u(5),H("matTooltip",((A=i.selectedEvent().nodeInfo.messageAsOutput)==null?null:A.toString())||""),u(),lA(i.selectedEvent().nodeInfo.messageAsOutput),u(3),lA(i.copiedId===i.selectedEvent().nodeInfo.messageAsOutput?"check":"content_copy")}}function FNA(t,e){if(t&1){let A=hA();B(0,"table",25)(1,"tr")(2,"td"),y(3,"Node Path"),Q(),B(4,"td")(5,"span",23)(6,"span",21),y(7),Q(),B(8,"button",24),U("click",function(){T(A);let n=p(2);return J(n.copyToClipboard(n.selectedEvent().nodeInfo.path))}),B(9,"mat-icon"),y(10),Q()()()()(),B(11,"tr")(12,"td"),y(13,"Output For"),Q(),B(14,"td"),O(15,_NA,5,2,"div",30)(16,RNA,1,0),Q()(),O(17,NNA,10,3,"tr"),Q()}if(t&2){let A=p(2);u(6),H("matTooltip",A.selectedEvent().nodeInfo.path||""),u(),lA(A.selectedEvent().nodeInfo.path||"N/A"),u(3),lA(A.copiedId===A.selectedEvent().nodeInfo.path?"check":"content_copy"),u(5),Y(A.selectedEvent().nodeInfo.outputFor?15:16),u(2),Y(A.selectedEvent().nodeInfo.messageAsOutput!==void 0?17:-1)}}function LNA(t,e){if(t&1){let A=hA();B(0,"div",30),QA(1,"ngx-json-viewer",31),B(2,"button",32),U("click",function(){T(A);let n=p().$implicit,o=p(3);return J(o.copyJsonToClipboard(o.selectedEvent().actions[n],"action."+n))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p().$implicit,i=p(3);u(),H("json",i.selectedEvent().actions[A]),u(3),lA(i.copiedId==="action."+A?"check":"content_copy")}}function GNA(t,e){if(t&1){let A=hA();B(0,"span",23)(1,"span",21),y(2),Q(),B(3,"button",24),U("click",function(){let n;T(A);let o=p().$implicit,a=p(3);return J(a.copyToClipboard((n=a.selectedEvent().actions[o])==null?null:n.toString()))}),B(4,"mat-icon"),y(5),Q()()()}if(t&2){let A,i,n=p().$implicit,o=p(3);u(),H("matTooltip",((A=o.selectedEvent().actions[n])==null?null:A.toString())||""),u(),lA(o.selectedEvent().actions[n]),u(3),lA(o.copiedId===((i=o.selectedEvent().actions[n])==null?null:i.toString())?"check":"content_copy")}}function KNA(t,e){if(t&1&&(B(0,"tr")(1,"td"),y(2),Q(),B(3,"td"),O(4,LNA,5,2,"div",30)(5,GNA,6,3,"span",23),Q()()),t&2){let A=e.$implicit,i=p(3);u(2),lA(A),u(2),Y(i.isObject(i.selectedEvent().actions[A])?4:5)}}function UNA(t,e){if(t&1&&(B(0,"table",26),Je(1,KNA,6,2,"tr",null,hi),Q()),t&2){let A=p(2);u(),Oe(A.Object.keys(A.selectedEvent().actions))}}function TNA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td")(4,"div",30),QA(5,"ngx-json-viewer",31),B(6,"button",32),U("click",function(){let n=T(A),o=n.$implicit,a=n.$index,r=p(3);return J(r.copyJsonToClipboard(o,"fc."+a))}),B(7,"mat-icon"),y(8),Q()()()()()}if(t&2){let A=e.$implicit,i=e.$index,n=p(3);u(2),lA(A==null?null:A.name),u(3),H("json",A),u(3),lA(n.copiedId==="fc."+i?"check":"content_copy")}}function JNA(t,e){if(t&1&&(B(0,"table",27),Je(1,TNA,9,3,"tr",null,ws),Q()),t&2){let A=p(2);u(),Oe(A.functionCalls())}}function ONA(t,e){if(t&1&&(B(0,"div",34),QA(1,"img",35),Q()),t&2){let A=p().$implicit;u(),H("src","data:"+A.inlineData.mimeType+";base64,"+A.inlineData.data,Go)}}function YNA(t,e){if(t&1&&(B(0,"div"),QA(1,"audio",36),Q()),t&2){let A=p().$implicit;u(),H("src","data:"+A.inlineData.mimeType+";base64,"+A.inlineData.data)}}function HNA(t,e){if(t&1&&(B(0,"div"),QA(1,"video",36),Q()),t&2){let A=p().$implicit;u(),H("src","data:"+A.inlineData.mimeType+";base64,"+A.inlineData.data,Go)}}function zNA(t,e){if(t&1&&(B(0,"div"),y(1),Q()),t&2){let A=p().$implicit;u(),ue(" Unsupported media type: ",A.inlineData==null?null:A.inlineData.mimeType," ")}}function PNA(t,e){if(t&1&&O(0,ONA,2,1,"div",34)(1,YNA,2,1,"div")(2,HNA,2,1,"div")(3,zNA,2,1,"div"),t&2){let A=e.$implicit;Y(!(A.inlineData==null||A.inlineData.mimeType==null)&&A.inlineData.mimeType.startsWith("image/")?0:!(A.inlineData==null||A.inlineData.mimeType==null)&&A.inlineData.mimeType.startsWith("audio/")?1:!(A.inlineData==null||A.inlineData.mimeType==null)&&A.inlineData.mimeType.startsWith("video/")?2:3)}}function jNA(t,e){if(t&1&&(B(0,"div",33),Je(1,PNA,4,1,null,null,ws),Q()),t&2){let A=p().$implicit;u(),Oe(A.mediaParts)}}function qNA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td"),O(4,jNA,3,0,"div",33),B(5,"div",30),QA(6,"ngx-json-viewer",31),B(7,"button",32),U("click",function(){let n=T(A),o=n.$implicit,a=n.$index,r=p(3);return J(r.copyJsonToClipboard(o.cleanedFr,"pfr."+a))}),B(8,"mat-icon"),y(9),Q()()()()()}if(t&2){let A=e.$implicit,i=e.$index,n=p(3);u(2),lA(A.name),u(2),Y(A.hasMedia?4:-1),u(2),H("json",A.cleanedFr),u(3),lA(n.copiedId==="pfr."+i?"check":"content_copy")}}function VNA(t,e){if(t&1&&(B(0,"table",28),Je(1,qNA,10,4,"tr",null,ws),Q()),t&2){let A=p(2);u(),Oe(A.processedFunctionResponses())}}function WNA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td")(4,"span",20)(5,"a",37),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.switchToSpan(n))}),y(6),Q(),B(7,"button",22),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.copyToClipboard(n.span_id))}),B(8,"mat-icon"),y(9),Q()()()()()}if(t&2){let A=e.$implicit,i=p(3);u(2),lA(A.name),u(3),H("matTooltip",A.span_id),u(),lA(A.span_id),u(3),lA(i.copiedId===A.span_id?"check":"content_copy")}}function ZNA(t,e){if(t&1&&(B(0,"table",29),Je(1,WNA,10,4,"tr",null,bNA),Q()),t&2){let A=p(2);u(),Oe(A.associatedSpans())}}function XNA(t,e){if(t&1){let A=hA();B(0,"div",15)(1,"table",18)(2,"tr")(3,"td"),y(4,"Event ID"),Q(),B(5,"td",19)(6,"span",20)(7,"span",21),y(8),Q(),B(9,"button",22),U("click",function(){let n;T(A);let o=p();return J(o.copyToClipboard((n=o.selectedEvent())==null?null:n.id))}),B(10,"mat-icon"),y(11),Q()()()()(),B(12,"tr")(13,"td"),y(14,"Invocation ID"),Q(),B(15,"td",19)(16,"span",20)(17,"span",21),y(18),Q(),B(19,"button",22),U("click",function(){let n;T(A);let o=p();return J(o.copyToClipboard((n=o.selectedEvent())==null?null:n.invocationId))}),B(20,"mat-icon"),y(21),Q()()()()(),B(22,"tr")(23,"td"),y(24,"Branch"),Q(),B(25,"td")(26,"span",23)(27,"span",21),y(28),Q(),B(29,"button",24),U("click",function(){let n;T(A);let o=p();return J(o.copyToClipboard((n=o.selectedEvent())==null?null:n.branch))}),B(30,"mat-icon"),y(31),Q()()()()(),B(32,"tr")(33,"td"),y(34,"Timestamp"),Q(),B(35,"td")(36,"span",23)(37,"span",21),y(38),Q(),B(39,"button",24),U("click",function(){let n;T(A);let o=p();return J(o.copyToClipboard(o.formatTime((n=o.selectedEvent())==null?null:n.timestamp),"timestamp"))}),B(40,"mat-icon"),y(41),Q()()()()(),B(42,"tr")(43,"td"),y(44,"Author"),Q(),B(45,"td")(46,"span",23)(47,"span",21),y(48),Q(),B(49,"button",24),U("click",function(){let n;T(A);let o=p();return J(o.copyToClipboard((n=o.selectedEvent())==null?null:n.author))}),B(50,"mat-icon"),y(51),Q()()()()()(),O(52,FNA,18,5,"table",25),O(53,UNA,3,0,"table",26),O(54,JNA,3,0,"table",27),O(55,VNA,3,0,"table",28),O(56,ZNA,3,0,"table",29),Q()}if(t&2){let A,i,n,o,a,r,s,l,g,C,I,d,h,E,f,m,v=p();u(7),H("matTooltip",((A=v.selectedEvent())==null?null:A.id)||""),u(),lA((i=v.selectedEvent())==null?null:i.id),u(3),lA(v.copiedId===((n=v.selectedEvent())==null?null:n.id)?"check":"content_copy"),u(6),H("matTooltip",((o=v.selectedEvent())==null?null:o.invocationId)||""),u(),lA(((a=v.selectedEvent())==null?null:a.invocationId)||"N/A"),u(3),lA(v.copiedId===((r=v.selectedEvent())==null?null:r.invocationId)?"check":"content_copy"),u(6),H("matTooltip",((s=v.selectedEvent())==null?null:s.branch)||""),u(),lA(((l=v.selectedEvent())==null?null:l.branch)||"N/A"),u(3),lA(v.copiedId===((g=v.selectedEvent())==null?null:g.branch)?"check":"content_copy"),u(6),H("matTooltip",v.formatTime((C=v.selectedEvent())==null?null:C.timestamp)),u(),lA(v.formatTime((I=v.selectedEvent())==null?null:I.timestamp)),u(3),lA(v.copiedId==="timestamp"?"check":"content_copy"),u(6),H("matTooltip",((d=v.selectedEvent())==null?null:d.author)||""),u(),lA((h=v.selectedEvent())==null?null:h.author),u(3),lA(v.copiedId===((E=v.selectedEvent())==null?null:E.author)?"check":"content_copy"),u(),Y((f=v.selectedEvent())!=null&&f.nodeInfo?52:-1),u(),Y((m=v.selectedEvent())!=null&&m.actions&&v.Object.keys(v.selectedEvent().actions).length>0?53:-1),u(),Y(v.functionCalls().length>0?54:-1),u(),Y(v.processedFunctionResponses().length>0?55:-1),u(),Y(v.associatedSpans().length>0?56:-1)}}function $NA(t,e){if(t&1&&(B(0,"div",21),y(1),Q()),t&2){let A=e.$implicit;H("matTooltip",A.modality+": "+A.tokenCount),u(),ba("",A.modality,": ",A.tokenCount)}}function AFA(t,e){if(t&1&&Je(0,$NA,2,3,"div",21,MNA),t&2){let A=p().$implicit,i=p(3);Oe(i.selectedEvent().usageMetadata[A])}}function eFA(t,e){if(t&1&&(B(0,"span",21),y(1),Q()),t&2){let A,i=p().$implicit,n=p(3);H("matTooltip",((A=n.selectedEvent().usageMetadata[i])==null?null:A.toString())||""),u(),lA(n.selectedEvent().usageMetadata[i])}}function tFA(t,e){if(t&1){let A=hA();B(0,"tr")(1,"td"),y(2),Q(),B(3,"td")(4,"span",23)(5,"span"),O(6,AFA,2,0)(7,eFA,2,2,"span",21),Q(),B(8,"button",24),U("click",function(){let n,o=T(A).$implicit,a=p(3);return J(a.isObject(a.selectedEvent().usageMetadata[o])?a.copyJsonToClipboard(a.selectedEvent().usageMetadata[o],"usage."+o):a.copyToClipboard((n=a.selectedEvent().usageMetadata[o])==null?null:n.toString(),"usage."+o))}),B(9,"mat-icon"),y(10),Q()()()()()}if(t&2){let A=e.$implicit,i=p(3);u(2),lA(A),u(4),Y(A==="promptTokensDetails"||A==="promptTokenDetails"||A==="candidatesTokenDetails"||A==="candidatesTokensDetails"||A==="cacheTokensDetails"?6:7),u(4),lA(i.copiedId==="usage."+A?"check":"content_copy")}}function iFA(t,e){if(t&1&&(B(0,"table",38),Je(1,tFA,11,3,"tr",null,hi),Q()),t&2){let A=p(2);u(),Oe(A.Object.keys(A.selectedEvent().usageMetadata))}}function nFA(t,e){t&1&&(B(0,"div",39),y(1,"Select an LLM response to see usage metadata."),Q())}function oFA(t,e){if(t&1&&(B(0,"div",15),O(1,iFA,3,0,"table",38)(2,nFA,2,0,"div",39),Q()),t&2){let A,i=p();u(),Y((A=i.selectedEvent())!=null&&A.usageMetadata&&i.Object.keys(i.selectedEvent().usageMetadata).length>0?1:2)}}function aFA(t,e){if(t&1){let A=hA();B(0,"div",16),QA(1,"ngx-json-viewer",31),B(2,"button",32),U("click",function(){T(A);let n=p();return J(n.copyJsonToClipboard(n.filteredSelectedEvent(),"raw"))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p();u(),H("json",A.filteredSelectedEvent()),u(3),lA(A.copiedId==="raw"?"check":"content_copy")}}function rFA(t,e){t&1&&(B(0,"div",40)(1,"mat-icon",52),y(2,"warning"),Q(),B(3,"span"),y(4,"The loaded session file was for a different app. The graph may not be accurate."),Q()())}function sFA(t,e){if(t&1){let A=hA();B(0,"button",58),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.onInvocationSelected(n.key))}),B(1,"mat-icon",59),y(2,"check"),Q(),y(3),Q()}if(t&2){let A,i=e.$implicit,n=p(3);H("matTooltip",i.key),u(),ut("visibility",((A=n.selectedEvent())==null?null:A.invocationId)===i.key?"visible":"hidden"),u(2),ue(" ",i.value," ")}}function lFA(t,e){if(t&1&&(B(0,"button",53)(1,"div",54)(2,"span",55),y(3),Q(),B(4,"mat-icon",56),y(5,"arrow_drop_down"),Q()()(),B(6,"mat-menu",null,3),Je(8,sFA,4,4,"button",57,kNA),Q()),t&2){let A,i=Qi(7),n=p(2);H("matMenuTriggerFor",i),u(2),H("matTooltip",((A=n.selectedEvent())==null?null:A.invocationId)||""),u(),ue(" ",n.invocationDisplayMap().get(n.selectedEvent().invocationId)||n.selectedEvent().invocationId," "),u(5),Oe(n.invocationDisplayEntries())}}function gFA(t,e){if(t&1&&(B(0,"span",44),y(1),Q()),t&2){let A,i,n=p(2);H("matTooltip",((A=n.selectedEvent())==null?null:A.invocationId)||""),u(),lA((i=n.selectedEvent())!=null&&i.invocationId?n.invocationDisplayMap().get(n.selectedEvent().invocationId)||n.selectedEvent().invocationId:"N/A")}}function cFA(t,e){t&1&&(B(0,"mat-icon",61),y(1,"chevron_right"),Q())}function CFA(t,e){t&1&&(B(0,"mat-icon",61),y(1,"chevron_right"),Q())}function IFA(t,e){if(t&1&&(O(0,CFA,2,0,"mat-icon",61),B(1,"button",60),y(2),Q()),t&2){let A=e.$implicit,i=e.$index,n=p(3);Y(i>0?0:-1),u(),RA("active",i===n.breadcrumbs().length-1),u(),ue(" ",A," ")}}function dFA(t,e){if(t&1&&(B(0,"div",45)(1,"button",60),y(2),Q(),O(3,cFA,2,0,"mat-icon",61),Je(4,IFA,3,4,null,null,ws),Q()),t&2){let A=p(2);u(2),lA(A.appName()),u(),Y(A.breadcrumbs().length>0?3:-1),u(),Oe(A.breadcrumbs())}}function BFA(t,e){if(t&1){let A=hA();B(0,"button",62),U("click",function(){T(A);let n=p(2);return J(n.showAgentStructureGraph.emit(!0))}),B(1,"mat-icon"),y(2,"fullscreen"),Q()()}}function EFA(t,e){t&1&&(B(0,"div",39),y(1," Graph is not available for this agent. "),Q())}function hFA(t,e){t&1&&(B(0,"div",48),QA(1,"mat-progress-spinner",63),Q())}function QFA(t,e){if(t&1&&QA(0,"div",49),t&2){let A=p(2);H("innerHtml",A.renderedEventGraph(),Kc)}}function uFA(t,e){if(t&1){let A=hA();B(0,"button",64),U("click",function(){let n=T(A).$implicit,o=p(2);return J(o.handleMenuSelection(n))}),B(1,"span"),y(2),Ht(3,"date"),Q()()}if(t&2){let A=e.$implicit;u(2),ba("Run ",A.runIndex," (",T0(3,2,A.timestamp,"mediumTime"),")")}}function fFA(t,e){if(t&1&&(B(0,"div",17),O(1,rFA,5,0,"div",40),B(2,"div",41)(3,"div",42)(4,"span",43),y(5,"Invocation:"),Q(),O(6,lFA,10,3)(7,gFA,2,2,"span",44),Q()(),O(8,dFA,6,2,"div",45),B(9,"div",46,0),O(11,BFA,3,0,"button",47),O(12,EFA,2,0,"div",39)(13,hFA,2,0,"div",48)(14,QFA,1,1,"div",49),Q(),QA(15,"div",50,1),B(17,"mat-menu",null,2),Je(19,uFA,4,5,"button",51,SNA),Q()()),t&2){let A,i=Qi(18),n=p();u(),Y(n.isViewOnlyAppNameMismatch()?1:-1),u(5),Y(n.invocationDisplayMap().size>0&&((A=n.selectedEvent())!=null&&A.invocationId)?6:7),u(2),Y(n.hasSubWorkflows()&&(n.breadcrumbs().length>0||n.appName())?8:-1),u(3),Y(n.graphsAvailable()?11:-1),u(),Y(n.graphsAvailable()?n.renderedEventGraph()?14:13:12),u(3),ut("left",n.menuPos.x+"px")("top",n.menuPos.y+"px"),H("matMenuTriggerFor",i),u(4),Oe(n.menuEvents)}}function pFA(t,e){t&1&&(B(0,"div",48),QA(1,"mat-progress-spinner",63),Q())}function mFA(t,e){t&1&&(B(0,"div",39),y(1,"Select an LLM response to see request details."),Q())}function wFA(t,e){if(t&1){let A=hA();B(0,"div",16),QA(1,"ngx-json-viewer",31),B(2,"button",32),U("click",function(){T(A);let n=p(2);return J(n.copyJsonToClipboard(n.llmRequest(),"request"))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p(2);u(),H("json",A.llmRequest()),u(3),lA(A.copiedId==="request"?"check":"content_copy")}}function DFA(t,e){if(t&1&&(O(0,pFA,2,0,"div",48),Ht(1,"async"),WI(2,mFA,2,0,"div",39)(3,wFA,5,2,"div",16)),t&2){let A=p();Y(ri(1,1,A.uiStateService.isEventRequestResponseLoading())===!0?0:A.llmRequest()?3:2)}}function yFA(t,e){t&1&&(B(0,"div",48),QA(1,"mat-progress-spinner",63),Q())}function vFA(t,e){t&1&&(B(0,"div",39),y(1,"Select an LLM response to see response details."),Q())}function bFA(t,e){if(t&1){let A=hA();B(0,"div",16),QA(1,"ngx-json-viewer",31),B(2,"button",32),U("click",function(){T(A);let n=p(2);return J(n.copyJsonToClipboard(n.llmResponse(),"response"))}),B(3,"mat-icon"),y(4),Q()()()}if(t&2){let A=p(2);u(),H("json",A.llmResponse()),u(3),lA(A.copiedId==="response"?"check":"content_copy")}}function MFA(t,e){if(t&1&&(O(0,yFA,2,0,"div",48),Ht(1,"async"),WI(2,vFA,2,0,"div",39)(3,bFA,5,2,"div",16)),t&2){let A=p();Y(ri(1,1,A.uiStateService.isEventRequestResponseLoading())===!0?0:A.llmResponse()?3:2)}}var Iv=class t{eventDataSize=me.required();eventDataMap=me(new Map);selectedEventIndex=me();selectedEvent=me.required();filteredSelectedEvent=me();renderedEventGraph=me();rawSvgString=me(null);llmRequest=me();llmResponse=me();traceData=me([]);appName=me("");selectedEventGraphPath=me("");hasSubWorkflows=me(!1);graphsAvailable=me(!0);invocationDisplayMap=me(new Map);forceGraphTab=me(!1);isViewOnlySession=me(!1);isViewOnlyAppNameMismatch=me(!1);invocationDisplayEntries=pe(()=>Array.from(this.invocationDisplayMap().entries()).map(([e,A])=>({key:e,value:A})));breadcrumbs=pe(()=>{let e=this.selectedEventGraphPath();return e?e.split("/").filter(A=>A):[]});functionCalls=pe(()=>(this.selectedEvent()?.content?.parts||[]).filter(A=>!!A.functionCall).map(A=>A.functionCall));functionResponses=pe(()=>(this.selectedEvent()?.content?.parts||[]).filter(A=>!!A.functionResponse).map(A=>A.functionResponse));processedFunctionResponses=pe(()=>this.functionResponses().map(A=>{if(!A)return null;if(A&&Array.isArray(A.parts)){let n=A.parts.filter(a=>!!a.inlineData).map(a=>a.inlineData&&a.inlineData.data?Ye(gA({},a),{inlineData:Ye(gA({},a.inlineData),{data:a.inlineData.data.replace(/-/g,"+").replace(/_/g,"/")})}):a),o=gA({},A);return delete o.parts,{name:A.name,cleanedFr:o,mediaParts:n,hasMedia:n.length>0}}return{name:A.name,cleanedFr:A,mediaParts:[],hasMedia:!1}}).filter(A=>A!==null));page=ui();closeSelectedEvent=ui();openImageDialog=ui();switchToTraceView=ui();showAgentStructureGraph=ui();drillDownNodePath=ui();selectEventById=ui();jumpToInvocation=ui();onInvocationSelected(e){this.jumpToInvocation.emit(e)}eventMenuTrigger;graphContainer;menuEvents=[];menuPos={x:0,y:0};uiStateService=w(tg);traceService=w(Ag);i18n=w(pQ);isEventRequestResponseLoadingSignal=Ar(this.uiStateService.isEventRequestResponseLoading(),{initialValue:!1});associatedSpans=pe(()=>{let e=this.selectedEvent();if(!e||!e.id)return[];let A=this.traceData();if(!A)return[];let i=o=>{let a=[];for(let r of o)a.push(r),r.children&&(a=a.concat(i(r.children)));return a};return i(A).filter(o=>o.attributes&&o.attributes["gcp.vertex.agent.event_id"]===e.id)});_selectedDetailTab="event";get selectedDetailTab(){return this._selectedDetailTab}set selectedDetailTab(e){this._selectedDetailTab=e,localStorage.setItem("adk-event-tab-selected-tab",e),e==="graph"&&setTimeout(()=>{this.graphContainer?.nativeElement&&nE(this.graphContainer.nativeElement,(A,i)=>{this.handleNodeClick(A,i)})},50)}copiedId=null;copyToClipboard(e,A){e&&navigator.clipboard.writeText(e).then(()=>{this.copiedId=A||e,setTimeout(()=>this.copiedId=null,2e3)})}copyJsonToClipboard(e,A){if(!e)return;let i=JSON.stringify(e,null,2);navigator.clipboard.writeText(i).then(()=>{this.copiedId=A,setTimeout(()=>this.copiedId=null,2e3)})}switchToSpan(e){this.switchToTraceView.emit(),this.traceService.selectedRow(e)}constructor(){let e=localStorage.getItem("adk-event-tab-selected-tab");e&&["event","raw","request","response","graph","metadata"].includes(e)&&(this._selectedDetailTab=e),Ao(()=>{let A=this.renderedEventGraph(),i=this._selectedDetailTab;A&&i==="graph"&&setTimeout(()=>{this.graphContainer?.nativeElement&&nE(this.graphContainer.nativeElement,(n,o)=>{this.handleNodeClick(n,o)})},50)}),Ao(()=>{let A=this.selectedEvent();this.forceGraphTab()&&(this.selectedDetailTab=this.graphsAvailable()?"graph":"event")})}formatTime(e){if(!e)return"N/A";let A=e<1e10?e*1e3:e;return new Date(A).toLocaleString()}isObject(e){return e!==null&&typeof e=="object"}handleNodeClick(e,A){let i=Array.from(this.eventDataMap().values()),o=this.selectedEvent()?.invocationId;o&&(i=i.filter(l=>l.invocationId===o));let a=[],r=[],s="";i.forEach(l=>{let g=l.nodeInfo?.path;if(l.author==="user"&&(g="__START__"),!g)return;let C=g;g!=="__START__"&&(C=g.split("/").map(E=>E.split("@")[0]).join("/"));let I=C.split("/"),d=I[I.length-1],h="";if(I.length>=2&&I[I.length-1]==="call_llm"&&I[I.length-2]===l.author?(d=I[I.length-2],h=I.slice(1,-2).join("/")):h=I.slice(1,-1).join("/"),h===this.selectedEventGraphPath()){let E=g.split("/"),f=E[E.length-1],m=e.includes("@")?f:d;m!==s&&(s===e&&r.length>0&&a.push(r),s=m,r=[]),m===e&&r.push(l)}}),s===e&&r.length>0&&a.push(r),a.length!==0&&(a.length===1?this.selectEventById.emit(a[0][0].id):(this.menuEvents=a.map((l,g)=>({id:l[0].id,runIndex:g+1,timestamp:l[0].timestamp})),A&&(this.menuPos={x:A.clientX,y:A.clientY}),this.eventMenuTrigger.openMenu()))}handleMenuSelection(e){this.selectEventById.emit(e.id)}Object=Object;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-event-tab"]],viewQuery:function(A,i){if(A&1&&Jt(yNA,5)(vNA,5),A&2){let n;ae(n=re())&&(i.eventMenuTrigger=n.first),ae(n=re())&&(i.graphContainer=n.first)}},inputs:{eventDataSize:[1,"eventDataSize"],eventDataMap:[1,"eventDataMap"],selectedEventIndex:[1,"selectedEventIndex"],selectedEvent:[1,"selectedEvent"],filteredSelectedEvent:[1,"filteredSelectedEvent"],renderedEventGraph:[1,"renderedEventGraph"],rawSvgString:[1,"rawSvgString"],llmRequest:[1,"llmRequest"],llmResponse:[1,"llmResponse"],traceData:[1,"traceData"],appName:[1,"appName"],selectedEventGraphPath:[1,"selectedEventGraphPath"],hasSubWorkflows:[1,"hasSubWorkflows"],graphsAvailable:[1,"graphsAvailable"],invocationDisplayMap:[1,"invocationDisplayMap"],forceGraphTab:[1,"forceGraphTab"],isViewOnlySession:[1,"isViewOnlySession"],isViewOnlyAppNameMismatch:[1,"isViewOnlyAppNameMismatch"]},outputs:{page:"page",closeSelectedEvent:"closeSelectedEvent",openImageDialog:"openImageDialog",switchToTraceView:"switchToTraceView",showAgentStructureGraph:"showAgentStructureGraph",drillDownNodePath:"drillDownNodePath",selectEventById:"selectEventById",jumpToInvocation:"jumpToInvocation"},decls:31,vars:29,consts:[["graphContainer",""],["eventMenuTrigger","matMenuTrigger"],["eventMenu","matMenu"],["invocationSelectorMenu","matMenu"],[1,"event-details-container"],[1,"event-details-header"],["hidePageSize","",1,"event-paginator",3,"page","length","pageSize","pageIndex"],["mat-icon-button","",3,"click","matTooltip"],[1,"event-details-content"],[1,"vertical-tabs-sidebar"],["mat-icon-button","","matTooltipPosition","right",3,"click","matTooltip"],["mat-icon-button","","matTooltipPosition","right",3,"active","matTooltip"],["mat-icon-button","","matTooltip","Usage Metadata","matTooltipPosition","right",3,"click"],["mat-icon-button","","matTooltip","Raw JSON","matTooltipPosition","right",3,"click"],[1,"vertical-tabs-content"],[1,"info-tables-container"],[1,"json-viewer-container","json-viewer-wrapper"],[1,"event-graph-wrapper"],["app-info-table",""],[1,"id-text"],[1,"id-cell"],[3,"matTooltip"],["mat-icon-button","","matTooltip","Copy",1,"copy-id-button",3,"click"],[1,"value-cell"],["mat-icon-button","","matTooltip","Copy",1,"copy-value-button",3,"click"],["app-info-table","","title","Node Info"],["app-info-table","","title","Actions"],["app-info-table","","title","Function Calls"],["app-info-table","","title","Function Responses"],["app-info-table","","title","Associated Spans"],[1,"json-viewer-wrapper"],[3,"json"],["mat-icon-button","","matTooltip","Copy JSON",1,"floating-copy-button",3,"click"],[1,"media-container"],[1,"generated-image-container"],["alt","image",3,"src"],["controls","",3,"src"],["href","javascript:void(0)",1,"span-link","id-text",3,"click","matTooltip"],["app-info-table","","title","Usage Metadata"],[1,"request-response-empty-state"],[1,"warning-banner",2,"background-color","#fff3cd","color","#856404","padding","8px","margin-bottom","8px","border-radius","4px","display","flex","align-items","center"],[1,"graph-header",2,"justify-content","space-between"],[2,"display","flex","align-items","center","min-width","0","flex","1","width","100%"],[2,"white-space","nowrap","flex-shrink","0"],[2,"margin-left","8px","font-weight","normal",3,"matTooltip"],[1,"breadcrumb-container"],[1,"event-graph-container"],["mat-icon-button","","matTooltip","Full Screen",1,"fullscreen-graph-button"],[1,"request-response-loading-spinner-container"],[1,"svg-graph-wrapper",3,"innerHtml"],[2,"visibility","hidden","position","fixed",3,"matMenuTriggerFor"],["mat-menu-item",""],[2,"margin-right","8px"],["mat-button","",1,"invocation-selector-button",2,"margin-left","8px","padding","0 8px","min-width","0","flex","1","height","24px","line-height","24px","width","100%",3,"matMenuTriggerFor"],[2,"display","flex","align-items","center","width","100%","min-width","0","justify-content","space-between"],[2,"font-weight","normal","overflow","hidden","text-overflow","ellipsis","white-space","nowrap","flex","1","text-align","left",3,"matTooltip"],[2,"margin-left","4px","font-size","18px","width","18px","height","18px","flex-shrink","0"],["mat-menu-item","","matTooltipPosition","right",3,"matTooltip"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[2,"font-size","16px","width","16px","height","16px","margin-right","8px","color","var(--mat-sys-primary)"],["disabled","",1,"breadcrumb-item"],[1,"breadcrumb-separator"],["mat-icon-button","","matTooltip","Full Screen",1,"fullscreen-graph-button",3,"click"],["mode","indeterminate","diameter","50"],["mat-menu-item","",3,"click"]],template:function(A,i){A&1&&(B(0,"div",4)(1,"div",5)(2,"mat-paginator",6),U("page",function(o){return i.page.emit(o)}),Q(),B(3,"button",7),U("click",function(){return i.closeSelectedEvent.emit()}),B(4,"mat-icon"),y(5,"remove_selection"),Q()()(),B(6,"div",8)(7,"div",9)(8,"button",10),U("click",function(){return i.selectedDetailTab="event"}),B(9,"mat-icon"),y(10,"info"),Q()(),O(11,xNA,3,4,"button",11),B(12,"button",10),U("click",function(){return i.selectedDetailTab="request"}),B(13,"mat-icon"),y(14,"input"),Q()(),B(15,"button",10),U("click",function(){return i.selectedDetailTab="response"}),B(16,"mat-icon"),y(17,"output"),Q()(),B(18,"button",12),U("click",function(){return i.selectedDetailTab="metadata"}),B(19,"mat-icon"),y(20,"analytics"),Q()(),B(21,"button",13),U("click",function(){return i.selectedDetailTab="raw"}),B(22,"mat-icon"),y(23,"data_object"),Q()()(),B(24,"div",14),O(25,XNA,57,20,"div",15),O(26,oFA,3,1,"div",15),O(27,aFA,5,2,"div",16),O(28,fFA,21,10,"div",17),O(29,DFA,4,3),O(30,MFA,4,3),Q()()()),A&2&&(u(2),H("length",i.eventDataSize())("pageSize",1)("pageIndex",i.selectedEventIndex()),te("aria-label",i.i18n.selectEventAriaLabel),u(),H("matTooltip",XC(i.i18n.clearSelectionButtonLabel)),u(5),RA("active",i.selectedDetailTab==="event"),H("matTooltip",XC(i.i18n.infoTabLabel)),u(3),Y(i.graphsAvailable()?11:-1),u(),RA("active",i.selectedDetailTab==="request"),H("matTooltip",XC(i.i18n.requestDetailsTabLabel)),u(3),RA("active",i.selectedDetailTab==="response"),H("matTooltip",XC(i.i18n.responseDetailsTabLabel)),u(3),RA("active",i.selectedDetailTab==="metadata"),u(3),RA("active",i.selectedDetailTab==="raw"),u(4),Y(i.selectedDetailTab==="event"?25:-1),u(),Y(i.selectedDetailTab==="metadata"?26:-1),u(),Y(i.selectedDetailTab==="raw"?27:-1),u(),Y(i.selectedDetailTab==="graph"?28:-1),u(),Y(i.selectedDetailTab==="request"?29:-1),u(),Y(i.selectedDetailTab==="response"?30:-1))},dependencies:[qi,pi,ji,Wt,n6,gs,dn,LB,Zs,Ml,$c,cs,$l,OI,os,nL],styles:["[_nghost-%COMP%]{display:block;height:100%}.json-viewer-container[_ngcontent-%COMP%]{margin:10px}.event-paginator[_ngcontent-%COMP%]{margin-right:auto;display:flex;justify-content:center;background-color:transparent}.event-paginator[_ngcontent-%COMP%] .mat-mdc-paginator-range-label{order:2;margin:0 0 0 8px}.event-details-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.event-details-content[_ngcontent-%COMP%]{display:flex;flex:1;overflow:hidden}.vertical-tabs-sidebar[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:48px;border-right:1px solid var(--mat-sys-outline-variant);padding-top:8px;align-items:center;gap:8px}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .vertical-tabs-sidebar[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:6px!important}.vertical-tabs-sidebar[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container)!important;color:var(--mat-sys-on-secondary-container)!important}.vertical-tabs-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;overflow-y:auto}.event-details-header[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;border-bottom:1px solid var(--mat-sys-outline-variant);height:48px;flex-shrink:0}.empty-state[_ngcontent-%COMP%]{padding:16px;text-align:center;color:var(--mat-sys-on-surface-variant);font-style:italic}.details-content[_ngcontent-%COMP%]{color:var(--side-panel-details-content-color);font-size:14px}.event-graph-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;width:100%}.breadcrumb-container[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:13px;color:var(--mat-sys-on-surface-variant);padding:8px 12px}.breadcrumb-container[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-weight:500;margin-right:8px;color:var(--mat-sys-on-surface)}.breadcrumb-container[_ngcontent-%COMP%] .breadcrumb-item[_ngcontent-%COMP%]{background:none;border:none;color:var(--mat-sys-primary);font-size:13px;padding:2px 4px}.breadcrumb-container[_ngcontent-%COMP%] .breadcrumb-item.active[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}.breadcrumb-container[_ngcontent-%COMP%] .breadcrumb-item[_ngcontent-%COMP%]:disabled{color:var(--mat-sys-on-surface);font-weight:500}.breadcrumb-container[_ngcontent-%COMP%] .breadcrumb-separator[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;color:var(--mat-sys-on-surface-variant);margin:0 4px}.graph-header[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:13px;color:var(--mat-sys-on-surface-variant);background-color:var(--mat-sys-surface-container-lowest);padding:8px 16px;border-bottom:1px solid var(--mat-sys-outline-variant)}.graph-header[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-weight:500;margin-right:8px;color:var(--mat-sys-on-surface)}.event-graph-container[_ngcontent-%COMP%]{flex:1;overflow:hidden;padding:16px;position:relative}.fullscreen-graph-button[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;z-index:10;width:48px!important;height:48px!important;padding:0!important;display:flex!important;justify-content:center!important;align-items:center!important}.fullscreen-graph-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:28px!important;width:28px!important;height:28px!important;line-height:28px!important;margin:0!important;padding:0!important}.event-graph-container[_ngcontent-%COMP%] .svg-graph-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.event-graph-container[_ngcontent-%COMP%] svg{max-width:100%;max-height:100%;width:auto;height:auto;display:block}.event-graph-container[_ngcontent-%COMP%] svg>g.graph>polygon:first-child{fill:transparent!important}.request-response-loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em}.request-response-empty-state[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em;font-style:italic}.id-text[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace;font-size:12px}.id-cell[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;overflow:hidden}.id-cell[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child, .value-cell[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.id-cell[_ngcontent-%COMP%]:hover .copy-id-button[_ngcontent-%COMP%], .id-cell[_ngcontent-%COMP%]:hover .copy-value-button[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]:hover .copy-id-button[_ngcontent-%COMP%], .value-cell[_ngcontent-%COMP%]:hover .copy-value-button[_ngcontent-%COMP%]{opacity:1}.copy-id-button[_ngcontent-%COMP%], .copy-value-button[_ngcontent-%COMP%]{width:28px!important;height:28px!important;padding:0!important;line-height:28px!important;flex-shrink:0;margin:-4px 0!important;opacity:0;transition:opacity .2s ease-in-out;border-radius:4px!important;overflow:hidden!important}.copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .copy-id-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .copy-value-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:4px!important}.copy-id-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%], .copy-value-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px}.info-tables-container[_ngcontent-%COMP%]{padding:16px;overflow-y:auto;display:flex;flex-direction:column;gap:24px}.invocation-selector-button[_ngcontent-%COMP%] .mdc-button__label{width:100%;flex:1;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;justify-content:space-between}.media-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-top:8px;margin-bottom:12px}.generated-image-container[_ngcontent-%COMP%]{max-width:100%;border-radius:8px;overflow:hidden;box-shadow:0 2px 4px #0000001a;border:1px solid var(--mat-sys-outline-variant)}.generated-image-container[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;height:auto;display:block}audio[_ngcontent-%COMP%], video[_ngcontent-%COMP%]{max-width:100%;border-radius:4px}.json-viewer-wrapper[_ngcontent-%COMP%]{position:relative}.json-viewer-wrapper[_ngcontent-%COMP%]:hover .floating-copy-button[_ngcontent-%COMP%]{opacity:1}.floating-copy-button[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;z-index:10;opacity:0;transition:opacity .2s ease-in-out;background-color:var(--mat-sys-surface-container-high)!important;border-radius:4px!important;overflow:hidden!important;width:28px!important;height:28px!important;line-height:28px!important;padding:0!important}.floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-ripple, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple:before, .floating-copy-button[_ngcontent-%COMP%] .mat-mdc-focus-indicator{border-radius:4px!important}.floating-copy-button[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px}.floating-copy-button[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-secondary-container)!important;color:var(--mat-sys-on-secondary-container)!important}"],changeDetection:0})};var SFA=["evalTabContainer"];function kFA(t,e){}function xFA(t,e){t&1&&(B(0,"div",1),QA(1,"mat-progress-spinner",4),Q())}function _FA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(2);u(),lA(A.i18n.infoTabLabel)}}function RFA(t,e){if(t&1){let A=hA();B(0,"app-trace-tab",12),U("switchToEvent",function(n){T(A);let o=p(2);return J(o.switchToEvent.emit(n))}),Q()}if(t&2){let A=p(2);H("traceData",A.traceData())}}function NFA(t,e){if(t&1){let A=hA();B(0,"app-event-tab",13),U("page",function(n){T(A);let o=p(2);return J(o.page.emit(n))})("closeSelectedEvent",function(){T(A);let n=p(2);return J(n.closeSelectedEvent.emit())})("openImageDialog",function(n){T(A);let o=p(2);return J(o.openImageDialog.emit(n))})("switchToTraceView",function(){T(A);let n=p(2);return J(n.switchToTraceView.emit())})("showAgentStructureGraph",function(n){T(A);let o=p(2);return J(o.showAgentStructureGraph.emit(n))})("drillDownNodePath",function(n){T(A);let o=p(2);return J(o.drillDownNodePath.emit(n))})("selectEventById",function(n){T(A);let o=p(2);return J(o.selectEventById.emit(n))})("jumpToInvocation",function(n){T(A);let o=p(2);return J(o.jumpToInvocation.emit(n))}),Q()}if(t&2){let A=p(2);H("eventDataSize",A.eventData().size)("eventDataMap",A.eventData())("selectedEventIndex",A.selectedEventIndex())("selectedEvent",A.selectedEvent())("traceData",A.traceData())("filteredSelectedEvent",A.filteredSelectedEvent())("renderedEventGraph",A.renderedEventGraph())("rawSvgString",A.rawSvgString())("appName",A.appName())("selectedEventGraphPath",A.selectedEventGraphPath())("llmRequest",A.llmRequest())("llmResponse",A.llmResponse())("hasSubWorkflows",A.hasSubWorkflows())("graphsAvailable",A.graphsAvailable())("invocationDisplayMap",A.invocationDisplayMap())("forceGraphTab",A.forceGraphTab())("isViewOnlySession",A.isViewOnlySession())("isViewOnlyAppNameMismatch",A.isViewOnlyAppNameMismatch())}}function FFA(t,e){t&1&&(B(0,"div",9),y(1,"Select an event or trace span to view details"),Q())}function LFA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(2);u(),lA(A.i18n.stateTabLabel)}}function GFA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(3);u(),lA(A.i18n.artifactsTabLabel)}}function KFA(t,e){if(t&1&&(B(0,"mat-tab"),Et(1,GFA,2,1,"ng-template",6),QA(2,"app-artifact-tab",14),Q()),t&2){let A=p(2);u(2),H("artifacts",A.artifacts())}}function UFA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(3);u(),lA(A.i18n.testsTabLabel)}}function TFA(t,e){if(t&1){let A=hA();B(0,"mat-tab"),Et(1,UFA,2,1,"ng-template",6),B(2,"app-tests-tab",15),U("testSelected",function(n){T(A);let o=p(2);return J(o.testSelected.emit(n))}),Q()()}if(t&2){let A=p(2);u(2),H("appName",A.appName())("sessionId",A.sessionId())("userId",A.userId())("isViewOnlySession",A.isViewOnlySession())}}function JFA(t,e){if(t&1&&(B(0,"span",11),y(1),Q()),t&2){let A=p(3);u(),lA(A.i18n.evalTabLabel)}}function OFA(t,e){t&1&&(B(0,"mat-tab"),Et(1,JFA,2,1,"ng-template",6),sn(2,null,0),Q())}function YFA(t,e){if(t&1){let A=hA();B(0,"div",2)(1,"mat-tab-group",5),Di("selectedIndexChange",function(n){T(A);let o=p();return di(o.selectedIndex,n)||(o.selectedIndex=n),J(n)}),U("selectedTabChange",function(n){T(A);let o=p();return J(o.onTabChange(n))}),B(2,"mat-tab"),Et(3,_FA,2,1,"ng-template",6),O(4,RFA,1,1,"app-trace-tab",7)(5,NFA,1,18,"app-event-tab",8)(6,FFA,2,0,"div",9),Q(),B(7,"mat-tab"),Et(8,LFA,2,1,"ng-template",6),QA(9,"app-state-tab",10),Q(),O(10,KFA,3,1,"mat-tab"),Ht(11,"async"),O(12,TFA,3,4,"mat-tab"),Ht(13,"async"),O(14,OFA,4,0,"mat-tab"),Ht(15,"async"),Q()()}if(t&2){let A=p(),i=zn(2);H("hidden",i||!A.showSidePanel()),u(),wi("selectedIndex",A.selectedIndex),u(3),Y(A.selectedSpan()?4:A.selectedEvent()?5:6),u(5),H("sessionState",A.currentSessionState()),u(),Y(ri(11,7,A.isArtifactsTabEnabledObs)?10:-1),u(2),Y(ri(13,9,A.isTestsEnabledObs)?12:-1),u(2),Y(ri(15,11,A.isEvalEnabledObs)?14:-1)}}var mQ=class t{Object=Object;appName=me("");userId=me("");sessionId=me("");traceData=me([]);eventData=me(new Map);currentSessionState=me();artifacts=me([]);selectedEvent=me();selectedEventIndex=me();renderedEventGraph=me();rawSvgString=me(null);selectedEventGraphPath=me("");llmRequest=me();llmResponse=me();showSidePanel=me(!1);isApplicationSelectorEnabledObs=me(oe(!1));isBuilderMode=me(!1);disableBuilderIcon=me(!1);hasSubWorkflows=me(!1);graphsAvailable=me(!0);invocationDisplayMap=me(new Map);forceGraphTab=me(!1);isViewOnlySession=me(!1);isViewOnlyAppNameMismatch=me(!1);closePanel=ui();tabChange=ui();sessionSelected=ui();sessionReloaded=ui();evalCaseSelected=ui();editEvalCaseRequested=ui();testSelected=ui();evalSetIdSelected=ui();returnToSession=ui();evalNotInstalled=ui();page=ui();switchToEvent=ui();closeSelectedEvent=ui();openImageDialog=ui();openAddItemDialog=ui();enterBuilderMode=ui();showAgentStructureGraph=ui();switchToTraceView=ui();drillDownNodePath=ui();selectEventById=ui();jumpToInvocation=ui();sessionTabComponent=void 0;evalTabComponent=So(_c);evalTabContainer=So("evalTabContainer",{read:Mo});tabGroup=So(lv);logoComponent=w(PB,{optional:!0});i18n=w(pQ);featureFlagService=w(yr);evalTabComponentClass=w(rv,{optional:!0});environmentInjector=w(Gr);uiStateService=w(tg);traceService=w(Ag);selectedSpan=Ar(this.traceService.selectedTraceRow$);selectedIndex=0;pendingEvalCaseSelection=bA(void 0);pendingEvalResultSelection=bA(void 0);constructor(){Ao(()=>{let e=this.selectedEvent(),A=this.selectedSpan(),i=this.tabGroup();(e||A)&&i&&i.selectedIndex!==0&&(this.selectedIndex=0,window.localStorage.setItem("adk-side-panel-selected-tab","0"))})}ngOnInit(){let e=window.localStorage.getItem("adk-side-panel-selected-tab");e!==null&&(this.selectedIndex=parseInt(e,10))}onTabChange(e){this.tabChange.emit(e),this.selectedIndex=e.index,window.localStorage.setItem("adk-side-panel-selected-tab",e.index.toString())}switchToEvalTab(){this.isEvalEnabledObs.pipe($n()).subscribe(e=>{e&&qC([this.isArtifactsTabEnabledObs.pipe($n()),this.isTestsEnabledObs.pipe($n())]).subscribe(([A,i])=>{let n=2;A&&n++,i&&n++,this.selectedIndex=n,window.localStorage.setItem("adk-side-panel-selected-tab",n.toString())})})}selectEvalCase(e,A){let i=this.evalTabComponent();i?(i.selectEvalSet(e),i.selectedEvalTab.set("cases"),i.selectedEvalCase.set(A)):this.pendingEvalCaseSelection.set({evalSetId:e,evalCase:A})}selectEvalResult(e,A,i){let n=this.evalTabComponent();console.log("selectEvalResult tab available:",!!n,"evalCase:",i),n?(n.selectEvalSet(e),n.selectedHistoryRun.set(A),i?(console.log("selectEvalResult setting cases tab and case"),n.selectedEvalTab.set("cases"),n.selectedEvalCase.set(i)):(console.log("selectEvalResult setting history tab and run"),n.selectedEvalTab.set("history"))):(console.log("selectEvalResult deferred to pending"),this.pendingEvalResultSelection.set({evalSetId:e,timestamp:A,evalCase:i}))}isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();isTraceEnabledObs=this.featureFlagService.isTraceEnabled();isArtifactsTabEnabledObs=this.featureFlagService.isArtifactsTabEnabled();isEvalEnabledObs=this.featureFlagService.isEvalEnabled();isTestsEnabledObs=this.featureFlagService.isTestsEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled;filteredSelectedEvent=pe(()=>this.selectedEvent());ngAfterViewInit(){setTimeout(()=>{this.initEvalTab()},500)}initEvalTab(){this.isEvalEnabledObs.pipe($n()).subscribe(e=>{if(e){let A=this.evalTabContainer()?.createComponent(this.evalTabComponentClass??_c,{environmentInjector:this.environmentInjector});if(!A)return;Xa(this.environmentInjector,()=>{Ao(()=>{A.setInput("appName",this.appName()),A.setInput("userId",this.userId()),A.setInput("sessionId",this.sessionId())}),Ao(()=>{let i=this.pendingEvalCaseSelection();i&&(console.log("initEvalTab applying pendingEvalCaseSelection:",i),A.instance.selectEvalSet(i.evalSetId),A.instance.selectedEvalTab.set("cases"),A.instance.selectedEvalCase.set(i.evalCase),this.pendingEvalCaseSelection.set(void 0))}),Ao(()=>{let i=this.pendingEvalResultSelection();i&&(console.log("initEvalTab applying pendingEvalResultSelection:",i),A.instance.selectEvalSet(i.evalSetId),A.instance.selectedHistoryRun.set(i.timestamp),i.evalCase?(console.log("initEvalTab setting cases tab and case"),A.instance.selectedEvalTab.set("cases"),A.instance.selectedEvalCase.set(i.evalCase)):(console.log("initEvalTab setting history tab and run"),A.instance.selectedEvalTab.set("history")),this.pendingEvalResultSelection.set(void 0))})}),A.instance.sessionSelected.subscribe(i=>{this.sessionSelected.emit(i)}),A.instance.evalCaseSelected.subscribe(i=>{this.evalCaseSelected.emit(i)}),A.instance.editEvalCaseRequested.subscribe(i=>{this.editEvalCaseRequested.emit(i)}),A.instance.evalSetIdSelected.subscribe(i=>{this.evalSetIdSelected.emit(i)}),A.instance.shouldReturnToSession.subscribe(i=>{this.returnToSession.emit(i)}),A.instance.evalNotInstalledMsg.subscribe(i=>{this.evalNotInstalled.emit(i)})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-side-panel"]],viewQuery:function(A,i){A&1&&ns(i.evalTabComponent,_c,5)(i.evalTabContainer,SFA,5,Mo)(i.tabGroup,lv,5),A&2&&ur(3)},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"],traceData:[1,"traceData"],eventData:[1,"eventData"],currentSessionState:[1,"currentSessionState"],artifacts:[1,"artifacts"],selectedEvent:[1,"selectedEvent"],selectedEventIndex:[1,"selectedEventIndex"],renderedEventGraph:[1,"renderedEventGraph"],rawSvgString:[1,"rawSvgString"],selectedEventGraphPath:[1,"selectedEventGraphPath"],llmRequest:[1,"llmRequest"],llmResponse:[1,"llmResponse"],showSidePanel:[1,"showSidePanel"],isApplicationSelectorEnabledObs:[1,"isApplicationSelectorEnabledObs"],isBuilderMode:[1,"isBuilderMode"],disableBuilderIcon:[1,"disableBuilderIcon"],hasSubWorkflows:[1,"hasSubWorkflows"],graphsAvailable:[1,"graphsAvailable"],invocationDisplayMap:[1,"invocationDisplayMap"],forceGraphTab:[1,"forceGraphTab"],isViewOnlySession:[1,"isViewOnlySession"],isViewOnlyAppNameMismatch:[1,"isViewOnlyAppNameMismatch"]},outputs:{closePanel:"closePanel",tabChange:"tabChange",sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded",evalCaseSelected:"evalCaseSelected",editEvalCaseRequested:"editEvalCaseRequested",testSelected:"testSelected",evalSetIdSelected:"evalSetIdSelected",returnToSession:"returnToSession",evalNotInstalled:"evalNotInstalled",page:"page",switchToEvent:"switchToEvent",closeSelectedEvent:"closeSelectedEvent",openImageDialog:"openImageDialog",openAddItemDialog:"openAddItemDialog",enterBuilderMode:"enterBuilderMode",showAgentStructureGraph:"showAgentStructureGraph",switchToTraceView:"switchToTraceView",drillDownNodePath:"drillDownNodePath",selectEventById:"selectEventById",jumpToInvocation:"jumpToInvocation"},decls:7,vars:8,consts:[["evalTabContainer",""],[1,"loading-spinner-container"],[1,"tabs-container",3,"hidden"],[1,"resize-handler"],["mode","indeterminate","diameter","50"],["animationDuration","0ms",3,"selectedIndexChange","selectedTabChange","selectedIndex"],["mat-tab-label",""],[3,"traceData"],[3,"eventDataSize","eventDataMap","selectedEventIndex","selectedEvent","traceData","filteredSelectedEvent","renderedEventGraph","rawSvgString","appName","selectedEventGraphPath","llmRequest","llmResponse","hasSubWorkflows","graphsAvailable","invocationDisplayMap","forceGraphTab","isViewOnlySession","isViewOnlyAppNameMismatch"],[1,"empty-state"],[3,"sessionState"],[1,"tab-label"],[3,"switchToEvent","traceData"],[3,"page","closeSelectedEvent","openImageDialog","switchToTraceView","showAgentStructureGraph","drillDownNodePath","selectEventById","jumpToInvocation","eventDataSize","eventDataMap","selectedEventIndex","selectedEvent","traceData","filteredSelectedEvent","renderedEventGraph","rawSvgString","appName","selectedEventGraphPath","llmRequest","llmResponse","hasSubWorkflows","graphsAvailable","invocationDisplayMap","forceGraphTab","isViewOnlySession","isViewOnlyAppNameMismatch"],[3,"artifacts"],[3,"testSelected","appName","sessionId","userId","isViewOnlySession"]],template:function(A,i){if(A&1&&(O(0,kFA,0,0),Ht(1,"async"),ta(2),Ht(3,"async"),O(4,xFA,2,0,"div",1),O(5,YFA,16,13,"div",2),QA(6,"div",3)),A&2){Y(ri(1,3,i.isAlwaysOnSidePanelEnabledObs)===!1?0:-1),u(2);let n=ga(ri(3,5,i.uiStateService.isSessionLoading()));u(2),Y(n?4:-1),u(),Y(i.appName()!=""?5:-1)}},dependencies:[lv,CF,cF,Cv,cv,Z6,Iv,gs,gv,os],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;position:relative}.drawer-header-wrapper[_ngcontent-%COMP%]{display:flex;height:48px;align-items:center;padding-left:20px}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center}.tabs-container[_ngcontent-%COMP%]{width:100%;flex:1;overflow:hidden;display:flex;flex-direction:column}.tab-label[_ngcontent-%COMP%]{font-size:14px}.resize-handler[_ngcontent-%COMP%]{width:6px;border-radius:4px;position:absolute;display:block;top:20px;bottom:20px;right:0;z-index:100;cursor:ew-resize}.resize-handler[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-outline-variant)}.empty-state[_ngcontent-%COMP%]{padding:16px;text-align:center;color:var(--mat-sys-on-surface-variant);font-style:italic}mat-tab-group[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0}mat-tab-group[_ngcontent-%COMP%] .mdc-tab{padding:0 12px;min-width:48px} .mat-mdc-tab-body-wrapper{flex:1;min-height:0} .mat-mdc-tab-body-wrapper .mat-mdc-tab-body-content{overflow-x:hidden}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:6px}.drawer-logo[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.1px}.drawer-header-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.panel-toggle-icon[_ngcontent-%COMP%]{font-size:20px;width:24px;height:24px;color:var(--side-panel-mat-icon-color, #c4c7c5);cursor:pointer;display:flex;align-items:center;justify-content:center}.powered-by-adk[_ngcontent-%COMP%]{font-size:10px;color:var(--side-panel-powered-by-adk-color);text-align:right;margin-top:-5px}.adk-info-icon[_ngcontent-%COMP%]{font-size:14px;color:var(--side-panel-mat-icon-color, #bdc1c6);cursor:pointer;margin-left:4px;vertical-align:middle}.mode-toggle-container[_ngcontent-%COMP%]{display:flex;align-items:center}.build-mode-button[_ngcontent-%COMP%]{margin:0 4px}.app-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}"]})};var HFA=["editInput"];function zFA(t,e){if(t&1){let A=hA();B(0,"button",5),U("click",function(){T(A);let n=p();return J(n.startEdit())}),B(1,"mat-icon"),y(2,"edit"),Q()()}}function PFA(t,e){if(t&1){let A=hA();B(0,"button",6),U("click",function(){T(A);let n=p();return J(n.saveEdit())}),B(1,"mat-icon"),y(2,"check"),Q()(),B(3,"button",7),U("click",function(){T(A);let n=p();return J(n.cancelEdit())}),B(4,"mat-icon"),y(5,"close"),Q()()}}var dv=class t{value="";displayValue="";tooltip="";placeholder="";textClass="";save=new LA;isEditing=!1;draftValue="";editInput;startEdit(){this.draftValue=this.value,this.isEditing=!0,setTimeout(()=>{this.editInput.nativeElement.focus()})}cancelEdit(){this.isEditing=!1,this.draftValue=""}saveEdit(){this.save.emit(this.draftValue),this.isEditing=!1}handleKeydown(e){e.key==="Enter"?this.saveEdit():e.key==="Escape"&&this.cancelEdit()}get effectiveDisplayValue(){return this.displayValue||this.value}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-inline-edit"]],viewQuery:function(A,i){if(A&1&&Jt(HFA,5),A&2){let n;ae(n=re())&&(i.editInput=n.first)}},inputs:{value:"value",displayValue:"displayValue",tooltip:"tooltip",placeholder:"placeholder",textClass:"textClass"},outputs:{save:"save"},decls:6,vars:10,consts:[["editInput",""],[1,"inline-edit-container"],[1,"inline-edit-text-wrapper"],[1,"inline-edit-input",3,"ngModelChange","keydown","readonly","ngClass","matTooltip","ngModel"],["mat-icon-button","","aria-label","Edit",1,"inline-edit-action-button"],["mat-icon-button","","aria-label","Edit",1,"inline-edit-action-button",3,"click"],["mat-icon-button","","aria-label","Save",1,"inline-edit-action-button",3,"click"],["mat-icon-button","","aria-label","Cancel",1,"inline-edit-action-button",3,"click"]],template:function(A,i){A&1&&(B(0,"div",1)(1,"div",2)(2,"input",3,0),U("ngModelChange",function(o){return i.draftValue=o})("keydown",function(o){return i.handleKeydown(o)}),Q()(),O(4,zFA,3,0,"button",4)(5,PFA,6,0),Q()),A&2&&(u(2),RA("readonly",!i.isEditing),H("readonly",!i.isEditing)("ngClass",i.textClass)("matTooltip",i.isEditing?"":i.tooltip)("ngModel",i.isEditing?i.draftValue:i.effectiveDisplayValue),te("placeholder",i.isEditing?i.placeholder:"")("aria-label",i.placeholder)("size",((i.isEditing?i.draftValue:i.effectiveDisplayValue)==null?null:(i.isEditing?i.draftValue:i.effectiveDisplayValue).length)||1),u(2),Y(i.isEditing?5:4))},dependencies:[si,zl,ln,Dn,yn,ko,qi,ji,Tn,Wt,Fa,dn],styles:["[_nghost-%COMP%]{display:block;max-width:100%;min-width:0;width:100%}.inline-edit-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;max-width:100%;min-width:0;box-sizing:border-box}.inline-edit-text-wrapper[_ngcontent-%COMP%]{flex:0 1 auto;min-width:0;display:flex;align-items:center}.inline-edit-input[_ngcontent-%COMP%]{min-width:48px;max-width:100%;padding:2px 6px;margin:-3px -7px;border:1px solid var(--chat-toolbar-session-text-color, #ccc);border-radius:4px;color:var(--chat-toolbar-session-id-color, inherit);font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;background:transparent;field-sizing:content;transition:all .2s ease}.inline-edit-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--primary-color, #1a73e8)}.inline-edit-input.readonly[_ngcontent-%COMP%]{min-width:0;border-color:transparent;cursor:inherit}.inline-edit-input.readonly[_ngcontent-%COMP%]:focus{outline:none;border-color:transparent}.inline-edit-action-button[_ngcontent-%COMP%]{flex-shrink:0;width:28px!important;height:28px!important;padding:0!important;display:flex;align-items:center;justify-content:center}.inline-edit-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;line-height:16px}"]})};var jFA={openPanelTooltip:"Open panel",evalCaseIdLabel:"Eval Case ID",cancelButton:"Cancel",saveButton:"Save",editEvalCaseTooltip:"Edit current eval case",deleteEvalCaseTooltip:"Delete current eval case",sessionIdLabel:"Session",copySessionIdTooltip:"Copy session ID",sessionIdCopiedMessage:"Session ID copied",copySessionIdFailedMessage:"Failed to copy session ID",userIdLabel:"User ID",editUserIdTooltip:"Edit user ID",userIdInputPlaceholder:"Enter user ID",saveUserIdTooltip:"Save user ID",cancelUserIdEditTooltip:"Cancel editing user ID",invalidUserIdMessage:"User ID cannot be empty",loadingSessionLabel:"Loading session...",tokenStreamingLabel:"Token Streaming",moreOptionsTooltip:"More options",createNewSessionTooltip:"Create a new Session",newSessionButton:"New Session",deleteSessionTooltip:"Delete session",exportSessionTooltip:"Export session",importSessionTooltip:"Import session",viewSessionTooltip:"View session",loadingAgentsLabel:"Loading agents, please wait...",welcomeMessage:"Welcome to ADK!",selectAgentMessage:"Select an agent on the left to begin with.",failedToLoadAgentsMessage:"Failed to load agents. To get started, run",errorMessageLabel:"Error message:",noAgentsFoundWarning:"Warning: No agents found in current folder.",cannotEditSessionMessage:"Chat is disabled to prevent changes to the end user's session.",viewSessionReadOnlyMessage:'This is a read-only view of a session file. Use "Import Session" if you want to continue this session.',readOnlyBadgeLabel:"Read-only"},liA=new kA("Chat Messages",{factory:()=>jFA});var qFA=["sideDrawer"],VFA=["drawerSessionTab"],WFA=["appSearchInput"],ZFA=["invChipMenuTrigger"],XFA=["nodeChipMenuTrigger"],$FA=["addMenuTrigger"],ALA=[[["","adk-web-chat-container-top",""]]],eLA=["[adk-web-chat-container-top]"],ciA=()=>[],tLA=(t,e)=>e.metricName;function iLA(t,e){t&1&&sn(0)}function nLA(t,e){if(t&1&&Et(0,iLA,1,0,"ng-container",39),t&2){let A=p();H("ngComponentOutlet",A.logoComponent)}}function oLA(t,e){if(t&1&&(B(0,"span",42),y(1),Q()),t&2){let A=p(2);u(),lA(A.adkVersion())}}function aLA(t,e){if(t&1&&(B(0,"div",48)(1,"div",49)(2,"span",50),y(3,"Version:"),Q(),B(4,"span",51),y(5),Q()(),B(6,"div",49)(7,"span",50),y(8,"Language:"),Q(),B(9,"span",51),y(10),Q()(),B(11,"div",49)(12,"span",50),y(13,"Lang Version:"),Q(),B(14,"span",51),y(15),Q()()()),t&2){let A=p(2);u(5),lA(A.versionInfo().version),u(5),lA(A.versionInfo().language),u(5),lA(A.versionInfo().language_version)}}function rLA(t,e){if(t&1&&(QA(0,"img",40),B(1,"span",41),y(2,"Agent Development Kit"),O(3,oLA,2,1,"span",42),Q(),B(4,"span",43),y(5,"ADK"),Q(),B(6,"div",44)(7,"mat-icon",45),y(8,"info_outline"),Q(),B(9,"div",46)(10,"div",47),y(11),Q(),O(12,aLA,16,3,"div",48),Q()()),t&2){let A=p();u(3),Y(A.adkVersion()?3:-1),u(8),lA(A.sidePanelI18n.disclosureTooltip),u(),Y(A.versionInfo()?12:-1)}}function sLA(t,e){t&1&&(B(0,"mat-icon",19),y(1,"warning"),Q())}function lLA(t,e){if(t&1){let A=hA();B(0,"span",53)(1,"button",55),U("click",function(){T(A);let n=p(2);return J(n.openAgentStructureGraphDialog())}),B(2,"mat-icon"),y(3,"account_tree"),Q()()()}if(t&2){let A=p(2);H("matTooltip",A.graphsAvailable()?"View Agent Structure Graph":"Agent structure graph is not available for this agent"),u(),H("disabled",!A.graphsAvailable())}}function gLA(t,e){if(t&1){let A=hA();QA(0,"div",52),O(1,lLA,4,2,"span",53),B(2,"span",53)(3,"button",54),U("click",function(){T(A);let n=p();return J(n.enterBuilderMode())}),B(4,"mat-icon"),y(5,"edit"),Q()()()}if(t&2){let A=p();u(),Y(A.graphsAvailable()?1:-1),u(),H("matTooltip",A.disableBuilderSwitch?"Editing is not available for this agent because it was not built by the builder":"Edit in Builder Mode"),u(),H("disabled",A.disableBuilderSwitch)}}function cLA(t,e){if(t&1){let A=hA();B(0,"div",56)(1,"mat-icon",61),y(2,"visibility"),Q(),B(3,"span",62),y(4),Q(),B(5,"button",63),U("click",function(){T(A);let n=p(2);return J(n.closeReadonlySession())}),B(6,"mat-icon",64),y(7,"close"),Q()()()}if(t&2){let A=p(2);u(4),ba("",A.readonlySessionType(),": ",A.readonlySessionName())}}function CLA(t,e){if(t&1){let A=hA();B(0,"button",68),U("click",function(){T(A);let n=p(6);return J(n.onNewSessionClick())}),B(1,"mat-icon",17),y(2,"add_comment"),Q(),B(3,"span"),y(4),Q()()}if(t&2){let A=p(6);H("matTooltip",A.i18n.createNewSessionTooltip),u(4),lA(A.i18n.newSessionButton)}}function ILA(t,e){if(t&1){let A=hA();B(0,"button",69),U("click",function(){T(A);let n=p(6);return J(n.onNewSessionClick())}),B(1,"mat-icon",17),y(2,"add_comment"),Q()()}if(t&2){let A=p(6);H("matTooltip",A.i18n.createNewSessionTooltip)}}function dLA(t,e){if(t&1&&(QA(0,"div",52),O(1,CLA,5,2,"button",66)(2,ILA,3,1,"button",67)),t&2){let A=p(5);u(),Y(A.uiEvents().length>0?1:2)}}function BLA(t,e){if(t&1&&O(0,dLA,3,1),t&2){let A=p(4);Y(A.sessionId?0:-1)}}function ELA(t,e){if(t&1&&(ta(0),Ht(1,"async"),O(2,BLA,1,1)),t&2){let A=ri(1,1,p(3).uiStateService.isSessionLoading());u(2),Y(A===!1?2:-1)}}function hLA(t,e){if(t&1){let A=hA();B(0,"div",15)(1,"button",65),U("click",function(){T(A);let n=p(2);return J(n.toggleSessionSelectorDrawer())}),B(2,"mat-icon",17),y(3,"chat"),Q(),B(4,"span",18),y(5),Q(),B(6,"mat-icon",20),y(7,"arrow_drop_down"),Q()(),O(8,ELA,3,3),Q()}if(t&2){let A=p(2);u(5),lA(A.getToolbarSessionId()),u(3),Y(A.evalCase?-1:8)}}function QLA(t,e){if(t&1&&(B(0,"div",56)(1,"span",62),y(2),Q(),B(3,"span",70),y(4),Q()()),t&2){let A=p(3);u(2),lA(A.i18n.evalCaseIdLabel),u(2),lA(A.evalCase.evalId)}}function uLA(t,e){if(t&1){let A=hA();B(0,"button",71),U("click",function(){T(A);let n=p(3);return J(n.cancelEditEvalCase())}),y(1),Q(),B(2,"button",72),U("click",function(){T(A);let n=p(3);return J(n.saveEvalCase())}),y(3),Q()}if(t&2){let A=p(3);u(),ue(" ",A.i18n.cancelButton," "),u(),H("disabled",!A.hasEvalCaseChanged()||A.isEvalCaseEditing()),u(),ue(" ",A.i18n.saveButton," ")}}function fLA(t,e){}function pLA(t,e){if(t&1&&(O(0,QLA,5,2,"div",56),B(1,"div",59),O(2,uLA,4,3)(3,fLA,0,0),Q()),t&2){let A=p(2);Y(A.isViewOnlySession()?-1:0),u(2),Y(A.isEvalEditMode()?2:3)}}function mLA(t,e){}function wLA(t,e){if(t&1&&(B(0,"div",73),y(1),Q()),t&2){let A=p(3);u(),lA(A.i18n.loadingSessionLabel)}}function DLA(t,e){if(t&1&&(B(0,"div",58),ta(1),Ht(2,"async"),O(3,mLA,0,0)(4,wLA,2,1,"div",73),Q()),t&2){let A=ri(2,1,p(2).uiStateService.isSessionLoading());u(3),Y(A===!1?3:4)}}function yLA(t,e){if(t&1){let A=hA();B(0,"button",74),U("click",function(){T(A);let n=p(2);return J(n.themeService.toggleTheme())}),B(1,"mat-icon"),y(2),Q()()}if(t&2){let A=p(2);H("matTooltip",A.themeService.currentTheme()==="dark"?"Switch to Light Mode":"Switch to Dark Mode"),u(2),lA(A.themeService.currentTheme()==="dark"?"light_mode":"dark_mode")}}function vLA(t,e){if(t&1&&(B(0,"div",21),O(1,cLA,8,2,"div",56)(2,hLA,9,2,"div",15),B(3,"div",57),O(4,pLA,4,2)(5,DLA,5,3,"div",58),Q(),B(6,"div",59),ta(7),Ht(8,"async"),O(9,yLA,3,2,"button",60),Q()()),t&2){let A=p();u(),Y(A.isViewOnlySession()?1:2),u(3),Y(A.evalCase?4:5);let i=ri(8,3,A.uiStateService.isSessionLoading());u(5),Y(i===!1?9:-1)}}function bLA(t,e){t&1&&(B(0,"div",84),QA(1,"mat-progress-spinner",85),Q())}function MLA(t,e){t&1&&(B(0,"mat-icon",91),y(1,"check"),Q())}function SLA(t,e){if(t&1){let A=hA();B(0,"button",88),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.selectAppFromDrawer(n))}),B(1,"mat-icon",89),y(2,"robot_2"),Q(),B(3,"span",90),y(4),Q(),O(5,MLA,2,0,"mat-icon",91),Q()}if(t&2){let A=e.$implicit,i=p(3);RA("selected",A===i.appName),u(4),lA(A),u(),Y(A===i.appName?5:-1)}}function kLA(t,e){t&1&&(B(0,"div",87),y(1,"No apps found"),Q())}function xLA(t,e){t&1&&Je(0,SLA,6,4,"button",86,hi,!1,kLA,2,0,"div",87),t&2&&Oe(e)}function _LA(t,e){if(t&1){let A=hA();B(0,"div",75)(1,"span",76),y(2,"Select an App"),Q(),B(3,"div")(4,"button",77),U("click",function(){T(A);let n=p();return J(n.openAddItemDialog())}),B(5,"mat-icon"),y(6,"add"),Q()(),B(7,"button",78),U("click",function(){T(A);let n=p();return J(n.toggleAppSelectorDrawer())}),B(8,"mat-icon"),y(9,"close"),Q()()()(),B(10,"div",79)(11,"mat-form-field",80)(12,"mat-icon",81),y(13,"search"),Q(),B(14,"input",82,3),U("keydown",function(n){T(A);let o=p();return J(o.handleAppSearchKeydown(n))}),Q()()(),B(16,"div",83),U("keydown",function(n){T(A);let o=p();return J(o.handleAppListKeydown(n))}),O(17,bLA,2,0,"div",84),Ht(18,"async"),WI(19,xLA,3,1),Q()}if(t&2){let A,i=p();u(14),H("formControl",i.appDrawerSearchControl),u(3),Y(i.isLoadingApps()?17:(A=ri(18,2,i.filteredDrawerApps$))?19:-1,A)}}function RLA(t,e){if(t&1){let A=hA();B(0,"button",94),U("click",function(){T(A);let n=p(2);return J(n.importSession())}),B(1,"mat-icon"),y(2,"upload"),Q(),B(3,"span"),y(4,"Import"),Q()()}if(t&2){let A=p(2);H("matTooltip",A.i18n.importSessionTooltip)}}function NLA(t,e){if(t&1){let A=hA();B(0,"button",107),U("click",function(){T(A);let n=p(3);return J(n.exportSession())}),B(1,"mat-icon"),y(2,"download"),Q(),B(3,"span"),y(4,"Export"),Q()()}if(t&2){let A=p(3);H("matTooltip",A.i18n.exportSessionTooltip)}}function FLA(t,e){if(t&1){let A=hA();B(0,"button",108),U("click",function(){T(A);let n=p(3);return J(n.deleteSession(n.sessionId))}),B(1,"mat-icon"),y(2,"delete"),Q(),B(3,"span"),y(4,"Delete"),Q()()}if(t&2){let A=p(3);H("matTooltip",A.i18n.deleteSessionTooltip)}}function LLA(t,e){if(t&1){let A=hA();B(0,"div",96)(1,"span",99),y(2,"Current Session"),Q(),B(3,"div",100)(4,"app-inline-edit",101),U("save",function(n){T(A);let o=p(2);return J(o.saveSessionName(n))}),Q()(),B(5,"div",102)(6,"span",103),y(7),Q(),B(8,"button",104),U("click",function(){T(A);let n=p(2);return J(n.copySessionId())}),B(9,"mat-icon"),y(10,"content_copy"),Q()(),O(11,NLA,5,1,"button",105),Ht(12,"async"),O(13,FLA,5,1,"button",106),Ht(14,"async"),Q()()}if(t&2){let A=p(2);u(4),H("value",A.sessionDisplayNameDraft)("displayValue",A.getCurrentSessionDisplayName())("tooltip",A.sessionId),u(2),H("title",A.sessionId),u(),lA(A.sessionId),u(4),Y(ri(12,7,A.isExportSessionEnabledObs)?11:-1),u(2),Y(ri(14,9,A.isDeleteSessionEnabledObs)?13:-1)}}function GLA(t,e){if(t&1){let A=hA();B(0,"div",75)(1,"span",76),y(2,"Select a Session"),Q(),B(3,"div",92),O(4,RLA,5,1,"button",93),Ht(5,"async"),B(6,"button",94),U("click",function(){T(A);let n=p();return J(n.viewSession())}),B(7,"mat-icon"),y(8,"visibility"),Q(),B(9,"span"),y(10,"View"),Q()(),B(11,"button",95),U("click",function(){T(A);let n=p();return J(n.toggleSessionSelectorDrawer())}),B(12,"mat-icon"),y(13,"close"),Q()()()(),O(14,LLA,15,11,"div",96),B(15,"div",97)(16,"app-session-tab",98,4),U("sessionSelected",function(n){T(A);let o=p();return J(o.onSessionSelectedFromDrawer(n))})("sessionReloaded",function(n){T(A);let o=p();return J(o.onSessionReloadedFromDrawer(n))}),Q()()}if(t&2){let A=p();u(4),Y(ri(5,6,A.importSessionEnabledObs)?4:-1),u(2),H("matTooltip",A.i18n.viewSessionTooltip),u(8),Y(A.sessionId?14:-1),u(2),H("userId",A.userId)("appName",A.appName)("sessionId",A.sessionId)}}function KLA(t,e){if(t&1){let A=hA();B(0,"app-side-panel",109),U("jumpToInvocation",function(n){T(A);let o=p();return J(o.handleJumpToInvocation(n))})("closePanel",function(){T(A);let n=p();return J(n.toggleSidePanel())})("tabChange",function(n){T(A);let o=p();return J(o.handleTabChange(n))})("sessionSelected",function(n){T(A);let o=p();return J(o.updateWithSelectedSession(n))})("evalCaseSelected",function(n){T(A);let o=p();return J(o.updateWithSelectedEvalCase(n))})("editEvalCaseRequested",function(n){T(A);let o=p();return J(o.handleEditEvalCaseRequested(n))})("testSelected",function(n){T(A);let o=p();return J(o.updateWithSelectedTest(n.testName,n.events))})("evalSetIdSelected",function(n){T(A);let o=p();return J(o.updateSelectedEvalSetId(n))})("returnToSession",function(n){T(A);let o=p();return J(o.handleReturnToSession(n))})("evalNotInstalled",function(n){T(A);let o=p();return J(o.handleEvalNotInstalled(n))})("page",function(n){T(A);let o=p();return J(o.handlePageEvent(n))})("closeSelectedEvent",function(){T(A);let n=p();return J(n.closeSelectedEvent())})("openImageDialog",function(n){T(A);let o=p();return J(o.openViewImageDialog(n))})("openAddItemDialog",function(){T(A);let n=p();return J(n.openAddItemDialog())})("enterBuilderMode",function(){T(A);let n=p();return J(n.enterBuilderMode())})("showAgentStructureGraph",function(){T(A);let n=p();return J(n.openAgentStructureGraphDialog("event"))})("switchToEvent",function(n){T(A);let o=p();return J(o.selectEvent(n))})("switchToTraceView",function(){T(A);let n=p();return J(n.switchToTraceView())})("drillDownNodePath",function(n){T(A);let o=p();return J(o.onEventTabDrillDown(n))})("selectEventById",function(n){T(A);let o=p();return J(o.selectEvent(n))}),Q()}if(t&2){let A=p();H("isApplicationSelectorEnabledObs",A.isApplicationSelectorEnabledObs)("showSidePanel",A.showSidePanel)("appName",A.appName)("userId",A.userId)("sessionId",A.sessionId)("isViewOnlySession",A.isViewOnlySession())("isViewOnlyAppNameMismatch",A.isViewOnlyAppNameMismatch())("traceData",A.traceData)("eventData",A.eventData)("currentSessionState",A.currentSessionState)("artifacts",A.artifacts)("selectedEvent",A.selectedEvent)("selectedEventIndex",A.selectedEventIndex)("renderedEventGraph",A.renderedEventGraph)("rawSvgString",A.rawSvgString)("selectedEventGraphPath",A.selectedEventGraphPath)("llmRequest",A.llmRequest)("llmResponse",A.llmResponse)("disableBuilderIcon",A.disableBuilderSwitch)("hasSubWorkflows",A.hasSubWorkflows)("graphsAvailable",A.graphsAvailable())("invocationDisplayMap",A.invocationDisplayMap())("forceGraphTab",A.autoSelectLatestEvent)}}function ULA(t,e){if(t&1){let A=hA();B(0,"app-builder-tabs",110),U("exitBuilderMode",function(){T(A);let n=p();return J(n.exitBuilderMode())})("closePanel",function(){T(A);let n=p();return J(n.toggleSidePanel())}),Q(),QA(1,"div",111)}if(t&2){let A=p();H("appNameInput",A.appName)}}function TLA(t,e){if(t&1){let A=hA();B(0,"div",36)(1,"div",112)(2,"button",113),U("click",function(){T(A);let n=p();return J(n.saveAgentBuilder())}),B(3,"mat-icon"),y(4,"check"),Q()(),B(5,"button",114),U("click",function(){T(A);let n=p();return J(n.exitBuilderMode())}),B(6,"mat-icon"),y(7,"close"),Q()(),B(8,"button",115),U("click",function(){T(A);let n=p();return J(n.toggleBuilderAssistant())}),B(9,"mat-icon"),y(10,"assistant"),Q()()(),B(11,"app-canvas",116),U("toggleSidePanelRequest",function(){T(A);let n=p();return J(n.toggleSidePanel())})("builderAssistantCloseRequest",function(){T(A);let n=p();return J(n.toggleBuilderAssistant())}),Q()()}if(t&2){let A=p();u(8),RA("active",A.showBuilderAssistant),u(3),H("showSidePanel",A.showSidePanel)("showBuilderAssistant",A.showBuilderAssistant)("appNameInput",A.appName)}}function JLA(t,e){if(t&1&&(B(0,"div",118)(1,"span"),y(2),Q()()),t&2){let A=p(3);u(2),lA(A.i18n.loadingAgentsLabel)}}function OLA(t,e){if(t&1&&(B(0,"span"),y(1),QA(2,"br"),y(3),Q()),t&2){let A=p(4);u(),lA(A.i18n.welcomeMessage),u(2),ue(" ",A.i18n.selectAgentMessage)}}function YLA(t,e){if(t&1&&(y(0),QA(1,"br"),B(2,"pre",120),y(3),Q()),t&2){let A=p(5);ue(" ",A.i18n.errorMessageLabel," "),u(3),lA(A.loadingError())}}function HLA(t,e){if(t&1&&(B(0,"pre",119),y(1),Q()),t&2){let A=p(5);u(),lA(A.i18n.noAgentsFoundWarning)}}function zLA(t,e){if(t&1&&(B(0,"div"),y(1),B(2,"pre"),y(3,"adk web"),Q(),y(4," in the folder that contains the agents."),QA(5,"br"),O(6,YLA,4,2)(7,HLA,2,1,"pre",119),Q()),t&2){let A=p(4);u(),ue(" ",A.i18n.failedToLoadAgentsMessage," "),u(5),Y(A.loadingError()?6:7)}}function PLA(t,e){if(t&1&&(B(0,"div",118),O(1,OLA,4,2,"span"),Ht(2,"async"),WI(3,zLA,8,2,"div"),Q()),t&2){let A=p(3);u(),Y((ri(2,1,A.apps$)||Rg(3,ciA)).length>0?1:3)}}function jLA(t,e){if(t&1&&(O(0,JLA,3,1,"div",118),Ht(1,"async"),WI(2,PLA,4,4,"div",118)),t&2){let A=p(2);Y(A.isLoadingApps()?0:ri(1,1,A.isApplicationSelectorEnabledObs)?2:-1)}}function qLA(t,e){if(t&1){let A=hA();B(0,"div",143,8),U("click",function(n){return n.stopPropagation()}),B(2,"span",144),y(3),Q(),B(4,"button",145),U("click",function(n){T(A);let o=p(3);return J(o.removeInvocationIdFilter(n))}),B(5,"mat-icon"),y(6,"close"),Q()()()}if(t&2){p();let A=Qi(18),i=p(2);H("matMenuTriggerFor",A)("matTooltip",i.invocationIdFilter()?"Invocation: "+(i.invocationDisplayMap().get(i.invocationIdFilter())||i.invocationIdFilter()):"Filter events by a specific invocation"),u(2),H("title",i.invocationIdFilter()?i.invocationDisplayMap().get(i.invocationIdFilter())||i.invocationIdFilter():"Invocation"),u(),lA(i.invocationIdFilter()?i.invocationDisplayMap().get(i.invocationIdFilter())||i.invocationIdFilter():"Invocation")}}function VLA(t,e){if(t&1){let A=hA();B(0,"div",143,9),U("click",function(n){return n.stopPropagation()}),B(2,"span",62),y(3,"Node"),Q(),B(4,"button",145),U("click",function(n){T(A);let o=p(3);return J(o.removeNodePathFilter(n))}),B(5,"mat-icon"),y(6,"close"),Q()()()}if(t&2){p();let A=Qi(22),i=p(2);H("matMenuTriggerFor",A)("matTooltip",i.nodePathFilter()?"Node: "+i.nodePathFilter():"Filter events generated by a specific node")}}function WLA(t,e){if(t&1){let A=hA();B(0,"div",146),U("click",function(n){return n.stopPropagation()}),B(1,"span",62),y(2,"Final"),Q(),B(3,"button",145),U("click",function(n){return T(A),p(3).toggleHideIntermediateEvents(),J(n.stopPropagation())}),B(4,"mat-icon"),y(5,"close"),Q()()()}}function ZLA(t,e){if(t&1&&(B(0,"div",147,10),U("click",function(i){return i.stopPropagation()}),B(2,"mat-icon"),y(3,"add"),Q(),B(4,"span"),y(5,"Filter"),Q()()),t&2){p();let A=Qi(13);H("matMenuTriggerFor",A)}}function XLA(t,e){if(t&1){let A=hA();B(0,"div",148),U("click",function(n){T(A);let o=p(3);return J(o.clearAllFilters(n))}),B(1,"mat-icon"),y(2,"clear_all"),Q(),B(3,"span"),y(4,"Clear"),Q()()}}function $LA(t,e){if(t&1){let A=hA();B(0,"button",149),U("click",function(){T(A);let n=p(3);return J(n.addInvocationIdFilter())}),y(1,"Invocation"),Q()}}function AGA(t,e){if(t&1){let A=hA();B(0,"button",150),U("click",function(){T(A);let n=p(3);return J(n.addNodePathFilter())}),y(1,"Node"),Q()}}function eGA(t,e){if(t&1){let A=hA();B(0,"button",151),U("click",function(){T(A);let n=p(3);return J(n.toggleHideIntermediateEvents())}),y(1,"Final"),Q()}}function tGA(t,e){if(t&1){let A=hA();B(0,"button",152),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.setInvocationIdFilter(n))}),B(1,"mat-icon",153),y(2,"check"),Q(),y(3),Q()}if(t&2){let A=e.$implicit,i=p(3);H("matTooltip",A),u(),ut("visibility",i.invocationIdFilter()===A?"visible":"hidden"),u(2),ue(" ",i.invocationDisplayMap().get(A)||A," ")}}function iGA(t,e){if(t&1){let A=hA();B(0,"button",154),U("click",function(){let n=T(A).$implicit,o=p(3);return J(o.setNodePathFilter(n))}),B(1,"mat-icon",153),y(2,"check"),Q(),y(3),Q()}if(t&2){let A=e.$implicit,i=p(3);u(),ut("visibility",i.nodePathFilter()===A?"visible":"hidden"),u(2),ue(" ",A," ")}}function nGA(t,e){if(t&1){let A=hA();B(0,"button",155),U("click",function(){T(A);let n=p(3);return J(n.isSideBySide.set(!n.isSideBySide()))}),B(1,"mat-icon",156),y(2),Q(),B(3,"span",157),y(4,"Compare"),Q()()}if(t&2){let A=p(3);ut("color",A.isSideBySide()?"var(--mat-sys-primary)":"var(--mat-sys-on-surface-variant)"),u(2),lA(A.isSideBySide()?"check_circle":"radio_button_unchecked")}}function oGA(t,e){if(t&1){let A=hA();B(0,"button",158),U("click",function(){T(A);let n=p(3);return J(n.toggleSse())}),B(1,"mat-icon",156),y(2),Q(),B(3,"span",157),y(4,"Streaming"),Q()()}if(t&2){let A=p(3);ut("color",A.useSse()?"var(--mat-sys-primary)":"var(--mat-sys-on-surface-variant)"),u(2),lA(A.useSse()?"check_circle":"radio_button_unchecked")}}function aGA(t,e){if(t&1){let A=hA();B(0,"app-chat-panel",159),Ht(1,"async"),Di("userInputChange",function(n){T(A);let o=p(3);return di(o.userInput,n)||(o.userInput=n),J(n)}),U("toggleHideIntermediateEvents",function(){T(A);let n=p(3);return J(n.toggleHideIntermediateEvents())})("toggleSse",function(){T(A);let n=p(3);return J(n.toggleSse())})("clickEvent",function(n){T(A);let o=p(3);return J(o.clickEvent(n))})("handleKeydown",function(n){T(A);let o=p(3);return J(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){T(A);let o=p(3);return J(o.cancelEditMessage(n))})("saveEditMessage",function(n){T(A);let o=p(3);return J(o.saveEditMessage(n))})("openViewImageDialog",function(n){T(A);let o=p(3);return J(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){T(A);let o=p(3);return J(o.openBase64InNewTab(n.data,n.mimeType))})("fileSelect",function(n){T(A);let o=p(3);return J(o.onFileSelect(n))})("removeFile",function(n){T(A);let o=p(3);return J(o.removeFile(n))})("removeStateUpdate",function(){T(A);let n=p(3);return J(n.removeStateUpdate())})("sendMessage",function(n){T(A);let o=p(3);return J(o.handleChatInput(n))})("updateState",function(){T(A);let n=p(3);return J(n.updateState())})("toggleAudioRecording",function(n){T(A);let o=p(3);return J(o.toggleAudioRecording(n))})("toggleVideoRecording",function(){T(A);let n=p(3);return J(n.toggleVideoRecording())})("longRunningResponseComplete",function(n){T(A);let o=p(3);return J(o.sendMessage(n))}),Q()}if(t&2){let A=p(3);H("appName",A.appName)("agentReadme",A.agentReadme),wi("userInput",A.userInput),H("hideIntermediateEvents",A.hideIntermediateEvents())("uiEvents",A.filteredUiEvents())("traceData",A.traceData)("isTokenStreamingEnabled",ri(1,22,A.isTokenStreamingEnabledObs)??!1)("useSse",A.useSse())("isChatMode",!0)("selectedFiles",A.selectedFiles)("updatedSessionState",A.updatedSessionState())("agentGraphData",A.agentGraphData())("selectedMessageIndex",A.selectedMessageIndex)("isAudioRecording",A.isAudioRecording)("micVolume",A.micVolume())("isVideoRecording",A.isVideoRecording)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)("invocationDisplayMap",A.invocationDisplayMap())("viewMode",A.viewMode())("shouldShowEvent",A.shouldShowEventFn)}}function rGA(t,e){if(t&1){let A=hA();B(0,"app-chat-panel",160),Ht(1,"async"),Di("userInputChange",function(n){T(A);let o=p(3);return di(o.userInput,n)||(o.userInput=n),J(n)})("userEditEvalCaseMessageChange",function(n){T(A);let o=p(3);return di(o.userEditEvalCaseMessage,n)||(o.userEditEvalCaseMessage=n),J(n)}),U("clickEvent",function(n){T(A);let o=p(3);return J(o.clickEvent(n))})("handleKeydown",function(n){T(A);let o=p(3);return J(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){T(A);let o=p(3);return J(o.cancelEditMessage(n))})("saveEditMessage",function(n){T(A);let o=p(3);return J(o.saveEditMessage(n))})("openViewImageDialog",function(n){T(A);let o=p(3);return J(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){T(A);let o=p(3);return J(o.openBase64InNewTab(n.data,n.mimeType))})("editEvalCaseMessage",function(n){T(A);let o=p(3);return J(o.editEvalCaseMessage(n))})("deleteEvalCaseMessage",function(n){T(A);let o=p(3);return J(o.deleteEvalCaseMessage(n.message,n.index))})("editFunctionArgs",function(n){T(A);let o=p(3);return J(o.editFunctionArgs(n))}),Q()}if(t&2){let A=p(3);H("appName",A.appName)("agentReadme",A.agentReadme)("hideIntermediateEvents",A.hideIntermediateEvents())("uiEvents",A.filteredUiEvents())("isChatMode",!1)("evalCase",A.evalCase)("isEvalEditMode",A.isEvalEditMode())("isEvalCaseEditing",A.isEvalCaseEditing())("isEditFunctionArgsEnabled",ri(1,19,A.isEditFunctionArgsEnabledObs)??!1),wi("userInput",A.userInput)("userEditEvalCaseMessage",A.userEditEvalCaseMessage),H("agentGraphData",A.agentGraphData())("selectedMessageIndex",A.selectedMessageIndex)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)("invocationDisplayMap",A.invocationDisplayMap())("viewMode",A.viewMode())("shouldShowEvent",A.shouldShowEventFn)}}function sGA(t,e){if(t&1&&(B(0,"div",174),y(1),Q()),t&2){p();let A=zn(40);u(),ue(" ",A)}}function lGA(t,e){if(t&1&&(B(0,"div",166)(1,"span",167),y(2),Ht(3,"formatMetricName"),Q(),B(4,"div",168)(5,"span",169),y(6),Ht(7,"number"),Q(),B(8,"span",170),y(9),Ht(10,"number"),Q()(),B(11,"div",171)(12,"div",172),y(13),Ht(14,"formatMetricName"),Q(),B(15,"div",173),y(16),Q(),B(17,"div",48)(18,"div",49)(19,"span",50),y(20,"Actual:"),Q(),B(21,"span",51),y(22),Ht(23,"number"),Q()(),B(24,"div",49)(25,"span",50),y(26,"Threshold:"),Q(),B(27,"span",51),y(28),Ht(29,"number"),Q()(),B(30,"div",49)(31,"span",50),y(32,"Min:"),Q(),B(33,"span",51),y(34),Q()(),B(35,"div",49)(36,"span",50),y(37,"Max:"),Q(),B(38,"span",51),y(39),Q()()(),ta(40),O(41,sGA,2,1,"div",174),Q()()),t&2){let A=e.$implicit,i=p(6);ut("border",A.evalStatus==1?"1px solid #2e7d32":"1px solid var(--mat-sys-error)"),u(2),lA(ri(3,16,A.metricName)),u(3),ut("color",A.evalStatus==1?"#2e7d32":"var(--mat-sys-error)"),u(),ue(" ",A.score!=null?T0(7,18,A.score,"1.2-2"):"?"," "),u(3),ue(" / ",T0(10,21,A.threshold,"1.2-2")," "),u(4),lA(ri(14,24,A.metricName)),u(3),lA(A.metricName),u(5),ut("color",A.evalStatus==1?"#2e7d32":"var(--mat-sys-error)"),u(),lA(A.score!=null?T0(23,26,A.score,"1.2-2"):"?"),u(6),lA(T0(29,29,A.threshold,"1.2-2")),u(6),lA(i.getMetricMin(A.metricName)),u(5),lA(i.getMetricMax(A.metricName)),u();let n=ga(i.getMetricDescription(A.metricName));u(),Y(n?41:-1)}}function gGA(t,e){if(t&1&&(B(0,"div",164),Je(1,lGA,42,33,"div",165,tLA),Q()),t&2){p();let A=zn(0);u(),Oe(A.overallEvalMetricResults)}}function cGA(t,e){if(t&1&&(ta(0),B(1,"div",161),O(2,gGA,3,0,"div",164),Q()),t&2){let A=ga(p(4).evalCaseResult());u(2),Y(A.overallEvalMetricResults!=null&&A.overallEvalMetricResults.length?2:-1)}}function CGA(t,e){if(t&1){let A=hA();B(0,"div",162)(1,"div",175)(2,"div",176),y(3,"Expected"),Q(),QA(4,"app-chat-panel",177),Q(),B(5,"div",175)(6,"div",176),y(7,"Actual"),Q(),B(8,"app-chat-panel",178),Ht(9,"async"),Ht(10,"async"),U("toggleHideIntermediateEvents",function(){T(A);let n=p(4);return J(n.toggleHideIntermediateEvents())})("toggleSse",function(){T(A);let n=p(4);return J(n.toggleSse())}),Di("userInputChange",function(n){T(A);let o=p(4);return di(o.userInput,n)||(o.userInput=n),J(n)})("userEditEvalCaseMessageChange",function(n){T(A);let o=p(4);return di(o.userEditEvalCaseMessage,n)||(o.userEditEvalCaseMessage=n),J(n)}),U("clickEvent",function(n){T(A);let o=p(4);return J(o.clickEvent(n))})("handleKeydown",function(n){T(A);let o=p(4);return J(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){T(A);let o=p(4);return J(o.cancelEditMessage(n))})("saveEditMessage",function(n){T(A);let o=p(4);return J(o.saveEditMessage(n))})("openViewImageDialog",function(n){T(A);let o=p(4);return J(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){T(A);let o=p(4);return J(o.openBase64InNewTab(n.data,n.mimeType))})("editEvalCaseMessage",function(n){T(A);let o=p(4);return J(o.editEvalCaseMessage(n))})("deleteEvalCaseMessage",function(n){T(A);let o=p(4);return J(o.deleteEvalCaseMessage(n.message,n.index))})("editFunctionArgs",function(n){T(A);let o=p(4);return J(o.editFunctionArgs(n))})("fileSelect",function(n){T(A);let o=p(4);return J(o.onFileSelect(n))})("removeFile",function(n){T(A);let o=p(4);return J(o.removeFile(n))})("removeStateUpdate",function(){T(A);let n=p(4);return J(n.removeStateUpdate())})("sendMessage",function(n){T(A);let o=p(4);return J(o.handleChatInput(n))})("updateState",function(){T(A);let n=p(4);return J(n.updateState())})("toggleAudioRecording",function(n){T(A);let o=p(4);return J(o.toggleAudioRecording(n))})("toggleVideoRecording",function(){T(A);let n=p(4);return J(n.toggleVideoRecording())})("longRunningResponseComplete",function(n){T(A);let o=p(4);return J(o.sendMessage(n))}),Q()()()}if(t&2){let A=p(4);u(4),H("appName",A.appName)("agentReadme",A.agentReadme)("hideIntermediateEvents",A.hideIntermediateEvents())("uiEvents",A.filteredExpectedUiEvents())("isChatMode",!1)("evalCase",A.evalCase)("isEvalEditMode",!1)("isEvalCaseEditing",!1)("isEditFunctionArgsEnabled",!1)("userInput","")("selectedFiles",Rg(54,ciA))("updatedSessionState",null)("agentGraphData",A.agentGraphData())("selectedMessageIndex",-1)("isAudioRecording",!1)("micVolume",0)("isVideoRecording",!1)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)("invocationDisplayMap",A.invocationDisplayMap())("viewMode",A.viewMode())("shouldShowEvent",A.shouldShowEventFn),u(4),H("appName",A.appName)("agentReadme",A.agentReadme)("hideIntermediateEvents",A.hideIntermediateEvents())("uiEvents",A.filteredUiEvents())("traceData",A.traceData)("isTokenStreamingEnabled",ri(9,50,A.isTokenStreamingEnabledObs)??!1)("useSse",A.useSse())("isChatMode",!1)("evalCase",A.evalCase)("isEvalEditMode",A.isEvalEditMode())("isEvalCaseEditing",A.isEvalCaseEditing())("isEditFunctionArgsEnabled",ri(10,52,A.isEditFunctionArgsEnabledObs)??!1),wi("userInput",A.userInput)("userEditEvalCaseMessage",A.userEditEvalCaseMessage),H("selectedFiles",A.selectedFiles)("updatedSessionState",A.updatedSessionState())("agentGraphData",A.agentGraphData())("selectedMessageIndex",A.selectedMessageIndex)("isAudioRecording",A.isAudioRecording)("micVolume",A.micVolume())("isVideoRecording",A.isVideoRecording)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)("invocationDisplayMap",A.invocationDisplayMap())("viewMode",A.viewMode())("shouldShowEvent",A.shouldShowEventFn)}}function IGA(t,e){if(t&1&&QA(0,"app-chat-panel",163),t&2){let A=p(4);H("appName",A.appName)("agentReadme",A.agentReadme)("hideIntermediateEvents",A.hideIntermediateEvents())("uiEvents",A.filteredUiEvents())("traceData",A.traceData)("isChatMode",!1)("evalCase",A.evalCase)("agentGraphData",A.agentGraphData())("selectedMessageIndex",A.selectedMessageIndex)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)("invocationDisplayMap",A.invocationDisplayMap())("viewMode",A.viewMode())("shouldShowEvent",A.shouldShowEventFn)}}function dGA(t,e){if(t&1&&(O(0,cGA,3,2,"div",161),O(1,CGA,11,55,"div",162)(2,IGA,1,15,"app-chat-panel",163)),t&2){let A=p(3);Y(A.evalCaseResult()?0:-1),u(),Y(A.isSideBySide()?1:2)}}function BGA(t,e){t&1&&(B(0,"div",142)(1,"mat-icon",179),y(2,"insert_drive_file"),Q(),B(3,"h3",180),y(4,"File View"),Q(),B(5,"p",181),y(6,"File content lost on refresh. Please re-upload the file to view or use it."),Q()())}function EGA(t,e){if(t&1){let A=hA();B(0,"div",121)(1,"mat-button-toggle-group",122),U("change",function(n){T(A);let o=p(2);return J(o.onViewModeChange(n.value))}),B(2,"mat-button-toggle",123),y(3,"Events"),Q(),B(4,"mat-button-toggle",124),y(5,"Traces"),Q()(),B(6,"div",125),U("click",function(n){T(A);let o=p(2);return J(o.openAddFilterMenu(n))}),O(7,qLA,7,4,"div",126),O(8,VLA,7,2,"div",126),O(9,WLA,6,0,"div",127),O(10,ZLA,6,1,"div",128),O(11,XLA,5,0,"div",129),Q(),B(12,"mat-menu",130,5),O(14,$LA,2,0,"button",131),O(15,AGA,2,0,"button",132),O(16,eGA,2,0,"button",133),Q(),B(17,"mat-menu",134,6),U("closed",function(){T(A);let n=p(2);return J(n.onInvocationMenuClosed())}),Je(19,tGA,4,4,"button",135,hi),Q(),B(21,"mat-menu",134,7),U("closed",function(){T(A);let n=p(2);return J(n.onNodePathMenuClosed())}),Je(23,iGA,4,3,"button",136,hi),Q(),QA(25,"div",137),O(26,nGA,5,3,"button",138),O(27,oGA,5,3,"button",139),Ht(28,"async"),Q(),O(29,aGA,2,24,"app-chat-panel",140)(30,rGA,2,21,"app-chat-panel",141)(31,dGA,3,2)(32,BGA,7,0,"div",142)}if(t&2){let A,i=p(2);u(),H("value",i.viewMode()),u(6),Y(i.invocationIdFilterActive()?7:-1),u(),Y(i.nodePathFilterActive()?8:-1),u(),Y(i.hideIntermediateEvents()?9:-1),u(),Y(!i.invocationIdFilterActive()||!i.nodePathFilterActive()||!i.hideIntermediateEvents()?10:-1),u(),Y(i.invocationIdFilterActive()||i.nodePathFilterActive()||i.hideIntermediateEvents()?11:-1),u(3),Y(i.invocationIdFilterActive()?-1:14),u(),Y(i.nodePathFilterActive()?-1:15),u(),Y(i.hideIntermediateEvents()?-1:16),u(3),Oe(i.invocationIdOptions()),u(4),Oe(i.nodePathOptions()),u(3),Y(i.chatType()==="eval-result"?26:-1),u(),Y(ri(28,12,i.isTokenStreamingEnabledObs)&&i.canEditSession()?27:-1),u(2),Y((A=i.chatType())==="session"?29:A==="eval-case"?30:A==="eval-result"?31:A==="file"?32:-1)}}function hGA(t,e){if(t&1&&(B(0,"div",37),Ve(1),B(2,"mat-card",117),O(3,jLA,3,3),O(4,EGA,33,14),Q()()),t&2){let A=p();u(2),RA("no-side-panel",!A.showSidePanel),u(),Y(A.selectedAppControl.value?-1:3),u(),Y(A.appName!=""?4:-1)}}function QGA(t,e){if(t&1){let A=hA();B(0,"app-agent-structure-graph-dialog",182),U("close",function(){T(A);let n=p();return J(n.showAgentStructureOverlay=!1)}),Q()}if(t&2){let A=p();H("appName",A.appName)("preloadedAppData",A.agentGraphData())("preloadedLightGraphSvg",A.agentStructureOverlayMode==="event"?A.eventGraphSvgLight:A.sessionGraphSvgLight)("preloadedDarkGraphSvg",A.agentStructureOverlayMode==="event"?A.eventGraphSvgDark:A.sessionGraphSvgDark)("startPath",A.agentStructureOverlayMode==="event"?A.selectedEventGraphPath:"")}}var uGA="root_agent",Bv="q",fGA="hideSidePanel",dF="",BF="",giA="application/json+a2ui";function EF(t){for(t=t.replace(/-/g,"+").replace(/_/g,"/");t.length%4!==0;)t+="=";return t}var hF=class t extends b1{nextPageLabel="Next Event";previousPageLabel="Previous Event";firstPageLabel="First Event";lastPageLabel="Last Event";getRangeLabel=(e,A,i)=>i===0?`Event 0 of ${i}`:(i=Math.max(i,0),`Event ${e*A+1} of ${i}`);static \u0275fac=(()=>{let e;return function(i){return(e||(e=bi(t)))(i||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac})},pGA="Restarting bidirectional streaming is not currently supported. Please refresh the page or start a new session.",Ev=class t{i18n=w(liA);sidePanelI18n=w(pQ);_snackBar=w(h2);activatedRoute=w(Vs);agentService=w($s);artifactService=w(TB);changeDetectorRef=w(wt);dialog=w(Or);document=w(ti);downloadService=w(JB);evalService=w(t0);eventService=w(o6);featureFlagService=w(yr);graphService=w(OB);localFileService=w(a6);location=w(g6);renderer=w(Pi);router=w(ls);safeValuesService=w(Cs);testsService=w(u2);sessionService=w(Al);streamChatService=w(s6);webSocketService=w(zB);audioRecordingService=w(YB);audioPlayingService=w(HB);stringToColorService=w(Q2);traceService=w(Ag);uiStateService=w(tg);agentBuilderService=w(e0);themeService=w(eg);logoComponent=w(PB,{optional:!0});chatPanel=So(hQ);canvasComponent=So.required(cQ);sideDrawer=So.required("sideDrawer");sidePanel=So.required(mQ);drawerSessionTab=So("drawerSessionTab");evalTab=So(_c);appSearchInput=So("appSearchInput");canChat=pe(()=>this.chatType()==="session");isEvalCaseEditing=bA(!1);hasEvalCaseChanged=bA(!1);isEvalEditMode=bA(!1);isBuilderMode=bA(!1);chatType=bA("session");currentEvalCaseId=null;currentEvalTimestamp=null;videoElement;currentMessage="";uiEvents=bA([]);invocationDisplayMap=pe(()=>{let e=new Map,A=1,i="";for(let n of this.uiEvents()){if(n.role==="user")if(n.text)i=n.text;else if(n.event?.content?.parts?.length){let o=n.event.content.parts.find(a=>a.text);o&&o.text&&(i=o.text)}else i="User Message";if(n.event?.invocationId){let o=n.event.invocationId;if(!e.has(o)){let a=i||"User Message";a.length>50&&(a=a.substring(0,47)+"..."),e.set(o,`#${A} (${a})`),A++}}}return e});artifacts=[];userInput="";userEditEvalCaseMessage="";userId="user";appName="";sessionId="";sessionIdOfLoadedMessages="";evalCase=null;evalCaseResult=bA(null);metricsInfo=this.evalService.metricsInfo;updatedEvalCase=null;adkVersion=bA("");versionInfo=bA(null);evalSetId="";isAudioRecording=!1;micVolume=this.audioRecordingService.volumeLevel;isVideoRecording=!1;longRunningEvents=[];functionCallEventId="";redirectUri=Dr.getBaseUrlWithoutPath();showSidePanel=window.localStorage.getItem("adk-side-panel-visible")!=="false";showBuilderAssistant=!0;showAppSelectorDrawer=!1;showSessionSelectorDrawer=!1;useSse=bA(window.localStorage.getItem("adk-use-sse")==="true");currentSessionState={};root_agent=uGA;updatedSessionState=bA(null);canEditSession=bA(!0);isViewOnlySession=bA(!1);isViewOnlyAppNameMismatch=bA(!1);isLoadedAppUnavailable=bA(!1);unavailableAppName=bA("");readonlySessionType=bA("");readonlySessionName=bA("");isSideBySide=bA(!1);expectedUiEvents=bA([]);viewMode=bA(localStorage.getItem("chat-view-mode")||"events");invocationIdFilterActive=bA(!1);nodePathFilterActive=bA(!1);invocationIdFilter=bA("");nodePathFilter=bA("");invocationIdOptions=pe(()=>{let e=new Set;for(let A of this.uiEvents())A.event?.invocationId&&e.add(A.event.invocationId);return Array.from(e)});nodePathOptions=pe(()=>{let e=new Set;for(let A of this.uiEvents()){let i=A.bareNodePath;i&&e.add(i)}return Array.from(e)});invChipMenuTrigger=So("invChipMenuTrigger");nodeChipMenuTrigger=So("nodeChipMenuTrigger");addMenuTrigger=So("addMenuTrigger");openAddFilterMenu(e){e.stopPropagation(),this.addMenuTrigger()?.openMenu()}addInvocationIdFilter(){this.invocationIdFilterActive.set(!0),setTimeout(()=>{this.invChipMenuTrigger()?.openMenu()})}addNodePathFilter(){this.nodePathFilterActive.set(!0),setTimeout(()=>{this.nodeChipMenuTrigger()?.openMenu()})}removeInvocationIdFilter(e){e.stopPropagation(),this.invocationIdFilterActive.set(!1),this.invocationIdFilter.set("")}removeNodePathFilter(e){e.stopPropagation(),this.nodePathFilterActive.set(!1),this.nodePathFilter.set("")}setInvocationIdFilter(e){this.invocationIdFilter.set(e)}setNodePathFilter(e){this.nodePathFilter.set(e)}onInvocationMenuClosed(){this.invocationIdFilter()||this.invocationIdFilterActive.set(!1)}onNodePathMenuClosed(){this.nodePathFilter()||this.nodePathFilterActive.set(!1)}clearAllFilters(e){e.stopPropagation(),this.invocationIdFilterActive()&&(this.invocationIdFilterActive.set(!1),this.invocationIdFilter.set("")),this.nodePathFilterActive()&&(this.nodePathFilterActive.set(!1),this.nodePathFilter.set("")),this.hideIntermediateEvents()&&this.toggleHideIntermediateEvents()}shouldShowEvent(e){let A=this.invocationIdFilter();if(A&&!(e.event?.invocationId||"").includes(A))return!1;let i=this.nodePathFilter();if(i&&!(e.bareNodePath||"").includes(i))return!1;if(!this.hideIntermediateEvents()||e.role==="user")return!0;if(e.event?.content!==void 0){let n=e.event.content.parts||[];if(n.length>0&&n.every(a=>a.functionCall||a.functionResponse)){if(n.some(r=>{let s=r.functionCall?.id||r.functionResponse?.id;return s&&e.event?.longRunningToolIds?.includes(s)}))return!0}else return!0}if(e.event?.output!==void 0){let n=e.event?.nodeInfo,o=!1,a=n?.outputFor;if(Array.isArray(a)?o=a.some(r=>!r.includes("/")):typeof a=="string"?o=!a.includes("/"):n?.path&&(o=!n.path.includes("/")),o)return!0}return!1}shouldShowEventFn=this.shouldShowEvent.bind(this);getMetricTooltip(e,A,i){let n=this.metricsInfo().find(g=>g.metricName===e),o=n?.description||"",a=n?.metricValueInfo?.interval?.minValue??"?",r=n?.metricValueInfo?.interval?.maxValue??"?",s=A!=null?parseFloat(A).toFixed(2):"?",l=i!=null?parseFloat(i).toFixed(2):"?";return`${o?o+" | ":""}Actual: ${s} | Threshold: ${l} | Min: ${a} | Max: ${r}`}getMetricDescription(e){return this.metricsInfo().find(i=>i.metricName===e)?.description||""}getMetricMin(e){let i=this.metricsInfo().find(n=>n.metricName===e)?.metricValueInfo?.interval?.minValue;return i!=null?i.toFixed(2):"?"}getMetricMax(e){let i=this.metricsInfo().find(n=>n.metricName===e)?.metricValueInfo?.interval?.maxValue;return i!=null?i.toFixed(2):"?"}getVersionTooltip(){let e=this.versionInfo();return e?`Version: ${e.version} | Language: ${e.language} | Language Version: ${e.language_version}`:""}getMergedTooltip(){let e=this.sidePanelI18n.disclosureTooltip||"",A=this.getVersionTooltip();return A?`${e} | ${A}`:e}filteredUiEvents=pe(()=>this.uiEvents().filter(e=>this.shouldShowEvent(e)));filteredExpectedUiEvents=pe(()=>this.expectedUiEvents().filter(e=>this.shouldShowEvent(e)));onViewModeChange(e){this.viewMode.set(e);try{localStorage.setItem("chat-view-mode",e)}catch(A){}}originalSessionId="";hideIntermediateEvents=bA(window.localStorage.getItem("adk-hide-intermediate-events")==="true");toggleHideIntermediateEvents(){let e=!this.hideIntermediateEvents();this.hideIntermediateEvents.set(e),window.localStorage.setItem("adk-hide-intermediate-events",String(e))}sessionHasUsedBidi=new Set;eventData=new Map;traceData=[];renderedEventGraph;rawSvgString=null;agentGraphData=bA(null);sessionGraphSvgLight={};sessionGraphSvgDark={};dynamicGraphDot={};agentReadme="";graphsAvailable=bA(!0);get hasSubWorkflows(){return Object.keys(this.sessionGraphSvgLight).length>1}selectedEvent=void 0;selectedEventIndex=void 0;selectedMessageIndex=void 0;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";getMediaTypeFromMimetype=X6;selectedFiles=[];MediaType=aC;selectedAppControl=new Os("",{nonNullable:!0});appDrawerSearchControl=new Os("",{nonNullable:!0});openBase64InNewTab(e,A){this.safeValuesService.openBase64InNewTab(e,A)}isLoadingApps=bA(!1);loadingError=bA("");apps$=oe([]).pipe(Ii(()=>{this.isLoadingApps.set(!0),this.selectedAppControl.disable()}),Ei(()=>this.agentService.listApps().pipe(Po(e=>(this.loadingError.set(e.message),oe(void 0))))),uo(1),Ii(e=>{this.isLoadingApps.set(!1),this.selectedAppControl.enable(),e?.length==1&&this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:{app:e[0]},queryParamsHandling:"merge"})}),Gs());filteredDrawerApps$=this.apps$.pipe(Ei(e=>Qr([oe(e),this.appDrawerSearchControl.valueChanges.pipe(Sn(""))])),we(([e,A])=>{if(!e||!A||A.trim()==="")return e;let i=A.toLowerCase().trim();return e.filter(n=>n.toLowerCase().includes(i))}));importSessionEnabledObs=this.featureFlagService.isImportSessionEnabled();isEditFunctionArgsEnabledObs=this.featureFlagService.isEditFunctionArgsEnabled();isSessionUrlEnabledObs=this.featureFlagService.isSessionUrlEnabled();isApplicationSelectorEnabledObs=this.featureFlagService.isApplicationSelectorEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isExportSessionEnabledObs=this.featureFlagService.isExportSessionEnabled();isEventFilteringEnabled=Ar(this.featureFlagService.isEventFilteringEnabled());isApplicationSelectorEnabled=Ar(this.featureFlagService.isApplicationSelectorEnabled());isDeleteSessionEnabledObs=this.featureFlagService.isDeleteSessionEnabled();isUserIdOnToolbarEnabledObs=this.featureFlagService.isUserIdOnToolbarEnabled();isDeveloperUiDisclaimerEnabledObs=this.featureFlagService.isDeveloperUiDisclaimerEnabled();disableBuilderSwitch=!1;autoSelectLatestEvent=!1;constructor(){Ao(()=>{this.themeService.currentTheme()&&this.updateRenderedGraph()})}ngOnInit(){if(this.syncSelectedAppFromUrl(),this.updateSelectedAppUrl(),this.hideSidePanelIfNeeded(),this.agentService.getVersion().subscribe(i=>{this.adkVersion.set(i.version||""),this.versionInfo.set(i)}),Qr([this.agentService.getApp(),this.activatedRoute.queryParams]).pipe(gt(([i,n])=>!!i&&!!n[Bv]),$n(),we(([,i])=>i[Bv])).subscribe(i=>{setTimeout(()=>{this.userInput=i})}),this.streamChatService.onStreamClose().subscribe(i=>{let n=`Please check server log for full details: +`+i;this.openSnackBar(n,"OK")}),this.webSocketService.getMessages().subscribe(i=>{if(i)try{let n=JSON.parse(i);(n.interrupted||n.inputTranscription!==void 0&&n.partial)&&this.audioPlayingService.stopAudio(),this.appendEventRow(n),this.changeDetectorRef.detectChanges()}catch(n){}}),new URL(window.location.href).searchParams.has("code")){let i=window.location.href;window.opener?.postMessage({authResponseUrl:i},window.origin),window.close()}this.agentService.getApp().subscribe(i=>{this.appName=i,this.evalService.metricsInfo.set([])}),this.traceService.selectedTraceRow$.subscribe(i=>{i&&(this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0,this.showSidePanel||(this.showSidePanel=!0,window.localStorage.setItem("adk-side-panel-visible","true"),this.sideDrawer()?.open()),this.changeDetectorRef.detectChanges())}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe($n()).subscribe(i=>{i&&(this.uiStateService.onNewMessagesLoaded().subscribe(n=>{this.populateMessages(n.items,!0,!n.isBackground),this.loadTraceData()}),this.uiStateService.onNewMessagesLoadingFailed().subscribe(n=>{this.openSnackBar(n.message,"OK")}))})}get sessionTab(){return this.drawerSessionTab()}switchToTraceView(){this.onViewModeChange("traces")}ngAfterViewInit(){this.showSidePanel&&this.sideDrawer()?.open(),this.isApplicationSelectorEnabled()||this.loadSessionByUrlOrReset()}selectApp(e){if(this.isLoadedAppUnavailable.set(!1),e!=this.appName){let A=!this.appName;this.agentService.setApp(e),A?this.loadSessionByUrlOrReset():this.createSessionAndReset()}}loadSessionByUrlOrReset(){this.isSessionUrlEnabledObs.subscribe(e=>{let A=this.activatedRoute.snapshot.queryParams,i=A.session,n=A.userId,o=A.evalCase,a=A.evalResult,r=A.file;if(n&&(this.userId=n),o){this.chatType.set("eval-case");let s=o.split("/");if(s.length===2){let l=s[0],g=s[1];this.evalSetId=l,this.evalService.getEvalCase(this.appName,l,g).subscribe(C=>{C&&(this.updateWithSelectedEvalCase(C),setTimeout(()=>{let I=this.sidePanel();I.switchToEvalTab(),I.selectEvalCase(l,C)},600))})}return}if(a){this.chatType.set("eval-result");let s=a.split("/");if(console.log("loadSessionByUrlOrReset evalResultUrl parts:",s),s.length===3){let l=s[0],g=s[1],C=s[2];this.evalSetId=l;let I=`${this.appName}_${l}_${C}`;console.log("loadSessionByUrlOrReset runId:",I),this.evalService.getEvalResult(this.appName,I).subscribe(d=>{if(console.log("loadSessionByUrlOrReset runResult:",d),d){let h=d.evalCaseResults?.find(E=>E.evalId===g);if(console.log("loadSessionByUrlOrReset evalCaseResult:",h),h){let E=h.sessionId;this.evalService.getEvalCase(this.appName,l,g).subscribe(f=>{this.sessionService.getSession(this.userId,this.appName,E).subscribe(m=>{this.addEvalCaseResultToEvents(m,h);let v={id:m?.id??"",appName:m?.appName??"",userId:m?.userId??"",state:m?.state??[],events:m?.events??[],isEvalResult:!0,evalCase:f,evalCaseResult:h,timestamp:C};this.updateWithSelectedSession(v),setTimeout(()=>{let k=this.sidePanel();k.switchToEvalTab(),k.selectEvalResult(l,C,f)},600)})})}}})}return}if(r){this.chatType.set("file");return}if(!e||!i){this.chatType.set("session"),this.createSessionAndReset();return}i&&(this.chatType.set("session"),this.sessionId=i,this.loadSession(i,!0))})}loadSession(e,A=!1){this.uiStateService.setIsSessionLoading(!0),this.isViewOnlySession.set(!1),this.isViewOnlyAppNameMismatch.set(!1),Qr([this.sessionService.getSession(this.userId,this.appName,e).pipe(Po(i=>(A&&(this.openSnackBar("Cannot find specified session. Creating a new one.",void 0,3e3),this.createSessionAndReset()),oe(null)))),this.featureFlagService.isInfinityMessageScrollingEnabled()]).pipe($n()).subscribe(([i,n])=>{this.uiStateService.setIsSessionLoading(!1),i&&(n&&i.id&&this.uiStateService.lazyLoadMessages(i.id,{pageSize:100,pageToken:""}).pipe($n()).subscribe(),this.updateWithSelectedSession(i))})}hideSidePanelIfNeeded(){this.activatedRoute.queryParams.pipe(gt(e=>e[fGA]==="true"),uo(1)).subscribe(()=>{this.showSidePanel=!1,this.sideDrawer()?.close()})}createSessionAndReset(){this.resetToNewSession(),this.chatType.set("session"),this.isViewOnlySession.set(!1),this.isViewOnlyAppNameMismatch.set(!1),this.canEditSession.set(!0),this.chatPanel()?.canEditSession.set(!0),this.eventData=new Map,this.uiEvents.set([]),this.artifacts=[],this.userInput="",this.longRunningEvents=[],this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0,this.traceService.resetTraceService()}resetToNewSession(){this.sessionId="",this.currentSessionState={},this.sessionTab?.refreshSession(),this.clearSessionUrl()}createSession(){this.uiStateService.setIsSessionListLoading(!0),this.sessionService.createSession(this.userId,this.appName).subscribe(e=>{this.currentSessionState=e.state,this.sessionId=e.id??"",this.sessionTab?.refreshSession(),this.sessionTab?.reloadSession(this.sessionId),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()})},()=>{this.uiStateService.setIsSessionListLoading(!1)})}handleChatInput(e){return lt(this,null,function*(){if(e.preventDefault(),!this.userInput.trim()&&this.selectedFiles.length<=0||e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;let A={role:"user",parts:yield this.getUserMessageParts()};this.userInput="",this.selectedFiles=[];let i=this.router.parseUrl(this.location.path());i.queryParams[Bv]&&(delete i.queryParams[Bv],this.location.replaceState(i.toString())),yield this.sendMessage(A)})}ensureSessionActive(e){return lt(this,null,function*(){if(this.sessionId)return!0;try{let A="";e?.parts&&e.parts[0]?.text&&(A=e.parts[0].text,A.length>50&&(A=A.substring(0,47)+"..."));let i=A?{__session_metadata__:{displayName:A}}:void 0,n=yield J3(this.sessionService.createSession(this.userId,this.appName,i));return this.currentSessionState=n.state||i||{},this.sessionId=n.id??"",this.sessionTab?.refreshSession(),this.sessionTab?.reloadSession(this.sessionId),this.drawerSessionTab()?.refreshSession(),this.drawerSessionTab()?.reloadSession(this.sessionId),this.isSessionUrlEnabledObs.pipe($n()).subscribe(o=>{o&&this.updateSelectedSessionUrl()}),!0}catch(A){return this.openSnackBar("Failed to create session","OK"),!1}})}sendMessage(e){return lt(this,null,function*(){if(!(yield this.ensureSessionActive(e)))return;let i=e.functionCallEventId;i&&delete e.functionCallEventId;let n=`user_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,o={id:n,author:e.role||"user",content:e},a=this.buildUiEventFromEvent(o);this.uiEvents.update(s=>[...s,a]),setTimeout(()=>this.changeDetectorRef.detectChanges(),0),this.eventData.set(n,o),this.eventData=new Map(this.eventData);let r={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:e,streaming:this.useSse(),stateDelta:this.updatedSessionState()};i&&(r.functionCallEventId=i),this.submitAgentRunRequest(r),this.changeDetectorRef.detectChanges()})}submitAgentRunRequest(e){this.autoSelectLatestEvent=!0,this.agentService.runSse(e).subscribe({next:A=>lt(this,null,function*(){if(A.error){this.openSnackBar(A.error,"OK");return}this.appendEventRow(A),this.autoSelectLatestEvent&&A.id&&this.selectEvent(A.id,void 0,!1),A.actions&&(this.processActionArtifact(A),this.processActionStateDelta(A)),this.changeDetectorRef.detectChanges()}),error:A=>{console.error("Send message error:",A),this.openSnackBar(A,"OK")},complete:()=>{this.updatedSessionState()&&(this.currentSessionState=this.updatedSessionState(),this.updatedSessionState.set(null)),this.featureFlagService.isSessionReloadOnNewMessageEnabled().pipe($n()).subscribe(A=>{A&&this.sessionTab?.reloadSession(this.sessionId)}),this.loadTraceData()}})}appendEventRow(e,A=!1){if(e.inputTranscription!==void 0?e.author="user":e.outputTranscription!==void 0&&(e.author="bot"),e.errorMessage&&e.id&&!this.eventData.has(e.id)&&(this.eventData.set(e.id,e),this.eventData=new Map(this.eventData)),e.id&&!this.eventData.has(e.id)&&(this.eventData.set(e.id,e),this.eventData=new Map(this.eventData)),this.traceService.setEventData(this.eventData),e.partial)this.uiEvents.update(i=>{if(i.length>0){let o=i.length-1,a=i[o],r=!!(a.event?.inputTranscription||a.event?.outputTranscription),s=!!(e.inputTranscription||e.outputTranscription);if(a.event?.partial&&a.role===(e.author==="user"?"user":"bot")&&r===s){let l=this.mergePartialEvent(a,e),g=[...i];return g[o]=l,g}}let n=this.buildUiEventFromEvent(e,A);return A?[n,...i]:[...i,n]});else{let i=this.buildUiEventFromEvent(e,A);this.uiEvents.update(n=>{let o=n.findIndex(a=>a.event?.id===e.id&&e.id);if(o<0&&n.length>0){let a=e.inputTranscription!==void 0,r=e.outputTranscription!==void 0,s=e.content?.parts?.some(l=>l.thought);if(a||r||s)if(A)for(let l=0;lC.thought))){o=l;break}}}else for(let l=n.length-1;l>=0;l--){let g=n[l].event;if(g?.partial){if(a&&g.inputTranscription!==void 0){o=l;break}if(r&&g.outputTranscription!==void 0){o=l;break}if(s&&(n[l].thought||g.content?.parts?.some(C=>C.thought))){o=l;break}}}else{let l=A?0:n.length-1,g=n[l];if(g.event?.partial){let C=!!(g.event?.inputTranscription||g.event?.outputTranscription),I=!!(e.inputTranscription||e.outputTranscription);C===I&&(o=l)}}}if(o>=0){let a=[...n];return a[o]=i,a}else return A?[i,...n]:[...n,i]})}if(e.actions?.artifactDelta)for(let i in e.actions.artifactDelta)e.actions.artifactDelta.hasOwnProperty(i)&&this.renderArtifact(i,e.actions.artifactDelta[i],A)}mergePartialEvent(e,A){let i=new UB(Ye(gA({},e),{event:A})),n=A.content?.parts||[];if(this.isEventA2aResponse(A)&&(n=this.combineA2uiDataParts(n)),n=this.combineTextParts(n),n.forEach(o=>{o.text!==void 0&&o.text!==null?(i.text=(i.text||"")+o.text,o.thought&&(i.thought=!0,i.text=this.processThoughtText(i.text||""))):this.processPartIntoMessage(o,A,i)}),A.inputTranscription){let o=e.event?.inputTranscription?.text||"";i.event.inputTranscription={text:o+(A.inputTranscription.text||"")}}if(A.outputTranscription){let o=e.event?.outputTranscription?.text||"";i.event.outputTranscription={text:o+(A.outputTranscription.text||"")}}return i}getUserMessageParts(){return lt(this,null,function*(){let e=[];if(this.userInput.trim()&&e.push({text:`${this.userInput}`}),this.selectedFiles.length>0)for(let A of this.selectedFiles)e.push(yield this.localFileService.createMessagePartFromFile(A.file));return e})}processActionArtifact(e){e.actions&&e.actions.artifactDelta&&Object.keys(e.actions.artifactDelta).length>0&&(this.storeEvents(null,e),this.storeMessage(null,e,"bot"))}processActionStateDelta(e){e.actions&&e.actions.stateDelta&&Object.keys(e.actions.stateDelta).length>0&&(this.currentSessionState=gA(gA({},this.currentSessionState||{}),e.actions.stateDelta))}combineTextParts(e){let A=[],i;for(let n of e)n.text&&!n.thought?i?i.text+=n.text:(i={text:n.text},A.push(i)):(i=void 0,A.push(n));return A}isEventA2aResponse(e){return!!e?.customMetadata?.["a2a:response"]}isA2aDataPart(e){if(!e.inlineData||e.inlineData.mimeType!=="text/plain")return!1;let A=atob(EF(e.inlineData.data));return A.startsWith(dF)&&A.endsWith(BF)}isA2uiDataPart(e){let A=this.extractA2aDataPartJson(e);return A&&A.kind==="data"&&A.metadata?.mimeType===giA}extractA2aDataPartJson(e){if(!this.isA2aDataPart(e))return null;let A=atob(EF(e.inlineData.data)),i=A.substring(dF.length,A.length-BF.length),n;try{n=JSON.parse(i)}catch(o){return null}return n}combineA2uiDataParts(e){let A=[],i=[],n;for(let o of e)this.isA2uiDataPart(o)?(i.push(this.extractA2aDataPartJson(o)),n||(n={inlineData:{mimeType:"text/plain",data:o.inlineData.data}},A.push(n))):A.push(o);if(n?.inlineData){let a=dF+JSON.stringify({kind:"data",metadata:{mimeType:giA},data:i})+BF;n.inlineData.data=btoa(a)}return A}processA2uiPartIntoMessage(e){let A={};return e.a2ui.forEach(i=>{i.data.beginRendering?A.beginRendering=i.data:i.data.surfaceUpdate?A.surfaceUpdate=i.data:i.data.dataModelUpdate&&(A.dataModelUpdate=i.data)}),A}updateRedirectUri(e,A){try{let i=new URL(e);return i.searchParams.set("redirect_uri",A),i.toString()}catch(i){return console.warn("Failed to update redirect URI: ",i),e}}storeMessage(e,A,i,n,o,a=!1){if(A?.longRunningToolIds&&A.longRunningToolIds.length>0){let s=this.longRunningEvents.length;this.getAsyncFunctionsFromParts(A.longRunningToolIds,A.content.parts,A.invocationId),this.functionCallEventId=A.id;for(let l=s;l{this.sendOAuthResponse(g,d,this.redirectUri)}).catch(d=>{console.error("OAuth Error:",d)});break}}}if(A?.actions&&A.actions.artifactDelta)for(let s in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifactDelta[s],a);let r={role:i,evalStatus:A?.evalStatus,failedMetric:A?.failedMetric,evalScore:A?.evalScore,evalThreshold:A?.evalThreshold,actualInvocationToolUses:A?.actualInvocationToolUses,expectedInvocationToolUses:A?.expectedInvocationToolUses,actualFinalResponse:A?.actualFinalResponse,expectedFinalResponse:A?.expectedFinalResponse,invocationIndex:n!==void 0?n:void 0,finalResponsePartIndex:o?.finalResponsePartIndex!==void 0?o.finalResponsePartIndex:void 0,toolUseIndex:o?.toolUseIndex!==void 0?o.toolUseIndex:void 0};if(e){if(e.inlineData){let s=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);r.inlineData={displayName:e.inlineData.displayName,data:s,mimeType:e.inlineData.mimeType}}else if(e.a2ui)r.a2uiData=this.processA2uiPartIntoMessage(e);else if(e.text)r.text=e.text,r.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(r.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),r.event=A;else if(e.functionCall){let s=A?.longRunningToolIds?.includes(e.functionCall.id),l=gA(gA({},e.functionCall),s&&{isLongRunning:!0,invocationId:A.invocationId,functionCallEventId:A.id,needsResponse:!0,responseStatus:"pending",userResponse:""});r.functionCalls=[l],r.event=A}else if(e.functionResponse)r.functionResponses=[e.functionResponse],r.event=A;else if(e.executableCode)r.executableCode=e.executableCode;else if(e.codeExecutionResult&&(r.codeExecutionResult=e.codeExecutionResult,A.actions&&A.actions.artifact_delta))for(let s in A.actions.artifact_delta)A.actions.artifact_delta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifact_delta[s],a)}e&&Object.keys(e).length>0&&(a?this.uiEvents.update(s=>[r,...s]):this.insertOrUpdateMessage(r))}insertOrUpdateMessage(e){this.uiEvents.update(A=>{if(this.useSse()&&e.text&&e.event.id&&e.role==="bot"&&A.length>0){let i=A.length-1,n=A[i];if(n.event.id===e.event.id&&n.role==="bot"){let o=[...A];return o[i]=e,o}}return[...A,e]})}formatBase64Data(e,A){let i=EF(e);return`data:${A};base64,${i}`}processPartIntoMessage(e,A,i){if(e)if(A&&(i.event=A,A.invocationIndex!==void 0&&(i.invocationIndex=A.invocationIndex),A.toolUseIndex!==void 0&&(i.toolUseIndex=A.toolUseIndex),A.finalResponsePartIndex!==void 0&&(i.finalResponsePartIndex=A.finalResponsePartIndex)),e.text)i.text=(i.text||"")+e.text,i.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(i.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),A?.id&&(i.event=A);else if(e.inlineData){let n=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType),o=X6(e.inlineData.mimeType);i.inlineData={displayName:e.inlineData.displayName,data:n,mimeType:e.inlineData.mimeType,mediaType:o},i.role==="user"&&A?.id&&(i.event=A)}else if(e.functionCall){i.functionCalls||(i.functionCalls=[]);let n=A?.longRunningToolIds?.includes(e.functionCall.id),o=e.functionCall;n&&(o=Ye(gA({},e.functionCall),{isLongRunning:!0,invocationId:A.invocationId,functionCallEventId:A.id,needsResponse:!0,responseStatus:e.functionCall.responseStatus||"pending",userResponse:e.functionCall.userResponse||""}));let a=i.functionCalls.findIndex(r=>r.id===e.functionCall.id);a>=0?i.functionCalls[a]=gA(gA({},i.functionCalls[a]),o):i.functionCalls.push(o),A?.id&&(i.event=A)}else e.functionResponse?(i.functionResponses||(i.functionResponses=[]),i.functionResponses.push(e.functionResponse),A?.id&&(i.event=A)):e.executableCode?i.executableCode=e.executableCode:e.codeExecutionResult?i.codeExecutionResult=e.codeExecutionResult:e.a2ui&&(i.a2uiData=this.processA2uiPartIntoMessage(e))}handleArtifactFetchFailure(e,A,i){this.openSnackBar("Failed to fetch artifact data","OK"),e.error={errorMessage:"Failed to fetch artifact data"},this.changeDetectorRef.detectChanges(),this.artifacts=this.artifacts.filter(n=>n.id!==A||n.versionId!==i)}renderArtifact(e,A,i=!1){if(this.artifacts.some(r=>r.id===e&&r.versionId===A))return;let o=new UB({role:"bot",event:{id:"artifact-"+e},inlineData:{data:"",mimeType:"image/png"}});i?this.uiEvents.update(r=>[o,...r]):this.insertOrUpdateMessage(o);let a={id:e,versionId:A,data:"",mimeType:"image/png",mediaType:"image"};this.artifacts=[...this.artifacts,a],this.artifactService.getArtifactVersion(this.userId,this.appName,this.sessionId,e,A).subscribe({next:r=>{let{mimeType:s,data:l}=r.inlineData??{};if(!s||!l){this.handleArtifactFetchFailure(o,e,A);return}let g=this.formatBase64Data(l,s),C=X6(s),I={name:this.createDefaultArtifactName(s),data:g,mimeType:s,mediaType:C};o.inlineData=I,this.changeDetectorRef.detectChanges(),this.artifacts=this.artifacts.map(d=>d.id===e&&d.versionId===A?{id:e,versionId:A,data:g,mimeType:s,mediaType:C}:d)},error:r=>{this.handleArtifactFetchFailure(o,e,A)}})}storeEvents(e,A){let i="";e==null&&A.actions.artifactDelta?i+="eventAction: artifact":e&&(e.text?i+="text:"+e.text:e.functionCall?i+="functionCall:"+e.functionCall.name:e.functionResponse?i+="functionResponse:"+e.functionResponse.name:e.executableCode?i+="executableCode:"+e.executableCode.code.slice(0,10):e.codeExecutionResult?i+="codeExecutionResult:"+e.codeExecutionResult.outcome:e.errorMessage&&(i+="errorMessage:"+e.errorMessage)),A.title=i,this.eventData.set(A.id,A),this.eventData=new Map(this.eventData)}sendOAuthResponse(e,A,i){this.longRunningEvents.pop();var n=structuredClone(e.args.authConfig);n.exchangedAuthCredential.oauth2.authResponseUri=A,n.exchangedAuthCredential.oauth2.redirectUri=i;let o={role:"user",parts:[{functionResponse:{id:e.id,name:e.name,response:n}}],functionCallEventId:this.functionCallEventId};this.sendMessage(o)}clickEvent(e){let A=this.uiEvents()[e],i=A.event.id;if(i){if(this.selectedMessageIndex===e){this.sideDrawer()?.open(),this.showSidePanel=!0,window.localStorage.setItem("adk-side-panel-visible","true");return}if(A.role==="user"){this.selectedEvent=this.eventData.get(i),this.selectedEventIndex=this.getIndexOfKeyInMap(i),this.selectedMessageIndex=e,this.llmRequest=void 0,this.llmResponse=void 0,this.sideDrawer()?.open(),this.showSidePanel=!0,window.localStorage.setItem("adk-side-panel-visible","true"),this.updateRenderedGraph(),this.viewMode()!=="events"&&this.onViewModeChange("events");return}this.sideDrawer()?.open(),this.showSidePanel=!0,window.localStorage.setItem("adk-side-panel-visible","true"),this.selectEvent(i,e)}}handleJumpToInvocation(e){let A=this.uiEvents(),i=-1,n=-1;for(let o=0;o{this.chatPanel()?.scrollToSelectedMessage(i)},100))}ngOnDestroy(){this.streamChatService.closeStream()}onAppSelection(e){this.isAudioRecording&&(this.stopAudioRecording(),this.isAudioRecording=!1),this.isVideoRecording&&(this.stopVideoRecording(),this.isVideoRecording=!1),this.evalTab()?.resetEvalResults(),this.traceData=[]}toggleAudioRecording(e){return lt(this,null,function*(){this.isAudioRecording?this.stopAudioRecording():yield this.startAudioRecording(e)})}startAudioRecording(e){return lt(this,null,function*(){if(this.sessionId&&this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(pGA,"OK");return}(yield this.ensureSessionActive())&&(this.isAudioRecording=!0,this.streamChatService.startAudioChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId,flags:e}),this.sessionHasUsedBidi.add(this.sessionId))})}stopAudioRecording(){this.audioPlayingService.stopAudio(),this.streamChatService.stopAudioChat(),this.isAudioRecording=!1,this.isVideoRecording&&this.stopVideoRecording()}toggleVideoRecording(){this.isVideoRecording?this.stopVideoRecording():this.startVideoRecording()}startVideoRecording(){let e=this.chatPanel()?.videoContainer;e&&(this.isVideoRecording=!0,this.streamChatService.startVideoStreaming(e))}stopVideoRecording(){let e=this.chatPanel()?.videoContainer;e&&(this.streamChatService.stopVideoStreaming(e),this.isVideoRecording=!1)}getAsyncFunctionsFromParts(e,A,i){for(let n of A)n.functionCall&&e.includes(n.functionCall.id)&&this.longRunningEvents.push({function:n.functionCall,invocationId:i})}openOAuthPopup(e){return new Promise((A,i)=>{if(!this.safeValuesService.windowOpen(window,e,"oauthPopup","width=600,height=700")){i("Popup blocked!");return}let o=a=>{if(a.origin!==window.location.origin)return;let{authResponseUrl:r}=a.data;r?(A(r),window.removeEventListener("message",o)):console.log("OAuth failed",a)};window.addEventListener("message",o)})}toggleSidePanel(){this.showSidePanel?(this.sideDrawer()?.close(),this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0):this.sideDrawer()?.open(),this.showSidePanel=!this.showSidePanel,window.localStorage.setItem("adk-side-panel-visible",this.showSidePanel.toString())}toggleAppSelectorDrawer(){this.showSessionSelectorDrawer=!1,this.showAppSelectorDrawer=!this.showAppSelectorDrawer,this.showAppSelectorDrawer&&this.appDrawerSearchControl.setValue("")}onSelectorDrawerOpened(){this.showAppSelectorDrawer&&this.appSearchInput()?.nativeElement.focus()}handleAppSearchKeydown(e){if(e.key==="ArrowDown"){e.preventDefault(),e.stopPropagation();let A=this.document.querySelector(".app-selector-list .app-selector-item");A&&A.focus()}}handleAppListKeydown(e){if(e.key!=="ArrowDown"&&e.key!=="ArrowUp")return;e.stopPropagation();let A=Array.from(this.document.querySelectorAll(".app-selector-list .app-selector-item")),i=A.indexOf(this.document.activeElement);if(i>-1){if(e.preventDefault(),e.key==="ArrowDown"){let n=i+1;n=0?A[n].focus():this.appSearchInput()?.nativeElement.focus()}}}onAppSelectorDrawerClosed(){this.showAppSelectorDrawer=!1}toggleSessionSelectorDrawer(){this.showAppSelectorDrawer=!1,this.showSessionSelectorDrawer=!this.showSessionSelectorDrawer}onSessionSelectorDrawerClosed(){this.showSessionSelectorDrawer=!1}onSelectorDrawerClosed(){this.showAppSelectorDrawer=!1,this.showSessionSelectorDrawer=!1}onSessionSelectedFromDrawer(e){this.showSessionSelectorDrawer=!1,this.loadSession(e)}onSessionReloadedFromDrawer(e){this.loadSession(e)}selectAppFromDrawer(e){this.selectedAppControl.setValue(e),this.showAppSelectorDrawer=!1}handleTabChange(e){this.canChat()||(this.resetEditEvalCaseVars(),this.handleReturnToSession(!0))}handleReturnToSession(e){this.sessionTab?.getSession(this.sessionId),this.evalTab()?.resetEvalCase(),this.chatType.set("session")}handleEvalNotInstalled(e){e&&this.openSnackBar(e,"OK")}resetEventsAndMessages({keepMessages:e}={}){e||(this.eventData.clear(),this.uiEvents.set([]),this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0),this.artifacts=[]}loadTraceData(){this.sessionId&&(this.uiStateService.setIsEventRequestResponseLoading(!0),this.eventService.getTrace(this.sessionId).pipe($n(),Po(e=>(console.error("[DEBUG] getTrace error:",e),oe([])))).subscribe(e=>{this.traceData=e,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.uiEvents()),this.selectedEvent&&this.populateLlmRequestResponse(),this.uiStateService.setIsEventRequestResponseLoading(!1),this.changeDetectorRef.detectChanges()}),this.changeDetectorRef.detectChanges())}buildUiEventFromEvent(e,A=!1){let i=this.isEventA2aResponse(e),n=i?this.combineA2uiDataParts(e.content?.parts):e.content?.parts||[],o=A?[...n].reverse():n,a=e.author==="user"?"user":"bot",r=new UB({role:a,event:e});return(e.errorCode||e.errorMessage)&&(r.error={errorCode:e.errorCode,errorMessage:e.errorMessage}),e.inputTranscription!==void 0&&typeof e.inputTranscription=="string"&&(r.event.inputTranscription={text:e.inputTranscription}),e.outputTranscription!==void 0&&typeof e.outputTranscription=="string"&&(r.event.outputTranscription={text:e.outputTranscription}),o.forEach(s=>{a==="bot"&&i&&this.isA2uiDataPart(s)&&(s={a2ui:this.extractA2aDataPartJson(s).data}),this.processPartIntoMessage(s,e,r)}),r}populateMessages(e,A=!1,i=!1){this.resetEventsAndMessages({keepMessages:i&&this.sessionIdOfLoadedMessages===this.sessionId}),e.forEach(n=>{this.appendEventRow(n,A)}),this.sessionIdOfLoadedMessages=this.sessionId}restorePendingLongRunningCalls(){let e=this.uiEvents(),A=new Set;this.uiEvents().forEach(i=>{i.functionResponses&&i.functionResponses.forEach(n=>{n.id&&A.add(n.id)})}),this.uiEvents().forEach(i=>{i.functionCalls&&i.functionCalls.forEach(n=>{let o=i.event.id?this.eventData.get(i.event.id):null;(n.isLongRunning||o?.longRunningToolIds?.includes(n.id))&&!A.has(n.id)&&(n.isLongRunning=!0,n.invocationId=o?.invocationId,n.functionCallEventId=i.event.id||"",n.needsResponse=!0,n.responseStatus="pending",n.userResponse=n.userResponse||"")})})}updateWithSelectedSession(e){if(!(!e||!e.id)){if(this.traceService.resetTraceService(),this.traceData=[],this.sessionId=e.id,this.currentSessionState=e.state||{},this.evalCase=null,this.resetEventsAndMessages(),e.isEvalResult){this.isViewOnlySession.set(!0),this.readonlySessionType.set("Eval Result");let A=e.evalCase?.evalId,i=e.timestamp;this.currentEvalCaseId=A,this.currentEvalTimestamp=i;let n=i;if(i){let o=Number(i);isNaN(o)||(n=new Date(o*1e3).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0}))}this.readonlySessionName.set(A&&n?`${n} > ${A}`:e.id),this.canEditSession.set(!1),this.chatPanel()?.canEditSession.set(!1)}else this.isViewOnlySession.set(!1);e.evalCase?this.expectedUiEvents.set(this.buildUiEventsFromEvalCase(e.evalCase)):this.expectedUiEvents.set([]),e.evalCaseResult?this.evalCaseResult.set(e.evalCaseResult):this.evalCaseResult.set(null),e.isEvalResult?this.chatType.set("eval-result"):(this.chatType.set("session"),this.isSideBySide.set(!1)),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()}),e.events&&e.state&&(e.events.forEach(A=>{if(this.appendEventRow(A,!1),A.author!=="user"&&A.actions?.artifactDelta)for(let n in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(n)&&this.renderArtifact(n,A.actions.artifactDelta[n])}),this.restorePendingLongRunningCalls()),this.changeDetectorRef.detectChanges(),this.loadTraceData(),e.isEvalResult||this.sessionService.canEdit(this.userId,e).pipe($n(),Po(()=>oe(!0))).subscribe(A=>{this.chatPanel()?.canEditSession.set(A),this.canEditSession.set(A)}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe($n()).subscribe(A=>{A||this.populateMessages(e.events||[]),this.loadTraceData()})}}formatToolUses(e){if(!e||!Array.isArray(e))return[];let A=[];for(let i of e)A.push({name:i.name,args:i.args});return A}addEvalCaseResultToEvents(e,A){let i=A.evalMetricResultPerInvocation,n=-1;if(i)for(let o=0;o{this.appendEventRow(i,!1)}),this.canEditSession.set(!1),this.chatPanel()?.canEditSession.set(!1),this.isViewOnlySession.set(!0),this.changeDetectorRef.detectChanges()}buildUiEventsFromEvalCase(e){let A=this.uiEvents(),i=this.eventData,n=this.chatType(),o=this.isViewOnlySession(),a=this.readonlySessionType(),r=this.readonlySessionName();this.uiEvents.set([]),this.eventData=new Map,this.updateWithSelectedEvalCase(e);let s=this.uiEvents();return this.uiEvents.set(A),this.eventData=i,this.chatType.set(n),this.isViewOnlySession.set(o),this.readonlySessionType.set(a),this.readonlySessionName.set(r),s}updateWithSelectedEvalCase(e){if(this.evalCase=e,this.chatType.set("eval-case"),this.isViewOnlySession.set(!0),this.readonlySessionType.set("Eval Case"),this.readonlySessionName.set(e.evalId),this.chatType.set("eval-case"),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()}),this.resetEventsAndMessages(),e.events&&e.events.length>0)for(let A of e.events)this.appendEventRow(A,!1);else{e.events=[];let A=0;for(let i of e.conversation){if(i.userContent?.parts&&e.events.push({author:"user",content:i.userContent,invocationIndex:A}),i.intermediateData?.invocationEvents){let n=0;for(let o of i.intermediateData.invocationEvents)o.invocationIndex=A,o.content?.parts?.[0]?.functionCall&&(o.toolUseIndex=n,n++),e.events.push(o)}else if(i.intermediateData?.toolUses){let n=0;for(let o of i.intermediateData.toolUses)e.events.push({author:"bot",content:{parts:[{functionCall:{name:o.name,args:o.args}}]},invocationIndex:A,toolUseIndex:n}),n++,e.events.push({author:"bot",content:{parts:[{functionResponse:{name:o.name}}]},invocationIndex:A})}i.finalResponse?.parts&&e.events.push({author:"bot",content:i.finalResponse,invocationIndex:A}),A++}for(let i of e.events)this.appendEventRow(i,!1)}}handleEditEvalCaseRequested(e){this.updateWithSelectedEvalCase(e),this.editEvalCase()}updateSelectedEvalSetId(e){this.evalSetId=e}editEvalCaseMessage(e){this.isEvalCaseEditing.set(!0),this.userEditEvalCaseMessage=e.text,e.isEditing=!0,setTimeout(()=>{let A=this.chatPanel()?.textarea?.nativeElement;if(!A)return;A.focus();let i=A.value.length;e.text.charAt(i-1)===` +`&&i--,A.setSelectionRange(i,i)},0)}editFunctionArgs(e){this.isEvalCaseEditing.set(!0),this.dialog.open(S3,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Edit function arguments",functionName:e.functionCall.name,jsonContent:e.functionCall.args}}).afterClosed().subscribe(i=>{this.isEvalCaseEditing.set(!1),i&&(this.hasEvalCaseChanged.set(!0),e.functionCall.args=i,this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].intermediateData.toolUses[e.toolUseIndex].args=i)})}saveEvalCase(){this.evalService.updateEvalCase(this.appName,this.evalSetId,this.updatedEvalCase.evalId,this.updatedEvalCase).subscribe(e=>{this.openSnackBar("Eval case updated","OK"),this.resetEditEvalCaseVars()})}cancelEditEvalCase(){this.resetEditEvalCaseVars(),this.updateWithSelectedEvalCase(this.evalCase)}resetEditEvalCaseVars(){this.hasEvalCaseChanged.set(!1),this.isEvalCaseEditing.set(!1),this.isEvalEditMode.set(!1),this.updatedEvalCase=null}cancelEditMessage(e){e.isEditing=!1,this.isEvalCaseEditing.set(!1)}saveEditMessage(e){this.hasEvalCaseChanged.set(!0),this.isEvalCaseEditing.set(!1),e.isEditing=!1,e.text=this.userEditEvalCaseMessage?this.userEditEvalCaseMessage:" ",this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts[e.finalResponsePartIndex]={text:this.userEditEvalCaseMessage},this.userEditEvalCaseMessage=""}handleKeydown(e,A){e.key==="Enter"&&!e.shiftKey?(e.preventDefault(),this.saveEditMessage(A)):e.key==="Escape"&&this.cancelEditMessage(A)}deleteEvalCaseMessage(e,A){this.hasEvalCaseChanged.set(!0),this.uiEvents.update(i=>i.filter((n,o)=>o!==A)),this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts.splice(e.finalResponsePartIndex,1)}editEvalCase(){this.isEvalEditMode.set(!0),this.isViewOnlySession.set(!1)}deleteEvalCase(){let e={title:"Confirm delete",message:`Are you sure you want to delete ${this.evalCase.evalId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:e}).afterClosed().subscribe(i=>{i&&(this.evalTab()?.deleteEvalCase(this.evalCase.evalId),this.openSnackBar("Eval case deleted","OK"))})}onNewSessionClick(){this.resetToNewSession(),this.eventData.clear(),this.uiEvents.set([]),this.artifacts=[],this.traceData=[],this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0,this.traceService.resetTraceService(),this.chatPanel()?.focusInput(),this.evalTab()?.showEvalHistory&&this.evalTab()?.toggleEvalHistoryButton()}getToolbarSessionId(){if(!this.sessionId)return"NEW SESSION";if(this.isViewOnlySession())return this.sessionId;let e=this.currentSessionState?.__session_metadata__;return e?.displayName?`[${this.sessionId.substring(0,4)}] ${e.displayName}`:this.sessionId}getCurrentSessionDisplayName(){return this.sessionId?this.currentSessionState?.__session_metadata__?.displayName||this.sessionId:"NEW SESSION"}copySessionId(){return lt(this,null,function*(){if(this.sessionId)try{yield navigator.clipboard.writeText(this.sessionId),this.openSnackBar(this.i18n.sessionIdCopiedMessage,"OK")}catch(e){this.openSnackBar(this.i18n.copySessionIdFailedMessage,"OK")}})}saveSessionName(e){if(!this.sessionId)return;let A={__session_metadata__:Ye(gA({},this.currentSessionState?.__session_metadata__||{}),{displayName:e})};this.currentSessionState=gA(gA({},this.currentSessionState),A),this.updatedSessionState.set(gA(gA({},this.updatedSessionState()),A)),this.sessionService.updateSession(this.userId,this.appName,this.sessionId,{stateDelta:A}).subscribe({next:()=>{this.sessionTab&&this.sessionTab.reloadSession(this.sessionId),this.drawerSessionTab()&&this.drawerSessionTab().reloadSession(this.sessionId)}})}get sessionDisplayNameDraft(){return this.currentSessionState?.__session_metadata__?.displayName||""}saveUserId(e){if(e=e.trim(),!e){this.openSnackBar(this.i18n.invalidUserIdMessage,"OK");return}this.userId=e,this.isSessionUrlEnabledObs.pipe(uo(1)).subscribe(A=>{A&&this.updateSelectedSessionUrl()})}onFileSelect(e){let A=e.target;if(A.files)for(let i=0;i{e&&this.canvasComponent()?.loadFromYaml(e,this.appName)},error:e=>{console.error("Error loading agent configuration:",e),this._snackBar.open("Error loading agent configuration","OK")}})}exitBuilderMode(){let e=this.router.createUrlTree([],{queryParams:{mode:null},queryParamsHandling:"merge"}).toString();this.location.replaceState(e),this.isBuilderMode.set(!1),this.agentBuilderService.clear()}toggleBuilderAssistant(){this.showBuilderAssistant=!this.showBuilderAssistant}openAddItemDialog(){this.apps$.pipe(uo(1)).subscribe(e=>{let A=this.dialog.open(j6,{width:"600px",data:{existingAppNames:e??[]}})})}eventGraphSvgLight={};eventGraphSvgDark={};selectedEventGraphPath="";showAgentStructureOverlay=!1;agentStructureOverlayMode="session";openAgentStructureGraphDialog(e="session"){this.agentStructureOverlayMode=e,this.showAgentStructureOverlay=!0}saveAgentBuilder(){this.canvasComponent()?.saveAgent(this.appName)}onEventTabDrillDown(e){this.updateRenderedGraph(void 0,e)}updateRenderedGraph(e,A){return lt(this,null,function*(){let i=this.sessionGraphSvgLight,n=this.sessionGraphSvgDark;if(Object.keys(i).length===0||Object.keys(n).length===0){this.renderedEventGraph=void 0;return}let o=e||this.selectedEvent?.nodeInfo?.path;!e&&this.selectedEvent?.author==="user"&&(o="__START__");let a=o;o&&o!=="__START__"&&(a=o.split("/").map(h=>h.split("@")[0]).join("/"));let r=A!==void 0?A:"",s="";if(a&&A===void 0){let h=a.split("/");if(s=h[h.length-1],h.length>=2&&h[h.length-1]==="call_llm"&&h[h.length-2]===this.selectedEvent?.author?(s=h[h.length-2],r=h.slice(1,-2).join("/")):r=h.slice(1,-1).join("/"),r&&!(r in i&&!(r in this.dynamicGraphDot))){let f=this.tryGenerateDynamicGraph(r);if(f&&this.dynamicGraphDot[r]!==f)try{let m=yield this.graphService.render(f);this.sessionGraphSvgLight[r]=m,this.sessionGraphSvgDark[r]=m,this.dynamicGraphDot[r]=f}catch(m){console.error("Failed to render dynamic graph",m)}}for(;r&&!(r in i);){let E=r.split("/");E.pop(),r=E.join("/")}}let l=i[r]||i[""]||"",g=n[r]||n[""]||"";if(this.selectedEvent){let h=this.getV1HighlightPairs(this.selectedEvent);h.length>0&&(l=this.applyV1Highlighting(l,h,!1),g=this.applyV1Highlighting(g,h,!0))}let C=[],I=[];if(this.selectedEventIndex!==void 0){let h=Array.from(this.eventData.values()),f=h[this.selectedEventIndex]?.invocationId;for(let m=0;mb.split("@")[0]).join("/")),S){let b=S.split("/"),x=b[b.length-1],F="";b.length>=2&&b[b.length-1]==="call_llm"&&b[b.length-2]===v.author?(x=b[b.length-2],F=b.slice(1,-2).join("/")):F=b.slice(1,-1).join("/");let z=r in this.dynamicGraphDot,P=k?k.split("/"):[],W=P.length>0?P[P.length-1]:"",eA=z?W:x;F===r&&(m<=this.selectedEventIndex&&(C.length===0||C[C.length-1]!==eA)&&C.push(eA),(I.length===0||I[I.length-1]!==eA)&&I.push(eA))}}}if(this.selectedEvent){let h=this.getV1HighlightPairs(this.selectedEvent);for(let[E,f]of h)f&&f!==""&&(I.includes(f)||I.push(f),C.includes(f)||C.push(f)),E&&E!==""&&(I.includes(E)||I.push(E),C.includes(E)||C.push(E))}I.length>0&&l&&g&&(l=this.highlightExecutionPathInSvg(l,C,I,"light"),g=this.highlightExecutionPathInSvg(g,C,I,"dark")),this.selectedEventGraphPath=r,this.eventGraphSvgLight=Ye(gA({},i),{[r]:l}),this.eventGraphSvgDark=Ye(gA({},n),{[r]:g});let d=this.themeService.currentTheme()==="dark"?g:l;this.rawSvgString=d,this.renderedEventGraph=this.safeValuesService.bypassSecurityTrustHtml(d),this.changeDetectorRef.detectChanges()})}tryGenerateDynamicGraph(e){let A=Array.from(this.eventData.values()),i=[];for(let l of A){let g=l.nodeInfo?.path;if(!g)continue;let C=g.split("/"),I=C.map(h=>h.split("@")[0]),d="";if(I.length>=2&&I[I.length-1]==="call_llm"&&I[I.length-2]===l.author?d=I.slice(1,-2).join("/"):d=I.slice(1,-1).join("/"),d===e){let h=C[C.length-1];i.push({run:h,branch:l.branch})}}if(i.length===0)return null;let n=new Set,o=new Map;for(let l of i)n.add(l.run),l.branch&&o.set(l.run,l.branch);if(n.size===0)return null;let a=`digraph G { +`;a+=` rankdir=TB; +`,a+=` node [shape=box, style=filled, fillcolor="#e6f4ea", color="#34a853"]; +`,a+=` "START" [shape=ellipse, style=filled, fillcolor="#fce8e6", color="#ea4335"]; +`;let r=new Map;for(let l of n){let g=l.split("@")[0];r.has(g)||r.set(g,[]),r.get(g).push(l)}for(let[l,g]of Array.from(r.entries())){a+=` subgraph cluster_${l} { +`,a+=` label="${l}"; +`,a+=` style=dashed; +`,a+=` color="#b0b0b0"; +`;for(let C of g){let I=C.split("@")[1]||"";a+=` "${C}" [label="@${I}"]; +`}a+=` } +`}let s=new Set;for(let l of n){let g=o.get(l);if(g){let C=g.split(".");if(C.length>=2){let I=C[C.length-2],d=C[C.length-1];s.add(`"${I}" -> "${d}"`)}else C.length===1&&s.add(`"START" -> "${C[0]}"`)}else s.add(`"START" -> "${l}"`)}for(let l of s)a+=` ${l}; +`;return a+="}",a}highlightExecutionPathInSvg(e,A,i,n="light"){if(!i||i.length===0)return e;let a=new DOMParser().parseFromString(e,"image/svg+xml"),r=new Map,s=new Map,l=a.querySelectorAll("g.edge");l.forEach(W=>{let Z=W.querySelector("title")?.textContent?.trim()||"";if(Z.includes("->")){let EA=Z.split("->"),X=EA[0].trim().replace(/^"|"$/g,""),iA=EA[1].trim().replace(/^"|"$/g,"");r.has(iA)||r.set(iA,[]),r.get(iA).push(X),s.has(X)||s.set(X,[]),s.get(X).push(iA)}});let g=new Map,C=a.querySelectorAll("g.node");C.forEach(W=>{let Z=Array.from(W.querySelectorAll("text")).map(AA=>AA.textContent?.trim()||"").join(""),X=W.querySelector("title")?.textContent?.trim()||"",iA=X.replace(/^"|"$/g,"");g.set(Z,iA),X&&g.set(X,iA)});let I=W=>{let eA=W.toLowerCase();for(let[Z,EA]of g.entries()){let X=Z.toLowerCase().replace(/\s+/g,"_");if(X===eA||X===`"${eA}"`)return EA}for(let[Z,EA]of g.entries())if(Z.toLowerCase().replace(/\s+/g,"_").includes(eA))return EA;return null},d=A.map(W=>I(W)).filter(W=>W),h=i.map(W=>I(W)).filter(W=>W),{visitedNodes:E,visitedEdges:f}=this.calculateVisitedPath(d,r),{visitedNodes:m}=this.calculateVisitedPath(h,r),v=this.calculateEdgeCounts(d,E,f,s),k=n==="dark"?"#34a853":"#a1c2a1",S=n==="dark"?"#ceead6":"#0d652d",b=n==="dark"?"#137333":"#a6d8b5",x=n==="dark"?"#34a853":"#a1c2a1",F=n==="dark"?"#0d652d":"#e6f4ea",z=null,P=d[d.length-1];if(d.length>0&&P){let W=[...d],eA=Array.from(E).find(EA=>EA.toLowerCase()==="__start__");W.length>0&&W[0].toLowerCase()!=="__start__"&&eA&&W.unshift(eA);let Z=W.lastIndexOf(P);if(Z>0){let EA=W[Z-1],X=W[Z],iA=[],AA=new Set,IA=s.get(EA)||[];for(let aA of IA){let rA=`${EA}->${aA}`;f.has(rA)&&(iA.push({node:aA,path:[rA]}),AA.add(aA))}for(;iA.length>0;){let aA=iA.shift();if(aA.node===X){aA.path.length>0&&(z=aA.path[aA.path.length-1]);break}let rA=s.get(aA.node)||[];for(let uA of rA){let UA=`${aA.node}->${uA}`;f.has(UA)&&!AA.has(uA)&&(AA.add(uA),iA.push({node:uA,path:[...aA.path,UA]}))}}}}return l.forEach(W=>{let Z=W.querySelector("title")?.textContent?.trim()||"";if(Z.includes("->")){let EA=Z.split("->"),X=EA[0].trim().replace(/^"|"$/g,""),iA=EA[1].trim().replace(/^"|"$/g,""),AA=`${X}->${iA}`;if(f.has(AA)){let IA=AA===z,aA=W.querySelector("path");aA&&(aA.setAttribute("stroke",IA?S:k),aA.setAttribute("stroke-width",IA?"4":"2"));let rA=W.querySelector("polygon");rA&&(rA.setAttribute("fill",IA?S:k),rA.setAttribute("stroke",IA?S:k));let uA=v.get(AA)||0;if(uA>1){let UA=W.querySelector("text");if(UA)UA.textContent=`${UA.textContent} (${uA}x)`,UA.setAttribute("fill",n==="dark"?"#ffffff":"#000000"),UA.setAttribute("font-weight","bold");else if(aA){let zA=[...(aA.getAttribute("d")||"").matchAll(/[-+]?[0-9]*\.?[0-9]+/g)];if(zA.length>=4){let pA=zA.map(XA=>parseFloat(XA[0])),PA=(pA[0]+pA[pA.length-2])/2,Ue=(pA[1]+pA[pA.length-1])/2,_e=a.createElementNS("http://www.w3.org/2000/svg","g"),YA=a.createElementNS("http://www.w3.org/2000/svg","rect");YA.setAttribute("x",(PA-14).toString()),YA.setAttribute("y",(Ue-10).toString()),YA.setAttribute("width","28"),YA.setAttribute("height","20"),YA.setAttribute("rx","4"),YA.setAttribute("fill",n==="dark"?"#0d652d":"#e6f4ea"),YA.setAttribute("stroke",k),YA.setAttribute("stroke-width","1"),_e.appendChild(YA);let fA=a.createElementNS("http://www.w3.org/2000/svg","text");fA.setAttribute("x",PA.toString()),fA.setAttribute("y",(Ue+4).toString()),fA.setAttribute("text-anchor","middle"),fA.setAttribute("fill",n==="dark"?"#ffffff":"#000000"),fA.setAttribute("font-size","12px"),fA.setAttribute("font-weight","bold"),fA.textContent=uA.toString()+"x",_e.appendChild(fA),W.appendChild(_e)}}}}}}),C.forEach(W=>{let eA=W.querySelector("title"),Z=eA?.textContent?.trim().replace(/^"|"$/g,"")||"";if(E.has(Z)){let EA=W.querySelector("ellipse, polygon, path, rect");if(EA){let X=Z===P||Z.toLowerCase()==="__end__";EA.setAttribute("stroke",X?S:x),EA.setAttribute("fill",X?b:F),EA.setAttribute("stroke-width",X?"4":"2")}}if(!m.has(Z)){W.classList.add("unvisited-node");let EA=W.querySelector("ellipse, polygon, path, rect");if(EA){EA.setAttribute("stroke",n==="dark"?"#666666":"#b0b0b0"),EA.setAttribute("fill",n==="dark"?"#424242":"#e0e0e0");let AA=a.createElementNS("http://www.w3.org/2000/svg","title");AA.textContent="Not run in this invocation",EA.appendChild(AA)}if(W.querySelectorAll("text").forEach(AA=>{AA.setAttribute("fill",n==="dark"?"#888888":"#757575");let IA=a.createElementNS("http://www.w3.org/2000/svg","title");IA.textContent="Not run in this invocation",AA.appendChild(IA)}),eA)eA.textContent="Not run in this invocation";else{let AA=a.createElementNS("http://www.w3.org/2000/svg","title");AA.textContent="Not run in this invocation",W.appendChild(AA)}W.querySelectorAll("a").forEach(AA=>{AA.setAttribute("title","Not run in this invocation"),AA.setAttributeNS("http://www.w3.org/1999/xlink","title","Not run in this invocation")})}}),new XMLSerializer().serializeToString(a)}getV1HighlightPairs(e){let A=[],i=e.content?.parts?.filter(o=>o.functionCall)||[],n=e.content?.parts?.filter(o=>o.functionResponse)||[];if(i.length>0)for(let o of i)o.functionCall?.name&&e.author&&A.push([e.author,o.functionCall.name]);else if(n.length>0)for(let o of n)o.functionResponse?.name&&e.author&&A.push([o.functionResponse.name,e.author]);else e.author&&A.push([e.author,""]);return A}applyV1Highlighting(e,A,i){let o=new DOMParser().parseFromString(e,"image/svg+xml"),a="#0F5223",r="#69CB87",s=i?"#cccccc":"#000000",l=new Set;for(let[I,d]of A)I&&l.add(I),d&&l.add(d);return o.querySelectorAll("g.node").forEach(I=>{let h=I.querySelector("title")?.textContent?.trim().replace(/^"|"$/g,"")||"",E=Array.from(I.querySelectorAll("text")),f=E.map(v=>v.textContent?.trim()||"").join("").toLowerCase().replace(/\s+/g,"_"),m=l.has(h);if(!m)for(let v of l){let k=v.toLowerCase().replace(/\s+/g,"_");if(f.includes(k)){m=!0;break}}if(m){let v=I.querySelector("ellipse, polygon, path, rect");v&&(v.setAttribute("fill",a),v.setAttribute("stroke",a)),E.forEach(k=>k.setAttribute("fill",s))}else E.forEach(v=>v.setAttribute("fill",s))}),o.querySelectorAll("g.edge").forEach(I=>{let h=I.querySelector("title")?.textContent?.trim()||"";if(h.includes("->")){let[E,f]=h.split("->"),m=E.trim().replace(/^"|"$/g,""),v=f.trim().replace(/^"|"$/g,"");for(let[k,S]of A)if(m===k&&v===S||m===S&&v===k){let b=I.querySelector("path");b&&b.setAttribute("stroke",r);let x=I.querySelector("polygon");x&&(x.setAttribute("stroke",r),x.setAttribute("fill",r));break}}}),new XMLSerializer().serializeToString(o)}calculateVisitedPath(e,A){let i=new Set(e),n=!0;for(;n;){n=!1;let a=Array.from(i);for(let r of a){let s=A.get(r)||[];if(s.length===1){let l=s[0];i.has(l)||(i.add(l),n=!0)}}}for(let[a,r]of A.entries())if(a.toLowerCase()==="__end__"){for(let s of r)if(i.has(s)){i.add(a);break}}let o=new Set;for(let a of i){if(a==="__start__")continue;let r=A.get(a)||[];if(r.length===1)o.add(`${r[0]}->${a}`);else if(r.length>1)for(let s of r)(i.has(s)||s==="__start__")&&o.add(`${s}->${a}`)}return{visitedNodes:i,visitedEdges:o}}calculateEdgeCounts(e,A,i,n){let o=new Map,a=[...e],r=Array.from(A).find(l=>l.toLowerCase()==="__start__"),s=Array.from(A).find(l=>l.toLowerCase()==="__end__");a.length>0&&a[0].toLowerCase()!=="__start__"&&r&&a.unshift(r),a.length>0&&s&&a[a.length-1].toLowerCase()!=="__end__"&&a.push(s);for(let l=0;l${f}`;i.has(m)&&(d.push({node:f,path:[m]}),h.add(f))}for(;d.length>0;){let f=d.shift();if(f.node===C){I=f.path;break}let m=n.get(f.node)||[];for(let v of m){let k=`${f.node}->${v}`;i.has(k)&&!h.has(v)&&(h.add(v),d.push({node:v,path:[...f.path,k]}))}}if(I)for(let f of I)o.set(f,(o.get(f)||0)+1)}return o}selectEvent(e,A,i=!0){i&&(this.autoSelectLatestEvent=!1),this.traceService.selectedRow(void 0),this.selectedEvent=this.eventData.get(e),this.selectedEventIndex=this.getIndexOfKeyInMap(e),this.selectedMessageIndex=A!==void 0?A:this.uiEvents().findIndex(n=>n.event.id===e),this.viewMode()!=="events"&&this.onViewModeChange("events"),this.chatPanel()?.scrollToSelectedMessage(this.selectedMessageIndex),this.populateLlmRequestResponse(),this.updateRenderedGraph()}populateLlmRequestResponse(){if(this.llmRequest=void 0,this.llmResponse=void 0,!this.selectedEvent)return;let e=this.traceData?.find(A=>A?.attributes?.["gcp.vertex.agent.event_id"]===this.selectedEvent.id&&A?.name==="call_llm");if(e){let A=e.attributes?.[this.llmRequestKey],i=e.attributes?.[this.llmResponseKey];if(A)try{this.llmRequest=typeof A=="string"?JSON.parse(A):A}catch(n){console.warn("Failed to parse LLM request",n)}if(i)try{this.llmResponse=typeof i=="string"?JSON.parse(i):i}catch(n){console.warn("Failed to parse LLM response",n)}}}deleteSession(e){let A={title:"Confirm delete",message:`Are you sure you want to delete this session ${this.sessionId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:A}).afterClosed().subscribe(n=>{n&&this.sessionService.deleteSession(this.userId,this.appName,e).subscribe(o=>{let a=this.sessionTab?.refreshSession(e);a?this.sessionTab?.getSession(a.id):window.location.reload()})})}syncSelectedAppFromUrl(){let e=this.activatedRoute.snapshot.queryParams.app;e&&(this.selectedAppControl.setValue(e,{emitEvent:!1}),this.selectApp(e)),Qr([this.activatedRoute.queryParams,this.apps$]).subscribe(([A,i])=>{let n=A.app;if(i&&i.length&&n){if(!i.includes(n)){this.openSnackBar(`Agent '${n}' not found`,"OK");return}n!==this.appName&&(this.selectedAppControl.setValue(n,{emitEvent:!1}),this.selectApp(n)),this.agentService.getAppInfo(n).subscribe(o=>{setTimeout(()=>{this.agentGraphData.set(o),this.agentReadme=o?.readme||""})}),this.sessionGraphSvgLight={},this.sessionGraphSvgDark={},this.dynamicGraphDot={},setTimeout(()=>this.graphsAvailable.set(!0)),this.agentService.getAppGraphImage(n,!1).pipe(Po(o=>(console.error("Error fetching light mode graphs:",o),this.graphsAvailable.set(!1),oe(null)))).subscribe({next:o=>lt(this,null,function*(){try{if(o){console.log("Light mode graph response:",o),this.sessionGraphSvgLight={},this.dynamicGraphDot={};for(let[a,r]of Object.entries(o))if(r?.dotSrc){let l=a.split("/").map(C=>C.split("@")[0]).join("/").split("/"),g=l.length>1?l.slice(1).join("/"):l[0]==="root_agent"||l[0]===n?"":l[0];this.sessionGraphSvgLight[g]=yield this.graphService.render(r.dotSrc)}console.log("sessionGraphSvgLight after rendering:",Object.keys(this.sessionGraphSvgLight)),console.log("graphsAvailable:",this.graphsAvailable()),this.selectedEvent&&this.selectedEventIndex!==void 0&&this.updateRenderedGraph()}}catch(a){console.error("Error rendering light mode graphs:",a),setTimeout(()=>this.graphsAvailable.set(!1))}}),error:o=>{console.error("Error fetching light mode graphs:",o),setTimeout(()=>this.graphsAvailable.set(!1))}}),this.agentService.getAppGraphImage(n,!0).pipe(Po(o=>(console.error("Error fetching dark mode graphs:",o),oe(null)))).subscribe({next:o=>lt(this,null,function*(){try{if(o){this.sessionGraphSvgDark={};for(let[a,r]of Object.entries(o))if(r?.dotSrc){let l=a.split("/").map(C=>C.split("@")[0]).join("/").split("/"),g=l.length>1?l.slice(1).join("/"):l[0]==="root_agent"||l[0]===n?"":l[0];this.sessionGraphSvgDark[g]=yield this.graphService.render(r.dotSrc)}this.selectedEvent&&this.selectedEventIndex!==void 0&&this.updateRenderedGraph()}}catch(a){console.error("Error rendering dark mode graphs:",a),setTimeout(()=>this.graphsAvailable.set(!1))}}),error:o=>{console.error("Error fetching dark mode graphs:",o),setTimeout(()=>this.graphsAvailable.set(!1))}}),this.agentService.getAgentBuilder(n).pipe(Po(o=>(setTimeout(()=>this.disableBuilderSwitch=!0),this.agentBuilderService.setLoadedAgentData(void 0),oe("")))).subscribe(o=>{!o||o==""?(setTimeout(()=>this.disableBuilderSwitch=!0),this.agentBuilderService.setLoadedAgentData(void 0)):(setTimeout(()=>this.disableBuilderSwitch=!1),this.agentBuilderService.setLoadedAgentData(o))}),this.isBuilderMode.set(!1)}A.mode==="builder"&&this.enterBuilderMode()})}updateSelectedAppUrl(){this.selectedAppControl.valueChanges.pipe(kg(),gt(Boolean)).subscribe(e=>{this.selectApp(e);let A=this.activatedRoute.snapshot.queryParams.app;e!==A&&this.router.navigate([],{queryParams:{app:e,mode:null},queryParamsHandling:"merge"})})}updateSelectedSessionUrl(){let e=this.chatType(),A={userId:this.userId};switch(A.session=null,A.evalCase=null,A.evalResult=null,A.file=null,e){case"session":A.session=this.sessionId;break;case"eval-case":A.evalCase=`${this.evalSetId}/${this.evalCase?.evalId}`;break;case"eval-result":A.evalResult=`${this.evalSetId}/${this.currentEvalCaseId}/${this.currentEvalTimestamp}`;break;case"file":A.file=this.readonlySessionName();break}let i=this.router.createUrlTree([],{queryParams:A,queryParamsHandling:"merge"}).toString();this.location.replaceState(i)}clearSessionUrl(){this.isSessionUrlEnabledObs.pipe($n()).subscribe(e=>{if(e){let A=this.router.createUrlTree([],{queryParams:{session:null},queryParamsHandling:"merge"}).toString();this.location.replaceState(A)}})}handlePageEvent(e){if(e.pageIndex>=0){let A=this.getKeyAtIndexInMap(e.pageIndex);A&&(this.selectEvent(A),setTimeout(()=>{let i=this.uiEvents().findIndex(n=>n.event.id===A);if(i!==-1){let n=this.chatPanel()?.scrollContainer?.nativeElement;if(!n)return;let o=n.querySelectorAll(".message-row-container");o&&o[i]&&o[i].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}},0))}}closeSelectedEvent(){this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0}handleEscapeKey(e){e.key==="Escape"&&this.selectedEvent&&(e.preventDefault(),this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.selectedMessageIndex=void 0)}getIndexOfKeyInMap(e){let A=0,i=(o,a)=>0,n=Array.from(this.eventData.keys()).sort(i);for(let o of n){if(o===e)return A;A++}}getKeyAtIndexInMap(e){let A=(n,o)=>0,i=Array.from(this.eventData.keys()).sort(A);if(e>=0&&e{console.log(e);let i=(e.state?.__session_metadata__||this.currentSessionState?.__session_metadata__)?.displayName,n=i&&i.trim()?`${i.trim().replace(/[/\\?%*:|"<>]/g,"_")}.json`:`session-${this.sessionId}.json`;this.downloadService.downloadObjectAsJson(e,n)})}updateState(){this.dialog.open(S3,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Update state",jsonContent:this.currentSessionState}}).afterClosed().subscribe(A=>{A&&this.updatedSessionState.set(A)})}removeStateUpdate(){this.updatedSessionState.set(null)}importSession(){let e=document.createElement("input");e.type="file",e.accept="application/json",e.onchange=()=>{if(!e.files||e.files.length===0)return;let A=e.files[0],i=new FileReader;i.onload=n=>{if(n.target?.result)try{let o=JSON.parse(n.target.result);if(!o.events||o.events.length===0){this.openSnackBar("Invalid session file: no events found","OK");return}if(o.appName&&o.appName!==this.appName){let a={title:"App name mismatch",message:`The session file was exported from app "${o.appName}" but the current app is "${this.appName}". Do you want to import it anyway?`,confirmButtonText:"Import",cancelButtonText:"Cancel"};this.dialog.open(xc,{width:"600px",data:a}).afterClosed().subscribe(s=>{s&&this.doImportSession(o)})}else this.doImportSession(o)}catch(o){this.openSnackBar("Error parsing session file","OK")}},i.readAsText(A)},e.click()}viewSession(){let e=document.createElement("input");e.type="file",e.accept="application/json",e.onchange=()=>{if(!e.files||e.files.length===0)return;let A=e.files[0],i=new FileReader;i.onload=n=>{if(n.target?.result)try{let o=JSON.parse(n.target.result);if(!o.events||o.events.length===0){this.openSnackBar("Invalid session file: no events found","OK");return}this.doViewSession(o,A.name)}catch(o){this.openSnackBar("Error parsing session file","OK")}},i.readAsText(A)},e.click()}doViewSession(e,A){let i=e.appName;i&&i!==this.appName?this.apps$.pipe(uo(1)).subscribe(n=>{n?.includes(i)?this.router.navigate([],{queryParams:{app:i},queryParamsHandling:"merge"}).then(()=>{this.openSnackBar(`Switched to app '${i}'`,"OK"),this.performViewSessionLoading(e,A)}):(this.isLoadedAppUnavailable.set(!0),this.unavailableAppName.set(i),this.performViewSessionLoading(e,A))}):this.performViewSessionLoading(e,A)}performViewSessionLoading(e,A){this.traceService.resetTraceService(),this.traceData=[],this.isViewOnlySession()||(this.originalSessionId=this.sessionId),this.readonlySessionType.set("File"),this.readonlySessionName.set(A),this.sessionId=`File: ${A}`,this.currentSessionState=e.state||{},this.evalCase=null,this.chatType.set("session"),this.updateSelectedSessionUrl(),this.showSessionSelectorDrawer=!1,this.resetEventsAndMessages(),this.isViewOnlySession.set(!0),this.canEditSession.set(!1),this.chatPanel()?.canEditSession.set(!1);let i=!!(e.appName&&e.appName!==this.appName);this.isViewOnlyAppNameMismatch.set(i),e.events&&e.events.forEach(n=>{if(this.appendEventRow(n,!1),n.author!=="user"&&n.actions?.artifactDelta)for(let a in n.actions.artifactDelta)n.actions.artifactDelta.hasOwnProperty(a)&&this.renderArtifact(a,n.actions.artifactDelta[a])}),this.changeDetectorRef.detectChanges()}closeReadonlySession(){this.isViewOnlySession.set(!1),this.readonlySessionType.set(""),this.readonlySessionName.set(""),this.evalCase=null,this.router.navigate([],{queryParams:{session:null,evalCase:null,evalResult:null,file:null},queryParamsHandling:"merge"}),this.createSessionAndReset(),this.originalSessionId=""}doImportSession(e){let A=Date.now()/1e3,i=e.events.map(n=>Ye(gA({},n),{timestamp:A}));this.sessionService.importSession(this.userId,this.appName,i,e.state).subscribe(n=>{this.openSnackBar(`Session imported successfully (ID: ${n.id})`,"OK"),this.sessionTab?.refreshSession(),this.showSessionSelectorDrawer=!1,this.updateWithSelectedSession(n)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-chat"]],viewQuery:function(A,i){A&1&&ns(i.chatPanel,hQ,5)(i.canvasComponent,cQ,5)(i.sideDrawer,qFA,5)(i.sidePanel,mQ,5)(i.drawerSessionTab,VFA,5)(i.evalTab,_c,5)(i.appSearchInput,WFA,5)(i.invChipMenuTrigger,ZFA,5)(i.nodeChipMenuTrigger,XFA,5)(i.addMenuTrigger,$FA,5),A&2&&ur(10)},hostBindings:function(A,i){A&1&&U("keydown",function(o){return i.handleEscapeKey(o)},ZC)},features:[Bt([{provide:b1,useClass:hF}])],ngContentSelectors:eLA,decls:47,vars:16,consts:[["userMenu","matMenu"],["selectorDrawer",""],["sideDrawer",""],["appSearchInput",""],["drawerSessionTab",""],["addFilterMenu","matMenu"],["invocationMenu","matMenu"],["nodePathMenu","matMenu"],["invChipMenuTrigger","matMenuTrigger"],["nodeChipMenuTrigger","matMenuTrigger"],["addMenuTrigger","matMenuTrigger"],[1,"app-toolbar"],[1,"toolbar-group","toolbar-agent-group"],["mat-icon-button","","aria-label","Toggle side panel",1,"toolbar-icon-button",3,"click"],[1,"toolbar-logo"],[1,"selector-group"],["matTooltip","Select an app",1,"selector-button",3,"click"],["fontSet","material-symbols-outlined"],[1,"selector-label"],["color","warn","matTooltip","The app for the loaded file is not available",2,"margin-left","4px"],["fontSet","material-symbols-outlined",1,"selector-caret"],[1,"toolbar-group","toolbar-session-group"],["mat-icon-button","","matTooltip","User","aria-label","User menu",1,"toolbar-icon-button","user-avatar-button",3,"matMenuTriggerFor"],["xPosition","before","panelClass","user-avatar-menu"],[1,"user-menu-panel",3,"click"],[1,"user-menu-header"],[1,"user-menu-label"],[2,"flex","1"],["mat-icon-button","","matTooltip","Reset to default user",1,"small-icon-button",3,"click"],[1,"user-menu-content"],["textClass","user-menu-id",3,"save","value","placeholder"],["autosize","",1,"drawer-container"],["mode","over","position","start",1,"selector-drawer",3,"closedStart","opened","autoFocus"],["autosize","",1,"side-panel-container"],["mode","side","appResizableDrawer","",1,"side-drawer"],[3,"isApplicationSelectorEnabledObs","showSidePanel","appName","userId","sessionId","isViewOnlySession","isViewOnlyAppNameMismatch","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","selectedEventGraphPath","llmRequest","llmResponse","disableBuilderIcon","hasSubWorkflows","graphsAvailable","invocationDisplayMap","forceGraphTab"],[1,"builder-mode-container"],[1,"chat-container"],[3,"appName","preloadedAppData","preloadedLightGraphSvg","preloadedDarkGraphSvg","startPath"],[4,"ngComponentOutlet"],["src","assets/ADK-512-color.svg","width","20px","height","20px"],[1,"toolbar-logo-text","logo-wide"],[2,"color","var(--mat-sys-on-surface-variant)","margin-left","8px","opacity","0.6"],[1,"toolbar-logo-text","logo-narrow"],[1,"info-icon-container"],[1,"disclosure-info-icon"],[1,"custom-tooltip"],[1,"tooltip-desc"],[1,"tooltip-grid"],[1,"tooltip-item"],[1,"tooltip-label"],[1,"tooltip-value"],[1,"selector-group-divider"],["matTooltipPosition","below",3,"matTooltip"],["mat-icon-button","",1,"toolbar-icon-button",3,"click","disabled"],["mat-icon-button","","matTooltipPosition","below",1,"toolbar-icon-button",3,"click","disabled"],[1,"readonly-chip"],[1,"toolbar-content"],[2,"display","flex","align-items","center"],[1,"toolbar-actions"],["mat-icon-button","",1,"toolbar-icon-button",3,"matTooltip"],["fontSet","material-symbols-outlined",2,"font-size","18px","width","18px","height","18px","line-height","18px"],[1,"chip-label"],["mat-icon-button","","aria-label","Close readonly view",1,"chip-close-button",3,"click"],[2,"font-size","16px","width","16px","height","16px"],["matTooltip","Select a session",1,"selector-button",3,"click"],["id","toolbar-new-session-button",1,"selector-button","new-session-button",3,"matTooltip"],["id","toolbar-new-session-button",1,"selector-button","new-session-button","icon-only",3,"matTooltip"],["id","toolbar-new-session-button",1,"selector-button","new-session-button",3,"click","matTooltip"],["id","toolbar-new-session-button",1,"selector-button","new-session-button","icon-only",3,"click","matTooltip"],[1,"chip-value"],["mat-button","",2,"height","30px",3,"click"],["mat-flat-button","",2,"height","30px",3,"click","disabled"],[1,"toolbar-session-text"],["mat-icon-button","",1,"toolbar-icon-button",3,"click","matTooltip"],[1,"selector-drawer-header"],[1,"selector-drawer-title"],["mat-icon-button","","matTooltip","Create new agent","matTooltipPosition","below","aria-label","Create new agent",1,"toolbar-icon-button",3,"click"],["mat-icon-button","","aria-label","Close app selector",1,"toolbar-icon-button",3,"click"],[1,"app-selector-search"],["subscriptSizing","dynamic","appearance","outline",1,"app-selector-search-field"],["matPrefix",""],["matInput","","placeholder","Search apps...",3,"keydown","formControl"],[1,"app-selector-list",3,"keydown"],[1,"app-selector-loading"],["mode","indeterminate","diameter","32"],[1,"app-selector-item",3,"selected"],[1,"app-selector-empty"],[1,"app-selector-item",3,"click"],["fontSet","material-symbols-outlined",1,"app-selector-item-icon"],[1,"app-selector-item-name"],[1,"app-selector-check"],[2,"display","flex","gap","4px"],["mat-button","",1,"toolbar-button",3,"matTooltip"],["mat-button","",1,"toolbar-button",3,"click","matTooltip"],["mat-icon-button","","aria-label","Close session selector",1,"toolbar-icon-button",3,"click"],[1,"session-selector-current-id"],[1,"session-selector-drawer-content"],[3,"sessionSelected","sessionReloaded","userId","appName","sessionId"],[1,"session-selector-current-id-label"],[1,"session-selector-current-id-row"],["textClass","session-selector-current-id-value",3,"save","value","displayValue","tooltip"],[1,"session-selector-current-real-id-row",2,"display","flex","align-items","center","gap","4px"],[1,"session-selector-current-real-id-value",3,"title"],["mat-icon-button","","matTooltip","Copy session ID","aria-label","Copy session ID",1,"session-selector-action-button",3,"click"],["mat-button","",3,"matTooltip"],["mat-button","","color","warn",3,"matTooltip"],["mat-button","",3,"click","matTooltip"],["mat-button","","color","warn",3,"click","matTooltip"],[3,"jumpToInvocation","closePanel","tabChange","sessionSelected","evalCaseSelected","editEvalCaseRequested","testSelected","evalSetIdSelected","returnToSession","evalNotInstalled","page","closeSelectedEvent","openImageDialog","openAddItemDialog","enterBuilderMode","showAgentStructureGraph","switchToEvent","switchToTraceView","drillDownNodePath","selectEventById","isApplicationSelectorEnabledObs","showSidePanel","appName","userId","sessionId","isViewOnlySession","isViewOnlyAppNameMismatch","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","selectedEventGraphPath","llmRequest","llmResponse","disableBuilderIcon","hasSubWorkflows","graphsAvailable","invocationDisplayMap","forceGraphTab"],[3,"exitBuilderMode","closePanel","appNameInput"],[1,"resize-handler"],[1,"builder-exit-button"],["mat-icon-button","","matTooltip","Accept",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Exit Builder Mode",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Builder Assistant",1,"builder-mode-action-button",3,"click"],[3,"toggleSidePanelRequest","builderAssistantCloseRequest","showSidePanel","showBuilderAssistant","appNameInput"],[1,"chat-card"],[1,"empty-state-container"],[1,"warning"],[1,"error"],[1,"chat-sub-toolbar"],["hideSingleSelectionIndicator","",3,"change","value"],["value","events"],["value","traces"],[1,"filter-bar-container",3,"click"],[1,"filter-chip",3,"matMenuTriggerFor","matTooltip"],["matTooltip","Hide intermediate events to only show final results",1,"filter-chip"],["matTooltip","Add a filter",1,"add-filter-btn",3,"matMenuTriggerFor"],["matTooltip","Clear all filters",1,"add-filter-btn"],[1,"filter-panel"],["mat-menu-item","","matTooltip","Filter events by a specific invocation","matTooltipPosition","right"],["mat-menu-item","","matTooltip","Filter events generated by a specific node","matTooltipPosition","right"],["mat-menu-item","","matTooltip","Hide intermediate events to only show final results","matTooltipPosition","right"],[1,"filter-panel",3,"closed"],["mat-menu-item","","matTooltipPosition","right",3,"matTooltip"],["mat-menu-item",""],[2,"flex-grow","1"],["mat-button","","matTooltip","Compare with expected",2,"height","32px","line-height","32px","padding","0 12px","border-radius","16px",3,"color"],["mat-button","","matTooltip","Enable real-time token streaming from the server",2,"height","32px","line-height","32px","padding","0 12px","border-radius","16px",3,"color"],[3,"appName","agentReadme","userInput","hideIntermediateEvents","uiEvents","traceData","isTokenStreamingEnabled","useSse","isChatMode","selectedFiles","updatedSessionState","agentGraphData","selectedMessageIndex","isAudioRecording","micVolume","isVideoRecording","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[3,"appName","agentReadme","hideIntermediateEvents","uiEvents","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","agentGraphData","selectedMessageIndex","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[1,"file-view-container",2,"padding","20px","display","flex","flex-direction","column","align-items","center","justify-content","center","height","100%"],[1,"filter-chip",3,"click","matMenuTriggerFor","matTooltip"],[1,"chip-label",3,"title"],[1,"chip-remove",3,"click"],["matTooltip","Hide intermediate events to only show final results",1,"filter-chip",3,"click"],["matTooltip","Add a filter",1,"add-filter-btn",3,"click","matMenuTriggerFor"],["matTooltip","Clear all filters",1,"add-filter-btn",3,"click"],["mat-menu-item","","matTooltip","Filter events by a specific invocation","matTooltipPosition","right",3,"click"],["mat-menu-item","","matTooltip","Filter events generated by a specific node","matTooltipPosition","right",3,"click"],["mat-menu-item","","matTooltip","Hide intermediate events to only show final results","matTooltipPosition","right",3,"click"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[2,"font-size","16px","width","16px","height","16px","margin-right","8px","color","var(--mat-sys-primary)"],["mat-menu-item","",3,"click"],["mat-button","","matTooltip","Compare with expected",2,"height","32px","line-height","32px","padding","0 12px","border-radius","16px",3,"click"],[2,"font-size","20px","width","20px","height","20px","line-height","20px","margin-right","4px","vertical-align","middle"],[2,"font-size","13px","font-weight","500","vertical-align","middle"],["mat-button","","matTooltip","Enable real-time token streaming from the server",2,"height","32px","line-height","32px","padding","0 12px","border-radius","16px",3,"click"],[3,"userInputChange","toggleHideIntermediateEvents","toggleSse","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","fileSelect","removeFile","removeStateUpdate","sendMessage","updateState","toggleAudioRecording","toggleVideoRecording","longRunningResponseComplete","appName","agentReadme","userInput","hideIntermediateEvents","uiEvents","traceData","isTokenStreamingEnabled","useSse","isChatMode","selectedFiles","updatedSessionState","agentGraphData","selectedMessageIndex","isAudioRecording","micVolume","isVideoRecording","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[3,"userInputChange","userEditEvalCaseMessageChange","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","appName","agentReadme","hideIntermediateEvents","uiEvents","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","agentGraphData","selectedMessageIndex","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[1,"eval-result-summary",2,"margin","0","padding","8px 24px","background","var(--mat-sys-surface-container)","border-bottom","1px solid var(--mat-sys-outline-variant)","display","flex","align-items","center"],[1,"side-by-side-layout"],[3,"appName","agentReadme","hideIntermediateEvents","uiEvents","traceData","isChatMode","evalCase","agentGraphData","selectedMessageIndex","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[2,"display","flex","gap","12px","align-items","center","flex-wrap","wrap"],[1,"metric-block",2,"position","relative","display","flex","flex-direction","column","gap","2px","background","var(--mat-sys-surface-container-high)","padding","6px 12px","border-radius","6px","flex-shrink","0","cursor","pointer",3,"border"],[1,"metric-block",2,"position","relative","display","flex","flex-direction","column","gap","2px","background","var(--mat-sys-surface-container-high)","padding","6px 12px","border-radius","6px","flex-shrink","0","cursor","pointer"],[2,"color","var(--mat-sys-on-surface-variant)","font-size","11px","font-weight","500"],[2,"display","flex","align-items","baseline","gap","4px"],[2,"font-size","16px","font-weight","600"],[2,"color","var(--mat-sys-on-surface-variant)","font-size","14px","font-weight","500"],[1,"metric-tooltip"],[1,"tooltip-title"],[1,"tooltip-subtitle",2,"font-size","10px","color","var(--mat-sys-on-surface-variant)","margin-bottom","4px"],[1,"tooltip-desc",2,"margin-top","8px","border-top","1px solid var(--mat-sys-outline-variant)","padding-top","6px","margin-bottom","0"],[1,"side-panel-half"],[1,"panel-header"],[3,"appName","agentReadme","hideIntermediateEvents","uiEvents","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","selectedFiles","updatedSessionState","agentGraphData","selectedMessageIndex","isAudioRecording","micVolume","isVideoRecording","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[3,"toggleHideIntermediateEvents","toggleSse","userInputChange","userEditEvalCaseMessageChange","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","fileSelect","removeFile","removeStateUpdate","sendMessage","updateState","toggleAudioRecording","toggleVideoRecording","longRunningResponseComplete","appName","agentReadme","hideIntermediateEvents","uiEvents","traceData","isTokenStreamingEnabled","useSse","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","agentGraphData","selectedMessageIndex","isAudioRecording","micVolume","isVideoRecording","userId","sessionId","sessionName","invocationDisplayMap","viewMode","shouldShowEvent"],[2,"font-size","48px","width","48px","height","48px","color","var(--mat-sys-on-surface-variant)"],[2,"margin-top","16px"],[2,"color","var(--mat-sys-on-surface-variant)"],[3,"close","appName","preloadedAppData","preloadedLightGraphSvg","preloadedDarkGraphSvg","startPath"]],template:function(A,i){if(A&1&&(Rt(ALA),B(0,"mat-toolbar",11)(1,"div",12)(2,"button",13),U("click",function(){return i.toggleSidePanel()}),B(3,"mat-icon"),y(4,"menu"),Q()(),B(5,"div",14),O(6,nLA,1,1,"ng-container")(7,rLA,13,3),Q(),B(8,"div",15)(9,"button",16),U("click",function(){return i.toggleAppSelectorDrawer()}),B(10,"mat-icon",17),y(11,"robot_2"),Q(),B(12,"span",18),y(13),Q(),O(14,sLA,2,0,"mat-icon",19),B(15,"mat-icon",20),y(16,"arrow_drop_down"),Q()(),O(17,gLA,6,3),Q()(),O(18,vLA,10,5,"div",21),B(19,"button",22)(20,"mat-icon"),y(21,"account_circle"),Q()(),B(22,"mat-menu",23,0)(24,"div",24),U("click",function(o){return o.stopPropagation()}),B(25,"div",25)(26,"span",26),y(27,"User ID"),Q(),QA(28,"span",27),B(29,"button",28),U("click",function(){return i.saveUserId("user")}),B(30,"mat-icon"),y(31,"restart_alt"),Q()()(),B(32,"div",29)(33,"app-inline-edit",30),U("save",function(o){return i.saveUserId(o)}),Q()()()()(),B(34,"mat-drawer-container",31)(35,"mat-drawer",32,1),U("closedStart",function(){return i.onSelectorDrawerClosed()})("opened",function(){return i.onSelectorDrawerOpened()}),O(37,_LA,20,4)(38,GLA,18,8),Q(),B(39,"mat-drawer-container",33)(40,"mat-drawer",34,2),O(42,KLA,1,23,"app-side-panel",35)(43,ULA,2,1),Q(),O(44,TLA,12,5,"div",36)(45,hGA,5,4,"div",37),Q()(),O(46,QGA,1,5,"app-agent-structure-graph-dialog",38)),A&2){let n=Qi(23);u(6),Y(i.logoComponent?6:7),u(7),lA(i.isLoadedAppUnavailable()?i.unavailableAppName():i.appName||"Select an app"),u(),Y(i.isLoadedAppUnavailable()?14:-1),u(3),Y(i.isBuilderMode()?-1:17),u(),Y(i.appName?18:-1),u(),H("matMenuTriggerFor",n),u(14),H("value",i.userId)("placeholder",i.i18n.userIdInputPlaceholder),u(2),RA("match-side-panel-width",i.showSidePanel),H("opened",i.showAppSelectorDrawer||i.showSessionSelectorDrawer)("autoFocus",!1),u(2),Y(i.showAppSelectorDrawer?37:i.showSessionSelectorDrawer?38:-1),u(5),Y(i.isBuilderMode()?43:42),u(2),Y(i.isBuilderMode()?44:45),u(2),Y(i.showAgentStructureOverlay?46:-1)}},dependencies:[bM,lM,Um,dn,vM,c6,ln,Dn,yn,n2,XI,Wt,cs,pi,ji,LB,Zs,Ml,$c,Nm,AJ,Tc,Ko,ua,gs,hQ,V6,mQ,cQ,JD,sv,dv,os,ip,JI],styles:['.expand-side-drawer[_ngcontent-%COMP%]{position:relative;top:4%;left:1%}.chat-container[_ngcontent-%COMP%]{width:100%;height:100%;max-width:100%;margin:auto;display:flex;flex-direction:column;flex:1}.chat-container.side-by-side[_ngcontent-%COMP%]{max-width:100%}.side-by-side-layout[_ngcontent-%COMP%]{display:flex;flex-direction:row;width:100%;height:100%;flex:1;overflow:hidden;gap:16px;padding:16px;box-sizing:border-box}.side-by-side-layout[_ngcontent-%COMP%] .side-panel-half[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;height:100%;min-width:0;background-color:var(--mat-sys-surface-container-low);border-radius:8px;overflow:hidden}.side-by-side-layout[_ngcontent-%COMP%] .side-panel-half[_ngcontent-%COMP%] .panel-header[_ngcontent-%COMP%]{padding:6px 16px;font-size:14px;font-weight:600;color:var(--mat-sys-on-surface);border-bottom:1px solid var(--mat-sys-outline-variant)}.side-by-side-layout[_ngcontent-%COMP%] .side-panel-half[_ngcontent-%COMP%] app-chat-panel[_ngcontent-%COMP%]{flex:1;overflow:hidden;display:flex;flex-direction:column}.event-container[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.chat-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;overflow:hidden;flex:1;min-height:12%;min-width:500px;box-shadow:none;border-radius:12px 0 0}.chat-card[_ngcontent-%COMP%] app-chat-panel[_ngcontent-%COMP%]{flex:1;min-height:0}.chat-card.no-side-panel[_ngcontent-%COMP%]{border-radius:0}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.content-bubble[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.function-event-button[_ngcontent-%COMP%]{margin:5px 5px 10px}.function-event-button-highlight[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary)!important;color:var(--mat-sys-on-primary)!important}.role-user[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center}.role-user[_ngcontent-%COMP%] .content-bubble[_ngcontent-%COMP%]{align-self:flex-end;color:var(--mat-sys-on-primary-container);background-color:var(--mat-sys-primary-container);box-shadow:none}.role-bot[_ngcontent-%COMP%]{display:flex;align-items:center}.role-bot[_ngcontent-%COMP%] .content-bubble[_ngcontent-%COMP%]{align-self:flex-start;color:var(--mat-sys-on-surface);background-color:var(--mat-sys-surface-container-high);box-shadow:none}.role-bot[_ngcontent-%COMP%]:focus-within .content-bubble[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline)}.message-textarea[_ngcontent-%COMP%]{max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--mat-sys-outline-variant);padding-right:8px;min-width:350px;max-width:350px}.content-bubble[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.content-bubble[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--mat-sys-outline-variant);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.header-actual[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:#2e7d32}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--mat-sys-error)}.navigation-button-sidepanel[_ngcontent-%COMP%]{margin-left:auto;margin-right:20px}.fab-button[_ngcontent-%COMP%]{position:fixed;bottom:200px;right:100px}.sidepanel-toggle[_ngcontent-%COMP%]{position:relative;top:100px}.side-drawer[_ngcontent-%COMP%]{color:var(--chat-side-drawer-color);border-radius:0}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;padding:5px;border-radius:4px}.empty-state-container[_ngcontent-%COMP%]{color:var(--chat-empty-state-container-color);height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:Google Sans,sans-serif;font-weight:400;letter-spacing:normal;line-height:24px;font-size:18px}.empty-state-container[_ngcontent-%COMP%] pre.warning[_ngcontent-%COMP%]{color:var(--chat-warning-color)}.empty-state-container[_ngcontent-%COMP%] pre.error[_ngcontent-%COMP%]{color:var(--chat-error-color)}.new-session-button[_ngcontent-%COMP%]{margin-top:0;width:130px;height:28px;font-size:14px}.adk-checkbox[_ngcontent-%COMP%]{position:fixed;bottom:0;left:0;right:0;margin-bottom:20px;margin-left:20px}.app-toolbar[_ngcontent-%COMP%]{height:48px;min-height:48px!important;display:flex;align-items:center;font-family:Google Sans,sans-serif;font-size:13px;padding:0 8px!important;z-index:1}.toolbar-group[_ngcontent-%COMP%]{display:flex;align-items:center;flex-shrink:0}.toolbar-agent-group[_ngcontent-%COMP%]{margin-right:6px}.toolbar-session-group[_ngcontent-%COMP%]{flex-shrink:1;min-width:0;flex:1}.toolbar-logo[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-right:16px;flex-shrink:0}.toolbar-logo-text[_ngcontent-%COMP%]{font-family:Google Sans,sans-serif;font-size:14px;font-weight:500;white-space:nowrap}.disclosure-info-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;opacity:.7;cursor:pointer;margin-right:16px;color:var(--chat-toolbar-icon-color)}.toolbar-content[_ngcontent-%COMP%]{display:flex;align-items:center;flex:1;min-width:0}.drawer-container[_ngcontent-%COMP%]{height:calc(100% - 48px)}.side-panel-container[_ngcontent-%COMP%]{width:100%;height:100%}.toolbar-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;flex-shrink:0}.toolbar-session-text[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-text-color);font-family:Google Sans,sans-serif;font-size:13px;font-style:normal;font-weight:500;text-transform:uppercase;flex-shrink:0}.toolbar-session-id[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-id-color);font-family:Google Sans Mono,monospace;font-size:13px;margin-left:5px}.readonly-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background-color:var(--mat-sys-primary-container)!important;color:var(--mat-sys-on-primary-container)!important;padding:4px 12px;border-radius:16px;font-size:13px;font-weight:500;gap:6px}.readonly-chip[_ngcontent-%COMP%] .chip-label[_ngcontent-%COMP%]{text-transform:uppercase;font-size:11px;font-weight:700;opacity:.9}.readonly-chip[_ngcontent-%COMP%] .chip-value[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.readonly-chip[_ngcontent-%COMP%] .chip-close-button[_ngcontent-%COMP%]{width:24px!important;height:24px!important;min-width:24px!important;padding:0!important;display:flex!important;align-items:center;justify-content:center;color:inherit!important;opacity:.8;margin-left:4px}.readonly-chip[_ngcontent-%COMP%] .chip-close-button[_ngcontent-%COMP%]:hover{opacity:1;background-color:#fff3!important}.toolbar-session-id-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-left:5px}.toolbar-session-id-container[_ngcontent-%COMP%] .toolbar-session-id[_ngcontent-%COMP%]{margin-left:0}.toolbar-icon-button[_ngcontent-%COMP%]{color:var(--chat-toolbar-icon-color);background:transparent!important;border:none!important;box-shadow:none!important}.toolbar-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.small-icon-button[_ngcontent-%COMP%]{width:28px!important;height:28px!important;min-width:28px!important;min-height:28px!important;padding:0!important}.small-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px!important;width:18px!important;height:18px!important}.toolbar-user-id-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-left:5px}.toolbar-user-id-input[_ngcontent-%COMP%]{width:140px;height:24px;border:1px solid var(--chat-toolbar-session-text-color);border-radius:4px;color:var(--chat-toolbar-session-id-color);padding:0 6px;font-family:Google Sans Mono,monospace;font-size:12px}.toolbar-user-id-input[_ngcontent-%COMP%]:focus{outline:1px solid var(--chat-toolbar-icon-color)}.user-avatar-button[_ngcontent-%COMP%]{margin-left:auto;flex-shrink:0}.user-avatar-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:24px;width:24px;height:24px}.user-menu-panel[_ngcontent-%COMP%]{padding:16px;min-width:240px}.user-menu-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-bottom:12px}.user-menu-avatar-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px;color:var(--chat-toolbar-icon-color)}.user-menu-label[_ngcontent-%COMP%]{font-size:14px;font-weight:500;color:var(--chat-toolbar-session-text-color);text-transform:uppercase}.user-menu-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.user-menu-id[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace;font-size:14px;color:var(--chat-toolbar-session-id-color);word-break:break-all}.user-menu-input[_ngcontent-%COMP%]{flex:1;height:28px;border:1px solid var(--chat-toolbar-session-text-color);border-radius:4px;color:var(--chat-toolbar-session-id-color);padding:0 8px;font-family:Google Sans Mono,monospace;font-size:13px;background:transparent}.user-menu-input[_ngcontent-%COMP%]:focus{outline:1px solid var(--chat-toolbar-icon-color)}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.readonly-badge[_ngcontent-%COMP%]{color:var(--mat-sys-on-primary-container)!important;background-color:var(--mat-sys-primary-container)!important;border-radius:16px;padding:4px 12px;display:flex;align-items:center;margin-left:8px;font-family:Google Sans,sans-serif;font-size:13px;line-height:18px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;flex-shrink:0}.readonly-session-message[_ngcontent-%COMP%]{display:block;color:var(--chat-toolbar-session-text-color);font-family:Google Sans,sans-serif;font-size:13px;margin-left:1em;font-weight:400;line-height:18px;letter-spacing:.3px;flex-shrink:1}.builder-mode-container[_ngcontent-%COMP%]{position:relative;width:100%;height:100vh;display:flex;flex-direction:column}.builder-exit-button[_ngcontent-%COMP%]{position:absolute;top:20px;right:20px;display:flex;gap:8px}.builder-mode-action-button[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color)!important;border-radius:50%!important;transition:all .2s ease!important;margin:0!important;padding:0!important;width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;border:1px solid var(--builder-tool-item-border-color)!important;box-shadow:0 2px 4px #0000001a!important;display:flex!important;align-items:center!important;justify-content:center!important}.builder-mode-action-button[_ngcontent-%COMP%]:hover{box-shadow:0 4px 8px #00000026!important}.builder-mode-action-button.active[_ngcontent-%COMP%]{color:#fff!important;border-color:var(--builder-button-primary-background-color)!important}.builder-mode-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}app-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important;min-height:0!important}.build-mode-container[_ngcontent-%COMP%]{display:flex;width:100%;height:100%}.build-left-panel[_ngcontent-%COMP%], .build-right-panel[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;border:1px solid var(--builder-border-color);margin:10px;border-radius:8px}.selector-group[_ngcontent-%COMP%]{display:flex;align-items:center;border-radius:6px;border:1px solid var(--mat-sys-outline-variant, #c4c7c5);margin-right:8px;flex-shrink:0;height:32px;overflow:hidden}.selector-group[_ngcontent-%COMP%] .toolbar-icon-button[_ngcontent-%COMP%]{width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.selector-group[_ngcontent-%COMP%] .toolbar-icon-button[_ngcontent-%COMP%] .mdc-icon-button__ripple{border-radius:4px;inset:1px}.selector-group[_ngcontent-%COMP%] .toolbar-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.selector-group-divider[_ngcontent-%COMP%]{width:1px;height:16px;background-color:var(--mat-sys-outline-variant, #c4c7c5);flex-shrink:0}.selector-button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 12px;margin-right:1px;border-radius:6px;border:none;background:transparent;cursor:pointer;color:var(--chat-toolbar-icon-color);font-family:Google Sans,sans-serif;font-size:13px;font-weight:500;height:100%;flex-shrink:0;white-space:nowrap;width:auto;max-width:220px;overflow:hidden;transition:background-color .15s ease;position:relative;z-index:0}.selector-button[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:1px;border-radius:4px;background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant));opacity:0;pointer-events:none;z-index:-1;transition:opacity .15s ease}.selector-button[_ngcontent-%COMP%]:hover:before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.selector-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0}.new-session-button[_ngcontent-%COMP%]{width:auto!important}.new-session-button.icon-only[_ngcontent-%COMP%]{width:32px!important;padding:0!important;justify-content:center}.selector-label[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;flex:1;text-align:left}.selector-caret[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0;margin-left:auto;opacity:.7}.selector-drawer-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:8px 8px 8px 20px;height:48px;flex-shrink:0}.selector-drawer-title[_ngcontent-%COMP%]{font-size:16px;font-weight:500;font-family:Google Sans,sans-serif}.selector-drawer[_ngcontent-%COMP%]{width:320px;background-color:var(--mat-sys-surface, #fff)}.selector-drawer[_ngcontent-%COMP%] .mat-drawer-inner-container{display:flex;flex-direction:column;height:100%;overflow:hidden}.selector-drawer.match-side-panel-width[_ngcontent-%COMP%]{width:var(--side-drawer-width)}.app-selector-search[_ngcontent-%COMP%]{padding:0 12px 4px;flex-shrink:0}.app-selector-search-field[_ngcontent-%COMP%]{width:100%;font-size:13px}.app-selector-search-field[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{min-height:36px;padding-top:6px!important;padding-bottom:6px!important}.app-selector-search-field[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-text-color);font-size:18px;width:18px;height:18px}.app-selector-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:0 8px}.app-selector-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:none;background:transparent;cursor:pointer;border-radius:8px;font-family:Google Sans Mono,monospace;font-size:13px;color:var(--chat-toolbar-icon-color);text-align:left;transition:background-color .15s ease}.app-selector-item[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant, rgba(0, 0, 0, .04))}.app-selector-item.selected[_ngcontent-%COMP%]{background-color:var(--mat-sys-secondary-container, #d7e3f7);font-weight:500}.app-selector-item-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;flex-shrink:0;color:var(--chat-toolbar-session-text-color)}.app-selector-check[_ngcontent-%COMP%]{margin-left:auto;font-size:18px;width:18px;height:18px}.app-selector-item-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-selector-loading[_ngcontent-%COMP%]{display:flex;justify-content:center;padding:24px}.app-selector-empty[_ngcontent-%COMP%]{text-align:center;padding:24px;color:var(--chat-toolbar-session-text-color);font-style:italic}.session-selector-current-id[_ngcontent-%COMP%]{padding:8px 20px;border-bottom:1px solid var(--mat-sys-outline-variant, #c4c7c5)}.session-selector-current-id-label[_ngcontent-%COMP%]{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:var(--mat-sys-on-surface-variant, #444746)}.session-selector-current-id-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.session-selector-current-id-value[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px;font-family:Google Sans,sans-serif;color:var(--mat-sys-on-surface, #1a1c20);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto;min-width:0}.session-selector-current-real-id-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.session-selector-current-real-id-value[_ngcontent-%COMP%]{font-size:11px;font-family:Google Sans Mono,monospace;color:var(--chat-toolbar-session-id-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto;min-width:0;opacity:.7}.session-selector-action-button[_ngcontent-%COMP%]{flex-shrink:0;width:28px!important;height:28px!important;padding:0!important}.session-selector-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.session-selector-drawer-content[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.build-panel-header[_ngcontent-%COMP%]{padding:16px 20px;border-bottom:1px solid var(--builder-border-color);border-radius:8px 8px 0 0}.build-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:16px;font-weight:500;font-family:Google Sans,Helvetica Neue,sans-serif}.build-panel-content[_ngcontent-%COMP%]{flex:1;padding:20px;color:var(--builder-text-secondary-color);overflow-y:auto}.build-panel-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5}.app-name-option[_ngcontent-%COMP%], .app-select[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.adk-web-developer-ui-disclaimer[_ngcontent-%COMP%]{padding-left:4px;padding-bottom:4px;font-size:10px;color:var(--adk-web-text-color-light-gray)}.menu-check-icon.inactive[_ngcontent-%COMP%]{visibility:hidden}.logo-narrow[_ngcontent-%COMP%]{display:none}@media(max-width:900px){.logo-wide[_ngcontent-%COMP%]{display:none}.logo-narrow[_ngcontent-%COMP%]{display:inline}}@media(max-width:750px){.toolbar-agent-group[_ngcontent-%COMP%] .selector-button[_ngcontent-%COMP%]{width:auto;padding:4px 8px}.toolbar-agent-group[_ngcontent-%COMP%] .selector-label[_ngcontent-%COMP%]{display:none}}@media(max-width:600px){.toolbar-session-group[_ngcontent-%COMP%] .selector-button[_ngcontent-%COMP%]{width:auto;padding:4px 8px}.toolbar-session-group[_ngcontent-%COMP%] .selector-label[_ngcontent-%COMP%]{display:none}}.chat-sub-toolbar[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;height:48px;flex-shrink:0;padding:0 20px;background-color:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{border-radius:16px;height:28px;align-items:center}.chat-sub-toolbar[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] .mat-button-toggle-label-content{line-height:28px;padding:0 12px;font-size:13px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-bar-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;background-color:transparent;border:none;margin-left:16px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:14px;padding:0 10px;font-size:13px;height:28px;cursor:pointer;transition:background-color .2s ease}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-label[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:var(--mat-sys-on-surface-variant);padding:0;margin-left:4px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px}.chat-sub-toolbar[_ngcontent-%COMP%] .filter-chip[_ngcontent-%COMP%] .chip-remove[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:transparent;border:1px dashed var(--mat-sys-outline-variant);border-radius:14px;padding:0 10px;font-size:13px;font-weight:500;height:28px;cursor:pointer;transition:all .2s ease;color:var(--mat-sys-on-surface-variant)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%]:hover{background-color:var(--mat-sys-surface-variant);border-color:var(--mat-sys-outline);color:var(--mat-sys-on-surface)}.chat-sub-toolbar[_ngcontent-%COMP%] .add-filter-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;margin-right:4px} .filter-panel{min-width:max-content!important;max-width:50vw} .filter-panel .mat-mdc-menu-item{min-height:32px!important;font-size:12px!important} .filter-panel .mat-mdc-menu-item .mat-mdc-menu-item-text, .filter-panel .mat-mdc-menu-item .mdc-list-item__primary-text{font-size:12px!important;line-height:normal}.metric-block[_ngcontent-%COMP%]:hover .metric-tooltip[_ngcontent-%COMP%]{visibility:visible!important;opacity:1!important}.metric-tooltip[_ngcontent-%COMP%]{visibility:hidden;opacity:0;position:absolute;z-index:100;top:110%;left:0;background:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;padding:12px;width:220px;box-shadow:0 4px 12px #00000026;transition:opacity .15s ease,visibility .15s ease;pointer-events:none}.metric-tooltip[_ngcontent-%COMP%] .tooltip-title[_ngcontent-%COMP%]{font-weight:600;font-size:13px;margin-bottom:4px;color:var(--mat-sys-on-surface)}.metric-tooltip[_ngcontent-%COMP%] .tooltip-desc[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);margin-bottom:8px;white-space:normal;line-height:1.4}.metric-tooltip[_ngcontent-%COMP%] .tooltip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:11px;border-top:1px solid var(--mat-sys-outline-variant);padding-top:6px}.metric-tooltip[_ngcontent-%COMP%] .tooltip-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:4px}.metric-tooltip[_ngcontent-%COMP%] .tooltip-label[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-weight:400}.metric-tooltip[_ngcontent-%COMP%] .tooltip-value[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}.info-icon-container[_ngcontent-%COMP%]{position:relative;display:inline-flex;align-items:center;cursor:pointer}.info-icon-container[_ngcontent-%COMP%]:hover .custom-tooltip[_ngcontent-%COMP%]{visibility:visible;opacity:1}.custom-tooltip[_ngcontent-%COMP%]{visibility:hidden;opacity:0;position:absolute;z-index:100;top:110%;left:50%;transform:translate(-50%);background:var(--mat-sys-surface-container-highest);border:1px solid var(--mat-sys-outline-variant);border-radius:8px;padding:12px;width:250px;box-shadow:0 4px 12px #00000026;transition:opacity .15s ease,visibility .15s ease;pointer-events:none;white-space:normal}.custom-tooltip[_ngcontent-%COMP%] .tooltip-title[_ngcontent-%COMP%]{font-weight:600;font-size:13px;margin-bottom:4px;color:var(--mat-sys-on-surface)}.custom-tooltip[_ngcontent-%COMP%] .tooltip-desc[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant);margin-bottom:8px;line-height:1.4}.custom-tooltip[_ngcontent-%COMP%] .tooltip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:4px;font-size:11px;border-top:1px solid var(--mat-sys-outline-variant);padding-top:6px}.custom-tooltip[_ngcontent-%COMP%] .tooltip-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:4px}.custom-tooltip[_ngcontent-%COMP%] .tooltip-label[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-weight:400}.custom-tooltip[_ngcontent-%COMP%] .tooltip-value[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface)}']})};var wQ=class t{static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(A,i){A&1&&QA(0,"app-chat")},dependencies:[Ev],encapsulation:2})};var mGA=[{path:"",component:wQ}],hv=class t{static \u0275fac=function(A){return new(A||t)};static \u0275mod=Ze({type:t});static \u0275inj=We({imports:[Rm.forRoot(mGA),Rm]})};var Qv=class{static getRuntimeConfig(){return window.runtimeConfig}};function wGA(t,e){if(t&1&&(wn(0,"a",0),Kn(1,"img",1),y(2),Gn()),t&2){p();let A=zn(0),i=zn(1);u(),ha("src",XC(A),Go),u(),ue(" ",i," ")}}function DGA(t,e){t&1&&(wn(0,"div"),y(1," Invalid custom logo config. Make sure that your runtime config specifies both imgUrl and text in the logo field. "),Gn())}var uv=class t{logoConfig=Qv.getRuntimeConfig().logo;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=SA({type:t,selectors:[["app-custom-logo"]],decls:4,vars:3,consts:[["href","/"],["width","32px","height","32px",1,"orcas-logo",3,"src"]],template:function(A,i){if(A&1&&(ta(0)(1),O(2,wGA,3,3,"a",0)(3,DGA,2,0,"div")),A&2){let n=ga(i.logoConfig==null?null:i.logoConfig.imageUrl);u();let o=ga(i.logoConfig==null?null:i.logoConfig.text);u(),Y(n&&o?2:3)}},styles:[`a[_ngcontent-%COMP%]{color:inherit;text-decoration:none;display:flex;align-items:center;gap:8px} + + + + + + + + + + + + + + + + +`]})};var yGA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-as-n":!0,"layout-dis-iflx":!0,"layout-al-c":!0},vGA={"layout-w-100":!0},bGA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-mt-0":!0,"layout-mb-2":!0,"typography-sz-bm":!0,"color-c-n10":!0},MGA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-pt-3":!0,"layout-pb-3":!0,"layout-pl-5":!0,"layout-pr-5":!0,"layout-mb-1":!0,"border-br-16":!0,"border-bw-0":!0,"border-c-n70":!0,"border-bs-s":!0,"color-bgc-s30":!0,"color-c-n100":!0,"behavior-ho-80":!0},QF={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mb-2":!0,"color-c-n10":!0},SGA=Ye(gA({},QF),{"typography-sz-tl":!0}),kGA=Ye(gA({},QF),{"typography-sz-tm":!0}),xGA=Ye(gA({},QF),{"typography-sz-ts":!0}),_GA={"behavior-sw-n":!0},hiA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-pl-4":!0,"layout-pr-4":!0,"layout-pt-2":!0,"layout-pb-2":!0,"border-br-6":!0,"border-bw-1":!0,"color-bc-s70":!0,"border-bs-s":!0,"layout-as-n":!0,"color-c-n10":!0},RGA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0,"color-c-n10":!0},NGA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},FGA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},LGA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},GGA={"typography-f-c":!0,"typography-fs-n":!0,"typography-w-400":!0,"typography-sz-bm":!0,"typography-ws-p":!0,"layout-as-n":!0},KGA=Ye(gA({},hiA),{"layout-r-none":!0,"layout-fs-c":!0}),UGA={"layout-el-cv":!0},CiA=Ts.merge(yGA,{"color-c-p30":!0}),TGA=Ts.merge(hiA,{"color-c-n5":!0}),JGA=Ts.merge(KGA,{"color-c-n5":!0}),OGA=Ts.merge(MGA,{"color-c-n100":!0}),IiA=Ts.merge(SGA,{"color-c-n5":!0}),diA=Ts.merge(kGA,{"color-c-n5":!0}),BiA=Ts.merge(xGA,{"color-c-n5":!0}),YGA=Ts.merge(bGA,{"color-c-n5":!0}),EiA=Ts.merge(RGA,{"color-c-n60":!0}),HGA=Ts.merge(GGA,{"color-c-n35":!0}),zGA=Ts.merge(NGA,{"color-c-n35":!0}),PGA=Ts.merge(FGA,{"color-c-n35":!0}),jGA=Ts.merge(LGA,{"color-c-n35":!0}),QiA={additionalStyles:{Card:{},Button:{"--n-60":"var(--n-100)"},Image:{"max-width":"120px","max-height":"120px",marginLeft:"auto",marginRight:"auto"}},components:{AudioPlayer:{},Button:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-5":!0,"layout-pr-5":!0,"border-br-2":!0,"border-bw-0":!0,"border-bs-s":!0,"color-bgc-p30":!0,"color-c-n100":!0,"behavior-ho-70":!0},Card:{"border-br-4":!0,"color-bgc-p100":!0,"color-bc-n90":!0,"border-bw-1":!0,"border-bs-s":!0,"layout-pt-4":!0,"layout-pb-4":!0,"layout-pl-4":!0,"layout-pr-4":!0},CheckBox:{element:{"layout-m-0":!0,"layout-mr-2":!0,"layout-p-2":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0},label:{"color-c-p30":!0,"typography-f-sf":!0,"typography-v-r":!0,"typography-w-400":!0,"layout-flx-1":!0,"typography-sz-ll":!0},container:{"layout-dsp-iflex":!0,"layout-al-c":!0}},Column:{},DateTimeInput:{container:{},label:{},element:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0}},Divider:{"color-bgc-n90":!0,"layout-mt-6":!0,"layout-mb-6":!0},Image:{all:{"border-br-50pc":!0,"layout-el-cv":!0,"layout-w-100":!0,"layout-h-100":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0,"layout-mb-3":!0},avatar:{},header:{},icon:{},largeFeature:{},mediumFeature:{},smallFeature:{}},Icon:{"border-br-1":!0,"layout-p-2":!0,"color-bgc-n98":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0},List:{"layout-g-4":!0,"layout-p-2":!0},Modal:{backdrop:{"color-bbgc-p60_20":!0},element:{"border-br-2":!0,"color-bgc-p100":!0,"layout-p-4":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bc-p80":!0}},MultipleChoice:{container:{},label:{},element:{}},Row:{"layout-g-4":!0},Slider:{container:{},label:{},element:{}},Tabs:{container:{},controls:{all:{},selected:{}},element:{}},Text:{all:{"layout-w-100":!0,"layout-g-2":!0,"color-c-p30":!0},h1:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h2:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h3:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-ts":!0},h4:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-bl":!0},h5:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"color-c-n30":!0,"typography-sz-bm":!0,"layout-mb-1":!0},body:{},caption:{}},TextField:{container:{"typography-sz-bm":!0,"layout-w-100":!0,"layout-g-2":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0},label:{"layout-flx-0":!0},element:{"typography-sz-bm":!0,"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0}},Video:{"border-br-5":!0,"layout-el-cv":!0}},elements:{a:CiA,audio:vGA,body:YGA,button:OGA,h1:IiA,h2:diA,h3:BiA,h4:{},h5:{},iframe:_GA,input:TGA,p:EiA,pre:HGA,textarea:JGA,video:UGA},markdown:{p:[...Object.keys(EiA)],h1:[...Object.keys(IiA)],h2:[...Object.keys(diA)],h3:[...Object.keys(BiA)],h4:[],h5:[],ul:[...Object.keys(PGA)],ol:[...Object.keys(zGA)],li:[...Object.keys(jGA)],a:[...Object.keys(CiA)],strong:[],em:[]}};var fv=class t{nodes=[];subAgentIdCounter=1;selectedToolSubject=new ei(void 0);selectedNodeSubject=new ei(void 0);selectedCallbackSubject=new ei(void 0);loadedAgentDataSubject=new ei(void 0);agentToolsMapSubject=new ei(new Map);agentToolsSubject=new ei(void 0);newAgentToolBoardSubject=new ei(void 0);agentCallbacksMapSubject=new ei(new Map);agentCallbacksSubject=new ei(void 0);agentToolDeletionSubject=new ei(void 0);deleteSubAgentSubject=new ei("");addSubAgentSubject=new ei({parentAgentName:""});tabChangeSubject=new ei(void 0);agentToolBoardsSubject=new ei(new Map);constructor(){}getNode(e){return this.nodes.find(i=>i.name===e)}getRootNode(){return this.nodes.find(A=>!!A.isRoot)}addNode(e){let A=this.nodes.findIndex(l=>l.name===e.name);A!==-1?this.nodes[A]=e:this.nodes.push(e);let i=/^sub_agent_(\d+)$/,n=e.name.match(i);if(n){let l=parseInt(n[1],10);l>=this.subAgentIdCounter&&(this.subAgentIdCounter=l+1)}let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e.name,e.tools||[]),this.agentToolsMapSubject.next(a);let r=this.agentCallbacksMapSubject.value,s=new Map(r);s.set(e.name,e.callbacks||[]),this.agentCallbacksMapSubject.next(s),this.setSelectedNode(this.selectedNodeSubject.value)}getNodes(){return this.nodes}clear(){this.nodes=[],this.subAgentIdCounter=1,this.setSelectedNode(void 0),this.setSelectedTool(void 0),this.agentToolsMapSubject.next(new Map),this.agentCallbacksMapSubject.next(new Map),this.setSelectedCallback(void 0),this.setAgentTools(),this.setAgentCallbacks()}getSelectedNode(){return this.selectedNodeSubject.asObservable()}setSelectedNode(e){this.selectedNodeSubject.next(e)}getSelectedTool(){return this.selectedToolSubject.asObservable()}setSelectedTool(e){this.selectedToolSubject.next(e)}getSelectedCallback(){return this.selectedCallbackSubject.asObservable()}setSelectedCallback(e){this.selectedCallbackSubject.next(e)}getNextSubAgentName(){return`sub_agent_${this.subAgentIdCounter++}`}addTool(e,A){let i=this.getNode(e);if(i){let n=i.tools||[];i.tools=[A,...n];let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e,i.tools),this.agentToolsMapSubject.next(a)}}deleteTool(e,A){let i=this.getNode(e);if(i&&i.tools){let n=i.tools.length;if(i.tools=i.tools.filter(o=>o.name!==A.name),i.tools.lengthr.name===A.name))return{success:!1,error:`Callback with name '${A.name}' already exists`};i.callbacks.push(A),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),{success:!0}}catch(i){return{success:!1,error:"Failed to add callback: "+i.message}}}updateCallback(e,A,i){try{let n=this.getNode(e);if(!n)return{success:!1,error:"Agent not found"};if(!n.callbacks)return{success:!1,error:"No callbacks found for this agent"};let o=n.callbacks.findIndex(g=>g.name===A);if(o===-1)return{success:!1,error:"Callback not found"};if(n.callbacks.some((g,C)=>C!==o&&g.name===i.name))return{success:!1,error:`Callback with name '${i.name}' already exists`};let r=gA(gA({},n.callbacks[o]),i);n.callbacks[o]=r,this.agentCallbacksSubject.next({agentName:e,callbacks:n.callbacks});let s=this.agentCallbacksMapSubject.value,l=new Map(s);return l.set(e,n.callbacks),this.agentCallbacksMapSubject.next(l),this.selectedCallbackSubject.value?.name===A&&this.setSelectedCallback(r),{success:!0}}catch(n){return{success:!1,error:"Failed to update callback: "+n.message}}}deleteCallback(e,A){try{let i=this.getNode(e);if(!i)return{success:!1,error:"Agent not found"};if(!i.callbacks)return{success:!1,error:"No callbacks found for this agent"};let n=i.callbacks.findIndex(r=>r.name===A.name);if(n===-1)return{success:!1,error:"Callback not found"};i.callbacks.splice(n,1),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),this.selectedCallbackSubject.value?.name===A.name&&this.setSelectedCallback(void 0),{success:!0}}catch(i){return{success:!1,error:"Failed to delete callback: "+i.message}}}setLoadedAgentData(e){this.loadedAgentDataSubject.next(e)}getLoadedAgentData(){return this.loadedAgentDataSubject.asObservable()}getAgentToolsMap(){return this.agentToolsMapSubject.asObservable()}getAgentCallbacksMap(){return this.agentCallbacksMapSubject.asObservable()}requestSideTabChange(e){this.tabChangeSubject.next(e)}getSideTabChangeRequest(){return this.tabChangeSubject.asObservable()}requestNewTab(e,A){this.newAgentToolBoardSubject.next({toolName:e,currentAgentName:A})}getNewTabRequest(){return this.newAgentToolBoardSubject.asObservable().pipe(we(A=>A?{tabName:A.toolName,currentAgentName:A.currentAgentName}:void 0))}requestTabDeletion(e){this.agentToolDeletionSubject.next(e)}getTabDeletionRequest(){return this.agentToolDeletionSubject.asObservable()}setAgentToolBoards(e){this.agentToolBoardsSubject.next(e)}getAgentToolBoards(){return this.agentToolBoardsSubject.asObservable()}getCurrentAgentToolBoards(){return this.agentToolBoardsSubject.value}getAgentTools(){return this.agentToolsSubject.asObservable()}getDeleteSubAgentSubject(){return this.deleteSubAgentSubject.asObservable()}setDeleteSubAgentSubject(e){this.deleteSubAgentSubject.next(e)}getAddSubAgentSubject(){return this.addSubAgentSubject.asObservable()}setAddSubAgentSubject(e,A,i){this.addSubAgentSubject.next({parentAgentName:e,agentClass:A,isFromEmptyGroup:i})}setAgentTools(e,A){if(e&&A){this.agentToolsSubject.next({agentName:e,tools:A});let i=this.agentToolsMapSubject.value,n=new Map(i);n.set(e,A),this.agentToolsMapSubject.next(n)}else this.agentToolsSubject.next(void 0)}getAgentCallbacks(){return this.agentCallbacksSubject.asObservable()}setAgentCallbacks(e,A){e&&A?this.agentCallbacksSubject.next({agentName:e,callbacks:A}):this.agentCallbacksSubject.next(void 0)}getParentNode(e,A,i,n){if(e){if(e.name===A.name)return i;for(let o of e.sub_agents){let a=this.getParentNode(o,A,e,n);if(a)return a}if(e.tools){for(let o of e.tools)if(o.toolType==="Agent Tool"){let a=n.get(o.toolAgentName||o.name);if(a){let r=this.getParentNode(a,A,e,n);if(r)return r}}}}}deleteNode(e){this.nodes=this.nodes.filter(A=>A.name!==e.name),this.setSelectedNode(this.selectedNodeSubject.value)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var pv=class t{constructor(e){this.http=e}apiServerDomain=Dr.getApiServerBaseUrl();getLatestArtifact(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}`;return this.http.get(o)}getArtifactVersion(e,A,i,n,o){let a=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}/versions/${o}`;return this.http.get(a)}static \u0275fac=function(A){return new(A||t)(Lo(fr))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var mv=class t{audioContext=new AudioContext({sampleRate:22e3});lastAudioTime=0;scheduledAudioSources=new Set;playAudio(e){let A=this.combineAudioBuffer(e);A&&this.playPCM(A)}stopAudio(){for(let e of this.scheduledAudioSources)e.onended=null,e.stop();this.scheduledAudioSources.clear(),this.lastAudioTime=this.audioContext.currentTime}combineAudioBuffer(e){if(e.length===0)return;let A=e.reduce((o,a)=>o+a.length,0),i=new Uint8Array(A),n=0;for(let o of e)i.set(o,n),n+=o.length;return i}playPCM(e){let A=new Float32Array(e.length/2);for(let r=0;r=32768&&(s-=65536),A[r]=s/32768}let i=this.audioContext.createBuffer(1,A.length,22e3);i.copyToChannel(A,0);let n=this.audioContext.createBufferSource();n.buffer=i,n.connect(this.audioContext.destination),n.onended=()=>{this.scheduledAudioSources.delete(n)},this.scheduledAudioSources.add(n);let o=this.audioContext.currentTime,a=Math.max(this.lastAudioTime,o);n.start(a),this.lastAudioTime=a+i.duration}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var wv=class t{audioWorkletModulePath=w(l6);stream;audioContext;source;audioBuffer=[];volumeLevel=bA(0);lastVolumeUpdate=0;startRecording(){return lt(this,null,function*(){try{this.stream=yield navigator.mediaDevices.getUserMedia({audio:!0}),this.audioContext=new AudioContext,yield this.audioContext.audioWorklet.addModule(this.audioWorkletModulePath),this.source=this.audioContext.createMediaStreamSource(this.stream);let e=new AudioWorkletNode(this.audioContext,"audio-processor");e.port.onmessage=A=>{let i=A.data,n=Date.now();if(n-this.lastVolumeUpdate>100){let a=0;for(let l=0;le.stop()),this.volumeLevel.set(0)}getCombinedAudioBuffer(){if(this.audioBuffer.length===0)return;let e=this.audioBuffer.reduce((n,o)=>n+o.length,0),A=new Uint8Array(e),i=0;for(let n of this.audioBuffer)A.set(n,i),i+=n.length;return A}cleanAudioBuffer(){this.audioBuffer=[]}float32ToPCM(e){let A=new ArrayBuffer(e.length*2),i=new DataView(A);for(let n=0;n{let n=i.metricsInfo||[];this.metricsInfoCache.set(e,n),this.metricsInfo.set(n)}))}return new vi}createNewEvalSet(e,A,i="live"){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${e}/eval-sets`;return this.http.post(n,{eval_set:{eval_set_id:A,model_execution_mode:i,tool_execution_mode:i,eval_cases:[]}})}return new vi}getEvalSet(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${e}/eval_sets/${A}`;return this.http.get(i,{})}return new vi}listEvalCases(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/evals`;return this.http.get(i,{})}return new vi}addCurrentSession(e,A,i,n,o){let a=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/add_session`;return this.http.post(a,{evalId:i,sessionId:n,userId:o})}runEval(e,A,i,n){let o=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/run_eval`;return this.http.post(o,{evalIds:i,evalMetrics:n})}listEvalResults(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/apps/${e}/eval_results`;return this.http.get(A,{})}return new vi}getEvalResult(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${e}/eval_results/${encodeURIComponent(A)}`;return this.http.get(i,{})}return new vi}getEvalCase(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/evals/${i}`;return this.http.get(n,{})}return new vi}updateEvalCase(e,A,i,n){let o=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/evals/${i}`;return this.http.put(o,{evalId:i,conversation:n.conversation,sessionInput:n.sessionInput,creationTimestamp:n.creationTimestamp})}deleteEvalCase(e,A,i){let n=this.apiServerDomain+`/apps/${e}/eval_sets/${A}/evals/${i}`;return this.http.delete(n,{})}deleteEvalSet(e,A){let i=this.apiServerDomain+`/apps/${e}/eval_sets/${A}`;return this.http.delete(i,{})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var uF="gcp.vertex.agent.tool_call_args",fF="gcp.vertex.agent.tool_response",vv="gcp.vertex.agent.llm_request",bv="gcp.vertex.agent.llm_response",uiA="execute_tool",fiA="generate_content",qGA="content",VGA="parts",WGA="functionResponse",piA=t=>{let e=Ye(gA({},t),{attributes:gA({},t.attributes)}),A=t?.attributes?.[vv]??ZGA(t),i=t?.attributes?.[bv]??eKA(t);return A!==void 0&&(e.attributes[vv]=A),i!==void 0&&(e.attributes[bv]=i),e},ZGA=t=>t.name.startsWith(uiA)?t.attributes?.[uF]:t.name.startsWith(fiA)?miA(t.logs):void 0,XGA=t=>{let e=$GA(t),A=miA(t);return JSON.stringify({system_message:e,user_message:pF(A)})},miA=t=>{if(!t)return;let e=t.reverse().find(AKA);if(!e)return;let A=typeof e.body=="string"?pF(e.body):e.body;return typeof A=="string"?A:(A.content.role="user",A.contents=[A.content],delete A.content,JSON.stringify(A))},$GA=t=>{if(!t)return;let e=t.reverse().find(A=>A.event_name==="gen_ai.system.message");if(e)return typeof e.body=="string"?pF(e.body):e.body},AKA=t=>{if(t.event_name!=="gen_ai.user.message")return!1;try{let A=(typeof t.body=="string"?JSON.parse(t.body):t.body)[qGA]?.[VGA];return Array.isArray(A)?A.every(i=>!i[WGA]):!1}catch(e){return!1}},eKA=t=>t.name.startsWith(uiA)?t.attributes?.[fF]:t.name.startsWith(fiA)?wiA(t.logs):void 0,wiA=t=>{if(!t)return;let e=t.reverse().find(A=>A.event_name==="gen_ai.choice");if(e)return tKA(e)},pF=t=>{try{return JSON.parse(t)}catch(e){return t}},tKA=t=>typeof t.body=="string"?t.body:JSON.stringify(t.body),DiA=t=>{let e=t[vv]??iKA(t),A=t[bv]??nKA(t),i=gA({},t);return e!==void 0&&(i[vv]=e),A!==void 0&&(i[bv]=A),i},iKA=t=>{if(uF in t)return`${t[uF]}`;if(t.logs)return XGA(t.logs)},nKA=t=>{if(fF in t)return`${t[fF]}`;if(t.logs)return wiA(t.logs)};var Mv=class t{constructor(e){this.http=e}apiServerDomain=Dr.getApiServerBaseUrl();getEventTrace(e){let A=this.apiServerDomain+`/debug/trace/${e.id}`;return this.http.get(A).pipe(we(n=>DiA(n)))}getTrace(e){let A=this.apiServerDomain+`/debug/trace/session/${e}`;return this.http.get(A).pipe(we(n=>Array.isArray(n)?n.map(piA):n))}getEvent(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/events/${n}/graph`;return this.http.get(o)}static \u0275fac=function(A){return new(A||t)(Lo(fr))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Sv=class t{route=w(Vs);constructor(){}isImportSessionEnabled(){return oe(!0)}isEditFunctionArgsEnabled(){return this.route.queryParams.pipe(we(e=>e[eJ]==="true"))}isSessionUrlEnabled(){return oe(!0)}isA2ACardEnabled(){return this.route.queryParams.pipe(we(e=>e[tJ]==="true"))}isApplicationSelectorEnabled(){return oe(!0)}isAlwaysOnSidePanelEnabled(){return oe(!1)}isTraceEnabled(){return oe(!0)}isArtifactsTabEnabled(){return oe(!0)}isEvalEnabled(){return oe(!0)}isEvalV2Enabled(){return this.route.queryParams.pipe(we(e=>e[nJ]==="true"))}isTestsEnabled(){return this.route.queryParams.pipe(we(e=>e[iJ]==="true"))}isTokenStreamingEnabled(){return oe(!0)}isMessageFileUploadEnabled(){return oe(!0)}isManualStateUpdateEnabled(){return oe(!0)}isBidiStreamingEnabled(){return oe(!0)}isExportSessionEnabled(){return oe(!0)}isEventFilteringEnabled(){return oe(!1)}isDeleteSessionEnabled(){return oe(!0)}isLoadingAnimationsEnabled(){return oe(!0)}isSessionsTabReorderingEnabled(){return oe(!1)}isSessionFilteringEnabled(){return oe(!1)}isSessionReloadOnNewMessageEnabled(){return oe(!1)}isUserIdOnToolbarEnabled(){return oe(!0)}isDeveloperUiDisclaimerEnabled(){return oe(!0)}isFeedbackServiceEnabled(){return oe(!1)}isInfinityMessageScrollingEnabled(){return oe(!1)}isMoreOptionsButtonHidden(){return oe(!1)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var kv=class t{sendFeedback(e,A,i){return oe(void 0)}getFeedback(e,A){return oe(void 0)}deleteFeedback(e,A){return oe(void 0)}getPositiveFeedbackReasons(){return oe([])}getNegativeFeedbackReasons(){return oe([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var oKA=(()=>{var t=import.meta.url;return function(e={}){var A,i=e,n,o,a=new Promise((D,M)=>{n=D,o=M});i.agerrMessages=[],i.stderrMessages=[],h=D=>i.stderrMessages.push(D);var r=Object.assign({},i),s="./this.program",l=(D,M)=>{throw M},g="",C,I;typeof document<"u"&&document.currentScript&&(g=document.currentScript.src),t&&(g=t),g.startsWith("blob:")?g="":g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1),C=D=>fetch(D,{credentials:"same-origin"}).then(M=>M.ok?M.arrayBuffer():Promise.reject(new Error(M.status+" : "+M.url)));var d=console.log.bind(console),h=console.error.bind(console);Object.assign(i,r),r=null;var E;function f(D){for(var M=atob(D),R=new Uint8Array(M.length),V=0;VD.startsWith(Ue);function YA(){var D="data:application/octet-stream;base64,AGFzbQEAAAABmAd0YAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBH9/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AFf39/f38AYAZ/f39/f38AYAh/f39/f39/fwF/YAAAYAABf2AHf39/f39/fwF/YAF8AXxgAn9/AXxgAX8BfGAHf39/f39/fwBgA39/fwF8YAd/f39/fHx/AGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgBX9+fn5+AGAEf39/fABgCn9/f39/f39/f38Bf2ADf35/AX5gBH9/fHwBf2ADfHx8AXxgCX9/f39/f39/fwBgA39/fgBgAAF8YAR/f39/AXxgAn9/AX5gBX9/f39+AX9gA39/fgF/YAp/f39/f39/f39/AGAEf35+fwBgBH9/fH8AYAJ/fgBgAnx/AXxgBH9/f3wBf2ABfwF+YAJ/fgF/YAJ/fAF/YAN8fH8BfGADf3x/AGAIf39/f39/f38AYAV/f39/fAF/YAt/f39/f39/f39/fwF/YAN/f3wAYAV/f35/fwBgBH9/fH8Bf2AAAX5gB39/f398f38Bf2AFf39/f3wAYAN/f3wBf2ADf35/AX9gAn19AX1gBH9/fX8AYAZ/fHx8fHwBfGADf39/AX5gDH9/f39/f39/f39/fwF/YAV/f3x/fwF/YAd/f398fH9/AGAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgBH9/f38BfmAGf3x/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gB39/f39+f38Bf2AGf39/f39+AX9gAn5/AGAEf35/fwF/YAR/f3x8AXxgBX9/fH9/AGAJf39/f39/f39/AX9gBH9/fHwAYAR+fn5+AX9gAn99AX9gAn5/AX9gCH9/f398fHx/AGADf31/AGAGf39+fn5/AGABfAF/YAJ+fgF9YAJ/fQBgBH9/f34BfmAGf31/f39/AGADf3x8AX9gBX9/f3x/AGAFf398fH8AYAZ8fHx/f38AYAJ+fgF8YAJ8fwF/YAR/fHx8AGAGf39/f398AGAEf3x/fwBgBnx8f3x8fwBgB398fHx8fHwAYAV/fHx8fAF/YAF/AX1gA39/fwF9YAN+fn4Bf2AEf35+fgBgBH98f38Bf2AKf3x/f39/f39/fwBgBX9/fHx8AGAFf39/f38BfGADfHx8AX9gBHx8fHwBfAKRARgBYQFhAAcBYQFiAAUBYQFjACIBYQFkAAYBYQFlAAYBYQFmAAIBYQFnAAMBYQFoAAEBYQFpAA0BYQFqAAMBYQFrAAIBYQFsAAYBYQFtAEsBYQFuAEwBYQFvAAIBYQFwAE0BYQFxAAcBYQFyAE4BYQFzAAABYQF0AAABYQF1AAYBYQF2AAABYQF3AAABYQF4AAYDgRT/EwEAAAACAAUDAwIGGAICAAACGAQAAAIADQAEEAUBAgYEAwIGDQIFAAACBCcABAACGAcEEAJPAAACAQMCBAICAhAEBAAAAQQIAgYCBgACBA4FAhoAAwEBAAIABQMCBQUCAgICAxYBAwUEBAACAgUDBgcDAgQAAwMiAwQNAwAKAgIGAwICABoYBDcCUAICBQIOABgAFAIADQIHBCgaCgYHAwQEAQYCAQQFBAQFAgIKAgAHBAINAgIAAwIFAAQEAQE4IiMBAwMECAIDBBEEAwMEAAQEBQMCAikAAgcGBAQEAgIEBAQEBQUDAwIDAgIPBAcCFgUEBAUEAQAqAAICBQEEFgEGCAYJAQEDAwADAAQICAYDAgAFFgMCEhABACMKAhIIBAsEAgUGABkAAQEAUQIMDAcAAAIAAwIUBAcAAAIAAAMEAwYBOQIBBAMBBAIDUgIAAQA6FQACAgIEBAQCAAIHAgUaKwMCBwQZEQcEBQoKATsELAAFLQQbGwAFBAQABQgKBAECAQUCAAQECQkFAAACAihTAgMAAREALAACAAsAAAMCAQAEAlQEAi4FAAQCAgQCBAgOBAAFEQIEAgQGAgUAABwCHAIAAgQCAAMEAlUCAwEGAgIBAQgOViIAB1cEOwEFDAIGAhERBQcvAwEKAQIEBQEAAAQDAQIECwFYAgABAQkDBAECAwEIBwADBAUABAUEBwUDAAIJWTAYEAUBBQYAAgMHCAQpAgEBAQ0BBwIHAAIDBjgAAQMEAgAABAEBBQEEBQIAIAUEBAAEAhkFAgEECAcEBgYBAgEGBQYGCQ4ABwACBgECAgAAAAAKCgcBAAYAAgoEAgICAgIFBAEEAAICBAQDBwAPAA8DAAIBBQAFBAQCAQAEWlsEBgJcAAACAAYBBBMEPAY9AgIOEAQFFAEAFAcKAAQEHgIDERseBV0EPgcHEgcEEQIHAQcFGwI/PwcGBAQFAwcHARMCBQgIBAQEBQMEAAIEBAIEAgAFMQUDATIBMQEBBQEEAxsACQMBAw4BAQQFAQEBBQMABAIABQcGAQMEBwReAgYEAwwABQYGBgYBBgIECAICACEPAwYBAAIBAgYGAgAFAQAFXwIABwgEAwQACQkDBWAABwUAYQcMBgYMBQULAgUHAAUEAARAAgIAAgMCAAACAAoEAQIBA0EKAwBBCgICAwICBgUvAgAqBAJiAAgAAwcHAQIACgcDBQACEANjARAAEABkBQQBAQNCBgUABQUSEgAOAQoBAQMMAAAABQAGAQQCDwQCAAAEAgQHAAQBCAkFBAUFAwEEBQQNAQYILwoCAgQABxMjAgACAgYBAQAAAgACBAUUBAEAAQMTQwEAAQAAAQEKAAQEDgUHBAQBASQBAAYAAgUCAgQEAQEEAwUDBAABCQIIAAIBBAINLgEEBAQHBQUHBwIBZRsUBwcGBgMIAwMFAwMDBh0EBAAOEwUBBAEEBQYECmYDAAIEBAIDBQQPAAMEGGdoGWkEAwQFBQYCCwABBAUIBQUFEgIEAQECAgQBAgADBAQBAQYPBAktAgQBBAcMAAIEagQCCQkPBAkGBhwAAAIGBQABPAEIBQMABgYGCAMBBgYGCAADBgYGCAYcAzQcBwACAQQDAAUAAAAEAgUIBAEFBQUFIQErJgIFAgIEAwACAAABBAIAAgQABwUFAAQBAxJEF0NEBAAFAhIUBQIBBAAAAA0AAxYLAwMDCUUJRQYGAAUPAgYHDwwGCQgFAgEBAgEHAzIFBTJAAQIBAgIEAgQBBQIEAgUDBQIBAgIIDAwIDAwCCA4MAgABAQEEAgEBBAIDA0YnA0YnAgIKAAQ0BAICAAUENAQEAAQLCgsLCgsLAgMTEwEDEwETCQQDBxRrRwYJBkcGAAAFAgYBAggAAgICAgIAAAACBAIFBwUHAQACBQQFBAICBAIAAgUBAAICAgIABwEabAEAAAQDIQMOBwIPKwQQBDAkBxoobQABBAIFAgMNAzUEAQQ9AgICEBAOAwgBBAQEBBEOAQEBBgEFNSkABQQAAQoEBAIBAAQEBQAFExYFAwQCAQ0DbkI3BQtvICwBBAEEAxILAQVwADEFBAIHCQQBAwcFcQQEAw0BAQQEGQEDBwcwAwRyBAgFAAABAAMFCAEAAQ0FBAICBgIHAQAFAQMAAwMHBQADBQUDAAMHIwAFBT4NAwcFBjkFBwQKEQcHCgoGChYBAQEKBgcDCy4KAgMBAQEEBgcBBBEEBAQBAgECEgEFAgIBBgcCAAQFARIEBAQBAAEGAwIABQcCCQQkCAQBAgEUBAEDACoEBAEBAQAABQQCBAAABhkCAwsDBgICAQEFBwIBAAQABAIZBAIBAQEBAQEBBwcBAQQCAgoAAgALAAADCBMECwcKBgAEBAEAAAYGBAcIAAMBAAIBNQUFDQQEBhYEABQDBwoECgsHBwUCAQECBAAIAwEEAQEBBQQBAAMFAgUEBwQEACQABQAAAAMBAQMBBAEBAC0BAwIECgQEBAEEBAQHAQcEAQEBBAEAAQECAAYBAgEEBgIDBgoOCjpzAwgRAwAAAAMEAQcHBAAFAwcEBAQFBQEKAQEBAQcBAQEKBAUHBwUFCgEBAQcBAQEKAQEABQcHBQQFAQEAAQEFBwcFBQEBAQEBBwAfHx8fAQUEBQQFBQECAgICAgACAgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAUGBgYGBggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBgcDAAYAAAYGBgYGBgYICAgGBwMABgAABgYGBgYGBgAAAAAAAAAICAgIBgMABgAABgYGBgYGBQYDBgYmAwYGByEICAAAAAgEBAAABAAECAAHAQAEBAQAAAQABwEBAQEBAQEBAAAAAxcVFRcVFxUVFxUXFRcVAAMAAQAOAgEBAgICCwsLCgoKBwcHAwEBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECBAQEBAQEAgIBAQIIAggMDAEICAMGAwADAAEIAwYDAAMABgYGAwELCwlJCUkPDw8PDw8MAgkJCQkJDAkJCQkJCEozJQglCAgISjMlCCUICAkJCQkJCQkJCQkJCQUJCQkJCQkDBwgDBwgBAQIHATYAAAICAgECAwICAwc2AwEAAwMESB0DHQMCAw0EAwEOAQUFBQUAAwAAAAAAAgMCDgEBAQEBAQEBAAEBAAAABQEBAQEBBQABAwEAAAEAAwAAAB4eAAMBAQAAAAEBAQEBAQAEBQAAAAAAAAABAAMEAAAAAwACAAMCAAAAAQABAAAAAQAFBQUAAAAAAQEHBwcBBwcHBwQFBwcFBQEBAQEBAQEBBQEHAQEBBAUHBwUFAQEBAQUHBwUFAQEBAQEBBAUHBwQHAXABzgbOBgUHAQGEAoCAAgYIAX8BQbCpDwsHpQEhAXkCAAF6ALYIAUEAiBMBQgCHEwFDAIYTAUQAGAFFAE8BRgEAAUcAhRMBSACEEwFJAIMTAUoAghMBSwCBEwFMAIATAU0A/xIBTgD+EgFPAP0SAVAA/BIBUQD7EgFSAPoSAVMA+RIBVAD4EgFVAPcSAVYA9hIBVwD1EgFYAPQSAVkA8xIBWgDyEgFfAPESASQA5xICYWEAvhECYmEAvRECY2EAvBEJ+wwBAEEBC80GnRK4EagRmRGUEYsRiBGCEf0QGPgQ5A/jD+APzgjAD7cP+BPhE98TzBPLE8oTwxOvE64TqgybE5UTpAeaE/YGhgWGBbsRuhG5EbcRthG1EbQRsxGyEbERsBGDCq8RrhGtEawRqxGDCqoRqRGnEaYRpRGiEaERoBGfEZ4RpBGdEZwRmxHeCZoRmBGXEZMRkhGREZARjxGjEY4RjRGMEZYRlRGKEYkRhxGGEYURhBGDEYERgBH/EP4Q/BD7EPoQ+RD3EPYQ9RD0EPMQ8hDxEPAQ7xDuEO0Q0AnsEOsQ6hDpEOgQ5xDmEMUJ5RDkEOMQ4hDhENAQzxDOEM0QzBDLEMoQyRDIEMcQxhDFEMQQwxDCEMEQwBDgEN8Q3hDdENwQ2xDaENkQ2BDXENYQ1RDUENMQ0hDREL8QvhC9EN4JuxClELcJuhC5ELgQtxC2ELUQtBCzELIQsRCwEK8QrhCtEKwQqxCqEKkQoBC8EJgQkhCREKgQpxCiEKYQpBCjEKEQnxCeEJ0QnBCbEJoQmRCXEJYQlRCUEJMQkBBqT48QuAbNCcEGjhDLCcIGtgaNEMwJzwmMEIsQrQaVCYoQiRCIEJMJhgWHEIYQhRCEEIMQghCBEIAQ/w/+D/0P/A/7D/oP+Q/4D/cP9g/1D/QP8w/yD/EP8A/vD+4P7Q/sD+sP6g/pD5MJ6A+ICecP5g/lD+AE4g/hD98P3g/dD9wP2w/aD9kP2A/XD9YP1Q/UD9MP0g/RD9APzw/OD4gJhgU36wYbzA/LD8oPyQ/ID8cPxg/FD8QPww/CD8EPhwa/D4cGvg+HBr0PvA+7D7oPuQ+4D7oI9ga2D7UPtA+zD7IPsQ+wD68Prg+tD4UGuAiFBrgIhQasD6sPqg+pD6gPpw+mD6UP9gakD6MPog+hD4EEoA+BBJ8PgQSeD4EEnQ+BBJwPmw+aD5kPlhSVFJQUkxSSD5IUkRSzCJAUjxSOFI0UjBSLFIoUiRSIFLoIhxSGFIUUhBSDFIIUgRSAFP8T/hP9E/wT+xP6E/kT9xP2E/UT9BPzE/IT8RPwE+8T7hPtE+wT6xPqE+UT6RPoE+cT5hPkE+MTzQ/iE8EB4BPeE90T3BPbE9oT2ROcCNgTkg/XE5wI1hPVE9QToAGgAdMT0hPRE9ATzxPOE80TxgTJE8gTxxPGE8UTxBPCE8ET0A3AE78TvhO9E7wTuxO6E5wItxOtCrMTtBOhDbETthO1E+wHshOwE5INrROsE8UJbLAK+wKrE6oT7wyoE6kTzQWnE80MpBOmE6UToAGgAe8MoxOhE6ATrAyeE5wTlBOTE5ITjxPCB6ITnROfE5kTmBOXE5YTkROQE44TjROME4sTihOJEw7uEu0S7xLwEqoDoAHsEusS6hLpEugSlgfmEpUH5RLkEuMSoAGgAeIS4RLgEsIL3xLCC5IHvAveEt0SjgfWEtcS1RLaEtkS2BKNB64L1BLTEosH0hLrA+sD6wPrA9kK6BHmEeQR4hHgEd4R3BHaEdgR1hHUEdIR0BHOEd0KjxLmB9cKgxKCEoESgBL/EdgK/hH9EfwR4Qr6EfkR+BH3EfYRoAH1EfQRzArzEfER8BHvEe0R6xHLCvIR3BLbEu4R7BHqEfsCbGyOEo0SjBKLEooSiRKIEocS2AqGEoUShBJs1grWCp0E4ATgBPsR4ARs0grRCp0EoAGgAdAKjgVs0grRCp0EoAGgAdAKjgVszwrOCp0EoAGgAc0KjgVszwrOCp0EoAGgAc0KjgX7AmzREtASzxL7AmzOEs0SzBJsyxLKEskSyBKSC5ILxxLGEsQSwxLCEmzBEsASvxK+EooLigu9ErwSuxK6ErkSbLgStxK2ErUStBKzErISsRJssBKvEq4SrRKsEqsSqhKpEvsCbIELqBKnEqYSpRKkEqMS6RHlEeER1RHREd0R2RH7AmyBC6ISoRKgEp8SnhKcEucR4xHfEdMRzxHbEdcR9wbKCpsS9wbKCpoSbJUFlQX0AfQB9AH3CqAB8QLxAmyVBZUF9AH0AfQB9wqgAfEC8QJslAWUBfQB9AH0AfYKoAHxAvECbJQFlAX0AfQB9AH2CqAB8QLxAmyZEpgSbJcSlhJslRKUEmyTEpISbOIKkRKVB2ziCpASlQf7As0RkQH7AmzrA+sDzBHDEcYRyxFsxBHHEcoRbMURyBHJEWzBEWzAEWzCEa4KvQq/Eb0KrgoK3Mk1/xOADAEHfwJAIABFDQAgAEEIayIDIABBBGsoAgAiAkF4cSIAaiEFAkAgAkEBcQ0AIAJBAnFFDQEgAyADKAIAIgRrIgNB4JULKAIASQ0BIAAgBGohAAJAAkACQEHklQsoAgAgA0cEQCADKAIMIQEgBEH/AU0EQCABIAMoAggiAkcNAkHQlQtB0JULKAIAQX4gBEEDdndxNgIADAULIAMoAhghBiABIANHBEAgAygCCCICIAE2AgwgASACNgIIDAQLIAMoAhQiAgR/IANBFGoFIAMoAhAiAkUNAyADQRBqCyEEA0AgBCEHIAIiAUEUaiEEIAEoAhQiAg0AIAFBEGohBCABKAIQIgINAAsgB0EANgIADAMLIAUoAgQiAkEDcUEDRw0DQdiVCyAANgIAIAUgAkF+cTYCBCADIABBAXI2AgQgBSAANgIADwsgAiABNgIMIAEgAjYCCAwCC0EAIQELIAZFDQACQCADKAIcIgRBAnRBgJgLaiICKAIAIANGBEAgAiABNgIAIAENAUHUlQtB1JULKAIAQX4gBHdxNgIADAILAkAgAyAGKAIQRgRAIAYgATYCEAwBCyAGIAE2AhQLIAFFDQELIAEgBjYCGCADKAIQIgIEQCABIAI2AhAgAiABNgIYCyADKAIUIgJFDQAgASACNgIUIAIgATYCGAsgAyAFTw0AIAUoAgQiBEEBcUUNAAJAAkACQAJAIARBAnFFBEBB6JULKAIAIAVGBEBB6JULIAM2AgBB3JULQdyVCygCACAAaiIANgIAIAMgAEEBcjYCBCADQeSVCygCAEcNBkHYlQtBADYCAEHklQtBADYCAA8LQeSVCygCACAFRgRAQeSVCyADNgIAQdiVC0HYlQsoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgBEF4cSAAaiEAIAUoAgwhASAEQf8BTQRAIAUoAggiAiABRgRAQdCVC0HQlQsoAgBBfiAEQQN2d3E2AgAMBQsgAiABNgIMIAEgAjYCCAwECyAFKAIYIQYgASAFRwRAIAUoAggiAiABNgIMIAEgAjYCCAwDCyAFKAIUIgIEfyAFQRRqBSAFKAIQIgJFDQIgBUEQagshBANAIAQhByACIgFBFGohBCABKAIUIgINACABQRBqIQQgASgCECICDQALIAdBADYCAAwCCyAFIARBfnE2AgQgAyAAQQFyNgIEIAAgA2ogADYCAAwDC0EAIQELIAZFDQACQCAFKAIcIgRBAnRBgJgLaiICKAIAIAVGBEAgAiABNgIAIAENAUHUlQtB1JULKAIAQX4gBHdxNgIADAILAkAgBSAGKAIQRgRAIAYgATYCEAwBCyAGIAE2AhQLIAFFDQELIAEgBjYCGCAFKAIQIgIEQCABIAI2AhAgAiABNgIYCyAFKAIUIgJFDQAgASACNgIUIAIgATYCGAsgAyAAQQFyNgIEIAAgA2ogADYCACADQeSVCygCAEcNAEHYlQsgADYCAA8LIABB/wFNBEAgAEF4cUH4lQtqIQICf0HQlQsoAgAiBEEBIABBA3Z0IgBxRQRAQdCVCyAAIARyNgIAIAIMAQsgAigCCAshACACIAM2AgggACADNgIMIAMgAjYCDCADIAA2AggPC0EfIQEgAEH///8HTQRAIABBJiAAQQh2ZyICa3ZBAXEgAkEBdGtBPmohAQsgAyABNgIcIANCADcCECABQQJ0QYCYC2ohBAJ/AkACf0HUlQsoAgAiB0EBIAF0IgJxRQRAQdSVCyACIAdyNgIAIAQgAzYCAEEYIQFBCAwBCyAAQRkgAUEBdmtBACABQR9HG3QhASAEKAIAIQQDQCAEIgIoAgRBeHEgAEYNAiABQR12IQQgAUEBdCEBIAIgBEEEcWoiBygCECIEDQALIAcgAzYCEEEYIQEgAiEEQQgLIQAgAyICDAELIAIoAggiBCADNgIMIAIgAzYCCEEYIQBBCCEBQQALIQcgASADaiAENgIAIAMgAjYCDCAAIANqIAc2AgBB8JULQfCVCygCAEEBayIAQX8gABs2AgALCy0AIAAoAgggAU0EQEHpswNBibgBQdIBQbPEARAAAAsgACgCBCABaiAAKAIMcAt+AQJ/IwBBIGsiAiQAAkAgAEEAIACtIAGtfkIgiKcbRQRAQQAgACAAIAEQTiIDGw0BIAJBIGokACADDwsgAiABNgIEIAIgADYCAEGI9ggoAgBBpuoDIAIQIBoQLwALIAIgACABbDYCEEGI9ggoAgBB9ekDIAJBEGoQIBoQLwALFwBBAUF/IAAgASABEEAiABChAiAARhsLJQEBfyAAKAIsIgBBAEGAASAAKAIAEQMAIgAEfyAAKAIQBUEACws0AQF/AkAgACABEOYBIgFFDQAgACgCLCIAIAFBCCAAKAIAEQMAIgBFDQAgACgCECECCyACC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDECADIAI2AgwCQCADQRBqIAEgAhCzCiIBQQBIBEAgA0H8gAsoAgAQswU2AgBBioAEIAMQNwwBCyAAIANBEGoiABCNBSABEKECGiAAEFwLIANBIGokAAszAQF/IAIEQCAAIQMDQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAALJAEBfyMAQRBrIgMkACADIAI2AgwgACABIAIQzQsgA0EQaiQAC6QBAQN/IwBBEGsiAiQAAkAgABAtIgMgACgCAEEDcSAAKQMIEOgJIgEEfyABKAIYBUEACyIBDQAgAygCTCIBKAIAKAIMIgMEQCABKAIIIAAoAgBBA3EgACkDCCADESYAIgENAQtBACEBIAAoAgBBA3FBAkYNACACIAApAwg3AwggAkElNgIAQfDdCiEBQfDdCkEgQeAXIAIQtAEaCyACQRBqJAAgAQsPACAAIAEgAiADQQAQ8QsLQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsUACAAECgEQCAALQAPDwsgACgCBAsVACAAEKMBBEAgACgCBA8LIAAQpQMLowEBAn8CQAJAIAAEQCAAKAIIIgMgACgCDCICRgRAIAAgA0EBdEEBIAMbIAEQ/AEgACgCDCECCyACRQ0BIAAoAggiAyACTw0CIAAgACgCBCADaiACcCICIAEQ3wEaIAAgACgCCEEBajYCCCACDwtB0dMBQYm4AUE7QdbDARAAAAtBr5UDQYm4AUHDAEHWwwEQAAALQZoMQYm4AUHEAEHWwwEQAAALJgAgACABEK4HIgFFBEBBAA8LIAAQ7AEoAgwgASgCEEECdGooAgALLgAgAC0ADyIAQQFqQf8BcUERTwRAQbS7A0Gg/ABB3ABB6ZcBEAAACyAAQf8BRwtDACAAIAAgAaQgAb1C////////////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AkHYmQshASAAQdiZC0EYEM4BRQ0CQRgQTyIBRQ0BCyABIAIpAgg3AgAgASACKQIYNwIQIAEgAikCEDcCCAwBC0EAIQELIAJBIGokAEHkmwtBAToAAEHgmwsgATYCACABC60BAgF/An4CQAJAIAAEQCABBEAgAEEAEL8CIgMoAvQDDQIgAykDsAQiBCABQQhrIgEoAgBBCGqtIgVUDQMgAyAEIAV9IgQ3A7AEIAMoAsAEQQJPBEAgA0EtIAUgBCADKQO4BCACEJEECyABIAAoAhQRAQALDwtBsdQBQZ+9AUGKB0GonwEQAAALQbDSAUGfvQFBkQdBqJ8BEAAAC0HjqAFBn70BQZoHQaifARAAAAsJACAAQQAQ2AYLvwoCBX8PfiMAQeAAayIFJAAgBEL///////8/gyEMIAIgBIVCgICAgICAgICAf4MhCiACQv///////z+DIg1CIIghDiAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIgtCgICAgICAwP//AFQgC0KAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEKDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQogAyEBDAILIAEgC0KAgICAgIDA//8AhYRQBEAgAiADhFAEQEKAgICAgIDg//8AIQpCACEBDAMLIApCgICAgICAwP//AIQhCkIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQCABIAuEQgAhAVAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQsQFBECAGayEGIAUpA1giDUIgiCEOIAUpA1AhAQsgAkL///////8/Vg0AIAVBQGsgAyAMIAMgDCAMUCIIG3kgCEEGdK18pyIIQQ9rELEBIAYgCGtBEGohBiAFKQNIIQwgBSkDQCEDCyADQg+GIgtCgID+/w+DIgIgAUIgiCIEfiIQIAtCIIgiEyABQv////8P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AQRAIAEoAgQiAkUNAQNAIAEgAigCADYCBCACIAE2AgAgAiIBKAIEIgINAAsgBCABNgIADAELCyAAKAIIIQULIAAgAzYCDCAAIAVBgCByNgIIIAMLoQEBAn8CQCAAECVFIAIgAWtBBUhyDQAgASACEJYFIAJBBGshBCAAEEYiAiAAECVqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQowEEQCAAKAIAIAAQ9gIaEKEFCyABECUaIAEQowEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDTASACQQA6AA8gASACQQ9qENIBAkAgACABRiIBIANyRQ0ACyAAEKMBIAFyRQRAIAAQpQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgxC////////P4Mh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9ANFBEAgAykDsAQiIkKAgICAEH1CkHtaDQEgAyAiQvAEfCIiNwOwBCADKALABEECTwRAIANBK0LwBCAiIAMpA7gEIiMgIlQEfiADICI3A7gEICIFICMLQZ8LEJEECyACQRA2ApwDIAJBADYCKCACQQA2AhAgAiABQYACQakLEJgBIgM2AqgDIANFBEAgASABQasLEGdBAAwFCyACIAFBgAhBtgsQmAEiAzYCQCADRQRAIAEgAigCqANBuAsQZyABIAFBvAsQZwwECyACIANBgAhqNgJEQQAiBkUEQCABQbwBQcw6EJgBIgZFDQMgBkIANwJQIAZCADcCaCAGIAE2AmQgBiABNgJ8IAZCADcCCCAGQQA6AAQgBkIANwIcIAZBADoAGCAGIAE2AhAgBkEANgIAIAZCADcCMCAGQQA6ACwgBiABNgIkIAZBADYCFCAGQQA2AmAgBkIANwJYIAZCADcCcCAGQQA2AnggBkIANwJEIAZBADoAQCAGIAE2AjggBkEANgIoIAZBADYCPCAGIAE2AkwgBkIANwKMASAGQQA6AIgBIAZCATcCgAEgBiABNgKUASAGQgA3ApgBIAZBADoAoAEgBkIANwKkASAGQgA3AqwBIAZCADcCtAELIAJBADYCmAMgAiAGNgKEAyACQQA2ApADIAJBADYC0AIgAkEANgLIAiACQQA2AsACIAJCADcD8AMgAkEhOgD4AyACQQA2AogCIAJBADYCkAEgAkEAOwH8ASACQgA3AsADIAJBADYC+AEgAkIANwKsAyACIAE2AtQDIAJCADcCyAMgAkEANgLQAyACQQA6ALQDIAJBADYC6AMgAkIANwLgAyACQgA3AtgDIAIgATYC7AMgAUHPATYCoAIgAUGbATYCiAIgAUEANgKcAiABQoCAgIAQNwKUAiAFBEBBACEGA0AgBSAGaiAGQQFqIQYtAAANAAsgASAGQYjCABCYASIDBEAgAyAFIAYQHxoLIAEgAzYC8AELIAFBADYCgAMgAUGgAWogAUGcAWpBABDBBhogAUIANwMAIAFBQGtBAEHAABA4GiABQgA3AowBIAFBADYChAEgAUIANwKUASABQgA3A7ADIAFBADYCNCABQQE6ADAgAUEANgIsIAFCADcCJCABQQA2AsQCIAFBADYCvAIgAUIANwKkAiABQgA3AqwCIAFBADYCtAIg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akECED0MGgUgESADQQR0IhJqIhQgASASaiISKQMANwMAIBQgEikDCDcDCCADQQFqIQMMAQsACwALIAJBAmoiA0EQEBoiAiABKQMINwMIIAIgASkDADcDACACIBApAyA3AxAgAiAQKQMoNwMYIAIgECsDICAQKwMwIgYgECsDQKFEAAAAAAAACECjIgegOQMgIBArAyghCCAQKwNIIQkgECsDOCEFIAIgBiAHoDkDMCACIAUgBSAJoUQAAAAAAAAIQKMiBaA5AzggAiAIIAWgOQMoQQQgAyADQQRNGyERIAFBIGshE0EEIQEDQCABIBFGBEAgACACIAMgBBBIIAIQGCAPIBApAzg3AyggDyAQKQMwNwMgIA8gECkDKDcDOCAPIBApAyA3AzAgACAPQSBqQQIQPQwZBSACIAFBBHQiEmoiFCASIBNqIhIpAwA3AwAgFCASKQMINwMIIAFBAWohAQwBCwALAAsgAkEDaiIDQRAQGiICIAFBCGopAwA3AwggAiABKQMANwMAIAIgASsDACIFIAUgECsDEKEiBkQAAAAAAADQv6KgOQMQIAErAwghCCAQKwNIIQkgAiAQKwM4Igc5AzggAiAFIAZEAAAAAAAAAsCioDkDMCACIAUgBiAGoKE5AyAgAiAIIAcgCaFEAAAAAAAACECjoCIFOQMoIAIgBTkDGCAQKwMwIQUgAiAHOQNIIAIgBTkDQEEEIAMgA0EETRshESABQTBrIRNBBCEBA0AgASARRgRAIAAgAiADIAQQSCACEBgMGAUgAiABQQR0IhJqIhQgEiATaiISKQMANwMAIBQgEikDCDcDCCABQQFqIQEMAQsACwALIAJBBEcNG0EGQRAQGiICIAEpAwg3AwggAiABKQMANwMAIAIgECkDKDcDGCACIBApAyA3AxAgAiAQKQNINwMoIAIgECkDQDcDICACIAEpAyg3AzggAiABKQMgNwMwIAIgECkDgAE3A0AgAiAQKQOIATcDSCACIBApA6ABNwNQIAIgECkDqAE3A1ggACACQQYgBBBIIAIQGCAPIBArAxAgECsDsAEgECsDAKGgOQMgIA8gECsDGCAQKwO4ASAQKwMIoaA5AyggDyAQKQNINwM4IA8gECkDQDcDMCAAIA9BIGoiAUECED0gDyAQKQOIATcDOCAPIBApA4ABNwMwIAAgAUECED0gDyAQ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AgsgACABNwMAIAAgAjcDCAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAECxYAIABFBEBBAA8LQfyACyAANgIAQX8LCwAgACABIAIRAAALZAECfyMAQRBrIgMkAAJAIABBABCxAiIARQ0AAkACQAJAAkAgAQ4EAAECAgMLIAAoAhAhAgwDCyAAKAIIIQIMAgsgACgCDCECDAELIAMgATYCAEHExQQgAxA3CyADQRBqJAAgAgukAQIDfwJ8IwBBEGsiAiQAIAAQwQIgACgCECIBKwMYRAAAAAAAAFJAoyEEIAErAxBEAAAAAAAAUkCjIQUgABAcIQEDQCABBEAgASgCECgClAEiAyADKwMAIAWhOQMAIAMgAysDCCAEoTkDCCAAIAEQHSEBDAELCyACIAAoAhAiASkDGDcDCCACIAEpAxA3AwAgACACEMAMIABBARDKBSACQRBqJAALDwAgAUEBaiAAIAAQqgGfC6gBAgR/AnwgASgCACECIABBBGoiAyEAIAMhAQNAIAAoAgAiAARAIAAoAhAiBCsDCCIGIAIrAwgiB2MEQCAAQQRqIQAMAgUgACABIAAgAiAESyIEGyAGIAdkIgUbIQEgACAAIARBAnRqIAUbIQAMAgsACwsCQAJAIAEgA0YNACACKwMIIgYgASgCECIAKwMIIgdjDQAgACACTSAGIAdkcg0BCyADIQELIAELZAEBfyMAQRBrIgQkACAAQQA7ARwgAEEANgIYIAAgAzkDCCAAIAI2AgQgACABNgIAIAQgADYCDCABQTRqIARBDGoQwAEgACgCBCAEIAA2AghBKGogBEEIahDAASAEQRBqJAAgAAs8ACAAIAEQ0gIEQCAAEMMEDwsgABD9ByIBRQRAQQAPCyAAIAEQ/AchACABEG0gACAALQAkQQNyOgAkIAALrAEBAX8CQCAAECgE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IAUgBCsDCDkDECAFQShqIAMgFiAUIAsRHgBFBEAgBUIANwNYIAUgAzYCACAFIAc2AhggB0EBaiEHIAAgAxAdIQMMAQsLQZj/CigCABAYQZj/CkEANgIAENcMDAILQQAhByACQbADakEAQdAAEDgaIAUEQEGY/wooAgAhBET////////vfyEURP///////+//IRhE////////7/8hG0T////////vfyEZA0AgBSAHRgRARJqZmZmZmak/IRYCQCAAQdLkABAnIgBFDQAgAC0AAEUNACAAEK4CIRYLQbD/CiAbIBsgGaEgFqIiE6AiFzkDAEG4/wogGSAToSIVOQMAQaj/CiAUIBggFKEgFqIiE6EiFDkDAEGg/wogGCAToCITOQMAIAIgFTkD2AMgAiAXOQPoAyACIBU5A7gDIAIgEzkD0AMgAiAXOQPIAyACIBQ5A/ADIAIgEzkDwAMgAiAUOQPgAyABKAIAIQBBABDQByELAkACQCAAQQJGBEAgC0UNAiACQbADahDWDEEAIQMDQEGY/wooAgAhAUHk/gooAgAhAEEAIQQDQCAAIARHBEAgASAEQeAAbGoiCyALKwMIRM3MzMzMzPA/ojkDCCALIAsrAxBEzczMzMzM8D+iOQMQIARBAWohBAwBCwsgA0EBaiIDENAHDQALQezaCi0AAEUNASACIAM2AhBBiPYIKAIAQezdAyACQRBqECAaDAELIAtFDQEgAkGwA2oQ1gxBACEHQQAhBANAIAJBsANqIgEhACAHBEAgABDUDAtB+P4KQv////////93NwMAQfD+CkL/////////9/8ANwMAAkBB5P4KKAIAIgUEQCAAKAIAIQZE////////738hFET////////v/yEWQQAhAANAIAAgBUYNAkHw/gogFCAGIABBAnRqKAIAIgMrAwAQKSIUOQMAQfj+CiAWIAMrAwAQIyIWOQMAIABBAWohAAwACwALQeGVA0H8twFBzwFBzJIBEAAAC0GA/wogBigCACsDCDkDACAGIAVBAnRqQQRrKAIAKwMIIRNBkP8KIBYgFKE5AwBBiP8KIBM5AwBEAAAAAAAAAAAhFUQAAAAAAAAAACEUIwBBMGsiDiQAQQFBEBAaIg9B6P4KKAIAQQJ0IgA2AgQgDyAAQSgQGjYCAEHA/wogARDNBTYCACAOQgA3AyggDkIANwMg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AmRBByAHLwGMAkECdkEBcSAHKALoASAHKAL4ASAHKAKIAiAHKALcAUEAENoEIAAgCSgCECgCaEEGIAcvAYwCQQF2QQFxIAcoAuQBIAcoAvQBIAcoAoQCIAcoAtwBQQAQ2gQCQCAAKAI8IgFFDQAgASgCRCIBRQ0AIAAgAREBAAsgABCMBCAaEOwCIBoQGBAYCyACQeAVaiQADwtBsIMEQcIAQQFBiPYIKAIAEDoaEDsAC84GAQJ/IwBBgAJrIgMkACADQdABaiIEQYi/CEEwEB8aIAFCADcCAAJAAkACQAJAIAAgBBDeBA0AIAMoAtgBQQJJDQAgAyADKQPYATcDyAEgAyADKQPQATcDwAEgAygC0AEgA0HAAWpBABAZQRhsaigCAA0BC0EAIQBBACEBA0AgASADKALYAU8NAiADIAMpA9gBNwMgIAMgAykD0AE3AxggA0EYaiABEBkhAgJAAkAgAygC4AEiBA4CAQUACyADIAMoAtABIAJBGGxqIgIpAwg3AwggAyACKQMQNwMQIAMgAikDADcDACADIAQRAQALIAFBAWohAQwACwALIAMoAtgBQQNPBEBB95gEQQAQKgsgAyADKQPYATcDuAEgAyADKQPQATcDsAEgASADKALQASADQbABakEAEBlBGGxqKAIAEGQ2AgAgAyADKQPYATcDqAEgAyADKQPQATcDoAEgAygC0AEgA0GgAWpBARAZQRhsaigCAARAIAMgAykD2AE3A5gBIAMgAykD0AE3A5ABIAEgAygC0AEgA0GQAWpBARAZQRhsaigCABBkNgIECyADIAMpA9gBNwOIASADIAMpA9ABNwOAASADKALQASEBIANBgAFqQQAQGSEEIAMoAtABIQAgAgJ8IAEgBEEYbGotABBBAUYEQCADIAMpA9gBNwNYIAMgAykD0AE3A1AgACADQdAAakEAEBlBGGxqKwMIDAELIAMgAykD2AE3A3ggAyADKQPQATcDcEQAAAAAAAAAACAAIANB8ABqQQEQGUEYbGotABBBAUcNABogAyADKQPYATcDaCADIAMpA9ABNwNgRAAAAAAAAPA/IAMoAtABIANB4ABqQQEQGUEYbGorAwihCzkDAEEAIQFBASEAA0AgASADKALYAU8NASADIAMpA9gBNwNIIAMgAykD0AE3A0AgA0FAayABEBkhAgJAAkAgAygC4AEiBA4CAQQACyADIAMoAtABIAJBGGxqIgIpAwg3AzAgAyACKQMQNwM4IAMgAikDADcDKCADQShqIAQRAQALIAFBAWohAQwACwALIANB0AFqIgFBGBAxIAEQNCADQYACaiQAIAAPC0GwgwRBwgBBAUGI9ggoAgAQOhoQOwALrwEBAX8gACgCECIBRQRAQaT1AEGEuQFBiAFB0pEBEAAACyABKALcARAYIAEoAtgBEBggASgC4AEQGCABKALkARAYIAEoAugBEBggASgC7AEQGCABKALwARAYIAEoAvQBEBggASgC+AEQGCABKAL8ARAYIAEoAoACEBggASgChAIQGCABKAKIAhAYIAEoApgCEBggASgCpAIQGCABKAKgAhAYIAAgASgCADYCECABEBgLngEBAn9BuAIQxgMiASAAKAIQIgI2AgAgACABNgIQIAIEQCABQRBqIAJBEGpBKBAfGiABQThqIAJBOGpBKBAfGiABIAIoApgBNgKYASABIAIoApwBNgKcASABIAIrA6ABOQOgASABIAIoAogBNgKIASABQeAAaiACQeAAakEoEB8aIAEPCyABQoCAgICAgID4PzcDoAEgAUIDNwOYASABC6AGAQV/IwBBMGsiAyQAA0BBgOAKKAIAIAJNBEACQEH43wpBEBAxQZDgCiAAKAIAIgQpAwA3AwBBmOAKIAQpAwg3AwBB+N8KQRAQJiECQfjfCigCACACQQR0aiICQZDgCikDADcDACACQZjgCikDADcDCEGQ4AogBCkDADcDAEGY4AogBCkDCDcDAEH43wpBEBAmIQJB+N8KKAIAIAJBBHRqIgJBkOAKKQMANwMAIAJBmOAKKQMANwMIQQIgACgCBCIAIABBAk0bQQFrIQZBASECA0AgAiAGRg0BQZDgCiAEIAJBBHRqIgApAwA3AwBBmOAKIAApAwg3AwBB+N8KQRAQJiEFQfjfCigCACAFQQR0aiIFQZDgCikDADcDACAFQZjgCikDADcDCEGQ4AogACkDADcDAEGY4AogACkDCDcDAEH43wpBEBAmIQVB+N8KKAIAIAVBBHRqIgVBkOAKKQMANwMAIAVBmOAKKQMANwMIQZDgCiAAKQMANwMAQZjgCiAAKQMINwMAQfjfCkEQECYhAEH43wooAgAgAEEEdGoiAEGQ4AopAwA3AwAgAEGY4AopAwA3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qgIgA0EAOgAHIAIgBGogA0EHahDSASADQRBqJAAMAQsQygEACyAFQRBqJAALFwAgACADNgIQIAAgAjYCDCAAIAE2AggLDQAgACABIAJBARCiBwsSACAAIAEgAkL/////DxCwBacLzAEBA38jAEEgayIDQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgAS0AACICRQRAQQAPCyABLQABRQRAIAAhAQNAIAEiA0EBaiEBIAMtAAAgAkYNAAsgAyAAaw8LA0AgAyACQQN2QRxxaiIEIAQoAgBBASACdHI2AgAgAS0AASECIAFBAWohASACDQALAkAgACIBLQAAIgJFDQADQCADIAJBA3ZBHHFqKAIAIAJ2QQFxRQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgASAAawuAAQEEfyAAIABBPRC0BSIBRgRAQQAPCwJAIAAgASAAayIEai0AAA0AQYiBCygCACIBRQ0AIAEoAgAiAkUNAANAAkAgACACIAQQ6gFFBEAgASgCACAEaiICLQAAQT1GDQELIAEoAgQhAiABQQRqIQEgAg0BDAILCyACQQFqIQMLIAMLTgEBf0EBQRwQGiIGIAU6ABQgBiAAIAEQrAE2AggCfyADBEAgACACENUCDAELIAAgAhCsAQshBSAGIAA2AhggBiAENgIQIAYgBTYCDCAGCwkAIAC9QjSIpwuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAAgA6IhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAQgBaKhoiABoSAERElVVVVVVcU/oqChC5IBAQN8RAAAAAAAAPA/IAAgAKIiAkQAAAAAAADgP6IiA6EiBEQAAAAAAADwPyAEoSADoSACIAIgAiACRJAVyxmgAfo+okR3UcEWbMFWv6CiRExVVVVVVaU/oKIgAiACoiIDIAOiIAIgAkTUOIi+6fqovaJExLG0vZ7uIT6gokStUpyAT36SvqCioKIgACABoqGgoAuNAQAgACAAIAAgACAAIABECff9DeE9Aj+iRIiyAXXg70k/oKJEO49otSiCpL+gokRVRIgOVcHJP6CiRH1v6wMS1tS/oKJE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EC4BmgFsrHwhEAwBCwsgAkEBaiECDAALAAtBACEAA0AgDCAAQQJ0aigCACICBEAgCCACQVBBACACKAIAQQNxQQJHG2ooAigoAhAoAvgBIgVBAnRqIgogCigCACACKAIQLgGaAWo2AgAgBSABIAEgBUgbIQEgAEEBaiEADAELCyADQQFqIQMMAQsACwALIAZBEGokACARDwsgECARfCERDAALAAuDAQECfyAAIAFBARCNASIBKAIQQQA2AsQBQQUQnwghAiABKAIQIgNBADYCzAEgAyACNgLAAUEFEJ8IIQIgASgCECIDIAI2AsgBQdz9CigCACICIAAgAhsoAhBBuAFBwAEgAhtqIAE2AgAgAyACNgK8AUHc/QogATYCACADQQA2ArgBIAELuQEBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgC4AEgASgC5AEiAUEBaiABQQJqENoBIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AuABIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAuQBIgNBAWo2AuQBIAEoAuABIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgAoAuABIAAoAuQBQQJ0akEANgIACyAAIAAgASACIABBp4cBECciAAR/IAAQkQIFQR4LEP8OC00AIAEoAhBBwAFqIQEDQCABKAIAIgEEQCABKAIQKAKYAhAYIAEoAhAoAqACEBggASgCECIBQQA2ArABIAFBuAFqIQEMAQUgABD4DgsLCz8BAn8gACgCECgCqAIhAANAIAAiASgCDCIARSAAIAFGckUEQCAAKAIMIgJFDQEgASACNgIMIAIhAAwBCwsgAQsLACAAIAFBARCFDwsLACAAIAFBABCFDwuGAQECfwJAIAAgASkDCBC/A0UNACAAEDkgAEYEQCAAIAEQbiECA0AgAgRAIAAgAiABEHIgACACEI0GIQIMAQsLIAAtABhBIHEEQCABEMcLCyAAIAEQzwcgARCzByAAQQEgASkDCBC/BgsgACABQRJBAEEAEMgDDQAgABA5IABGBEAgARAYCwsLgwEBA38jAEEgayIBJAAgACgCECICKAIMIgNBDE8EQCABQeQANgIUIAFBibwBNgIQQYj2CCgCAEHYvwQgAUEQahAgGhA7AAsgASACKAIINgIIIAEgA0ECdCICQZjBCGooAgA2AgQgASACQcjBCGooAgA2AgAgAEGQCCABEB4gAUEgaiQACykBAX9Bor8BIQEgACAALQCQAUEBRgR/IAAoAowBKAIABUGivwELEBsaCyUAIAAgASgCABDnASAAIAJBASAAKAIAEQMAGiABIAAQ3AI2AgALEwAgAEGbywMgACgCEEEQahC+CAtzAQF/IAAQJCAAEEtPBEAgAEEBEN8ECyAAECQhAgJAIAAQKARAIAAgAmogAToAACAAIAAtAA9BAWo6AA8gABAkQRBJDQFBk7YDQaD8AEGvAkHEsgEQAAALIAAoAgAgAmogAToAACAAIAAoAgRBAWo2AgQLCzkAIAAgASgCABDnASAAIAJBAiAAKAIAEQMARQRAQd8TQeC9AUGiAUGd8AAQAAALIAEgABDcAjYCAAsvAQF/IADAIgFBAEggAUFfcUHBAGtBGkkgAUEwa0EKSXIgAEEta0H/AXFBAklycgvLAQEFfyAAKAIAIgJBAyABQQAQ0gMaIAIoAmAiAQRAIAAgASgCECIDKAIMIgU2AkwgACADKAIQIgQ2AlQgACADKAIAIgM2AlAgACABKAIENgJYIAAgACgCmAEgBCgCAHIiBDYCmAEgAigCVCIBBEAgACABKAIQIgIoAgw2AjwgACACKAIQIgY2AkQgACABKAIENgJIIAAgBigCACAEcjYCmAEgBQRAIAAgAigCADYCQEGsAg8LIAAgAzYCQEGsAg8LIABBADYCPAtB5wcLlwQCBH8DfCMAQfAAayIJJAAgACgCmAEhCyAJQgA3AzggCUIANwMwAkAgAUUNACABLQBRQQFHDQAgBwRAQcLwACEKAkACQAJAAkAgAkEGaw4GAAIBAQEDAQtBqPAAIQoMAgsgCUHXFjYCFCAJQYS5ATYCEEGI9ggoAgBB2L8EIAlBEGoQIBoQOwALQbLwACEKCyAJIAo2AiQgCSAHNgIgIAlBMGoiB0GpMyAJQSBqEH4gBxDEAyEKCyAAKAIQIgcoAgwhDCAHIAI2AgwgC0EEcSIHIAMgBHIiA0VyRQRAIAAgARDdCCAAIAQgBSAGIAoQxAELIANBAEcgACACIAEQkAMCQCAIRQ0AIAEoAgAhAgNAAkACQAJAIAItAAAiCw4OBAICAgICAgICAQEBAQEACyALQSBHDQELIAJBAWohAgwBCwsgASsDOCENIAErAxghDiAJIAFBQGsiAisDACABKwMgRAAAAAAAAOA/oqEiDzkDWCAJIA85A0ggCSANIA5EAAAAAAAA4D+ioCINOQNAIAkgDSAOoTkDUCAJIAIpAwA3AwggCSABKQM4NwMAIAlB4ABqIAggCRD8CSAAIAAoAgAoAsgCEOUBIAAgASgCCBBJIAAgCUFAa0EDED0LBEAgBwRAIAAgARDdCCAAIAQgBSAGIAoQxAELIAAQlwILIAlBMGoQXCAAKAIQIAw2AgwLIAlB8ABqJAALxA0BDn8jAEGAAmsiAyQAIAJBCHEhECACQQRxIQxBASENA0AgASgCECIEKAK0ASANTgRAIAQoArgBIA1BAnRqKAIAIQUCQAJAIAAoApwBQQJIDQAgACAFIAVBAEG3N0EAECJB8f8EEHoiBBCJBA0AIARB8f8EED5FDQEgBRAcIQQDQCAERQ0CIAAgBSAEEOMIDQEgBSAEEB0hBAwACwALIAwEQCAAIAUgAhDbBAtBASEOIAAQjQQiBEEBNgIMIAQgBTYCCCAEQQE2AgQgACAFKAIQKAIMIAUQowYCQCAAKAI8IgRFDQAgBCgCICIERQ0AIAAgBBEBAAsgACgCECIJKALYAUUEQCAJLQCMAkEBcSEOCyAFQaKYARAnEOwCIQ8gDCAORXJFBEAgAyAFKAIQIgQpAyg3A6ABIAMgBCkDIDcDmAEgAyAEKQMYNwOQASADIAQpAxA3A4gBIAAgA0GIAWoQ3QQgACAJKALYASAJKALsASAJKAL8ASAJKALcARDEAQtBACEKIANBADYCvAEgBSADQbwBahDkCCIEBH8gACAEEOUBIAMoArwBIgpBAXEFQQALIQdBASEEAkAgBSgCEC0AcCIGQQFxBEBBgbYBIQZBz5ADIQgMAQsgBkECcQRAQZjpASEGQaSSAyEIDAELIAZBCHEEQEHSjwMhBkHajwMhCAwBCyAGQQRxBEBBkOkBIQZBzZIDIQgMAQsgBUH1NhAnIgYEfyAGQQAgBi0AABsFQQALIgYhCCAFQeA2ECciCwRAIAsgBiALLQAAGyEICyAFQek2ECciCwRAIAsgBiALLQAAGyEGCyAKIAZBAEdxDQAgBUHzNhAnIgpFBEAgByEEDAELQQEgByAKLQAAIgcbIQQgCiAGIAcbIQYLIANCADcDsAEgBkHfDiAGGyEHAn9BACAERQ0AGiAHIANBsAFqIANBqAFqEIsEBEAgACADKAKwARBdIAAgAygCtAEiBEGF9QAgBBsgBUHI2wooAgBBAEEAEGIgAysDqAEQjgNBA0ECIAMtALwBQQJxGwwBCyAAIAcQXUEBCyEEAkBBxNsKKAIAIgZFDQAgBSAGEEUiBkUNACAGLQAARQ0AIAAgBUHE2wooAgBEAAAAAAAA8D9EAAAAAAAAAAAQTBCHAgsgCEGF9QAgCBshBgJAIAMoArwBIghBBHEEQCAFQcDbCigCAEEBQQAQYiIIIARyRQ0BIAMgBSgCECIHKQMQNwPAASADIAcpAxg3A8gBIAMgBykDKDcD6AEgAyAHKQMgNwPgASADIAMrA+ABOQPQASADIAMrA8gBOQPYASADIAMrA8ABOQPwASADIAMrA+gBOQP4ASAAIAZBux8gCBsQSSADIAMoArwBNgKEASAAIANBwAFqQQQgA0GEAWogBBCWAwwBCyAIQcAAcQRAIAMgBSgCECIEKQMQNwPAASADIAQpAxg3A8gBIAMgBCkDKDcD6AEgAyAEKQMgNwPgASADIAMrA+ABOQPQASADIAMrA8gBOQPYASADIAMrA8ABOQPwASADIAMrA+gBOQP4ASAAIAZBux8gBUHA2wooAgBBAUEAEGIbEEkgACADQcABaiAHQQAQpQZBAk8EQCADIAUQITYCgAFB7vIDIANBgAFqEIABCyADIAUoAhAiBCkDKDcDeCADIAQpAyA3A3AgAyAEKQMYNwNoIAMgBCkDEDcDYCAAIANB4ABqQQAQiAIMAQsgBUHA2wooAgBBAUEAEGIEQCAAIAYQSSADIAUoAhAiBykDKDcDWCADIAcpAyA3A1AgAyAHKQMYNwNIIAMgBykDEDcDQCAAIANBQGsgBBCIAgwBCyAERQ0AIABBux8QSSADIAUoAhAiBykDKDcDOCADIAcpAyA3AzAgAyAHKQMYNwMoIAMgBykDEDcDICAAIANBIGogBBCIAgsgAygCsAEQGCADKAK0ARAYIAUoAhAoAgwiBARAIABBBSAEEJADCyAOBEAgDARAIAMgBSgCECIEKQMoNwMYIAMgBCkDIDcDECADIAQpAxg3AwggAyAEKQMQNwMAIAAgAxDdBCAAIAkoAtgBIAkoAuwBIAkoAvwBIAkoAtwBEMQBCyAAEJcCCwJAIBBFDQAgBRAcIQYDQCAGRQ0BIAAgBhDCAyAFIAYQLCEEA0AgBARAIAAgBBCKBCAFIAQQMCEEDAELCyAFIAYQHSEGDAALAAsCQCAAKAI8IgRFDQAgBCgCJCIERQ0AIAAgBBEBAAsgABCMBCAMRQRAIAAgBSACENsECyAPEOwCEBggDxAYCyANQQFqIQ0MAQsLIANBgAJqJAALgwMCBXwDfyMAQZABayIIJAACQAJAIAErAwAiBCAAKwMQIgJkDQAgBCAAKwMAIgVjDQAgASsDCCIDIAArAxgiBGQNACADIAArAwgiBmMNACABKwMQIgMgAmQgAyAFY3INACABKwMYIgMgBGQgAyAGY3INACABKwMgIgMgAmQgAyAFY3INACABKwMoIgMgBGQgAyAGY3INACACIAErAzAiAmMgAiAFY3INACABKwM4IgIgBGQNACACIAZjRQ0BCyABEOgIBEAgACsDGCEFIAArAxAhBANAIAdBBEYNAgJAIAQgASAHQQR0aiIJKwMAIgJjBEAgACACOQMQIAIhBAwBCyACIAArAwBjRQ0AIAAgAjkDAAsCQCAFIAkrAwgiAmMEQCAAIAI5AxggAiEFDAELIAIgACsDCGNFDQAgACACOQMICyAHQQFqIQcMAAsACyAIIAFEAAAAAAAA4D8gCEHQAGoiASAIQRBqIgcQoQEgACABENwEIAAgBxDcBAsgCEGQAWokAAuhAQEDfwJAIAAoApgBIgNBgICEAnFFDQAgACgCECICQQJBBCADQYCACHEiBBs2ApQCIAIgBEEQdkECczYCkAIgAigCmAIQGCACIAIoApQCQRAQPyICNgKYAiACIAEpAwg3AwggAiABKQMANwMAIAIgASkDEDcDECACIAEpAxg3AxggA0GAwABxRQRAIAAgAiACQQIQmAIaCyAEDQAgAhCDBQsL1goCB38DfCMAQfABayICJAAgAkG4AWpBiL8IQTAQHxoCQCAABEACQANAIARBAUYNASAEQfviAWogBEH84gFqIQMgBEEBaiEELQAAIQYDQCADLQAAIgVFDQEgA0EBaiEDIAUgBkcNAAsLQfqyA0G4/ABBNUH48gAQAAALIAJB0AFqIQhEAAAAAAAA8D8hCSAAQfviARDJAiEFIAAhAwJAAkADQAJAAkAgAwRAAkACQAJ/IANBOyAFEPoCIgZFBEBEAAAAAAAAAAAhCiAFDAELIAZBAWoiBCACQewBahDhASIKRAAAAAAAAAAAZkUgAigC7AEgBEZyDQEgBiADawshBAJAIAogCaEiC0QAAAAAAAAAAGRFDQAgC0TxaOOItfjkPmNFBEBBzOIKLQAAQcziCkEBOgAAIAkhCkEBcQ0BIAIgADYCgAFB+8oDIAJBgAFqECpBAyEHCyAJIQoLIARFBEBBACEGDAILIAMgBBCQAiIGDQEgAiAEQQFqNgJwQYj2CCgCAEH16QMgAkHwAGoQIBoQLwALQQAhA0HM4gotAABBzOIKQQE6AABBASEHQQFxRQRAIAIgADYCsAFBpfcEIAJBsAFqEDdBAiEHCwNAIAIoAsABIANNBEAgAkG4AWoiAEEYEDEgABA0DAgFIAIgAikDwAE3A6gBIAIgAikDuAE3A6ABIAJBoAFqIAMQGSEBAkACQCACKALIASIADgIBDAALIAIgAigCuAEgAUEYbGoiASkDCDcDkAEgAiABKQMQNwOYASACIAEpAwA3A4gBIAJBiAFqIAARAQALIANBAWohAwwBCwALAAsgAiAKRAAAAAAAAAAAZDoA4AEgAiAKOQPYASACQQA2AtQBIAIgBjYC0AEgAkEANgDkASACQQA2AOEBIAJBuAFqQRgQJiEEIAIoArgBIARBGGxqIgQgCCkDADcDACAEIAgpAxA3AxAgBCAIKQMINwMIIAkgCqEiCZlE8WjjiLX45D5jRQ0BRAAAAAAAAAAAIQkLIAlEAAAAAAAAAABkRQ0DQQAhBEEAIQMMAQsgAyAFaiEEQQAhA0EAIQUgBCAAEEAgAGpGDQEgBEH74gEQqgQgBGoiA0H74gEQyQIhBQwBCwsDQCADIAIoAsABIgVPRQRAIAIgAikDwAE3AxAgAiACKQO4ATcDCCAEIAIoArgBIAJBCGogAxAZQRhsaisDCEQAAAAAAAAAAGVqIQQgA0EBaiEDDAELCyAEBEAgCSAEuKMhCkEAIQMDQCADIAVPDQIgAiACKQPAATcDaCACIAIpA7gBNwNgIAIoArgBIAJB4ABqIAMQGUEYbGoiACsDCEQAAAAAAAAAAGUEQCAAIAo5AwgLIANBAWohAyACKALAASEFDAALAAsgAiACKQPAATcDWCACIAIpA7gBNwNQIAIoArgBIAJB0ABqIAVBAWsQGUEYbGoiACAJIAArAwigOQMICwNAAkAgAigCwAEiAEUNACACIAIpA8ABNwNIIAIgAikDuAE3A0AgAigCuAEgAkFAayAAQQFrEBlBGGxqKwMIRAAAAAAAAAAAZA0AIAIgAikDwAE3AzggAiACKQO4ATcDMCACQTBqIAIoAsABQQFrEBkhBQJAAkAgAigCyAEiAA4CAQYACyACIAIoArgBIAVBGGxqIgUpAwg3AyAgAiAFKQMQNwMoIAIgBSkDADcDGCACQRhqIAARAQALIAJBuAFqIAhBGBC+AQwBCwsgASACQbgBakEwEB8aCyACQfABaiQAIAcPC0HD0wFBuPwAQS1B+PIAEAAAC0GwgwRBwgBBAUGI9ggoAgAQOhoQOwAL6QEBBH8jAEEQayIEJAAgABBLIgMgAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECQhBQJAAkACQCAALQAPQf8BRgRAIANBf0YNAiAAKAIAIQIgAUUEQCACEBhBACECDAILIAIgARBqIgJFDQMgASADTQ0BIAIgA2pBACABIANrEDgaDAELIAFBARA/IgIgACAFEB8aIAAgBTYCBAsgAEH/AToADyAAIAE2AgggACACNgIAIARBEGokAA8LQY7AA0HS/ABBzQBBvbMBEAAACyAEIAE2AgBBiPYIKAIAQfXpAyAEECAaEC8ACwQAQQELrAEBBH8jAEEQayIEJAACQCAAKAIAIgNB/////wBJBEAgACgCBCADQQR0IgVBEGoiBhBqIgNFDQEgAyAFaiIFQgA3AAAgBUIANwAIIAAgAzYCBCAAIAAoAgAiAEEBajYCACADIABBBHRqIgAgAjkDCCAAIAE5AwAgBEEQaiQADwtBjsADQdL8AEHNAEG9swEQAAALIAQgBjYCAEGI9ggoAgBB9ekDIAQQIBoQLwAL8AIBBH8jAEEwayIDJAAgAyACNgIMIAMgAjYCLCADIAI2AhACQAJAAkACQAJAQQBBACABIAIQYCICQQBIDQAgAkEBaiEGAkAgABBLIAAQJGsiBSACSw0AIAYgBWshBSAAECgEQEEBIQQgBUEBRg0BCyAAIAUQkQNBACEECyADQgA3AxggA0IANwMQIAQgAkEQT3ENASADQRBqIQUgAiAEBH8gBQUgABBzCyAGIAEgAygCLBBgIgFHIAFBAE5xDQIgAUEATA0AIAAQKARAIAFBgAJPDQQgBARAIAAQcyADQRBqIAEQHxoLIAAgAC0ADyABajoADyAAECRBEEkNAUGTtgNBoPwAQeoBQfgeEAAACyAEDQQgACAAKAIEIAFqNgIECyADQTBqJAAPC0HGpgNBoPwAQd0BQfgeEAAAC0GtngNBoPwAQeIBQfgeEAAAC0H5zQFBoPwAQeUBQfgeEAAAC0GjngFBoPwAQewBQfgeEAAAC2gBA38jAEEQayIBJAACQCAAECgEQCAAIAAQJCIDEJACIgINASABIANBAWo2AgBBiPYIKAIAQfXpAyABECAaEC8ACyAAQQAQkgMgACgCACECCyAAQgA3AgAgAEIANwIIIAFBEGokACACCzMAIAAoAgAQGCAAKAIEEBggACgCCBAYIAAoAhAQGCAAKAIMEBggACgCFBAYIAAoAhgQGAvBAQEBfwJ/IAAoAhAiAigC2AFFBEBBACACLQCMAkEBcUUNARoLIAAQlwIgAigC2AELIgAgASgCAEcEQCAAEBggAiABKAIANgLYAQsgAigC7AEiACABKAIERwRAIAAQGCACIAEoAgQ2AuwBCyACKAL8ASIAIAEoAghHBEAgABAYIAIgASgCCDYC/AELIAIoAtwBIgAgASgCDEcEQCAAEBggAiABKAIMNgLcAQsgAiABLQAQIAIvAYwCQf7/A3FyOwGMAgvdBQEGfyMAQUBqIgUkACAAKAIQIQYgBUIANwM4IAVCADcDMCAEIAYoAtgBNgIAIAQgBigC7AE2AgQgBCAGKAL8ATYCCCAEIAYoAtwBNgIMIAQgBi0AjAJBAXE6ABACQCACKAIQIgQEQCAELQAADQELIAEoAjwiBEUEQCAAIAYoAgggBUEwahCnBhBkIQQgAUEBOgBAIAEgBDYCPAtB0N8KQdDfCigCACIBQQFqNgIAIAUgBDYCICAFIAE2AiQgBUEwaiEBIwBBMGsiBCQAIAQgBUEgaiIHNgIMIAQgBzYCLCAEIAc2AhACQAJAAkACQAJAAkBBAEEAQa6xASAHEGAiCkEASA0AIApBAWohBwJAIAEQSyABECRrIgkgCksNACAHIAlrIQkgARAoBEBBASEIIAlBAUYNAQsgASAJELcCQQAhCAsgBEIANwMYIARCADcDECAIIApBEE9xDQEgBEEQaiEJIAogCAR/IAkFIAEQcwsgB0GusQEgBCgCLBBgIgdHIAdBAE5xDQIgB0EATA0AIAEQKARAIAdBgAJPDQQgCARAIAEQcyAEQRBqIAcQHxoLIAEgAS0ADyAHajoADyABECRBEEkNAUGTtgNBoPwAQeoBQfgeEAAACyAIDQQgASABKAIEIAdqNgIECyAEQTBqJAAMBAtBxqYDQaD8AEHdAUH4HhAAAAtBrZ4DQaD8AEHiAUH4HhAAAAtB+c0BQaD8AEHlAUH4HhAAAAtBo54BQaD8AEHsAUH4HhAAAAsgARDTAiEECyAAQQAgAigCACACKAIMIAIoAgggBCAGKAIIEOwIIQEgBUEwahBcAkAgAUUNACAGKALYAUUEQCAGLQCMAkEBcUUNAQsgBSADKQMYNwMYIAUgAykDEDcDECAFIAMpAwg3AwggBSADKQMANwMAIAAgBRDdBCAAIAYoAtgBIAYoAuwBIAYoAvwBIAYoAtwBEMQBCyAFQUBrJAAgAQuaAQEDfyMAQRBrIgUkACAAKAIEIgBB3ABqKAAAIQQgACgCVCAFIAApAlw3AwggBSAAKQJUNwMAIAUgBEEBaxAZQQJ0aigCACIEIAE2AhQgBEEEECYhBiAEKAIAIAZBAnRqIAQoAhQ2AgAgASADNgJcIAAtAIQBQQJxBEAgASABLQBkQfwBcUEBcjoAZAsgASACNgJYIAVBEGokAAtCAQF/IwBBEGsiAiQAIAAoAiRFBEAgAEEBNgIkIAIgABCsBjYCBCACIAE2AgBBh/8EIAIQNyAAEJQJCyACQRBqJAAL5AEBA39BwAIhBEG8AiEFAkACQAJAIANBAWsOAgIBAAsgAEHaATYCoAJBuAIhBEG0AiEFDAELQcgCIQRBxAIhBQsCQAJAIAAgBGoiBigCACIEBEAgBiAEKAIINgIADAELIABBHEHuMRCYASIEDQBBASEGDAELIAFBgQI7ASAgACABQfUxELIGQQAhBiABQQA2AgwgBCAAIAVqIgUoAgA2AgggBSAENgIAIAQgAzYCGCAEIAE2AgwgACgC0AIhASAEIAI6ABQgBCABNgIQIARCADcCACADDQAgAEEBOgDgBEEADwsgBgtqAQF/IwBBEGsiBCQAIAQgAjYCDAJ/AkAgACgCDEUEQCAAEF9FDQELIABBDGohAgNAIAEgBEEMaiADIAIgACgCCCABKAI4EQgAQQJPBEAgABBfDQEMAgsLIAAoAhAMAQtBAAsgBEEQaiQAC0wBAn8gACgCACEBA0AgAQRAIAEoAgAgACgCFCABQcA+EGchAQwBCwsgACgCBCEBA0AgAQRAIAEoAgAgACgCFCABQcY+EGchAQwBCwsLbgEDfyMAQRBrIgEkAAJAIAAQqwQiAgRAQfyAC0EANgIAIAFBADYCDCACIAFBDGpBChCpBCEAAkBB/IALKAIADQAgAiABKAIMIgNGDQAgAy0AAEUNAgtB/IALQQA2AgALQQAhAAsgAUEQaiQAIAALSwECfyAAIAAoAhQgACgCDEECdGoiAigCACIBKAIQNgIcIAAgASgCCCIBNgIkIAAgATYCUCAAIAIoAgAoAgA2AgQgACABLQAAOgAYC9YFAQZ/AkAgAiABayIGQQJIDQACQAJAAkACQAJAAkACQAJ/IAEtAAAiB0UEQCAAIAEtAAEiBWotAEgMAQsgB8AgASwAASIFECsLQf8BcSIEQRNrDgYCBgYBBgEACwJAIARBBmsOAgQDAAsgBEEdRw0FIAVBA3ZBHHEgB0GggAhqLQAAQQV0ckGw8wdqKAIAIAV2QQFxRQ0FCyAAQcgAaiEJAkACQANAIAIgASIAQQJqIgFrIgZBAkgNCCAALQADIQUCQAJAAkACfyAALQACIgdFBEAgBSAJai0AAAwBCyAHwCAFwBArC0H/AXEiBEESaw4MBQoKCgMKAwMDAwoBAAsgBEEGaw4CAQMJCyAFQQN2QRxxIAdBoIIIai0AAEEFdHJBsPMHaigCACAFdkEBcQ0BDAgLCyAGQQJGDQUMBgsgBkEESQ0EDAULIABBBGohAUEJIQgMBAsgAiABQQJqIgRrQQJIDQQgAS0AAyIGwCEFAn8gASwAAiIHRQRAIAVB+ABGBEAgAiABQQRqIgRrQQJIDQcCfyAELAAAIgVFBEAgACABLQAFai0ASAwBCyAFIAEsAAUQKwtB/gFxQRhHBEAgBCEBDAcLIABByABqIQUgBCEBA0AgAiABIgBBAmoiAWtBAkgNCCAALQADIQQCfyAALAACIgZFBEAgBCAFai0AAAwBCyAGIATAECsLQf8BcSIEQRhrQQJJDQALIARBEkcNBiAAQQRqIQFBCiEIDAYLIAAgBmotAEgMAQsgByAFECsLQRlHBEAgBCEBDAQLIABByABqIQUgBCEBA0AgAiABIgBBAmoiAWtBAkgNBSAALQADIQQCfyAALAACIgZFBEAgBCAFai0AAAwBCyAGIATAECsLQf8BcSIEQRlGDQALIARBEkcNAyAAQQRqIQFBCiEIDAMLIAZBBEkNAQwCCyAGQQJHDQELQX4PCyADIAE2AgAgCA8LQX8LGwAgACgCTCIAKAIIIAEgAiAAKAIAKAIUEQUAC9YFAQZ/AkAgAiABayIGQQJIDQACQAJAAkACQAJAAkACQAJ/IAEtAAEiB0UEQCAAIAEtAAAiBWotAEgMAQsgB8AgASwAACIFECsLQf8BcSIEQRNrDgYCBgYBBgEACwJAIARBBmsOAgQDAAsgBEEdRw0FIAVBA3ZBHHEgB0GggAhqLQAAQQV0ckGw8wdqKAIAIAV2QQFxRQ0FCyAAQcgAaiEJAkACQANAIAIgASIAQQJqIgFrIgZBAkgNCCAALQACIQUCQAJAAkACfyAALQADIgdFBEAgBSAJai0AAAwBCyAHwCAFwBArC0H/AXEiBEESaw4MBQoKCgMKAwMDAwoBAAsgBEEGaw4CAQMJCyAFQQN2QRxxIAdBoIIIai0AAEEFdHJBsPMHaigCACAFdkEBcQ0BDAgLCyAGQQJGDQUMBgsgBkEESQ0EDAULIABBBGohAUEJIQgMBAsgAiABQQJqIgRrQQJIDQQgAS0AAiIGwCEFAn8gASwAAyIHRQRAIAVB+ABGBEAgAiABQQRqIgRrQQJIDQcCfyABLAAFIgFFBEAgACAELQAAai0ASAwBCyABIAQsAAAQKwtB/gFxQRhHBEAgBCEBDAcLIABByABqIQUgBCEBA0AgAiABIgBBAmoiAWtBAkgNCCAALQACIQQCfyAALAADIgZFBEAgBCAFai0AAAwBCyAGIATAECsLQf8BcSIEQRhrQQJJDQALIARBEkcNBiAAQQRqIQFBCiEIDAYLIAAgBmotAEgMAQsgByAFECsLQRlHBEAgBCEBDAQLIABByABqIQUgBCEBA0AgAiABIgBBAmoiAWtBAkgNBSAALQACIQQCfyAALAADIgZFBEAgBCAFai0AAAwBCyAGIATAECsLQf8BcSIEQRlGDQALIARBEkcNAyAAQQRqIQFBCiEIDAMLIAZBBEkNAQwCCyAGQQJHDQELQX4PCyADIAE2AgAgCA8LQX8LpQUBBX9BASEEAkAgAiABayIFQQBMDQACQAJAAkACQAJAAkACQAJAIABByABqIgYgAS0AAGotAAAiCEEFaw4DAQIDAAsgCEETaw4GAwUFBAUEBQsgBUEBRg0FIAAgASAAKALgAhEAAA0EIAAgASAAKALUAhEAAEUNBEECIQQMAwsgBUEDSQ0EIAAgASAAKALkAhEAAA0DIAAgASAAKALYAhEAAEUNA0EDIQQMAgsgBUEESQ0DIAAgASAAKALoAhEAAA0CIAAgASAAKALcAhEAAEUNAkEEIQQMAQsgAiABQQFqIgBrQQBMDQMgAC0AACIEQfgARgRAIAIgAUECaiIBa0EATA0EIAYgAS0AAGotAABB/gFxQRhHDQIDQCACIAEiAEEBaiIBa0EATA0FIAYgAS0AAGotAAAiBEEYa0ECSQ0ACyAEQRJHDQIgAEECaiEBQQohBwwCCyAEIAZqLQAAQRlHBEAgACEBDAILIAAhAQNAIAIgASIAQQFqIgFrQQBMDQQgBiABLQAAai0AACIEQRlGDQALIARBEkcNASAAQQJqIQFBCiEHDAELIAEgBGohAQNAIAIgAWsiBUEATA0DQQEhBAJAAkACQCAGIAEtAABqLQAAIghBEmsOCgIEBAQBBAEBAQEACwJAAkACQCAIQQVrDgMAAQIGCyAFQQFGDQYgACABIAAoAuACEQAADQUgACABIAAoAsgCEQAARQ0FQQIhBAwCCyAFQQNJDQUgACABIAAoAuQCEQAADQQgACABIAAoAswCEQAARQ0EQQMhBAwBCyAFQQRJDQQgACABIAAoAugCEQAADQMgACABIAAoAtACEQAARQ0DQQQhBAsgASAEaiEBDAELCyABQQFqIQFBCSEHCyADIAE2AgAgBw8LQX4PC0F/C/gDAQV/IAMgBE8EQEF8DwsgASgCSCEHAkACQAJAAkAgBCADQQFqRgRAQX8hBiABLQBFIglBA2tB/wFxQQNJDQMgAy0AACIIQe8BayIKQRBLQQEgCnRBgYAGcUVyDQEgAkUNAyAJRQ0CDAMLAkACQAJAIAMtAAEiCCADLQAAIglBCHRyIgZBgPgARwRAIAZBu98DRg0CIAZB/v8DRg0BIAZB//0DRw0DIAIEQCABLQBFRQ0GCyAFIANBAmo2AgAgByAAKAIQNgIAQQ4PCwJAIAEtAEUiBkEERwRAIAJFIAZBA0dyDQEMBgsgAg0FCyAHIAAoAhQiADYCAAwGCyACBEAgAS0ARUUNBAsgBSADQQJqNgIAIAcgACgCFDYCAEEODwsCQCACRQ0AIAEtAEUiBkEFSw0AQQEgBnRBOXENAwsgBCADQQJqRgRAQX8PCyADLQACQb8BRw0CIAUgA0EDajYCACAHIAAoAgg2AgBBDg8LIAlFBEAgAgRAIAEtAEVBBUYNAwsgByAAKAIQIgA2AgAMBAsgAiAIcg0BIAcgACgCFCIANgIAIAAgAyAEIAUgACgCABEGACEGDAILIAhFIAhBPEZyDQELIAcgACABLABFQQJ0aigCACIANgIADAELIAYPCyAAIAMgBCAFIAAgAkECdGooAgARBgALCABB4AQQpAoLJgAgACABQdzbCigCAEHx/wQQjwEiAEGF9QAgAC0AABsiABBJIAALigQCDXwDfyMAQUBqIhEkACABEC0oAkgoAhAoAnQhEiARIAEoAhAiEykDGDcDGCARIBMpAxA3AxAgEUEwaiARQRBqIBJBA3EiEhDhCSARIAIoAhAiAikDGDcDCCARIAIpAxA3AwAgEUEgaiARIBIQ4QkCQCADLQAhIhJFIBJBD0ZyRQRAAnwgAygCGCICBEAgAisDGCEGIAIrAxAhByACKwMAIQggAisDCAwBCyABEC0hAiABKAIQIhMrA1giBCATKwNQRAAAAAAAAOA/oiIFIAIoAhAtAHRBAXEiAhshBiAFIAQgAhshByAFmiIFIASaIgQgAhshCCAEIAUgAhsLIQkgCCAHoEQAAAAAAADgP6IhCiAJIAagRAAAAAAAAOA/oiEMQQAhEyARKwMoIQ0gESsDICEOIBErAzghDyARKwMwIRBBACECA0AgAkEERkUEQAJAIBIgAnZBAXFFDQAgCiEEIAkhBQJAAnwCQAJAAkAgAkEBaw4DAAECBAsgBwwCCyAGIQUMAgsgCAshBCAMIQULQQAgEyAQIASgIA6hIgQgBKIgDyAFoCANoSIEIASioCIEIAtjGw0AIAJBAnRBkPMHaigCACETIAQhCwsgAkEBaiECDAELCyADLQAhIRIMAQtBACETCyAAIAMoAiQ2AiQgASADKAIYIAAgEyASQQAQlgQaIBFBQGskAAs5AgF/AXwjAEEQayICJAAgACACQQxqEOEBIQMgAigCDCAARgR/QQEFIAEgAzkDAEEACyACQRBqJAALUgEDfyAAEOYJIABBBGohAgN/IAAoAgAQrQIiAUEwayEDIAFBLkYgA0EKSXIEfyACIAHAEJcDDAEFIAFBf0cEQCABIAAoAgAQ0wsLIAIQ6QkLCwvYAQECfyMAQRBrIgQkAEH83gpB/N4KKAIAIgVBAWo2AgAgBCABECE2AgQgBCAFNgIAIAJBmjMgBBCEASABEDkgAhD6BEEBEI0BIgJB/CVBwAJBARA2GiACKAIQQQE6AIYBIAEgAkEBEIUBGiADIABBARCFARpB8NsKIAIQLSACQcLwAEHx/wRB8NsKKAIAENQGNgIAQfzbCiACEC0gAkHHmQFBsy1B/NsKKAIAENQGNgIAQdjbCiACEC0gAkGhlgFBmhJB2NsKKAIAENQGNgIAIARBEGokACACC/0FAgZ/AXwgAEHU2wooAgBEAAAAAAAA6D9EexSuR+F6hD8QTCEHIAAoAhAgBzkDICAAQdDbCigCAEQAAAAAAADgP0R7FK5H4XqUPxBMIQcgACgCECAHOQMoAn8gAEHY2wooAgBB+5IBEI8BIQIjAEEgayIDJAAgAEHImgEQJxD7BARAIAJBnewAIAJBkYMBED4bIQILAkACQAJAAkAgAkGd7AAQPg0AQfD+CSEBA0AgASgCACIERQ0BIAQgAhA+DQIgAUEQaiEBDAALAAsgAhDHBiIBDQBBnN8KQZzfCigCACIEQQFqIgE2AgAgBEH/////A08NAUGY3wooAgAgAUECdCIBEGoiBUUNAiABIARBAnQiBksEQCAFIAZqQQA2AAALQZjfCiAFNgIAQRAQUiEBQZjfCigCACAEQQJ0aiABNgIAIAFB+P4JKQMANwIIIAFB8P4JKQMANwIAIAEgAhClATYCAEEBIQQCQEHg2gooAgANACACQZ3sABA+DQAgASgCACECQQAhBCADQfD+CSgCADYCECADIAI2AhRBr/oDIANBEGoQKgsgASAEOgAMCyADQSBqJAAgAQwCC0GOwANB0vwAQc0AQb2zARAAAAsgAyABNgIAQYj2CCgCAEH16QMgAxAgGhAvAAshASAAKAIQIAE2AgggAEHw2wooAgAQRSEBIABB5NsKKAIARAAAAAAAACxARAAAAAAAAPA/EEwhByAAQejbCigCAEHq6QAQjwEhAiAAQezbCigCAEGF9QAQjwEhAyAAIAEgARB2QQBHIAAQ5QJBAkYgByACIAMQ2wIhASAAKAIQIAE2AngCQEH02wooAgAiAUUNACAAIAEQRSIBRQ0AIAEtAABFDQAgACABIAEQdkEAR0EAIAcgAiADENsCIQEgACgCECABNgJ8IAAQLSgCECIBIAEtAHFBEHI6AHELIABBgNwKKAIAQQBBABBiIQEgACgCECICQf8BIAEgAUH/AU4bOgCgASAAIAIoAggoAgQoAgARAQALRAACQCAAECgEQCAAECRBD0YNAQsgAEEAEH8LAkAgABAoBEAgAEEAOgAPDAELIABBADYCBAsgABAoBH8gAAUgACgCAAsLlAYBBH8jAEGQAWsiASQAAkACQCAARQ0AIAAtAABFDQBB8NoKKAIAIgMEQEG+3gotAAANASABIAM2AnBB/vkEIAFB8ABqECpBvt4KQQE6AAAMAQtBwN4KKAIAIQMCQEHk2gooAgAEQCADDQEDQEHM3gooAgAgAk0EQEHE3gpBCBAxQcTeChA0QcDeCkHk2gooAgAiAjYCACABQfQAaiACEP4JQdzeCiABKAKMATYCAEHU3gogASkChAE3AgBBzN4KIAEpAnw3AgBBxN4KIAEpAnQ3AgAMAwUgAUHM3gopAgA3A0ggAUHE3gopAgA3A0AgAUFAayACEBkhAwJAAkBB1N4KKAIAIgQOAgEHAAsgAUHE3gooAgAgA0EDdGopAgA3AzggAUE4aiAEEQEACyACQQFqIQIMAQsACwALAkAgA0Ho2gooAgBGDQADQEHM3gooAgAgAk0EQEHE3gpBCBAxQcTeChA0QcDeCkHo2gooAgAiAjYCACACRQ0CIAItAABFDQIgAUH0AGogAhD+CUHc3gogASgCjAE2AgBB1N4KIAEpAoQBNwIAQczeCiABKQJ8NwIAQcTeCiABKQJ0NwIABSABQczeCikCADcDMCABQcTeCikCADcDKCABQShqIAIQGSEDAkACQEHU3gooAgAiBA4CAQcACyABQcTeCigCACADQQN0aikCADcDICABQSBqIAQRAQALIAJBAWohAgwBCwsLAkAgAC0AAEEvRg0AQczeCigCAEUNACABQdzeCigCADYCGCABQdTeCikCADcDECABQczeCikCADcDCCABQcTeCikCADcDACABIAAQ/QkhAgwCCyAAIQIMAQtBACECA0AgAkEDRwRAIAAgAkH54gFqLAAAIAAQQEEBahDkCyIDQQFqIAAgAxshACACQQFqIQIMAQsLIAFB3N4K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AUEHcXRyOgAADwtBl7IDQe/6AEHRAEHfIRAAAAtQAQF/IAEoAhAoApwBRQRAQQAPCyAAIAFBMEEAIAEoAgBBA3FBA0cbaigCKBDDDgR/IAAgAUFQQQAgASgCAEEDcUECRxtqKAIoEMMOBUEACws1AQJ/AkAgABAcIgFFBEAMAQsgARCGAiECA0AgACABEB0iAUUNASACIAEQnggaDAALAAsgAguGAwEDfyABIAFBMGoiAyABKAIAQQNxQQNGGygCKCgCECICKALQASACKALUASICQQFqIAJBAmoQ2gEhAiABIAMgASgCAEEDcUEDRhsoAigoAhAgAjYC0AEgASADIAEoAgBBA3FBA0YbKAIoKAIQIgIgAigC1AEiBEEBajYC1AEgAigC0AEgBEECdGogATYCACABIAMgASgCAEEDcUEDRhsoAigoAhAiAygC0AEgAygC1AFBAnRqQQA2AgAgASABQTBrIgMgASgCAEEDcUECRhsoAigoAhAiAigC2AEgAigC3AEiAkEBaiACQQJqENoBIQIgASADIAEoAgBBA3FBAkYbKAIoKAIQIAI2AtgBIAEgAyABKAIAQQNxQQJGGygCKCgCECICIAIoAtwBIgRBAWo2AtwBIAIoAtgBIARBAnRqIAE2AgAgASADIAEoAgBBA3FBAkYbKAIoKAIQIgEoAtgBIAEoAtwBQQJ0akEANgIAIAAoAhBBAToA8AEgABBhKAIQQQE6APABC4ABAQJ/QcABIQMgACECA0AgAigCECADaigCACICBEBBuAEhAyABIAJHDQELCyACBEAgASgCECICKAK8ASEBIAIoArgBIgIEQCACKAIQIAE2ArwBCyABIAAgARsoAhBBuAFBwAEgARtqIAI2AgAPC0GbpANBq7oBQb8BQdyfARAAAAsJAEEBIAAQ1AILYQEEfyAAKAIEIQQCQANAIAIgBEYNASACQQJ0IAJBAWohAiAAKAIAIgVqIgMoAgAgAUcNAAsgACAEQQFrIgE2AgQgAyAFIAFBAnQiAWooAgA2AgAgACgCACABakEANgIACwtDAAJAIAAQKARAIAAQJEEPRg0BCyAAEI4PCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQKAR/IAAFIAAoAgALC3QBAn8jAEEgayICJAACQCAArSABrX5CIIhQBEAgACABEE4iA0UNASACQSBqJAAgAw8LIAIgATYCBCACIAA2AgBBiPYIKAIAQabqAyACECAaEC8ACyACIAAgAWw2AhBBiPYIKAIAQfXpAyACQRBqECAaEC8AC7cNAgh/A3wjAEHAAmsiBCQAAkAgABA5IgkgACgCAEEDcSIKQQAQ5QMiBUUNAANAIAVFDQECQCAAIAUQRSIDRQ0AIAMtAABFBEAgBSgCCEHC8AAQPkUNAQsgAUG57QQQGxogASACKAIAEEQgBSgCCCACIAEQuwIgAUGTzQMQGxoCQCACLQAFQQFHDQACQCAFKAIIIgNBwcMBED4NACADQbHDARA+DQAgA0G5wwEQPg0AIANBl8MBED4NACADQajDARA+DQAgA0GfwwEQPkUNAQsgACAFEEUiA0UNASADLQAARQ0BIANBABCQCiIIRQRAIAQgAzYCAEHK+gQgBBAqDAILIAFB7v8EEBsaIAIgAigCACIDQQFqNgIAIAEgAxBEIAFB/s0EEBsaQQAhBwNAIAgoAgAgB00EQCACIAIoAgBBAWs2AgAgAUHu/wQQGxogASACKAIAEEQgAUH+yAEQGxogCBCOCgwDCyAHBEAgAUG57QQQGxoLIAgoAgghAyACIAIoAgAiBkEBajYCACABIAYQRCABQfDYAxAbGiABIAIoAgAQRAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAdB0ABsaiIDKAIAIgYOEAoKAAABAQIDBAQGBwsFBQgJCyAEQdAAQfAAIAZBAkYbNgJQIAFB7+wEIARB0ABqEB4gASACKAIAEEQgASADQQhqELQIDAoLIARBwgBB4gAgBkEERhs2AmAgAUHv7AQgBEHgAGoQHiABIAIoAgAQRCABIANBCGoQtAgMCQsgAUGk7QRBABAeIAEgAigCABBEIAEgA0EIahC0CAwICyABQYztBEEAEB4gASACKAIAEEQgAysDCCELIAQgAysDEDkDmAEgBCALOQOQASABQffqBCAEQZABahAeIAEgAigCABBEIARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUH87AQgBEGAAWoQHiABIAIoAgAQRCAEIAMrAyA5A3AgAUG76gQgBEHwAGoQHiABIAIoAgAQRCABQdfMAxAbGiADKAIoIAIgARC7AiABQQoQZQwHCyAEQcMAQeMAIAZBCEYbNgKgASABQe/sBCAEQaABahAeIAEgAigCABBEIAFBo+wEQQAQHiABIAIoAgAQRCABQfDMAxAbGiADKAIIIAIgARC7AiABQQoQZQwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQe/sBCAEQZACahAeIAEgAigCABBEAkACQAJAIAMoAggOAgABAgsgAUGj7ARBABAeIAEgAigCABBEIAFB8MwDEBsaIAMoAhAgAiABELsCIAFBChBlDAcLIAFB/esEQQAQHiABIAIoAgAQRCABIAIoAgAQRCADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFBo+sEIARBgAJqEB4gASACKAIAEEQgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQY3rBCAEQfABahAeIAEgAigCABBEIAEgAygCMCADKAI0IAIQkA8MBgsgAUGQ7ARBABAeIAEgAigCABBEIAEgAigCABBEIAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUHV6wQgBEHQAWoQHiABIAIoAgAQRCADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFBuesEIARBsAFqEB4gASACKAIAEEQgASADKAJAIAMoAkQgAhCQDwwFCyABQbDtBEEAEB4gASACKAIAEEQgBCADKwMIOQOgAiABQczqBCAEQaACahAeIAEgAigCABBEIAFBjc0DEBsaIAMoAhAgAiABELsCIAFBChBlDAQLIAFBmO0EQQAQHiABIAIoAgAQRCABQYPNAxAbGiADKAIIIAIgARC7AiABQQoQZQwDCyABQfHrBEEAEB4gASACKAIAEEQgBCADKAIINgKwAiABQe7HBCAEQbACahAeDAILIARBsgI2AhQgBEGFuwE2AhBBiPYIKAIAQdi/BCAEQRBqECAaEDsACyAEQeUAQcUAIAYbNgJAIAFB7+wEIARBQGsQHiABIAIoAgAQRCADKwMIIQsgAysDECEMIAMrAxghDSAEIAMrAyA5AzggBCANOQMwIAQgDDkDKCAEIAs5AyAgAUHJygQgBEEgahAeCyACIAIoAgBBAWsiAzYCACABIAMQRCABQa8IEBsaIAdBAWohBwwACwALIAAgBRBFIAIgARC7AgsgCSAKIAUQ5QMhBQwACwALIARBwAJqJAAL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IAM2AgAgAUEgakG4MiABEIQBA0AgAi0AACACQQFqIQINAAtBuqADIQMMAQUgAUEgakEpEH8LCwsgAEGsywMgAUEgahDCARDAAwwACwALIAFBIGoQXCABQTBqJAALaQECfyMAQRBrIgMkACADQgA3AwggA0IANwMAA0ACQCACLQAAIgRB3ABHBEAgBA0BIAAgASADEMIBEHEgAxBcIANBEGokAA8LIANB3AAQfyACLQAAIQQLIAMgBMAQfyACQQFqIQIMAAsAC5ICAQV/IAAQhwUhAyAAECQhAQJAAkACQANAIAEiAkUNASADIAFBAWsiAWotAABBLkcNAAsgABAkIQEDQCABQQFrIQUgASACRwRAIAMgBWotAABBMEcNAgsCQCAAECgEQCAALQAPIgRFDQQgACAEQQFrOgAPDAELIAAgACgCBEEBazYCBAsgASACRyAFIQENAAsgABAkIgFBAkkNACABIANqIgFBAmsiAi0AAEEtRw0AIAFBAWstAABBMEcNACACQTA6AAAgABAoBEAgAC0ADyIBRQ0DIAAgAUEBazoADw8LIAAgACgCBEEBazYCBAsPC0HijwNBoPwAQZIDQegqEAAAC0HijwNBoPwAQagDQegqEAAAC8cBAQN/IwBBEGsiAiQAIAFBUEEAIAEoAgBBA3FBAkcbaiIBQVBBACABKAIAQQNxIgNBAkcbaigCKCEEIAFBMEEAIANBA0cbaigCKCEDIAIgASkDCDcDCCACIAEpAwA3AwACQCAAIAMgBCACENkCRQ0AIAAQOSAARgRAIAAtABhBIHEEQCABEMcLCyAAIAEQzwcgARCzByAAQQIgASkDCBC/BgsgACABQQ9BAEEAEMgDDQAgABA5IABGBEAgARAYCwsgAkEQaiQACxoAIAAgARCsASIBIAIQwQMgACABQQAQjAEaC0UAIAAgAUG+zgMgAisDAEQAAAAAAABSQKMQjQMgACABQb7OAyADIAIrAwgiA6EgA0G42wotAAAbRAAAAAAAAFJAoxCNAwt9AQN/IwBBMGsiAiQAIAAQISEDIAAQLSEEAkACQCADBEBBfyEAIAQgASADEJIGQX9HDQEMAgsgAiAAKQMINwMAIAJBEGoiA0EeQdTPASACELQBGkF/IQAgASADIAQoAkwoAgQoAgQRAABBf0YNAQtBACEACyACQTBqJAAgAAvN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ABCPATYCuAJBAEHk2wooAgBEAAAAAAAALEBEAAAAAAAA8D8QTCEOIABBnKAKNgLIAiAAIA45A8ACIAAgARAhNgK0ASAAKAKoAhAYIABBADYCqAIgACgCrAIQGCAAQQA2AqwCIAAoArQCEBggAEEANgK0AgJAAkAgAUGqKRAnIgUEQCAAIAFB/doAECciAkG8zgMgAhs2AqACIAAgAUHw2gAQJyICQbqgAyACGyIENgKkAiAAKAKgAiICIAQQyQIgAmoiAkEAIAItAAAbIgIEQCADIAIsAAA2AtACQYLkBCADQdACahAqIABB8f8ENgKkAgsgACAFEGQ2AqgCIANCADcD0AQgA0IANwPIBCADQgA3A8AEIANBwARqQQQQJiECIAMoAsAEIAJBAnRqIAMoAtQENgIAIAAoAqgCIQIDQCACIAAoAqACELEFIgIEQCADIAI2AtQEIANBwARqQQQQJiECIAMoAsAEIAJBAnRqIAMoAtQENgIAQQAhAgwBCwsgAygCyAQiAkEBayIFQQBIDQIgAkECTwRAIANBADYC1AQgA0HABGoiBEEEECYhAiADKALABCACQQJ0aiADKALUBDYCACAEIABBrAJqQQBBBBDHAQtBACECA0AgAygCyAQgAksEQCADIAMpA8gENwO4AiADIAMpA8AENwOwAiADQbACaiACEBkhCQJAAkACQCADKALQBCIEDgICAAELIAMoAsAEIAlBAnRqKAIAEBgMAQsgAygCwAQgCUECdGooAgAgBBEBAAsgAkEBaiECDAELCyADQcAEaiICQQQQMSACEDQgACAFNgKwAiABQZEkECciBUUNASAFLQAARQ0BQQAhBiAAKAKwAkECakEEED8hB0EBIQIDQCAAKAKwAiIEIAJOBEAgACACIAQgBRDfCARAIAcgBkEBaiIGQQJ0aiACNgIACyACQQFqIQIMAQsLAkAgBgRAIAcgBjYCACAHIAZBAnRqIARBAWo2AgQMAQsgAyAFNgLAAkHA5QQgA0HAAmoQKiAHEBhBACEHCyAAIAc2ArQCDAELIABBATYCsAILQQEQ2gIgA0GoBGohDCADQcgEaiENQYC/CCgCACEIIAAgACgCmAEiAjYCnAEDQAJAAkACQCACBEACfyAAKAI8IgRFBEBBACEGQQAMAQsgBCgCDCEGIAQoAggLIQQgAiAGNgIYIAIg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/////////w+DhCICQoGAgICAgICACFoEQCAAQgF8IQAMAQsgAkKAgICAgICAgAhSDQAgAEIBgyAAfCEACyAAQoCAgICAgIAIhSAAIABC/////////wdWIgQbIQAgBK0LIQIgBUEgaiQAIAFCgICAgICAgICAf4MgAkI0hoQgAIS/C4kCAAJAIAAEfyABQf8ATQ0BAkBBxIMLKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0H8gAtBGTYCAEF/BUEBCw8LIAAgAToAAEEBC8ICAQR/IwBB0AFrIgUkACAFIAI2AswBIAVBoAFqIgJBAEEoEDgaIAUgBSgCzAE2AsgBAkBBACABIAVByAFqIAVB0ABqIAIgAyAEENELQQBIBEBBfyEEDAELIAAoAkxBAEggACAAKAIAIghBX3E2AgACfwJAAkAgACgCMEUEQCAAQdAANgIwIABBADYCHCAAQgA3AxAgACgCLCEGIAAgBTYCLAwBCyAAKAIQDQELQX8gABCmBw0BGgsgACABIAVByAFqIAVB0ABqIAVBoAFqIAMgBBDRCwshAiAGBEAgAEEAQQAgACgCJBEDABogAEEANgIwIAAgBjYCLCAAQQA2AhwgACgCFCEBIABCADcDECACQX8gARshAgsgACAAKAIAIgAgCEEgcXI2AgBBfyACIABBIHEbIQQNAAsgBUHQAWokACAECxIAIAAgAUEKQoCAgIAIELAFpwthAAJAIAANACACKAIAIgANAEEADwsgACABEKoEIABqIgAtAABFBEAgAkEANgIAQQAPCyAAIAEQyQIgAGoiAS0AAARAIAIgAUEBajYCACABQQA6AAAgAA8LIAJBADYCACAAC38CAn8CfiMAQaABayIEJAAgBCABNgI8IAQgATYCFCAEQX82AhggBEEQaiIFQgAQjwIgBCAFIANBARDYCyAE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IABCADcCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALlAMCA34CfwJAIAC9IgJCNIinQf8PcSIEQf8PRw0AIABEAAAAAACAVkCiIgAgAKMPCyACQgGGIgFCgICAgICAwNaAf1gEQCAARAAAAAAAAAAAoiAAIAFCgICAgICAwNaAf1EbDwsCfiAERQRAQQAhBCACQgyGIgFCAFkEQANAIARBAWshBCABQgGGIgFCAFkNAAsLIAJBASAEa62GDAELIAJC/////////weDQoCAgICAgIAIhAshASAEQYUISgRAA0ACQCABQoCAgICAgKALfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQgGGIQEgBEEBayIEQYUISg0AC0GFCCEECwJAIAFCgICAgICAoAt9IgNCAFMNACADIgFCAFINACAARAAAAAAAAAAAog8LIAFC/////////wdYBEADQCAEQQFrIQQgAUKAgICAgICABFQgAUIBhiEBDQALCyACQoCAgICAgICAgH+DIAFCgICAgICAgAh9IAStQjSGhCABQQEgBGutiCAEQQBKG4S/C+ICAQV/AkACQAJAIAIoAkxBAE4EQCABQQJIDQEMAgtBASEGIAFBAUoNAQsgAiACKAJIIgJBAWsgAnI2AkggAUEBRw0BIABBADoAACAADwsgAUEBayEEIAAhAQJAA0ACQAJAAkAgAigCBCIDIAIoAggiBUYNAAJ/IANBCiAFIANrEPoCIgcEQCAHIAIoAgQiA2tBAWoMAQsgAigCCCACKAIEIgNrCyEFIAEgAyAFIAQgBCAFSxsiAxAfGiACIAIoAgQgA2oiBTYCBCABIANqIQEgBw0CIAQgA2siBEUNAiAFIAIoAghGDQAgAiAFQQFqNgIEIAUtAAAhAwwBCyACEL0FIgNBAE4NAEEAIQQgACABRg0DIAItAABBEHENAQwDCyABIAM6AAAgAUEBaiEBIANB/wFxQQpGDQAgBEEBayIEDQELCyAARQRAQQAhBAwBCyABQQA6AAAgACEECyAGDQALIAQLpBgDE38EfAF+IwBBMGsiCSQAAkACQAJAIAC9IhlCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBlCAFkEQCABIABEAABAVPsh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IABEAAAAAAAA4D+ioiIDob1CgICAgHCDvyIERAAAIGVHFfc/oiIBIAkgCEEUdmq3IgKgIgUgASACIAWhoCAAIABEAAAAAAAAAECgoyIBIAMgASABoiICIAKiIgEgASABRJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgAiABIAEgAUREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKIgACAEoSADoaAiACAEoEQAou8u/AXnPaIgAEQAACBlRxX3P6KgoKAhAAsgAAtZAQF/IwBBIGsiAiQAIAAQ7AEiAAR/IAAoAgghACACQgA3AwggAkEANgIYIAJCADcDECACIAE2AgggAkIANwMAIAAgAkEEIAAoAgARAwAFQQALIAJBIGokAAuVAQIDfwV8IAMQVyIImiEJIAAoAgghBiADEEohByAGEBwhBANAIAQEQCAEKAIQKAKUASIFIAIgBSsDACIKIAiiIAcgBSsDCCILoqCgOQMIIAUgASAKIAeiIAsgCaKgoDkDACAGIAQQHSEEDAELCyAAQThqIQQDQCAEKAIAIgAEQCAAIAEgAiADEK8HIABBBGohBAwBCwsLtQIBBX8jAEEwayIDJAAgACgACCABTwRAIABBADYCFCAAQQQQJiEEIAAoAgAgBEECdGogACgCFDYCACAAQQQQjAIgACgACCABQX9zakECdCIEBEAgACgCACADIAApAgg3AyggAyAAKQIANwMgIANBIGogAUEBahAZIAAoAgAhByADIAApAgg3AxggAyAAKQIANwMQQQJ0aiAHIANBEGogARAZQQJ0aiAEELYBGgsgACACNgIUIAMgACkCCDcDCCADIAApAgA3AwAgAyABEBkhAQJAAkACQCAAKAIQIgIOAgIAAQsgACgCACABQQJ0aigCABAYDAELIAAoAgAgAUECdGooAgAgAhEBAAsgACgCACABQQJ0aiAAKAIUNgIAIANBMGokAA8LQfGhA0GFuAFBFkGhGhAAAAsdACAAKAIIIAFBARCFARogASgCECgCgAEgADYCDAtEAQF/IAAEQCAAKAIEIgEEQCABEG0LIAAoAggiAQRAIAEQbQsgACgCDBAYIAAoAhQiAQRAIAEgACgCEBEBAAsgABAYCws+AQN/IAAQLSECIAAoAhAiAQRAA0Ag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/wotAABB1P8KQQE6AABBAXFFBEAgCkEwQQAgCigCAEEDcUEDRxtqKAIoECEhACAEIApBUEEAIAooAgBBA3FBAkcbaigCKBAhNgIEIAQgADYCAEHo7QQgBBAqCyAGEBggChCZBAwFBSAEKAKMASENIAQrA1ghEyAFIAQrA4ABOQMIIAUgEzkDACABQQFrIQEgBUEQaiEFIAIgDWohAgwCCwALCwNAIAItAAAiBUEJayIBQRdLQQEgAXRBn4CABHFFckUEQCACQQFqIQIMAQsLIAogABDeBiEJIBIEQCAEKAJ8IQEgCSAVOQMYIAkgFjkDECAJIAE2AggLIAgEQCAEKAJ4IQEgCSAXOQMoIAkgFDkDICAJIAE2AgwLIAIgBUEARyIRaiECQQAhBQNAIAAgBUcEQCAFQQR0IgEgCSgCAGoiDSABIAZqIgEpAwA3AwAgDSABKQMINwMIIAVBAWohBQwBCwsgBhAYDAELCyAKKAIQIgUoAmAiAARAIAogAEH12QAQsQQgCigCECEFCyAFKAJsIgAEQCAKIABB2tkAELEEIAooAhAhBQsgBSgCZCIABH8gCiAAQfDZABCxBCAKKAIQBSAFCygCaCIABEAgCiAAQejZABCxBAsgC0EBaiELCyADIAoQMCEKDAELCyADIA8QHSEPDAELCyALRQRAQQAhAQwBC0ECQQEgAxC0AiALRhshAQtBACEAQQAhCiADKAIQKAIIIgIoAlgiCARAIAJBADYCVEEBIQoLAkAgCA0AQfjaCigCAEEBRw0AIAMQtgRFDQBBASEAIAMoAhAoAgwiAkUNACACQQA6AFELIAMQwQIgCARAIAMoAhAhD0QAAAAAAAAAACEVRAAAAAAAAAAAIRZBACERQQAhEkEAIQ4jAEFAaiILJAAgAygCECICKAKQASENIARB2ABqIgkgAikDEDcDACAJIAIpAyg3AxggCSACKQMgNwMQIAkgAikDGDcDCAJAIAIoAggoAlgiBkUNAAJAIAkrAwAgCSsDEGINACAJKwMIIAkrAxhiDQAgCUL/////////dzcDGCAJQv/////////3/wA3AwAgCUL/////////9/8ANwMIIAlC/////////3c3AxALIAYoAgghBwNAIBEgBigCAE8NASALQgA3AzggC0IANwMwIAtCADcDKCALQgA3AyACQAJAAkACQAJA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AisDAKEiGyAboiACKwMYIAIrAwihIhsgG6KgIAUrAxAgBSsDAKEgBCsDOKAgBCsDKKEiGyAbokQAAAAAAADQP6JlIQMMAQsgBSgCICEDIAUoAiQgASACKQMYNwPIAiABIAIpAxA3A8ACIAMgAUHAAmoQ5gwhBiAEKAJIIQMgBCgCTCABIAIpAwg3A7gCIAEgAikDADcDsAIgAyABQbACahDmDCEHIAQoAkgiEUEBdCEXIAUoAiAiDkEBdCEYIBFBAWshGSAOQQFrIRpBACEDQQAhCAJAA0AgASAGIAhBBHRqIgkpAwg3A6gCIAEgCSkDADcDoAIgASAGIAggGmogDm9BBHRqIhIpAwg3A5gCIAEgEikDADcDkAIgAUHABGogAUGgAmogAUGQAmoQ6wwgASAHIAxBBHRqIgspAwg3A4gCIAEgCykDADcDgAIgASAHIAwgGWogEW9BBHRqIhMpAwg3A/gBIAEgEykDADcD8AEgAUGwBGogAUGAAmogAUHwAWoQ6wwgAUIANwOYBCABQgA3A+gBIAEgASkDyAQ3A9gBIAEgASkDuAQ3A8gBIAFCADcDkAQgAUIANwPgASABIAEpA8AENwPQASABIAEpA7AENwPAASABKwPoASABKwPYASIboSABKwPAASABKwPQASIcoaIgASsDyAEgG6EgASsD4AEgHKGioSEfIAEgEikDCDcDuAEgASASKQMANwOwASABIAkpAwg3A6gBIAEgCSkDADcDoAEgASALKQMINwOYASABIAspAwA3A5ABIAFBsAFqIAFBoAFqIAFBkAFqEOoMIRUgASATKQMINwOIASABIBMpAwA3A4ABIAEgCykDCDcDeCABIAspAwA3A3AgASAJKQMINwNoIAEgCSkDADcDYCABQYABaiABQfAAaiABQeAAahDqDCEWIAEgEikDCDcDWCABIBIpAwA3A1AgASAJKQMINwNIIAEgCSkDADcDQCABIBMpAwg3AzggASATKQMANwMwIAEgCykDCDcDKCABIAspAwA3AyAgASsDMCIgIAErA1giGyABQUBrIgkrAwgiIaGiIAErAyAiJSAhIBuhIiKiIAErA1AiHiABKwMoIh0gASsDOCIcoaIiJiAJKwMAIiMgHCAdoaKgoKAiJEQAAAAAAAAAAGIEfyABICUgHCAboaIgJiAgIBsgHaGioKAgJKMi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AgAiESAKKAIASARAIBAgAkECdCIRaiAMNgIAIAMgEWogBCAFaigCADYCACACQQFqIQIMAQsgAyARQQJ0aiIMIAwoAgAgBCAFaigCAGo2AgALIABBAWohAAwBCwsgByAJaiACNgIAIAEhAAwACwALIANBACADQQBKGyEJQQAhAANAIAAgCUYNByAPIABBAWoiAUECdCIDaiEEIA8gAEECdCIFaigCACEAA0AgACAEKAIATkUEQCAGIBQgAEECdGooAgAiCEECdGogAjYCACAQIAJBAnRqIAg2AgAgAEEBaiEAIAJBAWohAgwBCwsgBSAHaiEEIAMgDmohCCAFIA5qKAIAIQADQCAAIAgoAgBORQRAIAYgEyAAQQJ0aigCACIFQQJ0aigCACAEKAIASARAIBAgAkECdGogBTYCACACQQFqIQILIABBAWohAAwBCwsgAyAHaiACNgIAIAEhAAwACwALIAVBAUYNBAsgEkHqBDYCBCASQZa3ATYCAEGI9ggoAgBB2L8EIBIQIBoQOwALQcLeAUGWtwFBlQRBr7ABEAAAC0GH0AFBlrcBQZYEQa+wARAAAAtB2pUBQZa3AUGXBEGvsAEQAAALIANBACADQQBKGyEIIA0oAhwhAyABKAIcIQUgACgCHCEVQQAhAANAIAAgCEYNASAPIABBAWoiAUECdCIJaiEKIA8gAEECdCIEaigCACEAA0AgACAKKAIATkUEQCAGIBQgAEECdGooAgAiC0ECdGogAjYCACAQIAJBAnRqIAs2AgAgAyACQQN0aiAVIABBA3RqKwMAOQMAIABBAWohACACQQFqIQIMAQsLIAQgB2ohCiAJIA5qIQsgBCAOaigCACEAA0AgACALKAIATkUEQAJAIAYgEyAAQQJ0aigCACIEQQJ0aigCACIMIAooAgBIBEAgECACQQJ0aiAENgIAIAMgAkEDdGogBSAAQQN0aisDADkDACACQQFqIQIMAQsgAyAMQQN0aiIEIAUgAEEDdGorAwAgBCsDAKA5AwALIABBAWohAAwBCwsgByAJaiACNgIAIAEhAAwACwALIA0gAjYCCCAGEBgLIBJBEGokACANC8sHAg9/AXwjAEEQayINJAACQCAARQRADAELAkACQCAAKAIgRQRAIAAoAhghDiAAKAIUIQcgACgCBCIIIAAoAgAiAiAAKAIIIgEgACgCEEEAELYCIgkgATYCCCAJKAIYIQ8gCSgCFCEDQX8gCCAIQQBIG0EBaiEKQQAhAQNAIAEgCkYEQEEAIQEgAkEAIAJBAEobIQogA0EEaiEFA0ACQCABIApGBEBBACEBIAhBACAIQQBKGyECDAELIAcgAUEBaiICQQJ0aiEEIAcgAUECdGooAgAhAQNAIAQoAgAgAUwEQCACIQEMAwUgBSAOIAFBAnRqKAIAQQJ0aiILIAsoAgBBAWo2AgAgAUEBaiEBDAELAAsACwsDQCABIAJGRQRAIAFBAnQhBSADIAFBAWoiAUECdGoiBCAEKAIAIAMgBWooAgBqNgIADAELC0EAIQICQAJAAkACQCAAKAIQIgFBBGsOBQADAwMBAgsgCSgCHCEFIAAoAhwhBEEAIQADQCAAIApGDQggByAAQQFqIgJBAnRqIQsgByAAQQJ0aigCACEBA0AgCygCACABTARAIAIhAAwCBSAPIAMgDiABQQJ0IgZqIgwoAgBBAnRqKAIAQQJ0aiAANgIAIAQgBmooAgAhBiADIAwoAgBBAnRqIgwgDCgCACIMQQFqNgIAIAUgDEECdGogBjYCACABQQFqIQEMAQsACwALAAsDQCACIApGDQcgByACQQFqIgBBAnRqIQUgByACQQJ0aigCACEBA0AgBSgCACABTARAIAAhAgwCBSADIA4gAUECdGooAgBBAnRqIgQgBCgCACIEQQFqNgIAIA8gBEECdGogAjYCACABQQFqIQEMAQsACwALAAsgAUEBRg0ECyANQfQANgIEIA1BlrcBNgIAQYj2CCgCAEHYvwQgDRAgGhA7AAUgAyABQQJ0akEANgIAIAFBAWohAQwBCwALAAtBodABQZa3AUHFAEGckwEQAAALIAkoAhwhBSAAKAIcIQQDQCACIApGDQEgByACQQFqIgBBAnRqIQsgByACQQJ0aigCACEBA0AgCygCACABTARAIAAhAgwCBSAPIAMgDiABQQJ0aiIGKAIAQQJ0aigCAEECdGogAjYCACAEIAFBA3RqKwMAIRAgAyAGKAIAQQJ0aiIGIAYoAgAiBkEBajYCACAFIAZBA3RqIBA5AwAgAUEBaiEBDAELAAsACwALA0AgCEEATEUEQCADIAhBAnRqIAMgCEEBayIIQQJ0aigCADYCAAwBCwsgA0EANgIACyANQRBqJAAgCQsLACAAIAFBAhD/Bws+AQJ8IAG3IQMDQEGc2wovAQAgAkoEQBDXASEEIAAoAhAoApQBIAJBA3RqIAQgA6I5AwAgAkEBaiECDAELCwv3AQICfwJ8IwBBMGsiAyQAIAAgARAsIQEDQCABBEACQAJAIAJFDQAgASACEEUiBC0AAEUNACADIANBKGo2AiACQCAEQfCDASADQSBqEFFBAEwNACADKwMoIgVEAAAAAAAAAABjDQAgBUQAAAAAAAAAAGINAkH42gooAgANAgsgAyAENgIQQem1AyADQRBqECogABAhIQQgA0KAgICAgICA+D83AwggAyAENgIAQbGmBCADEIABCyADQoCAgICAgID4PzcDKEQAAAAAAADwPyEFCyABKAIQIAU5A4gBIAYgBaAhBiAAIAEQMCEBDAELCyADQTBqJAAgBguQAQEFfyMAQeAAayIDJAAgAEEBQab0AEHx/wQQIiEFIABBAUHlOUHx/wQQIiEGIAAQHCECIAFBAkkhAQNAIAIEQCADQTdqIgQgAigCEDQC9AEQzA0gAiAFIAQQcSABRQRAIANBDmoiBCACKAIQNAL4ARDMDSACIAYgBBBxCyAAIAIQHSECDAELCyADQeAAaiQAC9gBAQJ/IAAQeSEBA0AgAQRAIAEQggggARB4IQEMAQsLAkAgAEHiJUEAQQEQNkUNACAAKAIQKAIIEBggACgCECIBQQA2AgggASgCuAEQGCAAKAIQKAKMAhAYIAAoAhAoAtgBEBggACgCECICKALEAQRAIAIoAugBIQEDQCABIAIoAuwBSkUEQCACKALEASABQcgAbGooAgwQGCABQQFqIQEgACgCECECDAELCyACKALEAUG4f0EAIAIoAugBQX9GG2oQGAsgABA5IABGDQAgACgCECgCDBC8AQsLzgIBA38jAEHQAGsiAiQAIAJCADcDSCACQgA3A0ACfyAAEDxFBEAgAUEANgIAQQAMAQsgAkIANwM4IAJCADcDMCACQgA3AyggAkIANwMYIAJCADcDECACQgA3AwggAkG6AzYCJCACQbsDNgIgIAAQHCEDA0AgAwRAIAMoAhBBADYCsAEgACADEB0hAwwBCwsgABAcIQMDQCADBEAgA0F/IAIoAiQRAABFBEAgAkFAayIEQQAQ6AUgAiACKAIwNgIAIAQgAhDnBSAAIAQQsQNBARCSASIEQeIl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AigCACAFIAIpAgg3A7gGIAUgAikCADcDsAYgBUGwBmogAxAZQcgAbGooAixBAWtBfUsNACACKAIAIAUgAikCCDcD+AMgBSACKQIANwPwAyAFQfADaiADEBlByABsaigCPCACKAIAIQAgBSACKQIINwPoAyAFIAIpAgA3A+ADIAVB4ANqIAMQGSEBQQFrQX1NBEAgAigCACEGAn8gACABQcgAbGooAkBBAUYEQCAFIAIpAgg3A8gBIAUgAikCADcDwAEgBiAFQcABaiADEBlByABsaigCLCEAIAIoAgAgBSACKQIINwO4ASAFIAIpAgA3A7ABIAVBsAFqIAQQGUHIAGxqIAA2AiggAigCACAFIAIpAgg3A6gBIAUgAikCADcDoAEgBUGgAWogAxAZQcgAbGpBfzYCLCACKAIAIAUgAikCCDcDmAEgBSACKQIANwOQASAFQZABaiADEBlByABsaigCPCEAIAIoAgAgBSACKQIINwOIASAFIAIpAgA3A4ABIAVBgAFqIAQQGUHIAGxqIAA2AiwgAigCACEAIAUgAikCCDcDeCAFIAIpAgA3A3AgACAFQfAAaiADEBlByABsaigCKCEBIAUgAikCCDcDaCAFIAIpAgA3A2AgACAFQeAAaiABEBlByABsaiADNgIwIAIoAgAhACAFIAIpAgg3A1ggBSACKQIANwNQIAAgBUHQAGogBBAZQcgAbGooAighASAFIAIpAgg3A0ggBSACKQIANwNAIAAgBUFAayABEBlByABsaiAENgIwIAIoAgAhACAFIAIpAgg3AzggBSACKQIANwMwIAAgBUEwaiAEEBlByABsakEsagwBCyAFIAIpAgg3A4gDIAUgAikCADcDgAMgBiAFQYADaiAEEBlByABsakF/NgIsIAIoAgAgBSACKQIINwP4AiAFIAIpAgA3A/ACIAVB8AJqIAMQGUHIAGxqKAIsIQAgAigCACAFIAIpAgg3A+gCIAUgAikCADcD4AIgBUHgAmogBBAZQcgAbGogADYCKCACKAIAIAUgAikCCDcD2AIgBSACKQIANwPQAiAFQdACaiADEBlByABsaigCKCEAIAIoAgAgBSACKQIINwPIAiAFIAIpAgA3A8ACIAVBwAJqIAMQGUHIAGxqIAA2AiwgAigCACAFIAIpAgg3A7gCIAUgAikCADcDsAIgBUGwAmogAxAZQcgAbGooAjwhACACKAIAIAUgAikCCDcDqAIgBSACKQIANwOgAiAFQaACaiADEBlByABsaiAANgIoIAIoAgAhACAFIAIpAgg3A5gCIAUgAikCADcDkAIgACAFQZACaiADEBlByABsaigCKCEBIAUgAikCCDcDiAIgBSACKQIANwOAAiAAIAVBgAJqIAEQGUHIAGxqIAM2AjAgAigCACEAIAUgAikCCDcD+AEgBSACKQIANwPwASAAIAVB8AFqIAMQGUHIAGxqKAIsIQEgBSACKQIINwPoASAFIAIpAgA3A+ABIAAgBUHgAWogARAZQcgAbGogAzYCMCACKAIAIQAgBSACKQIINwPYASAFIAIpAgA3A9ABIAAgBUHQAWogBBAZQcgAbGpBKGoLKAIAIQEgBSACKQIINwMoIAUgAikCADcDICAAIAVBIGogARAZQcgAbGogBDYCMCACKAIAIAUgAikCCDcDGCAFIAIpAgA3AxAgBUEQaiADEBlByABsakEANgI8IAIoAgAgBSACKQIINwMIIAUgAikCADcDACAFIAQQGUHIAGxqQQA2AjwMAgsgACABQcgAbGooAiwhACACKAIAIAUgAikCCDcD2AMgBSACKQIANwPQAyAFQdADaiAEEBlByABsaiAANgIoIAIoAgAgBSACKQIINwPIAyAFIAIpAgA3A8ADIAVBwANqIAMQGUHIAGxqQX82AiwgAigCACAFIAIpAgg3A7gDIAUgAikCADcDsAMgBUGwA2ogBBAZQcgAbGpBfzYCLCACKAIAIQAgBSACKQIINwOoAyAFIAIpAgA3A6ADIAAgBUGgA2ogBBAZQcgAbGooAighASAFIAIpAgg3A5gDIAUgAikCADcDkAMgACAFQZADaiABEBlByABsaiAENgIwDAELIAIoAgAgBSACKQIINwOoBiAFIAIpAgA3A6AGIAVBoAZqIAMQGUHIAGxqKAIoIQYgAigCACEHIAUgAikCCDcDmAYgBSACKQIANwOQBgJAIAcgBUGQBmogBhAZQcgAbGooAjAiB0EBa0F9Sw0AIAIoAgAgBSACKQIINwOIBiAFIAIpAgA3A4AGIAVBgAZqIAYQGUHIAGxqKAI0QQFrQX1LDQAgAigCACEGIAUgAikCCDcDuAUgBSACKQIANwOwBQJAIAYgBUGwBWogBxAZQcgAbGooAgRBAEwNACACKAIAIAUgAikCCDcDqAUgBSACKQIANwOgBSAFQaAFaiAHEBlByABsaigCBCABIABBEGoQxwQNACACKAIAIAUgAikCCDcDmAUgBSACKQIANwOQBSAFQZAFaiADEBlByABsakF/NgIoIAIoAgAgBSACKQIINwOIBSAFIAIpAgA3A4AFIAVBgAVqIAMQGUHIAGxqQX82AiwgAigCACAFIAIpAgg3A/gEIAUgAikCADcD8AQgBUHwBGogBBAZQcgAbGpBfzYCLCACKAIAIQAgBSACKQIINwPoBCAFIAIpAgA3A+AEIAAgBUHgBGogBBAZQcgAbGooAighASAFIAIpAgg3A9gEIAUgAikCADcD0AQgACAFQdAEaiABEBlByABsaiAENgI0DAILIAIoAgAgBSACKQIINwPIBCAFIAIpAgA3A8AEIAVBwARqIAQQGUHIAGxqQX82AiggAigCACAFIAIpAgg3A7gEIAUgAikCADcDsAQgBUGwBGogBBAZQcgAbGpBfzYCLCACKAIAIAUgAikCCDcDqAQgBSACKQIANwOgBCAFQaAEaiADEBlByABsakF/NgIsIAIoAgAhACAFIAIpAgg3A5gEIAUgAikCADcDkAQgACAFQZAEaiADEBlByABsaigCKCEBIAUgAikCCDcDiAQgBSACKQIANwOABCAAIAVBgARqIAEQGUHIAGxqIAM2AjAMAQsgAigCACEAIAUgAikCCDcD+AUgBSACKQIANwPwBSAAIAVB8AVqIAMQGUHIAGxqKAIoIQEgBSACKQIINwPoBSAFIAIpAgA3A+AFIAAgBUHgBWogARAZQcgAbGogAzYCMCACKAIAIQAgBSACKQIINwPYBSAFIAIpAgA3A9AFIAAgBUHQBWogAxAZQcgAbGooAighASAFIAIpAgg3A8gFIAUgAikCADcDwAUgACAFQcAFaiABEBlByABsaiAENgI0CyAFQdAGaiQAC1UCAnwBfyABQQAgAUEAShshASAAtyIDIQIDfyABIARGBH8gAyACo5siAplEAAAAAAAA4EFjBEAgAqoPC0GAgICAeAUgBEEBaiEEIAIQrQchAgwBCwsLPgECfCAAIAErAwAiAhAyOQMAIAAgASsDCCIDEDI5AwggACACIAErAxCgEDI5AxAgACADIAErAxigEDI5AxgLLAEBfyAAKAIEIgIE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RQRAAkAgASADKAK4ASACQQJ0aigCACIDECEiBUGABCABKAIAEQMABEAgBCAFNgIAQaG4BCAEECoMAQtBEBBSIgYgAzYCDCAGIAU2AgggASAGQQEgASgCABEDABoLIAMgARD0CSACQQFqIQIMAQsLIARBEGokAAsoAQF/A38gAAR/IAAoAgQQ9QkgAWpBAWohASAAKAIAIQAMAQUgAQsLC00BAn8gARAhIgMEQAJAIANB4jdBBxDqAQ0AIAAgARAhQYAEIAAoAgARAwAiAEUNACAAKAIMIQILIAIPC0GI1AFB6/sAQQxBnvcAEAAACxkAIABB5PwJQZTuCSgCABCTASIAEPQJIAAL8gECA38GfCAAIAEoAiwgASgCCCIDIAEoAgQiAUEBayICQQAgASACTxtsQQR0aiICKQMANwMQIAAgAikDCDcDGCAAIAIpAwg3AwggACACKQMANwMAQQEgAyADQQFNGyEDIAArAxghBSAAKwMIIQYgACsDECEHIAArAwAhCEEBIQEDQCABIANGBEAgACAFOQMYIAAgBjkDCCAAIAc5AxAgACAIOQMABSAFIAIgAUEEdGoiBCsDCCIJIAUgCWQbIQUgByAEKwMAIgogByAKZBshByAGIAkgBiAJYxshBiAIIAogCCAKYxshCCABQQFqIQEMAQsLCyoBAX8CQCABRQ0AIAAgARBFIgBFDQAgAC0AAEUNACAAEGhBAXMhAgsgAgtRAQF/AkACQCADRQ0AIANBOhDNASIERQ0AIARBADoAACAAIAIgAyAEQQFqIgMgAREHACAEQTo6AAAMAQsgACACIANBACABEQcACyAAIAM2AiQLXAAgASgCCEUEQCAAIAEQ1QYLIAIgAEGc3QooAgAgASsDAEQAAAAAAADwPxBMOQMAIAIgAEGg3QooAgAgASgCCBCPATYCCCACIABBpN0KKAIAIAEoAgwQjwE2AgwLlwQCCHwIfyMAQUBqIgwkACABKAIAIQ8gAisDCCEGIAIrAwAhByABKAIEIRBE////////738hA0F/IQ1BfyECA0ACQCALIBBGBEAgDyANQTBsaiIBKAIAIAIgAiABKAIEQQFrRmsiASABQQNwa0EEdGohAkEAIQEMAQsgDyALQTBsaiIBKAIEIREgASgCACESQQAhAQNAIAEgEUYEQCALQQFqIQsMAwUgEiABQQR0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dSAGQRBqJAAgBUHomws2AghBhJ0LIAUoAggQogIaQYidC0EBOgAACyAFQRBqJABBjJ0LQYSdCxDcCkGQnQtBAToAAAsgAEGMnQsoAgAiADYCACAAENsKCxEAIABB6JsLRwRAIAAQ3goLCxMAIAAgASgCACIANgIAIAAQ2woLnQEBBH8gAEG4swk2AgAgAEEIaiEBA0AgARDEAiACSwRAIAEgAhCdAygCAARAIAEgAhCdAygCABCRBQsgAkEBaiECDAELCyAAQZABahA1GiMAQRBrIgIkACACQQxqIAEQogIiASgCACIDKAIABEAgAxDfCiABKAIAGiABKAIAEJwDIAEoAgAiASgCACABEL8KGhC+CgsgAkEQaiQAIAALDwAgACAAKAIEQQFqNgIECwwAIAAgACgCABDACgt7AQN/IwBBEGsiBCQAIARBBGoiAiAANgIAIAIgACgCBCIDNgIEIAIgAyABQQJ0ajYCCCACIgMoAgQhASACKAIIIQIDQCABIAJGBEAgAygCACADKAIENgIEIARBEGokAAUgABCcAxogARDBCiADIAFBBGoiATYCBAwBCwsLIAAgAEGIvAk2AgAgACgCCBBmRwRAIAAoAggQmwsLIAALBABBfwumAQEDfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARDGCiADQRBqIAMoAhggAygCHCACEKsLIAMoAhAhBSMAQRBrIgEkACABIAA2AgwgAUEMaiIAIAUgABD1BmtBAnUQ+wYhACABQRBqJAAgAyAANgIMIAMgAiADKAIUEKQDNgIIIARBCGogA0EMaiADQQhqEPsBIANBIGokACAEKAIMIARBEGokAAuBBgEKfyMAQRBrIhMkACACIAA2AgBBBEEAIAcbIRUgA0GABHEhFgNAIBRBBEYEQCANECVBAUsEQCATIA0Q3gE2AgwgAiATQQxqQQEQ+wYgDRDyAiACKAIAEOMKNgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBNBEGokAAUCQAJAAkACQAJAAkAgCCAUai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBIBDRASEHIAIgAigCACIPQQRqNgIAIA8gBzYCAAwDCyANEPYBDQIgDUEAEJoFKAIAIQcgAiACKAIAIg9BBGo2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QQFqIQUgAUEBaiEBDAELCyADQQA6AAcgBSADQQdqENIBIANBEGokAAwBCxDKAQALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAtXAQJ/AkAgACgCACICRQ0AAn8gAigCGCIDIAIoAhxGBEAgAiABIAIoAgAoAjQRAAAMAQsgAiADQQRqNgIYIAMgATYCACABC0F/EMgCRQ0AIABBADYCAAsLMQEBfyAAKAIMIgEgACgCEEYEQCAAIAAoAgAoAigRAgAPCyAAIAFBBGo2AgwgASgCAAsnAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCJBECAA8LIAEoAgALJwEBfwJAIAAoAgAiAkUNACACIAEQvQtBfxDIAkUNACAAQQA2AgALC1MBA38CQEF/IAAoAkwQyAJFBEAgACgCTCEADAELIAAjAEEQayIBJAAgAUEMaiICIAAQUyACEMwBQSAQmwEhACACEFAgAUEQaiQAIAA2AkwLIADACxoAIAAgASABKAIAQQxrKAIAaigCGDYCACAACwsAIABB4JoLEKkCCw0AIAAgASACQQAQogcLCQAgABCSBxAYCz0BAX8gACgCGCICIAAoAhxGBEAgACABEKYDIAAoAgAoAjQRAAAPCyAAIAJBAWo2AhggAiABOgAAIAEQpgMLNAEBfyAAKAIMIgEgACgCEEYEQCAAIAAoAgAoAigRAgAPCyAAIAFBAWo2AgwgASwAABCmAwsqAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCJBECAA8LIAEsAAAQpgMLDwAgACAAKAIAKAIYEQIACwgAIAAoAhBFCwQAQX8LLAAgACABEK4HIgFFBEAPCwJAIAMEQCAAIAEgAhCoBAwBCyAAIAEgAhC7CwsLCAAgABCLBxoLvg8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJC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dGpBADYCAAsgDEUEQEEAIQwMAQsgBCAMakEAOgAACyACIQALIAMoAgQgAygCLGusIAMpA3ggFXx8IRUgDiAIQQBHaiEOCyABQQFqIQQgAS0AASIBDQEMCAsLIAIhAAwBC0EBIQVBACEMQQAhAAwCCyAPIQUMAgsgDyEFCyAOQX8gDhshDgsgBUUNASAMEBggABAYDAELQX8hDgsgBkGwAmokACADQZABaiQAIA4LQwACQCAARQ0AAkACQAJAAkAgAUECag4GAAECAgQDBAsgACACPAAADwsgACACPQEADwsgACACPgIADwsgACACNwMACwsPACAAIAEgAkEAQQAQmQcLFQEBfxDtAyEAQQ9B0N0KKAIAIAAbC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRBAALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC28BBX8gACgCACIDLAAAQTBrIgFBCUsEQEEADwsDQEF/IQQgAkHMmbPmAE0EQEF/IAEgAkEKbCIFaiABIAVB/////wdzSxshBAsgACADQQFqIgU2AgAgAywAASAEIQIgBSEDQTBrIgFBCkkNAAsgAgv1EgISfwJ+IwBBQGoiCCQAIAggATYCPCAIQSdqIRYgCEEoaiERAkACQAJAAkADQEEAIQcDQCABIQ0gByAOQf////8Hc0oNAiAHIA5qIQ4CQAJAAkACQCABIgctAAAiCwRAA0ACQAJAIAtB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQsDQCALLQABQSVHBEAgCyEBDAILIAdBAWohByALLQACIAtBAmoiASELQSVGDQALCyAHIA1rIgcgDkH/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KQOIAyAWIAJBAE4iARshFiAEKQOAAyAXIAEbIRcgCSAGIAhHIAJBAEhycSAVIBhCAEIAEKgDQQBHcUUgFCABIA1qIg1B7gBqTnENAEH8gAtBxAA2AgALIARB8AJqIBcgFiANENoLIAQpA/gCIRUgBCkD8AILIRYgDiAVNwMoIA4gFjcDICAEQZDGAGokACAOKQMoIRUgDikDICEWDAELQgAhFQsgACAWNwMAIAAgFTcDCCAOQTBqJAALwwYCBH8DfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABCoA0UNAAJ/IARC////////P4MhCgJ/IARCMIinQf//AXEiB0H//wFHBEBBBCAHDQEaQQJBAyADIAqEUBsMAgsgAyAKhFALC0UNACACQjCIpyIIQf//AXEiBkH//wFHDQELIAVBEGogASACIAMgBBBpIAUgBSkDECICIAUpAxgiASACIAEQxQsgBSkDCCECIAUpAwAhBAwBCyABIAJC////////////AIMiCiADIARC////////////AIMiCRCoA0EATARAIAEgCiADIAkQqAMEQCABIQQMAgsgBUHwAGogASACQgBCABBpIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEHIAYEfiABBSAFQeAAaiABIApCAEKAgICAgIDAu8AAEGkgBSkDaCIKQjCIp0H4AGshBiAFKQNgCyEEIAdFBEAgBUHQAGogAyAJQgBCgICAgICAwLvAABBpIAUpA1giCUIwiKdB+ABrIQcgBSkDUCEDCyAJQv///////z+DQoCAgICAgMAAhCELIApC////////P4NCgICAgICAwACEIQogBiAHSgRAA0ACfiAKIAt9IAMgBFatfSIJQgBZBEAgCSAEIAN9IgSEUARAIAVBIGogASACQgBCABBpIAUpAyghAiAFKQMgIQQMBQsgCUIBhiAEQj+IhAwBCyAKQgGGIARCP4iECyEKIARCAYYhBCAGQQFrIgYgB0oNAAsgByEGCwJAIAogC30gAyAEVq19IglCAFMEQCAKIQkMAQsgCSAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAEGkgBSkDOCECIAUpAzAhBAwBCyAJQv///////z9YBEADQCAEQj+IIAZBAWshBiAEQgGGIQQgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhB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QfWrBCADQTBqEDMLIAAgAhAdIQIMAAsACyABQQFqIQdBASEEA0AgACgCECICKAK0ASAETgRAIAIoArgBIARBAnRqKAIAIQUgAQRAIAkgBSgCECICKwMooCEIIAogAisDIKAhCyAJIAIrAxigIQwgCiACKwMQoCENQezaCi0AAEECTwRAIAEQsAIgBRAhIQIgAyAIOQMgIAMgCzkDGCADIAw5AxAgAyANOQMIIAMgAjYCACAGQeOrBCADEDMgBSgCECECCyACIAg5AyggAiALOQMgIAIgDDkDGCACIA05AxALIAUgBxDzCyAEQQFqIQQMAQsLIANB4ABqJAALyhoDD38LfAF+IwBBwARrIgIkACAAKAJIIQpB7NoKLQAAQQJPBEAgARCwAiACIAAQITYCsANBiPYIKAIAQfDwAyACQbADahAgGgsgAUEBaiEJQQEhBANAIAAoAhAiAygCtAEgBEgEQAJAAkAgABA8IAdrIhBBACAAKAIQIgMoArQBayILRw0AIAMoAgwNACADQgA3AxAgA0KAgICAgICAmcAANwMoIANCgICAgICAgJnAADcDICADQgA3AxgMAQsCQAJ/AkAgAEEEQQQgAkGgBGoQ+QNBAk0EQCACQQM2ArAEDAELQQAgAigCsARBBEcNARpBACEJIAItALwEQQJxRQ0CIApBAEHwFkEAECIiCSAKQQFB8BZBABAiIgZyDQIgAiAAECE2AqADQcifAyACQaADahAqC0EACyEGQQAhCQsgAkHoA2pBAEE4EDgaIAJCADcD4AMgAkIANwPYAyACQgA3A9ADIAJCADcDyAMgAkIANwPAAyACQgA3A7gDQQEhBwNAAkAgACgCECIDKAK0ASAHSARAIBBBAEwNASAAEBwhBwNAIAdFDQIgBygCECIDKAKAAUUEQCADIAA2AoABIAJCADcDiAQgAkIANwOABCADKwNgIRIgAysDWCERIAIgAysDUDkDmAQgAiARIBKgOQOQBCACQegDakEgECYhAyACKALoAyADQQV0aiIDIAIpA4AENwMAIAMgAikDmAQ3AxggAyACKQOQBDcDECADIAIpA4gENwMIIAYEQCACIAcgBkEAQQAQYjYCzAMgAkG4A2pBBBAmIQMgAigCuAMgA0ECdGogAigCzAM2AgALIAIgBzYC5AMgAkHQA2pBBBAmIQMgAigC0AMg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EBwhAwNAIAMEQCADKAIQQQA2ArgBIAAgAxAdIQMMAQsLQezaCi0AAEECTwRAIAEoAhAhAyAFIAAQITYC5AEgBSADNgLgAUGI9ggoAgBBjfkDIAVB4AFqECAaCyABIAEoAhBBAWo2AhAgBUG88AkoAgA2AtwBQdKnASAFQdwBakEAEOMBIgpB4iVBmAJBARA2GkE4EFIhAyAKKAIQIAM2AowBIAAQOSEDIAooAhAgAygCEC8BsAE7AbABIAAgCkHa3AAQuQcgACAKQZjbABC5ByAAIApBsNgBELkHIAVBqAJqIQggBUGgAmohDCAFQZgCaiELQQEhDwNAIAAoAhAiAygCtAEgD04EQCADKAK4ASAPQQJ0aigCACIEEJQEIAogBBAhELgHIgYoAhAiAyAJNgKIASADIAQ2AugBAkACQCABKAIEIgdFBEBE////////738hG0T////////v/yEaDAELRP///////+9/IRtE////////7/8hGiAEIAcQRSIDLQAARQ0AIAEoAgAgBEcEQCADIAQoAkQgBxBFEE1FDQELIAVBADoA+AEgBSALNgLEASAFIAw2AsgBIAUgCDYCzAEgBSAFQfgBajYC0AEgBSAFQZACajYCwAEgA0H4vgEgBUHAAWoQUUEETgRAIAUrA6gCIRogBSsDoAIhHSAFKwOYAiEbIAUrA5ACIRxBgNsKKwMAIh5EAAAAAAAAAABkBEAgGyAeoyEbIBwgHqMhHCAdIB6jIR0gGiAeoyEaCyAGKAIQQQNBAkEBIAUtAPgBIgNBP0YbIANBIUYbOgCHAQwCCyAEECEhByAFIAM2ArQBIAUgBzYCsAFBh+sDIAVBsAFqECoLRP///////+//IR1E////////738hHAsgCUEBaiEJIAQQHCEDA0AgAwRAIAMoAhAgBjYCuAEgBCADEB0hAwwBCwsgBigCECIDLQCHAQRAIAMoApQBIgMgGiAboEQAAAAAAADgP6I5AwggAyAdIBygRAAAAAAAAOA/ojkDAAsgD0EBaiEPDAELCyAAEBwhAwJ/AkADQCADBEACQCADKAIQIgQoArgBDQACQCAEKALoASIGRQ0AIAYgACgCECgCjAEoAjBGDQAgAxAhIQEgABAhIQAgBSADKAIQKALoARAhNgKoASAFIAA2AqQBIAUgATYCoAFBiv0EIAVBoAFqEDcM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QRhqCyILKwMIIQggCysDACEHAn8gASgCECIAKAIEIAFGBEAgACgCAAwBCyABQRhqCyIAKwMIIQkgACsDACEKIAJBfyAHIAShIgcgBSADoaIgCCADoSIFIAYgBKGioSIGRAAAAAAAAAAAZCAGRAAAAAAAAAAAYxsiADYCACACQX8gByAJIAOhoiAFIAogBKGioSIDRAAAAAAAAAAAZCADRAAAAAAAAAAAYxsiATYCBCACIAAgAWw2AggLTQECfAJ/QQEgACgCACIAKwMAIgIgASgCACIBKwMAIgNkDQAaQX8gAiADYw0AGkEBIAArAwgiAiABKwMIIgNkDQAaQX9BACACIANjGwsLzg8DEH8KfAF+IwBBsAFrIgIkACABQQAgAUEAShshDyABQSgQGiENA0AgAyAPRkUEQCAAIANBAnRqKAIAKAIEIApqIQogA0EBaiEDDAELCyAKQRgQGiIOQRhrIQYDQCAIIA9HBEAgDSAIQShsaiIEIA4gB0EYbGo2AgAgACAIQQJ0aigCACILKAIEIQxBACEDRP///////+9/IRJE////////7/8hE0T////////v/yEVRP///////+9/IRQDQCADIAxGBEAgBCATOQMgIAQgFTkDGCAEIBI5AxAgBCAUOQMIIAQgBiAHQRhsajYCBCAIQQFqIQgMAwUgCygCACADQQR0aiIFKwMAIRYgBSsDCCEXIA4gB0EYbGoiBUEANgIUIAUgBDYCECAFIBc5AwggBSAWOQMAIANBAWohAyAHQQFqIQcgEyAXECMhEyAVIBYQIyEVIBIgFxApIRIgFCAWECkhFAwBCwALAAsLIAJCADcDiAEgAkIANwOAASACQgA3A3hBACEDIApBBBAaIQwCQANAIAMgCkYEQAJAIAwgCkEEQeADELUBIAJBjAFqIRBBACELA0AgCiALRg0BIAIgDCALQQJ0aiIRKAIAIgM2AnQgAgJ/IAMoAhAiBCgCACADRgRAIAQoAgQMAQsgA0EYawsiBTYCcEEAIQgDQAJAAkAgCEECRwRAAkAgAkH0AGogAkHwAGoQzQxBAWoOAwADAgMLIAVBGGohB0EAIQMDQAJAIAIoAoABIANLBEAgAiACKQOAATcDWCACIAIpA3g3A1AgAigCeCACQdAAaiADEBlBAnRqKAIAIgYgBSACQZQBaiIJEMwMIAIoApwB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dGohBAJAIAZBAkgNACAGQQJrQQF2IgkgBCAFayIAQQJ1SA0AIAUgAEEBdSIBQQFyIgJBAnRqIQAgBiABQQJqIgFKBEAgASACIAAoAgAgACgCBCADKAIMEQAAIgEbIQIgAEEEaiAAIAEbIQALIAAoAgAgBCgCACADKAIMEQAADQAgBCgCACEBA0ACQCAEIAAiBCgCADYCACACIAlKDQAgBSACQQF0IgdBAXIiAkECdGohACAGIAdBAmoiB0oEQCAHIAIgACgCACAAKAIEIAMoAgwRAAAiBxshAiAAQQRqIAAgBxshAAsgACgCACABIAMoAgwRAABFDQELCyAEIAE2AgALIAhBAWshCAwACwALIANBEGokAAtGAgF8An8gACgCBCEDIAAoAgAhAAN8IAAgA0YEfCABBSAAKAIAIgIrAwggAisDGKEgAisDEKIgAaAhASAAQQRqIQAMAQsLC2wCAX8CfCMAQRBrIgIkACACIAE2AgwgASAANgIgIAAgAkEMahDAASAAIAIoAgwiASsDECIDIAArAxigIgQ5AxggACADIAErAwggASsDGKGiIAArAyCgIgM5AyAgACADIASjOQMQIAJBEGokAAsnACAAIAAoAhhFIAAoAhAgAXJyIgE2AhAgACgCFCABcQRAEJEBAAsLMQEDfyAAKAIEIgQgAUEEaiICayEDIAIgBEcEQCABIAIgAxC2ARoLIAAgASADajYCBAt+AQN/IAAoAgAiAUE0aiABKAI4IQMgASgCNCEBA0ACQCABIANGDQAgASgCACAARg0AIAFBBGohAQwBCwsgARC0DSAAKAIEIgFBKGogASgCLCEDIAEoAighAQNAAkAgASADRg0AIAEoAgAgAEYNACABQQRqIQEMAQsLIAEQtA0L6gEBCH8gAEHTrAMQ0QIhAiABKAIAIQYjAEEQayIDJAAgA0EIaiIEIAIQqQUaAkAgBC0AAEUNACACIAIoAgBBDGsoAgBqIgUoAgQaIANBBGoiBCAFEFMgBBC6CyEFIAQQUCADIAIQuQshByACIAIoAgBBDGsoAgBqIggQuAshCSADIAUgBygCACAIIAkgBiAFKAIAKAIQEQgANgIEIAQQpwVFDQAgAiACKAIAQQxrKAIAakEFEKoFCyADQQhqEKgFIANBEGokACACQdjgARDRAiABKAIgKwMQIAErAxigEJEH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EiACQQJ0akF/NgIAIAJBAWohAgwBCwtBhscBQZa3AUGLBkGBDhAAAAtBhscBQZa3AUGkBkGBDhAAAAtBhscBQZa3AUG4BkGBDhAAAAtBh9ABQZa3AUHQBUGBDhAAAAsgFEEQaiQAIA8L2AYCCn8BfCMAQRBrIgokACAAKAIgRQRAAkACQCAAKAIQQQFrIgQOBAEAAAEAC0HU0AFBlrcBQZAFQcg1EAAACyACKAIAIQUgACgCACEDIAAoAhghBiAAKAIUIQcCQAJAAkACQCAEDgQAAgIBAgsgACgCHCEJIAEEQCAFRQRAIANBCBA/IQULQQAhBCADQQAgA0EAShshAwNAIAMgBEYNBCAFIARBA3RqIgtCADcDACAHIARBAnRqKAIAIgAgByAEQQFqIgRBAnRqKAIAIgggACAIShshCEQAAAAAAAAAACENA0AgACAIRgRADAIFIAsgCSAAQQN0aisDACABIAYgAEECdGooAgBBA3RqKwMAoiANoCINOQMAIABBAWohAAwBCwALAAsACyAFRQRAIANBCBA/IQULQQAhASADQQAgA0EAShshBANAIAEgBEYNAyAFIAFBA3RqIgNCADcDACAHIAFBAnRqKAIAIgAgByABQQFqIgFBAnRqKAIAIgYgACAGShshBkQAAAAAAAAAACENA0AgACAGRgRADAIFIAMgCSAAQQN0aisDACANoCINOQMAIABBAWohAAwBCwALAAsACyAAKAIcIQkgAQRAIAVFBEAgA0EIED8hBQtBACEEIANBACADQQBKGyEDA0AgAyAERg0DIAUgBEEDdGoiC0IANwMAIAcgBEECdGooAgAiACAHIARBAWoiBEECdGooAgAiCCAAIAhKGyEIRAAAAAAAAAAAIQ0DQCAAIAhGBEAMAgUgCyAJIABBAnQiDGooAgC3IAEgBiAMaigCAEEDdGorAwCiIA2gIg05AwAgAEEBaiEADAELAAsACwALIAVFBEAgA0EIED8hBQtBACEBIANBACADQQBKGyEEA0AgASAERg0CIAUgAUEDdGoiA0IANwMAIAcgAUECdGooAgAiACAHIAFBAWoiAUECdGooAgAiBiAAIAZKGyEGRAAAAAAAAAAAIQ0DQCAAIAZGBEAMAgUgAyANIAkgAEECdGooAgC3oCINOQMAIABBAWohAAwBCwALAAsACyAKQcMFNgIE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AxggBiAAKALsAUHIAGxqIgEgASsDECAAKwN4ECM5AxALC4kDAgZ/BHwgABBhKAIQKALEASEFIAAQYSAARgR8RAAAAAAAACBABSAAQczbCigCAEEIQQAQYrcLIQkgACgCECIBKwOAASEHIAErA3ghCEEBIQIDQCACIAEoArQBSkUEQCABKAK4ASACQQJ0aigCACIBEO0NIQYgASgCECIEKALsASAAKAIQIgEoAuwBRgRAIAggCSAEKwN4oCIKIAggCmQbIQgLIAQoAugBIAEoAugBRgRAIAcgCSAEKwOAAaAiCiAHIApkGyEHCyADIAZyIQMgAkEBaiECDAELCyAAEGEhAiAAKAIQIQECQCAAIAJGDQAgASgCDEUNACAAEDlBASEDIAAoAhAhASgCEC0AdEEBcQ0AIAcgASsDWKAhByAIIAErAzigIQgLIAEgBzkDgAEgASAIOQN4IAAQYSAARwRAIAUgACgCECIAKALoAUHIAGxqIgEgASsDGCIJIAcgByAJYxs5AxggBSAAKALsAUHIAGxqIgAgACsDECIHIAggByAIZBs5AxALIAMLcAECf0EBIQQDQCAEIAAoAhAiAygCtAFKRQRAIAMoArgBIARBAnRqKAIAIAEgAhDuDSAEQQFqIQQMAQsLIAMgASADKwMQojkDECADIAIgAysDGKI5AxggAyABIAMrAyCiOQMgIAMgAiADKwMoojkDKAvlBAIIfwR8QQEhAgNAIAIgACgCECIDKAK0AUpFBEAgAygCuAEgAkECdGooAgAgARDvDSACQQFqIQIMAQsLIAAQYSECIAAoAhAhAwJAIAAgAkYEQCADKALsASEFRAAAwP///9/BIQpEAADA////30EhCyADKALoASIIIQQDQCAEIAVKBEAgAygCtAEiAEEAIABBAEobQQFqIQBBASECA0AgACACRg0EIAogAygCuAEgAkECdGooAgAoAhAiBCsDIEQAAAAAAAAgQKAiDCAKIAxkGyEKIAsgBCsDEEQAAAAAAAAgwKAiDCALIAxjGyELIAJBAWohAgwACwAFAkAgAygCxAEgBEHIAGxqIgAoAgAiBkUNAEEBIQIgACgCBCIHKAIAIgBFDQADQCAAKAIQIgAtAKwBIglFIAIgBk5yRQRAIAcgAkECdGooAgAhACACQQFqIQIMAQsLIAkNACAGQQJrIQIgACsDECAAKwNYoSEMIAcgBkECdGpBBGshAANAIAAoAgAoAhAiAC0ArAEEQCAHIAJBAnRqIQAgAkEBayECDAELCyAKIAArAxAgACsDYKAiDSAKIA1kGyEKIAsgDCALIAxjGyELCyAEQQFqIQQMAQsACwALIAMoAugBIQggAygC7AEhBSADKAKEAigCECgC9AG3IQogAygCgAIoAhAoAvQBtyELCyABKAIQKALEASIAIAVByABsaigCBCgCACgCECsDGCEMIAAgCEHIAGxqKAIEKAIAKAIQKwMYIQ0gAyAKOQMgIAMgCzkDECADIA0gAysDgAGgOQMoIAMgDCADKwN4oTkDGAuiAQICfAF/AkACf0H/////ByAAQdQgECciA0UNABogABA8IQAgAxCuAiEBIABBAEgNAUEAIAFEAAAAAAAAAABjDQAaIAC4IQIgAUQAAAAAAADwP2QEQEH/////B0QAAMD////fQSABoyACYw0BGgsgASACoiIBmUQAAAAAAADgQWMEQCABqg8LQYCAgIB4Cw8LQc+YA0GH/ABBzQBBztkAEAAAC4gCAgd/AXwjAEEQayIEJAAgAEHM2wooAgBBCEEAEGIgABDtBbchCCAAKAIQIgEoAugBIQMgASgChAIhBSABKAKAAiEGA0AgAyABKALsAUpFBEACQCADQcgAbCIHIAEoAsQBaiICKAIARQ0AIAIoAgQoAgAiAkUEQCAAECEhASAEIAM2AgQgBCABNgIAQdu0BCAEEDcMAQsgBiACIAIoAhArA1ggCKAgASsDYKBBABCfARogACgCECIBKALEASAHaiICKAIEIAIoAgBBAnRqQQRrKAIAIgIgBSACKAIQKwNgIAigIAErA0CgQQAQnwEaCyADQQFqIQMgACgCECEBDAELCyAEQRBqJAAL2wICCn8BfCAAQczbCigCAEEIQQAQYiEHQQEhAQNAIAAoAhAiBSgCtAEiBCABSARAIAe3IQtBASEBA0AgASAESkUEQCABQQJ0IQkgAUEBaiIHIQEDQCAFKAK4ASICIAlqKAIAIQMgASAESkUEQCACIAFBAnRqKAIAIgYgAyADKAIQKALoASAGKAIQKALoAUoiAhsiCCgCECIKKALsASADIAYgAhsiAygCECIGKALoASICTgRAIAggAyACQcgAbCICIAooAsQBaigCBCgCACgCECgC+AEg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P2UNACAAEPENIAAoAhAiASgCgAIgASgChAIgEiARIAEoAnRBAXEbIhFEAAAAAOD/70AgEUQAAAAA4P/vQGMbQegHEJ8BGgsCQCAAQQIgABDwDRDMBEUNACAAKAIQIgIoAugBIQUDQAJAAkAgAigC7AEiCiAFTgRAQQAhCCACKALEASAFQcgAbGoiBygCACIJQQAgCUEAShshA0EAIQEDQCABIANGDQNBACEEAkAgBygCBCABQQJ0aigCACIIKAIQIgsoApACIg1FDQADQCANIARBAnRqKAIAIgZFDQEgBkFQQQAgBigCAEEDcSIMQQJHG2ooAigoAhAoAvQBIAVKDQQgBEEBaiEEIAZBMEEAIAxBA0cbaigCKCgCECgC9AEgBUwNAAsMAwtBACEEAkAgCygCiAIiC0UNAANAIAsgBEECdGooAgAiBkUNASAGQTBBACAGKAIAQQNxIg1BA0cbaigCKCgCECgC9AEgBUoNBCAEQQFqIQQgBSAGQVBBACANQQJHG2ooAigoAhAoAvQBTg0ACwwDCyABQQFqIQEMAAsACyAAQQIgABDwDRDMBEUNA0GImwNBprsBQY0BQbHiABAAAAsgASEDCwJAIAhFIAMgCUhyRQRAIAdBzABBvH8gBSAKSBtqKAIAKAIAIgJFDQEgBygCBCgCACEDIAAQugIiASgCEEECOgCsASABIANEAAAAAAAAAABBABCfARogASACRAAAAAAAAAAAQQAQnwEaIAEoAhAgAygCECgC9AEiASACKAIQKAL0ASICIAEgAkgbNgL0ASAAKAIQIQILIAVBAWohBQwBCwtB0toAQaa7AUH2AEGO+gAQAAALIAAoAhAiASgC7AEhBSABKALoASECIAEoAsQBIQQDQCACIAVMBEBBACEBIAQgAkHIAGxqIgcoAgAiA0EAIANBAEobIQYDQCABIAZHBEAgBygCBCABQQJ0aigCACgCECIDKAL0ASEIIAMgAjYC9AEgAyAItzkDECABQQFqIQEMAQsLIAJBAWohAgwBCwsgACAAEO8NAkAgACgCECIBKALsAUEATA0AIAEoAggiAigCVCIFRQ0AIAErACgiESABKwAYoSIUIAErACAiEiABKwAQoSIVIAEoAnRBAXEiAxshEyAVIBQgAxshFAJAAnwCQAJAAkACQAJAIAVBAWsOBQQABwEDBwsgAisD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IAJB7BxqENAEIQcgAigC7BwhAwwBCyACQegMaiACQewcahDPBCEHIBogAigC7BwiA0EFSXINACAHIAcpAwA3AxAgByAHKQMINwMYIAcgByADQQR0akEQayIDKQMANwMgIAcgAykDCDcDKCADKQMAIWUgByADKQMINwM4IAcgZTcDMCACQQQ2AuwcQQQMAQsgA0UNASADCyEGQQAhAwwBCyAHEBhBACEDA0AgAigCmB0gA00EQCACQZAdaiIDQSAQMSADEDRBACEDA0AgAigC+B0gA00EQCACQfAdaiIDQRAQMSADEDRBACEDA0AgAigC0B0gA00EQCACQcgdaiIDQRAQMSADEDQMCwUgAkHwCWogAkHQHWopAwA3AwAgAiACKQPIHTcD6AkgAkHoCWogAxAZIQUCQAJAIAIoAtgdIgQOAgETAAsgAkHgCWogAigCyB0gBUEEdGoiBSkDCDcDACACIAUpAwA3A9gJIAJB2AlqIAQRAQALIANBAWohAwwBCwALAAUgAkHQCWogAkH4HWopAwA3AwAgAiACKQPwHTcDyAkgAkHICWogAxAZIQUCQAJAIAIoAoAeIgQOAgERAAsgAkHACWogAigC8B0gBUEEdGoiBSkDCDcDACACIAUpAwA3A7gJIAJBuAlqIAQRAQALIANBAWohAwwBCwALAAUgAkGwCWogAkGYHWopAwA3AwAgAiACKQOQHTcDqAkgAkGoCWogAxAZIQUCQAJAIAIoAqAdIgQOAgEPAAsgAkGQCWogAigCkB0gBUEFdGoiBSkDCDcDACACQZgJaiAFKQMQNwMAIAJBoAlqIAUpAxg3AwAgAiAFKQMANwOICSACQYgJaiAEEQEACyADQQFqIQMMAQsACwALA0AgAyAGSQRAIAwgByADQQR0aiIGKQMANwMAIAwgBikDCDcDCCACQfAdakEQECYhBiACKALwHSAGQQR0aiIGIAwpAwA3AwAgBiAMKQMINwMIIANBAWohAyACKALsHCEGDAELCyAHEBggCiEDA0AgCCgCACgCyAEoAgAhBiADBEAgA0EBayEDIAZBUEEAIAYoAgBBA3FBAkcbaigCKEEQaiEIDAELCyACKAL4HSIHBEAgAkHoCmogAkH4HWoiAykDADcDACACIAIpA/AdNwPgCiAMIAIoAvAdIAJB4ApqIAdBAWsQGUEEdGoiBykD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Dg0FIAIoAqwEIQggAigCqAQhCwJAAkACQCAJQQFqDgMAAQIDCyADKAIAIAIgAykCCDcDYCACIAMpAgA3A1ggAkHYAGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDUCACIAMpAgA3A0ggAkHIAGogBRAZQQJ0aigCACAEQQAgBiABELgCIAMoAgAgAkFAayADKQIINwMAIAIgAykCADcDOCACQThqIAAQGUECdGooAgAgAygCACACIAMpAgg3AzAgAiADKQIANwMoIAJBKGogBRAZQQJ0aigCACAHQQEgCyABELgCIAhBAUcNAiADKAIAIAIgAykCCDcDICACIAMpAgA3AxggAkEYaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwMQIAIgAykCADcDCCACQQhqIAAQGUECdGooAgAgByABEJcODAILAkACQAJAIAhBAWoOAwABAgQLIAMoAgAgAiADKQIINwOgASACIAMpAgA3A5gBIAJBmAFqIAAQGUECdGooAgAgAygCACACIAMpAgg3A5ABIAIgAykCADcDiAEgAkGIAWogBRAZQQJ0aigCACAEQQAgBiABELgCIAMoAgAgAiADKQIINwOAASACIAMpAgA3A3ggAkH4AGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDcCACIAMpAgA3A2ggAkHoAGogBRAZQQJ0aigCACAHQQEgCyABELgCDAMLIAMoAgAgAiADKQIINwPgASACIAMpAgA3A9gBIAJB2AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ABIAIgAykCADcDyAEgAkHIAWogABAZQQJ0aigCAEEAIAQgBiABELgCIAMoAgAgAiADKQIINwPAASACIAMpAgA3A7gBIAJBuAFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A7ABIAIgAykCADcDqAEgAkGoAWogABAZQQJ0aigCAEEBIAcgCyABELgCDAILIAMoAgAgAiADKQIINwOgAiACIAMpAgA3A5gCIAJBmAJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A5ACIAIgAykCADcDiAIgAkGIAmogABAZQQJ0aigCAEEAIAQgBiABELgCIAMoAgAgAiADKQIINwOAAiACIAMpAgA3A/gBIAJB+AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3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QbgCakEEECYhCiAEKAK4AiAKQQJ0aiAEKALMAjYCACACKAIAIAE2AhggCSACQQggCSgCABEDACECDAELCyAIIARB0AJqQYAEIAgoAgARAwAhAgNAAkAgASsDQCEbIAJFDQAgAisDECAbY0UNACAEIAIoAgA2AswCIARBuAJqQQQQJiEKIAQoArgCIApBAnRqIAQoAswCNgIAIAIoAgAgATYCGCAIIAJBCCAIKAIAEQMAIQIMAQsLIAQgGzkD2AIgCSAEQdACakGABCAJKAIAEQMAIQIDQAJAIAErAzghGyACRQ0AIAIrAwggG2NFDQAgBCACKAIANgLMAiAEQbgCakEEECYhCiAEKAK4AiAKQQJ0aiAEKALMAjYCACACKAIAIAE2AhQgCSACQQggCSgCABEDACECDAELCyAEIBs5A9ACIAQgASsDMDkD2AIgCCAEQdACakGABCAIKAIAEQMAIQIDQAJAIAJFDQAgAisDECABKwNAY0UNACAEIAIoAgA2AswCIARBuAJqQQQQJiEKIAQoArgCIApBAnRqIAQoAswCNgIAIAIoAgAgATYCFCAIIAJBCCAIKAIAEQMAIQIMAQsLIARBuAJqIAFBJGogAUEgakEEEMcBIAEoAiAiASAMIAEgDEsbIQwgBkEBaiEGDAELCwNAIBAgEUYEQCAAKAIQIAAoAgAiAUEobGoiAyABNgIgIAMgAUEBajYCSEEAIQMgACgCAEEGbCAMQQF0akEEEBohAiAAIAAoAgBBA2wgDGpBGBAaNgIUIAAoAgAiBkEAIAZBAEobIQEDQCABIANGBEAgBkECaiEDA0AgASADSARAIAAoAhAgAUEobGogAjYCHCABQQFqIQEgAiAMQQJ0aiECDAELCwUgACgCECADQShsaiACNgIcIANBAWohAyACQRhqIQIMAQsLQQAhBgJAAkADQCAGIA9GBEACQCAIEJkBGiAJEJkBGiALEBhBACEBQYj2CCgCACECA0AgASAAKAIATg0BIAAoAhAgAUEobGoiAygCFEUEQCAEIAE2AhAgAkH4zAQgBEEQahAgGiADKAIURQ0FCyADKAIYRQRAIAQgATYCACACQeLMBCAEECAaIAMoAhhFDQYLIAFBAWohAQwACwALBSASIAZByABsaiIBKwM4IAErAyihIhsgASsDQCABKwMwoSIfoEQAAAAAAADg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EmogBhAZQcgAbGogBTYCKAsgAigCACEGIARBkBJqIAIpAgg3AwAgBCACKQIANwOIEgJAIAYgBEGIEmogBRAZQcgAbGooAjQiBkEBa0F9Sw0AIAIoAgAgBEGAEmogAikCCDcDACAEIAIpAgA3A/gRIARB+BFqIAYQGUHIAGxqKAIsIAlHDQAgAigCACAEQfARaiACKQIINwMAIAQgAikCADcD6BEgBEHoEWogBhAZQcgAbGogBTYCLAsgAxDvASEHIAMQ7wEhCiACKAIAIARB4BFqIAIpAgg3AwAgBCACKQIANwPYESAEQdgRaiAJEBlByABsaigCOCEGIAMoAgAgBEHQEWogAykCCDcDACAEIAMpAgA3A8gRIARByBFqIAYQGUEobGpBAjYCACADKAIAIARBwBFqIAMpAgg3AwAgBCADKQIANwO4ESAEQbgRaiAGEBlBKGxqIg4gCCkDADcDCCAOIAgpAwg3AxAgAygCACAEQbARaiADKQIINwMAIAQgAykCADcDqBEgBEGoEWogBhAZQShsaiAANgIEIAMoAgAgBEGgEWogAykCCDcDACAEIAMpAgA3A5gRIARBmBFqIAYQGUEobGogCjYCICADKAIAIARBkBFqIAMpAgg3AwAgBCADKQIANwOIESAEQYgRaiAGEBlBKGxqIAc2AiQgAygCACAEQYARaiADKQIINwMAIAQgAykCADcD+BAgBEH4EGogBxAZQShsakEDNgIAIAMoAgAgBEHwEGogAykCCDcDACAEIAMpAgA3A+gQIARB6BBqIAcQGUEobGogCTYCGCADKAIAIARB4BBqIAMpAgg3AwAgBCADKQIANwPYECAEQdgQaiAHEBlBKGxqIAY2AhwgAygCACAEQdAQaiADKQIINwMAIAQgAykCADcDyBAgBEHIEGogChAZQShsakEDNgIAIAMoAgAgBEHAEGogAykCCDcDACAEIAMpAgA3A7gQIARBuBBqIAoQGUEobGogBTYCGCADKAIAIARBsBBqIAMpAgg3AwAgBCADKQIANwOoECAEQagQaiAKEBlBKGxqIAY2AhwgAigCACAEQaAQaiACKQIINwMAIAQgAikCADcDmBAgBEGYEGogCRAZQcgAbGogBzYCOCACKAIAIARBkBBqIAIpAgg3AwAgBCACKQIANwOIECAEQYgQaiAFEBlByABsaiAK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IAIoAgAgBEGIDGogAikCCDcDACAEIAIpAgA3A4AMIARBgAxqIAkQGUHIAGxqKwMYoZlESK+8mvLXej5lRSALRXINAAJAIBMoAgAiBUEATA0AIAUgASAHEMcERQ0AIAIoAgAhBSAEQbgLaiACKQIINwMAIAQgAikCADcDsAsgBSAEQbALaiAIEBlByABsaigCMCEHIARBqAtqIAIpAgg3AwAgBCACKQIANwOgCyAFIARBoAtqIAcQGUHIAGxqIAg2AiggAigCACAEQZgLaiACKQIINwMAIAQgAikCADcDkAsgBEGQC2ogBhAZQcgAbGpBfzYCMCACKAIAIARBiAtqIAIpAgg3AwAgBCACKQIANwOACyAEQYALaiAGEBlByABsakF/NgI0DAILIAIoAgAhBSAEQfgLaiACKQIINwMAIAQgAikCADcD8AsgBSAEQfALaiAGEBlByABsaigCMCEHIARB6AtqIAIpAgg3AwAgBCACKQIANwPgCyAFIARB4AtqIAcQGUHIAGxqIAY2AiwgAigCACAEQdgLaiACKQIINwMAIAQgAikCADcD0AsgBEHQC2ogCBAZQcgAbGpBfzYCMCACKAIAIARByAtqIAIpAgg3AwAgBCACKQIANwPACyAEQcALaiAIEBlByABsakF/NgI0DAELIAIoAgAhBSAEQfgKaiACKQIINwMAIAQgAikCADcD8AogBSAEQfAKaiAIEBlByABsaigCMCEHIARB6ApqIAIpAgg3AwAgBCACKQIANwPgCgJAIAUgBEHgCmogBxAZQcgAbGooAihBAWtBfUsNACACKAIAIQUgBEHYCmogAikCCDcDACAEIAIpAgA3A9AKIAUgBEHQCmogCBAZQcgAbGooAjAhByAEQcgKaiACKQIINwMAIAQgAikCADcDwAogBSAEQcAKaiAHEBlByABsaigCLEEBa0F9Sw0AIAIoAgAhBSAEQbgKaiACKQIINwMAIAQgAikCADcDsAogBSAEQbAKaiAIEBlByABsaigCMCEHIARBqApqIAIpAgg3AwAgBCACKQIANwOgCiAFIARBoApqIAcQGUHIAGxqKAIoIQcgAigCACEFIARBmApqIAIpAgg3AwAgBCACKQIANwOQCiAFIARBkApqIAgQGUHIAGxqKAIwIQogBEGICmogAikCCDcDACAEIAIpAgA3A4AKIAUg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aCAEIAIpAgA3A2AgBSAEQeAAaiAHEBlByABsaiAGNgIoIAIoAgAhBSAEIAIpAgg3A1ggBCACKQIANwNQIAUgBEHQAGogCBAZQcgAbGooAjQhByAEIAIpAgg3A0ggBCACKQIANwNAIAUgBEFAayAHEBlByABsakF/NgIsIAIoAgAgBCACKQIINwM4IAQgAikCADcDMCAEQTBqIAgQGUHIAGxqQX82AjQgAigCACAEIAIpAgg3AyggBCACKQIANwMgIARBIGogCBAZQcgAbGpBMGoMAQsgB0F/NgIsIAIoAgAhBSAEIAIpAgg3A/gBIAQgAikCADcD8AEgBSAEQfABaiAIEBlByABsaigCNCEHIAQgAikCCDcD6AEgBCACKQIANwPgASAFIARB4AFqIAcQGUHIAGxqIAg2AiggAigCACEFIAQgAikCCDcD2AEgBCACKQIANwPQASAFIARB0AFqIAgQGUHIAGxqKAI0IQcgBCACKQIINwPIASAEIAIpAgA3A8ABIAUgBEHAAWogBxAZQcgAbGogBjYCLCACKAIAIAQgAikCCDcDuAEgBCACKQIANwOwASAEQbABaiAIEBlByABsaigCNCEFIAIoAgAgBCACKQIINwOoASAEIAIpAgA3A6ABIARBoAFqIAYQGUHIAGxqIAU2AjAgAigCACAEIAIpAgg3A5gBIAQgAikCADcDkAEgBEGQAWogBhAZQcgAbGpBfzYCNCACKAIAIAQgAikCCDcDiAEgBCACKQIANwOAASAEQYABaiAIEBlByABsakE0agsoAgAhBSACKAIAIAQgAikCCDcDGCAEIAIpAgA3AxAgBEEQaiAIEBlByABsaiAANgIEIAIoAgAgBCACKQIINwMIIAQgAikCADcDACAEIAYQGUHIAGxqIAA2AgAMAAsAC0GwgwRBwgBBAUGI9ggoAgAQOhoQOwALySADEH8CfAJ+IwBBkAlrIgQkACAEQaAIaiIJQQBBwAAQOBogAEEAQeAAEDgiBUHIABAmIQAgBSgCACAAQcgAbGogBUEYakHIABAfGiADKAIAIRMgCRDvASEJIARBmAhqIARBqAhqIgApAwA3AwAgBCAEKQOgCDcDkAggBCgCoAggBEGQCGogCRAZQShsakECNgIAIARBiAhqIAApAwA3AwAgBCAEKQOgCDcDgAggBCgCoAggBEGACGog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AiACKAIAQQNxIQMLIAIgBiADQQNGGygCKCAFRw0CQZDdCigCACIDRQ0CIAIgAxBFIgMtAABFDQIgAUGwAmogAiADEMAODAILA0ACQCADIARPBEAgAUHgAmpBHBAxQQAhA0EAIQIDQCACIAEoArgCIgRPDQIgASABKQK4AjcD+AEgASABKQKwAjcD8AEgASgCsAIgAUHwAWogAhAZQRxsaigADEECTwRAIAEgASkCuAI3A+gBIAEgASkCsAI3A+ABIAEgASgCsAIgAUHgAWogAhAZQRxsaiIEKQIUNwPYASABIAQpAgw3A9ABIAEgBCkCBDcDyAEgBSABQcgBahDBDgsgAkEBaiECDAALAAsgASABKQLoAjcDwAEgASABKQLgAjcDuAEgAUG4AWogAxAZIQICQAJAIAEoAvACIgQOAgEJAAsgASABKALgAiACQRxsaiICKQIINwOgASABIAIpAhA3A6gBIAEgAigCGDYCsAEgASACKQIANwOYASABQZgBaiAEEQEACyADQQFqIQMgASgC6AIhBAwBCwsDQCADIARPBEAgAUGwAmpBHBAxIAAgBRAdIQUMBQUgASABKQK4AjcDqAIgASABKQKwAjcDoAIgAUGgAmogAxAZIQICQAJAIAEoAsACIgQOAgEJAAsgASABKAKwAiACQRxsaiICKQIINwOIAiABIAIpAhA3A5ACIAEgAigCGDYCmAIgASACKQIANwOAAiABQYACaiAEEQEACyADQQFqIQMgASgCuAIhBAwBCwALAAsgAUHgAmogAiADEMAOCyAAIAIgBRByIQIMAAsACwALIAFBkANqJAAPC0GwgwRBwgBBAUGI9ggoAgAQOhoQOwALHAEBf0EBIQIgACABENIOBH9BAQUgACABENEOCwtAAQJ/AkAgASAAKAIATw0AIAIgACgCBCIETw0AIAAoAgggASAEbCACaiIAQQN2ai0AACAAQQdxdkEBcSEDCyADC84CAQp/AkACQCAABEAgACgCACIFIAFLIAAoAgQiBCACS3FFBEAgBCACQQFqIgMgAyAESRsiBCAFIAFBAWoiAyADIAVJGyIFbCIDQQN2IANBB3FBAEdqEMYDIQcgACgCACEIA0AgBiAIRwRAIAQgBmwhCSAAKAIEIQpBACEDA0AgAyAKRgRAIAZBAWohBgwDCyAAIAYgAxDEDgRAIAcg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A0HMAGohCgJAA0AgAgRAAkAgAigCECIEIAhqKAIAKAIADQAgBCgCsAENACAEQQE2ArABIAMgAjYCTCADQThqQQQQJiEEIAMoAjggBEECdGogAygCTDYCAANAIAMoAkBFDQEgA0E4aiAKEKEEIAMoAkwiBSgCEC0AtQFBB0cEQCAAIAUQ0A4EQEEAIQIDQCADKAJAIAJNBEBBfyEEDAgFIAMgA0FAaykDADcDMCADIAMpAzg3AyggA0EoaiACEBkhAAJAAkACQCADKAJIIgEOAgIAAQsgAygCOCAAQQJ0aigCABAYDAELIAMoAjggAEECdGooAgAgAREBAAsgAkEBaiECDAELAAsACyADQThqIAUgARDPDgwBCyADQThqIQtBACEEAkAgAUEBaiIMIAUoAhAoAugBIgYoAhAiBSwAkQJGDQAgBSgC6AEhBQNAIAYoAhAiBCgC7AEiByAFTgRAIAVBAnQhByAFQQFqIQUgACAHIAQoAowCaigCABDQDiIERQ0BDAILCyAEKALoASEFA0AgBSAHTARAIAsgBCgCjAIgBUECdGooAgAgARDPDiAFQQFqIQUgBigCECIEKALsASEHDAELCyAEIAw6AJECQQAhBAsgBEUNAAtBACECA0AgAiADKAJATw0EIAMgA0FAaykDADcDICADIAMpAzg3AxggA0EYaiACEBkhAAJAAkACQCADKAJIIgEOAgIAAQsgAygCOCAAQQJ0aigCABAYDAELIAMoAjggAEECdGooAgAgAREBAAsgAkEBaiECDAALAAsgAigCECAJaigCACECDAELC0Ho/QooAgAhBSAAKAIQIgIoAugBIQQDQCACKALsASAETgRAIARByABsIgEgBSgCECgCxAFqQQA6ADECQCACLQB0QQFxRQ0AIAIoAsQBIAFqIgEoAgAiBkEATA0AIAZBAWsiBkEBdkEBaiEHIAEoAgQhAUEAIQIDQCACIAdHBEAgASACQQJ0aigCACABIAYgAmtBAnRqKAIAEJcIIAJBAWohAgwBCwsgACgCECECCyAEQQFqIQQMAQsLAkAgABBhIABHDQAQyQRCAFcNACAAQQAQlggLQQAhBEEAIQIDQCACIAMoAkBPDQEgAyADQUBrKQMANwMQIAMgAykDODcDCCADQQhqIAIQGSEAAkACQAJAIAMoAkgiAQ4CAgABCyADKAI4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IQILIAMgASACIAYQ6w4gASECCyAAIAYQMCEGDAALAAsACyAAEOoODAELIAAgA0EAQQAQ6Q4gAxAcIQEDQCABBEAgASgCECICQQA6ALQBIAJBADYCsAEgAyABEB0hAQwBCwsgAxAcIQEDQCABBEAgAyABEOgOIAMgARAdIQEMAQsLIAMQHCEBA0AgAQRAIAEoAhBBADYCkAEgAyABEB0hAQwBCwtBACEJIAMQHCEBA0AgAQRAIAEoAhAoApABRQRAIAMgASAJQQFqIgkQoAgLIAMgARAdIQEMAQsLAkAgCUECSA0AIANB5xwQygQhAiADEBwhAUEBIQgDQCABRQ0BIAggASgCECgCkAFGBEAgAyACIAFBAEEBEF4aIAhBAWohCAsgAyABEB0hAQwACwALIAMQHCEHA0AgBwRAIAMgBxAsIQEDQCABBEAgBygCECICKALIASACKALMASICQQFqIAJBAmoQ2gEhBCAHKAIQIgIgBDYCyAEgAiACKALMASICQQFqNgLMASAEIAJBAnRqIAE2AgAgBygCECICKALIASACKALMAUECdGpBADYCACABIAFBMGsiBSABKAIAQQNxQQJGGygCKCgCECICKALAASACKALEASICQQFqIAJBAmoQ2gEhAiABIAUgASgCAEEDcUECRhsoAigoAhAgAjYCwAEgASAFIAEoAgBBA3FBAkYbKAIoKAIQIgQgBCgCxAEiAkEBajYCxAEgBCgCwAEgAkECdGogATYCACABIAUgASgCAEEDcUECRhsoAigoAhAiAigCwAEgAigCxAFBAnRqQQA2AgAgAyABEDAhAQwBCwsgAyAHEB0hBwwBCwsgA0EBIBAgAEGnhwEQJyICBH8gAhCRAgVBfwsQ/w4aIAAoAhBC/////3c3A+gBQQAhBwJAIAlBAkgNACAJQQFqIgIQnwghB0EBIQEDQCABIAJGDQEgByABQQJ0akH/////BzYCACABQQFqIQEMAAsACyAAEBwhCANAIAgEQCAIEIYCIQIgCCgCECIBIAIoAhAoAqQBKAIQIgIoAvQBIgU2AvQBIAUgACgCECIEKALsAUoEQCAEIAU2AuwBCyAFIAQoAugBSARAIAQgBTYC6AELIAcEQCABIAIoApABIgI2ApABIAcgAkECdGoiAiACKAIAIgIgBSACIAVIGzYCAAsgACAIEB0hCAwB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IAFCADcDECABQgA3AwggASAANgIcIAFBCGpBBBAmIQAgASgCCCAAQQJ0aiABKAIcNgIAIAFBHGohCkH/////ByEEA0AgASgCEARAIAFBCGogCkEEEL4BQQAhACABKAIcIQcDQCAHKAIQIgIoAsgBIABBAnRqKAIAIgMEQCADQVBBACADKAIAQQNxIgtBAkcbaigCKCIMKAIQIg0oArACIQYCQCADKAIQIg4oAqQBQQBIBEAgBiAITCAGIAlOcQ0BIA0oAvQBIANBMEEAIAtBA0cbaigCKCgCECgC9AEgDigCrAFqayICIAQgBUUgAiAESHIiAhshBCADIAUgAhshBQwBCyAGIAIoArACTg0AIAEgDDYCHCABQQhqQQQQJiECIAEoAgggAkECdGogASgCHDYCAAsgAEEBaiEADAEFQQAhACAEQQBMDQMDQCACKAKYAiAAQQJ0aigCACIDRQ0EIANBMEEAIAMoAgBBA3FBA0cbaigCKCIDKAIQKAKwAiACKAKwAkgEQCABIAM2AhwgAUEIakEEECYhAiABKAIIIAJBAnRqIAEoAhw2AgAgBygCECECCyAAQQFqIQAMAAsACwALAAsLDAELIAQoAhAiACgCsAIhCCAAKAKsAiEJIAFBADYCGCABQgA3AxAgAUIANwMIIAEgBDYCHCABQQhqQQQQJiEAIAEoAgggAEECdGogASgCHDYCACABQRxqIQpB/////wchBANAIAEoAhAEQCABQQhqIApBBBC+AUEAIQAgASgCHCEHA0AgBygCECICKALAASAAQQJ0aigCACIDBEAgA0EwQQAgAygCAEEDcSILQQNHG2ooAigiDCgCECINKAKwAiEGAkAgAygCECIOKAKkAUEASARAIAYgCEwgBiAJTnENASADQVBBACALQQJHG2ooAigoAhAoAvQBIA0oAvQBIA4oAqwBamsiAiAEIAVFIAIgBEhyIgIbIQQgAyAFIAIbIQUMAQsgBiACKAKwAk4NACABIAw2AhwgAUEIakEEECYhAiABKAIIIAJBAnRqIAEoAhw2AgALIABBAWohAAwBBUEAIQAgBEEATA0DA0AgAigCoAIgAEECdGooAgAiA0UNBCADQVBBACADKAIAQQNxQQJHG2ooAigiAygCECgCsAIgAigCsAJIBEAgASADNgIcIAFBCGpBBBAmIQIgASgCCCACQQJ0aiABKAIcNgIAIAcoAhAhAgsgAEEBaiEADAALAAsACwALCwsgAUEIaiIAQQQQMSAAEDQgAUEgaiQAIAUL2QEBBH8gAEEwQQAgACgCAEEDcSIFQQNHG2ooAigiBiEDAn8CQCABIAZGBH8gAEFQQQAgBUECRxtqKAIoBSADCygCECgCsAIiAyABKAIQIgQoAqwCTgRAIAMgBCgCsAJMDQELIAAoAhAoApwBIQNBAAwBC0EAIQMgACgCECIEKAKkAUEATgR/IAQoAqABBUEACyAEKAKcAWshA0EBCyEEQQAgA2sgA0EBQX8gAkEATAR/IAEgBkYFIABBUEEAIAVBAkcbaigCKCABRgsbIgBBACAAayAEG0EASBsLgUsCEH8BfiMAQaAFayIEJAAgBEHQxAgvAQA7AfAEIARByMQIKQMANwPoBCAEQcDECCkDADcD4AQgBEG0BGpBAEEsEDgaQezaCi0AAARAIAAoAhBBwAFqIQUDQCAFKAIAIgUEQCAFKAIQIgooAsgBIQlBACEFA0AgCSAFQQJ0aigCAARAIAVBAWohBSAGQQFqIQYMAQUgCkG4AWohBSAHQQFqIQcMAwsACwALCyAEIAE2ArAEIAQgAjYCrAQgBCAGNgKoBCAEIAc2AqQEIAQgBEHgBGo2AqAEQYj2CCgCAEH7wAQgBEGgBGoQIBoQrQELIAQgADYCtARBACEGIARBuARqQQBBKBA4IQ4gACgCEEHAAWohBUEAIQkDQAJAIAUoAgAiB0UEQCAEIAY2AtQEIAQgCTYC2AQgDiAJQQQQ/AEgACgCEEHAAWohBUEBIQgDQCAFKAIAIgcEQEEAIQUgBygCECIKQQA2ArQCIAooAsABIQkDQCAFQQFqIQYgCSAFQQJ0aigCACIFBEAgCiAGNgK0AiAFKAIQIgxCgICAgHA3A6ABIAggDCgCrAEgBUFQQQAgBSgCAEEDcSIIQQJHG2ooAigoAhAoAvQBIAVBMEEAIAhBA0cbaigCKCgCECgC9AFrTHEhCCAGIQUMAQsLIAZBBBAaIQpBACEFIAcoAhAiBkEANgKcAiAGIAo2ApgCIAYoAsgBIQYDQCAFQQJ0IQogBUEBaiEFIAYgCmooAgANAAsgBUEEEBohBiAHKAIQIgVBADYCpAIgBSAGNgKgAiAFQbgBaiEFDAELCwJAIAhBAXENACAEQgA3A4gFIARCADcDgAUgBEIANwP4BCAEQfgEaiAEKALYBEEEEPwBIAQoArQEKAIQQcABaiEFIARBjAVqIQwDQCAFKAIAIgUEQCAFKAIQIgYoArQCBH8gBgUgBCAFNgKMBSAEQfgEakEEECYhBiAEKAL4BCAGQQJ0aiAEKAKMBTYCACAFKAIQC0G4AWohBQwBBUEAIQoLCwNAAkAgBCgCgAUEQCAEQfgEaiAMEKEEQQAhBiAEKAKMBSILKAIQIglBADYC9AEgCSgCwAEhDUEAIQdBACEIA0AgDSAIQQJ0aigCACIFBEAgCSAHIAUoAhAoAqwBIAVBMEEAIAUoAgBBA3FBA0cbaigCKCgCECgC9AFqIgUgBSAHSBsiBzYC9AEgCEEBaiEIDAELCwNAIAkoAsgBIAZBAnRqKAIAIgVFDQIgBSAFQTBrIgcgBSgCAEEDcUECRhsoAigoAhAiCCAIKAK0AiIIQQFrNgK0AiAIQQFMBEAgBCAFIAcgBSgCAEEDcUECRhsoAig2AowFIARB+ARqQQQQJiEFIAQoAvgEIAVBAnRqIAQoAowFNgIAIAsoAhAhCQsgBkEBaiEGDAALAAsCQCAKIAQoAtgERg0AQbWTBEEAEDcgBCgCtAQoAhBBwAFqIQUDQCAFKAIAIgVFDQEgBSgCECIGKAK0AgR/IAUQISEGIAQgBSgCECgCtAI2ApQEIAQgBjYCkARB/MEEIARBkARqEIABIAUoAhAFIAYLQbgBaiEFDAALAAtBACEFA0AgBSAEKAKABU9FBEAgBCAEKQOABTcDiAQgBCAEKQP4BDcDgAQgBEGABGogBRAZIQYCQAJAAkAgBCgCiAUiBw4CAgABCyAEKAL4BCAGQQJ0aigCABAYDAELIAQoAvgEIAZBAnRqKAIAIAcRAQALIAVBAWohBQwBCwsgBEH4BGoiBUEEEDEgBRA0DAILIApBAWohCgwACwALIARBHiADIANBAEgbNgLcBCAEKAK0BCgCEEHAAWohBQJAAkADQCAFKAIAIgMEQCADKAIQIgNBADYCqAIgA0G4AWohBQwBBQJAIAQoAtgEQQQQGiENIAQoArQEKAIQQcABaiEFIARBjAVqIQdBACEKA0AgBSgCACIMBEAgDCgCECIFKAKoAgR/IAUFQRAQUiIJIAw2AgAgDCgCECAJNgKoAiAEQQA2AogFIARCADcDgAUgBEIANwP4BEEBIQUgBEEBNgKYBSAEQgA3A5AFIAQgDDYCjAUgBEH4BGpBEBAmIQMgBCgC+AQgA0EEdGoiAyAHKQIANwIAIAMgBykCCDcCCANAAkAgBSEDIAQoAoAFIgVFDQAgBCAEKQOABTcD+AMgBCAEKQP4BDcD8AMgBCgC+AQgBEHwA2ogBUEBaxAZQQR0aiIIKAIEIQYgCCgCACgCECIPKALAASEQA0ACQCAQIAZBAnRqKAIAIgVFBEAgCCgCCCEGIA8oAsgBIQ8MAQsCQCAFKAIQIhEoAqQBQQBODQAgBSAFQTBqIgsgBSgCAEEDcSISQQNGGygCKCgCECITKAKoAg0AIAVBUEEAIBJBAkcbaigCKCgCECgC9AEgESgCrAEgEygC9AFqRw0AIARBtARqIAUQrAgEQCAEIAQpA4AFNwPoAyAEIAQpA/gENwPgAyAEQeADaiAEKAKABUEBaxAZIQUCQAJAIAQoAogFIgYOAgERAAsgBCAEKAL4BCAFQQR0aiIFKQIINwPYAyAEIAUpAgA3A9ADIARB0ANqIAYRAQALIARB+ARqIAdBEBC+AUF/IQUgBCgCgAUiBkUNBSAEIAQpA4AFNwPIAyAEIAQpA/gENwPAAyAEKAL4BCAEQcADaiAGQQFrEBlBBHRqIgUgBSgCDEEBazYCDCADIQUMBQsgCCAIKAIEQQFqNgIEIAUgCyAFKAIAQQNxQQNGGygCKCgCECAJNgKoAiAFIAsgBSgCAEEDcUEDRhsoAighBSAEQQE2ApgFIARCADcDkAUgBCAFNgKMBSAEQfgEakEQECYhBSAEKAL4BCAFQQR0aiIFIAcpAgA3AgAgBSAHKQIINwIIIAMhBQwECyAIIAZBAWoiBjYCBAwBCwsCQANAIA8gBkECdGooAgAiBUUNAQJAAkAgBSgCECIQKAKkAUEATg0AIAUgBUEwayILIAUoAgBBA3EiEUECRhsoAigoAhAiEigCqAINACASKAL0ASAQKAKsASAFQTBBACARQQNHG2ooAigoAhAoAvQBakYNAQsgCCAGQQFqIgY2AggMAQsLIARBtARqIAUQrAgEQCAEIAQpA4AFNwO4AyAEIAQpA/gENwOwAyAEQbADaiAEKAKABUEBaxAZIQUCQAJAIAQoAogFIgYOAgEPAAsgBCAEKAL4BCAFQQR0aiIFKQIINwOoAyAEIAUpAgA3A6ADIARBoANqIAYRAQALIARB+ARqIAdBEBC+AUF/IQUgBCgCgAUiBkUNAyAEIAQpA4AFNwOYAyAEIAQpA/gENwOQAyAEKAL4BCAEQZADaiAGQQFrEBlBBHRqIgUgBSgCDEEBazYCDCADIQUMAwsgCCAIKAIIQQFqNgIIIAUgCyAFKAIAQQNxQQJGGygCKCgCECAJNgKoAiAFIAsgBSgCAEEDcUECRhsoAighBSAEQQE2ApgFIARCADcDkAUgBCAFNgKMBSAEQfgEakEQECYhBSAEKAL4BCAFQQR0aiIFIAcpAgA3AgAgBSAHKQIINwIIIAMhBQwCCyAEQfgEaiAHQRAQvgEgBCgCmAUhBSAEKAKABSIGRQ0BIAQgBCkDgAU3A4gDIAQgBCkD+AQ3A4ADIAQoAvgEIARBgANqIAZBAWsQGUEEdGoiBiAGKAIMIAVqNgIMIAMhBQwBCwsgBEH4BGoiBUEQEDEgBRA0IAkgAzYCBCADQQBIDQMgCSAJNgIMIA0gCkECdGogCTYCACAKQQFqIQogDCgCEAtBuAFqIQUMAQsLQQgQUiIHIAo2AgQgByANNgIAQQAhBQNAIAUgCkYEQCAKQQF2IQUDQCAFQX9GBEACQCANQQRrIRBBACEMIAohCQNAIAlBAkkiDw0KIA0oAgAiA0F/NgIIIA0gECAJQQJ0aiIFKAIAIgY2AgAgBkEANgIIIAUgAzYCACAHIAlBAWsiCTYCBCAHQQAQqwggAygCAEEAQQAQqggiCEUEQEEBIQwMCwsgCCgCECgCpAFBAE4NASAIIAhBMGoiAyAIKAIAQQNxQQNGGygCKBDOBCEFIAggCEEwayILIAgoAgBBA3FBAkYbKAIoEM4EIQYgCCgCECgCrAEgCCADIAgoAgBBA3EiEUEDRhsoAigoAhAoAvQBaiEDIAggCyARQQJGGygCKCgCECgC9AEhCwJAAn8gBSgCCEF/RgRAIAMgC0YNAiALIANrIQsgBQwBCyADIAtGDQEgAyALayELIAYLKAIAQQAgCxCpCAsgBEG0BGogCBCsCA0JA0AgBSIDKAIMIgUEQCADIAVHDQELCwNAIAYiBSgCDCIGBEAgBSAGRw0BCwsCQCADIAVHBEAgBSgCCCEGAn8gAygCCEF/RgRAIAZBf0cEQCAFIQZBAAwCC0G3qQNBx7kBQbkDQcrjABAAAAsgBkF/RgRAIAMhBkEADAELIAMgBSAFKAIEIAMoAgRIGyIGKAIIQX9GCyAFIAY2AgwgAyAGNgIMIAYgBSgCBCADKAIEajYCBEUNAUGDowNBx7kBQcEDQcrjABAAAAsgAyIGRQ0KCyAHIAYoAggQqwgMAAsACwUgByAFEKsIIAVBAWshBQwBCwtB96YDQce5AUGrBEHaMBAAAAUgDSAFQQJ0aigCACAFNgIIIAVBAWohBQwBCwALAAsLCyAJEBhBAiEMQQAhDyANIApBAnRqQQA2AgBBACEHDAELQQIhDAsgBxAYQQAhBQJAAkACQAJAAkADQCAFIApGBEACQCANEBggD0UNBiAEKALABCAEKALYBEEBa0YEQCAEKAK0BCgCECgCwAEhAyAEQQA2AogFIARCADcDgAUgBEIANwP4BCADKAIQQoCAgIAQNwOoAiAEQgA3A5gFIARCgICAgBA3A5AFIAQgAzYCjAUgBEH4BGpBFBAmIQMgBCgC+AQgA0EUbGoiAyAEKQKMBTcCACADIAQoApwFNgIQIAMgBCkClAU3AgggBEGMBWohBQNAIAQoAoAFIgMEQCAEIAQpA4AFNwP4AiAEIAQpA/gENwPwAiAEKAL4BCAEQfACaiADQQFrEBlBFGxqIgMoAgwhBiADKAIAKAIQIgooAqACIQkCQANAIAkgBkECdGooAgAiB0UEQCADKAIQIQYgCigCmAIhCQNAIAkgBkECdGooAgAiB0UNAyADIAZBAWoiBjYCECAHIAMoAgRGDQALIAdBMEEAIAcoAgBBA3FBA0cbaigCKCIGKAIQIgogBzYCqAIgCiADKAIIIgM2AqwCIARCADcDmAUgBCADNgKUBSAEIAc2ApAFIAQgBjYCjAUgBEH4BGpBFBAmIQMgBCgC+AQgA0EUbGoiAyAFKQIANwIAIAMgBSgCEDYCECADIAUpAgg3AggMBAsgAyAGQQFqIgY2AgwgByADKAIERg0ACyAHQVBBACAHKAIAQQNxQQJHG2ooAigiBigCECIKIAc2AqgCIAogAygCCCIDNgKsAiAEQgA3A5gFIAQgAzYClAUgBCAHNgKQBSAEIAY2AowFIARB+ARqQRQQJiEDIAQoAvgEIANBFGxqIgMgBSkCADcCACADIAUoAhA2AhAgAyAFKQIINwIIDAILIAogAygCCCIGNgKwAiAEIAQpA4AFNwPoAiAEIAQpA/gENwPgAiAEQeACaiAEKAKABUEBaxAZIQMCQAJAIAQoAogFIgcOAgEOAAsgBCAEKAL4BCADQRRsaiIDKQIINwPQAiAEIAMoAhA2AtgCIAQgAykCADcDyAIgBEHIAmogBxEBAAsgBEH4BGogBUEUEL4BIAQoAoAFIgNFDQEgBCAEKQOABTcDwAIgBCAEKQP4BDcDuAIgBCgC+AQgBEG4AmogA0EBaxAZQRRsaiAGQQFqNgIIDAELCyAEQfgEaiIFQRQQMSAFEDQgBCgCtAQoAhAoAsABIQMgBEEANgKIBSAEQgA3A4AFIARCADcD+AQgBEEANgKYBSAEQgA3A5AFIAQgAzYCjAUgBUEQECYhAyAEKAL4BCADQQR0aiIDIAQpAowFNwIAIAMgBCkClAU3AgggBEGMBWohCgJAAkADQCAEKAKABSIDBEAgBCAEKQOABTcDsAIgBCAEKQP4BDcDqAIgBCgC+AQgBEGoAmogA0EBaxAZQQR0aiIDKAIIIQUgAygCACgCECIJKAKgAiEHAkADQCAHIAVBAnRqKAIAIgZFBEAgAygCBCEHIAMoAgwhBSAJKAKYAiEJA0AgCSAFQQJ0aigCACIGRQ0DIAMgBUEBaiIFNgIMIAYgB0YNAAsgBkEwQQAgBigCAEEDcUEDRxtqKAIoIQMgBEIANwKUBSAEIAY2ApAFIAQgAzYCjAUgBEH4BGpBEBAmIQMgBCgC+AQgA0EEdGoiAyAKKQIANwIAIAMgCikCCDcCCAwECyADIAVBAWoiBTYCCCAGIAMoAgRGDQALIAZBUEEAIAYoAgBBA3FBAkcbaigCKCEDIARCADcClAUgBCAGNgKQBSAEIAM2AowFIARB+ARqQRAQJiEDIAQoAvgEIANBBHRqIgMgCikCADcCACADIAopAgg3AggMAgsgBwRAIAcgB0EwQQAgBygCAEEDcSIFQQNHG2ooAigiCCgCECIDKAKoAkYEf0EBBSAHQVBBACAFQQJHG2ooAigiCCgCECEDQX8LIQkgAygCyAEhDEEAIQVBACEGA0ACQCAMIAZBAnRqKAIAIgtFBEAgAygCwAEhA0EAIQYDQCADIAZBAnRqKAIAIgxFDQIgDCAIIAkQ/g4iDEEASCAFIAUgDGoiBUpHDQcgBkEBaiEGDAALAAsgCyAIIAkQ/g4iC0EASCAFIAUgC2oiBUpHDQYgBkEBaiEGDAELCyAHKAIQIAU2AqABCyAEIAQpA4AFNwOgAiAEIAQpA/gENwOYAiAEQZgCaiAEKAKABUEBaxAZIQMCQAJAIAQoAogFIgUOAgEQAAsgBCAEKAL4BCADQQR0aiIDKQIINwOQAiAEIAMpAgA3A4gCIARBiAJqIAURAQALIARB+ARqIApBEBC+AQwBCwsgBEH4BGoiA0EQEDEgAxA0IAJBAEwNCEGI9ggoAgAhDSAEQYwFaiEKQQAhAwJAA0AgBCgC0AQiByEGQQAhBUEAIQkCQANAIAQoAsAEIAZLBEAgBCAOKQIINwPgASAEIA4pAgA3A9gBIAQoArgEIARB2AFqIAYQGUECdGooAgAiBigCECgCoAEiCEEASARAAn8gBQRAIAYgBSAFKAIQKAKgASAIShsMAQsgBCAOKQIINwPQASAEIA4pAgA3A8gBIAQoArgEIARByAFqIAQoAtAEEBlBAnRqKAIACyEFIAlBAWoiCSAEKALcBE4NAwsgBCAEKALQBEEBaiIGNgLQBAwBCwtBACEGIAdFDQADQCAEIAY2AtAEIAYgB08NASAEIA4pAgg3A4ACIAQgDikCADcD+AEgBCgCuAQgBEH4AWogBhAZQQJ0aigCACIGKAIQKAKgASIIQQBIBEACfyAFBEAgBiAFIAUoAhAoAqABIAhKGwwBCyAEIA4pAgg3A/ABIAQgDikCADcD6AEgBCgCuAQgBEHoAWogBCgC0AQQGUECdGooAgALIQUgCUEBaiIJIAQoAtwETg0CCyAEKALQBEEBaiEGDAALAAsgBUUNAQJAIAUQ/Q4iByAHQTBrIgYgBygCAEEDcSIJQQJGGygCKCgCECgC9AEgByAHQTBqIgggCUEDRhsoAigoAhAoAvQBIAcoAhAoAqwBamsiCUEATA0AAkAgBUEwQQAgBSgCAEEDcSILQQNHG2ooAigiECgCECIMKAKkAiAMKAKcAmpBAUYNACAFQVBBACALQQJHG2ooAigiCygCECIPKAKkAiAPKAKcAmpBAUYEQCALQQAgCWsQugMMAgsgDCgCsAIgDygCsAJIDQAgC0EAIAlrELoDDAELIBAgCRC6AwsgByAIIAcoAgBBA3EiCUEDRhsoAiggByAGIAlBAkYbKAIoIAUoAhAoAqABIgtBARD8DiIJIAcgBiAHKAIAQQNxIgxBAkYbKAIoIAcgCCAMQQNGGygCKCALQQAQ/A5HDQkgCSgCECgCrAIhDCAJIAcgBiAHKAIAQQNxQQJGGygCKBD7DiAJIAcgCCAHKAIAQQNxQQNGGygCKBD7DiAHKAIQIgZBACALazYCoAEgBSgCECIIQQA2AqABIAYgCCgCpAEiBjYCpAECQCAGQQBOBEAgBCAHNgLMBCAEIA4pAgg3A8ABIAQgDikCADcDuAEgBEG4AWogBhAZIQYCQAJAAkAgBCgCyAQiCA4CAgABCyAEKAK4BCAGQQJ0aigCABAYDAELIAQoArgEIAZBAnRqKAIAIAgRAQALIAQoArgEIAZBAnRqIAQoAswENgIAIAUoAhBBfzYCpAFBACEGIAVBMEEAIAUoAgBBA3FBA0cbaigCKCIPKAIQIgggCCgCpAJBAWsiCzYCpAIgCCgCoAIhCANAAkAgBiALSw0AIAggBkECdGooAgAgBUYNACAGQQFqIQYMAQsLIAggBkECdGogCCALQQJ0IgtqKAIANgIAQQAhBiAPKAIQKAKgAiALakEANgIAIAVBUEEAIAUoAgBBA3FBAkcbaigCKCIPKAIQIgggCCgCnAJBAWsiCzYCnAIgCCgCmAIhCANAAkAgBiALSw0AIAggBkECdGooAgAgBUYNACAGQQFqIQYMAQsLIAggBkECdGogCCALQQJ0IgVqKAIANgIAIA8oAhAoApgCIAVqQQA2AgAgB0EwQQAgBygCAEEDcUEDRxtqKAIoIgYoAhAiBSAFKAKkAiIIQQFqNgKkAiAFKAKgAiAIQQJ0aiAHNgIAIAYoAhAiBSgCoAIgBSgCpAJBAnRqQQA2AgAgB0FQQQAgBygCAEEDcUECRxtqKAIoIgYoAhAiBSAFKAKcAiIIQQFqNgKcAiAFKAKYAiAIQQJ0aiAHNgIAIAYoAhAiBSgCmAIgBSgCnAJBAnRqQQA2AgAgCSgCECIFKAKsAiAMRg0BIAUoAqgCIQYgBEEANgKIBSAEQgA3A4AFIARCADcD+AQgBSAMNgKsAiAEQgA3A5gFIAQgDDYClAUgBCAGNgKQBSAEIAk2AowFIARB+ARqQRQQJiEFIAQoAvgEIAVBFGxqIgUgCikCADcCACAFIAooAhA2AhAgBSAKKQIINwIIA0ACQAJAIAQoAoAFIgUEQCAEIAQpA4AFNwOwASAEIAQpA/gENwOoASAEKAL4BCAEQagBaiAFQQFrEBlBFGxqIgUoAgwhBiAFKAIAKAIQIgcoAqACIQgCQAJAA0AgCCAGQQJ0aigCACIJRQRAIAUoAhAhBiAHKAKYAiEIA0AgCCAGQQJ0aigCACIJRQ0EIAUgBkEBaiIGNgIQIAkgBSgCBEYNAAsgCUEwQQAgCSgCAEEDcUEDRxtqKAIoIggoAhAiBigCqAIgCUYNAiAFKAIIIQcMBgsgBSAGQQFqIgY2AgwgCSAFKAIERg0ACyAJIAlBUEEAIAkoAgBBA3FBAkcbaigCKCIIKAIQIgYoAqgCRwRAIAUoAgghBwwECyAFKAIIIgcgBigCrAJHDQMgBSAGKAKwAkEBajYCCAwFCyAFKAIIIgcgBigCrAJHDQMgBSAGKAKwAkEBajYCCAwECyAHIAUoAggiBjYCsAIgBCAEKQOABTcDoAEgBCAEKQP4BDcDmAEgBEGYAWogBCgCgAVBAWsQGSEFAkACQAJAIAQoAogFIgcOAgIAAQtBsIMEQcIAQQEgDRA6GhA7AAsgBCAEKAL4BCAFQRRsaiIFKQIINwOIASAEIAUoAhA2ApABIAQgBSkCADcDgAEgBEGAAWogBxEBAAsgBEH4BGogCkEUEL4BIAQoAoAFIgVFDQMgBCAEKQOABTcDeCAEIAQpA/gENwNwIAQoAvgEIARB8ABqIAVBAWsQGUEUbGogBkEBajYCCAwDCyAEQfgEaiIFQRQQMSAFEDQMBAsgBiAHNgKsAiAGIAk2AqgCIARCADcDmAUgBCAHNgKUBSAEIAk2ApAFIAQgCDYCjAUgBEH4BGpBFBAmIQUgBCgC+AQgBUEUbGoiBSAKKQIANwIAIAUgCigCEDYCECAFIAopAgg3AggMAQsgBiAHNgKsAiAGIAk2AqgCIARCADcDmAUgBCAHNgKUBSAEIAk2ApAFIAQgCDYCjAUgBEH4BGpBFBAmIQUgBCgC+AQgBUEUbGoiBSAKKQIANwIAIAUgCigCEDYCECAFIAopAgg3AggMAAsAC0GxmgNBx7kBQfUAQZUwEAAACwJAQezaCi0AAEUgA0EBaiIDQeQAcHINACADQegHcCIFQeQARgRAIARB4ARqIA0QiwEaCyAEIAM2AmAgDUH3ygMgBEHgAGoQIBogBQ0AQQogDRCnARoLIAIgA0cNAAsgAiEDC0EAIQUCQAJAAkACQCABQQFrDgIAAQILIARBtARqEPkOIgBBAEgNAkEBIQdBACEKIABBAWpBBBAaIQEgBCgCtARB56EBECciAkUNBiACQc7kABBjIgZFBEBBAiEHIAJBmRMQY0UNBwsgBCgCtAQoAhBBwAFqIQUgBkEBcyEKA0AgBSgCACICBEACQCACKAIQIgItAKwBDQAgCiACKALEAUEAR3JFBEAgAkEANgL0AQsgBiACKALMAXINACACIAA2AvQBCyACQbgBaiEFDAEFIAchCgwICwALAAsDQCAFIAQoAsAET0UEQCAEIA4pAgg3A1ggBCAOKQIANwNQAkAgBCgCuAQgBEHQAGogBRAZQQJ0aigCACIAKAIQKAKgAQ0AIAAQ/Q4iAUUNACABQVBBACABKAIAQQNxIgJBAkcbaigCKCgCECgC9AEgAUEwQQAgAkEDRxtqKAIoKAIQKAL0ASABKAIQKAKsAWprIgFBAkgNACABQQF2IQEgAEEwQQAgACgCAEEDcSICQQNHG2ooAigiBigCECgCsAIgAEFQQQAgAkECRxtqKAIoIgAoAhAoArACSARAIAYgARC6AwwBCyAAQQAgAWsQugMLIAVBAWohBQwBCwsgBEG0BGogBCgCtAQQzQQMCAsgBEG0BGoiABD5DhogACAEKAK0BBDNBAwHC0HdmANBx7kBQY4GQdyhARAAAAtBn40EQQAQNxAvAAtBn40EQQAQNxAvAAtB740DQce5AUH0BEGMnwEQAAALBSANIAVBAnRqKAIAEBggBUEBaiEFDAELCyAEQgA3A4gFIARCADcDgAUgBEIANwP4BCAEQfgEaiAEKALYBEEEEPwBIAQoArQEKAIQQcABaiEFA0AgBSgCACICBEAgBCACNgKMBSAEQfgEakEEECYhBSAEKAL4BCAFQQJ0aiAEKAKMBTYCACACKAIQQbgBaiEFDAELCyAEQfgEakGeA0GfAyAKQQFKG0EEEKIDQQAhBgNAIAQoAoAFIgUgBk0EQEEAIQwDQCAFIAxNBEBBACEGA0AgBSAGTUUEQCAEIAQpA4AFNwNIIAQgBCkD+AQ3A0AgBEFAayAGEBkhAAJAAkACQCAEKAKIBSICDgICAAELIAQoAvgEIABBAnRqKAIAEBgMAQsgBCgC+AQgAEECdGooAgAgAhEBAAsgBkEBaiEGIAQoAoAFIQUMAQsLIARB+ARqIgBBBBAxIAAQNCABEBggBEG0BGoQ+A4MBAsgBCAEKQOABTcDOCAEIAQpA/gENwMwIAQoAvgEIARBMGogDBAZQQJ0aigCACIOKAIQIgItAKwBRQRAIAIoAsABIQdBACEJQQAhBkEAIQgDQCAHIAhBAnRqKAIAIgUEQCAGIAUoAhAiCygCrAEgBUEwQQAgBSgCAEEDcUEDRxtqKAIoKAIQKAL0AWoiBSAFIAZIGyEGIAhBAWohCCALKAKcASAJaiEJDAEFAkAgAigCyAEhD0EAIQsgACEHQQAhCANAIA8gCEECdGooAgAiBQRAIAcgBUFQQQAgBSgCAEEDcUECRxtqKAIoKAIQKAL0ASAFKAIQIgUoAqwBayIQIAcgEEgbIQcgCEEBaiEIIAUoApwBIAtqIQsMAQUgCgRAIAkgC0cNAyACIAYgByAKQQFGGzYC9AEMAwsgCSALRw0CIAcgBiAGIAdIGyEHIAYhBQNAIAUgB0YEQCABIAIoAvQBQQJ0aiIFIAUoAgBBAWs2AgAgASAGQQJ0aiIFIAUoAgBBAWo2AgAgAiAGNgL0AQUgBUEBaiIFIAYgASAFQQJ0aigCACABIAZBAnRqKAIASBshBgwBCwsLCwsLCyACKAKYAhAYIA4oAhAoAqACEBggDigCEEEANgKwAQsgDEEBaiEMIAQoAoAFIQUMAAsACyAEIAQpA4AFNwMoIAQgBCkD+AQ3AyAgBCgC+AQgBEEgaiAGEBlBAnRqKAIAKAIQIgItAKwBRQRAIAEgAigC9AFBAnRqIgIgAigCAEEBajYCAAsgBkEBaiEGDAALAAtBACEMQezaCi0AAEUNAyADQeQATgRAQQogDRCnARoLIAQpAtQEIRQgBBCOATkDECAEIAM2AgwgBCAUQiCJNwIEIAQgBEHgBGo2AgAgDUHqyQQgBBAzDAMLQeDqA0EAEDcgBEG0BGogABDNBEECIQwMAgsgBEG0BGogABDNBEEAIQwMAQsgBEG0BGogABDNBAsgBEGgBWokACAMDwtBACEFIAcoAhAiB0EANgKwASAHKALIASEKA0AgCiAFQQJ0aigCAARAIAVBAWohBSAGQQFqIQYMAQUgB0G4AWohBSAJQQFqIQkMAwsACwALC0GwgwRBwgBBAUGI9ggoAgAQOhoQOwAL5wQBA38jAEGAAWsiBSQAIAUgATYCfCAFIAIpAgg3A2AgBSACKQIANwNYIAVB2ABqIAVB/ABqEIcHIQYgBSgCfCEBAkAgBgRAIAEgA0cNASACKAAIIQZBACEAA0AgBCgACCAASwRAIAQoAgAhAyAFIAQpAgg3AzAgBSAEKQIANwMoQQAhASAGIAMgBUEoaiAAEBlBAnRqKAIAIgMoAAhGBEADQCABIAZGDQUgAygCACEHIAUgAykCCDcDICAFIAMpAgA3AxggBSAHIAVBGGogARAZQQJ0aigCADYCbCAFIAIpAgg3AxAgBSACKQIANwMIIAFBAWohASAFQQhqIAVB7ABqEIcHDQALCyAAQQFqIQAMAQsLEIEPIQAgBUFAayACKQIINwMAIAUgAikCADcDOCAFQewAaiAFQThqEIsLIABBADYCFCAAIAUpAmw3AgAgACAFKQJ0NwIIIAAgAigCEDYCECAEIAA2AhQgBEEEECYhACAEKAIAIABBAnRqIAQoAhQ2AgAMAQsgAiABNgIUIAJBBBAmIQEgAigCACABQQJ0aiACKAIUNgIAIAAgBSgCfBAsIQEDQCABBEAgACABQVBBACABKAIAQQNxQQJHG2ooAiggAiADIAQQgA8gACABEDAhAQwBCwsgAigACCIARQ0AIAJBFGohASAFIAIpAgg3A1AgBSACKQIANwNIIAVByABqIABBAWsQGSEAAkACQAJAIAIoAhAiAw4CAgABCyACKAIAIABBAnRqKAIAEBgMAQsgAigCACAAQQJ0aigCACADEQEACyACIAFBBBC+AQsgBUGAAWokAAsIAEEBQRgQGgu/EgMLfwl8An4jAEHQAmsiBSQAIAEoAgAiBiAGQTBrIgkgBigCAEEDcSIHQQJGGygCKCEKIAZBMEEAIAdBA0cbaigCKCgCECIIKwAQIRAgBigCECIHKwAQIREgBSAHKwAYIAgrABigIhM5A5gCIAUgBSkDmAI3A6gCIAUgESAQoCIROQOQAiAFIAUpA5ACNwOgAiAKKAIQIggrABAhECAHKwA4IRIgBSAHKwBAIAgrABigIhQ5A8gCIAUgEiAQoCIQOQPAAiAFIAUpA8gCNwO4AiAFIAUpA8ACNwOwAgJAAkACQCACQQFHBEBBjNsKLQAAQQFHDQELIANBBEcNASAFQbjECCkCACIZNwPgASAFQbDECCkCACIaNwPYASAFIBo3A5gBIAUgGTcDoAEgBUGoxAgpAgAiGTcD0AEgBSAZNwOQASAAEBwhAwNAIAMEQCAFEIEPIgE2AuQBIAVB0AFqQQQQJiECIAUoAtABIAJBAnRqIAUoAuQBNgIAIAAgAyABIAMgBUGQAWoQgA8gACADEB0hAwwBBUEAIQMDQCAFKALYASADSwRAIAUgBSkD2AE3AxAgBSAFKQPQATcDCCAFQQhqIAMQGSEBAkACQAJAIAUoAuABIgIOAgIAAQsgBSgC0AEgAUECdGooAgAQGAwBCyAFKALQASABQQJ0aigCACACEQEACyADQQFqIQMMAQsLIAVB0AFqIgFBBBAxIAZBKGohCCABEDRBACEKQQAhAQNAAkACQCAFKAKYASIDIApLBEAgBUFAayAFKQOYATcDACAFIAUpA5ABNwM4IAUoApABIAVBOGogChAZQQJ0aigCACIHKAAIIgJBA0kNAiABBEAgASgACCACTQ0DC0EAIQMgCEFQQQAgBigCAEEDcSILQQJHG2ooAgAhDSAIQTBBACALQQNHG2ooAgAhCwNAIAIgA0YEQCACIQMMAwsgBygCACAFIAcpAgg3AzAgBSAHKQIANwMoIAVBKGogAyACIAMbQQFrEBlBAnRqKAIAIQwgBygCACEOIAUgBykCCDcDICAFIAcpAgA3AxggBUEYaiADEBkhDyALIAxGBEAgDiAPQQJ0aigCACANRg0DCyADQQFqIQMMAAsACwJAAkAgAQRAQQAhA0QAAAAAAAAAACERRAAAAAAAAAAAIRBEAAAAAAAAAAAhEwwBC0EAIQEDQCABIANPBEAgBUGQAWoiAUEEEDEgARA0IAAoAhAiACsDGCAAKwMooEQAAAAAAADgP6IhEiAAKwMQIAArAyCgRAAAAAAAAOA/oiEVDAMFIAUgBSkDmAE3A1AgBSAFKQOQATcDSCAFQcgAaiABEBkhAgJAAkACQCAFKAKgASIDDgICAAELIAUoApABIAJBAnRqKAIAEBgMAQsgBSgCkAEgAkECdGooAgAgAxEBAAsgAUEBaiEBIAUoApgBIQMMAQsACwALA0AgASgACCADSwRAIAEoAgAhACAFIAEpAgg3A2AgBSABKQIANwNYIBFEAAAAAAAA8D+gIREgECAAIAVB2ABqIAMQGUECdGooAgAoAhAiACsDGKAhECATIAArAxCgIRMgA0EBaiEDDAELC0EAIQMDfCAFKAKYASADTQR8IAVBkAFqIgBBBBAxIBAgEaMhEiATIBGjIRUgABA0IAUrA5gCIRMgBSsDyAIhFCAFKwPAAiEQIAUrA5ACBSAFIAUpA5gBNwNwIAUgBSkDkAE3A2ggBUHoAGogAxAZIQACQAJAAkAgBSgCoAEiAQ4CAgABCyAFKAKQASAAQQJ0aigCABAYDAELIAUoApABIABBAnRqKAIAIAERAQALIANBAWohAwwBCwshEQsgFSAQIBGgRAAAAAAAAOA/oiIVoSIWIBIgFCAToEQAAAAAAADgP6IiF6EiGBBHIhJEAAAAAAAAAABhDQYgBSAXIBggEqMgECARoSIQIBCiIBQgE6EiECAQoqCfRAAAAAAAABRAoyIQoqEiETkDuAIgBSAVIBYgEqMgEKKhIhA5A6ACIAUgEDkDsAIgBSAROQOoAgwGCyAHIAEgAiADSxshAQsgCkEBaiEKDAALAAsACwALAkACfCARIBChIhIgEqIgEyAUoSISIBKioESN7bWg98awPmMEQCAFIAUpA5ACNwOgAiAFIAUpA5gCNwOoAiAFIAUpA8ACNwOwAiAFIAUpA8gCNwO4AkQAAAAAAAAAACEQRAAAAAAAAAAADAELIAJBAWsiBkEASA0BIAUgFCAQIBGhIhUgACgCSCgCECgC+AEiACAGbEECbbciFqIgEiAVEEciFKMiF6A5A7gCIAUgECASIBaiIBSjIhCgOQOwAiAFIBMgF6A5A6gCIAUgESAQoDkDoAIgFUEAIABrtyIRoiAUoyEQIBIgEaIgFKMLIRFBACEGIANBBkchCANAIAIgBkYNA0EAIQMCQCAKIAEgBkECdGooAgAiACAAQTBrIgcgACgCAEEDcUECRhsoAihGBEADQCADQQRGDQIgA0EEdCIJIAVB0AFqaiILIAVBkAJqIAlqIgkpAwg3AwggCyAJKQMANwMAIANBAWohAwwACwALA0AgA0EERg0BQQAgA2tBBHQgBWoiCSAFQZACaiADQQR0aiILKQMINwOIAiAJIAspAwA3A4ACIANBAWohAwwACwALAkAgCEUEQCAFIAUpA9ABNwOQASAFKQPYASEZIAUgBSkD4AE3A6ABIAUgGTcDmAEgBSAFKQPoATcDqAEgBSAFKQPwATcDsAEgBSAFKQP4ATcDuAEgBSAFKQOIAjcDyAEgBSAFKQOAAjcDwAEgBUEENgKEASAFIAVBkAFqNgKAASAFIAUpAoABNwN4IAVB+ABqIAVBiAFqEI4EIAAgACAHIAAoAgBBA3FBAkYbKAIoIAUoAogBIAUoAowBIAQQlAEMAQsgACAAIAcgACgCAEEDcUECRhsoAiggBUHQAWpBBCAEEJQBCyAAEJoDIAUgECAFKwOoAqA5A6gCIAUgESAFKwOgAqA5A6ACIAUgESAFKwOwAqA5A7ACIAUgECAFKwO4AqA5A7gCIAZBAWohBgwACwALQZjMAUHXuwFB7wdBqTAQAAALIAYgBiAJIAYoAgBBA3FBAkYbKAIoIAVBkAJqQQQgBBCUASAGEJoDCyAFQdACaiQAC/UCAgV8BX8gBCABuKIhCANAIAMgCkEDaiINSwRAIAIgDUEEdGohDkQAAAAAAAAAACEHIAIgCkEEdGohCwNAIAcgCGVFBEAgDSEKDAMLIAcgCKMiBCAEIAQgDisDCCALKwMoIgWhoiAFoCAEIAUgCysDGCIFoaIgBaAiBqGiIAagIAQgBiAEIAUgCysDCCIFoaIgBaAiBaGiIAWgIgWhoiAFoCEFIAQgBCAEIA4rAwAgCysDICIGoaIgBqAgBCAGIAsrAxAiBqGiIAagIgmhoiAJoCAEIAkgBCAGIAsrAwAiBKGiIASgIgShoiAEoCIEoaIgBKAhBEEAIQoDQCABIApGBEAgB0QAAAAAAADwP6AhBwwCBQJAIAUgACAKQQV0aiIMKwMYRC1DHOviNho/oGVFDQAgBSAMKwMIRC1DHOviNhq/oGZFDQAgDCAMKwMAIAQQKTkDACAMIAwrAxAgBBAjOQMQCyAKQQFqIQoMAQsACwALAAsLC4wBAgF8AX8CQCABIAJlIAAgA2ZyBHxEAAAAAAAAAAAFIAAgAmVFIAEgA2ZFckUEQCABIAChDwsgACACZiIFRSABIANlRXJFBEAgAyACoQ8LIAVFIAAgA2VFckUEQCADIAChDwsgASACZkUgASADZUVyDQEgASACoQsPC0Gx8QJB17sBQe0EQdrcABAAAAvSIQIRfwh8IwBB0AJrIgQkACABQQA2AgBBzP0KQcz9CigCAEEBajYCAEHQ/QogACgCUCIMQdD9CigCAGo2AgAgAEHYAGohAwJAAkACQANAIAMoAgAiDkUNASAOKAIQIgdB+ABqIQMgBy0AcA0ACyAAKAJUIQhBACEDAkADQCADIAxGBEACQCAIKwMAIAgrAxBkDQAgCCsDCCAIKwMYZA0AQQEgCiAKQQFNG0EBayERQYj2CCgCACEPQQAhAwwDCwUCQCAIIANBBXRqIgcrAwggBysDGKGZRHsUrkfheoQ/Yw0AIAcrAwAgBysDEKGZRHsUrkfheoQ/Yw0AIAggCkEFdGoiBSAHKQMANwMAIAUgBykDGDcDGCAFIAcpAxA3AxAgBSAHKQMINwMIIApBAWohCgsgA0EBaiEDDAELC0HwtQRBABA3IAAQrQgMAwsDQCADIBFHBEACQCAIIANBAWoiB0EFdGoiBSsDACIWIAUrAxAiFGRFBEAgBSsDCCIXIAUrAxgiGGRFDQELIAQgBzYC0AFBwbUEIARB0AFqEDcgABCtCEEAIQYMBQsCQAJAAkAgCCADQQV0aiIGKwMAIhUgFGQiCSAGKwMQIhkgFmMiEmogBisDGCIaIBdjIg1qIAYrAwgiGyAYZCILaiIQRQ0AQezaCi0AAEUNACAEIAc2AuQBIAQgAzYC4AEgD0GRlQQgBEHgAWoQIBogABCtCAwBCyAQRQ0BCwJAIBIEQCAGKwMQIRQgBiAFKwMAOQMQIAUgFDkDAAwBCyAUIBVjBEAgBisDACEUIAYgBSsDEDkDACAFIBQ5AxBBACEJDAELIBcgGmQEQCAGKwMYIRQgBiAFKwMIOQMYIAUgFDkDCEEAIQlBACENDAELQQAhCUEAIQ1BACELIBggG2NFDQAgBisDCCEUIAYgBSsDGDkDCCAFIBQ5AxgLIBBBAWshEEEAIQMDQCADIBBHBEACQCAJQQFxBEAgBSAGKwMAIAUrAxCgRAAAAAAAAOA/okQAAAAAAADgP6AiFDkDECAGIBQ5AwAMAQsgDUEBRgRAIAUgBisDGCAFKwMIoEQAAAAAAADgP6JEAAAAAAAA4D+gIhQ5AwggBiAUOQMYQQAhDQwBC0EAIQ0gCwRAIAUgBisDCCAFKwMYoEQAAAAAAADgP6JEAAAAAAAA4D+gIhQ5AxggBiAUOQMIC0EAIQsLIANBAWohA0EAIQkMAQsLIAUrAxAhFCAFKwMAIRYgBisDECEZIAYrAwAhFQsgByEDIBUgGSAWIBQQhA8iFEQAAAAAAAAAAGRFIAYrAwggBisDGCAFKwMIIAUrAxgQhA8iFUQAAAAAAAAAAGRFcg0BAkAgFCAVYwRAIAYrAxAiFCAGKwMAIhahIAUrAxAiFSAFKwMAIhehZARAIBQgFWNFBEAgBiAVOQMADAMLIAYgFzkDEAwCCyAUIBVjBEAgBSAUOQMADAILIAUgFjkDEAwBCyAGKwMYIhQgBisDCCIWoSAFKwMYIhUgBSsDCCIXoWQEQCAUIBVjBEAgBiAXOQMYDAILIAYgFTkDCAwBCyAUIBVjBEAgBSAUOQMIDAELIAUgFjkDGAsMAQsLIAgrAxAhFAJAAkAgACsDACIWIAgrAwAiF2MEQCAIKwMIIRUMAQsgCCsDCCEVIBQgFmMNACAAKwMIIhggFWMNACAYIAgrAxhkRQ0BCyAAIBYgFxAjIBQQKTkDACAIKwMYIRQgACAAKwMIIBUQIyAUECk5AwgLIAggCkEFdGoiA0EYaysDACEUAkAgACsDKCIVIANBIGsrAwAiF2MgFSADQRBrKwMAIhhkciAAKwMwIhYgFGNyRQRAIBYgA0EIaysDAGRFDQELIAAgFSAXECMgGBApOQMoIANBCGsrAwAhFSAAIBYgFBAjIBUQKTkDMAtBACEGIAxBA3RBEBAaIQsgDEECSQ0BIAgrAwggCCsDKGRFDQEDQCAGIAxGBEBBASEGDAMFIAggBkEFdGoiAysDGCEUIAMgAysDCJo5AxggAyAUmjkDCCAGQQFqIQYMAQsACwALQf6yBEEAEDcMAQsgDiAOQTBqIhEgDigCAEEDcSIDQQNGGygCKCAOIA5BMGsiECADQQJGGygCKEcEQCALQRhqIRIgCEEYayETQQAhCkEAIQUDQAJAIAwgBSIDRgRAIAhBOGshCSAMIQMMAQtBACENQQAhCSASIApBBHRqAn8gAwRAQX9BASAIIANBBXQiB2orAwggByATaisDAGQbIQkLIAwgA0EBaiIFSwRAQQFBfyAIIAVBBXRqKwMIIAggA0EFdGorAwhkGyENCwJAIAkgDUcEQCAIIANBBXRqIQMgDUF/RyAJQQFHcQ0BIAsgCkEEdGoiByADKwMAIhQ5AwAgAysDGCEVIAcgFDkDECAHIBU5AwggA0EIagwCCwJAAkAgCUEBag4CBQABCyALIApBBHRqIgcgCCADQQV0aiIDKwMAIhQ5AwAgAysDGCEVIAcgFDkDECAHIBU5AwggA0EIagwCCyALEBggBEH6AjYCyAEgBCAJNgLEASAEIAk2AsABQejEBCAEQcABahA3QQAhBgwFCyALIApBBHRqIgcgAysDECIUOQMAIAMrAwghFSAHIBQ5AxAgByAVOQMIIANBGGoLKwMAOQMAIApBAmohCgwBCwsDQAJ/AkAgAwRAIANBAWshB0EAIQ1BACEFIAMgDEkEQEF/QQEgCCAHQQV0aisDCCAIIANBBXRqKwMIZBshBQsgBwRAQQFBfyAJIANBBXRqKwMAIAggB0EFdGorAwhkGyENCyAFIA1HBEAgCCAHQQV0aiEDIA1Bf0cgBUEBR3FFBEAgCyAKQQR0aiIFIAMrAwAiFDkDACADKwMYIRUgBSAUOQMQIAUgFTkDCCAFIAMrAwg5AxgMAwsgCyAKQQR0aiIFIAMrAxAiFDkDACADKwMIIRUgBSAUOQMQIAUgFTkDCCAFIAMrAxg5AxgMAgsCQAJAAkAgBUEBag4CAAECCyALIApBBHRqIgMgCCAHQQV0aiIFKwMQIhQ5AwAgBSsDCCEVIAMgFDkDECADIBU5AwggAyAFKwMYIhQ5AxggAyAFKwMAIhU5AzAgAyAUOQMoIAMgFTkDICADIAUrAwg5AzggCkEEagwECyALIApBBHRqIgMgCCAHQQV0aiIFKwMQIhQ5AwAgBSsDCCEVIAMgFDkDECADIBU5AwggAyAFKwMYOQMYDAILIAsQGCAEQZwDNgK4ASAEIAU2ArQBIAQgBTYCsAFB6MQEIARBsAFqEDdBACEGDAULAkAgBkUNAEEAIQMDQCADIAxGBEBBACEDA0AgAyAKRg0DIAsgA0EEdGoiByAHKwMImjkDCCADQQFqIQMMAAsABSAIIANBBXRqIgcrAxghFCAHIAcrAwiaOQMYIAcgFJo5AwggA0EBaiEDDAELAAsAC0EAIQMDQCADIAxGBEACQCAEIAo2AswCIAQgCzYCyAIgBCAAKwMAOQOQAiAEIAArAwg5A5gCIAQgACsDKDkDoAIgBCAAKwMwOQOoAkEAIQYgBEHIAmogBEGQAmogBEHAAmoQjA9BAEgEQCALEBhBxb4EQQAQNwwICyACBEAgBCAEKQLAAjcDqAEgBEGoAWogBEG4AmoQjgQMAQsgBCgCzAJBIBAaIQIgBCgCzAIhB0EAIQMDQCADIAdGBEAgBEIANwOIAiAEQgA3A4ACIARCADcD+AEgBEIANwPwASAALQAdBEAgBCAAKwMQIhQQVzkD+AEgBCAUEEo5A/ABCyAALQBFQQFGBEAgBCAAKwM4IhQQV5o5A4gCIAQgFBBKmjkDgAILIAQgBCkCwAI3A6ABIAIgByAEQaABaiAEQfABaiAEQbgCahCwCCACEBhBACEGQQBODQIgCxAYQey+BEEAEDcMCQUgAiADQQV0aiIFIAsgA0EEdGoiBikDADcDACAFIAYpAwg3AwggBSALIANBAWoiA0EAIAMgB0cbQQR0aiIGKQMANwMQIAUgBikDCDcDGAwBCwALAAsFIAggA0EFdGoiB0L/////////dzcDECAHQv/////////3/wA3AwAgA0EBaiEDDAELCwJAAkACQCAEKAK8AiIJQRAQTiIGBEBBACEDIAQoArgCIQADQCADIAlGBEBBACEDIAlBAEchBQJAAkADQCADIAlGDQEgA0EEdCEAIANBAWohAyAGKwMIIAAgBmorAwihmUQtQxzr4jYaP2RFDQALQQAhBQwBCyAJRQ0AQezaCi0AAEUNACAPENUBIAQQ1gE3A/ABIARB8AFqEOsBIgAoAhQhAiAAKAIQIQMgACgCDCEHIAAoAgghBSAAKAIEIQkgBCAAKAIANgKcASAEIAk2ApgBIAQgBTYClAEgBCAHNgKQASAEQYgENgKEASAEQde7ATYCgAFBASEFIAQgA0EBajYCjAEgBCACQewOajYCiAEgD0HGygMgBEGAAWoQIBogBiAEKAK8AkEEdGoiAEEIaysDACEUIAYrAwghFSAGKwMAIRYgBCAAQRBrKwMAOQNwIAQgFDkDeCAEIBY5A2AgBCAVOQNoIA9B4a4BIARB4ABqEDNBCiAPEKcBGiAPENQBIAQoArwCIQkLQQAhAyAJQQBHIQ0CQANAIAMgCUYNASADQQR0IQAgA0EBaiEDIAYrAwAgACAGaisDAKGZRC1DHOviNho/ZEUNAAtBACENDAQLIAlFDQNB7NoKLQAARQ0DIA8Q1QEgBBDWATcD8AEgBEHwAWoQ6wEiACgCFCECIAAoAhAhAyAAKAIMIQcgACgCCCEFIAAoAgQhCSAEIAAoAgA2AlwgBCAJNgJYIAQgBTYCVCAEIAc2AlAgBEGWBDYCRCAEQde7ATYCQCAEIANBAWo2AkwgBCACQewOajYCSCAPQcbKAyAEQUBrECAaIAYgBCgCvAJBBHRqIgBBCGsrAwAhFCAGKwMIIRUgBisDACEWIAQgAEEQaysDADkDMCAEIBQ5AzggBCAWOQMgIAQgFTkDKCAPQbKvASAEQSBqEDNBCiAPEKcBGiAPENQBDAQFIAYgA0EEdCICaiIHIAAgAmoiAikDADcDACAHIAIpAwg3AwggA0EBaiEDDAELAAsACyALEBhBACEGQc3mA0EAEDcMBwtBASEDIAUgDXJBAUcNAQtBACEDQQAhCQNAIAkgDEYNASAIIAlBBXRqIgAgBisDACIUOQMQIAAgFDkDACAJQQFqIQkMAAsAC0QAAAAAAAAkQCEUQQAhCgNAIANBAXFFIApBDktyRQRAIAggDCAGIAQoArwCIBQQgw9BACEDA0ACQAJAIAMgDEYEQCAMIQMMAQsgCCADQQV0aiIAKQMAQv/////////3/wBSBEAgACkDEEL/////////d1INAgsgFCAUoCEUCyAKQQFqIQogAyAMRyEDDAMLIANBAWohAwwACwALCyADQQFxBEAgDiARIA4oAgBBA3FBA0YbKAIoECEhACAEIA4gECAOKAIAQQNxQQJGGygCKBAhNgIUIAQgADYCEEHp4QQgBEEQahAqIAQgBCkCwAI3AwggBEEIaiAEQfABahCOBCAIIAwgBCgC8AEgBCgC9AFEAAAAAAAAJEAQgw8LIAEgBCgCvAI2AgAgCxAYDAQLIApBAmoLIQogByEDDAALAAsgCxAYIAQgDiAQIA4oAgBBA3FBAkYbKAIoECE2AgBBmPEDIAQQN0EAIQYLIARB0AJqJAAgBgurAwEDfyMAQeAAayIFJAAgBSAAKwMAOQMwIAUgACsDCDkDOCAFIAErAwA5A0AgBSABKwMIOQNIQQAhAQJAIAIgBUEwaiAFQdgAahCMD0EASA0AAkAgBARAIAUgBSkCWDcDCCAFQQhqIAVB0ABqEI4EDAELIAIoAgRBIBAaIQEgAigCACEGIAIoAgQhAkEAIQADQCAAIAJGBEAgBUIANwMoIAVCADcDICAFQgA3AxggBUIANwMQIAUgBSkCWDcDACABIAIgBSAFQRBqIAVB0ABqELAIIAEQGEEATg0CQQAhAQwDBSABIABBBXRqIgQgBiAAQQR0aiIHKQMANwMAIAQgBykDCDcDCCAEIAYgAEEBaiIAQQAgACACRxtBBHRqIgcpAwA3AxAgBCAHKQMINwMYDAELAAsACyAFKAJUIgJBEBBOIgEEQEEAIQAgBSgCUCEEA0AgACACRgRAIAMgAjYCAAwDBSABIABBBHQiBmoiByAEIAZqIgYpAwA3AwAgByAGKQMINwMIIABBAWohAAwBCwALAAtBACEBQc3mA0EAEDcLIAVB4ABqJAAgAQtMAgJ/AXxBASECA0AgASACRkUEQCAEIAAgAkEEdGoiAysDACADQRBrKwMAoSADKwMIIANBCGsrAwChEEegIQQgAkEBaiECDAELCyAEC+0CAQJ/IwBBEGsiAyQAQbD9CkF/NgIAQaz9CiAANgIAQaj9CiACNgIAQaT9CkF/NgIAQaD9CiACNgIAQZz9CiABNgIAQZj9CkF/NgIAQZT9CiABNgIAQZD9CiAANgIAQYz9CkEANgIAAn9BACECAkACQAJAQYD9CigCACIBQYT9CigCACIARw0AAkAgAUEASARAIAEhAAwBC0H4/AogAUEBdEEBIAEbQSgQjAdBhP0KKAIAIQBFDQELIABBf0YNAUH4/AogAEEBakEoEIwHDQFBhP0KKAIAIQALQYD9CigCACIBIABPDQFB+PwKQfz8CigCACABaiAAcEEoEN8BQYz9CkEoEB8aQQEhAkGA/QpBgP0KKAIAQQFqNgIACyACDAELQZoMQYm4AUHDAUGxxQEQAAALRQRAIANBuS02AgggA0HgAjYCBCADQZC4ATYCAEGI9ggoAgBBsoEEIAMQIBpBfyEECyADQRBqJAAgBAvbAgEGfyMAQeAAayICJAAgACgCCCEEAkADQCAEIgMgACgCECIFSQRAIAAoAgAiByADQQJ0aigCACgCACEFIAEoAgAhBiACIAcgA0EBaiIEQQJ0aigCACgCACIHKQMINwMoIAIgBykDADcDICACIAUpAwg3AxggAiAFKQMANwMQIAIgBikDCDcDCCACIAYpAwA3AwAgAkEgaiACQRBqIAIQgARBAUcNAQwCCwsgACgCDCEEIAUhAwN/IAMgBE8NASAAKAIAIARBAnRqIgYoAgAoAgAhAyABKAIAIQUgAiAGQQRrKAIAKAIAIgYpAwg3A1ggAiAGKQMANwNQIAIgAykDCDcDSCACIAMpAwA3A0AgAiAFKQMINwM4IAIgBSkDADcDMCACQdAAaiACQUBrIAJBMGoQgARBAkYEfyAEBSAEQQFrIQQgACgCECEDDAELCyEDCyACQeAAaiQAIAMLrQIBBX8jAEFAaiICJAAgAkGA/QopAgA3AzggAkH4/AopAgA3AzACf0EAQfj8CigCACACQTBqIAAQGUEobGooAgANABogAkGA/QopAgA3AyggAkH4/AopAgA3AyBB+PwKKAIAIAJBIGogABAZQShsakEBNgIAQQEgACABRg0AGgNAAkAgAkGA/QopAgA3AxggAkH4/AopAgA3AxBB+PwKKAIAIQUgAkEQaiAAEBkhBiADQQNGDQACQCADQQxsIgQgBSAGQShsamooAgxBf0YNACACQYD9CikCADcDCCACQfj8CikCADcDAEH4/AooAgAgAiAAEBlBKGxqIARqKAIMIAEQig9FDQBBAQwDCyADQQFqIQMMAQsLIAUgBkEobGpBADYCAEEACyACQUBrJAAL+gEBBX8jAEHQAGsiAiQAA0AgA0EDRkUEQCACQYD9CikCADcDSCACQfj8CikCADcDQCADQQxsIgVB+PwKKAIAIAJBQGsgABAZQShsamooAgQoAgAhBiACQYD9CikCADcDOCACQfj8CikCADcDMEH4/AooAgAgAkEwaiAAEBlBKGxqIAVqKAIIKAIAIQUgAiAGKQMINwMoIAIgBikDADcDICACIAUpAwg3AxggAiAFKQMANwMQIAIgASkDCDcDCCACIAEpAwA3AwAgA0EBaiEDIAQgAkEgaiACQRBqIAIQgARBAkdqIQQMAQsLIAJB0ABqJAAgBEUgBEEDRnIL3iMCEn8NfCMAQdADayIDJAACQAJAIAAoAgQiBkEIEE4iDiAGRXJFBEAgA0HqLDYCCCADQd8ANgIEIANBkLgBNgIAQYj2CCgCAEGygQQgAxAgGgwBCwJAIAZBBBBOIgkgBkVyRQRAIANBmCo2AhggA0HkADYCFCADQZC4ATYCEEGI9ggoAgBBsoEEIANBEGoQIBoMAQsCQAJAAkADQEGA/QooAgAgBE0EQAJAQfj8CkEoEDFBACEEIANBADYCvAMgAyAAKAIEIgVBAXQiBjYCsAMgAyAGQQQQTiILNgKsAyALDQAgA0HTLDYCaCADQe4ANgJkIANBkLgBNgJgQYj2CCgCAEGygQQgA0HgAGoQIBoMAwsFIANBgP0KKQIANwNYIANB+PwKKQIANwNQIANB0ABqIAQQGSEGAkACQAJAQYj9CigCACIIDgICAAELQbCDBEHCAEEBQYj2CCgCABA6GhA7AAsgA0EoaiIHQfj8CigCACAGQShsakEoEB8aIAcgCBEBAAsgBEEBaiEEDAELCyADIAVB/////wdxIhE2ArQDQX8hBiADIBFBAWsiDzYCuANEAAAAAAAA8H8hFQNAIAQgBUcEQCAAKAIAIARBBHRqKwMAIhcgFSAVIBdkIggbIRUgBCAGIAgbIQYgBEEBaiEEDAELCyADIAAoAgAiBCAGQQR0aiIIKQMINwOgAyADIAgpAwA3A5gDIAMgBCAGIAUgBhtBBHRqQRBrIggpAwg3A5ADIAMgCCkDADcDiAMgBCAGQQFqIAVwQQR0aiEEAkACQAJAIAMrA5gDIhUgAysDiANiDQAgFSAEKwMAYg0AIAQrAwggAysDoANkDQELIAMgAykDkAM3A4ADIAMgAykDoAM3A/ACIAMgAykDmAM3A+gCIAMgAykDiAM3A/gCIAMgBCkDCDcD4AIgAyAEKQMANwPYAiADQfgCaiADQegCaiADQdgCahCABCAAKAIEIQVBAUcNAEEAIQdBACEEA0AgBCAFRg0CIAAoAgAhCAJAAkAgBEUNACAIIARBBHRqIgYrAwAgBkEQaysDAGINACAGKwMIIAZBCGsrAwBhDQELIA4gB0EDdGoiBiAIIARBBHRqNgIAIAYgDiAHIAVwQQN0ajYCBCAJIAdBAnRqIAY2AgAgB0EBaiEHCyAEQQFqIQQMAAsACyAFQQFrIQpBACEHIAUhBgNAIAYhBANAIARFDQIgACgCACEIAkAgBEEBayIGIApPDQAgCCAGQQR0aiIMKwMAIAggBEEEdGoiDSsDAGINACAGIQQgDCsDCCANKwMIYQ0BCwsgDiAHQQN0aiIEIAggBkEEdGo2AgAgBCAOIAcgBXBBA3RqNgIEIAkgB0ECdGogBDYCACAHQQFqIQcMAAsACyMAQRBrIgwkAAJ/AkACQAJAA0ACQEEAIQAgB0EESQ0AA0AgACIEIAdGDQMgBEEBaiEAIARBAmogB3AhCkEAIQ0jAEGAAmsiBSQAIAVB8AFqIAkgBCAHakEBayAHcCIIEMEBIAVB4AFqIAkgBBDBASAFQdABaiAJIAAgB3AiBhDBAQJAAkAgBSsD+AEgBSsD6AEiFaEgBSsD0AEgBSsD4AEiF6GiIAUrA9gBIBWhIAUrA/ABIBehoqFEAAAAAAAAAABjBEAgBUHAAWogCSAEEMEBIAVBsAFqIAkgChDBASAFQaABaiAJIAgQwQEgBSsDyAEgBSsDuAEiFaEgBSsDoAEgBSsDsAEiF6GiIAUrA6gBIBWhIAUrA8ABIBehoqFEAAAAAAAAAABjRQ0CIAVBkAFqIAkgChDBASAFQYABaiAJIAQQwQEgBUHwAGogCSAGEMEBIAUrA5gBIAUrA4gBIhWhIAUrA3AgBSsDgAEiF6GiIAUrA3ggFaEgBSsDkAEgF6GioUQAAAAAAAAAAGNFDQIMAQsgBUHgAGogCSAEEMEBIAVB0ABqIAkgChDBASAFQUBrIAkgBhDBASAFKwNoIAUrA1giFaEgBSsDQCAFKwNQIhehoiAFKwNIIBWhIAUrA2AgF6GioUQAAAAAAAAAAGRFDQELQQAhCANAIAgiBiAHRiINDQEgBkEBaiIIQQAgByAIRxsiECAKRiAGIApGciAEIAZGIAQgEEZycg0AIAVBMGogCSAEEMEBIAVBIGogCSAKEMEBIAVBEGogCSAGEMEBIAUgCSAQEMEBIAUrAzAiGiAFKwMgIhWhIhaaIRsCQAJAIAUrAzgiHCAFKwMoIhehIh4gBSsDECIfIBWhoiAFKwMYIiAgF6EgFqKhIhZEAAAAAAAAAABkIBZEAAAAAAAAAABjIgZyIhBFDQAgHiAFKwMAIhYgFaGiIAUrAwgiGCAXoSAboqAiGUQAAAAAAAAAAGQgGUQAAAAAAAAAAGMiEnJFDQAgICAYoSIZIBogFqGiIBwgGKEgHyAWoSIdoqEiIUQAAAAAAAAAAGQgIUQAAAAAAAAAAGMiE3JFDQAgGSAVIBahoiAXIBihIB2aoqAiFkQAAAAAAAAAAGQgFkQAAAAAAAAAAGMiFHINAQsgFyAcoSEWIBUgGqEhGAJAIBANACAfIBqhIhkgGKIgFiAgIByhIh2ioEQAAAAAAAAAAGZFDQAgGSAZoiAdIB2ioCAYIBiiIBYgFqKgZQ0DCwJAIB4gBSsDACIeIBWhoiAFKwMIIhkgF6EgG6KgIhtEAAAAAAAAAABkIBtEAAAAAAAAAABjcg0AIB4gGqEiGyAYoiAWIBkgHKEiHaKgRAAAAAAAAAAAZkUNACAbIBuiIB0gHaKgIBggGKIgFiAWoqBlDQMLIBkgIKEhFiAeIB+hIRgCQCAgIBmhIhsgGiAeoaIgHCAZoSAfIB6hIh2ioSIhRAAAAAAAAAAAZCAhRAAAAAAAAAAAY3INACAaIB+hIhogGKIgHCAgoSIcIBaioEQAAAAAAAAAAGZFDQAgGiAaoiAcIByioCAYIBiiIBYgFqKgZQ0DCyAbIBUgHqGiIBcgGaEgHZqioCIaRAAAAAAAAAAAZCAaRAAAAAAAAAAAY3INASAVIB+hIhUgGKIgFyAgoSIXIBaioEQAAAAAAAAAAGZFIBUgFaIgFyAXoqAgGCAYoiAWIBaioGVFcg0BDAILIBMgFHNFIAYgEkZyDQALCyAFQYACaiQAIA1FDQALIAkgBEECdGooAgAgCSAAQQAgACAHRxsiAEECdGooAgAgCSAKQQJ0aigCABCIDw0EIAAgB0EBayIHIAAgB0sbIQQDQCAAIARGDQIgCSAAQQJ0aiAJIABBAWoiAEECdGooAgA2AgAMAAsACwsgCSgCACAJKAIEIAkoAggQiA8NAgwBCyAMQdKtATYCCCAMQc0CNgIEIAxBkLgBNgIAQYj2CCgCAEGygQQgDBAgGgtBAAwBC0F/CyEAIAxBEGokAAJAIABFBEBBACEMQYD9CigCACEEQQAhCANAIAQgCE0EQANAIAQgDE0NBCAMIAEQiw9BgP0KKAIAIQQNBCAMQQFqIQwMAAsACyAIQQFqIgAhCgNAQQAhBiAEIApNBEAgACEIDAILA0BBACEEAkAgBkEDRwRAA0AgBEEDRg0CIANBgP0KKQIANwOIASADQfj8CikCADcDgAFB+PwKKAIAIQcgA0GAAWogCBAZIQUgA0GA/QopAgA3A3ggA0H4/AopAgA3A3BB+PwKKAIAIQ0gA0HwAGogChAZIRACQAJAAkAgByAFQShsaiAGQQxsaiIHKAIEKAIAIhIgDSAQQShsaiAEQQxsaiIFKAIEKAIAIhBHBEAgBSgCCCgCACENDAELIAUoAggoAgAiDSAHKAIIKAIARg0BCyANIBJHDQEgBygCCCgCACAQRw0BCyAHIAo2AgwgBSAINgIMCyAEQQFqIQQMAAsACyAKQQFqIQpBgP0KKAIAIQQMAgsgBkEBaiEGDAALAAsACwALIAsQGAwBCwJAIAQgDEcEQCABQRBqIQZBACEAA0AgACAETw0CIAAgBhCLD0GA/QooAgAhBA0CIABBAWohAAwACwALIANBsZsBNgKYASADQbYBNgKUASADQZC4ATYCkAFBiPYIKAIAQbKBBCADQZABahAgGgwDCyAAIARGBEAgA0GLmwE2AqgBIANBwQE2AqQBIANBkLgBNgKgAUGI9ggoAgBBsoEEIANBoAFqECAaDAMLIAwgABCKD0UEQCADQdP4ADYCyAIgA0HLATYCxAIgA0GQuAE2AsACQQAhBEGI9ggoAgBBsoEEIANBwAJqECAaIAsQGCAJEBggDhAYQQIQsggNBSACQQI2AgRBtP0KKAIAIgAgASkDADcDACAAIAEpAwg3AwggACAGKQMANwMQIAAgBikDCDcDGCACIAA2AgAMBgsgACAMRgRAIAsQGCAJEBggDhAYQQIQsggNBSACQQI2AgRBACEEQbT9CigCACIAIAEpAwA3AwAgACABKQMINwMIIAAgBikDADcDECAAIAYpAwg3AxggAiAANgIADAYLIANBADYCzAMgAyAGNgLIAyADQQA2AsQDIAMgATYCwAMgEUUEQCADIAsoAgA2AsQDCyADQcADaiIAQQhyIQggAyAPNgK0AyALIA9BAnRqIAA2AgAgAyAPNgK8AyAPIgchBSAMIQoDQCAKQX9HBEBBACEEIANBgP0KKQIANwO4AiADQfj8CikCADcDsAJB+PwKKAIAIANBsAJqIAoQGUEobGoiAEECNgIAIABBDGohEQJ/AkADQCAEQQNHBEAgESAEQQxsIgFqKAIAIg1Bf0cEQCADQYD9CikCADcDqAIgA0H4/AopAgA3A6ACQfj8CigCACADQaACaiANEBlBKGxqKAIAQQFGDQMLIARBAWohBAwBCwsgCyAHQQJ0aiIEKAIAKAIAIQAgCyAFQQJ0aigCACgCACEBIAMgBikDCDcD6AEgAyAGKQMANwPgASADIAEpAwg3A9gBIAMgASkDADcD0AEgAyAAKQMINwPIASADIAApAwA3A8ABIANB4AFqIANB0AFqIANBwAFqEIAEIQAgCCAEKAIAIgEgAEEBRiIAGyEEIAEgCCAAGwwBCyAAQQRqIg0gAWoiACgCBCgCACEBIA0gBEEBakEDcEEMbGooAgQoAgAhBCADIAAoAgAoAgAiDSkDCDcDmAIgAyANKQMANwOQAiADIAQpAwg3A4gCIAMgBCkDADcDgAIgAyABKQMINwP4ASADIAEpAwA3A/ABIANBkAJqIANBgAJqIANB8AFqEIAEQQFGBEAgACgCACEEIAAoAgQMAQsgACgCBCEEIAAoAgALIQACQCAKIAxGBEAgBSAHTQRAIAAgCyAHQQJ0aigCADYCBAsgAyAHQQFqIgc2ArgDIAsgB0ECdGogADYCACAFIAdNBEAgBCALIAVBAnRqKAIANgIECyADIAVBAWsiBTYCtAMgCyAFQQJ0aiAENgIADAELIAMCfwJAIAsgBUECdGooAgAgBEYNACALIAdBAnRqKAIAIARGDQAgA0GsA2ogBBCJDyIAIAdNBEAgBCALIABBAnRqKAIANgIECyADIABBAWsiBTYCtAMgCyAFQQJ0aiAENgIAIAAgDyAAIA9LGwwBCyAFIANBrANqIAAQiQ8iAU0EQCAAIAsgAUECdGooAgA2AgQLIAMgAUEBaiIHNgK4AyALIAdBAnRqIAA2AgAgASAPIAEgD0kbCyIPNgK8AwtBACEEA0AgBEEDRgRAQX8hCgwDCwJAIBEgBEEMbGoiACgCACIBQX9GDQAgA0GA/QopAgA3A7gBIANB+PwKKQIANwOwAUH4/AooAgAgA0GwAWogARAZQShsaigCAEEBRw0AIAAoAgAhCgwDCyAEQQFqIQQMAAsACwsgCxAYQQAhACAIIQQDQCAEBEAgAEEBaiEAIAQoAgQhBAwBCwsgABCyCEUNAQsgCRAYDAILIAIgADYCBEG0/QooAgAhAQNAIAgEQCABIABBAWsiAEEEdGoiBCAIKAIAIgYpAwA3AwAgBCAGKQMINwMIIAgoAgQhCAwBCwsgAiABNgIAIAkQGCAOEBhBACEEDAMLIAsQGCAJEBggDhAYQX8hBAwCCyAOEBgLQX4hBAsgA0HQA2okACAEC44EAgh/AX4jAEEwayICJAACQAJAIAAEQCABRQ0BIAAoAgRB5ABsIAAoAgAEf0EBIAAoAgh0BUEACyIFQcYAbEkNAkEBIAUEfyAAKAIIQQFqBUEKCyIDdEEEEBohBCACQgA3AxggAkIANwMoIAJCADcDICACIAM2AhggAkIANwMQIAIgBDYCEEEAIQMDQCAAKAIAIQQgAyAFRgRAIAQQGCAAIAIpAyg3AxggACACKQMgNwMQIAAgAikDGDcDCCAAIAIpAxA3AwAMBAsgBCADQQJ0aigCACIEQQFqQQJPBEAgAkEQaiAEEI0PCyADQQFqIQMMAAsAC0Gl1QFBjL4BQaMDQcCwARAAAAtBidUBQYy+AUGkA0HAsAEQAAALIAEoAhApAwghCgJAIAAtAAxBAUYEQCAKIAApAxBaDQELIAAgCjcDECAAQQE6AAwLIAApAxggClQEQCAAIAo3AxgLAkAgACgCACIEBEBBASAAKAIIdCIFIAAoAgQiBksNAQtBiogBQYy+AUHRA0HAsAEQAAALIAVBAWshByAKpyEIQQAhAwJAA0AgAyAFRwRAIAQgAyAIaiAHcUECdGoiCSgCAEEBakECSQ0CIANBAWohAwwBCwsgAkHgAzYCBCACQYy+ATYCAEGI9ggoAgBB2L8EIAIQIBoQOwALIAkgATYCACAAIAZBAWo2AgQgAkEwaiQAC3MBAX8gABAkIAAQS08EQCAAQQEQvQELIAAQJCEBAkAgABAoBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECRBEEkNAUGTtgNBoPwAQa8CQcSyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsLuAECA38BfCMAQTBrIgQkAANAIAIgBUYEQCADBEAgASsDACEHIAQgASsDCDkDCCAEIAc5AwAgAEHRpQMgBBAeCyAAQe7/BBAbGiAEQTBqJAAFAkAgBUUEQCABKwMAIQcgBCABKwMIOQMYIAQgBzkDECAAQaOlAyAEQRBqEB4MAQsgASAFQQR0aiIGKwMAIQcgBCAGKwMIOQMoIAQgBzkDICAAQdGlAyAEQSBqEB4LIAVBAWohBQwBCwsLigEBA38jAEEQayIEJAAgAEGPyQFBABAeIAFBACABQQBKGyEFQQAhAQNAIAEgBUcEQCABBEAgAEG6oANBABAeCyAEIAIgAUEEdGoiBisDADkDACAAQeDMAyAEEB4gBigCCCADIAAQuwIgAEH9ABBlIAFBAWohAQwBCwsgAEHAzQRBABAeIARBEGokAAu7AQECfwJAAkAgACgCMBC7AyAAKAIsEJoBRgRAIAAoAjAQuwMhAyAAEDkgAEYEfyABQRxqBUEkEFILIgIgATYCECAAKAIwIAIQjQ8gACgCLCIBIAJBASABKAIAEQMAGiAAKAIwELsDIAAoAiwQmgFHDQEgACgCMBC7AyADQQFqRw0CDwtBjqMDQYy+AUHiAEHJnwEQAAALQY6jA0GMvgFB6QBByZ8BEAAAC0GejgNBjL4BQeoAQcmfARAAAAsjACAAKAIAKAIAQQR2IgAgASgCACgCAEEEdiIBSyAAIAFJaws1ACAAIAFBACACEJUPIAAQeSEAA0AgAARAIAFBue0EEBsaIAAgASACEJMPIAAQeCEADAELCwucAgEFfyMAQSBrIgQkAAJAAkACQCAAEDkgAEYNACAAQbWnAUEAEGsgATYCCCAAECEiA0UNASABQQFqIQEgA0HiN0EHEOoBDQAgABAhIQMgAEG1pwFBABBrKAIIIQYgAiADQYAEIAIoAgARAwAiBQRAIAUoAgwgBkYNASAEIAM2AhBB0fsEIARBEGoQKgwBC0EBQRAQgAYhBSADEKUBIgdFDQIgBSAGNgIMIAUgBzYCCCACIAVBASACKAIAEQMAGgsgABB5IQADQCAABEAgACABIAIQlA8hASAAEHghAAwBCwsgBEEgaiQAIAEPC0GI1AFB6/sAQQxBnvcAEAAACyAEIAMQQEEBajYCAEGI9ggoAgBB9ekDIAQQIBoQLwAL0A4BCH8jAEGwAWsiBiQAIAIEQEHkuQpBlO4JKAIAEJMBIQogAEEBQbWnAUEMQQAQswIgAEECQbWnAUEMQQAQswIgAEEAQbWnAUF0QQAQswIgAEEAIAoQlA8hCyAAEBwhCANAIAgEQAJAIAgoAhAtAIYBQQFGBEAgCiAIECFBgAQgCigCABEDACIFRQRAQX8hBAwCCyAFKAIMIQQMAQsgCSALaiEEIAlBAWohCQsgCEG1pwFBABBrIAQ2AgggACAIECwhBANAIAQEQCAEQbWnAUEAEGsgBzYCCCAHQQFqIQcgACAEEDAhBAwBCwsgACAIEB0hCAwBCwsgChCZARoLIAMgAygCACIFQQFqNgIAIAEgBRBEIAFB8NgDEBsaIAAQISABIAMoAgAQRCABQfrMAxAbGiADIAEQuwICQCACBEAgAUG57QQQGxogASADKAIAEEQgBkG+igFB+pMBIAAQggIbNgKQASABQarqBCAGQZABahAeIAEgAygCABBEIAZBvooBQfqTASAAENwFGzYCgAEgAUGlNCAGQYABahAeIAAgASADEIEGIAFBue0EEBsaIAEgAygCABBEIAYgCzYCcCABQZmyASAGQfAAahAeDAELIAAgASADEIEGIAFBue0EEBsaIAEgAygCABBEIAYgAEG1pwFBABBrKAIINgKgASABQa2yASAGQaABahAeCwJAIAAQeSIFRQ0AIAFBue0EEBsaIAMgAygCACIEQQFqNgIAIAEgBBBEAkAgAgRAIAFBy80EEBsaDAELIAFB2c0EEBsaIAEgAygCABBEC0Hx/wQhByAFIQQDQCAEBEAgASAHEBsaAkAgAgRAIAQgASADEJMPDAELIAYgBEG1pwFBABBrKAIINgJgIAFBwbIBIAZB4ABqEB4LQbntBCEHIAQQeCEEDAELCyACDQAgAyADKAIAQQFrNgIAIAFB7v8EEBsaIAEgAygCABBEIAFB/sgBEBsaCyAAEBwhBAJAAkACQANAIAQEQCAEKAIQLQCGAUEBRw0CIAAgBBAdIQQMAQsLIAJFIAVFcg0CDAELIAFBue0EEBsaAkAgAgRAIAUNASADIAMoAgAiBUEBajYCACABIAUQRCABQcvNBBAbGgwBCyADIAMoAgAiBUEBajYCACABIAUQRCABQfXNBBAbGiABIAMoAgAQRAtB8f8EIQcgABAcIQQDQCAERQ0BAkAgBCgCEC0AhgENACABIAcQGxogAgRAIAMgAygCACIFQQFqNgIAIAEgBRBEIAFB8NgDEBsaIAEgAygCABBEIAYgBEG1pwFBABBrKAIINgJAIAFB6eoEIAZBQGsQHiABIAMoAgAQRCABQfrMAxAbGiAEECEgAyABELsCIAQgASADEIEGIAFB7v8EEBsaIAMgAygCAEEBayIFNgIAIAEgBRBEIAFBrwgQGxpBue0EIQcMAQsgBiAEQbWnAUEAEGsoAgg2AlAgAUHBsgEgBkHQAGoQHkG6oAMhBwsgACAEEB0hBAwACwALIAMgAygCAEEBazYCACABQe7/BBAbGiABIAMoAgAQRCABQf7IARAbGgtBACEHIAAQHCEIA0ACQCAIRQRAIAdFDQFBACEIIAdBBBCABiEJIAAQHCEFA0AgBUUEQCAJIAdBBEHoAhC1ASABQbntBBAbGiADIAMoAgAiAEEBajYCACABIAAQRCABQenNBBAbGiACRQRAIAEgAygCABBEC0EAIQQDQCAEIAdGBEAgCRAYIAMgAygCAEEBazYCACABQe7/BBAbGiABIAMoAgAQRCABQf7IARAbGgwFBQJAIAYCfwJAAkAgBARAIAkgBEECdGohACACRQ0CIAFBue0EEBsaIAAoAgAhAAwBCyAJKAIAIgAgAkUNAhoLIAMgAygCACIFQQFqNgIAIAEgBRBEIAFB8NgDEBsaIAEgAygCABBEIAYgAEG1pwFBABBrKAIINgIgIAFB6eoEIAZBIGoQHiABIAMoAgAQRCAGIABBMEEAIAAoAgBBA3FBA0cbaigCKEG1pwFBABBrKAIINgIQIAFB3OoEIAZBEGoQHiABIAMoAgAQRCAGIABBUEEAIAAoAgBBA3FBAkcbaigCKEG1pwFBABBrKAIINgIAIAFBubIBIAYQHiAAIAEgAxCBBiABQe7/BBAbGiADIAMoAgBBAWsiADYCACABIAAQRCABQa8IEBsaDAILIAFBuqADEBsaIAAoAgALQbWnAUEAEGsoAgg2AjAgAUHBsgEgBkEwahAeCyAEQQFqIQQMAQsACwALIAAgBRAsIQQDQCAEBEAgCSAIQQJ0aiAENgIAIAhBAWohCCAAIAQQMCEEDAEFIAAgBRAdIQUMAgsACwALAAsgACAIECwhBANAIAQEQCAHQQFqIQcgACAEEDAhBAwBBSAAIAgQHSEIDAMLAAsACwsgAUHu/wQQGxogAyADKAIAQQFrIgA2AgAgASAAEEQgAUGW2ANBrwggAhsQGxogBkGwAWokAAuDAQEBfyAAIAAoAgBBd3E2AgAgABB5IQIDQCACBEAgAkEAEJYPIAIQeCECDAELCwJAIAFFDQAgABAcIQEDQCABRQ0BIAEgASgCAEF3cTYCACAAIAEQLCECA0AgAgRAIAIgAigCAEF3cTYCACAAIAIQMCECDAELCyAAIAEQHSEBDAALAAsLvwEBA38jAEEgayICJAACQAJAAkACQAJAIAEoAiBBAWsOBAECAgACCyABKAIAIgFBicEIEE0NAiAAQfzACBAbGgwDCyABLQADRQRAIABB/MAIEBsaDAMLIAEtAAAhAyABLQABIQQgAiABLQACNgIYIAIgBDYCFCACIAM2AhAgAEGdEyACQRBqEB4MAgsgAkGIATYCBCACQb68ATYCAEGI9ggoAgBB2L8EIAIQIBoQOwALIAAgARAbGgsgAkEgaiQAC+sDAQd/IwBBIGsiAyQAAkAgAARAAkACQAJAIAFBAWoOAgEAAgtB2NQBQaK6AUGlAUHNsAEQAAALQZjbAUGiugFBpgFBzbABEAAACyAAKAIEQeQAbCAAKAIAIgIEf0EBIAAoAgh0BUEACyIFQcYAbEkNAUEBIAUEfyAAKAIIQQFqBUEKCyICdEEEEBohBCADIAI2AhxBACECIANBADYCGCADIAQ2AhQDQCAAKAIAIQQgAiAFRgRAIAQQGCAAIAMoAhw2AgggACADKQIUNwIAIAAoAgAhAgwDCyAEIAJBAnRqKAIAIgRBAWpBAk8EQCADQRRqIAQQmA8LIAJBAWohAgwACwALQe/TAUGiugFBpAFBzbABEAAACwJAIAIEQEEBIAAoAgh0IgUgACgCBE0NASAFQQFrIQQgAUEIaiABKQMAQj+IpxC+BiEGIAAoAgAhB0EAIQICQANAIAIgBUcEQCAHIAIgBmogBHFBAnRqIggoAgBBAWpBAkkNAiACQQFqIQIMAQsLIANB2gE2AgQgA0GiugE2AgBBiPYIKAIAQdi/BCADECAaEDsACyAIIAE2AgAgACAAKAIEQQFqNgIEIANBIGokAA8LQfzTAUGiugFByAFBzbABEAAAC0H0hwFBoroBQcoBQc2wARAAAAubAQEBfwJAAkACQCACQQJrDgIAAQILIAAgAUECEIQGIQMMAQsgABC1CCEDCyAAQfqSARAbGiAAIAIgAxCDBiAAQcbDAxAbGiAAIAErAwAQeyAAQbLDAxAbGiAAIAErAwiaEHsgAEG/wwMQGxogACABKwMQIAErAwChEHsgAEGDwwMQGxogACABKwMYIAErAwihEHsgAEHM1AQQGxoL/gcCBn8BfCMAQdABayIDJAAgACgCECEGIABB5roDEBsaIABBm7ADQfjBA0H3vAMgAi0AMCIEQfIARhsgBEHsAEYbEBsaIAIrAxggASsDCKAhCSAGLQCNAkECcUUEQCAAQczDAxAbGiAAIAErAwAQeyAAQbnDAxAbGiAAIAmaEHsgAEGPxwMQGxoLAn8CQCACKAIEIgQoAggiAQRAQRAhB0EIIQUgASEEAkACQAJAIAAoAgAoAqABKAIQKAL0AUEBaw4CAgABCyABQRhqIQRBICEHQRwhBQwBCyABQQRqIQQLIAEgBWooAgAhBSABIAdqKAIAIQcgASgCDCEIIAMgBCgCACIENgLAASAAQbMzIANBwAFqEB4gASgCGCIBRSABIARGckUEQCADIAE2ArABIABBrzMgA0GwAWoQHgsgAEEiEGUgBQRAIAMgBTYCoAEgAEGotQMgA0GgAWoQHgsgCARAIAMgCDYCkAEgAEHFtQMgA0GQAWoQHgsgB0UNASADIAc2AoABIABB2LUDIANBgAFqEB5BAQwCCyADIAQoAgA2AnAgAEGWtQMgA0HwAGoQHgtBAAshBAJAIAIoAgQoAhgiAUH/AHFFDQAgAUEBcUUgBXJFBEAgAEGLwgMQGxoLIAQgAUECcUVyRQRAIABBn8IDEBsaCyABQeQAcQRAIABB78MDEBsaQQAhBSABQQRxIgQEQCAAQaOXARAbGkEBIQULIAFBwABxBEAgA0G6oANB8f8EIAQbNgJgIABBmJcBIANB4ABqEB5BASEFCyABQSBxBEAgA0G6oANB8f8EIAUbNgJQIABBofoAIANB0ABqEB4LIABBIhBlCyABQQhxBEAgAEH7tQMQGxoLIAFBEHFFDQAgAEG0wgMQGxoLIAMgAigCBCsDEDkDQCAAQcG6AyADQUBrEB4CQAJAAkACQCAGKAIwQQFrDgQBAwMAAwsgBigCECIBQfDACBAuRQ0BIAMgATYCECAAQbq1AyADQRBqEB4MAQsgBi0AECEBIAYtABEhBCADIAYtABI2AjggAyAENgI0IAMgATYCMCAAQe2tAyADQTBqEB4gBi0AEyIBQf8BRg0AIAMgAbhEAAAAAADgb0CjOQMgIABB07oDIANBIGoQHgsgAEE+EGUgBi0AjQJBAnEEQCAAQcKtAxAbGiAAIAYoAtwBEIoBIABBisMDEBsaIAAgCZoQeyAAQc3gARAbGgsgAigCACADQfjACCgCADYCDCADQQxqQdICIAAQngQgBi0AjQJBAnEEQCAAQYXfARAbGgsgAEGt0gQQGxogA0HQAWokAA8LIANBmAQ2AgQgA0G+vAE2AgBBiPYIKAIAQdi/BCADECAaEDsACwsAIABB/NIEEBsaC+YBAQF/IwBBEGsiBSQAIABB3IIBEBsaIAQEQCAAQePFARAbGiAAIAQQigEgAEEiEGULIABB28IBEBsaAkAgAUUNACABLQAARQ0AIABBocQDEBsaIAVBADYCCCAFQQA2AgwgASAFQQhqQdICIAAQngQgAEEiEGULAkAgAkUNACACLQAARQ0AIABB0MQDEBsaIAVB+MAIKAIANgIEIAIgBUEEakHSAiAAEJ4EIABBIhBlCwJAIANFDQAgAy0AAEUNACAAQdHDAxAbGiAAIAMQigEgAEEiEGULIABBl9YEEBsaIAVBEGokAAtIAQF/IAAgACgCECIBKALcAUEAQe+dASABKAIIEIIEIABBtN8BEBsaIABB6NoBIAEoAggQgQEiARCKASABEBggAEHP0wQQGxoLXgEDfyAAIAAoAhAiASgC3AEgACgCoAEiA0ECTgR/IAAoAgAoAqwCIANBAnRqKAIABUEAC0HonwEgASgCCBCCBCAAQbTfARAbGiAAIAEoAggQIRCKASAAQc/TBBAbGgs8AQF/IAAgACgCECIBKALcAUEAQeI3IAEoAggQggQgAEG03wEQGxogACABKAIIECEQigEgAEHP0wQQGxoL2gECAn8BfCMAQSBrIgEkACAAIAAoAhAiAigC3AFBAEGI+gAgAigCCBCCBCAAQbWsAxAbGiAAKwPoAyEDIAEgACsD8AM5AxggASADOQMQIABB/YIBIAFBEGoQHiABQQAgACgC6AJrNgIAIABBnawDIAEQHiAAIAArA/gDEHsgAEEgEGUgACAAKwOABJoQeyAAQdPVBBAbGgJAIAIoAggQIS0AAEUNACACKAIIECEtAABBJUYNACAAQbbfARAbGiAAIAIoAggQIRCKASAAQc/TBBAbGgsgAUEgaiQACx8AIAAgAUEAQbc3IAAoAhAoAggQggQgAEGX1gQQGxoLCwAgAEH00gQQGxoL0gECAn8BfiMAQTBrIgEkACAAKAIQIQIgAEG0oAMQGxoCQCACKAIIECEtAABFDQAgAigCCBAhLQAAQSVGDQAgAEHOzAMQGxogACACKAIIECEQigELIAEgACgCqAEgACgCpAFsNgIgIABB0dQEIAFBIGoQHiABIAApA8ADNwMQIABBwPgEIAFBEGoQHiAAKQPIAyEDIAEgACkD0AM3AwggASADNwMAIABB3MUDIAEQHiAAKAJAQQJHBEAgAEG0twMQGxoLIABBl9YEEBsaIAFBMGokAAusAQEBfyAAKAJAQQJHBEAgAEHu0wQQGxoCQCAAKAIAKAKgAUH2IhAnIgFFDQAgAS0AAEUNACAAQa/EAxAbGiAAIAEQGxogAEHZ0wQQGxoLIABB7tQEEBsaCyAAQbzHAxAbGiAAIAAoAgwoAgAoAgAQigEgAEHayAMQGxogACAAKAIMKAIAKAIEEIoBIABB0qwDEBsaIAAgACgCDCgCACgCCBCKASAAQeHUBBAbGguJAgEBfyMAQUBqIgUkAAJAIARFDQAgACgCECIEKwNQRAAAAAAAAOA/ZEUNACAAIARBOGoQlQIgAEGmywMQGxogACACIAMQiwIgAEG+zgMQGxogBSACKQMINwM4IAUgAikDADcDMCAAIAVBMGoQ6AEgBSABNgIkIAUgAzYCICAAQaj5AyAFQSBqEB4LIAAoAhArAyhEAAAAAAAA4D9kBEAgABCDBCAAIAAoAhBBEGoQlQIgAEGmywMQGxogACACIAMQiwIgAEG+zgMQGxogBSACKQMINwMYIAUgAikDADcDECAAIAVBEGoQ6AEgBSABNgIEIAUgAzYCACAAQcj5AyAFEB4LIAVBQGskAAsbACAAQaTNAxAbGiAAIAEQGxogAEHu/wQQGxoLxQEBA38jAEEgayIDJAAgACgCECsDKEQAAAAAAADgP2QEQCAAEIMEIAAgACgCEEEQahCVAiAAQZ/JAxAbGiADIAEpAwg3AxggAyABKQMANwMQIAAgA0EQahDoASAAQZmKBBAbGkEBIAIgAkEBTRshBEEBIQIDQCACIARGBEAgAEHvsQQQGxoFIAMgASACQQR0aiIFKQMINwMIIAMgBSkDADcDACAAIAMQ6AEgAEGrigQQGxogAkEBaiECDAELCwsgA0EgaiQAC7UCAQF/IwBBIGsiBCQAAkAgA0UNACAAKAIQIgMrA1BEAAAAAAAA4D9kRQ0AIAAgA0E4ahCVAiAAQZ/JAxAbGiAEIAEpAwg3AxggBCABKQMANwMQIAAgBEEQahDoASAAQZmKBBAbGkEBIQMDQCACIANNBEAgAEGZjgQQGxoFIAAgASADQQR0akEDEIsCIABB/okEEBsaIANBA2ohAwwBCwsLIAAoAhArAyhEAAAAAAAA4D9kBEAgABCDBCAAIAAoAhBBEGoQlQIgAEGfyQMQGxogBCABKQMINwMIIAQgASkDADcDACAAIAQQ6AEgAEGZigQQGxpBASEDA0AgAiADTQRAIABB77EEEBsaBSAAIAEgA0EEdGpBAxCLAiAAQf6JBBAbGiADQQNqIQMMAQsLCyAEQSBqJAAL+wIBA38jAEFAaiIEJAACQCADRQ0AIAAoAhAiAysDUEQAAAAAAADgP2RFDQAgACADQThqEJUCIABBn8kDEBsaIAQgASkDCDcDOCAEIAEpAwA3AzAgACAEQTBqEOgBIABBmYoEEBsaQQEgAiACQQFNGyEFQQEhAwNAIAMgBUYEQCAAQZmOBBAbGgUgBCABIANBBHRqIgYpAwg3AyggBCAGKQMANwMgIAAgBEEgahDoASAAQauKBBAbGiADQQFqIQMMAQsLCyAAKAIQKwMoRAAAAAAAAOA/ZARAIAAQgwQgACAAKAIQQRBqEJUCIABBn8kDEBsaIAQgASkDCDcDGCAEIAEpAwA3AxAgACAEQRBqEOgBIABBmYoEEBsaQQEgAiACQQFNGyECQQEhAwNAIAIgA0YEQCAAQc+xBBAbGgUgBCABIANBBHRqIgUpAwg3AwggBCAFKQMANwMAIAAgBBDoASAAQauKBBAbGiADQQFqIQMMAQsLCyAEQUBrJAALvAEBAX8jAEEgayIDJAAgAyABKQMANwMAIAMgASkDCDcDCCADIAErAxAgASsDAKE5AxAgAyABKwMYIAErAwihOQMYAkAgAkUNACAAKAIQIgErA1BEAAAAAAAA4D9kRQ0AIAAgAUE4ahCVAiAAIANBAhCLAiAAQamOBBAbGgsgACgCECsDKEQAAAAAAADgP2QEQCAAEIMEIAAgACgCEEEQahCVAiAAIANBAhCLAiAAQeGxBBAbGgsgA0EgaiQAC+4CAQR/IwBB0ABrIgMkACAAKAIQIgQrAyhEAAAAAAAA4D9jRQRAIAAgBEEQahCVAiAAIAIoAgQrAxAQeyACKAIEKAIAIgQQQEEeTwRAIAMgBDYCQEH55QMgA0FAaxAqCyAEIQUCQANAIAUtAAAiBkUNASAGQSBGIAbAQQBIciAGQSBJckUEQCAFQQFqIQUgBkH/AEcNAQsLIAMgBDYCMEGr5QMgA0EwahAqCyADIAIoAgQoAgA2AiAgAEGz4QMgA0EgahAeIAIoAgBBtPwKKAIAEM4GIQQgAi0AMCIFQewARwRAIAEgASsDAAJ8IAVB8gBGBEAgAisDIAwBCyACKwMgRAAAAAAAAOA/oguhOQMACyABIAIrAxggASsDCKA5AwggAyABKQMINwMYIAMgASkDADcDECAAIANBEGoQ6AEgAEHRyAMQGxogACACKwMgEHsgAyAENgIAIABBmt4DIAMQHiAEEBgLIANB0ABqJAALaAAjAEEQayICJAACQCABRQ0AIAAoAhAiAygCmAJFDQAgAEGeywMQGxogACADKAKYAkECEIsCIABBv80EEBsaIAIgAUG0/AooAgAQzgYiATYCACAAQdySBCACEB4gARAYCyACQRBqJAALNgEBfyMAQRBrIgEkACABIAAoAhAoAggQITYCACAAQZaDBCABEB4gAEHdrAQQGxogAUEQaiQAC2MBAX8jAEEQayIBJAAgACgCDCgCFARAIABB+IUEEBsaIABBACAAKAIMKAIUQQRqEM8GCyAAQd2vBBAbGiAAQZWJBBAbGiABIAAoAgwoAhw2AgAgAEHdxwQgARAeIAFBEGokAAuUBAMGfwF+A3wjAEGwAWsiASQAIAAoAtQDIQIgACgC0AMhAyAAKALMAyEFIAAoAsgDIQYgASAAKAIMKAIcQQFqIgQ2AqQBIAEgBDYCoAEgAEHpxgQgAUGgAWoQHiAAKAIMKAIURQRAIAEgAjYCnAEgASADNgKYASABIAU2ApQBIAEgBjYCkAEgAEGpxgQgAUGQAWoQHgsgAUGxlgFB5CAgACgC6AIbNgKAASAAQcP/AyABQYABahAeIAAoAkBBAUYEQCABIAI2AnQgASADNgJwIABBmrUEIAFB8ABqEB4LIAApAsQBIQcgASAAKALMATYCaCABIAc3A2AgAEGyswQgAUHgAGoQHiAAKAIMKAIURQRAIAEgBTYCVCABIAIgBWs2AlwgASAGNgJQIAEgAyAGazYCWCAAQYOUBCABQdAAahAeCyAAKwPoAyEIIAArA/ADIQkgACgC6AIhBCAAKwP4AyEKIAFBQGsgACsDgAQ5AwAgASAKOQM4IAEgBDYCMCABIAk5AyggASAIOQMgIABBoK4EIAFBIGoQHiAAKAJAQQFGBEAgAkHA8ABIIANBv/AATHFFBEAgACgCDCgCECEEIAFBwPAANgIYIAEgAjYCFCABIAM2AhBBmPYEIAFBEGogBBEEAAsgASACNgIMIAEgAzYCCCABIAU2AgQgASAGNgIAIABBs5IEIAEQHgsgAUGwAWokAAsqACMAQRBrIgEkACABIAM2AgQgASACNgIAIABB24YEIAEQHiABQRBqJAAL6AMCBX8BfiMAQTBrIgIkACAAKAIQIQNBsPwKQQA6AAACQCAAKAIMKAIcDQAgAiADKAIIECE2AiAgAEHygAQgAkEgahAeIABBxdwEQbn0BCAAKAJAQQJGGxAbGgJAIAAoAgwoAhQNACAAKAJAQQJHBEAgAEGh9AQQGxoMAQsgACkDyAMhBiACIAApA9ADNwMYIAIgBjcDECAAQcvGBCACQRBqEB4LIABB5KwEEBsaIAAgACgCDCgCGEHgrgoQzwYjAEEQayIEJAACQEGA3wooAgAiAUUNACABQQBBgAEgASgCABEDACEBA0AgAUUNASABLQAQRQRAIAQgASgCDDYCACAAQdbYAyAEEB4gAEH62AQQGxogACABEO0JIABBoeIDEBsaIABBn6QEEBsaC0GA3wooAgAiBSABQQggBSgCABEDACEBDAALAAsgBEEQaiQAIAAoAgwoAhQiAUUNACABKAIAIQEgAkEANgIsIAIgATYCKCAAQQAgAkEoahDPBgtBtPwKQQFBfyADKAIIKAIQLQBzQQFGGzYCAEGw/AotAABFBEAgAEGF3AQQGxpBsPwKQQE6AAALIAMoAtgBIgEEQCACIAFBtPwKKAIAEM4GIgE2AgAgAEH/kQQgAhAeIAEQGAsgAkEwaiQAC5EBAgF/AX4jAEEgayIBJAAgAEGkiQQQGxogACgCQEECRwRAIAEgACgCDCgCHDYCECAAQcHHBCABQRBqEB4LAkAgACgCDCgCFA0AIAAoAkBBAkYNACAAKQPYAyECIAEgACkD4AM3AwggASACNwMAIABBy8YEIAEQHgsgAEH4rwQQGxogAEHizwQQGxogAUEgaiQAC18CAn8BfiMAQRBrIgEkACAAQZmVAxAbGiAAQfXcBEHu/wQgACgCQEECRhsQGxogACgCDCgCACICKQIAIQMgASACKAIINgIIIAEgAzcDACAAQanvBCABEB4gAUEQaiQACyYAIAAgACgCECIAKAKQAiAAKAKYAiAAKAKUAiABIAIgAyAEEIYGC4kBAQF/IAAoAhAhAQJAAkACQCAAKAJAQQJrDgIAAQILIAAgASgCkAIgASgCmAIgASgClAIgASgC2AEgASgC7AEgASgC/AEgASgC3AEQhgYPCyAAIAEoApACIAEoApgCIAEoApQCIAEoAtgBIAEoAuwBIAEoAvwBIAEoAtwBEIYGIABB7NIEEBsaCwvPAQECfyAAKAIQIQECQCAAAn8CQAJAAkAgACgCQA4EAAEEAgQLIABBh4kEEBsaIAEoAtgBIgJFDQMgAi0AAEUNAyAAQaTIAxAbGkHu/wQhAiABKALYAQwCCyABKALYASICRQ0CIAItAABFDQIgAEGkyAMQGxogACABKALYARCKASAAQb7OAxAbGkHu/wQhAiABKAIIECEMAQsgAEGrxQMQGxogACABKAIIECEQigEgAEHHxAMQGxpBkdYEIQIgASgCCBAhCxCKASAAIAIQGxoLC2oCAX8CfkF/IQICQCAAKAIoKQMIIgMgASgCKCkDCCIEVA0AIAMgBFYEQEEBDwsCQCAALQAAQQNxRQ0AIAEtAABBA3FFDQAgACkDCCIDIAEpAwgiBFQNAUEBIQIgAyAEVg0BC0EAIQILIAILxAECA38BfCMAQdAAayIDJAAgACgCECIEKAKYASEFIAQrA6ABIQYgAyAEKAIQNgIYIANBADYCHCADQaDkCigCADYCICADQgA3AiQgA0EANgI4IANCADcCPCADQgA3AkQgAyACNgJMIAMgBhAyOQMQIANEAAAAAAAAJEBEAAAAAAAAAAAgBUEBa0ECSSIEGzkDMCADQoKAgIAQNwMAIAMgBUEAIAQbNgIIIABB1NwDIAMQHiAAIAEgAkEAELwIIANB0ABqJAAL/AYCDX8EfCMAQfABayIEJABBoOQKKAIAIQwgACgCECIHKAIQIQ0gBysDoAEgBEIANwOoASAEQgA3A6ABEDIhEiACQQNLBEBBfyEIIAcoApgBIgZBAWtBAkkhBUEEIQsgAwRAIAcoAjghCkEFIQtBFCEIC0QAAAAAAAAkQEQAAAAAAAAAACAFGyETIAZBACAFGyEOIAQgASsDACIUOQPgASABKwMIIREgBCAUOQOAASAEIBE5A+gBIAQgETkDiAEgBEGgAWogBEGAAWoQuwhBASEFQQAhAwNAAkACQCACIANBA2oiB00EQCAEIAU2AnQgBEEANgJwIARCADcDaCAEIBM5A2AgBCAINgJYIARBADYCVCAEIAw2AlAgBCAKNgJMIAQgDTYCSCAEQUBrIBI5AwAgBCAONgI4IAQgCzYCNCAEQQM2AjAgAEH6xQQgBEEwahAeAkAgBEGgAWoiARAoBEAgARAkQQ9GDQELIARBoAFqIgEQJCABEEtPBEAgAUEBEL0BCyAEQaABaiICECQhASACECgEQCABIAJqQQA6AAAgBCAELQCvAUEBajoArwEgAhAkQRBJDQFBk7YDQaD8AEGvAkHEsgEQAAALIAQoAqABIAFqQQA6AAAgBCAEKAKkAUEBajYCpAELAkAgBEGgAWoQKARAIARBADoArwEMAQsgBEEANgKkAQsgBEGgAWoiAhAoIQEgBCACIAQoAqABIAEbNgIgIABBq4MEIARBIGoQHiAELQCvAUH/AUYEQCAEKAKgARAYCyAFQQAgBUEAShshASAFQQFrIQJBACEDA0AgASADRg0CIAQgAyACb0EARzYCECAAQcCyASAEQRBqEB4gA0EBaiEDDAALAAsgBCAEKQPgATcDsAEgBCAEKQPoATcDuAEgASADQQR0aiEPQQEhA0EBIQYDQCAGQQRGRQRAIAZBBHQiCSAEQbABamoiECAJIA9qIgkrAwA5AwAgECAJKwMIOQMIIAZBAWohBgwBCwsDQCADQQdGDQIgBEGQAWogBEGwAWogA7hEAAAAAAAAGECjQQBBABChASAEIAQrA5ABOQMAIAQgBCsDmAE5AwggBEGgAWogBBC7CCADQQFqIQMMAAsACyAAQe7/BBAbGiAEQfABaiQADwsgBUEGaiEFIAchAwwACwALQfW1AkHSvAFBvwJBjzkQAAAL2gECBH8BfCMAQdAAayIEJAAgACgCECIFKAKYASEGIAUrA6ABIQggBSgCOCEHIAQgBSgCEDYCGCAEIAc2AhwgBEGg5AooAgA2AiAgBEEANgIkIARBFEF/IAMbNgIoIARBADYCOCAEQgA3AjwgBEIANwJEIAQgAkEBajYCTCAEIAgQMjkDECAERAAAAAAAACRARAAAAAAAAAAAIAZBAWtBAkkiAxs5AzAgBEKCgICAMDcDACAEIAZBACADGzYCCCAAQdTcAyAEEB4gACABIAJBARC8CCAEQdAAaiQAC6wCAgN/B3wjAEGQAWsiAyQAIAAoAhAiBCgCmAEhBSAEKwOgASEKIAErAxghBiABKwMQIQcgASsDCCEIIAErAwAhCSAEKAI4IQEgAyAEKAIQNgIYIAMgATYCHCADQaDkCigCADYCICADQQA2AiQgA0EUQX8gAhs2AiggA0EANgI4IANBQGtCADcDACADIAkQMiILOQNIIAMgCBAyIgw5A1AgAyALOQNoIAMgDDkDcCADIAcQMjkDeCADIAYQMjkDgAEgAyAKEDI5AxAgAyAHIAmhEDI5A1ggAyAGIAihEDI5A2AgA0QAAAAAAAAkQEQAAAAAAAAAACAFQQFrQQJJIgEbOQMwIANCgYCAgBA3AwAgAyAFQQAgARs2AgggAEGDpwQgAxAeIANBkAFqJAALxgMBC38jAEEwayIDJABBfyEFAkACQAJAAkACQAJAAkAgASgCIEEBaw4EAQICAAILIAEoAgAhAANAIAJBCEYNBSAARQ0GIAJBAnRBsMAIaigCACAAEE1FDQQgAkEBaiECDAALAAtBpOQKKAIAIgZBACAGQQBKGyEHIAEtAAIhCCABLQABIQkgAS0AACEKQYP0CyELAkADQCACIAdHBEACQCACQQF0IgxBsOwKai4BACAJayIEIARsIAxBsOQKai4BACAKayIEIARsaiAMQbD0CmouAQAgCGsiBCAEbGoiBCALTg0AIAIhBSAEIgsNAAwDCyACQQFqIQIMAQsLIAZBgARHDQILIAVBIGohAgwCCyADQfUANgIEIANB0rwBNgIAQYj2CCgCAEHYvwQgAxAgGhA7AAtBpOQKIAZBAWo2AgAgB0EBdCIFQbDkCmogCjsBACAFQbDsCmogCTsBACAFQbD0CmogCDsBACADIAg2AiAgAyAJNgIcIAMgCjYCGCADIAdBIGoiAjYCFCADQQA2AhAgAEHz2wMgA0EQahAeCyABIAI2AgALIAFBBTYCICADQTBqJAAPC0GU1gFB1PsAQQ1B5TsQAAALxwICB38EfCMAQdAAayIDJAAgACgC6AIhBiAAKwPgAiEKQaDkCigCACEHIAIoAgQiBCsDECELIAAoAhAoAhAhCCACKAIAEEAhCSAEKAIIIgQEfyAEKAIUBUF/CyEEIAItADAhBSABKwMIIQwgASsDACENIAMgCyAKoiIKOQMwIANBBjYCKCADRBgtRFT7Ifk/RAAAAAAAAAAAIAYbOQMgIAMgCjkDGCADIAQ2AhQgA0EANgIQIANBQGsgDRAyOQMAIAMgDEQAAAAAAABSwKAQMjkDSCADIAogCqBEAAAAAAAACECjIAm4okQAAAAAAADgP6I5AzggAyAHNgIMIAMgCDYCCCADQQQ2AgAgA0ECQQEgBUHyAEYbQQAgBUHsAEcbNgIEIABB88kDIAMQHiAAIAIoAgAQxAogAEGS3AQQGxogA0HQAGokAAsLAEGg5ApBADYCAAsLAEGg5ApBATYCAAuCAQECfwJAAkAgAEUgAUVyRQRAAkAgACgCKCICIAEoAigiA0cEQCACKAIAQQR2IgAgAygCAEEEdiIBSQ0EIAAgAU0NAQwDCyAAKAIAQQR2IgAgASgCAEEEdiIBSQ0DIAAgAUsNAgtBAA8LQdTzAkHgvQFBhwNBloMBEAAAC0EBDwtBfwsLACAAQdywBBAbGgvZAQIDfwF+IwBBMGsiASQAIAAoAhAhAiAAQYjaBBAbGiAAKAIMKAIAIgMpAgAhBCABIAMoAgg2AiggASAENwMgIABBhu8EIAFBIGoQHiABIAIoAggQITYCECAAQY+BBCABQRBqEB4gASAAKAKoASAAKAKkAWw2AgAgAEHQxwQgARAeIABB6+IDEBsaIABBnogEEBsaIABB/OsDEBsaIABB1ocEEBsaIABB7dwEEBsaIABB77AEEBsaIABBktoEEBsaIABB85QDEBsaIABBgdwEEBsaIAFBMGokAAsYACAAEIoGIAAQ1QQgAEHMACABIAIQvwgLEwAgACABIAIgA0HCAEHiABCXCgsTACAAIAEgAiADQfAAQdAAEJcKC6MBAQJ/IwBBEGsiAyQAIAAoAhAoAgwgABCKBiAAENUEIAIEfwJAIAJBfnFBAkYEQCAAIAIgAUECEMAIDAELIAAQiQYLQbvLAwVBw8oDCyECQQJ0QfC/CGooAgAiACACEPIBIAMgASkDCDcDCCADIAEpAwA3AwAgACADENcCIAAgASsDECABKwMAoRCWAiAAIAErAxggASsDCKEQlgIgA0EQaiQAC78CAQZ/IwBBMGsiAyQAIAAoAhAoAgwiB0ECdEHwvwhqKAIAIgRBuMsDEPIBIAQgAigCBCsDEBCWAiAAQfH/BCACKAIEKAIAEMADIAAQ1QQgAigCBCIGBEAgBigCGEH/AHEhBQsgAi0AMCEGAkBB4OMKKAIALwEoIghBD0kNACAIQQ9rIghBAksNACAIQQJ0QaDACGooAgAgBXEiBSAHQQJ0QfDjCmoiBygCAEYNACADIAU2AiAgBEGHyAMgA0EgahCEASAHIAU2AgALIAEgAisDGCABKwMIoDkDCCAEQanLAxDyASADIAEpAwg3AxggAyABKQMANwMQIAQgA0EQahDXAiADQX8gBkHyAEYgBkHsAEYbNgIAIARB98oDIAMQhAEgBCACKwMgEJYCIABB8f8EIAIoAgAQwAMgA0EwaiQAC8sCACAAKAIQKAIIIQBB8OIKECQEQCAAQeDjCigCACgCEEHw4goQwgEQcQtBgOMKECQEQCAAQeDjCigCACgCGEGA4woQwgEQcQtBkOMKECQEQCAAQeDjCigCACgCFEGQ4woQwgEQcQtBsOMKECQEQCAAQeDjCigCACgCHEGw4woQwgEQiwYLQcDjChAkBEAgAEHg4wooAgAoAiRBwOMKEMIBEHELQdDjChAkBEAgAEHg4wooAgAoAiBB0OMKEMIBEHELQYilCkKAgICAgICA+D83AwBB+KQKQoCAgICAgID4PzcDAEHopApCgICAgICAgPg/NwMAQeCkCkKAgICAgICA+D83AwBByKQKQoCAgICAgID4PzcDAEHApApCgICAgICAgPg/NwMAQYjkCkIANwMAQfjjCkIANwMAQZzkCkEANgIAQZTkCkEANgIAC30AIAAoAhAoAgghAEHw4goQJARAIABB4OMKKAIAKAIIQfDiChDCARBxC0Gw4woQJARAIABB4OMKKAIAKAIMQbDjChDCARCLBgtBgKUKQoCAgICAgID4PzcDAEHwpApCgICAgICAgPg/NwMAQZjkCkEANgIAQZDkCkEANgIAC3MAIAAoAhAoAggiAEHg4wooAgAoAgBB8OIKEMIBEHEgACgCECgCDARAIABB4OMKKAIAKAIEQbDjChDCARBxC0HYpApCgICAgICAgPg/NwMAQbikCkKAgICAgICA+D83AwBBhOQKQQA2AgBB9OMKQQA2AgALxAMBBH8jAEEQayIDJAAgACgCECgCCCEBQeTjCigCAEUEQEHs4wpBoAI2AgBB6OMKQaECNgIAQeTjCkHw7wkoAgA2AgALIAEoAkwiAigCBCEEIAJB5OMKNgIEAkACQAJAAkACQAJAIAAoAkAOBwEBBAACAgIDCyAAIAEgAEEBEMcIDAQLIAAtAJsBQQhxDQMgASAAENUIDAMLQeDiChAkBEBB4OMKKAIAKAIAIgJFBEAgAUEAQcHDARCIASECQeDjCigCACACNgIACyABIAJB4OIKEMIBEHELIAEoAhAoAgwEQCABQeDjCigCACgCBEGg4woQwgEQiwYLQQAhAiABQb7jAEHg4wooAgAoAiwQkAcDQCACQQhGRQRAIAJBBHRB4OIKahBcIAJBAWohAgwBCwtB4OMKKAIAEBhB0KQKQoCAgICAgID4PzcDAEGwpApCgICAgICAgPg/NwMAQYDkCkEANgIAQfDjCkEANgIAIAAtAJsBQQhxDQIgASAAENUIDAILIANB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IAUoAggoAghB4IYKRwRAIAQgATYCGCAGIQMLIAFBACAEQegAaiACIAQtAGcgAxCWBEUNASABIAIQ3wkMAQsgASAGIARB6ABqIANB6cUBIAMbIgMgBC0AZ0EAEJYERQ0AIAEQISEBIAQgAzYCCCAEIAI2AgQgBCABNgIAQd+9BCAEECoLIARBADYCjAEgACAEQegAakEoEB8aCyAEQZABaiQACxoAIAAoAhAoAgwiAARAIAAoAiwQGCAAEBgLC6kFAgR8CH9BMBBSIQYgACgCECgCCCgCCCgCBCEKAnwgAEHU2wooAgBE////////739EexSuR+F6hD8QTCAAQdDbCigCAET////////vf0R7FK5H4XqUPxBMIgEQKSICvUL/////////9/8AUiABvUL/////////9/8AUnJFBEAgACgCECIFQpqz5syZs+bUPzcDICAFQpqz5syZs+bUPzcDKETNzMzMzMwMQAwBCyACRGEyVTAqqTM/ECMhASAAKAIQIgUgASACIAJEAAAAAAAAAABkGyIBOQMgIAUgATkDKCABRAAAAAAAAFJAogshA0EBIQtBASAAQYjcCigCACAKQQAQYiIHIAdBAU0bIAdBAEcgAEG83AooAgBEAAAAAAAA8D9EAAAAAAAAAAAQTCIERAAAAAAAAAAAZHEiCmoiBUEBdEEQEBoiCCADRAAAAAAAAOA/oiICOQMYIAggAjkDECAIIAKaIgE5AwggCCABOQMAQQIhCQJAIAdBAkkEQCACIQEMAQsgAiEBA0AgByALRkUEQCAIIAlBBHRqIgwgAUQAAAAAAAAQQKAiAZo5AwggDCACRAAAAAAAABBAoCICmjkDACAMIAI5AxAgDCABOQMYIAtBAWohCyAJQQJqIQkMAQsLIAIgAqAhAwsgCkUgBSAHTXJFBEAgCCAJQQR0aiIFIAREAAAAAAAA4D+iIgQgAaAiATkDGCAFIAQgAqAiAjkDECAFIAGaOQMIIAUgApo5AwALIAZCADcDECAGQQI2AgggBiAHNgIEIAZBATYCACAGIAg2AiwgBkIANwMYIAZCADcDICAAKAIQIgAgAiACoEQAAAAAAABSQKMiATkDcCAAIAE5A2ggACADRAAAAAAAAFJAoyIBOQMoIAAgATkDICAAIAY2AgwLwQMCBH8CfCMAQdAAayIBJAAgABAtKAIQKAJ0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IAMgBBCIBSAFQQhqIgUgBkkNAAwDCwALA0AgAS0ANg0CIAEoAiRBAUYEQCABKAIYQQFGDQMLIAUgASACIAMgBBCIBSAFQQhqIgUgBkkNAAsMAQsgASACNgIUIAEgASgCKEEBajYCKCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsLcAECfyAAIAEoAghBABDbAQRAIAEgAiADEO8GDwsgACgCDCEEIABBEGoiBSABIAIgAxCyCgJAIARBAkkNACAFIARBA3RqIQQgAEEYaiEAA0AgACABIAIgAxCyCiABLQA2DQEgAEEIaiIAIARJDQALCwszACAAIAEoAghBABDbAQRAIAEgAiADEO8GDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRBwALGgAgACABKAIIQQAQ2wEEQCABIAIgAxDvBgsLgwUBBn8jAEFAaiIEJAACf0EBIAAgAUEAENsBDQAaQQAgAUUNABojAEEQayIGJAAgBiABKAIAIgNBCGsoAgAiBTYCDCAGIAEgBWo2AgQgBiADQQRrKAIANgIIIAYoAggiA0Ho6AlBABDbASEFIAYoAgQhBwJAIAUEQCAGKAIMIQEjAEFAaiIDJAAgA0FAayQAQQAgByABGyEDDAELIAMhBSMAQUBqIgMkACABIAdOBEAgA0IANwIcIANCADcCJCADQgA3AiwgA0IANwIUIANBADYCECADQejoCTYCDCADIAU2AgQgA0EANgI8IANCgYCAgICAgIABNwI0IAMgATYCCCAFIANBBGogByAHQQFBACAFKAIAKAIUEQsAIAFBACADKAIcGyEICyADQUBrJAAgCCIDDQAjAEFAaiIDJAAgA0EANgIQIANBuOgJNgIMIAMgATYCCCADQejoCTYCBEEAIQEgA0EUakEAQScQOBogA0EANgI8IANBAToAOyAFIANBBGogB0EBQQAgBSgCACgCGBEKAAJAAkACQCADKAIoDgIAAQILIAMoAhhBACADKAIkQQFGG0EAIAMoAiBBAUYbQQAgAygCLEEBRhshAQwBCyADKAIcQQFHBEAgAygCLA0BIAMoAiBBAUcNASADKAIkQQFHDQELIAMoAhQhAQsgA0FAayQAIAEhAwsgBkEQaiQAQQAgA0UNABogBEEIakEAQTgQOBogBEEBOgA7IARBfzYCECAEIAA2AgwgBCADNgIE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KAIIEPgGIghBf0YNBCAGIAcoAgBrIAhJDQYDQCAIBEAgAi0AACEFIAcgBygCACIJQQFqNgIAIAkgBToAACAIQQFrIQggAkEBaiECDAELCyAEIAQoAgBBBGoiAjYCACACIQgDQCADIAhGBEAgAyEIDAULIAgoAgBFDQQgCEEEaiEIDAALAAsgBCACNgIADAMLIAQoAgALIANHIRAMAwsgBygCACEFDAELC0ECIRALIA9BEGokACAQCwkAIAAQ4QoQGAszACMAQRBrIgAkACAAIAQ2AgwgACADIAJrNgIIIABBDGogAEEIahCvCygCACAAQRBqJAALNAADQCABIAJGRQRAIAQgAyABLAAAIgAgAEEASBs6AAAgBEEBaiEEIAFBAWohAQwBCwsgAQsMACACIAEgAUEASBsLKgADQCABIAJGRQRAIAMgAS0AADoAACADQQFqIQMgAUEBaiEBDAELCyABCw8AIAAgASACQbClCRCgCgseACABQQBOBH9BsKUJKAIAIAFBAnRqKAIABSABC8ALDwAgACABIAJBpJkJEKAKCx4AIAFBAE4Ef0GkmQkoAgAgAUECdGooAgAFIAELwAsJACAAENcKEBgLNQADQCABIAJGRQRAIAQgASgCACIAIAMgAEGAAUkbOgAAIARBAWohBCABQQRqIQEMAQsLIAELDgAgASACIAFBgAFJG8ALKgADQCABIAJGRQRAIAMgASwAADYCACADQQRqIQMgAUEBaiEBDAELCyABCw8AIAAgASACQbClCRCfCgseACABQf8ATQR/QbClCSgCACABQQJ0aigCAAUgAQsLDwAgACABIAJBpJkJEJ8KCx4AIAFB/wBNBH9BpJkJKAIAIAFBAnRqKAIABSABCws6AANAAkAgAiADRg0AIAIoAgAiAEH/AEsNACAAQQJ0QYC0CWooAgAgAXFFDQAgAkEEaiECDAELCyACCzoAA0ACQCACIANGDQAgAigCACIAQf8ATQRAIABBAnRBgLQJaigCACABcQ0BCyACQQRqIQIMAQsLIAILSQEBfwNAIAEgAkZFBEBBACEAIAMgASgCACIEQf8ATQR/IARBAnRBgLQJaigCAAVBAAs2AgAgA0EEaiEDIAFBBGohAQwBCwsgAQslAEEAIQAgAkH/AE0EfyACQQJ0QYC0CWooAgAgAXFBAEcFQQALCwkAIAAQ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AkAgAEH8AWogAEH4AWoQWw0AIAAoArABIAEQJSACakYEQCABECUhAyABIAEQJUEBdBBBIAEgARBVEEEgACADIAFBABBDIgJqNgKwAQsgAEH8AWoiAxCDASAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahCIBw0AIAMQlgEaDAELCwJAIABBwAFqECVFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCPCzgCACAAQcABaiAAQRBqIAAoAgwgBBCvASAAQfwBaiAAQfgBahBbBEAgBCAEKAIAQQJyNgIACyAAKAL8ASABEDUaIABBwAFqEDUaIABBgAJqJAALjwMBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASADEKgCIQYgAEHEAWogAyAAQfcBahClBCAAQbgBahBUIgEgARBVEEEgACABQQAQQyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQfwBaiAAQfgBahBbDQAgACgCtAEgARAlIAJqRgRAIAEQJSEDIAEgARAlQQF0EEEgASABEFUQQSAAIAMgAUEAEEMiAmo2ArQBCyAAQfwBaiIDEIMBIAYgAiAAQbQBaiAAQQhqIAAsAPcBIABBxAFqIABBEGogAEEMakHAsQkQ2QMNACADEJYBGgwBCwsCQCAAQcQBahAlRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEJALNwMAIABBxAFqIABBEGogACgCDCAEEK8BIABB/AFqIABB+AFqEFsEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQNRogAEHEAWoQNRogAEGAAmokAAuPAwEBfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIAMQqAIhBiAAQcQBaiADIABB9wFqEKUEIABBuAFqEFQiASABEFUQQSAAIAFBABBDIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqEFsNACAAKAK0ASABECUgAmpGBEAgARAlIQMgASABECVBAXQQQSABIAEQVRBBIAAgAyABQQAQQyICajYC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AjgCQCABQeIlQQBBARA2BEAgASgCECgCCA0BCyACLQCbAUEEcQ0AQZqwBEEAEDdBfyEBDAELAkAgBQRAIAVBgCAQTyIGNgIAIAYNAQtBwf4AQQAQN0F/IQEMAQsgAkKAIDcCLCACIAY2AiggACABEJ8GIQEgAhCHBCABRQRAIAUgAigCKDYCACADIAIoAjA2AggLIAAQlQQLIARBEGokACADKAIMIQACQCABRQRAIAAhBwwBCyAAEBgLIANBEGokACAHCwsAEPYMELwMEJMKCzUAIAFB4iVBAEEBEDYEQCABKAIQKAKUASIABEAgASAAEQEAIAEoAhBBADYClAELIAEQ0wkLCwsAIAAgASACEJQGCwwAIAAQlwYgABCWBgsFABCVBgsHACAAELkBCwsAIAAgASACEJAHCw0AIAAgASACQQIQ4wYLDQAgACABIAJBARDjBgsNACAAIAEgAkEAEOMGCwsAIAAgAUEBEJIBCxwAIAAgACABQQEQjQEgACACQQEQjQFBAEEBEF4LCwAgACABQQEQjQELCwAgACABQQEQjAELCwAgACABQQAQjAELCQAgACABENUCCwkAIAAgARCsAQs2AQF/QQBBAUHC8ABBvdEBELUFGhD2DBC8DBCTCiAAENwNA0BBABDcDSIBBEAgARC5AQwBCwsLRwEBfyMAQRBrIgMkACADQQA7AA0gA0EAOgAPIANBAkEAIAIbIAFyOgAMIAMgAygCDDYCCCAAIANBCGpBABDjASADQRBqJAALsAMCBX8BfiMAQRBrIgMkACADQQA2AgwCfxCVBiEEIwBB4ABrIgEkACABQgA3A1ggAUIANwNQIAFCADcDSAJAAkACf0EAIABFDQAaAkADQCACQQVHBEAgACACQQJ0QbCWBWooAgAQLkUNAiACQQFqIQIMAQsLIAEgADYCAEHu+wQgARA3QQAMAQsgBCACQQJ0aigCQCECIAFCADcDQEEAIQADQCACBEAgAUE4aiACKAIEQToQ0AECQCAABEAgASABKQNANwMoIAEgASkDODcDICABQShqIAFBIGoQ+gYNAQsgASgCOCIARQ0EIAAgASgCPCIAEJACIgVFDQUgASAFNgJcIAFByABqQQQQJiEAIAEoAkggAEECdGogASgCXDYCAAsgASABKQM4IgY3A0AgBqchACACKAIAIQIMAQsLIAFB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iAFqQQAQGUECdGogAygCuAEQzgwEQCADIAMpA7gBNwOAASADIAMpA7ABNwN4IAchAiADKAKwASADQfgAakEAEBlBAnRqIAMoArgBENAMIgsNAUEAIQtBouwDQQAQKkEAIQIDQCACIAMoArgBTw0FIAMgAykDuAE3A1AgAyADKQOwATcDSCADQcgAaiACEBkhBAJAAkACQCADKALAASIFDgICAAELIAMoArABIARBAnRqKAIAEBgMAQsgAygCsAEgBEECdGooAgAgBREBAAsgAkEBaiECDAALAAsCQCAMDQAgA0GYAWogABD9AiAAQQhBCBDqBSECQcTtA0EAECogASsDACINIAK3Ig5mIA4gASsDCCIPZXIEQCADQUBrIA85AwAgAyANOQM4IAMgAjYCMEHj8AQgA0EwahCAAQwBCyADKwOYASIOIA1lIAMrA6ABIhAgD2VyRQ0AIAMgDzkDKCADIA05AyAgAyAQOQMYIAMgDjkDEEGV8QQgA0EQahCAAQtBACECA0AgAiADKAK4AU8NBCADIAMpA7gBNwMIIAMgAykDsAE3AwAgAyACEBkhBAJAAkACQCADKALAASIFDgICAAELIAMoArABIARBAnRqKAIAEBgMAQsgAygCsAEgBEECdGooAgAgBREBAAsgAkEBaiECDAALAAsDQCACRQRAQQAhAgNAIAIgAygCuAFPDQYgAyADKQO4ATcDYCADIAMpA7ABNwNYIANB2ABqIAIQGSEEAkACQAJAIAMoAsABIgUOAgIAAQsgAygCsAEgBEECdGooAgAQGAwBCyADKAKwASAEQQJ0aigCACAFEQEACyACQQFqIQIMAAsACyACKAIQIANBmAFqIAIgC0EAEMUMIAMpA5gBNwOQASADKAK4AUEATgRAIANBsAFqQQQQjAIgAyADKQO4ATcDcCADIAMpA7ABNwNoIAIgAygCsAEgA0HoAGpBABAZQQJ0aiADKAK4AUEAEMQMIAIoAhAoArABIQIMAQsLQYnNAUGDugFBggJBzDAQAAALQYnNAUGDugFB4QFBzDAQAAALIAAgChAdIQoMBQtBASEMCyADQbABaiICQQQQMSACEDQLIAAgBxAwIQcMAAsACwsgCwRAIAsQzwwLIANB0AFqJAAgDAtbAQJ/IAAQHCEBA0AgAQRAIAAgARAsIQIDQCACBEAgAhDAAiAA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AAAAUkCjoDkDMCAEIAUrAzhEAAAAAAAAUkCjIAOhOQM4CyAAIAQ2AiQgACAGKAIMIgE2AiAgBCABIAAgAEEQahDnDEEACyAGQRBqJAALEQAgACABQeD+CkHc/goQ5QYLLQECfUF/IAIgACgCAEECdGoqAgAiAyACIAEoAgBBAnRqKgIAIgReIAMgBF0bCxIAIABBNGoQ9QMgAEEoahD1AwsJACAAEJINEBgLGQECfiAAKQMIIgIgASkDCCIDViACIANUawsdACAAKAIAQQR2IgAgASgCAEEEdiIBSyAAIAFJawtEAgF/AnwgACgCBCgCBCABKAIEKAIERgRAIAAoAgBFIAEoAgBBAEdxDwsgACsDECIDIAErAxAiBGQEf0EABSADIARjCwsJACAAEKENEBgLCQAgABDsBxAYC4kIAgl/AnwjAEGgAWsiAyQAIAAQog0gA0EANgKcASAAQQRqIQcgAEEkaiEEAkACQAJAA0AgBCgCACECRP///////+9/IQogBCgCBCIFIQEDfCACIAVGBHwgCkRIr7ya8td6vmNFIAEgBUZyRQRAIAEgBCgCBEEEaygCADYCACAEIAQoAgRBBGs2AgQLIAoFIAogAigCACIGELUCIgtkBEAgAyAGNgKcASALIQogAiEBCyACQQRqIQIMAQsLREivvJry13q+YwRAIAMoApwBIgItABxBAUYNAiADIAIoAgAoAiAiATYCBCADIAIoAgQiBigCICIFNgKYASABIAVHBEAgASAFIAIQrw0MAgsgCEGRzgBODQMgAigCACEJIwBBEGsiBSQAIAEgASgCACgCAEEAEOAFIAUgASAGIAlBAEEAQQAQ8AcgBSgCCCEGIAVBEGokACABIANBBGoiBSADQZgBaiAGEO8HIAFBAToAKCADIAY2AhAgBCADQRBqIgEQwAEgAygCBCADKAKYASACEK8NIAEgByAFEPYDIAhBAWohCAwBCwsgBxDeBUEAIQEDQCABIAAoAhxPDQMgAUECdCABQQFqIQEgACgCGGooAgAiBBC1AkRIr7ya8td6vmNFDQALIANBEGoiAUHIlAk2AjggAUG0lAk2AgAgAUHUlAkoAgAiADYCACABIABBDGsoAgBqQdiUCSgCADYCACABIAEoAgBBDGsoAgBqIgJBADYCFCACIAFBBGoiADYCGCACQQA2AgwgAkKCoICA4AA3AgQgAiAARTYCECACQSBqQQBBKBA4GiACQRxqENoKIAJCgICAgHA3AkggAUG0lAk2AgAgAUHIlAk2AjggAEH0kAk2AgAgAEEEahDaCiAAQgA3AhggAEIANwIQIABCADcCCCAAQgA3AiAgAEHkkQk2AgAgAEEQNgIwIABCADcCKCABQdnLAxDRAiAEKAIAELYNQbygAxDRAiAEKwMIEJEHQdfgARDRAiAEKAIEELYNQdOsAxDRAiAEELUCEJEHQY2sAxDRAkHNiQFB8f8EIAQtABwbENECGkEIEM4DIANBBGohASMAQRBrIgIkAAJAIAAoAjAiA0EQcQRAIAAoAhggACgCLEsEQCAAIAAoAhg2AiwLIAEgACgCFCAAKAIsIAJBD2oQjwcaDAELIANBCHEEQCABIAAoAgggACgCECACQQ5qEI8HGgwBCyMAQRBrIgAkACABEKkLGiAAQRBqJAALIAJBEGokABCKBSIAQazsCTYCACAAQQRqIAEQRhDyBiAAQYjtCUHIAxABAAtBwokBQZDZAEG4AUG2DhAAAAtBCBDOA0GRxwMQ8QZBiO0JQcgDEAEACyADQaABaiQACz4CAXwBfyAAQQRqIgIQpA0hAQNAIAAgACgCACgCABEBACAAEKINIAEgAhCkDSIBoZlELUMc6+I2Gj9kDQALC4YFAgx/AXwgACAAKAIAKAIAEQEAIwBBEGsiAyQAIABBCGohCSAAQQRqIQQCQAJAA0AgBCgCACEBA0AgASAJRgRAAkAgBCgCACEBA0ACQCABIAlGBEBBACEBDAELAkAgASgCECIIEKwNIgJFDQAgAisDEEQAAAAAAAAAAGNFDQAgA0EANgIMIANBADYCCCMAQRBrIgokACAIIANBDGoiCyADQQhqIgUgAhDvByAFKAIAIgEgCCsDECINOQMQIAEgDSABKwMYojkDICALKAIAEKUNIAUgAigCBCgCICIBNgIAIAEQsQ0hDSAFKAIAIgEgDTkDICABIA0gASsDGKM5AxAgARD3BwNAAkAgARDyByICRQ0AIAIQtQJEAAAAAAAAAABjRQ0AIAFBPGoQwQQgAigCBCgCICIGEPcHIAEgBiABKAIEIAEoAgBrIAYoAgQgBigCAGtLIgwbIQcgBiABIAwbIgEgByACIAIoAgArAxggAisDCKAgAigCBCsDGKEiDZogDSAMGxDhBSABEPIHGiAHEPIHGiABQTxqIAdBPGoQrg0gB0EBOgAoDAELCyAIQQE6ACggCkEIaiIBIAQgCxD2AyABIAQgBRD2AyAKQRBqJAAgBBDeBQwGCyABEKsBIQEMAQsLA0AgASAAKAIcTw0BIAAoAhggAUECdGooAgAQtQJESK+8mvLXer5jRQRAIAFBAWohAQwBCwsgACgCGCABQQJ0aigCABC1AkRIr7ya8td6vmRFDQRBCBDOA0GkHxDxBkGI7QlByAMQAQALBSABKAIQIgIQ+AcgAhD3ByABEKsBIQEMAQsLCyADQRBqJAAMAQtBtvcCQZDZAEGBAUGFmAEQAAALC/sCAQh/IwBBEGsiBSQAIAVBBGoiAUEANgIIIAEgATYCBCABIAE2AgAgAEEEaiICKAIQIgNBACADQQBKGyEHIAIoAgwhCANAIAQgB0YEQANAIAMgBkoEQCACKAIMIAZBAnRqKAIAIgQoAiggBCgCLEYEQCACIAQgARCmDSACKAIQIQMLIAZBAWohBgwBCwsFIAggBEECdGooAgBBADoAJCAEQQFqIQQMAQsLA0ACQCABKAIEIgEgBUEEakYEQCACEN4FQQAhAQNAIAEgACgCHE8NAiABQQJ0IAFBAWohASAAKAIYaigCABC1AkRIr7ya8td6vmNFDQALQQgQzgNBpB8Q8QZBiO0JQcgDEAEACyABKAIIKAIgIgMtACgNASADEKUNDAELCwJAIAVBBGoiAigCCEUNACACKAIEIgAoAgAiASACKAIAKAIEIgM2AgQgAyABNgIAIAJBADYCCANAIAAgAkYNASAAKAIEIAAQGCEADAALAAsgBUEQaiQAC7oBAgJ/AnxE////////7/8hBAJ8RP///////+//IAEoAgAoAiAiAigCLCABKAIYSg0AGkT////////v/yACIAEoAgQoAiBGDQAaIAEQtQILIQUCQCAAKAIAKAIgIgIoAiwgACgCGEoNACACIAAoAgQoAiBGDQAgABC1AiEECyAEIAVhBEAgASgCACgCACICIAAoAgAoAgAiA0YEQCABKAIEKAIAIAAoAgQoAgBIDwsgAiADSA8LIAQgBWQLMwAgABCgDSAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABQQA2AgggAUIANwIAC8oBAQd/IwBBEGsiBSQAIABBADYCCCAAQgA3AgBBKEE0IAIbIQcgASgCBCEIIAEoAgAhBANAIAQgCEcEQCAEKAIAIAdqIgMoAgQhCSADKAIAIQMDQCADIAlGBEAgBEEEaiEEDAMFIAUgAygCACIGNgIMIAZB2P4KKAIANgIYAkACQCACBEAgBigCACgCICABRw0BCyACDQEgBigCBCgCICABRg0BCyAAIAVBDGoQwAELIANBBGohAwwBCwALAAsLIAAQsA0gBUEQaiQACz4BAnwCf0F/IAArAwAiAiABKwMAIgNjDQAaQQEgAiADZA0AGkF/IAArAwgiAiABKwMIIgNjDQAaIAIgA2QLCxwAIAAoAgwgASgCDGogACgCBCABKAIEamtBAm0LHAAgACgCCCABKAIIaiAAKAIAIAEoAgBqa0ECbQuMAQEHfwJAIAAoAiAiAyABKAIoIgRKDQAgASgCICIFIAAoAigiBkoNAEEBIQIgACgCLCIHIAEoAiQiCEgNACAAKAIQIAEoAhBrIAcgASgCLGogACgCJCAIamtBAm1qIAYgAyAFamsgBGpBAm0gASgCDCIBIAAoAgwiAGsgACABayAAIAFKG2pMIQILIAILjAEBB38CQCAAKAIkIgMgASgCLCIESg0AIAEoAiQiBSAAKAIsIgZKDQBBASECIAAoAigiByABKAIgIghIDQAgACgCDCABKAIMayABKAIoIAcgCCAAKAIgamtqQQJtaiAEIAZqIAMgBWprQQJtIAEoAhAiASAAKAIQIgBrIAAgAWsgACABShtqTCECCyACCyABAX8gACgCICABKAIoTAR/IAEoAiAgACgCKEwFQQALCyABAX8gACgCJCABKAIsTAR/IAEoAiQgACgCLEwFQQALC7YOAQx/IwBBMGsiByQAAkACQAJAIAAQPEUNACAAQX9BCBDqBSEBIABBACAHQRBqIgMQhQghAiAAQQJBCCADEPkDGiACIAFBAE5yRQRAIAAQ4gVFDQEMAwsCQAJAAkACQCACBEBBCCABIAFBAEgbIQEMAQsgB0EDNgIgIAFBAEgNAQsgB0EANgIkIAcgATYCGCAHQQxqIQpBACECIwBBgAFrIgEkACABQgA3A3ggAUIANwNwAkAgABA8RQRAIApBADYCAAwBCyAAQQBB3t4AQXRBABCzAiAAQQFB6t4AQRBBABCzAiABQcTwCSgCADYCMEGaggEgAUEwakEAEOMBIgMgABDVDSAAEBwhAgNAIAIEQCACQereAEEAEGsoAgxFBEAgAyACECFBARCNASIEQereAEEQQQEQNhogBCgCECACNgIMIAJB6t4AQQAQayAENgIMCyAAIAIQHSECDAELCyAAEBwhBANAIAQEQCAEQereAEEAEGsoAgwhBSAAIAQQLCECA0AgAgRAAkAgAkFQQQAgAigCAEEDcUECRxtqKAIoQereAEEAEGsoAgwiBiAFRg0AIAUgBkkEQCADIAUgBkEAQQEQXhoMAQsgAyAGIAVBAEEBEF4aCyAAIAIQMCECDAELCyAAIAQQHSEEDAELCyADEDwhAiABQgA3A2ggAUIANwNgIAFCADcDWCABQdgAaiACQQQQ/AEgAUIANwNIIAFBQGtCADcDACABQgA3AzggAUG8AzYCVCABQbsDNgJQQYj2CCgCACELIAMQHCEGA0ACQCAGBEAgBkF/IAEoAlQRAAANASABQfAAaiICQQAQ6AUgASABKAJgNgIgIAIgAUEgahDnBSADIAIQsQMiAkEBEJIBIQggACACQQEQkgEiBUHe3gBBDEEAEDYaIAVB3t4AQQAQa0EBOgAIIAMgBiAIIAFBOGoQ5gUhDCAIEBwhBANAAkAgBARAIAQoAhAoAgwiCSgCAEEDcUEBRgRAIAUgCUEBEIUBGgwCCyAJEBwhAgNAIAJFDQIgBSACQQEQhQEaIAkgAhAdIQIMAAsACyAFQQAQsgMhAiAAIAVBABDUDSABIAU2AmwgAUHYAGpBBBAmIQQgASgCWCAEQQJ0aiABKAJsNgIAIAMgCBC3AUHs2gotAABFDQMgASAMNgIUIAEgAjYCGCABIAEoAmBBAWs2AhAgC0GE7AMgAUEQahAgGgwDCyAIIAQQHSEEDAALAAtB7NoKLQAABEAgABA8IQIgABC0AiEEIAEoAmAhBSABIAAQITYCDCABIAU2AgggASAENgIEIAEgAjYCACALQb/xAyABECAaCyADELkBIABBAEHe3gAQtwcgAEEBQereABC3ByABQThqEIQIIAFB8ABqEFwgAUHYAGogAUE0aiAKQQQQxwEgASgCNCECDAILIAMgBhAdIQYMAAsACyABQYABaiQAIAIhBCAHKAIMQQFGBEAgABDiBQ0FDAMLIAAoAhAoAggoAlQNASAHQQE6ABxBACECA0AgBygCDCACSwRAIAQgAkECdGooAgAiBkHiJUGYAkEBEDYaQQFB4AAQGiEFIAYoAhAiASAFNgIIIAUgACgCECIDKAIIIggrAwA5AwAgBSAIKwMYOQMYIAEgAygCkAE2ApABIAEgAy0AczoAcyABIAMoAnQ2AnQgASADKAL4ATYC+AEgASADKAL8ATYC/AEgASADKAL0ATYC9AEgAkEBaiECIAYQ4gVFDQEMBgsLIAAQHCEBA0AgAQRAQQJBCBAaIQIgASgCECIDIAI2ApQBIAIgAysDEEQAAAAAAABSQKM5AwAgAiADKwMYRAAAAAAAAFJAozkDCCAAIAEQHSEBDAELCyAHKAIMIAQgACAHQRBqEOsFIAAQHCEBA0AgAQRAIAEoAhAiAiACKAKUASIDKwMARAAAAAAAAFJAojkDECACIAMrAwhEAAAAAAAAUkCiOQMYIAMQGCABKAIQQQA2ApQBIAAgARAdIQEMAQsLQQAhAyAHKAIMIQVBACEBA0AgASAFRgRAIAAoAhAgAzYCtAEgA0EBakEEEBohASAAKAIQIAE2ArgBQQAhAkEBIQMDQCACIAVGDQUgBCACQQJ0aigCACEGQQEhAQNAIAYoAhAiCCgCtAEgAU4EQCABQQJ0IgkgCCgCuAFqKAIAENYNIQggACgCECgCuAEgA0ECdGogCDYCACAGKAIQKAK4ASAJaigCACAIEM4NIAFBAWohASADQQFqIQMMAQsLIAJBAWohAgwACwAFIAQgAUECdGooAgAoAhAoArQBIANqIQMgAUEBaiEBDAELAAsAC0HqmANBxrgBQcYDQeceEAAACyAAEOIFDQILQQAhAQNAIAcoAgwgAUsEQCAEIAFBAnRqIgIoAgAQggggACACKAIAELcBIAFBAWohAQwBCwsgBBAYCyAAELgDDAELIAQQGAsgB0EwaiQACyABAX8gACgCECIALQAIIAFBAE4EQCAAIAE6AAgLQQBHC3EBA38CQCACRQ0AIAAoAggiAyAAKAIETw0AIAAoAgAgA2oiBS0AACEDA0ACQCABIAM6AAAgA0EKRiAEQQFqIgQgAk5yDQAgAUEBaiEBIAUtAAEhAyAFQQFqIQUgAw0BCwsgACAAKAIIIARqNgIICyAECwwAIAEgAEEBEIUBGgslAQF/IAAoAhAiACgCsAEgAUEATgRAIAAgAUEARzYCsAELQQBHCzYBAnxBAUF/QQAgACgCACIAKwMIIAArAwCgIgIgASgCACIAKwMIIAArAwCgIgNkGyACIANjGwsRACAAIAFBtP4KQbD+ChDlBgsvACACIAAoAgAoAhBBAnRqKAIAIgAgAiABKAIAKAIQQQJ0aigCACIBSyAAIAFJawsdACABKAIAKAIAIgEgACgCACgCACIASiAAIAFKawsHACAAEOkDCwkAIAEgABCLAQsWACABIAIgABCoB0UEQEEADwsgARBAC3MBA38DQCAAIgEoAhAoAngiAA0ACwJ/QQAgAUFQQQAgASgCAEEDcSIAQQJHG2ooAigoAhAiAigC9AEiAyABQTBBACAAQQNHG2ooAigoAhAiASgC9AEiAEoNABpBASAAIANKDQAaIAIoAvgBIAEoAvgBSAsLbwICfAF/IAEoAgAoAhAoAmAhAQJAIAAoAgAoAhAoAmAiBARAQX8hACABRQ0BIAQrAxgiAiABKwMYIgNkDQFBASEAIAIgA2MNAUF/IQAgBCsDICICIAErAyAiA2QNASACIANjDwsgAUEARyEACyAAC9AFAg9/AnwjAEGwBGsiBSQAIAUgBUH4Amo2AnAgBSAFQcABajYCEEEBIQICQCAAKAIAIgcoAhAiCygCpAEiDEEPcSIEIAEoAgAiACgCECIDKAKkAUEPcSIBSQ0AAkAgASAESQ0AIAcQ+gMiAUEwQQAgASgCACIIQQNxIgRBA0cbaigCKCgCECIJKAL0ASABQVBBACAEQQJHG2ooAigoAhAiDSgC9AFrIgQgBEEfdSIEcyAEayIOIAAQ+gMiBEEwQQAgBCgCACIPQQNxIgpBA0cbaigCKCgCECIQKAL0ASAEQVBBACAKQQJHG2ooAigoAhAiCigC9AFrIgYgBkEfdSIGcyAGayIGSQ0AIAYgDkkNASAJKwMQIA0rAxChmSIRIBArAxAgCisDEKGZIhJjDQAgESASZA0BIAhBBHYiCCAPQQR2IglJDQAgCCAJSw0BIAchAiALLQAsBH8gDAUgAiABIAstAFQbIgIoAhAoAqQBC0EgcQRAIAVB4ABqIgEgAhCHAyAAKAIQIQMgASECCwJAIAMtACwEQCAAIQEMAQsgACAEIAMtAFQbIgEoAhAhAwsgAy0ApAFBIHEEQCAFIAEQhwMgBSgCECEDCyACKAIQIgEtACwhAgJAIAMtACxBAXEEQCACQQFxRQ0CIAErABAiESADKwAQIhJjDQIgESASZA0BIAErABgiESADKwAYIhJjDQIgESASZCECCyACDQIgAS0AVCECIAMtAFRBAXEEQCACQQFxRQ0CIAErADgiESADKwA4IhJjDQIgESASZA0BIAErAEAiESADKwBAIhJjDQIgESASZCECCyACDQIgBygCECgCpAFBwAFxIgEgACgCECgCpAFBwAFxIgJJDQEgASACSw0AQX8hAiAHKAIAQQR2IgEgACgCAEEEdiIASQ0CIAAgAUkhAgwCC0EBIQIMAQtBfyECCyAFQbAEaiQAIAILQAICfAF/IAArAwAiAiABKwMAIgNkBEAgACsDCCABKwMIZUUPCyACIANjBH9BAEF/IAArAwggASsDCGYbBUEACwv0AgEJfyMAQRBrIgYkACAAKAIwIQEjAEEQayIDJAADQAJAQQAhByACIAEoAgBPDQADQCACQQV0IgUgASgCBGoiCEEIaiEEIAgoABAgB00EQCAEQQQQMSABKAIEIAVqQQhqEDQgAkEBaiECDAMFIAMgBCkCCDcDCCADIAQpAgA3AwAgAyAHEBkhBAJAAkACQCABKAIEIAVqIgUoAhgiCA4CAgABCyAFKAIIIARBAnRqKAIAEBgMAQsgBSgCCCAEQQJ0aigCACAIEQEACyAHQQFqIQcMAQsACwALCyABKAIEEBggARAYIANBEGokACAAQRhqIQEDQCAAKAAgIAlLBEAgBiABKQIINwMIIAYgASkCADcDACAGIAkQGSECAkACQAJAIAAoAigiAw4CAgABCyABKAIAIAJBAnRqKAIAEBgMAQsgASgCACACQQJ0aigCACADEQEACyAJQQFqIQkMAQsLIAFBBBAxIAEQNCAAEBggBkEQaiQACxsBAnxBfyAAKwMAIgIgASsDACIDZCACIANjGwsPACAAKAIQEJkBGiAAEBgLIAECfEEBQX9BACAAKwMAIgIgASsDACIDYxsgAiADZBsLWgIBfAF/QX8gACsDCCABKwMIoSICREivvJry13o+ZCACREivvJry13q+YxsiAwR/IAMFQX8gACsDACABKwMAoSICREivvJry13o+ZCACREivvJry13q+YxsLC1oCAXwBf0F/IAArAwAgASsDAKEiAkRIr7ya8td6PmQgAkRIr7ya8td6vmMbIgMEfyADBUF/IAArAwggASsDCKEiAkRIr7ya8td6PmQgAkRIr7ya8td6vmMbCwuTAQEFfyMAQRBrIgIkACAAQQRqIQEDQCADIAAoAgxPRQRAIAIgASkCCDcDCCACIAEpAgA3AwAgAiADEBkhBAJAAkACQCAAKAIUIgUOAgIAAQsgASgCACAEQQJ0aigCABAYDAELIAEoAgAgBEECdGooAgAgBREBAAsgA0EBaiEDDAELCyABQQQQMSABEDQgAkEQaiQACyUAIAAoAgAoAhAoAvgBIgAgASgCACgCECgC+AEiAUogACABSGsLEgAgAUHatgEgAigCCEEBEDYaCxIAIAFB6bYBIAIoAgRBARA2GgsSACABQcq2ASACKAIAQQEQNhoLGQBBfyAAKAIAIgAgASgCACIBSyAAIAFJGwslACAAKAIAKAIQKAL0ASIAIAEoAgAoAhAoAvQBIgFKIAAgAUhrCyUAIAEoAgAoAhAoAvQBIgEgACgCACgCECgC9AEiAEogACABSmsLIwAgACgCECgCAEEEdiIAIAEoAhAoAgBBBHYiAUsgACABSWsLlQEBBH8jAEEQayIBJAAgAARAA0AgACgACCACTQRAIABBBBAxIAAQNAUgASAAKQIINwMIIAEgACkCADcDACABIAIQGSEDAkACQAJAIAAoAhAiBA4CAgABCyAAKAIAIANBAnRqKAIAEBgMAQsgACgCACADQQJ0aigCACAEEQEACyACQQFqIQIMAQsLCyAAEBggAUEQaiQACxQAIAAoAhBBHGogAEcEQCAAEBgLC44BAgF/BHwjAEEwayIDJAAgAyABKAIIIgQ2AiQgAyAENgIgIABBivwEIANBIGoQHiACKwMAIQUgAisDECEGIAIrAwghByACKwMYIQggAyABKAIINgIQIAMgCCAHoEQAAAAAAADgP6I5AwggAyAGIAWgRAAAAAAAAOA/ojkDACAAQbH5BCADEB4gA0EwaiQACwIAC90DAgF/AnwjAEGgAWsiBCQAAkACQCAABEAgAUUNASABKAIIRQ0CIAEoAkQEQCAEIAIpAwA3A2AgBCACKQMINwNoIAQgAikDGDcDiAEgBCACKQMQNwOAASAEIAQrA2giBTkDmAEgBCAEKwNgIgY5A3AgBCAEKwOAATkDkAEgBCAEKwOIATkDeCADBEBBACECIABBpssDQQAQHgNA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AzggBEIANwMwIABBh9MEIARBMGoQHiAEQfT8CigCAEECazYCICAEQgA3AxAgBEIANwMYIABBptQEIARBEGoQHiAEIAM2AgAgAEHAzgMgBBAeIAMQGAUgASAFQQR0aiIGKwMAIQggBisDCCEJIAArA/gDIQogACsDgAQhCyAEQgA3A4ABIAQgCSALoDkDeCAEIAggCqA5A3AgAEGZ3wEgBEHwAGoQHiAFQQFqIQUMAQsLCwUgASAFQQR0aiIHKwMAIQggBysDCCEJIAArA/gDIQogACsDgAQhCyAEIAAoAhArA6ABOQPoAiAEQgA3A+ACIAQgCSALoDkD2AIgBCAIIAqgOQPQAiAAQZCmBCAEQdACahAeIAVBAWohBQwBCwsgBEGgA2okAAupBQICfwl8IwBB8AJrIgMkACAAQe2uBBAbGkH0/ApB8PwKKAIAQQZrNgIAIAArA4AEIQwgACsD+AMhDSAAKAIQIgQrA6ABIQUgACsD6AMhBiABKwMAIQcgASsDECEIIAArA/ADIQogASsDCCELIAErAxghCSADQbgCaiIBIARBEGpBKBAfGiABQwAAAAAQvAMhASADQgA3A+gCIANCgICAgICAgPg/NwOgAiADQgA3A+ACIAMgBSAGIAggB6GiIgUgCiAJIAuhoiIIoCIJo0QAAAAAAADgP6JEAAAAAAAAFECiOQOoAiADQeACaiIEQfylBCADQaACahB0IAMgCDkDkAIgAyAJRAAAAAAAANA/ojkDiAIgAyAFOQOAAiAEQavTBCADQYACahB0IAMgACgC6AKyuzkD8AEgA0IANwPoASADQoCAgICAgKCrwAA3A+ABIARBh9MEIANB4AFqEHQgA0H0/AooAgA2AtABIAMgBiAHIA2goiIGOQPAASADIAogCyAMoKIiBzkDyAEgBEGm1AQgA0HAAWoQdCADIAE2ArABIARBwM4DIANBsAFqEHQgACAEEP8FEBsaIAEQGCACBEAgA0GIAWoiASAAKAIQQThqQSgQHxogAUMAAAAAELwDIQEgA0IANwOAASADQgA3A3ggA0IANwNwIABBs90EIANB8ABqEB4gA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBTkDUCAAQavTBCADQdAAahAeIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABBh9MEIANBMGoQHiADQfT8CigCADYCICADIAY5AxAgAyAHOQMYIABBptQEIANBEGoQHiADIAE2AgAgAEHAzgMgAxAeIAEQGAsgA0HgAmoQXCADQfACaiQAC+gDAgN/BnwjAEHQAWsiAyQAIAIoAgAhBCACKAIEIgUrAxAhBiADIAUoAgA2ArABIAMgBjkDqAEgAyAENgKgASAAQY/+AyADQaABahAeQfT8CkHw/AooAgBBCWs2AgACfCABKwMAIgYgAi0AMCIEQewARg0AGiAEQfIARgRAIAYgAisDIKEMAQsgBiACKwMgRAAAAAAAAOC/oqALIQYgACsD8AMhByAAKwOABCEIIAErAwghCSAAKwPoAyEKIAArA/gDIQsgA0H4AGoiASAAKAIQQRBqQSgQHxogAUMAAAAAELwDIQEgA0IANwPIASADQgA3A8ABIAIoAgQoAgAhBCACKAIAIQUgA0IANwNwIANCgICAgICAgOg/NwNoIAMgBTYCZCADIAQ2AmAgA0HAAWoiBEGX3AMgA0HgAGoQdCADIAIoAgQrAxAgACsD6AOiOQNQIARB7KUEIANB0ABqEHQgA0FAayAAKALoArK7OQMAIANCADcDOCADQgA3AzAgBEGH0wQgA0EwahB0IANB9PwKKAIANgIgIAMgCiAGIAugojkDECADIAcgCSAIoKI5AxggBEGm1AQgA0EQahB0IAMgATYCACAEQcDOAyADEHQgACAEEP8FEBsaIAQQXCABEBggA0HQAWokAAscACAAQYmyBBAbGkHw/ApB8PwKKAIAQQVqNgIACxwAIABB97EEEBsaQfD8CkHw/AooAgBBBWs2AgALCwAgAEGitAQQGxoLLQEBfyMAQRBrIgEkACABIAAoAhAoAggQITYCACAAQZyBBCABEB4gAUEQaiQACwsAIABB84cEEBsaCxwAIABB3ocEEBsaQfD8CkHw/AooAgBBAms2AgALCwAgAEHYswQQGxoLCwAgAEHGswQQGxoLpgICB38BfiMAQTBrIgQkACAEQQxqQQBBJBA4GiAEIAE2AhwgACABEG4hAgNAIAIEQCAAIAIgARByIAAgAkEAEM4IIQIMAQsLIAEpAwghCkEAIQFBACEDAkAgACgCMCICBEAgCqchBSACKAIAIgYEQEEBIAIoAgh0IQMLIANBAWshBwNAIAEgA0YNAgJAAkAgBiABIAVq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b3BlbkF0dHJpYnV0ZUVudGl0aWVzID09IG9wZW5FbnRpdHkAaW5maW5pdHkAbGlzdC0+c2l6ZSA8IGxpc3QtPmNhcGFjaXR5AHJldC5zaXplIDwgcmV0LmNhcGFjaXR5AGZhbnRhc3kAL3N2Zy9pdm9yeQBvdXQgb2YgbWVtb3J5AEZlYnJ1YXJ5AEphbnVhcnkAZ3ZwbHVnaW5fZG90X2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9uZWF0b19sYXlvdXRfTFRYX2xpYnJhcnkAZ3ZwbHVnaW5fY29yZV9MVFhfbGlicmFyeQBnYXRoZXJfdGltZV9lbnRyb3B5AGNvcHkAYWxiYW55AEp1bHkAU3BhcnNlTWF0cml4X211bHRpcGx5AGVxdWFsbHkAYXNzZW1ibHkAc3VtbWVyc2t5AHNoeQBzYXRpc2Z5AGJlYXV0aWZ5AG5vanVzdGlmeQBDbGFzc2lmeQAvc3ZnL2xpZ2h0Z3JleQAvc3ZnL2RpbWdyZXkAL3N2Zy9kYXJrZ3JleQAvc3ZnL2xpZ2h0c2xhdGVncmV5AC9zdmcvZGFya3NsYXRlZ3JleQAvc3ZnL3NsYXRlZ3JleQB3ZWJncmV5AHgxMWdyZXkAL3N2Zy9ncmV5AG1vdmUgdG8gZnJvbnQgbG9jayBpbmNvbnNpc3RlbmN5AGV4dHJhY3RfYWRqYWNlbmN5AG1lcmdlX29uZXdheQBhcnJheQBhbGxvY0FycmF5AC9zdmcvbGlnaHRncmF5AC9zdmcvZGltZ3JheQAvc3ZnL2RhcmtncmF5AC9zdmcvbGlnaHRzbGF0ZWdyYXkAL3N2Zy9kYXJrc2xhdGVncmF5AC9zdmcvc2xhdGVncmF5AHdlYmdyYXkAeDExZ3JheQAvc3ZnL2dyYXkAVGh1cnNkYXkAVHVlc2RheQBXZWRuZXNkYXkAU2F0dXJkYXkAU3VuZGF5AE1vbmRheQBGcmlkYXkATWF5AC4uLy4uL2xpYi9jZ3JhcGgvZ3JhbW1hci55ACVtLyVkLyV5AHBvcnRob3l4AHBvcnRob195eAB4eHgAcHgAYm94AHZpZXdCb3gAY2hrQm91bmRCb3gAL01lZGlhQm94AGdldF9lZGdlX2xhYmVsX21hdHJpeABpZGVhbF9kaXN0YW5jZV9tYXRyaXgAbXVzdCBub3QgdW5kZWNsYXJlIHByZWZpeAB1bmJvdW5kIHByZWZpeABodG1sbGV4AG1heAAjJTAyeCUwMnglMDJ4ACMlMnglMnglMnglMngAIyUxeCUxeCUxeAAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AHJhcnJvdwBsYXJyb3cASGVsdmV0aWNhLU5hcnJvdwBhcnJvd19sZW5ndGhfY3JvdwAvc3ZnL3Nub3cAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX3Nsb3cAL3N2Zy9saWdodHllbGxvdwAvc3ZnL2dyZWVueWVsbG93AC9zdmcvbGlnaHRnb2xkZW5yb2R5ZWxsb3cAL3N2Zy95ZWxsb3cAZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdwBmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93AGNvdXJpZXJuZXcAU3ByaW5nU21vb3RoZXJfbmV3AFRyaWFuZ2xlU21vb3RoZXJfbmV3AGRpYWdfcHJlY29uX25ldwBRdWFkVHJlZV9uZXcAU3RyZXNzTWFqb3JpemF0aW9uU21vb3RoZXIyX25ldwBuICYmIG5ldwBza2V3AHN0cnZpZXcAL3N2Zy9ob25leWRldwAgLWFuY2hvciB3AHNvcnR2AHBvdjpwb3YATm92AGludgBlcXVpdgBwaXYAbm9uYW1lLmd2AEdEX3JhbmsoZylbcl0uYXYgPT0gR0RfcmFuayhnKVtyXS52AGNjJXNfJXp1AGNjJXMrJXp1AC9zdmcvcGVydQBudQBtdQAlYyVsbHUAVGh1AHRhdQBUYXUATnUATXUAX3BvcnRfJXNfKCVkKV8oJWQpXyV1AE51bWJlciBvZiBpdGVyYXRpb25zID0gJXUATnVtYmVyIG9mIGluY3JlYXNlcyA9ICV1AHBsYWludGV4dABzdHJlc3N3dABpbnB1dAB0ZXh0bGF5b3V0AGRvdF9sYXlvdXQAbmVhdG9fbGF5b3V0AGluaXRMYXlvdXQAY2x1c3QAbWFwQ2x1c3QAbGFiZWxqdXN0AHNjQWRqdXN0AEF1Z3VzdABlZGdlc2ZpcnN0AG5vZGVzZmlyc3QAbWF4aW1hbF9pbmRlcGVuZGVudF9lZGdlX3NldF9oZWF2ZXN0X2VkZ2VfcGVybm9kZV9zdXBlcm5vZGVzX2ZpcnN0AGV4aXN0AHJlYWxpZ25Ob2RlbGlzdABhcHBlbmROb2RlbGlzdABzbG90X2Zyb21fY29uc3RfbGlzdABzbG90X2Zyb21fbGlzdABkZWZhdWx0ZGlzdABtaW5kaXN0AHBvd2VyX2Rpc3QAZ3JhcGhfZGlzdABhdmdfZGlzdABnZXRFZGdlTGlzdABpcXVlc3QAbG93YXN0AHNwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZ19mYXN0AGd2X3NvcnQAdmlld3BvcnQAdGFpbHBvcnQAdW5leHBlY3RlZCBwYXJzZXIgc3RhdGUgLSBwbGVhc2Ugc2VuZCBhIGJ1ZyByZXBvcnQAaGVhZHBvcnQAaHRtbF9wb3J0AGluc2VydABSVHJlZUluc2VydABmaW5kU1ZlcnQAc3RhcnQAcGFydABlc3RpbWF0ZV90ZXh0X3dpZHRoXzFwdABxdW90AH9yb290AG5vdABtYWtlX3ZuX3Nsb3QAZW1pdF94ZG90AHhkb3Q6eGRvdABlcHM6eGRvdABzdmc6eGRvdABqcGc6eGRvdABwbmc6eGRvdABqcGVnOnhkb3QAZ2lmOnhkb3QAanBlOnhkb3QAeGRvdDEuNDp4ZG90AHhkb3QxLjI6eGRvdABzZG90AG1pZGRvdABndjpkb3QAcGxhaW4tZXh0OmRvdABkb3Q6ZG90AGVwczpkb3QAY2Fub246ZG90AHBsYWluOmRvdABzdmc6ZG90AGpwZzpkb3QAcG5nOmRvdABqcGVnOmRvdABnaWY6ZG90AGpwZTpkb3QAf2JvdABkb0RvdABzcGFuLT5mb250AHZhZ3hicHJpbnQAZW5kcG9pbnQAeGRvdF9wb2ludABkZWNpZGVfcG9pbnQAVW5zYXRpc2ZpZWQgY29uc3RyYWludAB0cmFuc3BhcmVudABjb21wb25lbnQAaW52YWxpZCBhcmd1bWVudABjb21tZW50AGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudABjZW50AGkgPT0gZWNudABhcmlhbG10AGdldF9oYXNoX3NlY3JldF9zYWx0AGNpcmN1aXQAcG9seV9pbml0AE11bHRpbGV2ZWxfaW5pdABuc2xpbWl0AG1jbGltaXQAUG9ydHJhaXQAbGlnaHQAdmlydHVhbF93ZWlnaHQAbGhlaWdodABLUF9SaWdodABCb29rbWFuLUxpZ2h0AGd0AEtQX0xlZnQAY2hhcnNldABpbnNldABiaXRhcnJheV9yZXNldABndl9hcmVuYV9yZXNldABzdWJzZXQAYml0YXJyYXlfc2V0AG1hdHJpeF9zZXQAc2NhcmxldAAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9ibHVldmlvbGV0AC9zdmcvdmlvbGV0AFRyZWJ1Y2hldABhZ3hnZXQAdGFpbHRhcmdldABsYWJlbHRhcmdldABlZGdldGFyZ2V0AGhlYWR0YXJnZXQAYml0YXJyYXlfZ2V0AHN0eWxlc2hlZXQAc3RyaWN0AGFnY29weWRpY3QAYWdtYWtlZGF0YWRpY3QAcmVjLT5kaWN0ID09IGRhdGFkaWN0AHdyaXRlX2RpY3QAaGludGVyc2VjdABndmJpc2VjdABlbmNvZGluZyBzcGVjaWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdABhc3BlY3QAbGF5ZXJzZWxlY3QAS1BfU3VidHJhY3QAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2ludGVyYWN0AGNvbXBhY3QAT2N0AHJlcXVlc3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdABsYWJlbGZsb2F0AGxhYmVsX2Zsb2F0AFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfZm9ybWF0AC9zdmcvd2hlYXQAbW9uY2hhaW5zX2F0AFNhdABBZ3JhcGhpbmZvX3QAQWdlZGdlaW5mb190AEFnbm9kZWluZm9fdABcdAByb3cgPCBtZS0+bnJvd3MAbWludXMAb3BsdXMAcmFkaXVzAGhlYXJ0cwBzYW1wbGVwb2ludHMAZGlyZWRnZWNvbnN0cmFpbnRzAGxldmVsIGFzc2lnbm1lbnQgY29uc3RyYWludHMAeHkgcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAeXggcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAeHkgb3J0aG9nb25hbCBjb25zdHJhaW50cwB5eCBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAGxpbmUgc2VnbWVudHMAc2V0X2NlbGxfaGVpZ2h0cwByZWN0cwBhY2NvdW50aW5nUmVwb3J0U3RhdHMAZW50aXR5VHJhY2tpbmdSZXBvcnRTdGF0cwBaYXBmRGluZ2JhdHMAcmVtaW5jcm9zcwBjb21wcmVzcwBndnVzZXJzaGFwZV9maWxlX2FjY2VzcwBicmFzcwBjbGFzcwBhcHBseWF0dHJzAGFnbWFrZWF0dHJzAGJpbmRhdHRycwBwYXJzZV9sYXllcnMAbWtDbHVzdGVycwByb3VuZF9jb3JuZXJzAG1ha2VfYmFycmllcnMAY2RhdGEubnRvcGxldmVsID09IGFnbm5vZGVzKGcpIC0gY2RhdGEubnZhcnMAY2Fubm90IHJlYWxsb2Mgb3BzAGNhbm5vdCByZWFsbG9jIHBubHBzAGVwcwBjb3JlX2xvYWRpbWFnZV9wcwBlcHM6cHMAcHMyOnBzAChsaWIpOnBzAGd2X3RyaW1femVyb3MAYWd4YnVmX3RyaW1femVyb3MAdGV4Z3lyZWhlcm9zAGltYWdlcG9zAHRpbm9zAHNldEVkZ2VMYWJlbFBvcwBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zAHhsaW50ZXJzZWN0aW9ucwBjb2x1bW5zAGRlamF2dXNhbnMAbmltYnVzc2FucwBsaWJlcmF0aW9uc2FucwBmcmVlc2FucwBzZXRDaGlsZFN1YnRyZWVTcGFucwBPcGVuU2FucwBvZmZzZXQgPT0gbl90ZXJtcwBkaXRlbXMAZGlhbXMAY29sIDwgbWUtPm5jb2xzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgcG5scwBsZXZlbHMAZm9yY2VsYWJlbHMAZGlhZ29uYWxzAG1lcmdlX3JhbmtzAHNwbGl0QmxvY2tzAGludmlzAGNhbm5vdCByZWFsbG9jIHRyaXMAc2V0X2NlbGxfd2lkdGhzAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzAHllcwBzaG93Ym94ZXMAYmVhdXRpZnlfbGVhdmVzAGF0dGFjaF9lZGdlX2xhYmVsX2Nvb3JkaW5hdGVzAHBvbHlsaW5lcwBzcGxpbmVzAG9ydGhvZ29uYWwgbGluZXMAdGV4Z3lyZXRlcm1lcwBvdGltZXMAVGltZXMAZm9udG5hbWVzAHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAHBlcmlwaGVyaWVzAEdldEJyYW5jaGVzAGYgPCBncmFwaFtqXS5uZWRnZXMAbWlubWF4X2VkZ2VzAGV4Y2hhbmdlX3RyZWVfZWRnZXMAbWFrZVN0cmFpZ2h0RWRnZXMAdW5kb0NsdXN0ZXJFZGdlcwBjb21wb3VuZEVkZ2VzAG1lcmdlX3RyZWVzAF9fY2x1c3Rlcm5vZGVzAGFnbm5vZGVzAE5EX2lkKG5wKSA9PSBuX25vZGVzAExvYWROb2RlcwBzaWRlcwBzcGFkZXMAdmVydGljZXMAY29vcmRzAHNldGJvdW5kcwBtZHMAY2RzAG1ha2VTZWxmQXJjcwBlbWl0X2VkZ2VfZ3JhcGhpY3MAY2x1YnMAY29uc29sYXMAJWxmJTJzAApTdHJpbmcgc3RhcnRpbmc6PCUuODBzAApTdHJpbmcgc3RhcnRpbmc6IiUuODBzACAlLipzACVzJXMAZXhwYXQ6IEFjY291bnRpbmcoJXApOiBEaXJlY3QgJTEwbGx1LCBpbmRpcmVjdCAlMTBsbHUsIGFtcGxpZmljYXRpb24gJTguMmYlcwAlLipzJWMlcwAgJXM6JXMAX18lZDolcwAvJXMvJXMAJXMtJXMALCVzACBmb250LWZhbWlseT0iJXMAIiBzdHJva2UtZGFzaGFycmF5PSIlcwAiIGNsYXNzPSIlcwBwb2x5ICVzACgoJWYsJWYpLCglZiwlZikpICVzICVzAGNvbG9yICVzAHJvb3QgPSAlcwAgVGl0bGU6ICVzACJzdHJpY3QiOiAlcwBjb3VyAHV0cgBhcHBlbmRhdHRyAGFkZGF0dHIAYmVnaW5zdHIAZnN0cgBzdHJ2aWV3X3N0cgBwb3ZfY29sb3JfYXNfc3RyAHZwc2MhPW51bGxwdHIAYmVuZFRvU3RyAHVhcnIAY3JhcnIAbGFycgBoYXJyAGRhcnIAdUFycgByQXJyAGxBcnIAaEFycgBkQXJyAEFwcgBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfdmVjdG9yAHRlcm1pbmF0b3IAaW5zdWxhdG9yAGludGVybmFsRW50aXR5UHJvY2Vzc29yAHRleGd5cmVjdXJzb3IAc3ludGF4IGVycm9yAG1vbmV5X2dldCBlcnJvcgBFcnJvcgByZmxvb3IAbGZsb29yAGxhYmVsZm9udGNvbG9yAHBlbmNvbG9yAGZpbGxjb2xvcgBiZ2NvbG9yAHJvdyBtYWpvcgBjb2x1bW4gbWFqb3IAbmVpZ2hib3IAc3R5bGVfb3IAbXIAcmFua2RpcgBwYWdlZGlyAGxheWVyAHVwcGVyID49IGxvd2VyAE5vZGVDb3ZlcgAvc3ZnL3NpbHZlcgBjbHVzdGVyAGV4cGFuZENsdXN0ZXIAcnByb21vdGVyAGxwcm9tb3RlcgBjZW50ZXIAbWF4aXRlcgBwYXJ0aWFsIGNoYXJhY3RlcgAhIHJvb3RQYXJzZXItPm1fcGFyZW50UGFyc2VyAGRrZ3JlZW5jb3BwZXIAY29vbGNvcHBlcgBndl9zb3J0X2NvbXBhcl93cmFwcGVyAHRhcGVyAG92ZXJsYXBfYmV6aWVyAGZpZ19iZXppZXIAY291cmllcgBDb3VyaWVyAGhpZXIAZGFnZ2VyAERhZ2dlcgBvdXRwdXRvcmRlcgBwb3N0b3JkZXIAZmxhdF9yZW9yZGVyAGNlbGxib3JkZXIAZml4TGFiZWxPcmRlcgBjeWxpbmRlcgAvc3ZnL2xhdmVuZGVyAHJlbmRlcgBmb2xkZXIAY2x1c3Rlcl9sZWFkZXIATkRfVUZfc2l6ZShuKSA8PSAxIHx8IG4gPT0gbGVhZGVyAE9jdG9iZXIAcmVmZXJlbmNlIHRvIGludmFsaWQgY2hhcmFjdGVyIG51bWJlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAbWFjcgBicgBzdGFyAGZlbGRzcGFyAHJlZ3VsYXIAaW9zX2Jhc2U6OmNsZWFyAGJydmJhcgBNYXIAXHIATkRfcmFuayh2KSA9PSByAHN0cmVxAHN0cnZpZXdfZXEAc3Rydmlld19zdHJfZXEAc3Rydmlld19jYXNlX3N0cl9lcQBzdHJ2aWV3X2Nhc2VfZXEAdnAAJSVCZWdpblByb2xvZwovRG90RGljdCAyMDAgZGljdCBkZWYKRG90RGljdCBiZWdpbgoKL3NldHVwTGF0aW4xIHsKbWFyawovRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgogRW5jb2RpbmdWZWN0b3IgMAoKSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKCiUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwovc3Rhcm5ldElTTyB7CiAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCiAgICAgICAgfSBmb3JhbGwKICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCiAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKfSBkZWYKL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCi9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCmNsZWFydG9tYXJrCn0gYmluZCBkZWYKCiUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgoKL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKL3NldF9zY2FsZSB7CiAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKICAgICAgIHNjYWxlCn0gYmluZCBkZWYKCiUgc3R5bGVzCi9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCi9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCi9maWxsZWQgeyB9IGJpbmQgZGVmCi91bmZpbGxlZCB7IH0gYmluZCBkZWYKL3JvdW5kZWQgeyB9IGJpbmQgZGVmCi9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCi90YXBlcmVkIHsgfSBiaW5kIGRlZgoKJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCi9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCgovYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCgkvbnBhZ2VzIGV4Y2ggZGVmCgkvaiBleGNoIGRlZgoJL2kgZXhjaCBkZWYKCS9zdHIgMTAgc3RyaW5nIGRlZgoJbnBhZ2VzIDEgZ3QgewoJCWdzYXZlCgkJCWNvb3JkZm9udCBzZXRmb250CgkJCTAgMCBtb3ZldG8KCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdwoJCWdyZXN0b3JlCgl9IGlmCn0gYmluZCBkZWYKCi9zZXRfZm9udCB7CglmaW5kZm9udCBleGNoCglzY2FsZWZvbnQgc2V0Zm9udAp9IGRlZgoKJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAovYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAoJL3RleHQgZXhjaCBkZWYKCS93aWR0aCBleGNoIGRlZgoJZ3NhdmUKCQl3aWR0aCAwIGd0IHsKCQkJW10gMCBzZXRkYXNoCgkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKCQl9IGlmCglncmVzdG9yZQp9IGRlZgoKL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQoJCTQgMiByb2xsCgkJbW92ZXRvCgkJMiBjb3B5CgkJZXhjaCAwIHJsaW5ldG8KCQkwIGV4Y2ggcmxpbmV0bwoJCXBvcCBuZWcgMCBybGluZXRvCgkJY2xvc2VwYXRoCn0gYmluZCBkZWYKCi9lbGxpcHNlX3BhdGggewoJL3J5IGV4Y2ggZGVmCgkvcnggZXhjaCBkZWYKCS95IGV4Y2ggZGVmCgkveCBleGNoIGRlZgoJbWF0cml4IGN1cnJlbnRtYXRyaXgKCW5ld3BhdGgKCXggeSB0cmFuc2xhdGUKCXJ4IHJ5IHNjYWxlCgkwIDAgMSAwIDM2MCBhcmMKCXNldG1hdHJpeAp9IGJpbmQgZGVmCgovZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKL3Nob3dwYWdlIHsgfSBkZWYKCi9sYXllcmNvbG9yc2VxCglbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CgkJWzAgMCAwXQoJCVsuMiAuOCAuOF0KCQlbLjQgLjggLjhdCgkJWy42IC44IC44XQoJCVsuOCAuOCAuOF0KCV0KZGVmCgovbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCgovc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAoJYWxvYWQgcG9wIHNldGhzYmNvbG9yCgkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgp9IGJpbmQgZGVmCgovb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKCi9vbmxheWVycyB7CgkvbXl1cHBlciBleGNoIGRlZgoJL215bG93ZXIgZXhjaCBkZWYKCWN1cmxheWVyIG15bG93ZXIgbHQKCWN1cmxheWVyIG15dXBwZXIgZ3QKCW9yCgl7aW52aXN9IGlmCn0gZGVmCgovY3VybGF5ZXIgMCBkZWYKCiUlRW5kUmVzb3VyY2UKJSVFbmRQcm9sb2cKJSVCZWdpblNldHVwCjE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKJSAvYXJyb3dsZW5ndGggMTAgZGVmCiUgL2Fycm93d2lkdGggNSBkZWYKCiUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgovcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKMiBsdCB7CiAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CiAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cn0gaWYKCiUlRW5kU2V0dXAAc3VwAGdyb3VwAGN1cAB0aGluc3AAZW5zcABlbXNwAG5ic3AAcGVycAB3ZWllcnAAZ2VuZXJhdGUtY29uc3RyYWludHMuY3BwAGJsb2NrLmNwcABjc29sdmVfVlBTQy5jcHAAf3RvcABwcm9wAGFneGJwb3AAbm9wAGFzeW1wAGNvbXAAZmluZENDb21wAGJtcABzY2FsZV9jbGFtcAB4bHAAbHAgIT0gY2xwAHRhaWxfbHAAaGVhZF9scAB0YWlsdG9vbHRpcABsYWJlbHRvb2x0aXAAZWRnZXRvb2x0aXAAaGVhZHRvb2x0aXAAaGVsbGlwAHRhaWxjbGlwAGhlYWRjbGlwAC9zdmcvcGFwYXlhd2hpcABocAB0cmFuc3Bvc2Vfc3RlcABjb21wdXRlU3RlcABsYXllcmxpc3RzZXAAbGF5ZXJzZXAAaXBzZXAAcmFua3NlcABub2Rlc2VwAHN1YmdyYXBocyBuZXN0ZWQgbW9yZSB0aGFuICVkIGRlZXAAU2VwAHNmZHAAY3AAd2VicABpZG1hcABjbHVzdGVyX21hcABjbWFweDptYXAAZXBzOm1hcABjbWFweF9ucDptYXAAaW1hcF9ucDptYXAAaXNtYXA6bWFwAGltYXA6bWFwAGNtYXA6bWFwAHN2ZzptYXAAanBnOm1hcABwbmc6bWFwAGpwZWc6bWFwAGdpZjptYXAAanBlOm1hcABvdmVybGFwAGxldmVsc2dhcABjYXAAS1BfVXAAJUk6JU06JVMgJXAAc3RhcnQgPD0gcAByc3F1bwBsc3F1bwByZHF1bwBsZHF1bwBiZHF1bwBzYnF1bwByc2FxdW8AbHNhcXVvAHJhcXVvAGxhcXVvAGF1dG8ATnVuaXRvAC9zdmcvdG9tYXRvAG5lYXRvAGV1cm8AL3N2Zy9nYWluc2Jvcm8ATWV0aG9kWmVybwBtaWNybwBuaW1idXNtb25vAGxpYmVyYXRpb25tb25vAGZyZWVtb25vAGFyaW1vAHJhdGlvAHBvcnRobwByaG8AUmhvAC9zdmcvaW5kaWdvAHBpbmZvAGNjZ3JhcGhpbmZvAGNjZ25vZGVpbmZvAGNsX2VkZ2VfaW5mbwBnZXRQYWNrSW5mbwBtYWtlSW5mbwBwYXJzZVBhY2tNb2RlSW5mbwBjaXJjbwBpY28AXCUwM28AL3N2Zy9yb3N5YnJvd24AL3N2Zy9zYW5keWJyb3duAHZlcnlkYXJrYnJvd24AL3N2Zy9zYWRkbGVicm93bgAvc3ZnL2Jyb3duAEtQX0Rvd24AY2Fubm90IGNoYW5nZSBzZXR0aW5nIG9uY2UgcGFyc2luZyBoYXMgYmVndW4AU3VuAEp1bgB0aG9ybgAvc3ZnL2NyaW1zb24AeGRvdF9qc29uAHhkb3RfanNvbjpqc29uAGpzb24wOmpzb24Ab21pY3JvbgBPbWljcm9uAHNjYXJvbgBTY2Fyb24Ad2VibWFyb29uAHgxMW1hcm9vbgAvc3ZnL21hcm9vbgAvc3ZnL2xpZ2h0c2FsbW9uAC9zdmcvZGFya3NhbG1vbgAvc3ZnL3NhbG1vbgB1cHNpbG9uAGVwc2lsb24AVXBzaWxvbgBFcHNpbG9uAHJlc29sdXRpb24AZGlzdG9ydGlvbgBzdGQ6OmV4Y2VwdGlvbgBwYXJ0aXRpb24AZG90X3Bvc2l0aW9uAFNldHRpbmcgdXAgc3RyZXNzIGZ1bmN0aW9uAHVuY2xvc2VkIENEQVRBIHNlY3Rpb24AcG9zdGFjdGlvbgByb3RhdGlvbgBvcmllbnRhdGlvbgBhYm9taW5hdGlvbgBhY2NvdW50aW5nR2V0Q3VycmVudEFtcGxpZmljYXRpb24AeGRvdHZlcnNpb24AU1RzZXRVbmlvbgA8cG9seWdvbgBoZXhhZ29uAHNlcHRhZ29uAHBlbnRhZ29uAHRyaXBsZW9jdGFnb24AZG91Ymxlb2N0YWdvbgAvc3ZnL2xlbW9uY2hpZmZvbgBNb24AcGx1c21uAG5vdGluAGlzaW4AL3N2Zy9tb2NjYXNpbgBwaW4AbWluAHZvcm9fbWFyZ2luAGluZmluAG9uZWRfb3B0aW1pemVyX3RyYWluAHBsYWluAG1ha2VfY2hhaW4AbWVyZ2VfY2hhaW4AZGVsZXRlTWluAGZpbmRNaW4AdmFsaWduAGJhbGlnbgB5ZW4ATXVsdGlsZXZlbF9jb2Fyc2VuAGN1cnJlbgBQb2Jzb3BlbgBndl9mb3BlbgBndnVzZXJzaGFwZV9vcGVuAGVudGl0eVRyYWNraW5nT25PcGVuAC9zdmcvbGluZW4AZGltZW4AbWlubGVuAHN0eWxlX3Rva2VuAHVuY2xvc2VkIHRva2VuAC9zdmcveWVsbG93Z3JlZW4AbWVkaXVtZm9yZXN0Z3JlZW4AL3N2Zy9mb3Jlc3RncmVlbgAvc3ZnL2xpZ2h0Z3JlZW4AaHVudGVyc2dyZWVuAC9zdmcvbGF3bmdyZWVuAC9zdmcvZGFya2dyZWVuAC9zdmcvbWVkaXVtc3ByaW5nZ3JlZW4AL3N2Zy9zcHJpbmdncmVlbgAvc3ZnL2RhcmtvbGl2ZWdyZWVuAC9zdmcvbGltZWdyZWVuAC9zdmcvcGFsZWdyZWVuAHdlYmdyZWVuAC9zdmcvbGlnaHRzZWFncmVlbgAvc3ZnL21lZGl1bXNlYWdyZWVuAC9zdmcvZGFya3NlYWdyZWVuAC9zdmcvc2VhZ3JlZW4AeDExZ3JlZW4AL3N2Zy9ncmVlbgBHcmVlbgAvc3ZnL2xpZ2h0Y3lhbgAvc3ZnL2RhcmtjeWFuAC9zdmcvY3lhbgBuZXd0YW4AZGFya3RhbgAvc3ZnL3RhbgByb3dzcGFuAGNvbHNwYW4AbmFuAHRpbWVzbmV3cm9tYW4AbmltYnVzcm9tYW4AdGltZXNyb21hbgBUaW1lcy1Sb21hbgBQYWxhdGluby1Sb21hbgBOZXdDZW50dXJ5U2NobGJrLVJvbWFuAEphbgBHRF9yYW5rKGcpW3JdLm4gPD0gR0RfcmFuayhnKVtyXS5hbgBhZ3hicHV0X24AXG4Abl9ub2RlcyA9PSBncmFwaC0+bgBBLT5tID09IEEtPm4Aam9iLT5vYmotPnUubgBuemMgPT0gKHNpemVfdCluAHMsJWxmLCVsZiVuACBlLCVsZiwlbGYlbgAlZCAlMVsiXSVuAHYgPT0gbgBiID09IG4AbmNsdXN0ZXIgPD0gbgBwc3ltAGFsZWZzeW0AdGhldGFzeW0AcXVhbnR1bQBzdW0AL3N2Zy9wbHVtAGludnRyYXBleml1bQBtZWRpdW0AOTpwcmlzbQBscm0AY3VzdG9tAGFwdHItPnRhZyA9PSBUX2F0b20AL2Rldi91cmFuZG9tAGd2X3JhbmRvbQBtbQBybG0Ac2ltAElNRFNfZ2l2ZW5fZGltAG9yZG0AY20AcGFyYWxsZWxvZ3JhbQAvc3ZnL21pbnRjcmVhbQBKdWwAdGwAZnJhc2wAU3ltYm9sAGZpbmRDb2wAPD94bWwAeXVtbAB1dW1sAG91bWwAaXVtbABldW1sAGF1bWwAWXVtbABVdW1sAE91bWwASXVtbABFdW1sAEF1bWwAY29yZV9sb2FkaW1hZ2VfdnJtbABqcGc6dnJtbABwbmc6dnJtbABqcGVnOnZybWwAZ2lmOnZybWwAanBlOnZybWwAYnVsbABmaWxsAC9zdmcvc2Vhc2hlbGwAZm9yYWxsAEFwcmlsAHBlcm1pbAByY2VpbABsY2VpbABjY2VkaWwAQ2NlZGlsAGFycm93dGFpbABsdGFpbABzYW1ldGFpbABsZXZlbCA+PSAwICYmIGxldmVsIDw9IG4tPmxldmVsAHN0cmVzc19tYWpvcml6YXRpb25fa0RfbWtlcm5lbABpc19wYXJhbGxlbABDYWxjdWxhdGluZyBjaXJjdWl0IG1vZGVsAENhbGN1bGF0aW5nIHN1YnNldCBtb2RlbABDYWxjdWxhdGluZyBNRFMgbW9kZWwAeGxhYmVsAHRhaWxsYWJlbABoZWFkbGFiZWwAZ3JhcGggbGFiZWwAaWV4Y2wAb2JqcC0+bGJsAG92YWwAbWVyZ2V2aXJ0dWFsAC9zdmcvbGlnaHRjb3JhbAAvc3ZnL2NvcmFsAFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfYXJyYXlzX2ludGVybmFsAE11bHRpbGV2ZWxfY29hcnNlbl9pbnRlcm5hbABRdWFkVHJlZV9hZGRfaW50ZXJuYWwAYXJyb3dfbGVuZ3RoX25vcm1hbABhcmlhbAByYWRpYWwAL3N2Zy90ZWFsAHJlYWwAbG9jYWwAZXN0aW1hdGVfY2hhcmFjdGVyX3dpZHRoX2Nhbm9uaWNhbABnbG9iYWwAcS0+bAAuLi8uLi9saWIvY2dyYXBoL3NjYW4ubAB0azp0awBnaWY6dGsAcGF0Y2h3b3JrAHRvawBib29rAEF2YW50R2FyZGUtQm9vawBzaW5rAG92ZXJsYXBfc2hyaW5rAHNwaWN5cGluawAvc3ZnL2hvdHBpbmsAL3N2Zy9saWdodHBpbmsAL3N2Zy9kZWVwcGluawBuZW9ucGluawAvc3ZnL3BpbmsAbmV3cmFuawBjbHVzdGVycmFuawBfbmV3X3JhbmsAaW5zdGFsbF9pbl9yYW5rAHJlbW92ZV9mcm9tX3JhbmsAL3N2Zy9jb3Juc2lsawBvbmVibG9jawB2LT5sZWZ0LT5ibG9jayA9PSB2LT5yaWdodC0+YmxvY2sAL3N2Zy9maXJlYnJpY2sAUFFjaGVjawBwYWNrAC9zdmcvYmxhY2sAQmxhY2sAYmFjawB6d2oAenduagBqb2ItPm9iagBnZXRpbnRyc3hpAHBzaQBQc2kAQ2FsaWJyaQBGcmkAdHdvcGkAZHBpAHZvcm9ub2kAVm9yb25vaQBjaGFuaQBkZW1pAEJvb2ttYW4tRGVtaQBBdmFudEdhcmRlLURlbWkAL3N2Zy9kYXJra2hha2kAL3N2Zy9raGFraQBwaGkAY2hpAFBoaQBDaGkAZGkAWGkAUGkATkRfaWQobnApID09IGkATl9JRFgocHEtPnBxW2ldKSA9PSBpAFN0cmVzc01ham9yaXphdGlvblNtb290aGVyX3Ntb290aABTcHJpbmdTbW9vdGhlcl9zbW9vdGgAYm90aABzdGFydHN3aXRoAGxpbmVsZW5ndGgAYmFkX2FycmF5X25ld19sZW5ndGgAYXZlcmFnZV9lZGdlX2xlbmd0aABldGgAcGVud2lkdGgAbHdpZHRoAHNldGxpbmV3aWR0aABzaG9ydHBhdGgAZm9udHBhdGgAUG9ic3BhdGgAYmVnaW5wYXRoAGltYWdlcGF0aABlbmRwYXRoAHN0cmFpZ2h0X3BhdGgAbWFwX3BhdGgAPHBhdGgAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aAAvc3ZnL2xhdmVuZGVyYmx1c2gAZmxlc2gAb3NsYXNoAE9zbGFzaABkdHN0cmhhc2gAc3RyZGljdF9oYXNoAG5kYXNoAG1kYXNoAGRpZ3JhcGgAc3ViZ3JhcGgAY29uc3RydWN0X2dyYXBoAGNoa1NncmFwaABjbG9zZXN0X3BhaXJzMmdyYXBoAGFnZGVsZXRlIG9uIHdyb25nIGdyYXBoAGNvbm5lY3RHcmFwaAB1cHNpaAAlc2xpbmUtdGhyb3VnaABjaGFuU2VhcmNoAFJUcmVlU2VhcmNoAE1hcmNoAERpc2NvbkJyYW5jaABQaWNrQnJhbmNoAEFkZEJyYW5jaAAuLi8uLi9saWIvdXRpbC9iaXRhcnJheS5oAC4uLy4uL2xpYi91dGlsL3N0cnZpZXcuaAAuLi8uLi9saWIvdXRpbC9zb3J0LmgALi4vLi4vbGliL2NncmFwaC9ub2RlX3NldC5oAC4uLy4uL2xpYi91dGlsL3N0cmVxLmgALi4vLi4vbGliL3V0aWwvc3RhcnRzd2l0aC5oAC4uLy4uL2xpYi91dGlsL2d2X21hdGguaAAuLi8uLi9saWIvdXRpbC9hZ3hidWYuaAAuLi8uLi9saWIvdXRpbC90b2tlbml6ZS5oAC4uLy4uL2xpYi91dGlsL2FsbG9jLmgAYXV4ZwBjb3JlX2xvYWRpbWFnZV9zdmcAc3ZnOnN2ZwBqcGc6c3ZnAHBuZzpzdmcAanBlZzpzdmcAZ2lmOnN2ZwBqcGU6c3ZnAHN2Z19pbmxpbmU6c3ZnAEF1ZwBkb1Byb2xvZwBwb3dlcl9pdGVyYXRpb25fb3J0aG9nAHBuZwBpZGVhbF9kaXN0X3NjaGVtZSB2YWx1ZSB3cm9uZwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwBjb25nAGxibGVuY2xvc2luZwBiYXNpY19zdHJpbmcAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAHNwcmluZwBvcmRlcmluZwBnZW5lcmF0ZVJhbmRvbU9yZGVyaW5nAGFyaW5nAEFyaW5nAERhbXBpbmcAV2FybmluZwBvdmVybGFwX3NjYWxpbmcAeCBhbmQgeSBzY2FsaW5nAG9sZCBzY2FsaW5nAHNtb290aGluZwB1bmtub3duIGVuY29kaW5nAG11bHRpbGV2ZWxfc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nAHNwcmluZ19lbGVjdHJpY2FsX3NwcmluZ19lbWJlZGRpbmcAY2VsbHBhZGRpbmcAY2VsbHNwYWNpbmcAcmFuZwBsYW5nAGZpdmVwb3ZlcmhhbmcAdGhyZWVwb3ZlcmhhbmcAbm92ZXJoYW5nAGVtaXRfaHRtbF9pbWcAbGcAb3JpZwBzemxpZwBvZWxpZwBhZWxpZwBPRWxpZwBBRWxpZwBjb3JlX2xvYWRpbWFnZV9maWcAanBnOmZpZwBwbmc6ZmlnAGZpZzpmaWcAanBlZzpmaWcAZ2lmOmZpZwBqcGU6ZmlnAGVnZwBuZXh0X3NlZwByZWcAanBlZwBpID09IGRlZwBkZwBjZwBjbG9zZXN1YmcAbWlzbWF0Y2hlZCB0YWcAYmV6LT5zZmxhZwBiZXotPmVmbGFnACEqZmxhZwAhZmxhZwA8ZwAlLjVnLCUuNWcsJS41ZywlLjVnACUuNWcgJS41ZwAlZyAlZwBib3hJbnRlcnNlY3RmAGVwc2YAYWdlZGdlc2VxY21wZgBjY3dyb3RhdGVwZgBmbm9mAGluZgBzZWxmAGhhbGYAJWxmJWxmJWxmJWxmACVsZiwlbGYsJWxmLCVsZiwlbGYAJSpmICUqZiAlbGYgJWxmAGxpYmVyYXRpb25zZXJpZgBmcmVlc2VyaWYAc2Fucy1TZXJpZgBnaWYAL3N2Zy9wZWFjaHB1ZmYAcmlmZgBhY2NvdW50aW5nUmVwb3J0RGlmZgAoWG1sQmlnQ291bnQpLTEgLSByb290UGFyc2VyLT5tX2FsbG9jX3RyYWNrZXIuYnl0ZXNBbGxvY2F0ZWQgPj0gYWJzRGlmZgB0YWlsaHJlZgBsYWJlbGhyZWYAZWRnZWhyZWYAaGVhZGhyZWYAb3JkZgBwZGYAc2lnbWFmAFxmACUuMExmACVMZgB1cy0+ZgAlLjAzZgAlcyB0cmFuc21pdCAlLjNmAHJnYjwlOS4zZiwgJTkuM2YsICU5LjNmPiB0cmFuc21pdCAlLjNmACUuMDJmACUuMmYAJS4wZiwlLjBmLCUuMGYsJS4wZgAgJS4wZiwlLjBmACUuMGYgJS4wZiAlLjBmICUuMGYAIiBmaWxsLW9wYWNpdHk9IiVmACIgc3Ryb2tlLW9wYWNpdHk9IiVmAApmaW5hbCBlID0gJWYAYnJvbnplAGFycm93c2l6ZQBsYWJlbGZvbnRzaXplAHNlYXJjaHNpemUAZml4ZWRzaXplAG5vZGVfc2V0X3NpemUAdGV4dHNwYW5fc2l6ZQBzdmdfc2l6ZQBpbmRleCA8IGxpc3QtPnNpemUAY2FwYWNpdHkgPiBkaWN0LT5zaXplAGNhcGFjaXR5ID4gc2VsZi0+c2l6ZQBiei5zaXplAHBvaW50LXNpemUAU0laRV9NQVggLSBzaXplb2Yoc2l6ZV90KSAtIEVYUEFUX01BTExPQ19QQURESU5HID49IHNpemUAbm9ybWFsaXplAEVMaW5pdGlhbGl6ZQBta01hemUAaWN1cnZlAHRyeV9yZXNlcnZlAG5vZGVfc2V0X3JlbW92ZQBzdHJkaWN0X3JlbW92ZQBzb2x2ZQAhdi0+YWN0aXZlAC1hY3RpdmUAZm9udF9pbl9saXN0X3Blcm1pc3NpdmUAL3N2Zy9vbGl2ZQB1Z3JhdmUAb2dyYXZlAGlncmF2ZQBlZ3JhdmUAYWdyYXZlAFVncmF2ZQBPZ3JhdmUASWdyYXZlAEVncmF2ZQBBZ3JhdmUAdHJ1ZQAvc3ZnL2Jpc3F1ZQBvYmxpcXVlAEF2YW50R2FyZGUtQm9va09ibGlxdWUAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAENvdXJpZXItQm9sZE9ibGlxdWUASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUAbmF2eWJsdWUAL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9kZWVwc2t5Ymx1ZQAvc3ZnL3NreWJsdWUAbmV3bWlkbmlnaHRibHVlAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbGlnaHRibHVlAC9zdmcvY2FkZXRibHVlAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9kb2RnZXJibHVlAC9zdmcvcG93ZGVyYmx1ZQBuZW9uYmx1ZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9saWdodHN0ZWVsYmx1ZQAvc3ZnL3N0ZWVsYmx1ZQAvc3ZnL3JveWFsYmx1ZQAvc3ZnL2RhcmtibHVlAHJpY2hibHVlAGxpZ2h0c2xhdGVibHVlAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL3NsYXRlYmx1ZQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2JsdWUAY2FsbFN0b3JlRW50aXR5VmFsdWUAc3RvcmVBdHRyaWJ1dGVWYWx1ZQBCbHVlAG5lYXRvX2VucXVldWUAVHVlAHlhY3V0ZQB1YWN1dGUAb2FjdXRlAGlhY3V0ZQBlYWN1dGUAYWFjdXRlAFlhY3V0ZQBVYWN1dGUAT2FjdXRlAElhY3V0ZQBFYWN1dGUAQWFjdXRlAHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbm90ZQBwcmltZXJzaXRlAHJpYm9zaXRlAHJlc3RyaWN0aW9uc2l0ZQBwcm90ZWFzZXNpdGUAL3N2Zy9naG9zdHdoaXRlAC9zdmcvbmF2YWpvd2hpdGUAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL3doaXRlAFdoaXRlAHBvcF9vYmpfc3RhdGUAcGNwX3JvdGF0ZQBjb25jZW50cmF0ZQBkZWNvcmF0ZQBRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfYWNjdW11bGF0ZQBub3RyYW5zbGF0ZQAvc3ZnL2Nob2NvbGF0ZQBwYXJzZXJDcmVhdGUAZ2VvbVVwZGF0ZQBpbnZob3VzZQAvc3ZnL2NoYXJ0cmV1c2UAWE1MX1BhcnNlADxlbGxpcHNlAGR1c3R5cm9zZQAvc3ZnL21pc3R5cm9zZQBTcGFyc2VNYXRyaXhfdHJhbnNwb3NlAGx1X2RlY29tcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQBTSVpFX01BWCAtIHJvb3RQYXJzZXItPm1fYWxsb2NfdHJhY2tlci5ieXRlc0FsbG9jYXRlZCA+PSBpbmNyZWFzZQBzbG90X2Zyb21fYmFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtb3JlX2NvcmUATXNxdWFyZQBQYWxhdGlubyBMaW5vdHlwZQBBLT50eXBlID09IEItPnR5cGUAc3VwZQBlbGxpcHNlX3RhbmdlbnRfc2xvcGUAZ3ZyZW5kZXJfdXNlcnNoYXBlAG1pdGVyX3NoYXBlAGxhbmRzY2FwZQBMYW5kc2NhcGUASnVuZQBub25lAGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGNvdXNpbmUAL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvYXF1YW1hcmluZQA8cG9seWxpbmUAJXNvdmVybGluZQB1bmRlcmxpbmUAcmVhbGx5cm91dGVzcGxpbmUAUHJvdXRlc3BsaW5lAGxpbmVhcl9zcGxpbmUAYl9zcGxpbmUAb2xpbmUAYWd4YnVmX2lzX2lubGluZQBzdmdfaW5saW5lAHJlZmluZQBwcmltZQBQcmltZQAvc3ZnL2xpbWUAY29sb3JzY2hlbWUAbGFiZWxfc2NoZW1lAHNhbWUAbGFiZWxmb250bmFtZQBVRl9zZXRuYW1lAGZvbnRfbmFtZQBmb250LT5uYW1lAHVzLT5uYW1lAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAc3R5bGUAL3N2Zy90aGlzdGxlAHRpdGxlAC9zdmcvbWVkaXVtcHVycGxlAGRhcmtwdXJwbGUAd2VicHVycGxlAHJlYmVjY2FwdXJwbGUAdmVyeV9saWdodF9wdXJwbGUAbWVkX3B1cnBsZQB4MTFwdXJwbGUAL3N2Zy9wdXJwbGUAc2hhcGVmaWxlAGdyYWRpZW50YW5nbGUAcmVjdGFuZ2xlAFJlY3RhbmdsZQBsYWJlbGFuZ2xlAGludnRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGZzQ3ljbGUAZG91YmxlY2lyY2xlAE1jaXJjbGUAaW52aXNpYmxlAGV4cGF0X2hlYXBfaW5jcmVhc2VfdG9sZXJhYmxlAHRob3JuZGFsZQBpbnB1dHNjYWxlAG9zY2FsZQBpbWFnZXNjYWxlAC9zdmcvd2hpdGVzbW9rZQBtYW5kYXJpbm9yYW5nZQAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9vcmFuZ2UAZXhjaGFuZ2UAL3N2Zy9iZWlnZQBuZXdlZGdlAGRlbGV0ZV9mYXN0X2VkZ2UAZGVsZXRlX2ZsYXRfZWRnZQBhZGRfdHJlZV9lZGdlAHBhdGNod29ya19pbml0X25vZGVfZWRnZQB0d29waV9pbml0X25vZGVfZWRnZQBtYWtlU3RyYWlnaHRFZGdlAG1ha2VTZWxmRWRnZQBtYWtlQ29tcG91bmRFZGdlACF1c2Vfc3RhZ2UAb3NhZ2UAcGFnZQBndmxvYWRpbWFnZQB2ZWUAdGVlAFFVQURfVFJFRV9IWUJSSUQsIHNpemUgbGFyZ2VyIHRoYW4gJWQsIHN3aXRjaCB0byBmYXN0IHF1YWR0cmVlAGZlYXNpYmxlX3RyZWUAbm9kZV9zZXRfZnJlZQBleHBhdF9mcmVlAGd2X2FyZW5hX2ZyZWUAbmV3bm9kZQBpbnN0YWxsbm9kZQBhZ25vZGUAZGVsZXRlX2Zhc3Rfbm9kZQBwYWNrbW9kZQBTcGxpdE5vZGUAb3RpbGRlAG50aWxkZQBhdGlsZGUAT3RpbGRlAE50aWxkZQBBdGlsZGUAZGl2aWRlAHRyYWRlAGdyYXBodml6X25vZGVfaW5kdWNlAHNvdXJjZQByZXB1bHNpdmVmb3JjZQBpbGxlZ2FsIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlAGVycm9yIGluIHByb2Nlc3NpbmcgZXh0ZXJuYWwgZW50aXR5IHJlZmVyZW5jZQByZWN1cnNpdmUgZW50aXR5IHJlZmVyZW5jZQBsYWJlbGRpc3RhbmNlAFRCX2JhbGFuY2UAVEJiYWxhbmNlAGRldmljZQBtb25vc3BhY2UAL3N2Zy9vbGRsYWNlAGZhY2UAc3ViZQAgLWFuY2hvciBlAHMxLT5jb21tX2Nvb3JkPT1zMi0+Y29tbV9jb29yZABNcmVjb3JkAGZvcndhcmQAcHJvZABsaWdodGdvbGRlbnJvZABtZWRpdW1nb2xkZW5yb2QAL3N2Zy9kYXJrZ29sZGVucm9kAC9zdmcvcGFsZWdvbGRlbnJvZAAvc3ZnL2dvbGRlbnJvZAAvc3ZnL2J1cmx5d29vZABsaWdodHdvb2QAbWVkaXVtd29vZABkYXJrd29vZABfYmFja2dyb3VuZABjb21wb3VuZABubyBlbGVtZW50IGZvdW5kAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kAC9zdmcvYmxhbmNoZWRhbG1vbmQAYXJyb3dfbGVuZ3RoX2RpYW1vbmQATWRpYW1vbmQAbm9kZV9zZXRfZmluZABzdHJkaWN0X2ZpbmQAZ3Z1c2Vyc2hhcGVfZmluZABFTGxlZnRibmQAZXhwYW5kAGN1bWJlcmxhbmQAYnJpZ2h0Z29sZABvbGRnb2xkAC9zdmcvZ29sZABib2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZABUaW1lcy1Cb2xkAENvdXJpZXItQm9sZABQYWxhdGluby1Cb2xkAE5ld0NlbnR1cnlTY2hsYmstQm9sZABIZWx2ZXRpY2EtQm9sZAAlMCpsbGQAJSpsbGQAKyVsbGQAbi0+YnJhbmNoW2ldLmNoaWxkACUrLjRsZAAlcyVsZABzb2xpZAAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL2RhcmtvcmNoaWQAL3N2Zy9vcmNoaWQAaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVibGljIGlkAGRpamtzdHJhX3NnZABmaXhlZABjdXJ2ZWQAZGVyaXZlZABkb3R0ZWQAbWVtb3J5IGV4aGF1c3RlZABsb2NhbGUgbm90IHN1cHBvcnRlZABwYXJzaW5nIGFib3J0ZWQAcGFyc2VyIG5vdCBzdGFydGVkAGF0dHJpYnV0ZSBtYWNyb3Mgbm90IGltcGxlbWVudGVkAGFjY291bnRpbmdEaWZmVG9sZXJhdGVkAHJvb3RQYXJzZXItPm1fYWxsb2NfdHJhY2tlci5ieXRlc0FsbG9jYXRlZCA+PSBieXRlc0FsbG9jYXRlZABmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkAGNvbmRlbnNlZAAvc3ZnL21lZGl1bXZpb2xldHJlZAAvc3ZnL3BhbGV2aW9sZXRyZWQASW1wcm9wZXIgJXMgdmFsdWUgJXMgLSBpZ25vcmVkACVzIHZhbHVlICVzIDwgJWQgLSB0b28gc21hbGwgLSBpZ25vcmVkACVzIHZhbHVlICVzID4gJWQgLSB0b28gbGFyZ2UgLSBpZ25vcmVkAC9zdmcvaW5kaWFucmVkAC9zdmcvZGFya3JlZABhIHN1Y2Nlc3NmdWwgcHJpb3IgY2FsbCB0byBmdW5jdGlvbiBYTUxfR2V0QnVmZmVyIGlzIHJlcXVpcmVkAHRhcGVyZWQAL3N2Zy9vcmFuZ2VyZWQAcmVzZXJ2ZWQgcHJlZml4ICh4bWxucykgbXVzdCBub3QgYmUgZGVjbGFyZWQgb3IgdW5kZWNsYXJlZAAvc3ZnL3JlZABzdHJpcGVkAGlsbC1jb25kaXRpb25lZAB1bmRlZmluZWQAbm90IGNvbnN0cmFpbmVkAGxhYmVsYWxpZ25lZAB0ZXh0IGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZABYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAHVuZmlsbGVkAGlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQAdHJpYW5ndWxhdGlvbiBmYWlsZWQAcGFyc2luZyBmaW5pc2hlZABkYXNoZWQAbGltaXQgb24gaW5wdXQgYW1wbGlmaWNhdGlvbiBmYWN0b3IgKGZyb20gRFREIGFuZCBlbnRpdGllcykgYnJlYWNoZWQAd2VkZ2VkAHNpemUgPT0gZnJlZWQAcm91bmRlZABzcGxpbmUgWyUuMDNmLCAlLjAzZl0gLS0gWyUuMDNmLCAlLjAzZl0gaXMgaG9yaXpvbnRhbDsgd2lsbCBiZSB0cml2aWFsbHkgYm91bmRlZABzcGxpbmUgWyUuMDNmLCAlLjAzZl0gLS0gWyUuMDNmLCAlLjAzZl0gaXMgdmVydGljYWw7IHdpbGwgYmUgdHJpdmlhbGx5IGJvdW5kZWQAcGFyc2VyIG5vdCBzdXNwZW5kZWQAcGFyc2VyIHN1c3BlbmRlZABXZWQAUmVkAFNwYXJzZU1hdHJpeF9hZGQAbm9kZV9zZXRfYWRkAHN0cmRpY3RfYWRkAGRkICE9IHBhcmVudF9kZABLUF9BZGQAcGFkAHhsaGR4bG9hZAB4bGhkeHVubG9hZAByZWFkAGFycm93aGVhZABsaGVhZABzYW1laGVhZABib3gzZAAlc18lZABfc3Bhbl8lZABfYmxvY2tfJWQAX3dlYWtfJWQAX2Nsb25lXyVkAC4lZAAlWS0lbS0lZAAlbGYsJWQAJXMgaW4gbGluZSAlZAAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImhlYWQiOiAlZABhZ3hicHV0YwB2cHNjAGNwLT5zcmMAdWNpcmMAb2NpcmMAaWNpcmMAZWNpcmMAYWNpcmMAVWNpcmMAT2NpcmMASWNpcmMARWNpcmMAQWNpcmMAcGMAbGFiZWxsb2MAZXhwYXRfbWFsbG9jAGV4cGF0X3JlYWxsb2MAZ3ZfcmVjYWxsb2MAc3RkOjpiYWRfYWxsb2MAZ3ZfYXJlbmFfYWxsb2MAYmFrZXJzY2hvYwBzZW1pU3dlZXRDaG9jAG1jAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMAQS0+aXNfcGF0dGVybl9zeW1tZXRyaWMAcGljOnBpYwBpdGFsaWMAQm9va21hbi1MaWdodEl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAEJvb2ttYW4tRGVtaUl0YWxpYwBUaW1lcy1Cb2xkSXRhbGljAFBhbGF0aW5vLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBQYWxhdGluby1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMAcmFkaWMAI2ZjZmNmYwByb3V0ZXNwbGluZXM6ICVkIGVkZ2VzLCAlenUgYm94ZXMgJS4yZiBzZWMAOiAlLjJmIHNlYwBsaXN0ZGVscmVjAGxldmVsIGdyYXBoIHJlYwBsZXZlbCBlZGdlIHJlYwBsZXZlbCBub2RlIHJlYwBEZWMAX25lYXRvX2NjAGJjAHZpc2liaWxpdHkuYwBTcGFyc2VNYXRyaXguYwBodG1sbGV4LmMAaW5kZXguYwBzbWFydF9pbmlfeC5jAGd2cmVuZGVyX2NvcmVfcG92LmMAbHUuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAGd2cmVuZGVyX2NvcmVfZG90LmMAY29uc3RyYWludC5jAGRvdGluaXQuYwBuZWF0b2luaXQuYwBwYXRjaHdvcmtpbml0LmMAdHdvcGlpbml0LmMAb3NhZ2Vpbml0LmMAZW1pdC5jAGZsYXQuYwBhcnJvd3MuYwBtaW5jcm9zcy5jAHN0cmVzcy5jAHBvc3RfcHJvY2Vzcy5jAGNjb21wcy5jAG5zLmMAdXRpbHMuYwB4bGFiZWxzLmMAc2hhcGVzLmMAZG90c3BsaW5lcy5jAG5lYXRvc3BsaW5lcy5jAGNsdXN0ZXJlZGdlcy5jAGhlZGdlcy5jAGF0dHIuYwByZWZzdHIuYwBmYXN0Z3IuYwBjbHVzdGVyLmMAdGFwZXIuYwBndnJlbmRlci5jAHNwbGl0LnEuYwBjb21wLmMAZ3ZyZW5kZXJfY29yZV9tYXAuYwBoZWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwYXJ0aXRpb24uYwBwb3NpdGlvbi5jAGd2X2ZvcGVuLmMAdGV4dHNwYW4uYwBnZW9tLmMAcmFuZG9tLmMAcm91dGVzcGwuYwB4bWwuYwBNdWx0aWxldmVsLmMAc3ByaW5nX2VsZWN0cmljYWwuYwBndnJlbmRlcl9jb3JlX3RrLmMAcmFuay5jAHBhY2suYwBkdHN0cmhhc2guYwBncmFwaC5jAGd2cmVuZGVyX2NvcmVfc3ZnLmMAZ3ZyZW5kZXJfY29yZV9maWcuYwBzdHVmZi5jAG1hemUuYwBzcGFyc2Vfc29sdmUuYwByb3V0ZS5jAHdyaXRlLmMAY29seGxhdGUuYwB4bWxwYXJzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGFyZW5hLmMAZlBRLmMAY2xhc3MyLmMAJWxmLCVsZiwlbGYsJWxmJWMAJWxmLCVsZiwlbGYsJVteLF0lYwBcJWMAJGMAd2IAbnN1YgBzZXRoc2IAcmIAcHJvdGVjdF9yc3FiAGpvYgBjb3JlX2xvYWRpbWFnZV9wc2xpYgBGZWIAb2RiAGluaXRfc3BsaW5lc19iYgBiZXppZXJfYmIAcHJvdGVpbnN0YWIAcm5hc3RhYgAvc3ZnL29saXZlZHJhYgBcYgByd2EAL3N2Zy9hcXVhAGlvdGEASW90YQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvbWFnZW50YQBkZWx0YQBEZWx0YQB6ZXRhAHRoZXRhAFRoZXRhAGJldGEAWmV0YQBCZXRhAHByZXYgIT0gb2JqLT5kYXRhAG1ha2VHcmFwaERhdGEARXRhAG5pbWJ1c3NhbnNhAHBhcmEAa2FwcGEAS2FwcGEAL3N2Zy9zaWVubmEAVmVyZGFuYQBnYW1tYQBHYW1tYQBzaWdtYQBTaWdtYQBjb25zb2xhAG5hYmxhAC9zdmcvZnVjaHNpYQBHZW9yZ2lhAGFscGhhAEFscGhhAG9tZWdhAE9tZWdhAGFyZWEAbGFtYmRhAExhbWJkYQBoZWx2ZXRpY2EASGVsdmV0aWNhAG1pY2EAPjxhAGAAU3BhcnNlTWF0cml4X2Nvb3JkaW5hdGVfZm9ybV9hZGRfZW50cnlfAGd2X2xpc3RfY29weV8AX3RkcmF3XwBfdGxkcmF3XwBfaGxkcmF3XwBfbGRyYXdfAF9oZHJhd18AX2RyYXdfAGd2X2xpc3Rfc29ydF8AZ3ZfbGlzdF9hcHBlbmRfc2xvdF8AZ3ZfbGlzdF9wcmVwZW5kX3Nsb3RfAGd2X2xpc3RfcG9wX2Zyb250XwBndl9saXN0X3Nocmlua190b19maXRfAGFneHNldF8AZ3ZfbGlzdF9nZXRfAGRvdF9zcGxpbmVzXwAlc18AZ3ZfbGlzdF9jbGVhcl8AZ3ZfbGlzdF9wb3BfYmFja18AZ3ZfbGlzdF9kZXRhY2hfAGd2X2xpc3RfcmVtb3ZlXwBndl9saXN0X3JldmVyc2VfAGd2X2xpc3RfZnJlZV8AZ3ZfbGlzdF90cnlfYXBwZW5kXwBwYWdlJWQsJWRfAGd2X2xpc3Rfc3luY18AX2NjXwAgaWQ9ImFfAF4AU3RhcnRpbmcgcGhhc2UgMiBbZG90X21pbmNyb3NzXQBTdGFydGluZyBwaGFzZSAzIFtkb3RfcG9zaXRpb25dAG5fZWRnZXMgPT0gZ3JhcGgtPnNvdXJjZXNbZ3JhcGgtPm5dAFN0YXJ0aW5nIHBoYXNlIDEgW2RvdF9yYW5rXQBqZFttYXNrW2pjW2tdXV0gPT0gamNba10AamNbbWFza1tqYltrXV1dID09IGpiW2tdAG5lZWRsZVtpXSAhPSBuZWVkbGVbal0AamFbbWFza1tqYVtqXV1dID09IGphW2pdAHEtPnF0c1tpaV0AIXJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS50YWtlbltpXQByLmJvdW5kYXJ5W2ldIDw9IHIuYm91bmRhcnlbTlVNRElNUyArIGldAFslLjAzZiwlLjAzZl0AW2ludGVybmFsIGhhcmQtY29kZWRdAG5wLT5jZWxsc1sxXQBucC0+Y2VsbHNbMF0AdXMtPm5hbWVbMF0AY3AtPnNyY1swXQBbLi5dAFxcACJwb2ludHMiOiBbACJzdG9wcyI6IFsACVsAWgBjb21wdXRlU2NhbGVYWQB5PD1ZACVhICViICVkICVIOiVNOiVTICVZAFBPU0lYAG56IDw9IElOVF9NQVgAeSA+PSBJTlRfTUlOICYmIHkgPD0gSU5UX01BWAB4ID49IElOVF9NSU4gJiYgeCA8PSBJTlRfTUFYAHcgPj0gMCAmJiB3IDw9IElOVF9NQVgAZV9jbnQgPD0gSU5UX01BWABwYWlyLnJpZ2h0IDw9IElOVF9NQVgAcGFpci5sZWZ0IDw9IElOVF9NQVgAdGFyZ2V0IDw9IElOVF9NQVgAbnNlZ3MgPD0gSU5UX01BWABuX2VkZ2VzIDw9IElOVF9NQVgAc3RwLm52ZXJ0aWNlcyA8PSBJTlRfTUFYAG9ic1twb2x5X2ldLT5wbiA8PSBJTlRfTUFYAGlucHV0X3JvdXRlLnBuIDw9IElOVF9NQVgAZ3JhcGgtPm4gPD0gSU5UX01BWABoID49IDAgJiYgaCA8PSBJTlRfTUFYAGVfY250IC0gMSA8PSBJTlRfTUFYAExJU1RfU0laRSgmbGlzdCkgLSAxIDw9IElOVF9NQVgATElTVF9TSVpFKCZsYXllcklEcykgLSAxIDw9IElOVF9NQVgAc3RybGVuKGFyZ3MpIDw9IElOVF9NQVgATElTVF9TSVpFKCZvYmpsKSA8PSBJTlRfTUFYAExJU1RfU0laRSgmY3R4LT5UcmVlX2VkZ2UpIDw9IElOVF9NQVgAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA8PSBJTlRfTUFYAGkgPCBJTlRfTUFYAHJlc3VsdCA8PSAoaW50KVVDSEFSX01BWABzc3ogPD0gVUNIQVJfTUFYAGNvbCA+PSAwICYmIGNvbCA8PSBVSU5UMTZfTUFYAHg8PVgAVwBWAFUAXFQAVEVYVABTVFJFU1NfTUFKT1JJWkFUSU9OX1BPV0VSX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9HUkFQSF9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fQVZHX0RJU1QARkFTVABGT05UAGIgPT0gQl9SSUdIVABIRUlHSFQAQl9MRUZUAF8lbGx1X1NVU1BFQ1QAQlQAVHJlYnVjaGV0IE1TAElOVklTACVIOiVNOiVTAFZSAFRSAEEtPmZvcm1hdCA9PSBCLT5mb3JtYXQgJiYgQS0+Zm9ybWF0ID09IEZPUk1BVF9DU1IATFIARElSAEhSAENFTlRFUgAlJVRSQUlMRVIAQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9SRUFMIHx8IEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfSU5URUdFUgBDRUxMQk9SREVSAEJSACpSAFEARVhQAEJfVVAAU1VQAFRPUABPAG1hcE4AXE4AQl9ET1dOAFRIT1JOACUlQkVHSU4AUk9XU1BBTgBDT0xTUEFOAE5BTgBQTQBCT1RUT00AQk0AQU0AJUg6JU0AXEwAdGFpbFVSTABsYWJlbFVSTABlZGdlVVJMAGhlYWRVUkwASFRNTAB4IT1OVUxMAHJvb3RQYXJzZXItPm1fcGFyZW50UGFyc2VyID09IE5VTEwARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABwcmVmaXggIT0gTlVMTABkdGQtPnNjYWZmSW5kZXggIT0gTlVMTABzbS0+THcgIT0gTlVMTABsdSAhPSBOVUxMAGlucHV0ICE9IE5VTEwAbGlzdCAhPSBOVUxMAHJlZmVyZW50ICE9IE5VTEwAZGljdCAhPSBOVUxMAGRpY3QtPmJ1Y2tldHMgIT0gTlVMTABhdHRyICE9IE5VTEwAYWxsb2NhdG9yICE9IE5VTEwAcGFyc2VyICE9IE5VTEwAcm9vdFBhcnNlciAhPSBOVUxMAGxlYWRlciAhPSBOVUxMAGNtcCAhPSBOVUxMAGRhdGFwICE9IE5VTEwAaW50byAhPSBOVUxMAGl0ZW0gIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABmaWxlbmFtZSAhPSBOVUxMAGpvYi0+b3V0cHV0X2ZpbGUgIT0gTlVMTABtb2RlICE9IE5VTEwAeGQgIT0gTlVMTABzbS0+THdkICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABhcmVuYSAhPSBOVUxMAGxpc3QgJiYgbGlzdFswXSAhPSBOVUxMAEFGICE9IE5VTEwAc20tPkQgIT0gTlVMTABFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATENfQUxMAEJMAGJlc3Rjb3N0IDwgSFVHRV9WQUwATk9STUFMAFJBRElBTABBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwAVVJXIENoYW5jZXJ5IEwAVVJXIEJvb2ttYW4gTABDZW50dXJ5IFNjaG9vbGJvb2sgTABVUlcgR290aGljIEwAS0sASgBpIDwgTUFYX0kAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAQVNDSUkAXEgARVRIAFdJRFRIAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAbWtOQ29uc3RyYWludEcAXEcARVhQQVRfRU5USVRZX0RFQlVHAEVYUEFUX0VOVFJPUFlfREVCVUcARVhQQVRfQUNDT1VOVElOR19ERUJVRwBFWFBBVF9NQUxMT0NfREVCVUcAUk5HAFNQUklORwBDRUxMUEFERElORwBDRUxMU1BBQ0lORwBMQU5HAElNRwBceEYAJSVFT0YASU5GAFx4RkYAUklGRgBkZWx0YSA8PSAweEZGRkYAXHhFRgBceERGAFx4Q0YAXHhCRgBceEFGAFx4OUYAXHg4RgBceDdGAFx4MUYAXHhFAFxFAFBPSU5ULVNJWkUAVFJVRQBDTE9TRQBGQUxTRQBrZXkgIT0gVE9NQlNUT05FAHIgIT0gVE9NQlNUT05FAE5PTkUAR1JBRElFTlRBTkdMRQBUUklBTkdMRQBNSURETEUASU5WSVNJQkxFAFRBQkxFAEFHVFlQRShvYmopID09IEFHSU5FREdFIHx8IEFHVFlQRShvYmopID09IEFHT1VURURHRQBceEZFAFx4RUUAXHhERQBCX05PREUAXHhDRQBceEJFAFx4QUUAXHg5RQBceDhFAFx4MUUAVEQAQS0+Zm9ybWF0ID09IEZPUk1BVF9DT09SRABuICYmIGkgPj0gMCAmJiBpIDwgTk9ERUNBUkQAJSVFTkQASFlCUklEAFNPTElEAFx4RkQAXHhFRABET1RURUQAREFTSEVEAFJPVU5ERUQAXHhERABceENEAFx4QkQAXHhBRABceDlEAFx4OEQAXHgxRABceEMAZGVsZXRlVlBTQwBceEZDAFx4RUMAXHhEQwBceENDAFx4QkMAXHhBQwBceDlDAFx4OEMAXHgxQwBceEIAU1VCAFx4RkIAXHhFQgBceERCAFx4Q0IAXHhCQgBceEFCAFx4OUIAXHg4QgBceDFCAEEgJiYgQgBceEZBAFx4RUEAXHhEQQBceENBAFx4QkEAXHhBQQBceDlBAFx4OEEAXHgxQQBAAD8APCVzPgA8bmlsPgA8L3RzcGFuPjwvdGV4dFBhdGg+AAogICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+AD4KPHRpdGxlPgA8Rk9OVD4APEJSPgA8SFRNTD4APC9IVE1MPgA8SU1HPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgA8VEQ+AC0+ACI+AAlba2V5PQA8PQA8ACYjeCV4OwAmcXVvdDsAJmx0OwAmZ3Q7ACZhbXA7ACMlZDsAJiMzOTsAJiM0NTsAJiM5MzsAJiMxMzsAJiMxNjA7ACYjMTA7ADtzdG9wLW9wYWNpdHk6ACUlQm91bmRpbmdCb3g6AGNhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzIGFuZCBzZXR0aW5nIHVwIHN0cmVzcyB0ZXJtczoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6AHNvbHZpbmcgbW9kZWw6AC9cOgBncmV5OQBncmF5OQBceEY5AFx4RTkAXHhEOQBceEM5AFx4QjkAXHhBOQBncmV5OTkAZ3JheTk5AFx4OTkAZ3JleTg5AGdyYXk4OQBceDg5ADAxMjM0NTY3ODkAZ3JleTc5AGdyYXk3OQBncmV5NjkAZ3JheTY5AGdyZXk1OQBncmF5NTkAZ3JleTQ5AGdyYXk0OQBncmV5MzkAZ3JheTM5AGdyZXkyOQBncmF5MjkAZ3JleTE5AGdyYXkxOQBceDE5AC9yZGd5OS85AC9idXB1OS85AC9yZHB1OS85AC9wdWJ1OS85AC95bGduYnU5LzkAL2duYnU5LzkAL3JkeWxidTkvOQAvcmRidTkvOQAvZ3JleXM5LzkAL2dyZWVuczkvOQAvYmx1ZXM5LzkAL3B1cnBsZXM5LzkAL29yYW5nZXM5LzkAL3JlZHM5LzkAL3B1b3I5LzkAL3lsb3JicjkvOQAvcHVidWduOS85AC9idWduOS85AC9wcmduOS85AC9yZHlsZ245LzkAL3lsZ245LzkAL3NwZWN0cmFsOS85AC9waXlnOS85AC9icmJnOS85AC9wdXJkOS85AC95bG9ycmQ5LzkAL29ycmQ5LzkAL3BhaXJlZDkvOQAvc2V0MzkvOQAvc2V0MTkvOQAvcGFzdGVsMTkvOQAvcGFpcmVkMTIvOQAvc2V0MzEyLzkAL3JkZ3kxMS85AC9yZHlsYnUxMS85AC9yZGJ1MTEvOQAvcHVvcjExLzkAL3ByZ24xMS85AC9yZHlsZ24xMS85AC9zcGVjdHJhbDExLzkAL3BpeWcxMS85AC9icmJnMTEvOQAvcGFpcmVkMTEvOQAvc2V0MzExLzkAL3JkZ3kxMC85AC9yZHlsYnUxMC85AC9yZGJ1MTAvOQAvcHVvcjEwLzkAL3ByZ24xMC85AC9yZHlsZ24xMC85AC9zcGVjdHJhbDEwLzkAL3BpeWcxMC85AC9icmJnMTAvOQAvcGFpcmVkMTAvOQAvc2V0MzEwLzkAZ3JleTgAZ3JheTgAXHg4AHV0ZjgAI2Y4ZjhmOAAjZThlOGU4AFx4RjgAR0lGOABceEU4AFx4RDgAXHhDOABceEI4AFx4QTgAZ3JleTk4AGdyYXk5OABceDk4AGdyZXk4OABncmF5ODgAXHg4OABncmV5NzgAZ3JheTc4AGdyZXk2OABncmF5NjgAZ3JleTU4AGdyYXk1OABncmV5NDgAZ3JheTQ4AGdyZXkzOABncmF5MzgAZ3JleTI4AGdyYXkyOABncmV5MTgAZ3JheTE4AFx4MTgAL3JkZ3k5LzgAL2J1cHU5LzgAL3JkcHU5LzgAL3B1YnU5LzgAL3lsZ25idTkvOAAvZ25idTkvOAAvcmR5bGJ1OS84AC9yZGJ1OS84AC9ncmV5czkvOAAvZ3JlZW5zOS84AC9ibHVlczkvOAAvcHVycGxlczkvOAAvb3JhbmdlczkvOAAvcmVkczkvOAAvcHVvcjkvOAAveWxvcmJyOS84AC9wdWJ1Z245LzgAL2J1Z245LzgAL3ByZ245LzgAL3JkeWxnbjkvOAAveWxnbjkvOAAvc3BlY3RyYWw5LzgAL3BpeWc5LzgAL2JyYmc5LzgAL3B1cmQ5LzgAL3lsb3JyZDkvOAAvb3JyZDkvOAAvcGFpcmVkOS84AC9zZXQzOS84AC9zZXQxOS84AC9wYXN0ZWwxOS84AC9yZGd5OC84AC9idXB1OC84AC9yZHB1OC84AC9wdWJ1OC84AC95bGduYnU4LzgAL2duYnU4LzgAL3JkeWxidTgvOAAvcmRidTgvOAAvYWNjZW50OC84AC9ncmV5czgvOAAvZ3JlZW5zOC84AC9ibHVlczgvOAAvcHVycGxlczgvOAAvb3JhbmdlczgvOAAvcmVkczgvOAAvcHVvcjgvOAAveWxvcmJyOC84AC9wdWJ1Z244LzgAL2J1Z244LzgAL3ByZ244LzgAL3JkeWxnbjgvOAAveWxnbjgvOAAvc3BlY3RyYWw4LzgAL3BpeWc4LzgAL2JyYmc4LzgAL3B1cmQ4LzgAL3lsb3JyZDgvOAAvb3JyZDgvOAAvcGFpcmVkOC84AC9zZXQzOC84AC9zZXQyOC84AC9wYXN0ZWwyOC84AC9kYXJrMjgvOAAvc2V0MTgvOAAvcGFzdGVsMTgvOAAvcGFpcmVkMTIvOAAvc2V0MzEyLzgAL3JkZ3kxMS84AC9yZHlsYnUxMS84AC9yZGJ1MTEvOAAvcHVvcjExLzgAL3ByZ24xMS84AC9yZHlsZ24xMS84AC9zcGVjdHJhbDExLzgAL3BpeWcxMS84AC9icmJnMTEvOAAvcGFpcmVkMTEvOAAvc2V0MzExLzgAL3JkZ3kxMC84AC9yZHlsYnUxMC84AC9yZGJ1MTAvOAAvcHVvcjEwLzgAL3ByZ24xMC84AC9yZHlsZ24xMC84AC9zcGVjdHJhbDEwLzgAL3BpeWcxMC84AC9icmJnMTAvOAAvcGFpcmVkMTAvOAAvc2V0MzEwLzgAdXRmLTgAQy5VVEYtOABncmV5NwBncmF5NwBceDcAXHhGNwBceEU3AFx4RDcAXHhDNwBceEI3AFx4QTcAZ3JleTk3AGdyYXk5NwBceDk3AGdyZXk4NwBncmF5ODcAXHg4NwBncmV5NzcAZ3JheTc3AGdyZXk2NwBncmF5NjcAZ3JleTU3AGdyYXk1NwBncmV5NDcAZ3JheTQ3AGdyZXkzNwBncmF5MzcAZ3JleTI3AGdyYXkyNwBncmV5MTcAZ3JheTE3AFx4MTcAL3JkZ3k5LzcAL2J1cHU5LzcAL3JkcHU5LzcAL3B1YnU5LzcAL3lsZ25idTkvNwAvZ25idTkvNwAvcmR5bGJ1OS83AC9yZGJ1OS83AC9ncmV5czkvNwAvZ3JlZW5zOS83AC9ibHVlczkvNwAvcHVycGxlczkvNwAvb3JhbmdlczkvNwAvcmVkczkvNwAvcHVvcjkvNwAveWxvcmJyOS83AC9wdWJ1Z245LzcAL2J1Z245LzcAL3ByZ245LzcAL3JkeWxnbjkvNwAveWxnbjkvNwAvc3BlY3RyYWw5LzcAL3BpeWc5LzcAL2JyYmc5LzcAL3B1cmQ5LzcAL3lsb3JyZDkvNwAvb3JyZDkvNwAvcGFpcmVkOS83AC9zZXQzOS83AC9zZXQxOS83AC9wYXN0ZWwxOS83AC9yZGd5OC83AC9idXB1OC83AC9yZHB1OC83AC9wdWJ1OC83AC95bGduYnU4LzcAL2duYnU4LzcAL3JkeWxidTgvNwAvcmRidTgvNwAvYWNjZW50OC83AC9ncmV5czgvNwAvZ3JlZW5zOC83AC9ibHVlczgvNwAvcHVycGxlczgvNwAvb3JhbmdlczgvNwAvcmVkczgvNwAvcHVvcjgvNwAveWxvcmJyOC83AC9wdWJ1Z244LzcAL2J1Z244LzcAL3ByZ244LzcAL3JkeWxnbjgvNwAveWxnbjgvNwAvc3BlY3RyYWw4LzcAL3BpeWc4LzcAL2JyYmc4LzcAL3B1cmQ4LzcAL3lsb3JyZDgvNwAvb3JyZDgvNwAvcGFpcmVkOC83AC9zZXQzOC83AC9zZXQyOC83AC9wYXN0ZWwyOC83AC9kYXJrMjgvNwAvc2V0MTgvNwAvcGFzdGVsMTgvNwAvcmRneTcvNwAvYnVwdTcvNwAvcmRwdTcvNwAvcHVidTcvNwAveWxnbmJ1Ny83AC9nbmJ1Ny83AC9yZHlsYnU3LzcAL3JkYnU3LzcAL2FjY2VudDcvNwAvZ3JleXM3LzcAL2dyZWVuczcvNwAvYmx1ZXM3LzcAL3B1cnBsZXM3LzcAL29yYW5nZXM3LzcAL3JlZHM3LzcAL3B1b3I3LzcAL3lsb3JicjcvNwAvcHVidWduNy83AC9idWduNy83AC9wcmduNy83AC9yZHlsZ243LzcAL3lsZ243LzcAL3NwZWN0cmFsNy83AC9waXlnNy83AC9icmJnNy83AC9wdXJkNy83AC95bG9ycmQ3LzcAL29ycmQ3LzcAL3BhaXJlZDcvNwAvc2V0MzcvNwAvc2V0MjcvNwAvcGFzdGVsMjcvNwAvZGFyazI3LzcAL3NldDE3LzcAL3Bhc3RlbDE3LzcAL3BhaXJlZDEyLzcAL3NldDMxMi83AC9yZGd5MTEvNwAvcmR5bGJ1MTEvNwAvcmRidTExLzcAL3B1b3IxMS83AC9wcmduMTEvNwAvcmR5bGduMTEvNwAvc3BlY3RyYWwxMS83AC9waXlnMTEvNwAvYnJiZzExLzcAL3BhaXJlZDExLzcAL3NldDMxMS83AC9yZGd5MTAvNwAvcmR5bGJ1MTAvNwAvcmRidTEwLzcAL3B1b3IxMC83AC9wcmduMTAvNwAvcmR5bGduMTAvNwAvc3BlY3RyYWwxMC83AC9waXlnMTAvNwAvYnJiZzEwLzcAL3BhaXJlZDEwLzcAL3NldDMxMC83ADEuNwBncmV5NgBncmF5NgBceDYAXHhGNgBceEU2AFx4RDYAXHhDNgBceEI2AFx4QTYAZ3JleTk2AGdyYXk5NgBceDk2AGdyZXk4NgBncmF5ODYAXHg4NgBncmV5NzYAZ3JheTc2AGdyZXk2NgBncmF5NjYAZ3JleTU2AGdyYXk1NgBncmV5NDYAZ3JheTQ2AGdyZXkzNgBncmF5MzYAZ3JleTI2AGdyYXkyNgBncmV5MTYAZ3JheTE2AFx4MTYAL3JkZ3k5LzYAL2J1cHU5LzYAL3JkcHU5LzYAL3B1YnU5LzYAL3lsZ25idTkvNgAvZ25idTkvNgAvcmR5bGJ1OS82AC9yZGJ1OS82AC9ncmV5czkvNgAvZ3JlZW5zOS82AC9ibHVlczkvNgAvcHVycGxlczkvNgAvb3JhbmdlczkvNgAvcmVkczkvNgAvcHVvcjkvNgAveWxvcmJyOS82AC9wdWJ1Z245LzYAL2J1Z245LzYAL3ByZ245LzYAL3JkeWxnbjkvNgAveWxnbjkvNgAvc3BlY3RyYWw5LzYAL3BpeWc5LzYAL2JyYmc5LzYAL3B1cmQ5LzYAL3lsb3JyZDkvNgAvb3JyZDkvNgAvcGFpcmVkOS82AC9zZXQzOS82AC9zZXQxOS82AC9wYXN0ZWwxOS82AC9yZGd5OC82AC9idXB1OC82AC9yZHB1OC82AC9wdWJ1OC82AC95bGduYnU4LzYAL2duYnU4LzYAL3JkeWxidTgvNgAvcmRidTgvNgAvYWNjZW50OC82AC9ncmV5czgvNgAvZ3JlZW5zOC82AC9ibHVlczgvNgAvcHVycGxlczgvNgAvb3JhbmdlczgvNgAvcmVkczgvNgAvcHVvcjgvNgAveWxvcmJyOC82AC9wdWJ1Z244LzYAL2J1Z244LzYAL3ByZ244LzYAL3JkeWxnbjgvNgAveWxnbjgvNgAvc3BlY3RyYWw4LzYAL3BpeWc4LzYAL2JyYmc4LzYAL3B1cmQ4LzYAL3lsb3JyZDgvNgAvb3JyZDgvNgAvcGFpcmVkOC82AC9zZXQzOC82AC9zZXQyOC82AC9wYXN0ZWwyOC82AC9kYXJrMjgvNgAvc2V0MTgvNgAvcGFzdGVsMTgvNgAvcmRneTcvNgAvYnVwdTcvNgAvcmRwdTcvNgAvcHVidTcvNgAveWxnbmJ1Ny82AC9nbmJ1Ny82AC9yZHlsYnU3LzYAL3JkYnU3LzYAL2FjY2VudDcvNgAvZ3JleXM3LzYAL2dyZWVuczcvNgAvYmx1ZXM3LzYAL3B1cnBsZXM3LzYAL29yYW5nZXM3LzYAL3JlZHM3LzYAL3B1b3I3LzYAL3lsb3JicjcvNgAvcHVidWduNy82AC9idWduNy82AC9wcmduNy82AC9yZHlsZ243LzYAL3lsZ243LzYAL3NwZWN0cmFsNy82AC9waXlnNy82AC9icmJnNy82AC9wdXJkNy82AC95bG9ycmQ3LzYAL29ycmQ3LzYAL3BhaXJlZDcvNgAvc2V0MzcvNgAvc2V0MjcvNgAvcGFzdGVsMjcvNgAvZGFyazI3LzYAL3NldDE3LzYAL3Bhc3RlbDE3LzYAL3JkZ3k2LzYAL2J1cHU2LzYAL3JkcHU2LzYAL3B1YnU2LzYAL3lsZ25idTYvNgAvZ25idTYvNgAvcmR5bGJ1Ni82AC9yZGJ1Ni82AC9hY2NlbnQ2LzYAL2dyZXlzNi82AC9ncmVlbnM2LzYAL2JsdWVzNi82AC9wdXJwbGVzNi82AC9vcmFuZ2VzNi82AC9yZWRzNi82AC9wdW9yNi82AC95bG9yYnI2LzYAL3B1YnVnbjYvNgAvYnVnbjYvNgAvcHJnbjYvNgAvcmR5bGduNi82AC95bGduNi82AC9zcGVjdHJhbDYvNgAvcGl5ZzYvNgAvYnJiZzYvNgAvcHVyZDYvNgAveWxvcnJkNi82AC9vcnJkNi82AC9wYWlyZWQ2LzYAL3NldDM2LzYAL3NldDI2LzYAL3Bhc3RlbDI2LzYAL2RhcmsyNi82AC9zZXQxNi82AC9wYXN0ZWwxNi82AC9wYWlyZWQxMi82AC9zZXQzMTIvNgAvcmRneTExLzYAL3JkeWxidTExLzYAL3JkYnUxMS82AC9wdW9yMTEvNgAvcHJnbjExLzYAL3JkeWxnbjExLzYAL3NwZWN0cmFsMTEvNgAvcGl5ZzExLzYAL2JyYmcxMS82AC9wYWlyZWQxMS82AC9zZXQzMTEvNgAvcmRneTEwLzYAL3JkeWxidTEwLzYAL3JkYnUxMC82AC9wdW9yMTAvNgAvcHJnbjEwLzYAL3JkeWxnbjEwLzYAL3NwZWN0cmFsMTAvNgAvcGl5ZzEwLzYAL2JyYmcxMC82AC9wYWlyZWQxMC82AC9zZXQzMTAvNgBncmV5NQBncmF5NQBceDUAYmlnNQBceEY1AFx4RTUAXHhENQBceEM1AFx4QjUAXHhBNQBncmV5OTUAZ3JheTk1AFx4OTUAZ3JleTg1AGdyYXk4NQBceDg1AGdyZXk3NQBncmF5NzUAZ3JleTY1AGdyYXk2NQBncmV5NTUAZ3JheTU1AGdyZXk0NQBncmF5NDUAZ3JleTM1AGdyYXkzNQBncmV5MjUAZ3JheTI1AGdyZXkxNQBncmF5MTUAXHgxNQBncmF5MDUAL3JkZ3k5LzUAL2J1cHU5LzUAL3JkcHU5LzUAL3B1YnU5LzUAL3lsZ25idTkvNQAvZ25idTkvNQAvcmR5bGJ1OS81AC9yZGJ1OS81AC9ncmV5czkvNQAvZ3JlZW5zOS81AC9ibHVlczkvNQAvcHVycGxlczkvNQAvb3JhbmdlczkvNQAvcmVkczkvNQAvcHVvcjkvNQAveWxvcmJyOS81AC9wdWJ1Z245LzUAL2J1Z245LzUAL3ByZ245LzUAL3JkeWxnbjkvNQAveWxnbjkvNQAvc3BlY3RyYWw5LzUAL3BpeWc5LzUAL2JyYmc5LzUAL3B1cmQ5LzUAL3lsb3JyZDkvNQAvb3JyZDkvNQAvcGFpcmVkOS81AC9zZXQzOS81AC9zZXQxOS81AC9wYXN0ZWwxOS81AC9yZGd5OC81AC9idXB1OC81AC9yZHB1OC81AC9wdWJ1OC81AC95bGduYnU4LzUAL2duYnU4LzUAL3JkeWxidTgvNQAvcmRidTgvNQAvYWNjZW50OC81AC9ncmV5czgvNQAvZ3JlZW5zOC81AC9ibHVlczgvNQAvcHVycGxlczgvNQAvb3JhbmdlczgvNQAvcmVkczgvNQAvcHVvcjgvNQAveWxvcmJyOC81AC9wdWJ1Z244LzUAL2J1Z244LzUAL3ByZ244LzUAL3JkeWxnbjgvNQAveWxnbjgvNQAvc3BlY3RyYWw4LzUAL3BpeWc4LzUAL2JyYmc4LzUAL3B1cmQ4LzUAL3lsb3JyZDgvNQAvb3JyZDgvNQAvcGFpcmVkOC81AC9zZXQzOC81AC9zZXQyOC81AC9wYXN0ZWwyOC81AC9kYXJrMjgvNQAvc2V0MTgvNQAvcGFzdGVsMTgvNQAvcmRneTcvNQAvYnVwdTcvNQAvcmRwdTcvNQAvcHVidTcvNQAveWxnbmJ1Ny81AC9nbmJ1Ny81AC9yZHlsYnU3LzUAL3JkYnU3LzUAL2FjY2VudDcvNQAvZ3JleXM3LzUAL2dyZWVuczcvNQAvYmx1ZXM3LzUAL3B1cnBsZXM3LzUAL29yYW5nZXM3LzUAL3JlZHM3LzUAL3B1b3I3LzUAL3lsb3JicjcvNQAvcHVidWduNy81AC9idWduNy81AC9wcmduNy81AC9yZHlsZ243LzUAL3lsZ243LzUAL3NwZWN0cmFsNy81AC9waXlnNy81AC9icmJnNy81AC9wdXJkNy81AC95bG9ycmQ3LzUAL29ycmQ3LzUAL3BhaXJlZDcvNQAvc2V0MzcvNQAvc2V0MjcvNQAvcGFzdGVsMjcvNQAvZGFyazI3LzUAL3NldDE3LzUAL3Bhc3RlbDE3LzUAL3JkZ3k2LzUAL2J1cHU2LzUAL3JkcHU2LzUAL3B1YnU2LzUAL3lsZ25idTYvNQAvZ25idTYvNQAvcmR5bGJ1Ni81AC9yZGJ1Ni81AC9hY2NlbnQ2LzUAL2dyZXlzNi81AC9ncmVlbnM2LzUAL2JsdWVzNi81AC9wdXJwbGVzNi81AC9vcmFuZ2VzNi81AC9yZWRzNi81AC9wdW9yNi81AC95bG9yYnI2LzUAL3B1YnVnbjYvNQAvYnVnbjYvNQAvcHJnbjYvNQAvcmR5bGduNi81AC95bGduNi81AC9zcGVjdHJhbDYvNQAvcGl5ZzYvNQAvYnJiZzYvNQAvcHVyZDYvNQAveWxvcnJkNi81AC9vcnJkNi81AC9wYWlyZWQ2LzUAL3NldDM2LzUAL3NldDI2LzUAL3Bhc3RlbDI2LzUAL2RhcmsyNi81AC9zZXQxNi81AC9wYXN0ZWwxNi81AC9yZGd5NS81AC9idXB1NS81AC9yZHB1NS81AC9wdWJ1NS81AC95bGduYnU1LzUAL2duYnU1LzUAL3JkeWxidTUvNQAvcmRidTUvNQAvYWNjZW50NS81AC9ncmV5czUvNQAvZ3JlZW5zNS81AC9ibHVlczUvNQAvcHVycGxlczUvNQAvb3JhbmdlczUvNQAvcmVkczUvNQAvcHVvcjUvNQAveWxvcmJyNS81AC9wdWJ1Z241LzUAL2J1Z241LzUAL3ByZ241LzUAL3JkeWxnbjUvNQAveWxnbjUvNQAvc3BlY3RyYWw1LzUAL3BpeWc1LzUAL2JyYmc1LzUAL3B1cmQ1LzUAL3lsb3JyZDUvNQAvb3JyZDUvNQAvcGFpcmVkNS81AC9zZXQzNS81AC9zZXQyNS81AC9wYXN0ZWwyNS81AC9kYXJrMjUvNQAvc2V0MTUvNQAvcGFzdGVsMTUvNQAvcGFpcmVkMTIvNQAvc2V0MzEyLzUAL3JkZ3kxMS81AC9yZHlsYnUxMS81AC9yZGJ1MTEvNQAvcHVvcjExLzUAL3ByZ24xMS81AC9yZHlsZ24xMS81AC9zcGVjdHJhbDExLzUAL3BpeWcxMS81AC9icmJnMTEvNQAvcGFpcmVkMTEvNQAvc2V0MzExLzUAL3JkZ3kxMC81AC9yZHlsYnUxMC81AC9yZGJ1MTAvNQAvcHVvcjEwLzUAL3ByZ24xMC81AC9yZHlsZ24xMC81AC9zcGVjdHJhbDEwLzUAL3BpeWcxMC81AC9icmJnMTAvNQAvcGFpcmVkMTAvNQAvc2V0MzEwLzUAYmlnLTUAQklHLTUAIC1kYXNoIDUAaXZvcnk0AGdyZXk0AGRhcmtzbGF0ZWdyYXk0AFx4NABzbm93NABsaWdodHllbGxvdzQAaG9uZXlkZXc0AHdoZWF0NAB0b21hdG80AHJvc3licm93bjQAbWFyb29uNABsaWdodHNhbG1vbjQAbGVtb25jaGlmZm9uNABzcHJpbmdncmVlbjQAZGFya29saXZlZ3JlZW40AHBhbGVncmVlbjQAZGFya3NlYWdyZWVuNABsaWdodGN5YW40AHRhbjQAcGx1bTQAc2Vhc2hlbGw0AGNvcmFsNABob3RwaW5rNABsaWdodHBpbms0AGRlZXBwaW5rNABjb3Juc2lsazQAZmlyZWJyaWNrNABraGFraTQAbGF2ZW5kZXJibHVzaDQAcGVhY2hwdWZmNABiaXNxdWU0AGxpZ2h0c2t5Ymx1ZTQAZGVlcHNreWJsdWU0AGxpZ2h0Ymx1ZTQAY2FkZXRibHVlNABkb2RnZXJibHVlNABsaWdodHN0ZWVsYmx1ZTQAcm95YWxibHVlNABzbGF0ZWJsdWU0AG5hdmFqb3doaXRlNABhbnRpcXVld2hpdGU0AGNob2NvbGF0ZTQAY2hhcnRyZXVzZTQAbWlzdHlyb3NlNABwYWxldHVycXVvaXNlNABhenVyZTQAdGhlcmU0AGFxdWFtYXJpbmU0AHRoaXN0bGU0AG1lZGl1bXB1cnBsZTQAZGFya29yYW5nZTQAbGlnaHRnb2xkZW5yb2Q0AGRhcmtnb2xkZW5yb2Q0AGJ1cmx5d29vZDQAZ29sZDQAbWVkaXVtb3JjaGlkNABkYXJrb3JjaGlkNABwYWxldmlvbGV0cmVkNABpbmRpYW5yZWQ0AG9yYW5nZXJlZDQAb2xpdmVkcmFiNABtYWdlbnRhNABzaWVubmE0AFx4RjQAXHhFNABceEQ0AFx4QzQAXHhCNABceEE0AGdyZXk5NABncmF5OTQAXHg5NABncmV5ODQAZ3JheTg0AFx4ODQAZ3JleTc0AGdyYXk3NABncmV5NjQAZ3JheTY0AGdyZXk1NABncmF5NTQAMjAyNjAzMDMuMDQ1NABncmV5NDQAZ3JheTQ0AGdyZXkzNABncmF5MzQAZnJhYzM0AGdyZXkyNABncmF5MjQAZ3JleTE0AGdyYXkxNABceDE0AGZyYWMxNAAvcmRneTkvNAAvYnVwdTkvNAAvcmRwdTkvNAAvcHVidTkvNAAveWxnbmJ1OS80AC9nbmJ1OS80AC9yZHlsYnU5LzQAL3JkYnU5LzQAL2dyZXlzOS80AC9ncmVlbnM5LzQAL2JsdWVzOS80AC9wdXJwbGVzOS80AC9vcmFuZ2VzOS80AC9yZWRzOS80AC9wdW9yOS80AC95bG9yYnI5LzQAL3B1YnVnbjkvNAAvYnVnbjkvNAAvcHJnbjkvNAAvcmR5bGduOS80AC95bGduOS80AC9zcGVjdHJhbDkvNAAvcGl5ZzkvNAAvYnJiZzkvNAAvcHVyZDkvNAAveWxvcnJkOS80AC9vcnJkOS80AC9wYWlyZWQ5LzQAL3NldDM5LzQAL3NldDE5LzQAL3Bhc3RlbDE5LzQAL3JkZ3k4LzQAL2J1cHU4LzQAL3JkcHU4LzQAL3B1YnU4LzQAL3lsZ25idTgvNAAvZ25idTgvNAAvcmR5bGJ1OC80AC9yZGJ1OC80AC9hY2NlbnQ4LzQAL2dyZXlzOC80AC9ncmVlbnM4LzQAL2JsdWVzOC80AC9wdXJwbGVzOC80AC9vcmFuZ2VzOC80AC9yZWRzOC80AC9wdW9yOC80AC95bG9yYnI4LzQAL3B1YnVnbjgvNAAvYnVnbjgvNAAvcHJnbjgvNAAvcmR5bGduOC80AC95bGduOC80AC9zcGVjdHJhbDgvNAAvcGl5ZzgvNAAvYnJiZzgvNAAvcHVyZDgvNAAveWxvcnJkOC80AC9vcnJkOC80AC9wYWlyZWQ4LzQAL3NldDM4LzQAL3NldDI4LzQAL3Bhc3RlbDI4LzQAL2RhcmsyOC80AC9zZXQxOC80AC9wYXN0ZWwxOC80AC9yZGd5Ny80AC9idXB1Ny80AC9yZHB1Ny80AC9wdWJ1Ny80AC95bGduYnU3LzQAL2duYnU3LzQAL3JkeWxidTcvNAAvcmRidTcvNAAvYWNjZW50Ny80AC9ncmV5czcvNAAvZ3JlZW5zNy80AC9ibHVlczcvNAAvcHVycGxlczcvNAAvb3JhbmdlczcvNAAvcmVkczcvNAAvcHVvcjcvNAAveWxvcmJyNy80AC9wdWJ1Z243LzQAL2J1Z243LzQAL3ByZ243LzQAL3JkeWxnbjcvNAAveWxnbjcvNAAvc3BlY3RyYWw3LzQAL3BpeWc3LzQAL2JyYmc3LzQAL3B1cmQ3LzQAL3lsb3JyZDcvNAAvb3JyZDcvNAAvcGFpcmVkNy80AC9zZXQzNy80AC9zZXQyNy80AC9wYXN0ZWwyNy80AC9kYXJrMjcvNAAvc2V0MTcvNAAvcGFzdGVsMTcvNAAvcmRneTYvNAAvYnVwdTYvNAAvcmRwdTYvNAAvcHVidTYvNAAveWxnbmJ1Ni80AC9nbmJ1Ni80AC9yZHlsYnU2LzQAL3JkYnU2LzQAL2FjY2VudDYvNAAvZ3JleXM2LzQAL2dyZWVuczYvNAAvYmx1ZXM2LzQAL3B1cnBsZXM2LzQAL29yYW5nZXM2LzQAL3JlZHM2LzQAL3B1b3I2LzQAL3lsb3JicjYvNAAvcHVidWduNi80AC9idWduNi80AC9wcmduNi80AC9yZHlsZ242LzQAL3lsZ242LzQAL3NwZWN0cmFsNi80AC9waXlnNi80AC9icmJnNi80AC9wdXJkNi80AC95bG9ycmQ2LzQAL29ycmQ2LzQAL3BhaXJlZDYvNAAvc2V0MzYvNAAvc2V0MjYvNAAvcGFzdGVsMjYvNAAvZGFyazI2LzQAL3NldDE2LzQAL3Bhc3RlbDE2LzQAL3JkZ3k1LzQAL2J1cHU1LzQAL3JkcHU1LzQAL3B1YnU1LzQAL3lsZ25idTUvNAAvZ25idTUvNAAvcmR5bGJ1NS80AC9yZGJ1NS80AC9hY2NlbnQ1LzQAL2dyZXlzNS80AC9ncmVlbnM1LzQAL2JsdWVzNS80AC9wdXJwbGVzNS80AC9vcmFuZ2VzNS80AC9yZWRzNS80AC9wdW9yNS80AC95bG9yYnI1LzQAL3B1YnVnbjUvNAAvYnVnbjUvNAAvcHJnbjUvNAAvcmR5bGduNS80AC95bGduNS80AC9zcGVjdHJhbDUvNAAvcGl5ZzUvNAAvYnJiZzUvNAAvcHVyZDUvNAAveWxvcnJkNS80AC9vcnJkNS80AC9wYWlyZWQ1LzQAL3NldDM1LzQAL3NldDI1LzQAL3Bhc3RlbDI1LzQAL2RhcmsyNS80AC9zZXQxNS80AC9wYXN0ZWwxNS80AC9yZGd5NC80AC9idXB1NC80AC9yZHB1NC80AC9wdWJ1NC80AC95bGduYnU0LzQAL2duYnU0LzQAL3JkeWxidTQvNAAvcmRidTQvNAAvYWNjZW50NC80AC9ncmV5czQvNAAvZ3JlZW5zNC80AC9ibHVlczQvNAAvcHVycGxlczQvNAAvb3JhbmdlczQvNAAvcmVkczQvNAAvcHVvcjQvNAAveWxvcmJyNC80AC9wdWJ1Z240LzQAL2J1Z240LzQAL3ByZ240LzQAL3JkeWxnbjQvNAAveWxnbjQvNAAvc3BlY3RyYWw0LzQAL3BpeWc0LzQAL2JyYmc0LzQAL3B1cmQ0LzQAL3lsb3JyZDQvNAAvb3JyZDQvNAAvcGFpcmVkNC80AC9zZXQzNC80AC9zZXQyNC80AC9wYXN0ZWwyNC80AC9kYXJrMjQvNAAvc2V0MTQvNAAvcGFzdGVsMTQvNAAvcGFpcmVkMTIvNAAvc2V0MzEyLzQAL3JkZ3kxMS80AC9yZHlsYnUxMS80AC9yZGJ1MTEvNAAvcHVvcjExLzQAL3ByZ24xMS80AC9yZHlsZ24xMS80AC9zcGVjdHJhbDExLzQAL3BpeWcxMS80AC9icmJnMTEvNAAvcGFpcmVkMTEvNAAvc2V0MzExLzQAL3JkZ3kxMC80AC9yZHlsYnUxMC80AC9yZGJ1MTAvNAAvcHVvcjEwLzQAL3ByZ24xMC80AC9yZHlsZ24xMC80AC9zcGVjdHJhbDEwLzQAL3BpeWcxMC80AC9icmJnMTAvNAAvcGFpcmVkMTAvNAAvc2V0MzEwLzQAMS40AG4gPj0gNABzaWRlcyA9PSA0AGl2b3J5MwBTcGFyc2VNYXRyaXhfbXVsdGlwbHkzAGdyZXkzAGRhcmtzbGF0ZWdyYXkzAFx4MwBzbm93MwBsaWdodHllbGxvdzMAaG9uZXlkZXczAHdoZWF0MwBzdXAzAHRvbWF0bzMAcm9zeWJyb3duMwBtYXJvb24zAGxpZ2h0c2FsbW9uMwBsZW1vbmNoaWZmb24zAHNwcmluZ2dyZWVuMwBkYXJrb2xpdmVncmVlbjMAcGFsZWdyZWVuMwBkYXJrc2VhZ3JlZW4zAGxpZ2h0Y3lhbjMAdGFuMwBwbHVtMwBzZWFzaGVsbDMAY29yYWwzAGhvdHBpbmszAGxpZ2h0cGluazMAZGVlcHBpbmszAGNvcm5zaWxrMwBmaXJlYnJpY2szAGtoYWtpMwBsYXZlbmRlcmJsdXNoMwBwZWFjaHB1ZmYzAGJpc3F1ZTMAbGlnaHRza3libHVlMwBkZWVwc2t5Ymx1ZTMAbGlnaHRibHVlMwBjYWRldGJsdWUzAGRvZGdlcmJsdWUzAGxpZ2h0c3RlZWxibHVlMwByb3lhbGJsdWUzAHNsYXRlYmx1ZTMAbmF2YWpvd2hpdGUzAGFudGlxdWV3aGl0ZTMAY2hvY29sYXRlMwBjaGFydHJldXNlMwBtaXN0eXJvc2UzAHBhbGV0dXJxdW9pc2UzAGF6dXJlMwBhcXVhbWFyaW5lMwB0aGlzdGxlMwBtZWRpdW1wdXJwbGUzAGRhcmtvcmFuZ2UzAGxpZ2h0Z29sZGVucm9kMwBkYXJrZ29sZGVucm9kMwBidXJseXdvb2QzAGdvbGQzAG1lZGl1bW9yY2hpZDMAZGFya29yY2hpZDMAcGFsZXZpb2xldHJlZDMAaW5kaWFucmVkMwBvcmFuZ2VyZWQzAG9saXZlZHJhYjMAbWFnZW50YTMAc2llbm5hMwBceEYzAFx4RTMAXHhEMwBceEMzAFx4QjMAXHhBMwBncmV5OTMAZ3JheTkzAFx4OTMAZ3JleTgzAGdyYXk4MwBceDgzAGdyZXk3MwBncmF5NzMAZ3JleTYzAGdyYXk2MwBncmV5NTMAZ3JheTUzAFNUU0laRShuZXh0KSA8PSBVSU5UNjRfQygxKSA8PCA1MwBTVFNJWkUobikgPD0gVUlOVDY0X0MoMSkgPDwgNTMAZ3JleTQzAGdyYXk0MwBncmV5MzMAZ3JheTMzAGdyZXkyMwBncmF5MjMAZ3JleTEzAGdyYXkxMwBceDEzAC9yZGd5OS8zAC9idXB1OS8zAC9yZHB1OS8zAC9wdWJ1OS8zAC95bGduYnU5LzMAL2duYnU5LzMAL3JkeWxidTkvMwAvcmRidTkvMwAvZ3JleXM5LzMAL2dyZWVuczkvMwAvYmx1ZXM5LzMAL3B1cnBsZXM5LzMAL29yYW5nZXM5LzMAL3JlZHM5LzMAL3B1b3I5LzMAL3lsb3JicjkvMwAvcHVidWduOS8zAC9idWduOS8zAC9wcmduOS8zAC9yZHlsZ245LzMAL3lsZ245LzMAL3NwZWN0cmFsOS8zAC9waXlnOS8zAC9icmJnOS8zAC9wdXJkOS8zAC95bG9ycmQ5LzMAL29ycmQ5LzMAL3BhaXJlZDkvMwAvc2V0MzkvMwAvc2V0MTkvMwAvcGFzdGVsMTkvMwAvcmRneTgvMwAvYnVwdTgvMwAvcmRwdTgvMwAvcHVidTgvMwAveWxnbmJ1OC8zAC9nbmJ1OC8zAC9yZHlsYnU4LzMAL3JkYnU4LzMAL2FjY2VudDgvMwAvZ3JleXM4LzMAL2dyZWVuczgvMwAvYmx1ZXM4LzMAL3B1cnBsZXM4LzMAL29yYW5nZXM4LzMAL3JlZHM4LzMAL3B1b3I4LzMAL3lsb3JicjgvMwAvcHVidWduOC8zAC9idWduOC8zAC9wcmduOC8zAC9yZHlsZ244LzMAL3lsZ244LzMAL3NwZWN0cmFsOC8zAC9waXlnOC8zAC9icmJnOC8zAC9wdXJkOC8zAC95bG9ycmQ4LzMAL29ycmQ4LzMAL3BhaXJlZDgvMwAvc2V0MzgvMwAvc2V0MjgvMwAvcGFzdGVsMjgvMwAvZGFyazI4LzMAL3NldDE4LzMAL3Bhc3RlbDE4LzMAL3JkZ3k3LzMAL2J1cHU3LzMAL3JkcHU3LzMAL3B1YnU3LzMAL3lsZ25idTcvMwAvZ25idTcvMwAvcmR5bGJ1Ny8zAC9yZGJ1Ny8zAC9hY2NlbnQ3LzMAL2dyZXlzNy8zAC9ncmVlbnM3LzMAL2JsdWVzNy8zAC9wdXJwbGVzNy8zAC9vcmFuZ2VzNy8zAC9yZWRzNy8zAC9wdW9yNy8zAC95bG9yYnI3LzMAL3B1YnVnbjcvMwAvYnVnbjcvMwAvcHJnbjcvMwAvcmR5bGduNy8zAC95bGduNy8zAC9zcGVjdHJhbDcvMwAvcGl5ZzcvMwAvYnJiZzcvMwAvcHVyZDcvMwAveWxvcnJkNy8zAC9vcnJkNy8zAC9wYWlyZWQ3LzMAL3NldDM3LzMAL3NldDI3LzMAL3Bhc3RlbDI3LzMAL2RhcmsyNy8zAC9zZXQxNy8zAC9wYXN0ZWwxNy8zAC9yZGd5Ni8zAC9idXB1Ni8zAC9yZHB1Ni8zAC9wdWJ1Ni8zAC95bGduYnU2LzMAL2duYnU2LzMAL3JkeWxidTYvMwAvcmRidTYvMwAvYWNjZW50Ni8zAC9ncmV5czYvMwAvZ3JlZW5zNi8zAC9ibHVlczYvMwAvcHVycGxlczYvMwAvb3JhbmdlczYvMwAvcmVkczYvMwAvcHVvcjYvMwAveWxvcmJyNi8zAC9wdWJ1Z242LzMAL2J1Z242LzMAL3ByZ242LzMAL3JkeWxnbjYvMwAveWxnbjYvMwAvc3BlY3RyYWw2LzMAL3BpeWc2LzMAL2JyYmc2LzMAL3B1cmQ2LzMAL3lsb3JyZDYvMwAvb3JyZDYvMwAvcGFpcmVkNi8zAC9zZXQzNi8zAC9zZXQyNi8zAC9wYXN0ZWwyNi8zAC9kYXJrMjYvMwAvc2V0MTYvMwAvcGFzdGVsMTYvMwAvcmRneTUvMwAvYnVwdTUvMwAvcmRwdTUvMwAvcHVidTUvMwAveWxnbmJ1NS8zAC9nbmJ1NS8zAC9yZHlsYnU1LzMAL3JkYnU1LzMAL2FjY2VudDUvMwAvZ3JleXM1LzMAL2dyZWVuczUvMwAvYmx1ZXM1LzMAL3B1cnBsZXM1LzMAL29yYW5nZXM1LzMAL3JlZHM1LzMAL3B1b3I1LzMAL3lsb3JicjUvMwAvcHVidWduNS8zAC9idWduNS8zAC9wcmduNS8zAC9yZHlsZ241LzMAL3lsZ241LzMAL3NwZWN0cmFsNS8zAC9waXlnNS8zAC9icmJnNS8zAC9wdXJkNS8zAC95bG9ycmQ1LzMAL29ycmQ1LzMAL3BhaXJlZDUvMwAvc2V0MzUvMwAvc2V0MjUvMwAvcGFzdGVsMjUvMwAvZGFyazI1LzMAL3NldDE1LzMAL3Bhc3RlbDE1LzMAL3JkZ3k0LzMAL2J1cHU0LzMAL3JkcHU0LzMAL3B1YnU0LzMAL3lsZ25idTQvMwAvZ25idTQvMwAvcmR5bGJ1NC8zAC9yZGJ1NC8zAC9hY2NlbnQ0LzMAL2dyZXlzNC8zAC9ncmVlbnM0LzMAL2JsdWVzNC8zAC9wdXJwbGVzNC8zAC9vcmFuZ2VzNC8zAC9yZWRzNC8zAC9wdW9yNC8zAC95bG9yYnI0LzMAL3B1YnVnbjQvMwAvYnVnbjQvMwAvcHJnbjQvMwAvcmR5bGduNC8zAC95bGduNC8zAC9zcGVjdHJhbDQvMwAvcGl5ZzQvMwAvYnJiZzQvMwAvcHVyZDQvMwAveWxvcnJkNC8zAC9vcnJkNC8zAC9wYWlyZWQ0LzMAL3NldDM0LzMAL3NldDI0LzMAL3Bhc3RlbDI0LzMAL2RhcmsyNC8zAC9zZXQxNC8zAC9wYXN0ZWwxNC8zAC9yZGd5My8zAC9idXB1My8zAC9yZHB1My8zAC9wdWJ1My8zAC95bGduYnUzLzMAL2duYnUzLzMAL3JkeWxidTMvMwAvcmRidTMvMwAvYWNjZW50My8zAC9ncmV5czMvMwAvZ3JlZW5zMy8zAC9ibHVlczMvMwAvcHVycGxlczMvMwAvb3JhbmdlczMvMwAvcmVkczMvMwAvcHVvcjMvMwAveWxvcmJyMy8zAC9wdWJ1Z24zLzMAL2J1Z24zLzMAL3ByZ24zLzMAL3JkeWxnbjMvMwAveWxnbjMvMwAvc3BlY3RyYWwzLzMAL3BpeWczLzMAL2JyYmczLzMAL3B1cmQzLzMAL3lsb3JyZDMvMwAvb3JyZDMvMwAvcGFpcmVkMy8zAC9zZXQzMy8zAC9zZXQyMy8zAC9wYXN0ZWwyMy8zAC9kYXJrMjMvMwAvc2V0MTMvMwAvcGFzdGVsMTMvMwAvcGFpcmVkMTIvMwAvc2V0MzEyLzMAL3JkZ3kxMS8zAC9yZHlsYnUxMS8zAC9yZGJ1MTEvMwAvcHVvcjExLzMAL3ByZ24xMS8zAC9yZHlsZ24xMS8zAC9zcGVjdHJhbDExLzMAL3BpeWcxMS8zAC9icmJnMTEvMwAvcGFpcmVkMTEvMwAvc2V0MzExLzMAL3JkZ3kxMC8zAC9yZHlsYnUxMC8zAC9yZGJ1MTAvMwAvcHVvcjEwLzMAL3ByZ24xMC8zAC9yZHlsZ24xMC8zAC9zcGVjdHJhbDEwLzMAL3BpeWcxMC8zAC9icmJnMTAvMwAvcGFpcmVkMTAvMwAvc2V0MzEwLzMAMTQuMS4zAGl2b3J5MgBncmV5MgBkYXJrc2xhdGVncmF5MgBceDIAc25vdzIAbGlnaHR5ZWxsb3cyAGhvbmV5ZGV3MgBSVHJlZUluc2VydDIAd2hlYXQyAHN1cDIAbm9wMgB0b21hdG8yAHJvc3licm93bjIAbWFyb29uMgBsaWdodHNhbG1vbjIAbGVtb25jaGlmZm9uMgBzcHJpbmdncmVlbjIAZGFya29saXZlZ3JlZW4yAHBhbGVncmVlbjIAZGFya3NlYWdyZWVuMgBsaWdodGN5YW4yAHRhbjIAcGx1bTIAc2Vhc2hlbGwyAGNvcmFsMgBob3RwaW5rMgBsaWdodHBpbmsyAGRlZXBwaW5rMgBjb3Juc2lsazIAZmlyZWJyaWNrMgBraGFraTIAbGF2ZW5kZXJibHVzaDIAcGVhY2hwdWZmMgBicm9uemUyAGJpc3F1ZTIAbGlnaHRza3libHVlMgBkZWVwc2t5Ymx1ZTIAbGlnaHRibHVlMgBjYWRldGJsdWUyAGRvZGdlcmJsdWUyAGxpZ2h0c3RlZWxibHVlMgByb3lhbGJsdWUyAHNsYXRlYmx1ZTIAbmF2YWpvd2hpdGUyAGFudGlxdWV3aGl0ZTIAY2hvY29sYXRlMgBjaGFydHJldXNlMgBtaXN0eXJvc2UyAHBhbGV0dXJxdW9pc2UyAGF6dXJlMgBhcXVhbWFyaW5lMgB0aGlzdGxlMgBtZWRpdW1wdXJwbGUyAGRhcmtvcmFuZ2UyAGxpZ2h0Z29sZGVucm9kMgBkYXJrZ29sZGVucm9kMgBidXJseXdvb2QyAGdvbGQyAG1lZGl1bW9yY2hpZDIAZGFya29yY2hpZDIAcGFsZXZpb2xldHJlZDIAaW5kaWFucmVkMgBvcmFuZ2VyZWQyAG9saXZlZHJhYjIAbWFnZW50YTIAc2llbm5hMgBceEYyAFx4RTIAXHhEMgBceEMyAFx4QjIAXHhBMgBncmV5OTIAZ3JheTkyAFx4OTIAZ3JleTgyAGdyYXk4MgBceDgyAGdyZXk3MgBncmF5NzIAZ3JleTYyAGdyYXk2MgBncmV5NTIAZ3JheTUyAGdyZXk0MgBncmF5NDIAZ3JleTMyAGdyYXkzMgBncmV5MjIAZ3JheTIyAGdyZXkxMgBncmF5MTIAXHgxMgBmcmFjMTIAL3BhaXJlZDEyLzEyAC9zZXQzMTIvMTIAL3JkZ3k5LzIAL2J1cHU5LzIAL3JkcHU5LzIAL3B1YnU5LzIAL3lsZ25idTkvMgAvZ25idTkvMgAvcmR5bGJ1OS8yAC9yZGJ1OS8yAC9ncmV5czkvMgAvZ3JlZW5zOS8yAC9ibHVlczkvMgAvcHVycGxlczkvMgAvb3JhbmdlczkvMgAvcmVkczkvMgAvcHVvcjkvMgAveWxvcmJyOS8yAC9wdWJ1Z245LzIAL2J1Z245LzIAL3ByZ245LzIAL3JkeWxnbjkvMgAveWxnbjkvMgAvc3BlY3RyYWw5LzIAL3BpeWc5LzIAL2JyYmc5LzIAL3B1cmQ5LzIAL3lsb3JyZDkvMgAvb3JyZDkvMgAvcGFpcmVkOS8yAC9zZXQzOS8yAC9zZXQxOS8yAC9wYXN0ZWwxOS8yAC9yZGd5OC8yAC9idXB1OC8yAC9yZHB1OC8yAC9wdWJ1OC8yAC95bGduYnU4LzIAL2duYnU4LzIAL3JkeWxidTgvMgAvcmRidTgvMgAvYWNjZW50OC8yAC9ncmV5czgvMgAvZ3JlZW5zOC8yAC9ibHVlczgvMgAvcHVycGxlczgvMgAvb3JhbmdlczgvMgAvcmVkczgvMgAvcHVvcjgvMgAveWxvcmJyOC8yAC9wdWJ1Z244LzIAL2J1Z244LzIAL3ByZ244LzIAL3JkeWxnbjgvMgAveWxnbjgvMgAvc3BlY3RyYWw4LzIAL3BpeWc4LzIAL2JyYmc4LzIAL3B1cmQ4LzIAL3lsb3JyZDgvMgAvb3JyZDgvMgAvcGFpcmVkOC8yAC9zZXQzOC8yAC9zZXQyOC8yAC9wYXN0ZWwyOC8yAC9kYXJrMjgvMgAvc2V0MTgvMgAvcGFzdGVsMTgvMgAvcmRneTcvMgAvYnVwdTcvMgAvcmRwdTcvMgAvcHVidTcvMgAveWxnbmJ1Ny8yAC9nbmJ1Ny8yAC9yZHlsYnU3LzIAL3JkYnU3LzIAL2FjY2VudDcvMgAvZ3JleXM3LzIAL2dyZWVuczcvMgAvYmx1ZXM3LzIAL3B1cnBsZXM3LzIAL29yYW5nZXM3LzIAL3JlZHM3LzIAL3B1b3I3LzIAL3lsb3JicjcvMgAvcHVidWduNy8yAC9idWduNy8yAC9wcmduNy8yAC9yZHlsZ243LzIAL3lsZ243LzIAL3NwZWN0cmFsNy8yAC9waXlnNy8yAC9icmJnNy8yAC9wdXJkNy8yAC95bG9ycmQ3LzIAL29ycmQ3LzIAL3BhaXJlZDcvMgAvc2V0MzcvMgAvc2V0MjcvMgAvcGFzdGVsMjcvMgAvZGFyazI3LzIAL3NldDE3LzIAL3Bhc3RlbDE3LzIAL3JkZ3k2LzIAL2J1cHU2LzIAL3JkcHU2LzIAL3B1YnU2LzIAL3lsZ25idTYvMgAvZ25idTYvMgAvcmR5bGJ1Ni8yAC9yZGJ1Ni8yAC9hY2NlbnQ2LzIAL2dyZXlzNi8yAC9ncmVlbnM2LzIAL2JsdWVzNi8yAC9wdXJwbGVzNi8yAC9vcmFuZ2VzNi8yAC9yZWRzNi8yAC9wdW9yNi8yAC95bG9yYnI2LzIAL3B1YnVnbjYvMgAvYnVnbjYvMgAvcHJnbjYvMgAvcmR5bGduNi8yAC95bGduNi8yAC9zcGVjdHJhbDYvMgAvcGl5ZzYvMgAvYnJiZzYvMgAvcHVyZDYvMgAveWxvcnJkNi8yAC9vcnJkNi8yAC9wYWlyZWQ2LzIAL3NldDM2LzIAL3NldDI2LzIAL3Bhc3RlbDI2LzIAL2RhcmsyNi8yAC9zZXQxNi8yAC9wYXN0ZWwxNi8yAC9yZGd5NS8yAC9idXB1NS8yAC9yZHB1NS8yAC9wdWJ1NS8yAC95bGduYnU1LzIAL2duYnU1LzIAL3JkeWxidTUvMgAvcmRidTUvMgAvYWNjZW50NS8yAC9ncmV5czUvMgAvZ3JlZW5zNS8yAC9ibHVlczUvMgAvcHVycGxlczUvMgAvb3JhbmdlczUvMgAvcmVkczUvMgAvcHVvcjUvMgAveWxvcmJyNS8yAC9wdWJ1Z241LzIAL2J1Z241LzIAL3ByZ241LzIAL3JkeWxnbjUvMgAveWxnbjUvMgAvc3BlY3RyYWw1LzIAL3BpeWc1LzIAL2JyYmc1LzIAL3B1cmQ1LzIAL3lsb3JyZDUvMgAvb3JyZDUvMgAvcGFpcmVkNS8yAC9zZXQzNS8yAC9zZXQyNS8yAC9wYXN0ZWwyNS8yAC9kYXJrMjUvMgAvc2V0MTUvMgAvcGFzdGVsMTUvMgAvcmRneTQvMgAvYnVwdTQvMgAvcmRwdTQvMgAvcHVidTQvMgAveWxnbmJ1NC8yAC9nbmJ1NC8yAC9yZHlsYnU0LzIAL3JkYnU0LzIAL2FjY2VudDQvMgAvZ3JleXM0LzIAL2dyZWVuczQvMgAvYmx1ZXM0LzIAL3B1cnBsZXM0LzIAL29yYW5nZXM0LzIAL3JlZHM0LzIAL3B1b3I0LzIAL3lsb3JicjQvMgAvcHVidWduNC8yAC9idWduNC8yAC9wcmduNC8yAC9yZHlsZ240LzIAL3lsZ240LzIAL3NwZWN0cmFsNC8yAC9waXlnNC8yAC9icmJnNC8yAC9wdXJkNC8yAC95bG9ycmQ0LzIAL29ycmQ0LzIAL3BhaXJlZDQvMgAvc2V0MzQvMgAvc2V0MjQvMgAvcGFzdGVsMjQvMgAvZGFyazI0LzIAL3NldDE0LzIAL3Bhc3RlbDE0LzIAL3JkZ3kzLzIAL2J1cHUzLzIAL3JkcHUzLzIAL3B1YnUzLzIAL3lsZ25idTMvMgAvZ25idTMvMgAvcmR5bGJ1My8yAC9yZGJ1My8yAC9hY2NlbnQzLzIAL2dyZXlzMy8yAC9ncmVlbnMzLzIAL2JsdWVzMy8yAC9wdXJwbGVzMy8yAC9vcmFuZ2VzMy8yAC9yZWRzMy8yAC9wdW9yMy8yAC95bG9yYnIzLzIAL3B1YnVnbjMvMgAvYnVnbjMvMgAvcHJnbjMvMgAvcmR5bGduMy8yAC95bGduMy8yAC9zcGVjdHJhbDMvMgAvcGl5ZzMvMgAvYnJiZzMvMgAvcHVyZDMvMgAveWxvcnJkMy8yAC9vcnJkMy8yAC9wYWlyZWQzLzIAL3NldDMzLzIAL3NldDIzLzIAL3Bhc3RlbDIzLzIAL2RhcmsyMy8yAC9zZXQxMy8yAC9wYXN0ZWwxMy8yAC9wYWlyZWQxMi8yAC9zZXQzMTIvMgAvcmRneTExLzIAL3JkeWxidTExLzIAL3JkYnUxMS8yAC9wdW9yMTEvMgAvcHJnbjExLzIAL3JkeWxnbjExLzIAL3NwZWN0cmFsMTEvMgAvcGl5ZzExLzIAL2JyYmcxMS8yAC9wYWlyZWQxMS8yAC9zZXQzMTEvMgAvcmRneTEwLzIAL3JkeWxidTEwLzIAL3JkYnUxMC8yAC9wdW9yMTAvMgAvcHJnbjEwLzIAL3JkeWxnbjEwLzIAL3NwZWN0cmFsMTAvMgAvcGl5ZzEwLzIAL2JyYmcxMC8yAC9wYWlyZWQxMC8yAC9zZXQzMTAvMgAxLjIAIC1kYXNoIDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQBsYXRpbi0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy04ODU5LTEAaSA+PSAxAHEtPm4gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDAgfHwgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAxAGJ6LnNpemUgJSAzID09IDEATElTVF9TSVpFKCZjdHgtPlRyZWVfZWRnZSkgPT0gY3R4LT5OX25vZGVzIC0gMQBub2RlX3NldF9zaXplKGctPm5faWQpID09IG9zaXplICsgMQBuLT5jb3VudCArICgqbm4pLT5jb3VudCA9PSBOT0RFQ0FSRCArIDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdICsgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID09IE5PREVDQVJEICsgMQBncmV5MABncmF5MABqc29uMAAjZjBmMGYwACNlMGUwZTAAeGItPmxvY2F0ZWQgPiBBR1hCVUZfSU5MSU5FX1NJWkVfMABcMABUMABceEYwAFx4RTAAXHhEMABceEMwAFx4QjAAXHhBMABncmV5OTAAZ3JheTkwAFx4OTAAZ3JleTgwAGdyYXk4MABceDgwACM4MDgwODAAZ3JleTcwAGdyYXk3MABjY3dyb3QgPT0gMCB8fCBjY3dyb3QgPT0gOTAgfHwgY2N3cm90ID09IDE4MCB8fCBjY3dyb3QgPT0gMjcwAGN3cm90ID09IDAgfHwgY3dyb3QgPT0gOTAgfHwgY3dyb3QgPT0gMTgwIHx8IGN3cm90ID09IDI3MABncmV5NjAAZ3JheTYwAGdyZXk1MABncmF5NTAAZ3JleTQwAGdyYXk0MAByLndpZHRoKCk8MWU0MABncmV5MzAAZ3JheTMwACMzMDMwMzAAZ3JleTIwAGdyYXkyMABncmV5MTAAZ3JheTEwAFx4MTAAIzEwMTAxMAAvcGFpcmVkMTIvMTAAL3NldDMxMi8xMAAvcmRneTExLzEwAC9yZHlsYnUxMS8xMAAvcmRidTExLzEwAC9wdW9yMTEvMTAAL3ByZ24xMS8xMAAvcmR5bGduMTEvMTAAL3NwZWN0cmFsMTEvMTAAL3BpeWcxMS8xMAAvYnJiZzExLzEwAC9wYWlyZWQxMS8xMAAvc2V0MzExLzEwAC9yZGd5MTAvMTAAL3JkeWxidTEwLzEwAC9yZGJ1MTAvMTAAL3B1b3IxMC8xMAAvcHJnbjEwLzEwAC9yZHlsZ24xMC8xMAAvc3BlY3RyYWwxMC8xMAAvcGl5ZzEwLzEwAC9icmJnMTAvMTAAL3BhaXJlZDEwLzEwAC9zZXQzMTAvMTAAMTIwMABncmV5MTAwAGdyYXkxMDAASVNPLUlSLTEwMAAxMDAwMAAlIVBTLUFkb2JlLTMuMABueiA+IDAAbGlzdC0+Y2FwYWNpdHkgPiAwAGRpc3QgPiAwAHBhdGhjb3VudCA+IDAAd2d0ID4gMABuc2l0ZXMgPiAwAHNpZGVzID4gMABydiA9PSAwIHx8IChORF9vcmRlcihydiktTkRfb3JkZXIodikpKmRpciA+IDAAaW5wbiA+IDAAbGVuID4gMABxdDEtPm4gPiAwICYmIHF0Mi0+biA+IDAAbSA+IDAgJiYgbiA+IDAAbmV3VG90YWwgPiAwAHdpZHRoID4gMABsaXN0LT5zaXplID4gMABkaWN0LT5zaXplID4gMABzcGwtPnNpemUgPiAwAHNlbGYtPnNpemUgPiAwAGJ6LnNpemUgPiAwAGluY3JlYXNlID4gMABib3VuZCA+IDAAZ3JhcGgtPndlaWdodHNbeF0gPiAwAGdyYXBoLT53ZWlnaHRzW25fZWRnZXNdID4gMABpbmRleCA+PSAwAHQgPj0gMABubm9kZXMgPj0gMABuX25vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMABvcmlnaW5hbCA+PSAwAE1heHJhbmsgPj0gMABQYWNrID49IDAAaWkgPCAxPDxkaW0gJiYgaWkgPj0gMAB3aWR0aCA+PSAwAGpkaWFnID49IDAAaWRpYWcgPj0gMABkID49IDAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IDAgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IDAAViA+PSAwAGFnbm5vZGVzKGdyYXBoKSA+PSAwAGFnbm5vZGVzKGcpID49IDAARURfdHJlZV9pbmRleChlKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABsaXN0LT5iYXNlICE9IE5VTEwgfHwgaW5kZXggPT0gMCB8fCBzdHJpZGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAY29zeCAhPSAwIHx8IHNpbnggIT0gMAByZXFfYWxpZ25tZW50ICE9IDAAbWVtY21wKCZzdHlsZSwgJihncmFwaHZpel9wb2x5Z29uX3N0eWxlX3QpezB9LCBzaXplb2Yoc3R5bGUpKSAhPSAwAHJlc3VsdCA9PSAoaW50KShzaXplIC0gMSkgfHwgcmVzdWx0IDwgMABtYXNrW2lpXSA8IDAATkRfaGVhcGluZGV4KHYpIDwgMABcLwBYMTEvAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhTElTVF9JU19FTVBUWShwbGlzdCkAZ3ZfbGlzdF9pc19jb250aWd1b3VzXygqbGlzdCkAb25lIDw9IExJU1RfU0laRShsaXN0KQBucCA8IExJU1RfU0laRShsaXN0KQBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhTElTVF9JU19FTVBUWSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopAExJU1RfU0laRSgmYXJyKSA9PSAoc2l6ZV90KWFnbm5vZGVzKHNnKQBtb3ZlIHRvICglLjBmLCAlLjBmKQA7IHNwbGluZSB0byAoJS4wZiwgJS4wZikAOyBsaW5lIHRvICglLjBmLCAlLjBmKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIHRydWUpAHZhbHVlICYmIHN0cmxlbih2YWx1ZSkAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYyhBLCBmYWxzZSkAIXVzZV9zdGFnZSB8fCBzaXplIDw9IHNpemVvZihzdGFnZSkARURfbGFiZWwoZmUpACFUUkVFX0VER0UoZSkAIWNvbnN0cmFpbmluZ19mbGF0X2VkZ2UoZywgZSkAbm9kZV9zZXRfaXNfZW1wdHkoZy0+bl9pZCkAcl8lZCkAbF8lZCkAKGxpYikAIVNwYXJzZU1hdHJpeF9oYXNfZGlhZ29uYWwoQSkAIHNjYW5uaW5nIGEgSFRNTCBzdHJpbmcgKG1pc3NpbmcgJz4nPyBiYWQgbmVzdGluZz8gbG9uZ2VyIHRoYW4gJWQ/KQAgc2Nhbm5pbmcgYSBxdW90ZWQgc3RyaW5nIChtaXNzaW5nIGVuZHF1b3RlPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIC8qLi4uKi8gY29tbWVudCAobWlzc2luZyAnKi8/IGxvbmdlciB0aGFuICVkPykAZmFsbGJhY2soNCkAb25faGVhcChyMCkgfHwgb25faGVhcChyMSkAYWd0YWlsKGUpID09IFVGX2ZpbmQoYWd0YWlsKGUpKQBhZ2hlYWQoZSkgPT0gVUZfZmluZChhZ2hlYWQoZSkpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKQBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKQBzdHJlcShtb2RlLCAiciIpIHx8IHN0cmVxKG1vZGUsICJyYiIpIHx8IHN0cmVxKG1vZGUsICJ3IikgfHwgc3RyZXEobW9kZSwgIndiIikAcG5hbWUgIT0gTlVMTCAmJiAhc3RyZXEocG5hbWUsICIiKQBzZXRsaW5ld2lkdGgoACkgcm90YXRlKCVkKSB0cmFuc2xhdGUoACB0cmFuc2Zvcm09InNjYWxlKABOT1RBVElPTigAICgAIG5lYXIgJyVzJwAlbGYsJWxmLCVsZiwnJVteJ10nAGlzZGlnaXQoKGludClkb3RwWzFdKSAmJiBpc2RpZ2l0KChpbnQpZG90cFsyXSkgJiYgZG90cFszXSA9PSAnXDAnACYAJQAkAHVybCgjADx0ZXh0UGF0aCB4bGluazpocmVmPSIjADxhcmVhIHNoYXBlPSJwb2x5IgAgZmlsbD0iIyUwMnglMDJ4JTAyeCIAKHNlcSAmIFNFUV9NQVNLKSA9PSBzZXEgJiYgInNlcXVlbmNlIElEIG92ZXJmbG93IgBndl9zb3J0X2NvbXBhciA9PSBOVUxMICYmIGd2X3NvcnRfYXJnID09IE5VTEwgJiYgInVuc3VwcG9ydGVkIHJlY3Vyc2l2ZSBjYWxsIHRvIGd2X3NvcnQiAGd2X3NvcnRfY29tcGFyICE9IE5VTEwgJiYgIm5vIGNvbXBhcmF0b3Igc2V0IGluIGd2X3NvcnQiAG9wLT5vcC51LnBvbHlnb24uY250IDw9IElOVF9NQVggJiYgInBvbHlnb24gY291bnQgZXhjZWVkcyBndnJlbmRlcl9wb2x5Z29uIHN1cHBvcnQiACB0ZXh0LWFuY2hvcj0ic3RhcnQiAHAueCAhPSBhICYmICJjYW5ub3QgaGFuZGxlIGVsbGlwc2UgdGFuZ2VudCBzbG9wZSBpbiBob3Jpem9udGFsIGV4dHJlbWUgcG9pbnQiAGZ1bGxfbGVuZ3RoX3dpdGhvdXRfc2hhZnQgPiAwICYmICJub24tcG9zaXRpdmUgZnVsbCBsZW5ndGggd2l0aG91dCBzaGFmdCIAPGFyZWEgc2hhcGU9InJlY3QiAHNpemUgPiAwICYmICJhdHRlbXB0IHRvIGFsbG9jYXRlIGFycmF5IG9mIDAtc2l6ZWQgZWxlbWVudHMiAGluZGV4IDwgc2VsZi0+c2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAaW5kZXggPCBzZWxmLnNpemVfYml0cyAmJiAib3V0IG9mIGJvdW5kcyBhY2Nlc3MiACpzMSAhPSAqczIgJiYgImR1cGxpY2F0ZSBzZXBhcmF0b3IgY2hhcmFjdGVycyIAR0RfbWlucmFuayhzdWJnKSA8PSBHRF9tYXhyYW5rKHN1YmcpICYmICJjb3JydXB0ZWQgcmFuayBib3VuZHMiAGluZGV4IDwgbGlzdC5zaXplICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgAodWludHB0cl90KXMgJSAyID09IDAgJiYgImhlYXAgcG9pbnRlciB3aXRoIGxvdyBiaXQgc2V0IHdpbGwgY29sbGlkZSB3aXRoIGFub255bW91cyBJRHMiACAoKyU2bGQgYnl0ZXMgJXN8JXUsIHhtbHBhcnNlLmM6JWQpICUqcyIAIGZvbnQtZmFtaWx5PSIlcyIAIGZvbnQtd2VpZ2h0PSIlcyIAIGZpbGw9IiVzIgAgZm9udC1zdHJldGNoPSIlcyIAIGZvbnQtc3R5bGU9IiVzIgBiYWQgZWRnZSBsZW4gIiVzIgAgYmFzZWxpbmUtc2hpZnQ9InN1cGVyIgBhZ3hibGVuKHhiKSA8PSBzaXplb2YoeGItPnN0b3JlKSAmJiAiYWd4YnVmIGNvcnJ1cHRpb24iAGNlbGwucm93IDwgdGFibGUtPnJvd19jb3VudCAmJiAib3V0IG9mIHJhbmdlIGNlbGwiAGNlbGwuY29sIDwgdGFibGUtPmNvbHVtbl9jb3VudCAmJiAib3V0IG9mIHJhbmdlIGNlbGwiACB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgBmdWxsX2xlbmd0aCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCIAZnVsbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgYmFzZSB3aWR0aCIAbm9taW5hbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIG5vbWluYWwgYmFzZSB3aWR0aCIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0IiB4PSIlZyIgeT0iJWciACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgZm9udC1zaXplPSIlLjJmIgAgZmlsbC1vcGFjaXR5PSIlZiIAPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIAaXNmaW5pdGUobSkgJiYgImVsbGlwc2UgdGFuZ2VudCBzbG9wZSBpcyBpbmZpbml0ZSIAKHhiLT5sb2NhdGVkID09IEFHWEJVRl9PTl9IRUFQIHx8IHhiLT5sb2NhdGVkIDw9IHNpemVvZih4Yi0+c3RvcmUpKSAmJiAiY29ycnVwdGVkIGFneGJ1ZiB0eXBlIgBBLT50eXBlID09IHR5cGUgJiYgImNhbGwgdG8gU3BhcnNlTWF0cml4X2Nvb3JkaW5hdGVfZm9ybV9hZGRfZW50cnkgIiAid2l0aCBpbmNvbXBhdGlibGUgdmFsdWUgdHlwZSIAIHRleHQtYW5jaG9yPSJtaWRkbGUiADxhcmVhIHNoYXBlPSJjaXJjbGUiAGNlbGwtPnJvdyArIGNlbGwtPnJvd3NwYW4gPD0gdGFibGUtPnJvd19jb3VudCAmJiAiY2VsbCBzcGFucyBoaWdoZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLnJvdyArIGNlbGwucm93c3BhbiA8PSB0YWJsZS0+cm93X2NvdW50ICYmICJjZWxsIHNwYW5zIGhpZ2hlciB0aGFuIGNvbnRhaW5pbmcgdGFibGUiAGNlbGwtPmNvbCArIGNlbGwtPmNvbHNwYW4gPD0gdGFibGUtPmNvbHVtbl9jb3VudCAmJiAiY2VsbCBzcGFucyB3aWRlciB0aGFuIGNvbnRhaW5pbmcgdGFibGUiAGNlbGwuY29sICsgY2VsbC5jb2xzcGFuIDw9IHRhYmxlLT5jb2x1bW5fY291bnQgJiYgImNlbGwgc3BhbnMgd2lkZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBvbGRfbm1lbWIgPCBTSVpFX01BWCAvIHNpemUgJiYgImNsYWltZWQgcHJldmlvdXMgZXh0ZW50IGlzIHRvbyBsYXJnZSIAdGhldGEgPj0gMCAmJiB0aGV0YSA8PSBNX1BJICYmICJ0aGV0YSBvdXQgb2YgcmFuZ2UiAHRhYmxlLT5oZWlnaHRzID09IE5VTEwgJiYgInRhYmxlIGhlaWdodHMgY29tcHV0ZWQgdHdpY2UiAHRhYmxlLT53aWR0aHMgPT0gTlVMTCAmJiAidGFibGUgd2lkdGhzIGNvbXB1dGVkIHR3aWNlIgAgdGV4dC1hbmNob3I9ImVuZCIAIGZvbnQtd2VpZ2h0PSJib2xkIgAgZm9udC1zdHlsZT0iaXRhbGljIgAgYmFzZWxpbmUtc2hpZnQ9InN1YiIAXCIAbGxlbiA8PSBJTlRfTUFYICYmICJYTUwgdG9rZW4gdG9vIGxvbmcgZm9yIGV4cGF0IEFQSSIAIiByeT0iAF9wIiBzdGFydE9mZnNldD0iNTAlIj48dHNwYW4geD0iMCIgZHk9IgAiIGN5PSIAIiB5PSIAIiByeD0iACBjeD0iACB4PSIAIHRhcmdldD0iACBwb2ludHM9IgAgY29vcmRzPSIAIHRleHQtZGVjb3JhdGlvbj0iACBmaWxsPSIAIiBzdHJva2Utd2lkdGg9IgA8aW1hZ2UgeGxpbms6aHJlZj0iADw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iACIgbmFtZT0iACB4bGluazp0aXRsZT0iACB0aXRsZT0iACIgc3Ryb2tlPSIAPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0iADxkZWZzPgo8cmFkaWFsR3JhZGllbnQgaWQ9IgA8bWFwIGlkPSIAPGcgaWQ9IgAgZD0iACIgeTI9IgAiIHgyPSIAIiB5MT0iAHgxPSIAIHZpZXdCb3g9IiVkLjAwICVkLjAwICVkLjAwICVkLjAwIgAgdHJhbnNmb3JtPSJyb3RhdGUoJWQgJWcgJWcpIgBhZ3hibGVuKCZjdHgtPlNidWYpID09IDAgJiYgInBlbmRpbmcgc3RyaW5nIGRhdGEgdGhhdCB3YXMgbm90IGNvbnN1bWVkIChtaXNzaW5nICIgImVuZHN0cigpL2VuZGh0bWxzdHIoKT8pIgAgYWx0PSIiAEN5Y2xlIEVycm9yIQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQA8IS0tIEdlbmVyYXRlZCBieSAAJXMlenUgLSMlMDJ4JTAyeCUwMnglMDJ4IAAlcyV6dSAtIyUwMnglMDJ4JTAyeCAAJWMgJXp1IAB0ICV1IAAgY3JlYXRlIHRleHQgAHhMYXlvdXQgAGRlZmF1bHQgAHN0cmljdCAAJXMlenUgLSVzIAAgLXNtb290aCBiZXppZXIgACBtb3ZldG8gACB2ZXJzaW9uIAAgY3JlYXRlIHBvbHlnb24gACAtdGV4dCB7JXN9IC1maWxsIAAgY3JlYXRlIG92YWwgACAtd2lkdGggAG5ld3BhdGggAGdyYXBoIABzLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZyAAZSwlLjVnLCUuNWcgACVnICVnIAAlLjAzbGYgACUuM2YgACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJS4wZiAlLjBmIAAgLW91dGxpbmUgACBjcmVhdGUgbGluZSAAbm9kZSAAW0dyYXBodml6XSAlczolZDogJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgACVkIABUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAFsgL1JlY3QgWyAAVCAAUyAAT1BFTiAASSAARiAARSAAQyAAIC0+IABSYW5rIHNlcGFyYXRpb24gPSAAVW5zYXRpc2ZpZWQgY29uc3RyYWludDogAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzOiAAJXM6IABTb2x2aW5nIG1vZGVsOiAAU2V0dGluZyB1cCBzcHJpbmcgbW9kZWw6IABjb252ZXJ0IGdyYXBoOiAAIFRpdGxlOiAAInRleHQiOiAAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6IAAibmFtZSI6IAAic3R5bGUiOiAAImZhY2UiOiAAMiAAPCEtLSAAIC0tIAAlIABfcCIgAGxfJWQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJXp1ICBLID0gJWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAogICAgADoJIAAgICAgJXN9CgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAI2RlZmF1bHQgeyBmaW5pc2ggeyBhbWJpZW50IDAuMSBkaWZmdXNlIDAuOSB9IH0KAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAgICAgdGV4dHVyZSBJbWFnZVRleHR1cmUgeyB1cmwgIiVzIiB9CgAgICAgfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBj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ZCBjZWxsIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKSBkb2Vzbid0IGhhdmUgM24rMSBwb2ludHMKACAgZ2VuZXJhdGVkICVkIGNvbnN0cmFpbnRzCgBzcGxpbmVzIGFuZCBjbHVzdGVyIGVkZ2VzIG5vdCBzdXBwb3J0ZWQgLSB1c2luZyBsaW5lIHNlZ21lbnRzCgBvYmplY3RzCgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAZm9udCBuYW1lICVzIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIGFjY2VwdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAZm9udCBuYW1lICVzIGlzIGxvbmdlciB0aGFuIDI5IGNoYXJhY3RlcnMgd2hpY2ggbWF5IGJlIHJlamVjdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAY2Fubm90IGFsbG9jYXRlIHBzCgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBhcnJheSBwYWNraW5nOiAlcyAlenUgcm93cyAlenUgY29sdW1ucwoAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJyVzJyBpbiBsaW5lICVkIG9mICVzIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKAG91dCBvZiBtZW1vcnkgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzCgBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdHJ5aW5nIHRvIGFsbG9jYXRlICV6dSAqICV6dSBieXRlcwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoARm91bmQgJWQgRGlHLUNvTGEgYm91bmRhcmllcwoASW5jaGVzCgAoJTR6dSkgJTd6dSBub2RlcyAlN3p1IGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBjb3VsZCBub3QgY29uc3RydWN0IG9ic3RhY2xlcyAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBTY2FubmluZyBncmFwaCAlcywgJWQgbm9kZXMKAFdhcm5pbmc6IG5vIGhhcmQtY29kZWQgbWV0cmljcyBmb3IgJyVzJy4gIEZhbGxpbmcgYmFjayB0byAnVGltZXMnIG1ldHJpY3MKAGluIGVkZ2UgJXMlcyVzCgBVc2luZyAlczogJXM6JXMKAEZvcm1hdDogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGxheW91dCAlcwoALmZ0ICVzCgBiYWQgbGFiZWwgZm9ybWF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN3p1IGNvbXBvbmVudHMgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKACAgRWRnZSAlcyAlcyAlcwoAb3J0aG8gJXMgJXMKAHBvbHlsaW5lICVzICVzCgBzcGxpbmUgJXMgJXMKAHJlY3RhbmdsZSAoJS4wZiwlLjBmKSAoJS4wZiwlLjBmKSAlcyAlcwoAaW4gY2x1c3RlciAlcwoAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgY2x1c3RlciAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAVW5oYW5kbGVkIGFkanVzdCBvcHRpb24gJXMKAHJlcG9zaXRpb24gJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggeGxhYmVsICVzCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHRhaWwgbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwoALy8qKiogYmVnaW5fZ3JhcGggJXMKAE1heC4gaXRlcmF0aW9ucyAoJWQpIHJlYWNoZWQgb24gZ3JhcGggJXMKAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKACVzIHdoaWxlIG9wZW5pbmcgJXMKAGRlcml2ZSBncmFwaCBfZGdfJWQgb2YgJXMKACBdICAlenUgdHJ1ZSAlcwoAXSAgJWQgdHJ1ZSAlcwoAIF0gICV6dSBmYWxzZSAlcwoAXSAgJWQgZmFsc2UgJXMKAG1ha2VQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAG1ha2VBZGRQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgAgIG9jdHJlZSBzY2hlbWUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBjYW4ndCBmaW5kIGxpYnJhcnkgZmlsZSAlcwoAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY291bGRuJ3Qgb3BlbiBlcHNmIGZpbGUgJXMKAGNvdWxkbid0IHJlYWQgZnJvbSBlcHNmIGZpbGUgJXMKAGluIG5vZGUgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBpbiBsYWJlbCBvZiBub2RlICVzCgBlbmQgJXMKAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgB0cmllcyA9ICVkLCBtb2RlID0gJXMKAC8vKioqIGNvbW1lbnQ6ICVzCgBmYWlsZWQgdG8gcmVzZXJ2ZSAlenUgZWxlbWVudHMgb2Ygc2l6ZSAlenUgYnl0ZXM6ICVzCgBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgBkZWxhdW5heV90cmlhbmd1bGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpOiAlcwoAZ3ZwcmludGY6ICVzCgBuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgAlJSUlVGl0bGU6ICVzCgAlcyBUaXRsZTogJXMKACMgVGl0bGU6ICVzCgAvLyoqKiBiZWdpbl9ub2RlOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBsaXN0IGVsZW1lbnQgdHlwZSBpcyBub3QgYSBwb2ludGVyLCBidXQgYGZyZWVgIHVzZWQgYXMgZGVzdHJ1Y3RvcgoAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAGFkZF9zZWdtZW50OiBlcnJvcgoAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAMCAwIDAgZWRnZWNvbG9yCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAMCAwIDEgc2V0cmdiY29sb3IKADEgMCAwIHNldHJnYmNvbG9yCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWQgJWQgc2V0bGF5ZXIKAC8vKioqIGVuZF9sYXllcgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoATGV0dGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfY2x1c3RlcgoAcmVtb3ZpbmcgZW1wdHkgY2x1c3RlcgoAQ2VudGVyCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIHdpZHRoIG9mIHNwYWNlIGNoYXJhY3RlcgoAYmFzZSByZWZlcmVyCgAlJVBhZ2VUcmFpbGVyCgAlJVRyYWlsZXIKAC8vKioqIGJlemllcgoAIiVzIiB3YXMgbm90IGZvdW5kIGFzIGEgZmlsZSBvciBhcyBhIHNoYXBlIGxpYnJhcnkgbWVtYmVyCgBzdG9wCgAgY3VydmV0bwoAbmV3cGF0aCAlLjBmICUuMGYgbW92ZXRvCgAlLjBmICUuMGYgbGluZXRvCgAgbGF5b3V0PW5lYXRvCgBub2RlICVzIGluIGdyYXBoICVzIGhhcyBubyBwb3NpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgaGF2ZSBubyBtZWFuaW5nIGluIERXQiAyLjAsIHNldCBwYWdlIGJvdW5kYXJpZXMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAbWFqb3JpemF0aW9uCgAvLyoqKiBwb2x5Z29uCgBvdmVyZmxvdyB3aGVuIGNvbXB1dGluZyBlZGdlIHdlaWdodCBzdW0KAHNmZHAgb25seSBzdXBwb3J0cyBzdGFydD1yYW5kb20KAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGNsb3NlcGF0aCBmaWxsCgAgZWxsaXBzZV9wYXRoIGZpbGwKACAgJS4wZiAlLjBmIGNlbGwKACVmICVmICVmICVmIGNlbGwKAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAZWRnZXMgaW4gZ3JhcGggJXMgaGF2ZSBubyBsZW4gYXR0cmlidXRlLiBIZW5jZSwgdGhlIG1kcyBtb2RlbAoAY2lyY3VpdCBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG1kcyBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG5vZGUgJyVzJywgZ3JhcGggJyVzJyBzaXplIHRvbyBzbWFsbCBmb3IgbGFiZWwKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAIHNldGxpbmV3aWR0aAoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgAvLyoqKiBlbmRfZ3JhcGgKAGxheW91dCBhdHRyaWJ1dGUgaXMgaW52YWxpZCBleGNlcHQgb24gdGhlIHJvb3QgZ3JhcGgKAGluIGNoZWNrcGF0aCwgYm94ZXMgJXp1IGFuZCAlenUgZG9uJ3QgdG91Y2gKAG1lcmdlX29uZXdheSBnbGl0Y2gKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgBOb2RlIG5vdCBhZGphY2VudCB0byBjZWxsIC0tIEFib3J0aW5nCgBpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAGxhYmVsX3NjaGVtZSA9ICVkID4gNCA6IGlnbm9yaW5nCgBndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAEFycm93IHR5cGUgIiVzIiB1bmtub3duIC0gaWdub3JpbmcKAGZkcCBkb2VzIG5vdCBzdXBwb3J0IHN0YXJ0PXNlbGYgLSBpZ25vcmluZwoAJXMgYXR0cmlidXRlIHZhbHVlIG11c3QgYmUgMSBvciAyIC0gaWdub3JpbmcKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBiYlslc10gJS41ZyAlLjVnICUuNWcgJS41ZwoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAfSBiaW5kIGRlZgoALlBTICUuNWYgJS41ZgoAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAICBiZWF1dGlmeV9sZWF2ZXMgJWQgbm9kZSB3ZWlnaHRzICVkIHJvdGF0aW9uICUuMDNmCgAgIHJlcHVsc2l2ZSBleHBvbmVudDogJS4wM2YKACAgSyA6ICUuMDNmIEMgOiAlLjAzZgoAJXMgJS4zZgoACmludGVyc2VjdGlvbiBhdCAlLjNmICUuM2YKACAgICBzY2FsZSAlLjNmCgB0b3J1cyB7ICUuM2YsICUuM2YKACAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGNpcmNsZSAlcyAlLjBmLCUuMGYsJS4wZgoAcmVjdCAlcyAlLjBmLCUuMGYgJS4wZiwlLjBmCgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmCgAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICUuMGYgJS4wZiAlLjBmICUuMGYKAHBvc1slenVdICUuMGYgJS4wZgoALm5yIFNGICUuMGYKc2NhbGV0aGlja25lc3MgPSAlLjBmCgAlcyBzYXZlIHBvaW50IHNpemUgYW5kIGZvbnQKLm5yIC5TIFxuKC5zCi5uciBERiBcbiguZgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlLmYgJS5mICUuZiAlLmYKAGFkZGluZyAlenUgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGdhcD0lZiwlZgoAICBhc3BlY3QgJWYKAGEgJWYgYiAlZiBjICVmIGQgJWYgciAlZgoAbW9kZWwgJWQgc21hcnRfaW5pdCAlZCBzdHJlc3N3dCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgByZWMgJWYgJWYgJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACVzIDogJWYgJWYKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBtZHNNb2RlbDogZGVsdGEgPSAlZgoAIHIxICVmIHIyICVmCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAZ3NhdmUKACUlRW5kQ29tbWVudHMKc2F2ZQoAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJWcgJWcgc2V0X3NjYWxlICVkIHJvdGF0ZSAlZyAlZyB0cmFuc2xhdGUKACVmICVmIHRyYW5zbGF0ZQoAJWQgJWQgdHJhbnNsYXRlCgAvLyoqKiBlbGxpcHNlCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKACVzOiB2c25wcmludGYgZmFpbHVyZQoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAZW5kCnJlc3RvcmUKAGxheW91dCB3YXMgbm90IGRvbmUKAExheW91dCB3YXMgbm90IGRvbmUKAC8vKioqIHBvbHlsaW5lCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKACMgZW5kIG9mIEZJRyBmaWxlCgBTaW5nbGUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKACUuMGYgJS4wZiBsaW5ldG8gc3Ryb2tlCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIHN0cm9rZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX2VkZ2UKAGxvc3QgJXMgJXMgZWRnZQoAb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB2aXJ0dWFsIHdlaWdodCBvZiBlZGdlCgBhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAc2hvd3BhZ2UKACVkICVkICVkIGJlZ2lucGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX3BhZ2UKAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgBsYWJlbDogYXJlYSB0b28gbGFyZ2UgZm9yIHJ0cmVlCgAvLyoqKiBlbmRfbm9kZQoAVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgBjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgAlZiAlZiAlZiAlZiBub2RlCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgBpbiBjaGVja3BhdGgsIGJveCAlenUgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWxsZCBiZXN0X2Nyb3NzICVsbGQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAUGFyc2luZyBvZiAiJXMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICV6dSBub2RlcyAlenUgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgAgIG1heCBsZXZlbHMgJWQKAAklcyAlZAoAICBCYXJuZXMtSHV0dCBjb25zdGFudCAlLjAzZiB0b2xlcmFuY2UgICUuMDNmIG1heGl0ZXIgJWQKAGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgByZWJ1aWxkX3ZsaXN0czogbGVhZCBpcyBudWxsIGZvciByYW5rICVkCgByZWJ1aWxkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgAgIHNtb290aGluZyAlcyBvdmVybGFwICVkIGluaXRpYWxfc2NhbGluZyAlLjAzZiBkb19zaHJpbmtpbmcgJWQKACAgY29vbGluZyAlLjAzZiBzdGVwIHNpemUgICUuMDNmIGFkYXB0aXZlICVkCgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKACAgZWRnZV9s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bWluYXRpb24sIHZlcnNpb24gMgoAJXMgZmlsbHZhbCBpcyAwLjMgaW4gMTB0aCBFZGl0aW9uIChmaWxsIDAgbWVhbnMgYmxhY2spLCAwLjUgaW4gZ3BpYyAoZmlsbCAwIG1lYW5zIHdoaXRlKSwgdW5kZWZpbmVkIGluIERXQiAyCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgBzZXR1cExhdGluMQoAXDAwMQoAJXMgICAgICAgIHRvbGVyYW5jZSAwLjAxCgAgICAgdG9sZXJhbmNlIDAuMQoAJSVQYWdlczogMQoAICAgICAgICBkaWZmdXNlQ29sb3IgMSAxIDEKADEwMC4wMAoAIEVQU0YtMy4wCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2YgQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gMAoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAE5vIGxpYnogc3VwcG9ydC4KAHR3b3BpOiB1c2Ugb2Ygd2VpZ2h0PTAgY3JlYXRlcyBkaXNjb25uZWN0ZWQgY29tcG9uZW50LgoAdGhlIGdyYXBoIGludG8gY29ubmVjdGVkIGNvbXBvbmVudHMuCgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG1pbmNyb3NzICVzOiAlbGxkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBFcnJvciBkdXJpbmcgY29udmVyc2lvbiB0byAiVVRGLTgiLiBRdWl0aW5nLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgAgIGluaXRDTWFqVlBTQyBkb25lOiAlZCBnbG9iYWwgY29uc3RyYWludHMgZ2VuZXJhdGVkLgoAVGhlIGNoYXJhY3RlciAnJWMnIGFwcGVhcnMgaW4gYm90aCB0aGUgbGF5ZXJzZXAgYW5kIGxheWVybGlzdHNlcCBhdHRyaWJ1dGVzIC0gbGF5ZXJsaXN0c2VwIGlnbm9yZWQuCgB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAZWRnZSAlcyAtPiAlcyA6IHNldCBtb3JlIHRoYW4gb25lIHNwbGluZS4gRmlyc3QgdXNlZCwgb3RoZXIgZHJvcHBlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRz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c2V0dGluZyBhIGJvdW5kaW5nIGJveCBzaXplLCBzZWUgZG90KDEpKQoAZXJyb3IgaW4gY29sb3J4bGF0ZSgpCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAElsbGVnYWwgdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGU7IGZsb2F0IGV4cGVjdGVkIGFmdGVyICc7JwoAZGVmaW5lIGF0dHJzMCAlJSAlJTsgZGVmaW5lIHVuZmlsbGVkICUlICUlOyBkZWZpbmUgcm91bmRlZCAlJSAlJTsgZGVmaW5lIGRpYWdvbmFscyAlJSAlJQoAPHN2ZyB3aWR0aD0iJWRwdCIgaGVpZ2h0PSIlZHB0IgoAIyBkZXBlbmRlbmNpZXMgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAjIHR5cGUgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgBObyBvciBpbXByb3BlciBpbWFnZSBmaWxlPSIlcyIKAGZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgAgWyV6dV0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHVucmVjb2duaXplZCBhcGkgbmFtZSAiJXMiCgBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgBObyBvciBpbXByb3BlciBzaGFwZWZpbGU9IiVzIiBmb3Igbm9kZSAiJXMiCgBObyBvciBpbXByb3BlciBpbWFnZT0iJXMiIGZvciBub2RlICIlcyIKAG5vZGUgIiVzIiBpcyBjb250YWluZWQgaW4gdHdvIG5vbi1jb21wYXJhYmxlIGNsdXN0ZXJzICIlcyIgYW5kICIlcyIKAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgAgICIlcyIKACNpbmNsdWRlICJjb2xvcnMuaW5jIgojaW5jbHVkZSAidGV4dHVyZXMuaW5jIgojaW5jbHVkZSAic2hhcGVzLmluYyIKAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlbHUgCgAlcyBpbiBsaW5lICVsdSAKAHNjYWxlIGJ5ICVnLCVnIAoAY29tcHJlc3MgJWcgCgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgCJUE5HDQoaCgAJAEGBgAULtgMBAQEBAQEBAQIDAQECAQEBAQEBAQEBAQEBAQEBAQEBAgEEBQEBAQEBAQYBAQcICQoKCgoKCgoKCgoBAQsBDAENDg8QERITFBUWExMTExcYGRMaGxwdExMTExMBHgEBEwEfICEiIxMkJSYTExMTJygpEyorLC0TExMTEwEBAQEBExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMuExMTLxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTMBMTExMTExMTExMTExMTExMAAAAAAAAEAAQAHAAcACEAIQAkACIACgACABYACQAiACIAIgAVAB0AAQAUABQAFAAUABQAFAAUAAgABAAFABwAGwAXABwAIQAgAB8AHgAJABMAAAAVABIAFQADAAcAFQAVABQAFAAUABQAFAAUABQAFAAIAAQABQAFAAYAHAAaABgAGQAhAAcAFQAUABQAFAAUABQAFAALABQADQAUAAwAFAAUABQADgAUABQAFAAQABQADwAUABEAQcKDBQuVBAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMABAAHAAMABAAFAAUABgAGAAgABwAHABEAFgASABEAEgAIAAgADwAPABcADwAYAA8AGQAaABoAHgAWADQAHgAFADIABgAiACIAMwAXABgANQAZABoAGgAqADYAKgA0ADcAMgBFADsAPAAzADsAPABGADUARwBIAEwANgAiAEkASgA3AEUATgBQAGIAUQBSAFQARgBHAFUASABMAFYASQBKAFgAWgBOAEQAUABRAFIAVAA4AC8ALABVACkAVgAbABAAWABaAF0AXQBdAF0AXQBdAF0AXgBeAF4AXgBeAF4AXgBfAF8AXwBfAF8AXwBfAGAACQBgAGAAYABgAGAAYQBhAGMAAgBjAGMAYwBjAGMAZAAAAGQAAABkAGQAZABlAAAAZQBlAGUAZQBlAGYAAAAAAGYAZgBmAGYAZwAAAGcAZwBnAGcAaAAAAGgAaABoAGgAaABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHkhwULzQGuAC4ALwAzADUAMAA3AKoA2wDbANsA2wAAAD0AhwA3ADcA2wDbAAAAKAA1AC4AMgAvAGIAAAAAAEcAAADbANsAUQAAANsA2wDbAAAA2wCEAFUA2wCCANsAAACBANsAAAA+AEIAQQBIAEQAUgBbAAAAAABeAF8A2wAAANsA2wDbAAAAAAB7AEkAVwBSAFoAWgBdAAAAXwAAAF8AAABlAF0AXwAAAF0AbgBqAAAAaQAAAG4AAADbAJMAmgChAKgAqwBwALEAuAC/AMYAzQDTAEHCiQULzwFcAAEAXQBdAF4AXgBfAF8AXABcAFwAXABcAGAAXABcAFwAYQBcAFwAYgBiAGIAYgBiAGIAYgBjAGQAZQBmAFwAXABcAGcAXABcAFwAYABcAFwAYQBcAGEAXABoAGEAXABiAGIAYgBiAGIAYgBiAGIAYwBkAGUAZQBcAGYAXABcAFwAZwBoAGEAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAAAAXABcAFwAXABcAFwAXABcAFwAXABcAFwAQaGLBQswAQECAwEEAQUBBgcHAQYGBgYGBgYGBgYGBgYGBgYDBgYGBgYGBgYGBgYGBgYGBgYGAEHiiwULowQKAAsADAANAA4ACgAPABAAEQASABMACgAUABUAFQAVABYAFwAVABgAFQAVABkAFQAVABUAGgAVABUACgAVABUAFQAWABcAGAAVABUAGQAVABUAFQAaABUAFQAVABUAGwAMAAwAJAAeAB4AIAAhACAAIQAkACUAJgAtADIALwAuACoAJQAmACgAKQAzACoANAArADUANgA3ADwAMgBHAD0AIgBFACIAPwBAAEYAMwA0AEgANQA2ADcALwBJACoARwBKAEUATABcADwARgBcAD0ATQBIAE4ATwBSAEkAQQBQAFEASgBMAFMAVAAxAFUAVgBXAE0ATgBYAE8AUgBZAFAAUQBaAFsAUwBEAFQAVQBWAFcASwBEACwAWAAsAFkAOAAsAFoAWwAdAB0AHQAdAB0AHQAdAB8AHwAfAB8AHwAfAB8AIwAjACMAIwAjACMAIwAnAFwAJwAnACcAJwAnADAAMAA5ABwAOQA5ADkAOQA5ADoAXAA6AFwAOgA6ADoAOwBcADsAOwA7ADsAOwA+AFwAXAA+AD4APgA+AEIAXABCAEIAQgBCAEMAXABDAEMAQwBDAEMACQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAMAAAADQAAAA4AAAAOAEGQkAUL0QUR7u4TCAPu/u7u7gHu7u4B7u4J/u4SFRfuEgHu7u7uCg3u7u7u7u7u7u4B7u4WCAEBGQ4Y7u4bGBru7h3u7u7uARX77u7u7hAe7u7uAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWEQICAgICAgICAgICAgISEAITAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNAAAACwMEBQ8HAwwNBgwNDgwNGhUAAQADBw4GDwgM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ADekAAB7Zcx7zMT/AFqXAACMqspDosr/ABiMAACR86wIaKz/APW/AABBEfnw+ej/AOawAABNKevM68X/ANeiAABfPd2o3bX/APqVAAB7Zcx7zMT/ALiKAACMqspDosr/AJWDAACR86wIaKz/AJW+AABBEfnw+ej/AIavAABNKevM68X/AHehAABfPd2o3bX/AJqUAAB7Zcx7zMT/AFiJAACJoNNOs9P/ADWCAACNxb4rjL7/AHp8AACT8p4IWJ7/ADW9AAA8DPz3/PD/ACauAABMGfPg89v/ABegAABNKevM68X/ADqTAABfPd2o3bX/APiHAAB7Zcx7zMT/ANWAAACJoNNOs9P/ABp7AACNxb4rjL7/ALV2AACT8p4IWJ7/AP+7AAA8DPz3/PD/APCsAABMGfPg89v/AOGeAABNKevM68X/AASSAABfPd2o3bX/AMKGAAB7Zcx7zMT/AJ9/AACJoNNOs9P/AOR5AACNxb4rjL7/AH91AACR86wIaKz/AG5yAACW74EIQIH/AEfEAABKFfXl9eD/ADi1AABQSNmh2Zv/ACmnAABisqMxo1T/AOfCAABJD/jt+On/ANizAABONuS65LP/AMmlAABWaMR0xHb/AOyYAABivosji0X/AIfBAABJD/jt+On/AHiyAABONuS65LP/AGmkAABWaMR0xHb/AIyXAABisqMxo1T/AEqMAABm/20AbSz/ACfAAABJD/jt+On/ABixAABNLOnH6cD/AAmjAABQSNmh2Zv/ACyWAABWaMR0xHb/AOqKAABisqMxo1T/AMeDAABm/20AbSz/AMe+AABJD/jt+On/ALivAABNLOnH6cD/AKmhAABQSNmh2Zv/AMyUAABWaMR0xHb/AIqJAABgnqtBq13/AGeCAABivosji0X/AKx8AABs/1oAWjL/AGe9AABIB/z3/PX/AFiuAABKFfXl9eD/AEmgAABNLOnH6cD/AGyTAABQSNmh2Zv/ACqIAABWaMR0xHb/AAeBAABgnqtBq13/AEx7AABivosji0X/AOd2AABs/1oAWjL/ACa8AABIB/z3/PX/ABetAABKFfXl9eD/AAifAABNLOnH6cD/ACuSAABQSNmh2Zv/AOmGAABWaMR0xHb/AMZ/AABgnqtBq13/AAt6AABivosji0X/AKZ1AABm/20AbSz/AJVyAABl/0QARBv/AD3EAAAAAPDw8PD/AC61AAAAAL29vb3/AB+nAAAAAGNjY2P/AN3CAAAAAPf39/f/AM6zAAAAAMzMzMz/AL+lAAAAAJaWlpb/AOKYAAAAAFJSUlL/AH3BAAAAAPf39/f/AG6yAAAAAMzMzMz/AF+kAAAAAJaWlpb/AIKXAAAAAGNjY2P/AECMAAAAACUlJSX/AB3AAAAAAPf39/f/AA6xAAAAANnZ2dn/AP+iAAAAAL29vb3/ACKWAAAAAJaWlpb/AOCKAAAAAGNjY2P/AL2DAAAAACUlJSX/AL2+AAAAAPf39/f/AK6vAAAAANnZ2dn/AJ+hAAAAAL29vb3/AMKUAAAAAJaWlpb/AICJAAAAAHNzc3P/AF2CAAAAAFJSUlL/AKJ8AAAAACUlJSX/AF29AAAAAP//////AE6uAAAAAPDw8PD/AD+gAAAAANnZ2dn/AGKTAAAAAL29vb3/ACCIAAAAAJaWlpb/AP2AAAAAAHNzc3P/AEJ7AAAAAFJSUlL/AN12AAAAACUlJSX/ABy8AAAAAP//////AA2tAAAAAPDw8PD/AP6eAAAAANnZ2dn/ACGSAAAAAL29vb3/AN+GAAAAAJaWlpb/ALx/AAAAAHNzc3P/AAF6AAAAAFJSUlL/AJx1AAAAACUlJSX/AItyAAAAAAAAAAD/AGjEAAAVMP7+5s7/AFm1AAATk/39rmv/AEqnAAAO8ObmVQ3/AAjDAAATIP7+7d7/APmzAAAUeP39voX/AOqlAAARwv39jTz/AA2ZAAAN/dnZRwH/AKjBAAATIP7+7d7/AJmyAAAUeP39voX/AIqkAAARwv39jTz/AK2XAAAO8ObmVQ3/AGuMAAAN+qamNgP/AEjAAAATIP7+7d7/ADmxAAAVW/390KL/ACqjAAATk/39rmv/AE2WAAARwv39jTz/AAuLAAAO8ObmVQ3/AOiDAAAN+qamNgP/AOi+AAATIP7+7d7/ANmvAAAVW/390KL/AMqhAAATk/39rmv/AO2UAAARwv39jTz/AKuJAAAQ6vHxaRP/AIiCAAAN/dnZSAH/AM18AAAM94yMLQT/AIi9AAAVFP//9ev/AHmuAAAVMP7+5s7/AGqgAAAVW/390KL/AI2TAAATk/39rmv/AEuIAAARwv39jTz/ACiBAAAQ6vHxaRP/AG17AAAN/dnZSAH/AAh3AAAM94yMLQT/AEe8AAAVFP//9ev/ADitAAAVMP7+5s7/ACmfAAAVW/390KL/AEySAAATk/39rmv/AAqHAAARwv39jTz/AOd/AAAQ6vHxaRP/ACx6AAAN/dnZSAH/AMd1AAAN+qamNgP/ALZyAAAM9n9/JwT/APXEAAAZNv7+6Mj/AOa1AAATef39u4T/ANenAAAFxePjSjP/AJXDAAAaJf7+8Nn/AIa0AAAYc/39zIr/AHemAAANpPz8jVn/AJqZAAAD2tfXMB//ADXCAAAaJf7+8Nn/ACazAAAYc/39zIr/ABelAAANpPz8jVn/ADqYAAAFxePjSjP/APiMAAAA/7OzAAD/ANXAAAAaJf7+8Nn/AMaxAAAYX/391J7/ALejAAATef39u4T/ANqWAAANpPz8jVn/AJiLAAAFxePjSjP/AHWEAAAA/7OzAAD/AHW/AAAaJf7+8Nn/AGawAAAYX/391J7/AFeiAAATef39u4T/AHqVAAANpPz8jVn/ADiKAAAHsu/vZUj/ABWDAAAD2tfXMB//AFp9AAAA/5mZAAD/ABW+AAAYEv//9+z/AAavAAAZNv7+6Mj/APegAAAYX/391J7/ABqUAAATef39u4T/ANiIAAANpPz8jVn/ALWBAAAHsu/vZUj/APp7AAAD2tfXMB//AJV3AAAA/5mZAAD/ANS8AAAYEv//9+z/AMWtAAAZNv7+6Mj/ALafAAAYX/391J7/ANmSAAATef39u4T/AJeHAAANpPz8jVn/AHSAAAAHsu/vZUj/ALl6AAAD2tfXMB//AFR2AAAA/7OzAAD/AENzAAAA/39/AAD/ADbGAACOROOmzuP/AFvKAAC+mZpqPZr/ACe3AACQ07QfeLT/ABipAABBYd+y34r/ANuaAABSuKAzoCz/ADmOAAAAY/v7mpn/ALaFAAD+4ePjGhz/AJt+AAAXj/39v2//ANZ4AAAV////fwD/AGV0AADGKtbKstb/AL7FAACOROOmzuP/ANjJAAC+mZpqPZr/AJ67AAAqZv///5n/AK+2AACQ07QfeLT/AKCoAABBYd+y34r/AGOaAABSuKAzoCz/AMGNAAAAY/v7mpn/AD6FAAD+4ePjGhz/ACN+AAAXj/39v2//AF54AAAV////fwD/AO1zAADGKtbKstb/AEbFAACOROOmzuP/AFXJAAC+mZpqPZr/ABu7AAAqZv///5n/AKmsAAAPxbGxWSj/ADe2AACQ07QfeLT/ACioAABBYd+y34r/AOuZAABSuKAzoCz/AEmNAAAAY/v7mpn/AMaEAAD+4ePjGhz/AKt9AAAXj/39v2//AOZ3AAAV////fwD/AHVzAADGKtbKstb/AP7EAACOROOmzuP/AO+1AACQ07QfeLT/AOCnAABBYd+y34r/AJ7DAACOROOmzuP/AI+0AACQ07QfeLT/AICmAABBYd+y34r/AKOZAABSuKAzoCz/AD7CAACOROOmzuP/AC+zAACQ07QfeLT/ACClAABBYd+y34r/AEOYAABSuKAzoCz/AAGNAAAAY/v7mpn/AN7AAACOROOmzuP/AM+xAACQ07QfeLT/AMCjAABBYd+y34r/AOOWAABSuKAzoCz/AKGLAAAAY/v7mpn/AH6EAAD+4ePjGhz/AH6/AACOROOmzuP/AG+wAACQ07QfeLT/AGCiAABBYd+y34r/AIOVAABSuKAzoCz/AEGKAAAAY/v7mpn/AB6DAAD+4ePjGhz/AGN9AAAXj/39v2//AB6+AACOROOmzuP/AA+vAACQ07QfeLT/AAChAABBYd+y34r/ACOUAABSuKAzoCz/AOGIAAAAY/v7mpn/AL6BAAD+4ePjGhz/AAN8AAAXj/39v2//AJ53AAAV////fwD/AN28AACOROOmzuP/AM6tAACQ07QfeLT/AL+fAABBYd+y34r/AOKSAABSuKAzoCz/AKCHAAAAY/v7mpn/AH2AAAD+4ePjGhz/AMJ6AAAXj/39v2//AF12AAAV////fwD/AExzAADGKtbKstb/ADrFAAADTvv7tK7/ACu2AACSNeOzzeP/AByoAABNKevM68X/ANrDAAADTvv7tK7/AMu0AACSNeOzzeP/ALymAABNKevM68X/AN+ZAADKG+Tey+T/AHrCAAADTvv7tK7/AGuzAACSNeOzzeP/AFylAABNKevM68X/AH+YAADKG+Tey+T/AD2NAAAYWP7+2ab/ABrBAAADTvv7tK7/AAuyAACSNeOzzeP/APyjAABNKevM68X/AB+XAADKG+Tey+T/AN2LAAAYWP7+2ab/ALqEAAAqMv///8z/ALq/AAADTvv7tK7/AKuwAACSNeOzzeP/AJyiAABNKevM68X/AL+VAADKG+Tey+T/AH2KAAAYWP7+2ab/AFqDAAAqMv///8z/AJ99AAAcLOXl2L3/AFq+AAADTvv7tK7/AEuvAACSNeOzzeP/ADyhAABNKevM68X/AF+UAADKG+Tey+T/AB2JAAAYWP7+2ab/APqBAAAqMv///8z/AD98AAAcLOXl2L3/ANp3AADpI/392uz/APq8AAADTvv7tK7/AOutAACSNeOzzeP/ANyfAABNKevM68X/AP+SAADKG+Tey+T/AL2HAAAYWP7+2ab/AJqAAAAqMv///8z/AN96AAAcLOXl2L3/AHp2AADpI/392uz/AGlzAAAAAPLy8vL/ABvFAABsNeKz4s3/AAy2AAARUf39zaz/AP2nAACbH+jL1ej/ALvDAABsNeKz4s3/AKy0AAARUf39zaz/AJ2mAACbH+jL1ej/AMCZAADkK/T0yuT/AFvCAABsNeKz4s3/AEyzAAARUf39zaz/AD2lAACbH+jL1ej/AGCYAADkK/T0yuT/AB6NAAA4LfXm9cn/APvAAABsNeKz4s3/AOyxAAARUf39zaz/AN2jAACbH+jL1ej/AACXAADkK/T0yuT/AL6LAAA4LfXm9cn/AJuEAAAjUf//8q7/AJu/AABsNeKz4s3/AIywAAARUf39zaz/AH2iAACbH+jL1ej/AKCVAADkK/T0yuT/AF6KAAA4LfXm9cn/ADuDAAAjUf//8q7/AIB9AAAZJ/Hx4sz/ADu+AABsNeKz4s3/ACyvAAARUf39zaz/AB2hAACbH+jL1ej/AECUAADkK/T0yuT/AP6IAAA4LfXm9cn/ANuBAAAjUf//8q7/ACB8AAAZJ/Hx4sz/ALt3AAAAAMzMzMz/ACLGAADm/Y6OAVL/AEXKAABNv2QnZBn/ABO3AADm3MXFG33/AASpAADodt7ed67/AMeaAADlPvHxttr/ACWOAADpHf394O//AKKFAAA7JvXm9dD/AId+AAA9Z+G44Yb/AMJ4AAA/prx/vEH/AFF0AABExZJNkiH/AKrFAADm/Y6OAVL/AMLJAABExZJNkiH/AIi7AABNv2QnZBn/AJu2AADm3MXFG33/AIyoAADodt7ed67/AE+aAADlPvHxttr/AK2NAADpHf394O//ACqFAAAAAPf39/f/AA9+AAA7JvXm9dD/AEp4AAA9Z+G44Yb/ANlzAAA/prx/vEH/AM/EAADnTOnpo8n/AMC1AAAAAPf39/f/ALGnAAA/gdeh12r/AG/DAADk3NDQHIv/AGC0AADlPvHxttr/AFGmAAA9Z+G44Yb/AHSZAABIxqxNrCb/AA/CAADk3NDQHIv/AACzAADlPvHxttr/APGkAAAAAPf39/f/ABSYAAA9Z+G44Yb/ANKMAABIxqxNrCb/AK/AAADm3MXFG33/AKCxAADnTOnpo8n/AJGjAADpHf394O//ALSWAAA7JvXm9dD/AHKLAAA/gdeh12r/AE+EAABExZJNkiH/AE+/AADm3MXFG33/AECwAADnTOnpo8n/ADGiAADpHf394O//AFSVAAAAAPf39/f/ABKKAAA7JvXm9dD/AO+CAAA/gdeh12r/ADR9AABExZJNkiH/AO+9AADm3MXFG33/AOCuAADodt7ed67/ANGgAADlPvHxttr/APSTAADpHf394O//ALKIAAA7JvXm9dD/AI+BAAA9Z+G44Yb/ANR7AAA/prx/vEH/AG93AABExZJNkiH/AK68AADm3MXFG33/AJ+tAADodt7ed67/AJCfAADlPvHxttr/ALOSAADpHf394O//AHGHAAAAAPf39/f/AE6AAAA7JvXm9dD/AJN6AAA9Z+G44Yb/AC52AAA/prx/vEH/AB1zAABExZJNkiH/AP7FAADO/0tAAEv/AB7KAABl/0QARBv/AO+2AADOrYN2KoP/AOCoAADHV6uZcKv/AKOaAADHM8/Cpc//AAGOAADSFejn1Oj/AH6FAABMHvDZ8NP/AGN+AABQRNum26D/AJ54AABYe65armH/AC10AABhxXgbeDf/AIbFAADO/0tAAEv/AJvJAABhxXgbeDf/AGG7AABl/0QARBv/AHe2AADOrYN2KoP/AGioAADHV6uZcKv/ACuaAADHM8/Cpc//AImNAADSFejn1Oj/AAaFAAAAAPf39/f/AOt9AABMHvDZ8NP/ACZ4AABQRNum26D/ALVzAABYe65armH/AKXEAADERsOvjcP/AJa1AAAAAPf39/f/AIenAABSWr9/v3v/AEXDAADJqJR7MpT/ADa0AADHM8/Cpc//ACemAABQRNum26D/AEqZAABm/4gAiDf/AOXBAADJqJR7MpT/ANayAADHM8/Cpc//AMekAAAAAPf39/f/AOqXAABQRNum26D/AKiMAABm/4gAiDf/AIXAAADOrYN2KoP/AHaxAADERsOvjcP/AGejAADSFejn1Oj/AIqWAABMHvDZ8NP/AEiLAABSWr9/v3v/ACWEAABhxXgbeDf/ACW/AADOrYN2KoP/ABawAADERsOvjcP/AAeiAADSFejn1Oj/ACqVAAAAAPf39/f/AOiJAABMHvDZ8NP/AMWCAABSWr9/v3v/AAp9AABhxXgbeDf/AMW9AADOrYN2KoP/ALauAADHV6uZcKv/AKegAADHM8/Cpc//AMqTAADSFejn1Oj/AIiIAABMHvDZ8NP/AGWBAABQRNum26D/AKp7AABYe65armH/AEV3AABhxXgbeDf/AIS8AADOrYN2KoP/AHWtAADHV6uZcKv/AGafAADHM8/Cpc//AImSAADSFejn1Oj/AEeHAAAAAPf39/f/ACSAAABMHvDZ8NP/AGl6AABQRNum26D/AAR2AABYe65armH/APNyAABhxXgbeDf/AAHEAAC9C/Ls5/L/APK0AACXPdumvdv/AOOmAACNxb4rjL7/AKHCAAC5CPbx7vb/AJKzAACbKOG9yeH/AIOlAACRcM90qc//AKaYAACP97AFcLD/AEHBAAC5CPbx7vb/ADKyAACbKOG9yeH/ACOkAACRcM90qc//AEaXAACNxb4rjL7/AASMAACP940EWo3/AOG/AAC5CPbx7vb/ANKwAACoGObQ0eb/AMOiAACXPdumvdv/AOaVAACRcM90qc//AKSKAACNxb4rjL7/AIGDAACP940EWo3/AIG+AAC5CPbx7vb/AHKvAACoGObQ0eb/AGOhAACXPdumvdv/AIaUAACRcM90qc//AESJAACOt8A2kMD/ACGCAACP97AFcLD/AGZ8AACP+HsDTnv/ACG9AADpCP//9/v/ABKuAAC9C/Ls5/L/AAOgAACoGObQ0eb/ACaTAACXPdumvdv/AOSHAACRcM90qc//AMGAAACOt8A2kMD/AAZ7AACP97AFcLD/AKF2AACP+HsDTnv/AOu7AADpCP//9/v/ANysAAC9C/Ls5/L/AM2eAACoGObQ0eb/APCRAACXPdumvdv/AK6GAACRcM90qc//AIt/AACOt8A2kMD/ANB5AACP97AFcLD/AGt1AACP940EWo3/AFpyAACP+VgCOFj/AJHEAADIDvDs4vD/AIK1AACXPdumvdv/AHOnAACC0JkckJn/ADHDAADPCPf27/f/ACK0AACbKOG9yeH/ABOmAACPgM9nqc//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ANaZAADPhKOYTqP/AHHCAAD+4eTkGhz/AGKzAACSsrg3frj/AFOlAABTk69Nr0r/AHaYAADPhKOYTqP/ADSNAAAV////fwD/ABHBAAD+4eTkGhz/AAKyAACSsrg3frj/APOjAABTk69Nr0r/ABaXAADPhKOYTqP/ANSLAAAV////fwD/ALGEAAAqzP///zP/ALG/AAD+4eTkGhz/AKKwAACSsrg3frj/AJOiAABTk69Nr0r/ALaVAADPhKOYTqP/AHSKAAAV////fwD/AFGDAAAqzP///zP/AJZ9AAAPwaamVij/AFG+AAD+4eTkGhz/AEKvAACSsrg3frj/ADOhAABTk69Nr0r/AFaUAADPhKOYTqP/ABSJAAAV////fwD/APGBAAAqzP///zP/ADZ8AAAPwaamVij/ANF3AADoeff3gb//APG8AAD+4eTkGhz/AOKtAACSsrg3frj/ANOfAABTk69Nr0r/APaSAADPhKOYTqP/ALSHAAAV////fwD/AJGAAAAqzP///zP/ANZ6AAAPwaamVij/AHF2AADoeff3gb//AGBzAAAAAJmZmZn/ABLFAAByeMJmwqX/AAO2AAALm/z8jWL/APSnAACcTcuNoMv/ALLDAAByeMJmwqX/AKO0AAALm/z8jWL/AJSmAACcTcuNoMv/ALeZAADkZufnisP/AFLCAAByeMJmwqX/AEOzAAALm/z8jWL/ADSlAACcTcuNoMv/AFeYAADkZufnisP/ABWNAAA6m9im2FT/APLAAAByeMJmwqX/AOOxAAALm/z8jWL/ANSjAACcTcuNoMv/APeWAADkZufnisP/ALWLAAA6m9im2FT/AJKEAAAi0P//2S//AJK/AAByeMJmwqX/AIOwAAALm/z8jWL/AHSiAACcTcuNoMv/AJeVAADkZufnisP/AFWKAAA6m9im2FT/ADKDAAAi0P//2S//AHd9AAAZWuXlxJT/ADK+AAByeMJmwqX/ACOvAAALm/z8jWL/ABShAACcTcuNoMv/ADeUAADkZufnisP/APWIAAA6m9im2FT/ANKBAAAi0P//2S//ABd8AAAZWuXlxJT/ALJ3AAAAALOzs7P/AELGAAB4VNON08f/AGjKAADTUr28gL3/ADO3AAAqTP///7P/ACSpAACvJdq+utr/AOeaAAAEi/v7gHL/AEWOAACQZNOAsdP/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ACs6AAAhIv//+Nz/AEYwAAD259zcFDz/AI80AAB///8A////AP9GAACq/4sAAIv/AIE0AAB//4sAi4v/AHdRAAAe77i4hgv/AEEIAAAAAKmpqan/AJ8zAABV/2QAZAD/AHYHAAAAAKmpqan/AAk7AAAnbr29t2v/AD1gAADU/4uLAIv/ANYzAAA6jmtVay//AF5OAAAX////jAD/AHpTAADGwMyZMsz/AIZVAAAA/4uLAAD/AMYwAAAKeenplnr/ADg0AABVPbyPvI//ADpHAACvj4tIPYv/AGMIAAB/Z08vT0//AJgHAAB/Z08vT0//ABVKAACA/9EAztH/AP8QAADH/9OUANP/AMs5AADo6///FJP/ACJGAACK//8Av///ADQIAAAAAGlpaWn/AGkHAAAAAGlpaWn/AJRGAACU4f8ekP//AGQ6AAAAzrKyIiL/AJ5IAAAcD///+vD/AGIzAABVwIsiiyL/AAJhAADU////AP//AO4uAAAAANzc3Nz/AH1IAACqB//4+P//AL9SAAAj////1wD/AJ1RAAAe2drapSD/AJUIAAAAAICAgID/AGE0AABV/4AAgAD/AE4KAAA70P+t/y//AMoHAAAAAICAgID/AFcLAABVD//w//D/AK85AADplv//abT/AHdVAAAAjM3NXFz/AEwvAADC/4JLAIL/AFYGAAAqD/////D/ABg7AAAmavDw5oz/AAIdAACqFPrm5vr/AG08AADwD///8PX/AJAzAABA//x8/AD/ABQyAAAmMf//+s3/AGJGAACJP+at2Ob/AGo4AAAAd/DwgID/AHI0AAB/H//g////AF8KAAAqKPr6+tL/ACUIAAAAANPT09P/AHMzAABVZO6Q7pD/AFoHAAAAANPT09P/ALw5AAD4Sf//tsH/ALUwAAAMhP//oHr/ABE0AAB90bIgsqr/ABBGAACPdfqHzvr/AE8IAACUOJl3iJn/AIQHAACUOJl3iJn/AM1GAACXNN6wxN7/AD0KAAAqH////+D/ABhMAABV//8A/wD/AOozAABVwM0yzTL/AAwzAAAVFPr68Ob/AE5gAADU////AP//AKkwAAAA/4CAAAD/AGhLAABxgM1mzar/AL1GAACq/80AAM3/AGhTAADMmNO6VdP/AOBMAAC3fNuTcNv/ACQ0AABnqbM8s3H/ACVHAACwj+57aO7/AK4zAABv//oA+pr/AABKAAB9p9FI0cz/AOJUAADk5MfHFYX/AFBGAACqxnAZGXD/AH82AABqCf/1//r/AI1JAAAEHv//5OH/ADwyAAAaSf//5LX/AI1IAAAZUf//3q3/AIIEAACq/4AAAID/AAJRAAAbF/399eb/AO1EAAAq/4CAgAD/ABNgAAA4wI5rjiP/AG5OAAAb////pQD/ANlVAAAL////RQD/AIpTAADWe9racNb/AIpRAAAmSO7u6Kr/APkzAABVZPuY+5j/AChKAAB/Q+6v7u7/APdUAADxfNvbcJP/AEItAAAaKf//79X/AB1CAAAURv//2rn/ANALAAAUsM3NhT//AOI5AAD3P///wMv/APM1AADURt3doN3/AKRGAACEO+aw4Ob/ADxNAADU/4CAAID/ACNWAAAA////AAD/ALovAAAAPby8j4//APBGAACfteFBaeH/AOcvAAAR3IuLRRP/ANYwAAAEivr6gHL/AMkvAAATmvT0pGD/AEo0AABnqosui1f/ADg3AAAREP//9e7/AMhgAAANt6CgUi3/ANYbAAAAAMDAwMD/ADNGAACLbOuHzuv/AE1HAACvj81qWs3/AHYIAACUOJBwgJD/AKsHAACUOJBwgJD/ABIKAAAABf//+vr/AMUzAABq//8A/3//AOFGAACSm7RGgrT/AKg0AAAYVNLStIz/AAU5AAB//4AAgID/AM1MAADUHdjYv9j/ANcuAAAGuP//Y0f/ADtKAAB7tuBA4ND/AB8RAADUc+7ugu7/AMYSAAAbRPX13rP/AMFIAAAAAP//////AD9OAAAAAPX19fX/AHkKAAAq/////wD/AD8zAAA4wM2azTL/ALnEAAAtQ/z3/Ln/AKq1AABEW92t3Y7/AJunAABisqMxo1T/AFnDAAAqMv///8z/AEq0AAA+VebC5pn/ADumAABVZMZ4xnn/AF6ZAABju4QjhEP/APnBAAAqMv///8z/AOqyAAA+VebC5pn/ANukAABVZMZ4xnn/AP6XAABisqMxo1T/ALyMAABr/2gAaDf/AJnAAAAqMv///8z/AIqxAAA3UfDZ8KP/AHujAABEW92t3Y7/AJ6WAABVZMZ4xnn/AFyLAABisqMxo1T/ADmEAABr/2gAaDf/ADm/AAAqMv///8z/ACqwAAA3UfDZ8KP/ABuiAABEW92t3Y7/AD6VAABVZMZ4xnn/APyJAABgnqtBq13/ANmCAABju4QjhEP/AB59AABs/1oAWjL/ANm9AAAqGf///+X/AMquAAAtQ/z3/Ln/ALugAAA3UfDZ8KP/AN6TAABEW92t3Y7/AJyIAABVZMZ4xnn/AHmBAABgnqtBq13/AL57AABju4QjhEP/AFl3AABs/1oAWjL/AJi8AAAqGf///+X/AImtAAAtQ/z3/Ln/AHqfAAA3UfDZ8KP/AJ2SAABEW92t3Y7/AFuHAABVZMZ4xnn/ADiAAABgnqtBq13/AH16AABju4QjhEP/ABh2AABr/2gAaDf/AAdzAABu/0UARSn/AArEAAAxSfjt+LH/APu0AAB1Yc1/zbv/AOymAACQwrgsf7j/AKrCAAAqMv///8z/AJuzAABjQtqh2rT/AIylAACEqsRBtsT/AK+YAACWy6giXqj/AErBAAAqMv///8z/ADuyAABjQtqh2rT/ACykAACEqsRBtsT/AE+XAACQwrgsf7j/AA2MAACkv5QlNJT/AOq/AAAqMv///8z/ANuwAABFOunH6bT/AMyiAAB1Yc1/zbv/AO+VAACEqsRBtsT/AK2KAACQwrgsf7j/AIqDAACkv5QlNJT/AIq+AAAqMv///8z/AHuvAABFOunH6bT/AGyhAAB1Yc1/zbv/AI+UAACEqsRBtsT/AE2JAACL2MAdkcD/ACqCAACWy6giXqj/AG98AACe54QMLIT/ACq9AAAqJv///9n/ABuuAAAxSfjt+LH/AAygAABFOunH6bT/AC+TAAB1Yc1/zbv/AO2HAACEqsRBtsT/AMqAAACL2MAdkcD/AA97AACWy6giXqj/AKp2AACe54QMLIT/APS7AAAqJv///9n/AOWsAAAxSfjt+LH/ANaeAABFOunH6bT/APmRAAB1Yc1/zbv/ALeGAACEqsRBtsT/AJR/AACL2MAdkcD/ANl5AACWy6giXqj/AHR1AACkv5QlNJT/AGNyAACe51gIHVj/AIbEAAAlQv//97z/AHe1AAAcr/7+xE//AGinAAAQ7tnZXw7/ACbDAAAqKv///9T/ABe0AAAccP7+2Y7/AAimAAAW1f7+mSn/ACuZAAAP/MzMTAL/AMbBAAAqKv///9T/ALeyAAAccP7+2Y7/AKikAAAW1f7+mSn/AMuXAAAQ7tnZXw7/AImMAAAN+JmZNAT/AGbAAAAqKv///9T/AFexAAAfbf7+45H/AEijAAAcr/7+xE//AGuWAAAW1f7+mSn/ACmLAAAQ7tnZXw7/AAaEAAAN+JmZNAT/AAa/AAAqKv///9T/APevAAAfbf7+45H/AOihAAAcr/7+xE//AAuVAAAW1f7+mSn/AMmJAAAS6ezscBT/AKaCAAAP/MzMTAL/AOt8AAAM94yMLQT/AKa9AAAqGf///+X/AJeuAAAlQv//97z/AIigAAAfbf7+45H/AKuTAAAcr/7+xE//AGmIAAAW1f7+mSn/AEaBAAAS6ezscBT/AIt7AAAP/MzMTAL/ACZ3AAAM94yMLQT/AGW8AAAqGf///+X/AFatAAAlQv//97z/AEefAAAfbf7+45H/AGqSAAAcr/7+xE//ACiHAAAW1f7+mSn/AAWAAAAS6ezscBT/AEp6AAAP/MzMTAL/AOV1AAAN+JmZNAT/ANRyAAAN8GZmJQb/AOrEAAAiX///7aD/ANu1AAAYsv7+skz/AMynAAAF3fDwOyD/AIrDAAAqTf///7L/AHu0AAAdov7+zFz/AGymAAARwv39jTz/AI+ZAAD+4ePjGhz/ACrCAAAqTf///7L/ABuzAAAdov7+zFz/AAylAAARwv39jTz/AC+YAAAF3fDwOyD/AO2MAAD2/729ACb/AMrAAAAqTf///7L/ALuxAAAeiP7+2Xb/AKyjAAAYsv7+skz/AM+WAAARwv39jTz/AI2LAAAF3fDwOyD/AGqEAAD2/729ACb/AGq/AAAqTf///7L/AFuwAAAeiP7+2Xb/AEyiAAAYsv7+skz/AG+VAAARwv39jTz/AC2KAAAH1Pz8Tir/AAqDAAD+4ePjGhz/AE99AAD1/7GxACb/AAq+AAAqMv///8z/APuuAAAiX///7aD/AOygAAAeiP7+2Xb/AA+UAAAYsv7+skz/AM2IAAARwv39jTz/AKqBAAAH1Pz8Tir/AO97AAD+4ePjGhz/AIp3AAD1/7GxACb/AMm8AAAqMv///8z/ALqtAAAiX///7aD/AKufAAAeiP7+2Xb/AM6SAAAYsv7+skz/AIyHAAARwv39jTz/AGmAAAAH1Pz8Tir/AK56AAD+4ePjGhz/AEl2AAD2/729ACb/ADhzAADy/4CAACb/AGFHAACTD//w+P//ALRIAAAYI/r669f/AF+5AAAXJP//79v/APeqAAAXJO7u38z/AMacAAAXJM3NwLD/AAeQAAAYIouLg3j/AC5gAAB///8A////AINLAABxgP9//9T/AKW5AABxgP9//9T/AD2rAABxgO527sb/AAydAABxgM1mzar/AFSQAABxgItFi3T/AKZKAAB/D//w////AJ65AAB/D//w////ADarAAB/D+7g7u7/AAWdAAB/Ds3Bzc3/AEaQAAB/DouDi4v/AIhOAAAqGvX19dz/AEhFAAAXOv//5MT/AOe4AAAXOv//5MT/AH+qAAAXOu7u1bf/AE6cAAAWOs3Nt57/AI+PAAAXOouLfWv/AIU6AAAAAAAAAAD/ADdSAAAZMf//683/AHBHAACq//8AAP//AEy5AACq//8AAP//AOSqAACq/+4AAO7/ALOcAACq/80AAM3/APSPAACq/4sAAIv/ABQRAADAzuKKK+L/AP0vAAAAvqWlKir/AOi3AAAAv///QED/AJypAAAAv+7uOzv/AHObAAAAv83NMzP/ALSOAAAAvouLIyP/ALFRAAAXY97euIf/AAS6AAAXZP//05v/AIurAAAXY+7uxZH/AFqdAAAXY83Nqn3/AKKQAAAXY4uLc1X/AHZGAACAZ6BfnqD/ABW5AACDZ/+Y9f//AK2qAACDZu6O5e7/AHycAACDZ816xc3/AL2PAACDZotThov/AGVJAAA///9//wD/AHi5AAA///9//wD/ABCrAAA//+527gD/AN+cAAA//81mzQD/ACCQAAA//4tFiwD/ADVJAAAR2tLSaR7/AG25AAAR2///fyT/AAWrAAAR2+7udiH/ANScAAAR2s3NZh3/ABWQAAAR3IuLRRP/AH84AAALr///f1D/AHe4AAAHqf//clb/AByqAAAGqe7ualD/APObAAAGqc3NW0X/ADSPAAAGqIuLPi//AIVGAACak+1kle3/ADA6AAAhIv//+Nz/AJy4AAAhIv//+Nz/AEGqAAAiI+7u6M3/ABicAAAiIs3NyLH/AFmPAAAjIouLiHj/AEswAAD259zcFDz/AJQ0AAB///8A////AFy4AAB///8A////AAGqAAB//+4A7u7/ANibAAB//80Azc3/ABmPAAB//4sAi4v/AARHAACq/4sAAIv/AIY0AAB//4sAi4v/AHxRAAAe77i4hgv/APW5AAAe8P//uQ//AHyrAAAe8O7urQ7/AEudAAAe8M3NlQz/AJOQAAAe8IuLZQj/AEYIAAAAAKmpqan/AKQzAABV/2QAZAD/AHsHAAAAAKmpqan/AA47AAAnbr29t2v/AEJgAADU/4uLAIv/ANszAAA6jmtVay//AC64AAA6j//K/3D/ANOpAAA6j+687mj/AKqbAAA6j82izVr/AOuOAAA6j4tuiz3/AGNOAAAX////jAD/AMi5AAAV////fwD/AGCrAAAV/+7udgD/AC+dAAAV/83NZgD/AHeQAAAV/4uLRQD/AH9TAADGwMyZMsz/ACO6AADGwf+/Pv//AKqrAADGwO6yOu7/AHmdAADGwM2aMs3/AMGQAADGwItoIov/AItVAAAA/4uLAAD/AMswAAAKeenplnr/AD00AABVPbyPvI//AEm4AABVPv/B/8H/AO6pAABVPu607rT/AMWbAABVPs2bzZv/AAaPAABVPotpi2n/AD9HAACvj4tIPYv/AGgIAAB/Z08vT0//AJK3AAB/aP+X////AEKpAAB/Z+6N7u7/ACubAAB/aM15zc3/AHGOAAB/aItSi4v/AJ0HAAB/Z08vT0//ABpKAACA/9EAztH/AAQRAADH/9OUANP/ANA5AADo6///FJP/AJK4AADo6///FJP/ADeqAADo6+7uEon/AA6cAADo683NEHb/AE+PAADn7IuLClD/ACdGAACK//8Av///AP24AACK//8Av///AJWqAACK/+4Asu7/AGScAACK/80Ams3/AKWPAACK/4sAaIv/ADkIAAAAAGlpaWn/AG4HAAAAAGlpaWn/AJlGAACU4f8ekP//ACC5AACU4f8ekP//ALiqAACU4e4chu7/AIecAACU4c0YdM3/AMiPAACU4YsQTov/AGk6AAAAzrKyIiL/AKa4AAAAz///MDD/AEuqAAAAz+7uLCz/ACKcAAAAz83NJib/AGOPAAAAz4uLGhr/AKNIAAAcD///+vD/AGczAABVwIsiiyL/AAdhAADU////AP//APMuAAAAANzc3Nz/AIJIAACqB//4+P//AMRSAAAj////1wD/AA+6AAAj////1wD/AJarAAAj/+7uyQD/AGWdAAAj/83NrQD/AK2QAAAj/4uLdQD/AKJRAAAe2drapSD/APm5AAAe2v//wSX/AICrAAAe2u7utCL/AE+dAAAe2s3Nmx3/AJeQAAAe2ouLaRT/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AFEvAADC/4JLAIL/ALMWAAAqAP////4AAFsGAAAqD/////D/AIW3AAAqD/////D/ADWpAAAqD+7u7uD/AAebAAAqDs3NzcH/AGSOAAAqDouLi4P/AB07AAAmavDw5oz/AMa4AAAncP//9o//AFaqAAAncO7u5oX/AC2cAAAnb83NxnP/AG6PAAAnb4uLhk7/AAcdAACqFPrm5vr/AHI8AADwD///8PX/AM24AADwD///8PX/AF2qAADvD+7u4OX/ADScAADwDs3NwcX/AHWPAADvDouLg4b/AJUzAABA//x8/AD/ABkyAAAmMf//+s3/AAS4AAAmMf//+s3/ALipAAAlMu7u6b//AI+bAAAmMc3NyaX/ANCOAAAnMYuLiXD/AGdGAACJP+at2Ob/AAq5AACKQP+/7///AKKqAACKQO6y3+7/AHGcAACKP82awM3/ALKPAACJQItog4v/AG84AAAAd/DwgID/AHc0AAB/H//g////AFe4AAB/H//g////APypAAB/H+7R7u7/ANObAAB/H820zc3/ABSPAAB/H4t6i4v/AFhRAAAjc+7u3YL/AOW5AAAjdP//7Iv/AGyrAAAjc+7u3IL/ADudAAAjc83NvnD/AIOQAAAjc4uLgUz/AGQKAAAqKPr6+tL/ACoIAAAAANPT09P/AHgzAABVZO6Q7pD/AF8HAAAAANPT09P/AME5AAD4Sf//tsH/AIe4AAD5Uf//rrn/ACyqAAD4Ue7uoq3/AAOcAAD5UM3NjJX/AESPAAD5UIuLX2X/ALowAAAMhP//oHr/APe3AAAMhP//oHr/AKupAAALhO7ulXL/AIKbAAAMhc3NgWL/AMOOAAAMhYuLV0L/ABY0AAB90bIgsqr/ABVGAACPdfqHzvr/AO+4AACPT/+w4v//AIeqAACPT+6k0+7/AFacAACOT82Nts3/AJePAACPTotge4v/ABZHAACvj/+EcP//AFQIAACUOJl3iJn/AIkHAACUOJl3iJn/ANJGAACXNN6wxN7/ACy5AACXNf/K4f//AMSqAACXNe680u7/AJOcAACXNc2itc3/ANSPAACWNYtue4v/AEIKAAAqH////+D/AKu3AAAqH////+D/AFupAAAqH+7u7tH/AESbAAAqH83NzbT/AIqOAAAqH4uLi3r/AB1MAABV//8A/wD/AO8zAABVwM0yzTL/ABEzAAAVFPr68Ob/AFNgAADU////AP//AF+6AADU////AP//AOarAADU/+7uAO7/ALWdAADU/83NAM3/AP2QAADU/4uLAIv/AK4wAADvubCwMGD/AO+3AADky///NLP/AKOpAADky+7uMKf/AHqbAADkzM3NKZD/ALuOAADky4uLHGL/AG1LAABxgM1mzar/AMJGAACq/80AAM3/AG1TAADMmNO6VdP/ABW6AADLmf/gZv//AJyrAADLme7RX+7/AGudAADLmc20Us3/ALOQAADLmot6N4v/AOVMAAC3fNuTcNv/ALq5AAC3ff+rgv//AFKrAAC3fe6fee7/ACGdAAC3fc2JaM3/AGmQAAC3fItdR4v/ACk0AABnqbM8s3H/ACpHAACwj+57aO7/ALMzAABv//oA+pr/AAVKAAB9p9FI0cz/AOdUAADk5MfHFYX/AFVGAACqxnAZGXD/AIQ2AABqCf/1//r/AJJJAAAEHv//5OH/AIS5AAAEHv//5OH/AByrAAAEHu7u1dL/AOucAAADHc3Nt7X/ACyQAAAFHYuLfXv/AEEyAAAaSf//5LX/AJJIAAAZUf//3q3/AFK5AAAZUf//3q3/AOqqAAAZUu7uz6H/ALmcAAAZUs3Ns4v/APqPAAAZUouLeV7/AIcEAACq/4AAAID/AAdGAACq/4AAAID/AEBLAAAqAP////4AAAdRAAAbF/399eb/APJEAAAq/4CAgAD/ABhgAAA4wI5rjiP/AFS6AAA4wf/A/z7/ANurAAA4wO6z7jr/AKqdAAA4wM2azTL/APKQAAA4wItpiyL/AHNOAAAb////pQD/AMy5AAAb////pQD/AGSrAAAb/+7umgD/ADOdAAAb/83NhQD/AHuQAAAb/4uLWgD/AN5VAAAL////RQD/AEm6AAAL////RQD/ANCrAAAL/+7uQAD/AJ+dAAAL/83NNwD/AOeQAAAL/4uLJQD/AI9TAADWe9racNb/ACe6AADWfP//g/r/AK6rAADWfO7ueun/AH2dAADWfM3Nacn/AMWQAADVfIuLR4n/AI9RAAAmSO7u6Kr/AP4zAABVZPuY+5j/AD64AABVZf+a/5r/AOOpAABVZO6Q7pD/ALqbAABVZM18zXz/APuOAABVZItUi1T/AC1KAAB/Q+6v7u7/AI+5AAB/RP+7////ACerAAB/RO6u7u7/APacAAB/RM2Wzc3/ADeQAAB/Q4tmi4v/APxUAADxfNvbcJP/AC+6AADxff//gqv/ALarAADxfe7ueZ//AIWdAADxfc3NaIn/AM2QAADxfIuLR13/AEctAAAaKf//79X/ACJCAAAURv//2rn/ANy4AAAURv//2rn/AGyqAAATRe7uy63/AEOcAAATRc3Nr5X/AISPAAAURYuLd2X/ANULAAAUsM3NhT//AOc5AAD3P///wMv/AJa4AAD1Sf//tcX/ADuqAAD1Se7uqbj/ABKcAAD1Ss3NkZ7/AFOPAAD1SYuLY2z/APg1AADURt3doN3/AGe4AADURP//u///AAyqAADURO7uru7/AOObAADURM3Nls3/ACSPAADUQ4uLZov/AKlGAACEO+aw4Ob/AEFNAADE3fCgIPD/AMC5AAC/z/+bMP//AFirAADAz+6RLO7/ACedAADAz819Js3/AG+QAADAz4tVGov/AAdNAAC/qplmM5n/AChWAAAA////AAD/AE+6AAAA////AAD/ANarAAAA/+7uAAD/AKWdAAAA/83NAAD/AO2QAAAA/4uLAAD/AL8vAAAAPby8j4//AOS3AAAAPv//wcH/AJipAAAAPu7utLT/AG+bAAAAPs3Nm5v/ALCOAAAAPouLaWn/APVGAACfteFBaeH/ADy5AACft/9Idv//ANSqAACft+5Dbu7/AKOcAACfts06X83/AOSPAACft4snQIv/AOwvAAAR3IuLRRP/ANswAAAEivr6gHL/APy3AAAJlv//jGn/ALCpAAAJlu7ugmL/AIebAAAJls3NcFT/AMiOAAAJlouLTDn/AM4vAAATmvT0pGD/AE80AABnqosui1f/AE24AABnq/9U/5//APKpAABnq+5O7pT/AMmbAABnq81DzYD/AAqPAABnqosui1f/AD03AAAREP//9e7/AG24AAAREP//9e7/ABKqAAASEe7u5d7/AOmbAAASEc3Nxb//ACqPAAASEIuLhoL/AM1gAAANt6CgUi3/AGi6AAANuP//gkf/AO+rAAANuO7ueUL/AL6dAAANuM3NaDn/AAaRAAANuYuLRyb/ANsbAAAAAMDAwMD/ADhGAACLbOuHzuv/AAG5AACQeP+Hzv//AJmqAACQeO5+wO7/AGicAACQeM1sps3/AKmPAACRd4tKcIv/AFJHAACvj81qWs3/AEe5AACvkP+Db///AN+qAACvkO56Z+7/AK6cAACvkM1pWc3/AO+PAACvkItHPIv/AHsIAACUOJBwgJD/AJa3AACVOP/G4v//AEapAACVOO650+7/AC+bAACUOc2fts3/AHWOAACVOItse4v/ALAHAACUOJBwgJD/ABcKAAAABf//+vr/AKW3AAAABf//+vr/AFWpAAAABe7u6en/AD6bAAAABM3Nycn/AISOAAAAA4uLiYn/AMozAABq//8A/3//ACG4AABq//8A/3//AMapAABq/+4A7nb/AJ2bAABq/80AzWb/AN6OAABq/4sAi0X/AOZGAACSm7RGgrT/ADG5AACSnP9juP//AMmqAACSnO5crO7/AJicAACSnM1PlM3/ANmPAACTm4s2ZIv/AK00AAAYVNLStIz/AGK4AAAUsP//pU//AAeqAAAUsO7umkn/AN6bAAAUsM3NhT//AB+PAAAUsIuLWiv/AAo5AAB//4AAgID/ANJMAADUHdjYv9j/ALG5AADUHv//4f//AEmrAADUHu7u0u7/ABidAADUHc3Ntc3/AGCQAADUHYuLe4v/ANwuAAAGuP//Y0f/ANy3AAAGuP//Y0f/AJCpAAAGuO7uXEL/AGebAAAGuM3NTzn/AKiOAAAGuYuLNib/ALsPAAAqAP////4AAEBKAAB7tuBA4ND/AJO5AACB//8A9f//ACurAACB/+4A5e7/APqcAACB/80Axc3/ADuQAACB/4sAhov/ACQRAADUc+7ugu7/AABVAADj19DQIJD/ADO6AADrwf//Ppb/ALqrAADrwO7uOoz/AImdAADrwM3NMnj/ANGQAADrwIuLIlL/AIUIAAAAAICAgID/AAg0AABV/4AAgAD/ALoHAAAAAICAgID/AJUwAAAA/4CAAAD/AP1MAADU/4CAAID/AMsSAAAbRPX13rP/AMu3AAAbRf//57r/AH+pAAAbRO7u2K7/AFubAAAbRM3Nupb/AKGOAAAbQ4uLfmb/AMZIAAAAAP//////AEROAAAAAPX19fX/AI0IAAAAAL6+vr7/AFg0AABV//8A/wD/AMIHAAAAAL6+vr7/AJ8wAADvubCwMGD/ADJNAADE3fCgIPD/AH4KAAAq/////wD/ALC3AAAq/////wD/AGCpAAAq/+7u7gD/AEmbAAAq/83NzQD/AI+OAAAq/4uLiwD/AEQzAAA4wM2azTL/AEHAggcLA5R4AgBBzoIHC4UIoED/////////////////////////////////////////////////////////////////////////////////////AAKqAkQDAAQABKoGOQZxAaoCqgIABIMEAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABDkCOQKDBIMEgwSNA14HxwVWBVYFxwXjBHMExwXHBaoCHQPHBeMEHQfHBccFcwTHBVYFcwTjBMcFxwWNB8cFxwXjBKoCOQKqAsEDAASqAo0DAASNAwAEjQOqAgAEAAQ5AjkCAAQ5AjkGAAQABAAEAASqAh0DOQIABAAExwUABAAEjQPXA5oB1wNUBP///////////////////////////////////////////////////////////////////////////////////////wACqgJxBAAEAAQACKoGOQKqAqoCAASPBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCjwSPBI8EAARxB8cFVgXHBccFVgXjBDkGOQYdAwAEOQZWBY0HxwU5BuMEOQbHBXMEVgXHBccFAAjHBccFVgWqAjkCqgKmBAAEqgIABHMEjQNzBI0DqgIABHMEOQKqAnMEOQKqBnMEAARzBHMEjQMdA6oCcwQABMcFAAQABI0DJwPDAScDKQT///////////////////////////////////////////////////////////////////////////////////////8AAqoCXAMABAAEqgY5BrYBqgKqAgAEZgUAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAmYFZgVmBQAEXAfjBOMEVgXHBeME4wTHBccFqgKNA1YFcwSqBlYFxwXjBMcF4wQABHMExwXjBKoG4wRzBHMEHQM5Ah0DYAMABKoCAAQABI0DAASNAzkCAAQABDkCOQKNAzkCxwUABAAEAAQABB0DHQM5AgAEjQNWBY0DjQMdAzMDMwIzA1QE////////////////////////////////////////////////////////////////////////////////////////AAIdA3EEAAQABKoGOQY5AqoCqgIABI8EAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgKPBI8EjwQABKgGVgVWBVYFxwVWBVYFxwU5Bh0DAARWBeMEHQfHBccF4wTHBVYFcwTjBMcFVgUdB1YF4wTjBKoCOQKqAo8EAASqAgAEAASNAwAEjQOqAgAEcwQ5AjkCAAQ5AjkGcwQABAAEAAQdAx0DOQJzBI0DVgUABI0DHQPJAsMByQKPBP//vHgCAEHeigcLhQigQP////////////////////////////////////////////////////////////////////////////////////85AjkC1wJzBHMEHQdWBYcBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEOQI5AqwErASsBHMEHwhWBVYFxwXHBVYF4wQ5BscFOQIABFYFcwSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEOQI5AjkCwQNzBKoCcwRzBAAEcwRzBDkCcwRzBMcBxwEABMcBqgZzBHMEcwRzBKoCAAQ5AnMEAATHBQAEAAQABKwCFAKsAqwE////////////////////////////////////////////////////////////////////////////////////////OQKqAssDcwRzBB0HxwXnAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBKoCqgKsBKwErATjBM0HxwXHBccFxwVWBeMEOQbHBTkCcwTHBeMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBKoCOQKqAqwEcwSqAnME4wRzBOMEcwSqAuME4wQ5AjkCcwQ5Ah0H4wTjBOME4wQdA3MEqgLjBHMEOQZzBHMEAAQdAz0CHQOsBP///////////////////////////////////////////////////////////////////////////////////////zkCOQLXAnMEcwQdB1YFhwGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwQ5AjkCrASsBKwEcwQfCFYFVgXHBccFVgXjBDkGxwU5AgAEVgVzBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wQ5AjkCOQLBA3MEqgJzBHMEAARzBHMEOQJzBHMExwHHAQAExwGqBnMEcwRzBHMEqgIABDkCcwQABMcFAAQABAAErAIUAqwCrAT///////////////////////////////////////////////////////////////////////////////////////85AqoCywNzBHMEHQfHBecBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEqgKqAqwErASsBOMEzQfHBccFxwXHBVYF4wQ5BscFOQJzBMcF4wSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEqgI5AqoCrARzBKoCcwTjBHME4wRzBKoC4wTjBDkCOQJzBDkCHQfjBOME4wTjBB0DcwSqAuMEcwQ5BnMEcwQABB0DPQIdA6wE///weAIAQe6SBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT//xh5AgBB/ZoHC4YIQI9AAAD///////////////////////////////8CAf///////////////////////////////////////////////wIB5ACIAVgCWAKiA7UC3QA9AT0BwgFYAuQAqAHkABsBWAJYAlgCWAJYAlgCWAJYAlgCWALkAOQAWAJYAlgCuwGyA9kCpAKhAuYCRwIkAtYC+QIBAUQBcQIfAlcD5AL/AnkC/wKdAmcCWgLYArECTQSKAlQCTQI7ARsBOwFYAvQB9AESAkcCzwFHAhQCTQFKAjgC6ADsAPQBKAFYAzgCLAJHAkcCZgHhAV4BMQIDAkkDDQICAs8BYAEJAWABWAL//wAA////////////////////////////////DwH///////////////////////////////////////////////8PAfgAwAFYAlgCsQPWAvMAZgFmAcUBWAL4ALIB+AA5AVgCWAJYAlgCWAJYAlgCWAJYAlgC+AD4AFgCWAJYAssBtgPoArACqAL6AlUCMgLgAgUDGgFiAZkCMgJkA+wCEQOMAhEDrgJ3Am0C4gLJAlkEoAJqAl0CYgE5AWIBWAL0AfQBIwJYAtgBWAIeAmwBXAJJAv8AAwEYAj8BbQNJAkACWAJYAogB6AGAAUMCDwJVAyICDgLaAYcBIAGHAVgC//8AAP///////////////////////////////wIB////////////////////////////////////////////////AgHkAIgBWAJYAqIDtQLdAD0BPQHCAVgC5ACoAeQAGwFYAlgCWAJYAlgCWAJYAlgCWAJYAuQA5ABYAlgCWAK7AbID2QKkAqEC5gJHAiQC1gL5AgEBRAFxAh8CWAPjAv8CeQL/Ap0CZwJaAtgCsAJNBIoCVAJNAjsBGwE7AVgC9AH0ARICRwLPAUcCFAJNAUoCOALoAOwA9AEoAVgDOAIsAkcCRwJmAeEBXgExAgMCSQMNAgICzwFgAQkBYAFYAv//AAD///////////////////////////////8PAf///////////////////////////////////////////////w8B+ADAAVgCWAKxA9YC8wBmAWYBxQFYAvgAsgH4ADkBWAJYAlgCWAJYAlgCWAJYAlgCWAL4APgAWAJYAlgCywG2A+gCsAKoAvoCVQIyAuACBQMaAWIBmAIyAmUD6wIRA4wCEQOuAncCbQLiAskCWQSgAmoCXQJiATkBYgFYAvQB9AEjAlgC2AFYAh4CbAFcAkkC/wADARgCPwFtA0kCQAJYAlgCiAHoAYABQwIPAlUDIgIOAtoBhwEgAYcBWAL//yB5AgBBjqMHC4UIoED/////////////////////////////////////////////////////////////////////////////////////iwI1A64DtAYXBZoHPQYzAh8DHwMABLQGiwLjAosCsgIXBRcFFwUXBRcFFwUXBRcFFwUXBbICsgK0BrQGtAY/BAAIeQV9BZYFKQYOBZoEMwYEBlwCXAI/BXUE5wb8BUwG0wRMBo8FFAXjBNsFeQXpB3sF4wR7BR8DsgIfA7QGAAQABOcEFAVmBBQF7ATRAhQFEgU5AjkCogQ5AssHEgXlBBQFFAVKAysEIwMSBbwEiwa8BLwEMwQXBbICFwW0Bv///////////////////////////////////////////////////////////////////////////////////////8kCpgMrBLQGkQUECPoGcwKoA6gDLwS0BgoDUgMKA+wCkQWRBZEFkQWRBZEFkQWRBZEFkQUzAzMDtAa0BrQGpAQACDEGGQbfBaQGdwV3BZEGsgb6AvoCMwYZBfYHsgbNBt0FzQYpBsMFdQV/BjEG0wgrBssFzQWoA+wCqAO0BgAEAARmBboFvgS6BW0FewO6BbIFvgK+AlIFvgJWCLIFfwW6BboF8gPDBNMDsgU3BWQHKQU3BagEsgXsArIFtAb///////////////////////////////////////////////////////////////////////////////////////+LAjUDrgO0BhcFmgc9BjMCHwMfAwAEtAaLAuMCiwKyAhcFFwUXBRcFFwUXBRcFFwUXBRcFsgKyArQGtAa0Bj8EAAh5BX0FlgUpBg4FmgQzBgQGXAJcAj8FdQTnBvwFTAbTBEwGjwUUBeME2wV5BekHewXjBHsFHwOyAh8DtAYABAAE5wQUBWYEFAXsBNECFAUSBTkCOQKiBDkCywcSBeUEFAUUBUoDKwQjAxIFvASLBrwEvAQzBBcFsgIXBbQG////////////////////////////////////////////////////////////////////////////////////////yQKmAysEkQWRBQQI+gZzAqgDqAMvBLQGCgNSAwoD7AKRBZEFkQWRBZEFkQWRBZEFkQWRBTMDMwO0BrQGtAakBAAIMQYZBt8FpAZ3BXcFkQayBvoC+gIzBhkF9geyBs0G3QXNBikGwwV1BX8GMQbTCCsGywXNBagD7AKoA7QGAAQABGYFugW+BLoFbQV7A7oFsgW+Ar4CUgW+AlYIsgV/BboFugXyA8ME0wOyBTcFZAcpBTcFqASyBewCsgW0Bv//KHkCAEGeqwcLhQigQGYE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//9mBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//ZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT///////////////////////////////////////////////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//80eQIAQa6zBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////2kC8AKZAjIEMgTNBKYFRwHwAvAC8AIyBPAC8ALwAjIEMgQyBDIEMgQyBDIEMgQyBDIEMgTwAvACMgQyBDIE8AIqBrgEhwTJBOgESQQzBGkFPAU6AtADmwQNBK0FGwVkBXYEaAWoBNkDpQQwBbME0QZ0BJAEZwTwAtgC8AIyBDIEMgQ0BHUE9gN1BF0E9QIEBF8ESALvAgkEXAKkBl8ESwR1BHUEHAM9AywDXwTrA/QFAgTyA8wD8AIyBPACMgT///////////////////////////////////////////////////////////////////////////////////////9pAvAC7wKwBLAEeQWmBdYB8ALwAnUDsATwAvAC8AIfA7AEsASwBLAEsASwBLAEsASwBLAE8ALwArAEsASwBIEDKgYRBcME5QQkBY0EqwRfBXgFOgJDBPAEbAT2BVcFoAWyBKwF4wQXBOUEbAX5BBIHzgToBHsENwPYAjcDsASwBLAEQwSnBBgEpQSZBPUCBAS+BGMC7wJiBFwC4Aa5BIcEqQSsBGsDcgMsA7oEOARFBmsERQQ6BHgDsAR4A7AE////////////////////////////////////////////////////////////////////////////////////////aQLwApkCMgTZA80EpgVHAfAC8ALwAjIE8ALwAvACMgQyBDIEMgQyBDIEMgQyBDIEMgQyBPAC8AIyBDIEMgTwAioG4wSHBMkE6ARJBDMEaQU8BToC0AObBA0EFwYbBWQFWQRkBagE2QOlBDAFswTRBnQEkARnBPAC2ALwAjIEMgQyBDQEdQSuA3UETAQ2AwQEdQR0Au8CCQSQAqQGXwRLBHUEdQRVAz0DXAN0BOsD9AUCBPIDzAPwAjIE8AIyBP///////////////////////////////////////////////////////////////////////////////////////2kC8AIgA7AEsATcBaYFaQLwAvACdQOwBPAC8ALwAi0DsASwBLAEsASwBLAEsASwBLAEsATwAvACsASwBLAELQMqBukEuATnBA8FvwSvBGkFbQU6Av0DMwU6BEoGSAWeBasEKAb9BAMEewVLBXcFaQdBBXgF5ATiA9ID4gOwBLAEsAS+BL8E8QO/BGoESANIBH8EnQIaA1EEjwKkBn8EjwTKBMoEkwOsA4EDdQRrBDAGmwSDBEME4gOwBOIDsAT//0B5AgBBvrsHC4UIoED/////////////////////////////////////////////////////////////////////////////////////0AImA6wDjAYWBZwI0AUmAqIDogMWBYwG6QKiA+kCogMWBRYFFgUWBRYFFgUWBRYFFgUWBaIDogOMBowGjAZdBAAIeAV8BZYFKgYPBZkENAYDBl4DowOLBXQEvgb8BUwG0wRMBpAFeAXuBNsFeAXpB3sF7AR7BaIDogOiA4wGFgUWBc4E/AQrBPwExATQAvwEEAUyAsECvAQyAsgHEAXbBPwE/ARqAysEJwMQBbwEjAa8BLwENAQUBaIDFAWMBv///////////////////////////////////////////////////////////////////////////////////////7wCOAOzBPAGsAUtCuYGqAJZBFkEsAXwBuQC1wPkAoQFsAWwBbAFsAWwBbAFsAWwBbAFsAU4AzgD8AbwBvAG7wS2BzYGGAbKBaQGdwU0BX0GswZeBHEEKwYZBZUHxgbNBt0FzQZCBq8FdAV/BhwGBwkcBuUFiQVZBIQFWQTwBrAFsAVYBZgFtQSYBVAFYQOYBbMFvAI5A14FvAJ3CLMFfgWYBZgF+gO/BKUDswUzBdYHWgU1BcYEsAVZBLAF8Ab////////////////////////////////////////////////////////////////////////////////////////QAiYDrAOMBhYFnAjQBSYCogOiAxYFjAbpAqID6QKiAxYFFgUWBRYFFgUWBRYFFgUWBRYFogOiA4wGjAaMBl0EAAh2BXwFlgUgBg8FmQQ0BgMGXgOjA4sFdAS+BvwFTAbTBEwGkAV4Be4E2wV2BewHewXsBHsFogOiA6IDjAYWBRYFzgT8BCsE/ATEBNAC+QQQBTICwQKyBDICyQcQBdsE/AT8BGoDKwQnAxAFugSMBrwEugQ0BBQFogMUBYwG////////////////////////////////////////////////////////////////////////////////////////vAI4A7ME8AawBS0K5gaoAlkEWQSwBfAG5ALXA+QChAWwBbAFsAWwBbAFsAWwBbAFsAWwBTgDOAPwBvAG8AbvBLYHNgYYBsoFpAZ3BTQFfQazBl4EcQQrBhkFlQfGBs0G3QXNBkIGrwV0BX8GHAYHCRwG5QWJBVkEhAVZBPAGsAWwBVgFmAW1BJgFUAVhA5gFswW8AjkDXgW8AncIswV8BZgFmAX6A78EpQOzBTEF1gdaBTUFxgSwBVkEsAXwBv//SHkCAEHOwwcLhQigQP////////////////////////////////////////////////////////////////////////////////////8UAiMCNQMrBZMElgbXBcUBXgJeAmoEkwT2AZMCIQLwApMEkwSTBJMEkwSTBJMEkwSTBJMEIQIhApMEkwSTBG8DMQcQBS8FDAXVBXMEIQTTBecFOwIjAukEJwQ5BwgGOwbRBDsG8gRkBG0E0wXDBGgHngR7BJEEogLwAqICVgSWA54EcwTnBM8D5wR9BLYCYgTpBAYCBgIzBAYCcQfpBNUE5wTnBEQD0QPTAukEAgQ5BjEECAS+AwgDaAQIA5ME////////////////////////////////////////////////////////////////////////////////////////FAJKAscDKwWRBDUHAAYhArYCtgJcBJEEUgKTAkgCTgORBJEEkQSRBJEEkQSRBJEEkQSRBEgCUgKRBJEEkQTRAy0HhQVgBRkF7AV7BGQEywUfBqYCpgJQBYUEiweBBl4GBgVeBkgFaASiBAwGMwW8B1YF/gSiBKYCTgOmAkIESgPbBNUEEAUdBBAFugQZA4UEQgVxAnEC9gRxAtsHQgX0BBAFEAWiA/oDeQNCBY0E2QagBI0E5wMnA2gEJwORBP///////////////////////////////////////////////////////////////////////////////////////xQCEgIXAysFaARYBlwFvAFIAkgCagRoBOwBfwIGAs0CaARoBGgEaARoBGgEaARoBGgEaAQGAgYCaARoBGgEagPHBnEEyQSuBFQFFwTHA2oFbQUvAiMCdQTLA7IGngXDBYcEwwWNBAQE/ANoBWIE0QYnBAYEPwRKAs0CSgIjBCcDbwSFBJ4EmgOeBPIDgQICBJ4ECAIIAucDCAL6Bp4EfQSeBJ4EKwNtA5gCngSyA7wF0wOyA40DywJoBMsCaAT///////////////////////////////////////////////////////////////////////////////////////8UAkoCoAMrBWgE2QaqBQoCtgK2AlwEaAQ5ApMCSAJeA2gEaARoBGgEaARoBGgEaARoBGgESAJIAmgEaARoBKwD2QYGBfYE5QRqBVYEPwSFBZoFkwKmAucEJQQKBwoG1wWkBNcF3wQ9BD8EhwW4BCcH2QSDBEoEpgJeA6YCOQQzA28EwQTDBN0DwQR1BPwCVATVBGACYAKLBGACPQfVBK4EwwTBBF4DyQNIA9UEGQROBj8EJwSkA9cCaATXAmgE//9QeQIAQd7LBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////+4BpgJLAyUF4QSKBq8FuQEAAwADxwMlBSgC/gIoAsAD6QRwA3gEagSFBDoEhwQFBMUEhwSAAoACJQUlBSUF1ANuB14FOwUjBf4FOgXLBM0FhQYeAyQEjgXUBGsHIwb0BeEE9AWdBX0E8wQNBlUFzgevBewE0AQAA8ADAAMlBSUFAAQIBHsEogOYBN4DmgITBKgEWAJWAkkESgIMB7oEUASSBHoERwN1A8MCmgT5A+YFCgTwA40DcQMAA3EDJQX///////////////////////////////////////////////////////////////////////////////////////8IAgMDFASgBSAFCQdlBicCkwOTA9sDoAWgAggDoALGA5wF6wMDBf8EMgXLBC8FbwRpBS8F8ALwAqAFoAWgBWMEvAcRBg8GuQWsBsUFXwV1Bk4HkQPDBIkGfAUwCLcGjwacBY8GYQYxBXkFqwYZBgMJeAbbBYQFkwPGA5MDoAWgBQAExAQqBUAETgWTBCUDnQRwBdQCxQIOBcECIAiFBRYFQwUwBSkEGgQuA2oFiQToBrQEfwQ0BAAEGgMABKAF////////////////////////////////////////////////////////////////////////////////////////7gGmAksDJQXhBIoGrwW5AQADAAPHAyUFKAL+AigCwAPpBHADeARqBIUEOgSHBPkDxQSHBBIDEgMlBSUFJQXUA24HXgU7BSMF/gU6BcsEzQWFBh4DJASOBdQEawcjBtgF4QTYBZ0FfQTzBA0GVQXOB68F7ATQBAADwAMAAyUFJQUABJUEbgShA5oExgOhApUEgARhAlQCOQRIAgkHuARMBKAEcQSxA3MDxwKaBE4ElAYCBHoEjQNxAwADcQMlBf///////////////////////////////////////////////////////////////////////////////////////wgCAwMUBKAFIAUJB2UGJwKTA5MD2wOgBaACCAOgAsYDnAXrAwMF/wQyBcsELwWIBGkFLwXwAvACoAWgBaAFYwS8BxEGEwa5BawGxQVfBXUGTgebA8MEiQZ8BUQIowaPBqYFjwZhBjkFeQWrBhkGAwlrBtsFhAWTA8YDkwOgBaAFAARIBTEFSQRNBXUEDAMyBWcF7QLrAiEF1gIECIUFFgVNBTMFRQQjBFYDewXmBHgHqwRbBSMEAAQaAwAEoAX//1h5AgBB7tMHC8gKoED/////////////////////////////////////////////////////////////////////////////////////zwGbAjUD/AMOBLgFdQXEAW0CbQL8A/wD/wFzAgUCFwMOBA4EDgQOBA4EDgQOBA4EDgQOBCQCJAL8A/wD/AO1AycHoQRaBEQE7AToA60DDAX8BAQCjQIoBF0D1wYqBUwFIgRiBVgErQPmAyIFigQeBycE5gO/A3QCFwN0AvwD/ANUAtUDNARiAzQE+wNxAsQDNATWAeoBowPWAWQGNAQ4BDQENATKAiEDrgI0BJ0DuAV3A58DKQOEAq8DhAL8A///AAD///////////////////////////////8AAP///////////////////////////////////////////////88BmwKCA/wDDgTVBaMF3gF+An4C/AP8AxACcwIjAnADDgQOBA4EDgQOBA4EDgQOBA4EDgQ1AjUC/AP8A/wDtQMwB9kEfAQ8BAsF5wOsAxkFDAUiAqYCYARiA/4GRQVpBUIEfQWBBMgD9gM5BbsEQAdoBCgE0wOZAnADmQL8A/wDZwLzA0sEWQNLBAcEiALLA0sE9wELAtcD9wGCBksETQRLBEsE2AIxA8YCSwTJA/YFrQPKAy4DwALNA8AC/AP////////////////////////////////////////////////////////////////////////////////////////PAZsCNQP8Aw4EuAV1BcQBbQJtAvwD/AP/AXMCBQIaAw4EDgQOBA4EDgQOBA4EDgQOBA4EJAIkAvwD/AP8A7UDJwehBFoELgTsBOgDrQMMBfwEBAKNAigEXQPXBigFPAUiBFAFWASeA+YDIgWKBB8HJwTmA78DdAITA3QC/AP8A1QCHQQdBFQDHQTSA3ECHQQdBNYB6gGjA9YBVAYdBBsEHQQdBL4CHQOuAh0EkQO4BXcDlAMpA4QCrwOEAvwD////////////////////////////////////////////////////////////////////////////////////////zwGbAoID/AMOBNUFowXeAX4CfgL8A/wDEAJzAiMCeQMOBA4EDgQOBA4EDgQOBA4EDgQOBDUCNQL8A/wD/AO1AzAH2QR8BCYECwXnA6wDGQUMBSICpgJgBGID/gZABVkFQgRrBYEEuQP2AzkFuwRBB2gEKATTA5kCZgOZAvwD/ANnAjkEOQRLAzkE7gOIAjkEOAT3AQsC1wP3AW4GOAQ4BDkEOQTRAicDxgI4BMED9gWtA8MDLgPAAs0DwAL8A///DAAAAAQAAAAGAAAAAgAAAAMAAAABAAAACQAAAAgAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAFEAAABSAAAAUwAAAFQAAABV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APUAAABlFwAAlyIAALo2AAD2AAAAt2AAALYAAABFDgAAAiIAAFM3AAAwIAAAYCwAAKUiAAAjOwAAxgMAAM46AADAAwAAjAsAANYDAAAqMgAAsQAAAOhRAACjAAAADEwAADIgAABTUQAADyIAAKQsAAAdIgAAszoAAMgDAABiDgAAIgAAALAaAADSIQAA+1oAABoiAABSQAAAKiMAAL8uAAC7AAAAlxoAAJIhAABaNwAACSMAAJkuAAAdIAAADzkAABwhAAAIQQAArgAAAEMbAAALIwAARC8AAMEDAABSNgAADyAAALEuAAA6IAAAjS4AABkgAACrLgAAGiAAAIcwAABhAQAA7A4AAMUiAADSEQAApwAAADIHAACtAAAA6GAAAMMDAAC8QgAAwgMAAFY2AAA8IgAAoxgAAGAmAACpXwAAgiIAABRRAACGIgAA7zUAABEiAAA8LAAAgyIAANK3AAC5AAAAhqkAALIAAABimwAAswAAAO1KAACHIgAAmUAAAN8AAADrCwAAxAMAAE2QAAA0IgAAbGAAALgDAADeNQAA0QMAAEosAAAJIAAAQDAAAP4AAAAkUAAA3AIAAGYXAADXAAAAMVAAACIhAACrGgAA0SEAALxHAAD6AAAAkRoAAJEhAABaWQAA+wAAAPhEAAD5AAAA6DYAAKgAAAAbPQAA0gMAAOIwAADFAwAAtTYAAPwAAABlLAAAGCEAALA6AAC+AwAAtUcAAP0AAAC2MgAApQAAALA2AAD/AAAAZ2AAALYDAACWOgAADSAAAJo6AAAMIAAA5z8BAAgAAAADAAAA5T4AACLQAAALAAAABgAAAFcVAADzaAAAAgAAAAEAAADKLAAApXQAAAQAAAACAAAAGUIAAAAEAAADAAAABAAAAAxBAAAu0AAABQAAAAUAAAC4QgAABAQAAAQAAAAHAAAALRUAAKo2AAAFAAAACQAAAKw2AAAibQAABAAAAAoAAAAsQgAAQPkBAAQAAAAMAAAAsC8AAAAAAQAAAdDR0tPU1dbX2NkAQebyBwsJ8L8AAAAAAAABAEH48gcLDWludmlzAABmaWxsZWQAQZDzBwsaMBoAACJRAADPNQAAbgsAAPR4AABpxgAAVY4AQdDzBwt5//////////////////////////////////////////8AAAAAAAAABP7//4f+//8HAAAAAAAAAAD//3////9///////////N//v3//////3///////////w/g/////zH8////AAAAAAAAAP//////////////AQD4AwBB4PQHC0FA1///+/////9/f1T9/w8A/t////////////7f/////wMA////////nxn////PPwMAAAAAAAD+////fwL+////fwBBqvUHC7MB////BwcAAAAAAP7//wf+BwAAAAD+//////////98/38vAGAAAADg////////IwAAAP8DAAAA4J/5///9xQMAAACwAwADAOCH+f///W0DAAAAXgAAHADgr/v///3tIwAAAAABAAAA4J/5///9zSMAAACwAwAAAODHPdYYx78DAAAAAAAAAADg3/3///3vAwAAAAADAAAA4N/9///97wMAAABAAwAAAODf/f///f8DAAAAAAMAQfD2BwsZ/v////9/DQA/AAAAAAAAAJYl8P6ubA0gHwBBmPcHCwb//v///wMAQcT3Bwty/////z8A/////38A7doHAAAAAFABUDGCq2IsAAAAAEAAyYD1BwAAAAAIAQL/////////////////////////D///////////////A///Pz//////Pz//qv///z/////////fX9wfzw//H9wfAAAAAEBMAEHA+AcLAQcAQdD4BwsmgAAAAP4DAAD+////////////HwD+/////////////wfg/////x8AQZD5BwsV//////////////////////////8/AEGw+QcLFf//////////////////////////DwBB1fkHC8kCYP8H/v//h/7//wcAAAAAAACAAP//f////3//////AAAAAAAAAP//////////////AQD4AwADAAAAAAD//////////z8AAAADAAAAwNf///v/////f39U/f8PAP7f///////////+3/////97AP///////58Z////zz8DAAAAAAAA/v///38C/v///38A/v/7//+7FgD///8HBwAAAAAA/v//B///BwD/A////////////3z/f+///z3/A+7////////z/z8e/8//AADun/n///3F0585gLDP/wMA5If5///9bdOHOQBewP8fAO6v+////e3zvzsAAMH/AADun/n///3N8485wLDD/wAA7Mc91hjHv8PHPYAAgP8AAO7f/f//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rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv8AQYG1CAvBBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygAAAAAAAAAAAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAA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X0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEHw9QgLB0MuVVRGLTgAQYj2CAugEDCrAgDIqwIAWKwCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQdiGCQsMIQQAAAAAAAAAAC8CAEH4hgkLBjUERwRWBABBjocJCwKgBABBoocJCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEHQhwkLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHxiAkLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBq4kJCwEMAEG3iQkLFRMAAAAAEwAAAAAJDAAAAAAADAAADABB5YkJCwEQAEHxiQkLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBn4oJCwESAEGrigkLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBB4ooJCw4aAAAAGhoaAAAAAAAACQBBk4sJCwEUAEGfiwkLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBzYsJCwEWAEHZiwkLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBpIwJCwILAgBBzIwJCwj//////////wBBkI0JC/UI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAAVEkCAA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAABAAAAAAAAACQSQIAGwIAABwCAAD8/////P///5BJAgAdAgAAHgIAALhIAgDMSAIAAAAAANhJAgAfAgAAIAIAAA8CAAAQAgAAIQIAACICAAATAgAAFAIAABUCAAAjAgAAFwIAACQCAAAZAgAAJQIAAMh0AgAoSQIA7EoCAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAoHQCAFxJAgBOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAAJHUCAKhJAgAAAAAAAQAAABxJAgAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAyHQCAORJAgBUSQIATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRz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";return D}var fA;function XA(D){if(D==fA&&E)return new Uint8Array(E);var M=m(D);if(M)return M;throw"both async and sync fetching of the wasm failed"}function DA(D){return Promise.resolve().then(()=>XA(D))}function ee(D,M,R){return DA(D).then(V=>WebAssembly.instantiate(V,M)).then(R,V=>{h(`failed to asynchronously prepare wasm: ${V}`),PA(V)})}function NA(D,M,R,V){return ee(M,R,V)}function ke(){return{a:Ut}}function HA(){var D=ke();function M(V,_){return st=V.exports,v=st.y,Z(),rA(st.z),pA(),st}zA();function R(V){M(V.instance)}return fA??=YA(),NA(E,fA,D,R).catch(o),{}}function vA(D){return i.agerrMessages.push(xe(D)),0}function Gt(D){this.name="ExitStatus",this.message=`Program terminated with exit(${D})`,this.status=D}var ft=D=>{D.forEach(M=>M(i))};function he(D,M="i8"){switch(M.endsWith("*")&&(M="*"),M){case"i1":return S[D];case"i8":return S[D];case"i16":return x[D>>1];case"i32":return F[D>>2];case"i64":return W[D>>3];case"float":return P[D>>2];case"double":return eA[D>>3];case"*":return z[D>>2];default:PA(`invalid type for getValue: ${M}`)}}var Ot=D=>Xi(D),He=()=>pn(),je=typeof TextDecoder<"u"?new TextDecoder:void 0,pt=(D,M=0,R=NaN)=>{for(var V=M+R,_=M;D[_]&&!(_>=V);)++_;if(_-M>16&&D.buffer&&je)return je.decode(D.subarray(M,_));for(var q="";M<_;){var nA=D[M++];if(!(nA&128)){q+=String.fromCharCode(nA);continue}var cA=D[M++]&63;if((nA&224)==192){q+=String.fromCharCode((nA&31)<<6|cA);continue}var MA=D[M++]&63;if((nA&240)==224?nA=(nA&15)<<12|cA<<6|MA:nA=(nA&7)<<18|cA<<12|MA<<6|D[M++]&63,nA<65536)q+=String.fromCharCode(nA);else{var ne=nA-65536;q+=String.fromCharCode(55296|ne>>10,56320|ne&1023)}}return q},xe=(D,M)=>D?pt(b,D,M):"",oi=(D,M,R,V)=>{PA(`Assertion failed: ${xe(D)}, at: `+[M?xe(M):"unknown filename",R,V?xe(V):"unknown function"])};class j{constructor(M){this.excPtr=M,this.ptr=M-24}set_type(M){z[this.ptr+4>>2]=M}get_type(){return z[this.ptr+4>>2]}set_destructor(M){z[this.ptr+8>>2]=M}get_destructor(){return z[this.ptr+8>>2]}set_caught(M){M=M?1:0,S[this.ptr+12]=M}get_caught(){return S[this.ptr+12]!=0}set_rethrown(M){M=M?1:0,S[this.ptr+13]=M}get_rethrown(){return S[this.ptr+13]!=0}init(M,R){this.set_adjusted_ptr(0),this.set_type(M),this.set_destructor(R)}set_adjusted_ptr(M){z[this.ptr+16>>2]=M}get_adjusted_ptr(){return z[this.ptr+16>>2]}}var $=0,oA=(D,M,R)=>{var V=new j(D);throw V.init(M,R),$=D,$},sA={isAbs:D=>D.charAt(0)==="/",splitPath:D=>{var M=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return M.exec(D).slice(1)},normalizeArray:(D,M)=>{for(var R=0,V=D.length-1;V>=0;V--){var _=D[V];_==="."?D.splice(V,1):_===".."?(D.splice(V,1),R++):R&&(D.splice(V,1),R--)}if(M)for(;R;R--)D.unshift("..");return D},normalize:D=>{var M=sA.isAbs(D),R=D.substr(-1)==="/";return D=sA.normalizeArray(D.split("/").filter(V=>!!V),!M).join("/"),!D&&!M&&(D="."),D&&R&&(D+="/"),(M?"/":"")+D},dirname:D=>{var M=sA.splitPath(D),R=M[0],V=M[1];return!R&&!V?".":(V&&(V=V.substr(0,V.length-1)),R+V)},basename:D=>{if(D==="/")return"/";D=sA.normalize(D),D=D.replace(/\/$/,"");var M=D.lastIndexOf("/");return M===-1?D:D.substr(M+1)},join:(...D)=>sA.normalize(D.join("/")),join2:(D,M)=>sA.normalize(D+"/"+M)},TA=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return D=>crypto.getRandomValues(D);PA("initRandomDevice")},de=D=>(de=TA())(D),Qe={resolve:(...D)=>{for(var M="",R=!1,V=D.length-1;V>=-1&&!R;V--){var _=V>=0?D[V]:G.cwd();if(typeof _!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!_)return"";M=_+"/"+M,R=sA.isAbs(_)}return M=sA.normalizeArray(M.split("/").filter(q=>!!q),!R).join("/"),(R?"/":"")+M||"."},relative:(D,M)=>{D=Qe.resolve(D).substr(1),M=Qe.resolve(M).substr(1);function R(ne){for(var se=0;se=0&&ne[Ee]==="";Ee--);return se>Ee?[]:ne.slice(se,Ee-se+1)}for(var V=R(D.split("/")),_=R(M.split("/")),q=Math.min(V.length,_.length),nA=q,cA=0;cA{for(var M=0,R=0;R=55296&&V<=57343?(M+=4,++R):M+=3}return M},ht=(D,M,R,V)=>{if(!(V>0))return 0;for(var _=R,q=R+V-1,nA=0;nA=55296&&cA<=57343){var MA=D.charCodeAt(++nA);cA=65536+((cA&1023)<<10)|MA&1023}if(cA<=127){if(R>=q)break;M[R++]=cA}else if(cA<=2047){if(R+1>=q)break;M[R++]=192|cA>>6,M[R++]=128|cA&63}else if(cA<=65535){if(R+2>=q)break;M[R++]=224|cA>>12,M[R++]=128|cA>>6&63,M[R++]=128|cA&63}else{if(R+3>=q)break;M[R++]=240|cA>>18,M[R++]=128|cA>>12&63,M[R++]=128|cA>>6&63,M[R++]=128|cA&63}}return M[R]=0,R-_};function tt(D,M,R){var V=R>0?R:OA(D)+1,_=new Array(V),q=ht(D,_,0,_.length);return M&&(_.length=q),_}var ze=()=>{if(!GA.length){var D=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(D=window.prompt("Input: "),D!==null&&(D+=` +`)),!D)return null;GA=tt(D,!0)}return GA.shift()},Te={ttys:[],init(){},shutdown(){},register(D,M){Te.ttys[D]={input:[],output:[],ops:M},G.registerDevice(D,Te.stream_ops)},stream_ops:{open(D){var M=Te.ttys[D.node.rdev];if(!M)throw new G.ErrnoError(43);D.tty=M,D.seekable=!1},close(D){D.tty.ops.fsync(D.tty)},fsync(D){D.tty.ops.fsync(D.tty)},read(D,M,R,V,_){if(!D.tty||!D.tty.ops.get_char)throw new G.ErrnoError(60);for(var q=0,nA=0;nA0&&(d(pt(D.output)),D.output=[])},ioctl_tcgets(D){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(D,M,R){return 0},ioctl_tiocgwinsz(D){return[24,80]}},default_tty1_ops:{put_char(D,M){M===null||M===10?(h(pt(D.output)),D.output=[]):M!=0&&D.output.push(M)},fsync(D){D.output&&D.output.length>0&&(h(pt(D.output)),D.output=[])}}},ci=(D,M)=>{b.fill(0,D,D+M)},gn=(D,M)=>Math.ceil(D/M)*M,hn=D=>{D=gn(D,65536);var M=Oi(65536,D);return M&&ci(M,D),M},Ke={ops_table:null,mount(D){return Ke.createNode(null,"/",16895,0)},createNode(D,M,R,V){if(G.isBlkdev(R)||G.isFIFO(R))throw new G.ErrnoError(63);Ke.ops_table||={dir:{node:{getattr:Ke.node_ops.getattr,setattr:Ke.node_ops.setattr,lookup:Ke.node_ops.lookup,mknod:Ke.node_ops.mknod,rename:Ke.node_ops.rename,unlink:Ke.node_ops.unlink,rmdir:Ke.node_ops.rmdir,readdir:Ke.node_ops.readdir,symlink:Ke.node_ops.symlink},stream:{llseek:Ke.stream_ops.llseek}},file:{node:{getattr:Ke.node_ops.getattr,setattr:Ke.node_ops.setattr},stream:{llseek:Ke.stream_ops.llseek,read:Ke.stream_ops.read,write:Ke.stream_ops.write,allocate:Ke.stream_ops.allocate,mmap:Ke.stream_ops.mmap,msync:Ke.stream_ops.msync}},link:{node:{getattr:Ke.node_ops.getattr,setattr:Ke.node_ops.setattr,readlink:Ke.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Ke.node_ops.getattr,setattr:Ke.node_ops.setattr},stream:G.chrdev_stream_ops}};var _=G.createNode(D,M,R,V);return G.isDir(_.mode)?(_.node_ops=Ke.ops_table.dir.node,_.stream_ops=Ke.ops_table.dir.stream,_.contents={}):G.isFile(_.mode)?(_.node_ops=Ke.ops_table.file.node,_.stream_ops=Ke.ops_table.file.stream,_.usedBytes=0,_.contents=null):G.isLink(_.mode)?(_.node_ops=Ke.ops_table.link.node,_.stream_ops=Ke.ops_table.link.stream):G.isChrdev(_.mode)&&(_.node_ops=Ke.ops_table.chrdev.node,_.stream_ops=Ke.ops_table.chrdev.stream),_.timestamp=Date.now(),D&&(D.contents[M]=_,D.timestamp=_.timestamp),_},getFileDataAsTypedArray(D){return D.contents?D.contents.subarray?D.contents.subarray(0,D.usedBytes):new Uint8Array(D.contents):new Uint8Array(0)},expandFileStorage(D,M){var R=D.contents?D.contents.length:0;if(!(R>=M)){var V=1024*1024;M=Math.max(M,R*(R>>0),R!=0&&(M=Math.max(M,256));var _=D.contents;D.contents=new Uint8Array(M),D.usedBytes>0&&D.contents.set(_.subarray(0,D.usedBytes),0)}},resizeFileStorage(D,M){if(D.usedBytes!=M)if(M==0)D.contents=null,D.usedBytes=0;else{var R=D.contents;D.contents=new Uint8Array(M),R&&D.contents.set(R.subarray(0,Math.min(M,D.usedBytes))),D.usedBytes=M}},node_ops:{getattr(D){var M={};return M.dev=G.isChrdev(D.mode)?D.id:1,M.ino=D.id,M.mode=D.mode,M.nlink=1,M.uid=0,M.gid=0,M.rdev=D.rdev,G.isDir(D.mode)?M.size=4096:G.isFile(D.mode)?M.size=D.usedBytes:G.isLink(D.mode)?M.size=D.link.length:M.size=0,M.atime=new Date(D.timestamp),M.mtime=new Date(D.timestamp),M.ctime=new Date(D.timestamp),M.blksize=4096,M.blocks=Math.ceil(M.size/M.blksize),M},setattr(D,M){M.mode!==void 0&&(D.mode=M.mode),M.timestamp!==void 0&&(D.timestamp=M.timestamp),M.size!==void 0&&Ke.resizeFileStorage(D,M.size)},lookup(D,M){throw G.genericErrors[44]},mknod(D,M,R,V){return Ke.createNode(D,M,R,V)},rename(D,M,R){if(G.isDir(D.mode)){var V;try{V=G.lookupNode(M,R)}catch(q){}if(V)for(var _ in V.contents)throw new G.ErrnoError(55)}delete D.parent.contents[D.name],D.parent.timestamp=Date.now(),D.name=R,M.contents[R]=D,M.timestamp=D.parent.timestamp},unlink(D,M){delete D.contents[M],D.timestamp=Date.now()},rmdir(D,M){var R=G.lookupNode(D,M);for(var V in R.contents)throw new G.ErrnoError(55);delete D.contents[M],D.timestamp=Date.now()},readdir(D){var M=[".",".."];for(var R of Object.keys(D.contents))M.push(R);return M},symlink(D,M,R){var V=Ke.createNode(D,M,41471,0);return V.link=R,V},readlink(D){if(!G.isLink(D.mode))throw new G.ErrnoError(28);return D.link}},stream_ops:{read(D,M,R,V,_){var q=D.node.contents;if(_>=D.node.usedBytes)return 0;var nA=Math.min(D.node.usedBytes-_,V);if(nA>8&&q.subarray)M.set(q.subarray(_,_+nA),R);else for(var cA=0;cA0||R+M{var _=V?"":`al ${D}`;C(D).then(q=>{M(new Uint8Array(q)),_&&pA()},q=>{if(R)R();else throw`Loading data file "${D}" failed.`}),_&&zA()},Si=(D,M,R,V,_,q)=>{G.createDataFile(D,M,R,V,_,q)},Li=[],Zi=(D,M,R,V)=>{typeof Browser<"u"&&Browser.init();var _=!1;return Li.forEach(q=>{_||q.canHandle(M)&&(q.handle(D,M,R,V),_=!0)}),_},bt=(D,M,R,V,_,q,nA,cA,MA,ne)=>{var se=M?Qe.resolve(sA.join2(D,M)):D;function Ee(Pe){function Re(Le){ne?.(),cA||Si(D,M,Le,V,_,MA),q?.(),pA()}Zi(Pe,se,Re,()=>{nA?.(),pA()})||Re(Pe)}zA(),typeof R=="string"?nn(R,Ee,nA):Ee(R)},on=D=>{var M={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},R=M[D];if(typeof R>"u")throw new Error(`Unknown file open mode: ${D}`);return R},Kt=(D,M)=>{var R=0;return D&&(R|=365),M&&(R|=146),R},G={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(D){this.name="ErrnoError",this.errno=D}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(D){this.node=D}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(D){this.shared.flags=D}get position(){return this.shared.position}set position(D){this.shared.position=D}},FSNode:class{constructor(D,M,R,V){D||(D=this),this.parent=D,this.mount=D.mount,this.mounted=null,this.id=G.nextInode++,this.name=M,this.mode=R,this.node_ops={},this.stream_ops={},this.rdev=V,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(D){D?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(D){D?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return G.isDir(this.mode)}get isDevice(){return G.isChrdev(this.mode)}},lookupPath(D,M={}){if(D=Qe.resolve(D),!D)return{path:"",node:null};var R={follow_mount:!0,recurse_count:0};if(M=Object.assign(R,M),M.recurse_count>8)throw new G.ErrnoError(32);for(var V=D.split("/").filter(Ee=>!!Ee),_=G.root,q="/",nA=0;nA40)throw new G.ErrnoError(32)}}return{path:q,node:_}},getPath(D){for(var M;;){if(G.isRoot(D)){var R=D.mount.mountpoint;return M?R[R.length-1]!=="/"?`${R}/${M}`:R+M:R}M=M?`${D.name}/${M}`:D.name,D=D.parent}},hashName(D,M){for(var R=0,V=0;V>>0)%G.nameTable.length},hashAddNode(D){var M=G.hashName(D.parent.id,D.name);D.name_next=G.nameTable[M],G.nameTable[M]=D},hashRemoveNode(D){var M=G.hashName(D.parent.id,D.name);if(G.nameTable[M]===D)G.nameTable[M]=D.name_next;else for(var R=G.nameTable[M];R;){if(R.name_next===D){R.name_next=D.name_next;break}R=R.name_next}},lookupNode(D,M){var R=G.mayLookup(D);if(R)throw new G.ErrnoError(R);for(var V=G.hashName(D.id,M),_=G.nameTable[V];_;_=_.name_next){var q=_.name;if(_.parent.id===D.id&&q===M)return _}return G.lookup(D,M)},createNode(D,M,R,V){var _=new G.FSNode(D,M,R,V);return G.hashAddNode(_),_},destroyNode(D){G.hashRemoveNode(D)},isRoot(D){return D===D.parent},isMountpoint(D){return!!D.mounted},isFile(D){return(D&61440)===32768},isDir(D){return(D&61440)===16384},isLink(D){return(D&61440)===40960},isChrdev(D){return(D&61440)===8192},isBlkdev(D){return(D&61440)===24576},isFIFO(D){return(D&61440)===4096},isSocket(D){return(D&49152)===49152},flagsToPermissionString(D){var M=["r","w","rw"][D&3];return D&512&&(M+="w"),M},nodePermissions(D,M){return G.ignorePermissions?0:M.includes("r")&&!(D.mode&292)||M.includes("w")&&!(D.mode&146)||M.includes("x")&&!(D.mode&73)?2:0},mayLookup(D){if(!G.isDir(D.mode))return 54;var M=G.nodePermissions(D,"x");return M||(D.node_ops.lookup?0:2)},mayCreate(D,M){try{var R=G.lookupNode(D,M);return 20}catch(V){}return G.nodePermissions(D,"wx")},mayDelete(D,M,R){var V;try{V=G.lookupNode(D,M)}catch(q){return q.errno}var _=G.nodePermissions(D,"wx");if(_)return _;if(R){if(!G.isDir(V.mode))return 54;if(G.isRoot(V)||G.getPath(V)===G.cwd())return 10}else if(G.isDir(V.mode))return 31;return 0},mayOpen(D,M){return D?G.isLink(D.mode)?32:G.isDir(D.mode)&&(G.flagsToPermissionString(M)!=="r"||M&512)?31:G.nodePermissions(D,G.flagsToPermissionString(M)):44},MAX_OPEN_FDS:4096,nextfd(){for(var D=0;D<=G.MAX_OPEN_FDS;D++)if(!G.streams[D])return D;throw new G.ErrnoError(33)},getStreamChecked(D){var M=G.getStream(D);if(!M)throw new G.ErrnoError(8);return M},getStream:D=>G.streams[D],createStream(D,M=-1){return D=Object.assign(new G.FSStream,D),M==-1&&(M=G.nextfd()),D.fd=M,G.streams[M]=D,D},closeStream(D){G.streams[D]=null},dupStream(D,M=-1){var R=G.createStream(D,M);return R.stream_ops?.dup?.(R),R},chrdev_stream_ops:{open(D){var M=G.getDevice(D.node.rdev);D.stream_ops=M.stream_ops,D.stream_ops.open?.(D)},llseek(){throw new G.ErrnoError(70)}},major:D=>D>>8,minor:D=>D&255,makedev:(D,M)=>D<<8|M,registerDevice(D,M){G.devices[D]={stream_ops:M}},getDevice:D=>G.devices[D],getMounts(D){for(var M=[],R=[D];R.length;){var V=R.pop();M.push(V),R.push(...V.mounts)}return M},syncfs(D,M){typeof D=="function"&&(M=D,D=!1),G.syncFSRequests++,G.syncFSRequests>1&&h(`warning: ${G.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var R=G.getMounts(G.root.mount),V=0;function _(nA){return G.syncFSRequests--,M(nA)}function q(nA){if(nA)return q.errored?void 0:(q.errored=!0,_(nA));++V>=R.length&&_(null)}R.forEach(nA=>{if(!nA.type.syncfs)return q(null);nA.type.syncfs(nA,D,q)})},mount(D,M,R){var V=R==="/",_=!R,q;if(V&&G.root)throw new G.ErrnoError(10);if(!V&&!_){var nA=G.lookupPath(R,{follow_mount:!1});if(R=nA.path,q=nA.node,G.isMountpoint(q))throw new G.ErrnoError(10);if(!G.isDir(q.mode))throw new G.ErrnoError(54)}var cA={type:D,opts:M,mountpoint:R,mounts:[]},MA=D.mount(cA);return MA.mount=cA,cA.root=MA,V?G.root=MA:q&&(q.mounted=cA,q.mount&&q.mount.mounts.push(cA)),MA},unmount(D){var M=G.lookupPath(D,{follow_mount:!1});if(!G.isMountpoint(M.node))throw new G.ErrnoError(28);var R=M.node,V=R.mounted,_=G.getMounts(V);Object.keys(G.nameTable).forEach(nA=>{for(var cA=G.nameTable[nA];cA;){var MA=cA.name_next;_.includes(cA.mount)&&G.destroyNode(cA),cA=MA}}),R.mounted=null;var q=R.mount.mounts.indexOf(V);R.mount.mounts.splice(q,1)},lookup(D,M){return D.node_ops.lookup(D,M)},mknod(D,M,R){var V=G.lookupPath(D,{parent:!0}),_=V.node,q=sA.basename(D);if(!q||q==="."||q==="..")throw new G.ErrnoError(28);var nA=G.mayCreate(_,q);if(nA)throw new G.ErrnoError(nA);if(!_.node_ops.mknod)throw new G.ErrnoError(63);return _.node_ops.mknod(_,q,M,R)},create(D,M){return M=M!==void 0?M:438,M&=4095,M|=32768,G.mknod(D,M,0)},mkdir(D,M){return M=M!==void 0?M:511,M&=1023,M|=16384,G.mknod(D,M,0)},mkdirTree(D,M){for(var R=D.split("/"),V="",_=0;_"u"&&(R=M,M=438),M|=8192,G.mknod(D,M,R)},symlink(D,M){if(!Qe.resolve(D))throw new G.ErrnoError(44);var R=G.lookupPath(M,{parent:!0}),V=R.node;if(!V)throw new G.ErrnoError(44);var _=sA.basename(M),q=G.mayCreate(V,_);if(q)throw new G.ErrnoError(q);if(!V.node_ops.symlink)throw new G.ErrnoError(63);return V.node_ops.symlink(V,_,D)},rename(D,M){var R=sA.dirname(D),V=sA.dirname(M),_=sA.basename(D),q=sA.basename(M),nA,cA,MA;if(nA=G.lookupPath(D,{parent:!0}),cA=nA.node,nA=G.lookupPath(M,{parent:!0}),MA=nA.node,!cA||!MA)throw new G.ErrnoError(44);if(cA.mount!==MA.mount)throw new G.ErrnoError(75);var ne=G.lookupNode(cA,_),se=Qe.relative(D,V);if(se.charAt(0)!==".")throw new G.ErrnoError(28);if(se=Qe.relative(M,R),se.charAt(0)!==".")throw new G.ErrnoError(55);var Ee;try{Ee=G.lookupNode(MA,q)}catch(Le){}if(ne!==Ee){var Pe=G.isDir(ne.mode),Re=G.mayDelete(cA,_,Pe);if(Re)throw new G.ErrnoError(Re);if(Re=Ee?G.mayDelete(MA,q,Pe):G.mayCreate(MA,q),Re)throw new G.ErrnoError(Re);if(!cA.node_ops.rename)throw new G.ErrnoError(63);if(G.isMountpoint(ne)||Ee&&G.isMountpoint(Ee))throw new G.ErrnoError(10);if(MA!==cA&&(Re=G.nodePermissions(cA,"w"),Re))throw new G.ErrnoError(Re);G.hashRemoveNode(ne);try{cA.node_ops.rename(ne,MA,q),ne.parent=MA}catch(Le){throw Le}finally{G.hashAddNode(ne)}}},rmdir(D){var M=G.lookupPath(D,{parent:!0}),R=M.node,V=sA.basename(D),_=G.lookupNode(R,V),q=G.mayDelete(R,V,!0);if(q)throw new G.ErrnoError(q);if(!R.node_ops.rmdir)throw new G.ErrnoError(63);if(G.isMountpoint(_))throw new G.ErrnoError(10);R.node_ops.rmdir(R,V),G.destroyNode(_)},readdir(D){var M=G.lookupPath(D,{follow:!0}),R=M.node;if(!R.node_ops.readdir)throw new G.ErrnoError(54);return R.node_ops.readdir(R)},unlink(D){var M=G.lookupPath(D,{parent:!0}),R=M.node;if(!R)throw new G.ErrnoError(44);var V=sA.basename(D),_=G.lookupNode(R,V),q=G.mayDelete(R,V,!1);if(q)throw new G.ErrnoError(q);if(!R.node_ops.unlink)throw new G.ErrnoError(63);if(G.isMountpoint(_))throw new G.ErrnoError(10);R.node_ops.unlink(R,V),G.destroyNode(_)},readlink(D){var M=G.lookupPath(D),R=M.node;if(!R)throw new G.ErrnoError(44);if(!R.node_ops.readlink)throw new G.ErrnoError(28);return Qe.resolve(G.getPath(R.parent),R.node_ops.readlink(R))},stat(D,M){var R=G.lookupPath(D,{follow:!M}),V=R.node;if(!V)throw new G.ErrnoError(44);if(!V.node_ops.getattr)throw new G.ErrnoError(63);return V.node_ops.getattr(V)},lstat(D){return G.stat(D,!0)},chmod(D,M,R){var V;if(typeof D=="string"){var _=G.lookupPath(D,{follow:!R});V=_.node}else V=D;if(!V.node_ops.setattr)throw new G.ErrnoError(63);V.node_ops.setattr(V,{mode:M&4095|V.mode&-4096,timestamp:Date.now()})},lchmod(D,M){G.chmod(D,M,!0)},fchmod(D,M){var R=G.getStreamChecked(D);G.chmod(R.node,M)},chown(D,M,R,V){var _;if(typeof D=="string"){var q=G.lookupPath(D,{follow:!V});_=q.node}else _=D;if(!_.node_ops.setattr)throw new G.ErrnoError(63);_.node_ops.setattr(_,{timestamp:Date.now()})},lchown(D,M,R){G.chown(D,M,R,!0)},fchown(D,M,R){var V=G.getStreamChecked(D);G.chown(V.node,M,R)},truncate(D,M){if(M<0)throw new G.ErrnoError(28);var R;if(typeof D=="string"){var V=G.lookupPath(D,{follow:!0});R=V.node}else R=D;if(!R.node_ops.setattr)throw new G.ErrnoError(63);if(G.isDir(R.mode))throw new G.ErrnoError(31);if(!G.isFile(R.mode))throw new G.ErrnoError(28);var _=G.nodePermissions(R,"w");if(_)throw new G.ErrnoError(_);R.node_ops.setattr(R,{size:M,timestamp:Date.now()})},ftruncate(D,M){var R=G.getStreamChecked(D);if((R.flags&2097155)===0)throw new G.ErrnoError(28);G.truncate(R.node,M)},utime(D,M,R){var V=G.lookupPath(D,{follow:!0}),_=V.node;_.node_ops.setattr(_,{timestamp:Math.max(M,R)})},open(D,M,R){if(D==="")throw new G.ErrnoError(44);M=typeof M=="string"?on(M):M,M&64?(R=typeof R>"u"?438:R,R=R&4095|32768):R=0;var V;if(typeof D=="object")V=D;else{D=sA.normalize(D);try{var _=G.lookupPath(D,{follow:!(M&131072)});V=_.node}catch(MA){}}var q=!1;if(M&64)if(V){if(M&128)throw new G.ErrnoError(20)}else V=G.mknod(D,R,0),q=!0;if(!V)throw new G.ErrnoError(44);if(G.isChrdev(V.mode)&&(M&=-513),M&65536&&!G.isDir(V.mode))throw new G.ErrnoError(54);if(!q){var nA=G.mayOpen(V,M);if(nA)throw new G.ErrnoError(nA)}M&512&&!q&&G.truncate(V,0),M&=-131713;var cA=G.createStream({node:V,path:G.getPath(V),flags:M,seekable:!0,position:0,stream_ops:V.stream_ops,ungotten:[],error:!1});return cA.stream_ops.open&&cA.stream_ops.open(cA),cA},close(D){if(G.isClosed(D))throw new G.ErrnoError(8);D.getdents&&(D.getdents=null);try{D.stream_ops.close&&D.stream_ops.close(D)}catch(M){throw M}finally{G.closeStream(D.fd)}D.fd=null},isClosed(D){return D.fd===null},llseek(D,M,R){if(G.isClosed(D))throw new G.ErrnoError(8);if(!D.seekable||!D.stream_ops.llseek)throw new G.ErrnoError(70);if(R!=0&&R!=1&&R!=2)throw new G.ErrnoError(28);return D.position=D.stream_ops.llseek(D,M,R),D.ungotten=[],D.position},read(D,M,R,V,_){if(V<0||_<0)throw new G.ErrnoError(28);if(G.isClosed(D))throw new G.ErrnoError(8);if((D.flags&2097155)===1)throw new G.ErrnoError(8);if(G.isDir(D.node.mode))throw new G.ErrnoError(31);if(!D.stream_ops.read)throw new G.ErrnoError(28);var q=typeof _<"u";if(!q)_=D.position;else if(!D.seekable)throw new G.ErrnoError(70);var nA=D.stream_ops.read(D,M,R,V,_);return q||(D.position+=nA),nA},write(D,M,R,V,_,q){if(V<0||_<0)throw new G.ErrnoError(28);if(G.isClosed(D))throw new G.ErrnoError(8);if((D.flags&2097155)===0)throw new G.ErrnoError(8);if(G.isDir(D.node.mode))throw new G.ErrnoError(31);if(!D.stream_ops.write)throw new G.ErrnoError(28);D.seekable&&D.flags&1024&&G.llseek(D,0,2);var nA=typeof _<"u";if(!nA)_=D.position;else if(!D.seekable)throw new G.ErrnoError(70);var cA=D.stream_ops.write(D,M,R,V,_,q);return nA||(D.position+=cA),cA},allocate(D,M,R){if(G.isClosed(D))throw new G.ErrnoError(8);if(M<0||R<=0)throw new G.ErrnoError(28);if((D.flags&2097155)===0)throw new G.ErrnoError(8);if(!G.isFile(D.node.mode)&&!G.isDir(D.node.mode))throw new G.ErrnoError(43);if(!D.stream_ops.allocate)throw new G.ErrnoError(138);D.stream_ops.allocate(D,M,R)},mmap(D,M,R,V,_){if((V&2)!==0&&(_&2)===0&&(D.flags&2097155)!==2)throw new G.ErrnoError(2);if((D.flags&2097155)===1)throw new G.ErrnoError(2);if(!D.stream_ops.mmap)throw new G.ErrnoError(43);if(!M)throw new G.ErrnoError(28);return D.stream_ops.mmap(D,M,R,V,_)},msync(D,M,R,V,_){return D.stream_ops.msync?D.stream_ops.msync(D,M,R,V,_):0},ioctl(D,M,R){if(!D.stream_ops.ioctl)throw new G.ErrnoError(59);return D.stream_ops.ioctl(D,M,R)},readFile(D,M={}){if(M.flags=M.flags||0,M.encoding=M.encoding||"binary",M.encoding!=="utf8"&&M.encoding!=="binary")throw new Error(`Invalid encoding type "${M.encoding}"`);var R,V=G.open(D,M.flags),_=G.stat(D),q=_.size,nA=new Uint8Array(q);return G.read(V,nA,0,q,0),M.encoding==="utf8"?R=pt(nA):M.encoding==="binary"&&(R=nA),G.close(V),R},writeFile(D,M,R={}){R.flags=R.flags||577;var V=G.open(D,R.flags,R.mode);if(typeof M=="string"){var _=new Uint8Array(OA(M)+1),q=ht(M,_,0,_.length);G.write(V,_,0,q,void 0,R.canOwn)}else if(ArrayBuffer.isView(M))G.write(V,M,0,M.byteLength,void 0,R.canOwn);else throw new Error("Unsupported data type");G.close(V)},cwd:()=>G.currentPath,chdir(D){var M=G.lookupPath(D,{follow:!0});if(M.node===null)throw new G.ErrnoError(44);if(!G.isDir(M.node.mode))throw new G.ErrnoError(54);var R=G.nodePermissions(M.node,"x");if(R)throw new G.ErrnoError(R);G.currentPath=M.path},createDefaultDirectories(){G.mkdir("/tmp"),G.mkdir("/home"),G.mkdir("/home/web_user")},createDefaultDevices(){G.mkdir("/dev"),G.registerDevice(G.makedev(1,3),{read:()=>0,write:(V,_,q,nA,cA)=>nA}),G.mkdev("/dev/null",G.makedev(1,3)),Te.register(G.makedev(5,0),Te.default_tty_ops),Te.register(G.makedev(6,0),Te.default_tty1_ops),G.mkdev("/dev/tty",G.makedev(5,0)),G.mkdev("/dev/tty1",G.makedev(6,0));var D=new Uint8Array(1024),M=0,R=()=>(M===0&&(M=de(D).byteLength),D[--M]);G.createDevice("/dev","random",R),G.createDevice("/dev","urandom",R),G.mkdir("/dev/shm"),G.mkdir("/dev/shm/tmp")},createSpecialDirectories(){G.mkdir("/proc");var D=G.mkdir("/proc/self");G.mkdir("/proc/self/fd"),G.mount({mount(){var M=G.createNode(D,"fd",16895,73);return M.node_ops={lookup(R,V){var _=+V,q=G.getStreamChecked(_),nA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>q.path}};return nA.parent=nA,nA}},M}},{},"/proc/self/fd")},createStandardStreams(D,M,R){D?G.createDevice("/dev","stdin",D):G.symlink("/dev/tty","/dev/stdin"),M?G.createDevice("/dev","stdout",null,M):G.symlink("/dev/tty","/dev/stdout"),R?G.createDevice("/dev","stderr",null,R):G.symlink("/dev/tty1","/dev/stderr"),G.open("/dev/stdin",0),G.open("/dev/stdout",1),G.open("/dev/stderr",1)},staticInit(){[44].forEach(D=>{G.genericErrors[D]=new G.ErrnoError(D),G.genericErrors[D].stack=""}),G.nameTable=new Array(4096),G.mount(Ke,{},"/"),G.createDefaultDirectories(),G.createDefaultDevices(),G.createSpecialDirectories(),G.filesystems={MEMFS:Ke}},init(D,M,R){G.initialized=!0,G.createStandardStreams(D,M,R)},quit(){G.initialized=!1;for(var D=0;Dthis.length-1||Re<0)){var Le=Re%this.chunkSize,ai=Re/this.chunkSize|0;return this.getter(ai)[Le]}}setDataGetter(Re){this.getter=Re}cacheLength(){var Re=new XMLHttpRequest;if(Re.open("HEAD",R,!1),Re.send(null),!(Re.status>=200&&Re.status<300||Re.status===304))throw new Error("Couldn't load "+R+". Status: "+Re.status);var Le=Number(Re.getResponseHeader("Content-length")),ai,Yn=(ai=Re.getResponseHeader("Accept-Ranges"))&&ai==="bytes",tA=(ai=Re.getResponseHeader("Content-Encoding"))&&ai==="gzip",yA=1024*1024;Yn||(yA=Le);var WA=(ye,be)=>{if(ye>be)throw new Error("invalid range ("+ye+", "+be+") or no bytes requested!");if(be>Le-1)throw new Error("only "+Le+" bytes available! programmer error!");var ot=new XMLHttpRequest;if(ot.open("GET",R,!1),Le!==yA&&ot.setRequestHeader("Range","bytes="+ye+"-"+be),ot.responseType="arraybuffer",ot.overrideMimeType&&ot.overrideMimeType("text/plain; charset=x-user-defined"),ot.send(null),!(ot.status>=200&&ot.status<300||ot.status===304))throw new Error("Couldn't load "+R+". Status: "+ot.status);return ot.response!==void 0?new Uint8Array(ot.response||[]):tt(ot.responseText||"",!0)},Ge=this;Ge.setDataGetter(ye=>{var be=ye*yA,ot=(ye+1)*yA-1;if(ot=Math.min(ot,Le-1),typeof Ge.chunks[ye]>"u"&&(Ge.chunks[ye]=WA(be,ot)),typeof Ge.chunks[ye]>"u")throw new Error("doXHR failed!");return Ge.chunks[ye]}),(tA||!Le)&&(yA=Le=1,Le=this.getter(0).length,yA=Le,d("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=Le,this._chunkSize=yA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var nA,cA}else var cA={isDevice:!1,url:R};var MA=G.createFile(D,M,cA,V,_);cA.contents?MA.contents=cA.contents:cA.url&&(MA.contents=null,MA.url=cA.url),Object.defineProperties(MA,{usedBytes:{get:function(){return this.contents.length}}});var ne={},se=Object.keys(MA.stream_ops);se.forEach(Pe=>{var Re=MA.stream_ops[Pe];ne[Pe]=(...Le)=>(G.forceLoadFile(MA),Re(...Le))});function Ee(Pe,Re,Le,ai,Yn){var tA=Pe.node.contents;if(Yn>=tA.length)return 0;var yA=Math.min(tA.length-Yn,ai);if(tA.slice)for(var WA=0;WA(G.forceLoadFile(MA),Ee(Pe,Re,Le,ai,Yn)),ne.mmap=(Pe,Re,Le,ai,Yn)=>{G.forceLoadFile(MA);var tA=hn(Re);if(!tA)throw new G.ErrnoError(48);return Ee(Pe,S,tA,Re,Le),{ptr:tA,allocated:!0}},MA.stream_ops=ne,MA}},dt={DEFAULT_POLLMASK:5,calculateAt(D,M,R){if(sA.isAbs(M))return M;var V;if(D===-100)V=G.cwd();else{var _=dt.getStreamFromFD(D);V=_.path}if(M.length==0){if(!R)throw new G.ErrnoError(44);return V}return sA.join2(V,M)},doStat(D,M,R){var V=D(M);F[R>>2]=V.dev,F[R+4>>2]=V.mode,z[R+8>>2]=V.nlink,F[R+12>>2]=V.uid,F[R+16>>2]=V.gid,F[R+20>>2]=V.rdev,W[R+24>>3]=BigInt(V.size),F[R+32>>2]=4096,F[R+36>>2]=V.blocks;var _=V.atime.getTime(),q=V.mtime.getTime(),nA=V.ctime.getTime();return W[R+40>>3]=BigInt(Math.floor(_/1e3)),z[R+48>>2]=_%1e3*1e3*1e3,W[R+56>>3]=BigInt(Math.floor(q/1e3)),z[R+64>>2]=q%1e3*1e3*1e3,W[R+72>>3]=BigInt(Math.floor(nA/1e3)),z[R+80>>2]=nA%1e3*1e3*1e3,W[R+88>>3]=BigInt(V.ino),0},doMsync(D,M,R,V,_){if(!G.isFile(M.node.mode))throw new G.ErrnoError(43);if(V&2)return 0;var q=b.slice(D,D+R);G.msync(M,q,_,R,V)},getStreamFromFD(D){var M=G.getStreamChecked(D);return M},varargs:void 0,getStr(D){var M=xe(D);return M}};function Bi(D,M,R,V){try{if(M=dt.getStr(M),M=dt.calculateAt(D,M),R&-8)return-28;var _=G.lookupPath(M,{follow:!0}),q=_.node;if(!q)return-44;var nA="";return R&4&&(nA+="r"),R&2&&(nA+="w"),R&1&&(nA+="x"),nA&&G.nodePermissions(q,nA)?-2:0}catch(cA){if(typeof G>"u"||cA.name!=="ErrnoError")throw cA;return-cA.errno}}function Qn(){var D=F[+dt.varargs>>2];return dt.varargs+=4,D}var un=Qn;function Vn(D,M,R){dt.varargs=R;try{var V=dt.getStreamFromFD(D);switch(M){case 0:{var _=Qn();if(_<0)return-28;for(;G.streams[_];)_++;var q;return q=G.dupStream(V,_),q.fd}case 1:case 2:return 0;case 3:return V.flags;case 4:{var _=Qn();return V.flags|=_,0}case 12:{var _=un(),nA=0;return x[_+nA>>1]=2,0}case 13:case 14:return 0}return-28}catch(cA){if(typeof G>"u"||cA.name!=="ErrnoError")throw cA;return-cA.errno}}function Yo(D,M){try{var R=dt.getStreamFromFD(D);return dt.doStat(G.stat,R.path,M)}catch(V){if(typeof G>"u"||V.name!=="ErrnoError")throw V;return-V.errno}}function Bo(D,M,R){dt.varargs=R;try{var V=dt.getStreamFromFD(D);switch(M){case 21509:return V.tty?0:-59;case 21505:{if(!V.tty)return-59;if(V.tty.ops.ioctl_tcgets){var _=V.tty.ops.ioctl_tcgets(V),q=un();F[q>>2]=_.c_iflag||0,F[q+4>>2]=_.c_oflag||0,F[q+8>>2]=_.c_cflag||0,F[q+12>>2]=_.c_lflag||0;for(var nA=0;nA<32;nA++)S[q+nA+17]=_.c_cc[nA]||0;return 0}return 0}case 21510:case 21511:case 21512:return V.tty?0:-59;case 21506:case 21507:case 21508:{if(!V.tty)return-59;if(V.tty.ops.ioctl_tcsets){for(var q=un(),cA=F[q>>2],MA=F[q+4>>2],ne=F[q+8>>2],se=F[q+12>>2],Ee=[],nA=0;nA<32;nA++)Ee.push(S[q+nA+17]);return V.tty.ops.ioctl_tcsets(V.tty,M,{c_iflag:cA,c_oflag:MA,c_cflag:ne,c_lflag:se,c_cc:Ee})}return 0}case 21519:{if(!V.tty)return-59;var q=un();return F[q>>2]=0,0}case 21520:return V.tty?-28:-59;case 21531:{var q=un();return G.ioctl(V,M,q)}case 21523:{if(!V.tty)return-59;if(V.tty.ops.ioctl_tiocgwinsz){var Pe=V.tty.ops.ioctl_tiocgwinsz(V.tty),q=un();x[q>>1]=Pe[0],x[q+2>>1]=Pe[1]}return 0}case 21524:return V.tty?0:-59;case 21515:return V.tty?0:-59;default:return-28}}catch(Re){if(typeof G>"u"||Re.name!=="ErrnoError")throw Re;return-Re.errno}}function No(D,M,R,V){try{M=dt.getStr(M);var _=V&256,q=V&4096;return V=V&-6401,M=dt.calculateAt(D,M,q),dt.doStat(_?G.lstat:G.stat,M,R)}catch(nA){if(typeof G>"u"||nA.name!=="ErrnoError")throw nA;return-nA.errno}}function Zo(D,M,R,V){dt.varargs=V;try{M=dt.getStr(M),M=dt.calculateAt(D,M);var _=V?Qn():0;return G.open(M,R,_).fd}catch(q){if(typeof G>"u"||q.name!=="ErrnoError")throw q;return-q.errno}}function Do(D,M){try{return D=dt.getStr(D),dt.doStat(G.stat,D,M)}catch(R){if(typeof G>"u"||R.name!=="ErrnoError")throw R;return-R.errno}}var Ba=()=>{PA("")},Xo=D=>D%4===0&&(D%100!==0||D%400===0),ra=[0,31,60,91,121,152,182,213,244,274,305,335],yo=[0,31,59,90,120,151,181,212,243,273,304,334],ge=D=>{var M=Xo(D.getFullYear()),R=M?ra:yo,V=R[D.getMonth()]+D.getDate()-1;return V},mi=9007199254740992,cn=-9007199254740992,fn=D=>Dmi?NaN:Number(D);function Ho(D,M){D=fn(D);var R=new Date(D*1e3);F[M>>2]=R.getSeconds(),F[M+4>>2]=R.getMinutes(),F[M+8>>2]=R.getHours(),F[M+12>>2]=R.getDate(),F[M+16>>2]=R.getMonth(),F[M+20>>2]=R.getFullYear()-1900,F[M+24>>2]=R.getDay();var V=ge(R)|0;F[M+28>>2]=V,F[M+36>>2]=-(R.getTimezoneOffset()*60);var _=new Date(R.getFullYear(),0,1),q=new Date(R.getFullYear(),6,1).getTimezoneOffset(),nA=_.getTimezoneOffset(),cA=(q!=nA&&R.getTimezoneOffset()==Math.min(nA,q))|0;F[M+32>>2]=cA}function ya(D,M,R,V,_,q,nA){_=fn(_);try{if(isNaN(_))return 61;var cA=dt.getStreamFromFD(V),MA=G.mmap(cA,D,_,M,R),ne=MA.ptr;return F[q>>2]=MA.allocated,z[nA>>2]=ne,0}catch(se){if(typeof G>"u"||se.name!=="ErrnoError")throw se;return-se.errno}}function _i(D,M,R,V,_,q){q=fn(q);try{var nA=dt.getStreamFromFD(_);R&2&&dt.doMsync(D,nA,M,V,q)}catch(cA){if(typeof G>"u"||cA.name!=="ErrnoError")throw cA;return-cA.errno}}var Eo=(D,M,R)=>ht(D,b,M,R),Za=(D,M,R,V)=>{var _=new Date().getFullYear(),q=new Date(_,0,1),nA=new Date(_,6,1),cA=q.getTimezoneOffset(),MA=nA.getTimezoneOffset(),ne=Math.max(cA,MA);z[D>>2]=ne*60,F[M>>2]=+(cA!=MA);var se=Re=>{var Le=Re>=0?"-":"+",ai=Math.abs(Re),Yn=String(Math.floor(ai/60)).padStart(2,"0"),tA=String(ai%60).padStart(2,"0");return`UTC${Le}${Yn}${tA}`},Ee=se(cA),Pe=se(MA);MADate.now(),Ta=()=>2147483648,Jn=D=>{var M=v.buffer,R=(D-M.byteLength+65535)/65536|0;try{return v.grow(R),Z(),1}catch(V){}},Ui=D=>{var M=b.length;D>>>=0;var R=Ta();if(D>R)return!1;for(var V=1;V<=4;V*=2){var _=M*(1+.2/V);_=Math.min(_,D+100663296);var q=Math.min(R,gn(Math.max(D,_),65536)),nA=Jn(q);if(nA)return!0}return!1},qt={},Nn=()=>s,ho=()=>{if(!ho.strings){var D=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",M={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:D,_:Nn()};for(var R in qt)qt[R]===void 0?delete M[R]:M[R]=qt[R];var V=[];for(var R in M)V.push(`${R}=${M[R]}`);ho.strings=V}return ho.strings},Fo=(D,M)=>{for(var R=0;R{var R=0;return ho().forEach((V,_)=>{var q=M+R;z[D+_*4>>2]=q,Fo(V,q),R+=V.length+1}),0},Ae=(D,M)=>{var R=ho();z[D>>2]=R.length;var V=0;return R.forEach(_=>V+=_.length+1),z[M>>2]=V,0},De=D=>{l(D,new Gt(D))},mA=(D,M)=>{De(D)},FA=mA;function le(D){try{var M=dt.getStreamFromFD(D);return G.close(M),0}catch(R){if(typeof G>"u"||R.name!=="ErrnoError")throw R;return R.errno}}var Ne=(D,M,R,V)=>{for(var _=0,q=0;q>2],cA=z[M+4>>2];M+=8;var MA=G.read(D,S,nA,cA,V);if(MA<0)return-1;if(_+=MA,MA>2]=q,0}catch(nA){if(typeof G>"u"||nA.name!=="ErrnoError")throw nA;return nA.errno}}function rt(D,M,R,V){M=fn(M);try{if(isNaN(M))return 61;var _=dt.getStreamFromFD(D);return G.llseek(_,M,R),W[V>>3]=BigInt(_.position),_.getdents&&M===0&&R===0&&(_.getdents=null),0}catch(q){if(typeof G>"u"||q.name!=="ErrnoError")throw q;return q.errno}}var xt=(D,M,R,V)=>{for(var _=0,q=0;q>2],cA=z[M+4>>2];M+=8;var MA=G.write(D,S,nA,cA,V);if(MA<0)return-1;if(_+=MA,MA>2]=q,0}catch(nA){if(typeof G>"u"||nA.name!=="ErrnoError")throw nA;return nA.errno}}var Ti=D=>{var M=i["_"+D];return M},zi=(D,M)=>{S.set(D,M)},Xt=D=>Wn(D),Ji=D=>{var M=OA(D)+1,R=Xt(M);return Eo(D,R,M),R},va=(D,M,R,V,_)=>{var q={string:Le=>{var ai=0;return Le!=null&&Le!==0&&(ai=Ji(Le)),ai},array:Le=>{var ai=Xt(Le.length);return zi(Le,ai),ai}};function nA(Le){return M==="string"?xe(Le):M==="boolean"?!!Le:Le}var cA=Ti(D),MA=[],ne=0;if(V)for(var se=0;se(i._viz_set_y_invert=st.A)(D),i._viz_set_reduce=D=>(i._viz_set_reduce=st.B)(D),i._viz_get_graphviz_version=()=>(i._viz_get_graphviz_version=st.C)(),i._free=D=>(i._free=st.D)(D),i._malloc=D=>(i._malloc=st.E)(D),i._viz_get_plugin_list=D=>(i._viz_get_plugin_list=st.G)(D),i._viz_create_graph=(D,M,R)=>(i._viz_create_graph=st.H)(D,M,R),i._viz_read_one_graph=D=>(i._viz_read_one_graph=st.I)(D),i._viz_string_dup=(D,M)=>(i._viz_string_dup=st.J)(D,M),i._viz_string_dup_html=(D,M)=>(i._viz_string_dup_html=st.K)(D,M),i._viz_string_free=(D,M)=>(i._viz_string_free=st.L)(D,M),i._viz_string_free_html=(D,M)=>(i._viz_string_free_html=st.M)(D,M),i._viz_add_node=(D,M)=>(i._viz_add_node=st.N)(D,M),i._viz_add_edge=(D,M,R)=>(i._viz_add_edge=st.O)(D,M,R),i._viz_add_subgraph=(D,M)=>(i._viz_add_subgraph=st.P)(D,M),i._viz_set_default_graph_attribute=(D,M,R)=>(i._viz_set_default_graph_attribute=st.Q)(D,M,R),i._viz_set_default_node_attribute=(D,M,R)=>(i._viz_set_default_node_attribute=st.R)(D,M,R),i._viz_set_default_edge_attribute=(D,M,R)=>(i._viz_set_default_edge_attribute=st.S)(D,M,R),i._viz_set_attribute=(D,M,R)=>(i._viz_set_attribute=st.T)(D,M,R),i._viz_free_graph=D=>(i._viz_free_graph=st.U)(D),i._viz_create_context=()=>(i._viz_create_context=st.V)(),i._viz_free_context=D=>(i._viz_free_context=st.W)(D),i._viz_layout=(D,M,R)=>(i._viz_layout=st.X)(D,M,R),i._viz_free_layout=(D,M)=>(i._viz_free_layout=st.Y)(D,M),i._viz_reset_errors=()=>(i._viz_reset_errors=st.Z)(),i._viz_render=(D,M,R)=>(i._viz_render=st._)(D,M,R);var Oi=(D,M)=>(Oi=st.$)(D,M),Xi=D=>(Xi=st.aa)(D),Wn=D=>(Wn=st.ba)(D),pn=()=>(pn=st.ca)();i.ccall=va,i.getValue=he,i.PATH=sA,i.UTF8ToString=xe,i.stringToUTF8=Eo,i.lengthBytesUTF8=OA,i.FS=G;var _t,sa;UA=function D(){_t||zo(),_t||(UA=D)};function zo(){if(uA>0||!sa&&(sa=1,AA(),uA>0))return;function D(){_t||(_t=1,i.calledRun=1,!k&&(IA(),n(i),aA()))}D()}return zo(),A=a,A}})(),yiA=[[/^Error: (.*)/,"error"],[/^Warning: (.*)/,"warning"]];function aKA(t){return t.map(e=>{for(let A=0;A{if(typeof A.name!="string")throw new Error("image name must be a string");if(typeof A.width!="number"&&typeof A.width!="string")throw new Error("image width must be a number or string");if(typeof A.height!="number"&&typeof A.height!="string")throw new Error("image height must be a number or string");let i=t.PATH.join("/",A.name),n=` + +`;return t.FS.createPath("/",t.PATH.dirname(i)),t.FS.writeFile(i,n),i}):[]}function gKA(t,e){for(let A of e)t.FS.analyzePath(A).exists&&t.FS.unlink(A)}function cKA(t,e,A){let i;try{let n=t.lengthBytesUTF8(e);return i=t.ccall("malloc","number",["number"],[n+1]),t.stringToUTF8(e,i,n+1),t.ccall("viz_read_one_graph","number",["number"],[i])}finally{i&&t.ccall("free","number",["number"],[i])}}function CKA(t,e,A){let i=t.ccall("viz_create_graph","number",["string","number","number"],[e.name,typeof e.directed<"u"?e.directed:!0,typeof e.strict<"u"?e.strict:!1]);return SiA(t,i,e),i}function SiA(t,e,A){kiA(t,e,A),A.nodes&&A.nodes.forEach(i=>{if(typeof i.name>"u")throw new Error("nodes must have a name");let n=t.ccall("viz_add_node","number",["number","string"],[e,String(i.name)]);i.attributes&&MiA(t,e,n,i.attributes)}),A.edges&&A.edges.forEach(i=>{if(typeof i.tail>"u")throw new Error("edges must have a tail");if(typeof i.head>"u")throw new Error("edges must have a head");let n=t.ccall("viz_add_edge","number",["number","string","string"],[e,String(i.tail),String(i.head)]);i.attributes&&MiA(t,e,n,i.attributes)}),A.subgraphs&&A.subgraphs.forEach(i=>{let n=t.ccall("viz_add_subgraph","number",["number","string"],[e,typeof i.name<"u"?String(i.name):0]);SiA(t,n,i)})}function kiA(t,e,A){if(A.graphAttributes)for(let[i,n]of Object.entries(A.graphAttributes))xv(t,e,n,o=>{t.ccall("viz_set_default_graph_attribute","number",["number","string","number"],[e,i,o])});if(A.nodeAttributes)for(let[i,n]of Object.entries(A.nodeAttributes))xv(t,e,n,o=>{t.ccall("viz_set_default_node_attribute","number",["number","string","number"],[e,i,o])});if(A.edgeAttributes)for(let[i,n]of Object.entries(A.edgeAttributes))xv(t,e,n,o=>{t.ccall("viz_set_default_edge_attribute","number",["number","string","number"],[e,i,o])})}function MiA(t,e,A,i){for(let[n,o]of Object.entries(i))xv(t,e,o,a=>{t.ccall("viz_set_attribute","number",["number","string","number"],[A,n,a])})}function xv(t,e,A,i){let n;if(typeof A=="object"&&"html"in A?n=t.ccall("viz_string_dup_html","number",["number","string"],[e,String(A.html)]):n=t.ccall("viz_string_dup","number",["number","string"],[e,String(A)]),n==0)throw new Error("couldn't dup string");i(n),typeof A=="object"&&"html"in A?t.ccall("viz_string_free_html","number",["number","number"],[e,n]):t.ccall("viz_string_free","number",["number","number"],[e,n])}var mF=class{constructor(e){this.module=e}get graphvizVersion(){return sKA(this.module)}get formats(){return viA(this.module,"device")}get engines(){return viA(this.module,"layout")}renderFormats(e,A,i={}){return biA(this.module,e,A,gA({engine:"dot"},i))}render(e,A={}){let i;A.format===void 0?i="dot":i=A.format;let n=biA(this.module,e,[i],gA({engine:"dot"},A));return n.status==="success"&&(n.output=n.output[i]),n}renderString(e,A={}){let i=this.render(e,A);if(i.status!=="success")throw new Error(i.errors.find(n=>n.level=="error")?.message||"render failed");return i.output}renderSVGElement(e,A={}){let i=this.renderString(e,Ye(gA({},A),{format:"svg"})),n;return typeof A.trustedTypePolicy<"u"?n=A.trustedTypePolicy.createHTML(i):n=i,new DOMParser().parseFromString(n,"image/svg+xml").documentElement}renderJSON(e,A={}){let i=this.renderString(e,Ye(gA({},A),{format:"json"}));return JSON.parse(i)}};function xiA(){return oKA().then(t=>new mF(t))}var _v=class t{render(e){return lt(this,null,function*(){let A={format:"svg",engine:"dot"};return(yield xiA()).renderString(e,A)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Rv=new kA("VideoService");var Nv=class t{createMessagePartFromFile(e){return lt(this,null,function*(){return{inlineData:{displayName:e.name,data:yield this.readFileAsBytes(e),mimeType:e.type}}})}readFileAsBytes(e){return new Promise((A,i)=>{let n=new FileReader;n.onload=o=>{let a=o.target.result.split(",")[1];A(a)},n.onerror=i,n.readAsDataURL(e)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Fv=class t extends r6{sanitizer=w(e2);windowOpen(e,A,i,n){return e.open(A,i,n)}createObjectUrl(e){return URL.createObjectURL(e)}openBlobUrl(e){let A=this.createObjectUrl(e);return this.windowOpen(window,A,"_blank")}setAnchorHref(e,A){e.href=A}bypassSecurityTrustHtml(e){return this.sanitizer.bypassSecurityTrustHtml(e)}bypassSecurityTrustUrl(e){return this.sanitizer.bypassSecurityTrustUrl(e)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=bi(t)))(i||t)}})();static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Lv=class t{constructor(e){this.http=e}apiServerDomain=Dr.getApiServerBaseUrl();createSession(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`,o={};return i?o.state=i:o.state={},this.http.post(n,i?o:null)}return new vi}updateSession(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.patch(o,n)}listSessions(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.get(i).pipe(we(n=>({items:n,nextPageToken:""})))}return oe({items:[],nextPageToken:""})}deleteSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.delete(n)}getSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.get(n)}importSession(e,A,i,n){if(this.apiServerDomain!=null){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`,a={events:i};return n&&(a.state=n),this.http.post(o,a)}return new vi}canEdit(e,A){return oe(!0)}static \u0275fac=function(A){return new(A||t)(Lo(fr))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Gv=class t{audioRecordingService=w(YB);videoService=w(Rv);webSocketService=w(zB);audioIntervalId=void 0;videoIntervalId=void 0;constructor(){}getWsUrl(e,A,i,n){let a=`${window.location.protocol==="https:"?"wss":"ws"}://${Dr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`;return n&&(n.proactiveAudio&&(a+="&proactive_audio=true"),n.enableAffectiveDialog&&(a+="&enable_affective_dialog=true"),n.enableSessionResumption&&(a+="&enable_session_resumption=true"),n.saveLiveBlob&&(a+="&save_live_blob=true")),a}startAudioChat(o){return lt(this,arguments,function*({appName:e,userId:A,sessionId:i,flags:n}){this.webSocketService.connect(this.getWsUrl(e,A,i,n)),yield this.startAudioStreaming()})}stopAudioChat(){this.stopAudioStreaming(),this.webSocketService.closeConnection()}startAudioStreaming(){return lt(this,null,function*(){try{yield this.audioRecordingService.startRecording(),this.audioIntervalId=window.setInterval(()=>this.sendBufferedAudio(),250)}catch(e){console.error("Error accessing microphone:",e)}})}stopAudioStreaming(){clearInterval(this.audioIntervalId),this.audioIntervalId=void 0,this.audioRecordingService.stopRecording()}sendBufferedAudio(){let e=this.audioRecordingService.getCombinedAudioBuffer();if(!e)return;let A={blob:{mime_type:"audio/pcm",data:e}};this.webSocketService.sendMessage(A),this.audioRecordingService.cleanAudioBuffer()}startVideoChat(a){return lt(this,arguments,function*({appName:e,userId:A,sessionId:i,videoContainer:n,flags:o}){this.webSocketService.connect(this.getWsUrl(e,A,i,o)),yield this.startAudioStreaming(),yield this.startVideoStreaming(n)})}stopVideoChat(e){this.stopAudioStreaming(),this.stopVideoStreaming(e),this.webSocketService.closeConnection()}startVideoStreaming(e){return lt(this,null,function*(){try{yield this.videoService.startRecording(e),this.videoIntervalId=window.setInterval(()=>lt(this,null,function*(){return yield this.sendCapturedFrame()}),1e3)}catch(A){console.error("Error accessing camera:",A)}})}sendCapturedFrame(){return lt(this,null,function*(){let e=yield this.videoService.getCapturedFrame();if(!e)return;let A={blob:{mime_type:"image/jpeg",data:e}};this.webSocketService.sendMessage(A)})}stopVideoStreaming(e){clearInterval(this.videoIntervalId),this.videoIntervalId=void 0,this.videoService.stopRecording(e)}onStreamClose(){return this.webSocketService.onCloseReason()}closeStream(){this.webSocketService.closeConnection()}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Kv=class t{stc(e,A){let i=this.hashCode(e),n=Math.abs(i%360),o=60+Math.abs((i>>8)%40),a;return A==="dark"?a=15+Math.abs((i>>16)%30):a=40+Math.abs((i>>16)%30),this.hslToHex(n,o,a)}hashCode(e){let A=0;for(let i=0,n=e.length;i{let r=(a+e/30)%12,s=i-n*Math.max(Math.min(r-3,9-r,1),-1);return Math.round(255*s).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}ff`}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Uv=class t{THEME_STORAGE_KEY="adk-theme-preference";currentTheme=bA(this.getInitialTheme());constructor(){Ao(()=>{this.applyTheme(this.currentTheme())})}getInitialTheme(){let e=window.localStorage.getItem(this.THEME_STORAGE_KEY);return e==="light"||e==="dark"?e:"dark"}applyTheme(e){let A=document.documentElement;A.classList.remove("light-theme","dark-theme"),A.classList.add(`${e}-theme`),A.style.colorScheme=e,window.localStorage.setItem(this.THEME_STORAGE_KEY,e),this.updatePrismTheme(e)}updatePrismTheme(e){let A="prism-theme-style",i=document.getElementById(A);i||(i=document.createElement("link"),i.id=A,i.rel="stylesheet",document.head.appendChild(i)),i.href=e==="light"?"prism-light.css":"prism-dark.css"}toggleTheme(){this.currentTheme.update(e=>e==="light"?"dark":"light")}setTheme(e){this.currentTheme.set(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Tv=class t{selectedTraceRowSource=new ei(void 0);selectedTraceRow$=this.selectedTraceRowSource.asObservable();eventDataSource=new ei(void 0);eventData$=this.eventDataSource.asObservable();messagesSource=new ei([]);messages$=this.messagesSource.asObservable();selectedRow(e){this.selectedTraceRowSource.next(e)}setEventData(e){this.eventDataSource.next(e)}setMessages(e){this.messagesSource.next(e)}resetTraceService(){this.selectedTraceRowSource.next(void 0),this.eventDataSource.next(void 0),this.messagesSource.next([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Jv=class t{_isSessionLoading=new ei(!1);_isSessionListLoading=new ei(!1);_isEventRequestResponseLoading=new ei(!1);_isMessagesLoading=new ei(!1);_newMessagesLoadedResponse=new ie;_newMessagesLoadingFailedResponse=new ie;featureFlagService=w(yr);isSessionLoading(){return this._isSessionLoading.pipe(RQ(this.featureFlagService.isLoadingAnimationsEnabled()),we(([e,A])=>e&&A),Gs({bufferSize:1,refCount:!0}))}setIsSessionLoading(e){this._isSessionLoading.next(e)}isSessionListLoading(){return this._isSessionListLoading.pipe(RQ(this.featureFlagService.isLoadingAnimationsEnabled()),we(([e,A])=>e&&A),Gs({bufferSize:1,refCount:!0}))}setIsSessionListLoading(e){this._isSessionListLoading.next(e)}isEventRequestResponseLoading(){return this._isEventRequestResponseLoading.pipe(RQ(this.featureFlagService.isLoadingAnimationsEnabled()),we(([e,A])=>e&&A),Gs({bufferSize:1,refCount:!0}))}setIsEventRequestResponseLoading(e){this._isEventRequestResponseLoading.next(e)}setIsMessagesLoading(e){this._isMessagesLoading.next(e)}isMessagesLoading(){return this._isMessagesLoading.pipe(RQ(this.featureFlagService.isLoadingAnimationsEnabled()),we(([e,A])=>e&&A),Gs({bufferSize:1,refCount:!0}))}lazyLoadMessages(e,A,i){throw new Error("Not implemented")}onNewMessagesLoaded(){return this._newMessagesLoadedResponse}onNewMessagesLoadingFailed(){return this._newMessagesLoadingFailedResponse}static \u0275fac=function(A){return new(A||t)};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Ov=class t{mediaRecorder;stream;renderer;videoElement;videoBuffer=[];constructor(e){this.renderer=e.createRenderer(null,null)}createVideoElement(e){e?.nativeElement&&(this.clearVideoElement(e),this.videoElement=this.renderer.createElement("video"),this.renderer.setAttribute(this.videoElement,"width","400"),this.renderer.setAttribute(this.videoElement,"height","300"),this.renderer.setAttribute(this.videoElement,"autoplay","true"),this.renderer.setAttribute(this.videoElement,"muted","true"),this.renderer.appendChild(e.nativeElement,this.videoElement))}startRecording(e){return lt(this,null,function*(){this.createVideoElement(e);try{this.stream=yield navigator.mediaDevices.getUserMedia({video:!0}),this.videoElement&&(this.videoElement.srcObject=this.stream),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm"}),this.mediaRecorder.start(1e3)}catch(A){console.error("Error accessing camera/microphone:",A)}})}getCapturedFrame(){return lt(this,null,function*(){try{let e=yield this.captureFrame();return this.blobToUint8Array(e)}catch(e){console.error("Error capturing frame:",e);return}})}blobToUint8Array(e){return lt(this,null,function*(){let A=yield e.arrayBuffer();return new Uint8Array(A)})}captureFrame(){return lt(this,null,function*(){return new Promise((e,A)=>{try{if(!this.videoElement){A(new Error("Video element not available"));return}let i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;let n=i.getContext("2d");if(!n){A(new Error("Canvas context not supported"));return}n.drawImage(this.videoElement,0,0,i.width,i.height),i.toBlob(o=>{o?e(o):A(new Error("Failed to create image blob"))},"image/png")}catch(i){A(i)}})})}stopRecording(e){this.mediaRecorder&&this.mediaRecorder.stop(),this.stream&&this.stream.getTracks().forEach(A=>A.stop()),this.clearVideoElement(e)}clearVideoElement(e){let A=e.nativeElement.querySelector("video");A&&this.renderer.removeChild(e.nativeElement,A)}static \u0275fac=function(A){return new(A||t)(Lo(Kr))};static \u0275prov=qA({token:t,factory:t.\u0275fac,providedIn:"root"})};var IKA={url:"",deserializer:t=>JSON.parse(t.data),serializer:t=>JSON.stringify(t)},dKA="WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }",F3=class t extends kF{constructor(e,A){if(super(),this._socket=null,e instanceof vi)this.destination=A,this.source=e;else{let i=this._config=Object.assign({},IKA);if(this._output=new ie,typeof e=="string")i.url=e;else for(let n in e)e.hasOwnProperty(n)&&(i[n]=e[n]);if(!i.WebSocketCtor&&WebSocket)i.WebSocketCtor=WebSocket;else if(!i.WebSocketCtor)throw new Error("no WebSocket constructor can be found");this.destination=new Sg}}lift(e){let A=new t(this._config,this.destination);return A.operator=e,A.source=this,A}_resetState(){this._socket=null,this.source||(this.destination=new Sg),this._output=new ie}multiplex(e,A,i){let n=this;return new vi(o=>{try{n.next(e())}catch(r){o.error(r)}let a=n.subscribe({next:r=>{try{i(r)&&o.next(r)}catch(s){o.error(s)}},error:r=>o.error(r),complete:()=>o.complete()});return()=>{try{n.next(A())}catch(r){o.error(r)}a.unsubscribe()}})}_connectSocket(){let{WebSocketCtor:e,protocol:A,url:i,binaryType:n}=this._config,o=this._output,a=null;try{a=A?new e(i,A):new e(i),this._socket=a,n&&(this._socket.binaryType=n)}catch(s){o.error(s);return}let r=new bo(()=>{this._socket=null,a&&a.readyState===1&&a.close()});a.onopen=s=>{let{_socket:l}=this;if(!l){a.close(),this._resetState();return}let{openObserver:g}=this._config;g&&g.next(s);let C=this.destination;this.destination=bF.create(I=>{if(a.readyState===1)try{let{serializer:d}=this._config;a.send(d(I))}catch(d){this.destination.error(d)}},I=>{let{closingObserver:d}=this._config;d&&d.next(void 0),I&&I.code?a.close(I.code,I.reason):o.error(new TypeError(dKA)),this._resetState()},()=>{let{closingObserver:I}=this._config;I&&I.next(void 0),a.close(),this._resetState()}),C&&C instanceof Sg&&r.add(C.subscribe(this.destination))},a.onerror=s=>{this._resetState(),o.error(s)},a.onclose=s=>{a===this._socket&&this._resetState();let{closeObserver:l}=this._config;l&&l.next(s),s.wasClean?o.complete():o.error(s)},a.onmessage=s=>{try{let{deserializer:l}=this._config;o.next(l(s))}catch(l){o.error(l)}}}_subscribe(e){let{source:A}=this;return A?A.subscribe(e):(this._socket||this._connectSocket(),this._output.subscribe(e),e.add(()=>{let{_socket:i}=this;this._output.observers.length===0&&(i&&(i.readyState===1||i.readyState===0)&&i.close(),this._resetState())}),e)}unsubscribe(){let{_socket:e}=this;e&&(e.readyState===1||e.readyState===0)&&e.close(),this._resetState(),super.unsubscribe()}};var Yv=class t{audioPlayingService=w(HB);socket$;messages$=new ei("");audioBuffer=[];audioIntervalId=null;closeReasonSubject=new ie;connect(e){this.socket$=new F3({url:e,serializer:A=>JSON.stringify(A),deserializer:A=>A.data,closeObserver:{next:A=>{this.emitWsCloseReason(A.reason)}}}),this.socket$.subscribe(A=>{this.handleIncomingEvent(A)},A=>{console.error("WebSocket error:",A)}),this.audioIntervalId=setInterval(()=>this.playIncomingAudio(),250)}playIncomingAudio(){this.audioPlayingService.playAudio(this.audioBuffer),this.audioBuffer=[]}sendMessage(e){if(e.blob.data=this.arrayBufferToBase64(e.blob.data.buffer),!this.socket$||this.socket$.closed){console.error("WebSocket is not open.");return}this.socket$.next(e)}closeConnection(){clearInterval(this.audioIntervalId),this.audioIntervalId=null,this.socket$&&this.socket$.complete()}getMessages(){return this.messages$.asObservable()}arrayBufferToBase64(e){let A="",i=new Uint8Array(e),n=i.byteLength;for(let o=0;ot.json()).then(t=>{window.runtimeConfig=t,rL(wQ,{providers:[GF(sL,ln,lL,hv,Ps,Ya,qi),{provide:Al,useClass:Lv},{provide:$s,useClass:eQ},{provide:Gy,useClass:kv},{provide:zB,useClass:Yv},{provide:l6,useValue:"./assets/audio-processor.js"},{provide:YB,useClass:wv},{provide:HB,useClass:mv},{provide:Rv,useClass:Ov},{provide:s6,useClass:Gv},{provide:o6,useClass:Mv},{provide:t0,useClass:yv},{provide:TB,useClass:pv},{provide:JB,useClass:Dv},{provide:Ag,useClass:Tv},{provide:yr,useClass:Sv},{provide:OB,useClass:_v},{provide:Q2,useClass:Kv},{provide:Cs,useClass:Fv},{provide:a6,useClass:Nv},{provide:cL,useValue:dL},{provide:IL,useValue:QiA},{provide:_I,useValue:BQ},...t.logo?[{provide:PB,useValue:uv}]:[],{provide:e0,useClass:fv},{provide:rv,useValue:_c},JK(),Bu(),{provide:g6,useClass:Uc},{provide:tg,useClass:Jv},{provide:eg,useClass:Uv}]}).catch(e=>console.error(e))}); diff --git a/src/google/adk/cli/browser/main-QQBY56NS.js b/src/google/adk/cli/browser/main-QQBY56NS.js deleted file mode 100644 index 1f105b547a..0000000000 --- a/src/google/adk/cli/browser/main-QQBY56NS.js +++ /dev/null @@ -1,4134 +0,0 @@ -import{$ as f2,$a as rp,$b as qA,$c as sC,A as i0,Aa as Ga,Ab as GA,Ac as jo,B as $m,Ba as la,Bb as li,Bc as rt,C as nl,Ca as ti,Cb as Ei,Cc as ca,D as Ap,Da as Bi,Db as Di,Dc as xU,E as fi,Ea as ge,Eb as js,Ec as rC,F as gU,Fa as ol,Fb as qs,Fc as Dt,G as Ze,Ga as ip,Gb as on,Gc as y1,H as lU,Ha as np,Hb as JA,Hc as he,I as m1,Ia as p1,Ib as vo,Ic as en,J as ta,Ja as QU,Jb as tA,Jc as RU,K as lu,Ka as hU,Kb as p2,Kc as Ip,L as Os,La as Wl,Lb as v,Lc as NU,M as oo,Ma as al,Mb as Yt,Mc as Ob,N as cu,Na as Ka,Nb as Ke,Nc as FU,O as Vl,Oa as m2,Ob as fa,Oc as Pb,P as ep,Pa as nC,Pb as ai,Pc as _U,Q as zo,Qa as p,Qb as ce,Qc as o0,R as Yb,Ra as op,Rb as Ce,Rc as LU,S as h2,Sa as Yn,Sb as Cp,Sc as gs,T as u2,Ta as Tn,Tb as rs,Tc as D2,U as Ps,Ua as Kr,Ub as Dr,Uc as DB,V as Fg,Va as _i,Vb as An,Vc as rl,W as cn,Wa as at,Wb as wn,Wc as dp,X as Si,Xa as ap,Xb as ne,Xc as sl,Y as Bt,Ya as Oo,Yb as pU,Yc as ls,Z as cU,Za as Hb,Zb as Po,Zc as Bp,_ as oi,_a as uU,_b as K,_c as ma,a as Jn,aa as kt,ab as kA,ac as Se,ad as jb,b as iU,ba as CU,bb as $e,bc as n0,bd as Zs,c as nU,ca as wr,cb as OA,cc as wU,cd as GU,d as $i,da as zA,db as sp,dc as Qo,dd as KU,e as oU,ea as Xe,eb as It,ec as ao,ed as UU,f as XA,fa as IU,fb as pt,fc as ho,fd as Xs,g as aU,ga as yA,gb as gp,gc as Ur,gd as JU,h as Ht,ha as xo,hb as fU,hc as _g,hd as YU,i as ql,ia as h,ib as w1,ic as Vs,id as $s,j as Ub,ja as dU,jb as lp,jc as D1,jd as TU,k as Wm,ka as Gr,kb as zb,kc as DU,kd as HU,l as uB,la as or,lb as mU,lc as dt,ld as zU,m as ja,ma as BU,mb as oC,mc as Cu,n as gu,na as Z,nb as cp,nc as ss,o as fB,oa as X,ob as ie,oc as Zl,od as OU,p as Ms,pa as Qt,pb as pB,pc as ri,pd as PU,q as se,qa as as,qb as V,qc as Ci,r as Zm,ra as ft,rb as aC,rc as yU,s as mB,sa as Xt,sb as W,sc as w2,t as rU,ta as qa,tb as wB,tc as vU,u as sU,ua as EU,ub as Li,uc as bU,v as fe,va as $A,vb as Ut,vc as Ue,w as Ir,wa as Oe,wb as Jt,wc as MU,x as t0,xa as tp,xb as $,xc as kU,y as Jb,ya as Tb,yb as m,yc as Ws,z as Xm,za as jA,zb as w,zc as SU}from"./chunk-BX7YU7E6.js";import{a as cA,b as Ge,c as tU,d as qe,f as su,g as nt,h as le}from"./chunk-W7GRJBO5.js";var jO=qe(aS=>{"use strict";var PO={b:"\b",f:"\f",n:` -`,r:"\r",t:" ",'"':'"',"/":"/","\\":"\\"},ZEA=97;aS.parse=function(t,e,A){var i={},n=0,o=0,a=0,r=A&&A.bigint&&typeof BigInt<"u";return{data:s("",!0),pointers:i};function s(J,j){g();var AA;S(J,"value");var O=E();switch(O){case"t":B("rue"),AA=!0;break;case"f":B("alse"),AA=!1;break;case"n":B("ull"),AA=null;break;case'"':AA=l();break;case"[":AA=I(J);break;case"{":AA=d(J);break;default:Q(),"-0123456789".indexOf(O)>=0?AA=C():F()}return S(J,"valueEnd"),g(),j&&aNumber.MAX_SAFE_INTEGER||AA="a"&&AA<="f"?j+=AA.charCodeAt()-ZEA+10:AA>="0"&&AA<="9"?j+=+AA:_()}return String.fromCharCode(j)}function b(){for(var J="";t[a]>="0"&&t[a]<="9";)J+=E();if(J.length)return J;U(),F()}function S(J,j){M(J,j,D())}function M(J,j,AA){i[J]=i[J]||{},i[J][j]=AA}function D(){return{line:n,column:o,pos:a}}function F(){throw new SyntaxError("Unexpected token "+t[a]+" in JSON at position "+a)}function _(){Q(),F()}function U(){if(a>=t.length)throw new SyntaxError("Unexpected end of JSON input")}};aS.stringify=function(t,e,A){if(!Cw(t))return;var i=0,n,o,a=typeof A=="object"?A.space:A;switch(typeof a){case"number":var r=a>10?10:a<0?0:Math.floor(a);a=r&&M(r," "),n=r,o=r;break;case"string":a=a.slice(0,10),n=0,o=0;for(var s=0;s=0}var $EA=/"|\\/g,AQA=/[\b]/g,eQA=/\f/g,tQA=/\n/g,iQA=/\r/g,nQA=/\t/g;function Iw(t){return t=t.replace($EA,"\\$&").replace(eQA,"\\f").replace(AQA,"\\b").replace(tQA,"\\n").replace(iQA,"\\r").replace(nQA,"\\t"),'"'+t+'"'}var oQA=/~/g,aQA=/\//g;function oS(t){return t.replace(oQA,"~0").replace(aQA,"~1")}});var BV=qe((Zpe,dV)=>{"use strict";var IV=function(t,e){var A,i,n=1,o=0,a=0,r=String.alphabet;function s(g,l,C){if(C){for(A=l;C=s(g,A),C<76&&C>65;)++A;return+g.slice(l-1,A)}return C=r&&r.indexOf(g.charAt(l)),C>-1?C+76:(C=g.charCodeAt(l)||0,C<45||C>127?C:C<46?65:C<48?C-1:C<58?C+18:C<65?C-11:C<91?C+11:C<97?C-37:C<123?C+5:C-63)}if((t+="")!=(e+="")){for(;n;)if(i=s(t,o++),n=s(e,a++),i<76&&n<76&&i>66&&n>66&&(i=s(t,o,o),n=s(e,a,o=A),a=A),i!=n)return i{"use strict";Object.defineProperty(zn,"__esModule",{value:!0});zn.regexpCode=zn.getEsmExportName=zn.getProperty=zn.safeStringify=zn.stringify=zn.strConcat=zn.addCodeArg=zn.str=zn._=zn.nil=zn._Code=zn.Name=zn.IDENTIFIER=zn._CodeOrName=void 0;var d3=class{};zn._CodeOrName=d3;zn.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var rd=class extends d3{constructor(e){if(super(),!zn.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};zn.Name=rd;var yl=class extends d3{constructor(e){super(),this._items=typeof e=="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((A,i)=>`${A}${i}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((A,i)=>(i instanceof rd&&(A[i.str]=(A[i.str]||0)+1),A),{})}};zn._Code=yl;zn.nil=new yl("");function QV(t,...e){let A=[t[0]],i=0;for(;i{"use strict";Object.defineProperty(dg,"__esModule",{value:!0});dg.ValueScope=dg.ValueScopeName=dg.Scope=dg.varKinds=dg.UsedValueState=void 0;var Ig=E3(),OS=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},A5=(function(t){return t[t.Started=0]="Started",t[t.Completed=1]="Completed",t})(A5||(dg.UsedValueState=A5={}));dg.varKinds={const:new Ig.Name("const"),let:new Ig.Name("let"),var:new Ig.Name("var")};var e5=class{constructor({prefixes:e,parent:A}={}){this._names={},this._prefixes=e,this._parent=A}toName(e){return e instanceof Ig.Name?e:this.name(e)}name(e){return new Ig.Name(this._newName(e))}_newName(e){let A=this._names[e]||this._nameGroup(e);return`${e}${A.index++}`}_nameGroup(e){var A,i;if(!((i=(A=this._parent)===null||A===void 0?void 0:A._prefixes)===null||i===void 0)&&i.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};dg.Scope=e5;var t5=class extends Ig.Name{constructor(e,A){super(A),this.prefix=e}setValue(e,{property:A,itemIndex:i}){this.value=e,this.scopePath=(0,Ig._)`.${new Ig.Name(A)}[${i}]`}};dg.ValueScopeName=t5;var n6A=(0,Ig._)`\n`,PS=class extends e5{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts=Ge(cA({},e),{_n:e.lines?n6A:Ig.nil})}get(){return this._scope}name(e){return new t5(e,this._newName(e))}value(e,A){var i;if(A.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let n=this.toName(e),{prefix:o}=n,a=(i=A.key)!==null&&i!==void 0?i:A.ref,r=this._values[o];if(r){let l=r.get(a);if(l)return l}else r=this._values[o]=new Map;r.set(a,n);let s=this._scope[o]||(this._scope[o]=[]),g=s.length;return s[g]=A.ref,n.setValue(A,{property:o,itemIndex:g}),n}getValue(e,A){let i=this._values[e];if(i)return i.get(A)}scopeRefs(e,A=this._values){return this._reduceValues(A,i=>{if(i.scopePath===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return(0,Ig._)`${e}${i.scopePath}`})}scopeCode(e=this._values,A,i){return this._reduceValues(e,n=>{if(n.value===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return n.value.code},A,i)}_reduceValues(e,A,i={},n){let o=Ig.nil;for(let a in e){let r=e[a];if(!r)continue;let s=i[a]=i[a]||new Map;r.forEach(g=>{if(s.has(g))return;s.set(g,A5.Started);let l=A(g);if(l){let C=this.opts.es5?dg.varKinds.var:dg.varKinds.const;o=(0,Ig._)`${o}${C} ${g} = ${l};${this.opts._n}`}else if(l=n?.(g))o=(0,Ig._)`${o}${l}${this.opts._n}`;else throw new OS(g);s.set(g,A5.Completed)})}return o}};dg.ValueScope=PS});var rn=qe(nn=>{"use strict";Object.defineProperty(nn,"__esModule",{value:!0});nn.or=nn.and=nn.not=nn.CodeGen=nn.operators=nn.varKinds=nn.ValueScopeName=nn.ValueScope=nn.Scope=nn.Name=nn.regexpCode=nn.stringify=nn.getProperty=nn.nil=nn.strConcat=nn.str=nn._=void 0;var vn=E3(),wc=jS(),EI=E3();Object.defineProperty(nn,"_",{enumerable:!0,get:function(){return EI._}});Object.defineProperty(nn,"str",{enumerable:!0,get:function(){return EI.str}});Object.defineProperty(nn,"strConcat",{enumerable:!0,get:function(){return EI.strConcat}});Object.defineProperty(nn,"nil",{enumerable:!0,get:function(){return EI.nil}});Object.defineProperty(nn,"getProperty",{enumerable:!0,get:function(){return EI.getProperty}});Object.defineProperty(nn,"stringify",{enumerable:!0,get:function(){return EI.stringify}});Object.defineProperty(nn,"regexpCode",{enumerable:!0,get:function(){return EI.regexpCode}});Object.defineProperty(nn,"Name",{enumerable:!0,get:function(){return EI.Name}});var r5=jS();Object.defineProperty(nn,"Scope",{enumerable:!0,get:function(){return r5.Scope}});Object.defineProperty(nn,"ValueScope",{enumerable:!0,get:function(){return r5.ValueScope}});Object.defineProperty(nn,"ValueScopeName",{enumerable:!0,get:function(){return r5.ValueScopeName}});Object.defineProperty(nn,"varKinds",{enumerable:!0,get:function(){return r5.varKinds}});nn.operators={GT:new vn._Code(">"),GTE:new vn._Code(">="),LT:new vn._Code("<"),LTE:new vn._Code("<="),EQ:new vn._Code("==="),NEQ:new vn._Code("!=="),NOT:new vn._Code("!"),OR:new vn._Code("||"),AND:new vn._Code("&&"),ADD:new vn._Code("+")};var RC=class{optimizeNodes(){return this}optimizeNames(e,A){return this}},qS=class extends RC{constructor(e,A,i){super(),this.varKind=e,this.name=A,this.rhs=i}render({es5:e,_n:A}){let i=e?wc.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+A}optimizeNames(e,A){if(e[this.name.str])return this.rhs&&(this.rhs=XE(this.rhs,e,A)),this}get names(){return this.rhs instanceof vn._CodeOrName?this.rhs.names:{}}},n5=class extends RC{constructor(e,A,i){super(),this.lhs=e,this.rhs=A,this.sideEffects=i}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,A){if(!(this.lhs instanceof vn.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=XE(this.rhs,e,A),this}get names(){let e=this.lhs instanceof vn.Name?{}:cA({},this.lhs.names);return a5(e,this.rhs)}},VS=class extends n5{constructor(e,A,i,n){super(e,i,n),this.op=A}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},WS=class extends RC{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},ZS=class extends RC{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}},XS=class extends RC{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},$S=class extends RC{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,A){return this.code=XE(this.code,e,A),this}get names(){return this.code instanceof vn._CodeOrName?this.code.names:{}}},Q3=class extends RC{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((A,i)=>A+i.render(e),"")}optimizeNodes(){let{nodes:e}=this,A=e.length;for(;A--;){let i=e[A].optimizeNodes();Array.isArray(i)?e.splice(A,1,...i):i?e[A]=i:e.splice(A,1)}return e.length>0?this:void 0}optimizeNames(e,A){let{nodes:i}=this,n=i.length;for(;n--;){let o=i[n];o.optimizeNames(e,A)||(o6A(e,o.names),i.splice(n,1))}return i.length>0?this:void 0}get names(){return this.nodes.reduce((e,A)=>sd(e,A.names),{})}},NC=class extends Q3{render(e){return"{"+e._n+super.render(e)+"}"+e._n}},Ax=class extends Q3{},ex=(()=>{class t extends NC{}return t.kind="else",t})(),i5=(()=>{class t extends NC{constructor(A,i){super(i),this.condition=A}render(A){let i=`if(${this.condition})`+super.render(A);return this.else&&(i+="else "+this.else.render(A)),i}optimizeNodes(){super.optimizeNodes();let A=this.condition;if(A===!0)return this.nodes;let i=this.else;if(i){let n=i.optimizeNodes();i=this.else=Array.isArray(n)?new ex(n):n}if(i)return A===!1?i instanceof t?i:i.nodes:this.nodes.length?this:new t(wV(A),i instanceof t?[i]:i.nodes);if(!(A===!1||!this.nodes.length))return this}optimizeNames(A,i){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(A,i),!!(super.optimizeNames(A,i)||this.else))return this.condition=XE(this.condition,A,i),this}get names(){let A=super.names;return a5(A,this.condition),this.else&&sd(A,this.else.names),A}}return t.kind="if",t})(),s5=(()=>{class t extends NC{}return t.kind="for",t})(),tx=class extends s5{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,A){if(super.optimizeNames(e,A))return this.iteration=XE(this.iteration,e,A),this}get names(){return sd(super.names,this.iteration.names)}},ix=class extends s5{constructor(e,A,i,n){super(),this.varKind=e,this.name=A,this.from=i,this.to=n}render(e){let A=e.es5?wc.varKinds.var:this.varKind,{name:i,from:n,to:o}=this;return`for(${A} ${i}=${n}; ${i}<${o}; ${i}++)`+super.render(e)}get names(){let e=a5(super.names,this.from);return a5(e,this.to)}},o5=class extends s5{constructor(e,A,i,n){super(),this.loop=e,this.varKind=A,this.name=i,this.iterable=n}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,A){if(super.optimizeNames(e,A))return this.iterable=XE(this.iterable,e,A),this}get names(){return sd(super.names,this.iterable.names)}},uV=(()=>{class t extends NC{constructor(A,i,n){super(),this.name=A,this.args=i,this.async=n}render(A){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(A)}}return t.kind="func",t})(),fV=(()=>{class t extends Q3{render(A){return"return "+super.render(A)}}return t.kind="return",t})(),nx=class extends NC{render(e){let A="try"+super.render(e);return this.catch&&(A+=this.catch.render(e)),this.finally&&(A+=this.finally.render(e)),A}optimizeNodes(){var e,A;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(A=this.finally)===null||A===void 0||A.optimizeNodes(),this}optimizeNames(e,A){var i,n;return super.optimizeNames(e,A),(i=this.catch)===null||i===void 0||i.optimizeNames(e,A),(n=this.finally)===null||n===void 0||n.optimizeNames(e,A),this}get names(){let e=super.names;return this.catch&&sd(e,this.catch.names),this.finally&&sd(e,this.finally.names),e}},mV=(()=>{class t extends NC{constructor(A){super(),this.error=A}render(A){return`catch(${this.error})`+super.render(A)}}return t.kind="catch",t})(),pV=(()=>{class t extends NC{render(A){return"finally"+super.render(A)}}return t.kind="finally",t})(),ox=class{constructor(e,A={}){this._values={},this._blockStarts=[],this._constants={},this.opts=Ge(cA({},A),{_n:A.lines?` -`:""}),this._extScope=e,this._scope=new wc.Scope({parent:e}),this._nodes=[new Ax]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,A){let i=this._extScope.value(e,A);return(this._values[i.prefix]||(this._values[i.prefix]=new Set)).add(i),i}getScopeValue(e,A){return this._extScope.getValue(e,A)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,A,i,n){let o=this._scope.toName(A);return i!==void 0&&n&&(this._constants[o.str]=i),this._leafNode(new qS(e,o,i)),o}const(e,A,i){return this._def(wc.varKinds.const,e,A,i)}let(e,A,i){return this._def(wc.varKinds.let,e,A,i)}var(e,A,i){return this._def(wc.varKinds.var,e,A,i)}assign(e,A,i){return this._leafNode(new n5(e,A,i))}add(e,A){return this._leafNode(new VS(e,nn.operators.ADD,A))}code(e){return typeof e=="function"?e():e!==vn.nil&&this._leafNode(new $S(e)),this}object(...e){let A=["{"];for(let[i,n]of e)A.length>1&&A.push(","),A.push(i),(i!==n||this.opts.es5)&&(A.push(":"),(0,vn.addCodeArg)(A,n));return A.push("}"),new vn._Code(A)}if(e,A,i){if(this._blockNode(new i5(e)),A&&i)this.code(A).else().code(i).endIf();else if(A)this.code(A).endIf();else if(i)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new i5(e))}else(){return this._elseNode(new ex)}endIf(){return this._endBlockNode(i5,ex)}_for(e,A){return this._blockNode(e),A&&this.code(A).endFor(),this}for(e,A){return this._for(new tx(e),A)}forRange(e,A,i,n,o=this.opts.es5?wc.varKinds.var:wc.varKinds.let){let a=this._scope.toName(e);return this._for(new ix(o,a,A,i),()=>n(a))}forOf(e,A,i,n=wc.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let a=A instanceof vn.Name?A:this.var("_arr",A);return this.forRange("_i",0,(0,vn._)`${a}.length`,r=>{this.var(o,(0,vn._)`${a}[${r}]`),i(o)})}return this._for(new o5("of",n,o,A),()=>i(o))}forIn(e,A,i,n=this.opts.es5?wc.varKinds.var:wc.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,vn._)`Object.keys(${A})`,i);let o=this._scope.toName(e);return this._for(new o5("in",n,o,A),()=>i(o))}endFor(){return this._endBlockNode(s5)}label(e){return this._leafNode(new WS(e))}break(e){return this._leafNode(new ZS(e))}return(e){let A=new fV;if(this._blockNode(A),this.code(e),A.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(fV)}try(e,A,i){if(!A&&!i)throw new Error('CodeGen: "try" without "catch" and "finally"');let n=new nx;if(this._blockNode(n),this.code(e),A){let o=this.name("e");this._currNode=n.catch=new mV(o),A(o)}return i&&(this._currNode=n.finally=new pV,this.code(i)),this._endBlockNode(mV,pV)}throw(e){return this._leafNode(new XS(e))}block(e,A){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(A),this}endBlock(e){let A=this._blockStarts.pop();if(A===void 0)throw new Error("CodeGen: not in self-balancing block");let i=this._nodes.length-A;if(i<0||e!==void 0&&i!==e)throw new Error(`CodeGen: wrong number of nodes: ${i} vs ${e} expected`);return this._nodes.length=A,this}func(e,A=vn.nil,i,n){return this._blockNode(new uV(e,A,i)),n&&this.code(n).endFunc(),this}endFunc(){return this._endBlockNode(uV)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,A){let i=this._currNode;if(i instanceof e||A&&i instanceof A)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${A?`${e.kind}/${A.kind}`:e.kind}"`)}_elseNode(e){let A=this._currNode;if(!(A instanceof i5))throw new Error('CodeGen: "else" without "if"');return this._currNode=A.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let A=this._nodes;A[A.length-1]=e}};nn.CodeGen=ox;function sd(t,e){for(let A in e)t[A]=(t[A]||0)+(e[A]||0);return t}function a5(t,e){return e instanceof vn._CodeOrName?sd(t,e.names):t}function XE(t,e,A){if(t instanceof vn.Name)return i(t);if(!n(t))return t;return new vn._Code(t._items.reduce((o,a)=>(a instanceof vn.Name&&(a=i(a)),a instanceof vn._Code?o.push(...a._items):o.push(a),o),[]));function i(o){let a=A[o.str];return a===void 0||e[o.str]!==1?o:(delete e[o.str],a)}function n(o){return o instanceof vn._Code&&o._items.some(a=>a instanceof vn.Name&&e[a.str]===1&&A[a.str]!==void 0)}}function o6A(t,e){for(let A in e)t[A]=(t[A]||0)-(e[A]||0)}function wV(t){return typeof t=="boolean"||typeof t=="number"||t===null?!t:(0,vn._)`!${ax(t)}`}nn.not=wV;var a6A=DV(nn.operators.AND);function r6A(...t){return t.reduce(a6A)}nn.and=r6A;var s6A=DV(nn.operators.OR);function g6A(...t){return t.reduce(s6A)}nn.or=g6A;function DV(t){return(e,A)=>e===vn.nil?A:A===vn.nil?e:(0,vn._)`${ax(e)} ${t} ${ax(A)}`}function ax(t){return t instanceof vn.Name?t:(0,vn._)`(${t})`}});var On=qe(sn=>{"use strict";Object.defineProperty(sn,"__esModule",{value:!0});sn.checkStrictMode=sn.getErrorPath=sn.Type=sn.useFunc=sn.setEvaluated=sn.evaluatedPropsToName=sn.mergeEvaluated=sn.eachItem=sn.unescapeJsonPointer=sn.escapeJsonPointer=sn.escapeFragment=sn.unescapeFragment=sn.schemaRefOrVal=sn.schemaHasRulesButRef=sn.schemaHasRules=sn.checkUnknownRules=sn.alwaysValidSchema=sn.toHash=void 0;var Vo=rn(),l6A=E3();function c6A(t){let e={};for(let A of t)e[A]=!0;return e}sn.toHash=c6A;function C6A(t,e){return typeof e=="boolean"?e:Object.keys(e).length===0?!0:(bV(t,e),!MV(e,t.self.RULES.all))}sn.alwaysValidSchema=C6A;function bV(t,e=t.schema){let{opts:A,self:i}=t;if(!A.strictSchema||typeof e=="boolean")return;let n=i.RULES.keywords;for(let o in e)n[o]||xV(t,`unknown keyword: "${o}"`)}sn.checkUnknownRules=bV;function MV(t,e){if(typeof t=="boolean")return!t;for(let A in t)if(e[A])return!0;return!1}sn.schemaHasRules=MV;function I6A(t,e){if(typeof t=="boolean")return!t;for(let A in t)if(A!=="$ref"&&e.all[A])return!0;return!1}sn.schemaHasRulesButRef=I6A;function d6A({topSchemaRef:t,schemaPath:e},A,i,n){if(!n){if(typeof A=="number"||typeof A=="boolean")return A;if(typeof A=="string")return(0,Vo._)`${A}`}return(0,Vo._)`${t}${e}${(0,Vo.getProperty)(i)}`}sn.schemaRefOrVal=d6A;function B6A(t){return kV(decodeURIComponent(t))}sn.unescapeFragment=B6A;function E6A(t){return encodeURIComponent(sx(t))}sn.escapeFragment=E6A;function sx(t){return typeof t=="number"?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}sn.escapeJsonPointer=sx;function kV(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}sn.unescapeJsonPointer=kV;function Q6A(t,e){if(Array.isArray(t))for(let A of t)e(A);else e(t)}sn.eachItem=Q6A;function yV({mergeNames:t,mergeToName:e,mergeValues:A,resultToName:i}){return(n,o,a,r)=>{let s=a===void 0?o:a instanceof Vo.Name?(o instanceof Vo.Name?t(n,o,a):e(n,o,a),a):o instanceof Vo.Name?(e(n,a,o),o):A(o,a);return r===Vo.Name&&!(s instanceof Vo.Name)?i(n,s):s}}sn.mergeEvaluated={props:yV({mergeNames:(t,e,A)=>t.if((0,Vo._)`${A} !== true && ${e} !== undefined`,()=>{t.if((0,Vo._)`${e} === true`,()=>t.assign(A,!0),()=>t.assign(A,(0,Vo._)`${A} || {}`).code((0,Vo._)`Object.assign(${A}, ${e})`))}),mergeToName:(t,e,A)=>t.if((0,Vo._)`${A} !== true`,()=>{e===!0?t.assign(A,!0):(t.assign(A,(0,Vo._)`${A} || {}`),gx(t,A,e))}),mergeValues:(t,e)=>t===!0?!0:cA(cA({},t),e),resultToName:SV}),items:yV({mergeNames:(t,e,A)=>t.if((0,Vo._)`${A} !== true && ${e} !== undefined`,()=>t.assign(A,(0,Vo._)`${e} === true ? true : ${A} > ${e} ? ${A} : ${e}`)),mergeToName:(t,e,A)=>t.if((0,Vo._)`${A} !== true`,()=>t.assign(A,e===!0?!0:(0,Vo._)`${A} > ${e} ? ${A} : ${e}`)),mergeValues:(t,e)=>t===!0?!0:Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})};function SV(t,e){if(e===!0)return t.var("props",!0);let A=t.var("props",(0,Vo._)`{}`);return e!==void 0&&gx(t,A,e),A}sn.evaluatedPropsToName=SV;function gx(t,e,A){Object.keys(A).forEach(i=>t.assign((0,Vo._)`${e}${(0,Vo.getProperty)(i)}`,!0))}sn.setEvaluated=gx;var vV={};function h6A(t,e){return t.scopeValue("func",{ref:e,code:vV[e.code]||(vV[e.code]=new l6A._Code(e.code))})}sn.useFunc=h6A;var rx=(function(t){return t[t.Num=0]="Num",t[t.Str=1]="Str",t})(rx||(sn.Type=rx={}));function u6A(t,e,A){if(t instanceof Vo.Name){let i=e===rx.Num;return A?i?(0,Vo._)`"[" + ${t} + "]"`:(0,Vo._)`"['" + ${t} + "']"`:i?(0,Vo._)`"/" + ${t}`:(0,Vo._)`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return A?(0,Vo.getProperty)(t).toString():"/"+sx(t)}sn.getErrorPath=u6A;function xV(t,e,A=t.opts.strictSchema){if(A){if(e=`strict mode: ${e}`,A===!0)throw new Error(e);t.self.logger.warn(e)}}sn.checkStrictMode=xV});var FC=qe(lx=>{"use strict";Object.defineProperty(lx,"__esModule",{value:!0});var hs=rn(),f6A={data:new hs.Name("data"),valCxt:new hs.Name("valCxt"),instancePath:new hs.Name("instancePath"),parentData:new hs.Name("parentData"),parentDataProperty:new hs.Name("parentDataProperty"),rootData:new hs.Name("rootData"),dynamicAnchors:new hs.Name("dynamicAnchors"),vErrors:new hs.Name("vErrors"),errors:new hs.Name("errors"),this:new hs.Name("this"),self:new hs.Name("self"),scope:new hs.Name("scope"),json:new hs.Name("json"),jsonPos:new hs.Name("jsonPos"),jsonLen:new hs.Name("jsonLen"),jsonPart:new hs.Name("jsonPart")};lx.default=f6A});var h3=qe(us=>{"use strict";Object.defineProperty(us,"__esModule",{value:!0});us.extendErrors=us.resetErrorsCount=us.reportExtraError=us.reportError=us.keyword$DataError=us.keywordError=void 0;var Ln=rn(),g5=On(),Js=FC();us.keywordError={message:({keyword:t})=>(0,Ln.str)`must pass "${t}" keyword validation`};us.keyword$DataError={message:({keyword:t,schemaType:e})=>e?(0,Ln.str)`"${t}" keyword must be ${e} ($data)`:(0,Ln.str)`"${t}" keyword is invalid ($data)`};function m6A(t,e=us.keywordError,A,i){let{it:n}=t,{gen:o,compositeRule:a,allErrors:r}=n,s=FV(t,e,A);i??(a||r)?RV(o,s):NV(n,(0,Ln._)`[${s}]`)}us.reportError=m6A;function p6A(t,e=us.keywordError,A){let{it:i}=t,{gen:n,compositeRule:o,allErrors:a}=i,r=FV(t,e,A);RV(n,r),o||a||NV(i,Js.default.vErrors)}us.reportExtraError=p6A;function w6A(t,e){t.assign(Js.default.errors,e),t.if((0,Ln._)`${Js.default.vErrors} !== null`,()=>t.if(e,()=>t.assign((0,Ln._)`${Js.default.vErrors}.length`,e),()=>t.assign(Js.default.vErrors,null)))}us.resetErrorsCount=w6A;function D6A({gen:t,keyword:e,schemaValue:A,data:i,errsCount:n,it:o}){if(n===void 0)throw new Error("ajv implementation error");let a=t.name("err");t.forRange("i",n,Js.default.errors,r=>{t.const(a,(0,Ln._)`${Js.default.vErrors}[${r}]`),t.if((0,Ln._)`${a}.instancePath === undefined`,()=>t.assign((0,Ln._)`${a}.instancePath`,(0,Ln.strConcat)(Js.default.instancePath,o.errorPath))),t.assign((0,Ln._)`${a}.schemaPath`,(0,Ln.str)`${o.errSchemaPath}/${e}`),o.opts.verbose&&(t.assign((0,Ln._)`${a}.schema`,A),t.assign((0,Ln._)`${a}.data`,i))})}us.extendErrors=D6A;function RV(t,e){let A=t.const("err",e);t.if((0,Ln._)`${Js.default.vErrors} === null`,()=>t.assign(Js.default.vErrors,(0,Ln._)`[${A}]`),(0,Ln._)`${Js.default.vErrors}.push(${A})`),t.code((0,Ln._)`${Js.default.errors}++`)}function NV(t,e){let{gen:A,validateName:i,schemaEnv:n}=t;n.$async?A.throw((0,Ln._)`new ${t.ValidationError}(${e})`):(A.assign((0,Ln._)`${i}.errors`,e),A.return(!1))}var gd={keyword:new Ln.Name("keyword"),schemaPath:new Ln.Name("schemaPath"),params:new Ln.Name("params"),propertyName:new Ln.Name("propertyName"),message:new Ln.Name("message"),schema:new Ln.Name("schema"),parentSchema:new Ln.Name("parentSchema")};function FV(t,e,A){let{createErrors:i}=t.it;return i===!1?(0,Ln._)`{}`:y6A(t,e,A)}function y6A(t,e,A={}){let{gen:i,it:n}=t,o=[v6A(n,A),b6A(t,A)];return M6A(t,e,o),i.object(...o)}function v6A({errorPath:t},{instancePath:e}){let A=e?(0,Ln.str)`${t}${(0,g5.getErrorPath)(e,g5.Type.Str)}`:t;return[Js.default.instancePath,(0,Ln.strConcat)(Js.default.instancePath,A)]}function b6A({keyword:t,it:{errSchemaPath:e}},{schemaPath:A,parentSchema:i}){let n=i?e:(0,Ln.str)`${e}/${t}`;return A&&(n=(0,Ln.str)`${n}${(0,g5.getErrorPath)(A,g5.Type.Str)}`),[gd.schemaPath,n]}function M6A(t,{params:e,message:A},i){let{keyword:n,data:o,schemaValue:a,it:r}=t,{opts:s,propertyName:g,topSchemaRef:l,schemaPath:C}=r;i.push([gd.keyword,n],[gd.params,typeof e=="function"?e(t):e||(0,Ln._)`{}`]),s.messages&&i.push([gd.message,typeof A=="function"?A(t):A]),s.verbose&&i.push([gd.schema,a],[gd.parentSchema,(0,Ln._)`${l}${C}`],[Js.default.data,o]),g&&i.push([gd.propertyName,g])}});var LV=qe($E=>{"use strict";Object.defineProperty($E,"__esModule",{value:!0});$E.boolOrEmptySchema=$E.topBoolOrEmptySchema=void 0;var k6A=h3(),S6A=rn(),x6A=FC(),R6A={message:"boolean schema is false"};function N6A(t){let{gen:e,schema:A,validateName:i}=t;A===!1?_V(t,!1):typeof A=="object"&&A.$async===!0?e.return(x6A.default.data):(e.assign((0,S6A._)`${i}.errors`,null),e.return(!0))}$E.topBoolOrEmptySchema=N6A;function F6A(t,e){let{gen:A,schema:i}=t;i===!1?(A.var(e,!1),_V(t)):A.var(e,!0)}$E.boolOrEmptySchema=F6A;function _V(t,e){let{gen:A,data:i}=t,n={gen:A,keyword:"false schema",data:i,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,k6A.reportError)(n,R6A,void 0,e)}});var cx=qe(AQ=>{"use strict";Object.defineProperty(AQ,"__esModule",{value:!0});AQ.getRules=AQ.isJSONType=void 0;var _6A=["string","number","integer","boolean","null","object","array"],L6A=new Set(_6A);function G6A(t){return typeof t=="string"&&L6A.has(t)}AQ.isJSONType=G6A;function K6A(){let t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:Ge(cA({},t),{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}AQ.getRules=K6A});var Cx=qe(QI=>{"use strict";Object.defineProperty(QI,"__esModule",{value:!0});QI.shouldUseRule=QI.shouldUseGroup=QI.schemaHasRulesForType=void 0;function U6A({schema:t,self:e},A){let i=e.RULES.types[A];return i&&i!==!0&&GV(t,i)}QI.schemaHasRulesForType=U6A;function GV(t,e){return e.rules.some(A=>KV(t,A))}QI.shouldUseGroup=GV;function KV(t,e){var A;return t[e.keyword]!==void 0||((A=e.definition.implements)===null||A===void 0?void 0:A.some(i=>t[i]!==void 0))}QI.shouldUseRule=KV});var u3=qe(fs=>{"use strict";Object.defineProperty(fs,"__esModule",{value:!0});fs.reportTypeError=fs.checkDataTypes=fs.checkDataType=fs.coerceAndCheckDataType=fs.getJSONTypes=fs.getSchemaTypes=fs.DataType=void 0;var J6A=cx(),Y6A=Cx(),T6A=h3(),Ti=rn(),UV=On(),eQ=(function(t){return t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong",t})(eQ||(fs.DataType=eQ={}));function H6A(t){let e=JV(t.type);if(e.includes("null")){if(t.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&t.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');t.nullable===!0&&e.push("null")}return e}fs.getSchemaTypes=H6A;function JV(t){let e=Array.isArray(t)?t:t?[t]:[];if(e.every(J6A.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}fs.getJSONTypes=JV;function z6A(t,e){let{gen:A,data:i,opts:n}=t,o=O6A(e,n.coerceTypes),a=e.length>0&&!(o.length===0&&e.length===1&&(0,Y6A.schemaHasRulesForType)(t,e[0]));if(a){let r=dx(e,i,n.strictNumbers,eQ.Wrong);A.if(r,()=>{o.length?P6A(t,e,o):Bx(t)})}return a}fs.coerceAndCheckDataType=z6A;var YV=new Set(["string","number","integer","boolean","null"]);function O6A(t,e){return e?t.filter(A=>YV.has(A)||e==="array"&&A==="array"):[]}function P6A(t,e,A){let{gen:i,data:n,opts:o}=t,a=i.let("dataType",(0,Ti._)`typeof ${n}`),r=i.let("coerced",(0,Ti._)`undefined`);o.coerceTypes==="array"&&i.if((0,Ti._)`${a} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>i.assign(n,(0,Ti._)`${n}[0]`).assign(a,(0,Ti._)`typeof ${n}`).if(dx(e,n,o.strictNumbers),()=>i.assign(r,n))),i.if((0,Ti._)`${r} !== undefined`);for(let g of A)(YV.has(g)||g==="array"&&o.coerceTypes==="array")&&s(g);i.else(),Bx(t),i.endIf(),i.if((0,Ti._)`${r} !== undefined`,()=>{i.assign(n,r),j6A(t,r)});function s(g){switch(g){case"string":i.elseIf((0,Ti._)`${a} == "number" || ${a} == "boolean"`).assign(r,(0,Ti._)`"" + ${n}`).elseIf((0,Ti._)`${n} === null`).assign(r,(0,Ti._)`""`);return;case"number":i.elseIf((0,Ti._)`${a} == "boolean" || ${n} === null - || (${a} == "string" && ${n} && ${n} == +${n})`).assign(r,(0,Ti._)`+${n}`);return;case"integer":i.elseIf((0,Ti._)`${a} === "boolean" || ${n} === null - || (${a} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(r,(0,Ti._)`+${n}`);return;case"boolean":i.elseIf((0,Ti._)`${n} === "false" || ${n} === 0 || ${n} === null`).assign(r,!1).elseIf((0,Ti._)`${n} === "true" || ${n} === 1`).assign(r,!0);return;case"null":i.elseIf((0,Ti._)`${n} === "" || ${n} === 0 || ${n} === false`),i.assign(r,null);return;case"array":i.elseIf((0,Ti._)`${a} === "string" || ${a} === "number" - || ${a} === "boolean" || ${n} === null`).assign(r,(0,Ti._)`[${n}]`)}}}function j6A({gen:t,parentData:e,parentDataProperty:A},i){t.if((0,Ti._)`${e} !== undefined`,()=>t.assign((0,Ti._)`${e}[${A}]`,i))}function Ix(t,e,A,i=eQ.Correct){let n=i===eQ.Correct?Ti.operators.EQ:Ti.operators.NEQ,o;switch(t){case"null":return(0,Ti._)`${e} ${n} null`;case"array":o=(0,Ti._)`Array.isArray(${e})`;break;case"object":o=(0,Ti._)`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":o=a((0,Ti._)`!(${e} % 1) && !isNaN(${e})`);break;case"number":o=a();break;default:return(0,Ti._)`typeof ${e} ${n} ${t}`}return i===eQ.Correct?o:(0,Ti.not)(o);function a(r=Ti.nil){return(0,Ti.and)((0,Ti._)`typeof ${e} == "number"`,r,A?(0,Ti._)`isFinite(${e})`:Ti.nil)}}fs.checkDataType=Ix;function dx(t,e,A,i){if(t.length===1)return Ix(t[0],e,A,i);let n,o=(0,UV.toHash)(t);if(o.array&&o.object){let a=(0,Ti._)`typeof ${e} != "object"`;n=o.null?a:(0,Ti._)`!${e} || ${a}`,delete o.null,delete o.array,delete o.object}else n=Ti.nil;o.number&&delete o.integer;for(let a in o)n=(0,Ti.and)(n,Ix(a,e,A,i));return n}fs.checkDataTypes=dx;var q6A={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>typeof t=="string"?(0,Ti._)`{type: ${t}}`:(0,Ti._)`{type: ${e}}`};function Bx(t){let e=V6A(t);(0,T6A.reportError)(e,q6A)}fs.reportTypeError=Bx;function V6A(t){let{gen:e,data:A,schema:i}=t,n=(0,UV.schemaRefOrVal)(t,i,"type");return{gen:e,keyword:"type",data:A,schema:i.type,schemaCode:n,schemaValue:n,parentSchema:i,params:{},it:t}}});var HV=qe(l5=>{"use strict";Object.defineProperty(l5,"__esModule",{value:!0});l5.assignDefaults=void 0;var tQ=rn(),W6A=On();function Z6A(t,e){let{properties:A,items:i}=t.schema;if(e==="object"&&A)for(let n in A)TV(t,n,A[n].default);else e==="array"&&Array.isArray(i)&&i.forEach((n,o)=>TV(t,o,n.default))}l5.assignDefaults=Z6A;function TV(t,e,A){let{gen:i,compositeRule:n,data:o,opts:a}=t;if(A===void 0)return;let r=(0,tQ._)`${o}${(0,tQ.getProperty)(e)}`;if(n){(0,W6A.checkStrictMode)(t,`default is ignored for: ${r}`);return}let s=(0,tQ._)`${r} === undefined`;a.useDefaults==="empty"&&(s=(0,tQ._)`${s} || ${r} === null || ${r} === ""`),i.if(s,(0,tQ._)`${r} = ${(0,tQ.stringify)(A)}`)}});var vl=qe(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.validateUnion=Fo.validateArray=Fo.usePattern=Fo.callValidateCode=Fo.schemaProperties=Fo.allSchemaProperties=Fo.noPropertyInData=Fo.propertyInData=Fo.isOwnProperty=Fo.hasPropFunc=Fo.reportMissingProp=Fo.checkMissingProp=Fo.checkReportMissingProp=void 0;var da=rn(),Ex=On(),hI=FC(),X6A=On();function $6A(t,e){let{gen:A,data:i,it:n}=t;A.if(hx(A,i,e,n.opts.ownProperties),()=>{t.setParams({missingProperty:(0,da._)`${e}`},!0),t.error()})}Fo.checkReportMissingProp=$6A;function A8A({gen:t,data:e,it:{opts:A}},i,n){return(0,da.or)(...i.map(o=>(0,da.and)(hx(t,e,o,A.ownProperties),(0,da._)`${n} = ${o}`)))}Fo.checkMissingProp=A8A;function e8A(t,e){t.setParams({missingProperty:e},!0),t.error()}Fo.reportMissingProp=e8A;function zV(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,da._)`Object.prototype.hasOwnProperty`})}Fo.hasPropFunc=zV;function Qx(t,e,A){return(0,da._)`${zV(t)}.call(${e}, ${A})`}Fo.isOwnProperty=Qx;function t8A(t,e,A,i){let n=(0,da._)`${e}${(0,da.getProperty)(A)} !== undefined`;return i?(0,da._)`${n} && ${Qx(t,e,A)}`:n}Fo.propertyInData=t8A;function hx(t,e,A,i){let n=(0,da._)`${e}${(0,da.getProperty)(A)} === undefined`;return i?(0,da.or)(n,(0,da.not)(Qx(t,e,A))):n}Fo.noPropertyInData=hx;function OV(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}Fo.allSchemaProperties=OV;function i8A(t,e){return OV(e).filter(A=>!(0,Ex.alwaysValidSchema)(t,e[A]))}Fo.schemaProperties=i8A;function n8A({schemaCode:t,data:e,it:{gen:A,topSchemaRef:i,schemaPath:n,errorPath:o},it:a},r,s,g){let l=g?(0,da._)`${t}, ${e}, ${i}${n}`:e,C=[[hI.default.instancePath,(0,da.strConcat)(hI.default.instancePath,o)],[hI.default.parentData,a.parentData],[hI.default.parentDataProperty,a.parentDataProperty],[hI.default.rootData,hI.default.rootData]];a.opts.dynamicRef&&C.push([hI.default.dynamicAnchors,hI.default.dynamicAnchors]);let I=(0,da._)`${l}, ${A.object(...C)}`;return s!==da.nil?(0,da._)`${r}.call(${s}, ${I})`:(0,da._)`${r}(${I})`}Fo.callValidateCode=n8A;var o8A=(0,da._)`new RegExp`;function a8A({gen:t,it:{opts:e}},A){let i=e.unicodeRegExp?"u":"",{regExp:n}=e.code,o=n(A,i);return t.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,da._)`${n.code==="new RegExp"?o8A:(0,X6A.useFunc)(t,n)}(${A}, ${i})`})}Fo.usePattern=a8A;function r8A(t){let{gen:e,data:A,keyword:i,it:n}=t,o=e.name("valid");if(n.allErrors){let r=e.let("valid",!0);return a(()=>e.assign(r,!1)),r}return e.var(o,!0),a(()=>e.break()),o;function a(r){let s=e.const("len",(0,da._)`${A}.length`);e.forRange("i",0,s,g=>{t.subschema({keyword:i,dataProp:g,dataPropType:Ex.Type.Num},o),e.if((0,da.not)(o),r)})}}Fo.validateArray=r8A;function s8A(t){let{gen:e,schema:A,keyword:i,it:n}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");if(A.some(s=>(0,Ex.alwaysValidSchema)(n,s))&&!n.opts.unevaluated)return;let a=e.let("valid",!1),r=e.name("_valid");e.block(()=>A.forEach((s,g)=>{let l=t.subschema({keyword:i,schemaProp:g,compositeRule:!0},r);e.assign(a,(0,da._)`${a} || ${r}`),t.mergeValidEvaluated(l,r)||e.if((0,da.not)(a))})),t.result(a,()=>t.reset(),()=>t.error(!0))}Fo.validateUnion=s8A});var qV=qe(k0=>{"use strict";Object.defineProperty(k0,"__esModule",{value:!0});k0.validateKeywordUsage=k0.validSchemaType=k0.funcKeywordCode=k0.macroKeywordCode=void 0;var Ys=rn(),ld=FC(),g8A=vl(),l8A=h3();function c8A(t,e){let{gen:A,keyword:i,schema:n,parentSchema:o,it:a}=t,r=e.macro.call(a.self,n,o,a),s=jV(A,i,r);a.opts.validateSchema!==!1&&a.self.validateSchema(r,!0);let g=A.name("valid");t.subschema({schema:r,schemaPath:Ys.nil,errSchemaPath:`${a.errSchemaPath}/${i}`,topSchemaRef:s,compositeRule:!0},g),t.pass(g,()=>t.error(!0))}k0.macroKeywordCode=c8A;function C8A(t,e){var A;let{gen:i,keyword:n,schema:o,parentSchema:a,$data:r,it:s}=t;d8A(s,e);let g=!r&&e.compile?e.compile.call(s.self,o,a,s):e.validate,l=jV(i,n,g),C=i.let("valid");t.block$data(C,I),t.ok((A=e.valid)!==null&&A!==void 0?A:C);function I(){if(e.errors===!1)E(),e.modifying&&PV(t),Q(()=>t.error());else{let f=e.async?d():B();e.modifying&&PV(t),Q(()=>I8A(t,f))}}function d(){let f=i.let("ruleErrs",null);return i.try(()=>E((0,Ys._)`await `),b=>i.assign(C,!1).if((0,Ys._)`${b} instanceof ${s.ValidationError}`,()=>i.assign(f,(0,Ys._)`${b}.errors`),()=>i.throw(b))),f}function B(){let f=(0,Ys._)`${l}.errors`;return i.assign(f,null),E(Ys.nil),f}function E(f=e.async?(0,Ys._)`await `:Ys.nil){let b=s.opts.passContext?ld.default.this:ld.default.self,S=!("compile"in e&&!r||e.schema===!1);i.assign(C,(0,Ys._)`${f}${(0,g8A.callValidateCode)(t,l,b,S)}`,e.modifying)}function Q(f){var b;i.if((0,Ys.not)((b=e.valid)!==null&&b!==void 0?b:C),f)}}k0.funcKeywordCode=C8A;function PV(t){let{gen:e,data:A,it:i}=t;e.if(i.parentData,()=>e.assign(A,(0,Ys._)`${i.parentData}[${i.parentDataProperty}]`))}function I8A(t,e){let{gen:A}=t;A.if((0,Ys._)`Array.isArray(${e})`,()=>{A.assign(ld.default.vErrors,(0,Ys._)`${ld.default.vErrors} === null ? ${e} : ${ld.default.vErrors}.concat(${e})`).assign(ld.default.errors,(0,Ys._)`${ld.default.vErrors}.length`),(0,l8A.extendErrors)(t)},()=>t.error())}function d8A({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function jV(t,e,A){if(A===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof A=="function"?{ref:A}:{ref:A,code:(0,Ys.stringify)(A)})}function B8A(t,e,A=!1){return!e.length||e.some(i=>i==="array"?Array.isArray(t):i==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==i||A&&typeof t>"u")}k0.validSchemaType=B8A;function E8A({schema:t,opts:e,self:A,errSchemaPath:i},n,o){if(Array.isArray(n.keyword)?!n.keyword.includes(o):n.keyword!==o)throw new Error("ajv implementation error");let a=n.dependencies;if(a?.some(r=>!Object.prototype.hasOwnProperty.call(t,r)))throw new Error(`parent schema must have dependencies of ${o}: ${a.join(",")}`);if(n.validateSchema&&!n.validateSchema(t[o])){let s=`keyword "${o}" value is invalid at path "${i}": `+A.errorsText(n.validateSchema.errors);if(e.validateSchema==="log")A.logger.error(s);else throw new Error(s)}}k0.validateKeywordUsage=E8A});var WV=qe(uI=>{"use strict";Object.defineProperty(uI,"__esModule",{value:!0});uI.extendSubschemaMode=uI.extendSubschemaData=uI.getSubschema=void 0;var S0=rn(),VV=On();function Q8A(t,{keyword:e,schemaProp:A,schema:i,schemaPath:n,errSchemaPath:o,topSchemaRef:a}){if(e!==void 0&&i!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){let r=t.schema[e];return A===void 0?{schema:r,schemaPath:(0,S0._)`${t.schemaPath}${(0,S0.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:r[A],schemaPath:(0,S0._)`${t.schemaPath}${(0,S0.getProperty)(e)}${(0,S0.getProperty)(A)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,VV.escapeFragment)(A)}`}}if(i!==void 0){if(n===void 0||o===void 0||a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:i,schemaPath:n,topSchemaRef:a,errSchemaPath:o}}throw new Error('either "keyword" or "schema" must be passed')}uI.getSubschema=Q8A;function h8A(t,e,{dataProp:A,dataPropType:i,data:n,dataTypes:o,propertyName:a}){if(n!==void 0&&A!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:r}=e;if(A!==void 0){let{errorPath:g,dataPathArr:l,opts:C}=e,I=r.let("data",(0,S0._)`${e.data}${(0,S0.getProperty)(A)}`,!0);s(I),t.errorPath=(0,S0.str)`${g}${(0,VV.getErrorPath)(A,i,C.jsPropertySyntax)}`,t.parentDataProperty=(0,S0._)`${A}`,t.dataPathArr=[...l,t.parentDataProperty]}if(n!==void 0){let g=n instanceof S0.Name?n:r.let("data",n,!0);s(g),a!==void 0&&(t.propertyName=a)}o&&(t.dataTypes=o);function s(g){t.data=g,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,g]}}uI.extendSubschemaData=h8A;function u8A(t,{jtdDiscriminator:e,jtdMetadata:A,compositeRule:i,createErrors:n,allErrors:o}){i!==void 0&&(t.compositeRule=i),n!==void 0&&(t.createErrors=n),o!==void 0&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=A}uI.extendSubschemaMode=u8A});var ux=qe((Q6e,ZV)=>{"use strict";ZV.exports=function t(e,A){if(e===A)return!0;if(e&&A&&typeof e=="object"&&typeof A=="object"){if(e.constructor!==A.constructor)return!1;var i,n,o;if(Array.isArray(e)){if(i=e.length,i!=A.length)return!1;for(n=i;n--!==0;)if(!t(e[n],A[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===A.source&&e.flags===A.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===A.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===A.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(A).length)return!1;for(n=i;n--!==0;)if(!Object.prototype.hasOwnProperty.call(A,o[n]))return!1;for(n=i;n--!==0;){var a=o[n];if(!t(e[a],A[a]))return!1}return!0}return e!==e&&A!==A}});var $V=qe((h6e,XV)=>{"use strict";var fI=XV.exports=function(t,e,A){typeof e=="function"&&(A=e,e={}),A=e.cb||A;var i=typeof A=="function"?A:A.pre||function(){},n=A.post||function(){};c5(e,i,n,t,"",t)};fI.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};fI.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};fI.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};fI.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function c5(t,e,A,i,n,o,a,r,s,g){if(i&&typeof i=="object"&&!Array.isArray(i)){e(i,n,o,a,r,s,g);for(var l in i){var C=i[l];if(Array.isArray(C)){if(l in fI.arrayKeywords)for(var I=0;I{"use strict";Object.defineProperty(Bg,"__esModule",{value:!0});Bg.getSchemaRefs=Bg.resolveUrl=Bg.normalizeId=Bg._getFullPath=Bg.getFullPath=Bg.inlineRef=void 0;var m8A=On(),p8A=ux(),w8A=$V(),D8A=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function y8A(t,e=!0){return typeof t=="boolean"?!0:e===!0?!fx(t):e?AW(t)<=e:!1}Bg.inlineRef=y8A;var v8A=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function fx(t){for(let e in t){if(v8A.has(e))return!0;let A=t[e];if(Array.isArray(A)&&A.some(fx)||typeof A=="object"&&fx(A))return!0}return!1}function AW(t){let e=0;for(let A in t){if(A==="$ref")return 1/0;if(e++,!D8A.has(A)&&(typeof t[A]=="object"&&(0,m8A.eachItem)(t[A],i=>e+=AW(i)),e===1/0))return 1/0}return e}function eW(t,e="",A){A!==!1&&(e=iQ(e));let i=t.parse(e);return tW(t,i)}Bg.getFullPath=eW;function tW(t,e){return t.serialize(e).split("#")[0]+"#"}Bg._getFullPath=tW;var b8A=/#\/?$/;function iQ(t){return t?t.replace(b8A,""):""}Bg.normalizeId=iQ;function M8A(t,e,A){return A=iQ(A),t.resolve(e,A)}Bg.resolveUrl=M8A;var k8A=/^[a-z_][-a-z0-9._]*$/i;function S8A(t,e){if(typeof t=="boolean")return{};let{schemaId:A,uriResolver:i}=this.opts,n=iQ(t[A]||e),o={"":n},a=eW(i,n,!1),r={},s=new Set;return w8A(t,{allKeys:!0},(C,I,d,B)=>{if(B===void 0)return;let E=a+I,Q=o[B];typeof C[A]=="string"&&(Q=f.call(this,C[A])),b.call(this,C.$anchor),b.call(this,C.$dynamicAnchor),o[I]=Q;function f(S){let M=this.opts.uriResolver.resolve;if(S=iQ(Q?M(Q,S):S),s.has(S))throw l(S);s.add(S);let D=this.refs[S];return typeof D=="string"&&(D=this.refs[D]),typeof D=="object"?g(C,D.schema,S):S!==iQ(E)&&(S[0]==="#"?(g(C,r[S],S),r[S]=C):this.refs[S]=E),S}function b(S){if(typeof S=="string"){if(!k8A.test(S))throw new Error(`invalid anchor "${S}"`);f.call(this,`#${S}`)}}}),r;function g(C,I,d){if(I!==void 0&&!p8A(C,I))throw l(d)}function l(C){return new Error(`reference "${C}" resolves to more than one schema`)}}Bg.getSchemaRefs=S8A});var w3=qe(mI=>{"use strict";Object.defineProperty(mI,"__esModule",{value:!0});mI.getData=mI.KeywordCxt=mI.validateFunctionCode=void 0;var rW=LV(),iW=u3(),px=Cx(),C5=u3(),x8A=HV(),p3=qV(),mx=WV(),Nt=rn(),hi=FC(),R8A=f3(),_C=On(),m3=h3();function N8A(t){if(lW(t)&&(cW(t),gW(t))){L8A(t);return}sW(t,()=>(0,rW.topBoolOrEmptySchema)(t))}mI.validateFunctionCode=N8A;function sW({gen:t,validateName:e,schema:A,schemaEnv:i,opts:n},o){n.code.es5?t.func(e,(0,Nt._)`${hi.default.data}, ${hi.default.valCxt}`,i.$async,()=>{t.code((0,Nt._)`"use strict"; ${nW(A,n)}`),_8A(t,n),t.code(o)}):t.func(e,(0,Nt._)`${hi.default.data}, ${F8A(n)}`,i.$async,()=>t.code(nW(A,n)).code(o))}function F8A(t){return(0,Nt._)`{${hi.default.instancePath}="", ${hi.default.parentData}, ${hi.default.parentDataProperty}, ${hi.default.rootData}=${hi.default.data}${t.dynamicRef?(0,Nt._)`, ${hi.default.dynamicAnchors}={}`:Nt.nil}}={}`}function _8A(t,e){t.if(hi.default.valCxt,()=>{t.var(hi.default.instancePath,(0,Nt._)`${hi.default.valCxt}.${hi.default.instancePath}`),t.var(hi.default.parentData,(0,Nt._)`${hi.default.valCxt}.${hi.default.parentData}`),t.var(hi.default.parentDataProperty,(0,Nt._)`${hi.default.valCxt}.${hi.default.parentDataProperty}`),t.var(hi.default.rootData,(0,Nt._)`${hi.default.valCxt}.${hi.default.rootData}`),e.dynamicRef&&t.var(hi.default.dynamicAnchors,(0,Nt._)`${hi.default.valCxt}.${hi.default.dynamicAnchors}`)},()=>{t.var(hi.default.instancePath,(0,Nt._)`""`),t.var(hi.default.parentData,(0,Nt._)`undefined`),t.var(hi.default.parentDataProperty,(0,Nt._)`undefined`),t.var(hi.default.rootData,hi.default.data),e.dynamicRef&&t.var(hi.default.dynamicAnchors,(0,Nt._)`{}`)})}function L8A(t){let{schema:e,opts:A,gen:i}=t;sW(t,()=>{A.$comment&&e.$comment&&IW(t),Y8A(t),i.let(hi.default.vErrors,null),i.let(hi.default.errors,0),A.unevaluated&&G8A(t),CW(t),z8A(t)})}function G8A(t){let{gen:e,validateName:A}=t;t.evaluated=e.const("evaluated",(0,Nt._)`${A}.evaluated`),e.if((0,Nt._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,Nt._)`${t.evaluated}.props`,(0,Nt._)`undefined`)),e.if((0,Nt._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,Nt._)`${t.evaluated}.items`,(0,Nt._)`undefined`))}function nW(t,e){let A=typeof t=="object"&&t[e.schemaId];return A&&(e.code.source||e.code.process)?(0,Nt._)`/*# sourceURL=${A} */`:Nt.nil}function K8A(t,e){if(lW(t)&&(cW(t),gW(t))){U8A(t,e);return}(0,rW.boolOrEmptySchema)(t,e)}function gW({schema:t,self:e}){if(typeof t=="boolean")return!t;for(let A in t)if(e.RULES.all[A])return!0;return!1}function lW(t){return typeof t.schema!="boolean"}function U8A(t,e){let{schema:A,gen:i,opts:n}=t;n.$comment&&A.$comment&&IW(t),T8A(t),H8A(t);let o=i.const("_errs",hi.default.errors);CW(t,o),i.var(e,(0,Nt._)`${o} === ${hi.default.errors}`)}function cW(t){(0,_C.checkUnknownRules)(t),J8A(t)}function CW(t,e){if(t.opts.jtd)return oW(t,[],!1,e);let A=(0,iW.getSchemaTypes)(t.schema),i=(0,iW.coerceAndCheckDataType)(t,A);oW(t,A,!i,e)}function J8A(t){let{schema:e,errSchemaPath:A,opts:i,self:n}=t;e.$ref&&i.ignoreKeywordsWithRef&&(0,_C.schemaHasRulesButRef)(e,n.RULES)&&n.logger.warn(`$ref: keywords ignored in schema at path "${A}"`)}function Y8A(t){let{schema:e,opts:A}=t;e.default!==void 0&&A.useDefaults&&A.strictSchema&&(0,_C.checkStrictMode)(t,"default is ignored in the schema root")}function T8A(t){let e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,R8A.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function H8A(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function IW({gen:t,schemaEnv:e,schema:A,errSchemaPath:i,opts:n}){let o=A.$comment;if(n.$comment===!0)t.code((0,Nt._)`${hi.default.self}.logger.log(${o})`);else if(typeof n.$comment=="function"){let a=(0,Nt.str)`${i}/$comment`,r=t.scopeValue("root",{ref:e.root});t.code((0,Nt._)`${hi.default.self}.opts.$comment(${o}, ${a}, ${r}.schema)`)}}function z8A(t){let{gen:e,schemaEnv:A,validateName:i,ValidationError:n,opts:o}=t;A.$async?e.if((0,Nt._)`${hi.default.errors} === 0`,()=>e.return(hi.default.data),()=>e.throw((0,Nt._)`new ${n}(${hi.default.vErrors})`)):(e.assign((0,Nt._)`${i}.errors`,hi.default.vErrors),o.unevaluated&&O8A(t),e.return((0,Nt._)`${hi.default.errors} === 0`))}function O8A({gen:t,evaluated:e,props:A,items:i}){A instanceof Nt.Name&&t.assign((0,Nt._)`${e}.props`,A),i instanceof Nt.Name&&t.assign((0,Nt._)`${e}.items`,i)}function oW(t,e,A,i){let{gen:n,schema:o,data:a,allErrors:r,opts:s,self:g}=t,{RULES:l}=g;if(o.$ref&&(s.ignoreKeywordsWithRef||!(0,_C.schemaHasRulesButRef)(o,l))){n.block(()=>BW(t,"$ref",l.all.$ref.definition));return}s.jtd||P8A(t,e),n.block(()=>{for(let I of l.rules)C(I);C(l.post)});function C(I){(0,px.shouldUseGroup)(o,I)&&(I.type?(n.if((0,C5.checkDataType)(I.type,a,s.strictNumbers)),aW(t,I),e.length===1&&e[0]===I.type&&A&&(n.else(),(0,C5.reportTypeError)(t)),n.endIf()):aW(t,I),r||n.if((0,Nt._)`${hi.default.errors} === ${i||0}`))}}function aW(t,e){let{gen:A,schema:i,opts:{useDefaults:n}}=t;n&&(0,x8A.assignDefaults)(t,e.type),A.block(()=>{for(let o of e.rules)(0,px.shouldUseRule)(i,o)&&BW(t,o.keyword,o.definition,e.type)})}function P8A(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(j8A(t,e),t.opts.allowUnionTypes||q8A(t,e),V8A(t,t.dataTypes))}function j8A(t,e){if(e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(A=>{dW(t.dataTypes,A)||wx(t,`type "${A}" not allowed by context "${t.dataTypes.join(",")}"`)}),Z8A(t,e)}}function q8A(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&wx(t,"use allowUnionTypes to allow union type keyword")}function V8A(t,e){let A=t.self.RULES.all;for(let i in A){let n=A[i];if(typeof n=="object"&&(0,px.shouldUseRule)(t.schema,n)){let{type:o}=n.definition;o.length&&!o.some(a=>W8A(e,a))&&wx(t,`missing type "${o.join(",")}" for keyword "${i}"`)}}}function W8A(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function dW(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function Z8A(t,e){let A=[];for(let i of t.dataTypes)dW(e,i)?A.push(i):e.includes("integer")&&i==="number"&&A.push("integer");t.dataTypes=A}function wx(t,e){let A=t.schemaEnv.baseId+t.errSchemaPath;e+=` at "${A}" (strictTypes)`,(0,_C.checkStrictMode)(t,e,t.opts.strictTypes)}var I5=class{constructor(e,A,i){if((0,p3.validateKeywordUsage)(e,A,i),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=i,this.data=e.data,this.schema=e.schema[i],this.$data=A.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,_C.schemaRefOrVal)(e,this.schema,i,this.$data),this.schemaType=A.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=A,this.$data)this.schemaCode=e.gen.const("vSchema",EW(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,p3.validSchemaType)(this.schema,A.schemaType,A.allowUndefined))throw new Error(`${i} value must be ${JSON.stringify(A.schemaType)}`);("code"in A?A.trackErrors:A.errors!==!1)&&(this.errsCount=e.gen.const("_errs",hi.default.errors))}result(e,A,i){this.failResult((0,Nt.not)(e),A,i)}failResult(e,A,i){this.gen.if(e),i?i():this.error(),A?(this.gen.else(),A(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,A){this.failResult((0,Nt.not)(e),void 0,A)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:A}=this;this.fail((0,Nt._)`${A} !== undefined && (${(0,Nt.or)(this.invalid$data(),e)})`)}error(e,A,i){if(A){this.setParams(A),this._error(e,i),this.setParams({});return}this._error(e,i)}_error(e,A){(e?m3.reportExtraError:m3.reportError)(this,this.def.error,A)}$dataError(){(0,m3.reportError)(this,this.def.$dataError||m3.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,m3.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,A){A?Object.assign(this.params,e):this.params=e}block$data(e,A,i=Nt.nil){this.gen.block(()=>{this.check$data(e,i),A()})}check$data(e=Nt.nil,A=Nt.nil){if(!this.$data)return;let{gen:i,schemaCode:n,schemaType:o,def:a}=this;i.if((0,Nt.or)((0,Nt._)`${n} === undefined`,A)),e!==Nt.nil&&i.assign(e,!0),(o.length||a.validateSchema)&&(i.elseIf(this.invalid$data()),this.$dataError(),e!==Nt.nil&&i.assign(e,!1)),i.else()}invalid$data(){let{gen:e,schemaCode:A,schemaType:i,def:n,it:o}=this;return(0,Nt.or)(a(),r());function a(){if(i.length){if(!(A instanceof Nt.Name))throw new Error("ajv implementation error");let s=Array.isArray(i)?i:[i];return(0,Nt._)`${(0,C5.checkDataTypes)(s,A,o.opts.strictNumbers,C5.DataType.Wrong)}`}return Nt.nil}function r(){if(n.validateSchema){let s=e.scopeValue("validate$data",{ref:n.validateSchema});return(0,Nt._)`!${s}(${A})`}return Nt.nil}}subschema(e,A){let i=(0,mx.getSubschema)(this.it,e);(0,mx.extendSubschemaData)(i,this.it,e),(0,mx.extendSubschemaMode)(i,e);let n=Ge(cA(cA({},this.it),i),{items:void 0,props:void 0});return K8A(n,A),n}mergeEvaluated(e,A){let{it:i,gen:n}=this;i.opts.unevaluated&&(i.props!==!0&&e.props!==void 0&&(i.props=_C.mergeEvaluated.props(n,e.props,i.props,A)),i.items!==!0&&e.items!==void 0&&(i.items=_C.mergeEvaluated.items(n,e.items,i.items,A)))}mergeValidEvaluated(e,A){let{it:i,gen:n}=this;if(i.opts.unevaluated&&(i.props!==!0||i.items!==!0))return n.if(A,()=>this.mergeEvaluated(e,Nt.Name)),!0}};mI.KeywordCxt=I5;function BW(t,e,A,i){let n=new I5(t,A,e);"code"in A?A.code(n,i):n.$data&&A.validate?(0,p3.funcKeywordCode)(n,A):"macro"in A?(0,p3.macroKeywordCode)(n,A):(A.compile||A.validate)&&(0,p3.funcKeywordCode)(n,A)}var X8A=/^\/(?:[^~]|~0|~1)*$/,$8A=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function EW(t,{dataLevel:e,dataNames:A,dataPathArr:i}){let n,o;if(t==="")return hi.default.rootData;if(t[0]==="/"){if(!X8A.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);n=t,o=hi.default.rootData}else{let g=$8A.exec(t);if(!g)throw new Error(`Invalid JSON-pointer: ${t}`);let l=+g[1];if(n=g[2],n==="#"){if(l>=e)throw new Error(s("property/index",l));return i[e-l]}if(l>e)throw new Error(s("data",l));if(o=A[e-l],!n)return o}let a=o,r=n.split("/");for(let g of r)g&&(o=(0,Nt._)`${o}${(0,Nt.getProperty)((0,_C.unescapeJsonPointer)(g))}`,a=(0,Nt._)`${a} && ${o}`);return a;function s(g,l){return`Cannot access ${g} ${l} levels up, current level is ${e}`}}mI.getData=EW});var d5=qe(yx=>{"use strict";Object.defineProperty(yx,"__esModule",{value:!0});var Dx=class extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}};yx.default=Dx});var D3=qe(Mx=>{"use strict";Object.defineProperty(Mx,"__esModule",{value:!0});var vx=f3(),bx=class extends Error{constructor(e,A,i,n){super(n||`can't resolve reference ${i} from id ${A}`),this.missingRef=(0,vx.resolveUrl)(e,A,i),this.missingSchema=(0,vx.normalizeId)((0,vx.getFullPath)(e,this.missingRef))}};Mx.default=bx});var E5=qe(bl=>{"use strict";Object.defineProperty(bl,"__esModule",{value:!0});bl.resolveSchema=bl.getCompilingSchema=bl.resolveRef=bl.compileSchema=bl.SchemaEnv=void 0;var Dc=rn(),AwA=d5(),cd=FC(),yc=f3(),QW=On(),ewA=w3(),nQ=class{constructor(e){var A;this.refs={},this.dynamicAnchors={};let i;typeof e.schema=="object"&&(i=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(A=e.baseId)!==null&&A!==void 0?A:(0,yc.normalizeId)(i?.[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=i?.$async,this.refs={}}};bl.SchemaEnv=nQ;function Sx(t){let e=hW.call(this,t);if(e)return e;let A=(0,yc.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:i,lines:n}=this.opts.code,{ownProperties:o}=this.opts,a=new Dc.CodeGen(this.scope,{es5:i,lines:n,ownProperties:o}),r;t.$async&&(r=a.scopeValue("Error",{ref:AwA.default,code:(0,Dc._)`require("ajv/dist/runtime/validation_error").default`}));let s=a.scopeName("validate");t.validateName=s;let g={gen:a,allErrors:this.opts.allErrors,data:cd.default.data,parentData:cd.default.parentData,parentDataProperty:cd.default.parentDataProperty,dataNames:[cd.default.data],dataPathArr:[Dc.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,Dc.stringify)(t.schema)}:{ref:t.schema}),validateName:s,ValidationError:r,schema:t.schema,schemaEnv:t,rootId:A,baseId:t.baseId||A,schemaPath:Dc.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Dc._)`""`,opts:this.opts,self:this},l;try{this._compilations.add(t),(0,ewA.validateFunctionCode)(g),a.optimize(this.opts.code.optimize);let C=a.toString();l=`${a.scopeRefs(cd.default.scope)}return ${C}`,this.opts.code.process&&(l=this.opts.code.process(l,t));let d=new Function(`${cd.default.self}`,`${cd.default.scope}`,l)(this,this.scope.get());if(this.scope.value(s,{ref:d}),d.errors=null,d.schema=t.schema,d.schemaEnv=t,t.$async&&(d.$async=!0),this.opts.code.source===!0&&(d.source={validateName:s,validateCode:C,scopeValues:a._values}),this.opts.unevaluated){let{props:B,items:E}=g;d.evaluated={props:B instanceof Dc.Name?void 0:B,items:E instanceof Dc.Name?void 0:E,dynamicProps:B instanceof Dc.Name,dynamicItems:E instanceof Dc.Name},d.source&&(d.source.evaluated=(0,Dc.stringify)(d.evaluated))}return t.validate=d,t}catch(C){throw delete t.validate,delete t.validateName,l&&this.logger.error("Error compiling schema, function code:",l),C}finally{this._compilations.delete(t)}}bl.compileSchema=Sx;function twA(t,e,A){var i;A=(0,yc.resolveUrl)(this.opts.uriResolver,e,A);let n=t.refs[A];if(n)return n;let o=owA.call(this,t,A);if(o===void 0){let a=(i=t.localRefs)===null||i===void 0?void 0:i[A],{schemaId:r}=this.opts;a&&(o=new nQ({schema:a,schemaId:r,root:t,baseId:e}))}if(o!==void 0)return t.refs[A]=iwA.call(this,o)}bl.resolveRef=twA;function iwA(t){return(0,yc.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:Sx.call(this,t)}function hW(t){for(let e of this._compilations)if(nwA(e,t))return e}bl.getCompilingSchema=hW;function nwA(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function owA(t,e){let A;for(;typeof(A=this.refs[e])=="string";)e=A;return A||this.schemas[e]||B5.call(this,t,e)}function B5(t,e){let A=this.opts.uriResolver.parse(e),i=(0,yc._getFullPath)(this.opts.uriResolver,A),n=(0,yc.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&i===n)return kx.call(this,A,t);let o=(0,yc.normalizeId)(i),a=this.refs[o]||this.schemas[o];if(typeof a=="string"){let r=B5.call(this,t,a);return typeof r?.schema!="object"?void 0:kx.call(this,A,r)}if(typeof a?.schema=="object"){if(a.validate||Sx.call(this,a),o===(0,yc.normalizeId)(e)){let{schema:r}=a,{schemaId:s}=this.opts,g=r[s];return g&&(n=(0,yc.resolveUrl)(this.opts.uriResolver,n,g)),new nQ({schema:r,schemaId:s,root:t,baseId:n})}return kx.call(this,A,a)}}bl.resolveSchema=B5;var awA=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function kx(t,{baseId:e,schema:A,root:i}){var n;if(((n=t.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let r of t.fragment.slice(1).split("/")){if(typeof A=="boolean")return;let s=A[(0,QW.unescapeFragment)(r)];if(s===void 0)return;A=s;let g=typeof A=="object"&&A[this.opts.schemaId];!awA.has(r)&&g&&(e=(0,yc.resolveUrl)(this.opts.uriResolver,e,g))}let o;if(typeof A!="boolean"&&A.$ref&&!(0,QW.schemaHasRulesButRef)(A,this.RULES)){let r=(0,yc.resolveUrl)(this.opts.uriResolver,e,A.$ref);o=B5.call(this,i,r)}let{schemaId:a}=this.opts;if(o=o||new nQ({schema:A,schemaId:a,root:i,baseId:e}),o.schema!==o.root.schema)return o}});var uW=qe((y6e,rwA)=>{rwA.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Rx=qe((v6e,wW)=>{"use strict";var swA=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),mW=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function xx(t){let e="",A=0,i=0;for(i=0;i=48&&A<=57||A>=65&&A<=70||A>=97&&A<=102))return"";e+=t[i];break}for(i+=1;i=48&&A<=57||A>=65&&A<=70||A>=97&&A<=102))return"";e+=t[i]}return e}var gwA=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function fW(t){return t.length=0,!0}function lwA(t,e,A){if(t.length){let i=xx(t);if(i!=="")e.push(i);else return A.error=!0,!1;t.length=0}return!0}function cwA(t){let e=0,A={error:!1,address:"",zone:""},i=[],n=[],o=!1,a=!1,r=lwA;for(let s=0;s7){A.error=!0;break}s>0&&t[s-1]===":"&&(o=!0),i.push(":");continue}else if(g==="%"){if(!r(n,i,A))break;r=fW}else{n.push(g);continue}}return n.length&&(r===fW?A.zone=n.join(""):a?i.push(n.join("")):i.push(xx(n))),A.address=i.join(""),A}function pW(t){if(CwA(t,":")<2)return{host:t,isIPV6:!1};let e=cwA(t);if(e.error)return{host:t,isIPV6:!1};{let A=e.address,i=e.address;return e.zone&&(A+="%"+e.zone,i+="%25"+e.zone),{host:A,isIPV6:!0,escapedHost:i}}}function CwA(t,e){let A=0;for(let i=0;i{"use strict";var{isUUID:EwA}=Rx(),QwA=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,hwA=["http","https","ws","wss","urn","urn:uuid"];function uwA(t){return hwA.indexOf(t)!==-1}function Nx(t){return t.secure===!0?!0:t.secure===!1?!1:t.scheme?t.scheme.length===3&&(t.scheme[0]==="w"||t.scheme[0]==="W")&&(t.scheme[1]==="s"||t.scheme[1]==="S")&&(t.scheme[2]==="s"||t.scheme[2]==="S"):!1}function DW(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function yW(t){let e=String(t.scheme).toLowerCase()==="https";return(t.port===(e?443:80)||t.port==="")&&(t.port=void 0),t.path||(t.path="/"),t}function fwA(t){return t.secure=Nx(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t}function mwA(t){if((t.port===(Nx(t)?443:80)||t.port==="")&&(t.port=void 0),typeof t.secure=="boolean"&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){let[e,A]=t.resourceName.split("?");t.path=e&&e!=="/"?e:void 0,t.query=A,t.resourceName=void 0}return t.fragment=void 0,t}function pwA(t,e){if(!t.path)return t.error="URN can not be parsed",t;let A=t.path.match(QwA);if(A){let i=e.scheme||t.scheme||"urn";t.nid=A[1].toLowerCase(),t.nss=A[2];let n=`${i}:${e.nid||t.nid}`,o=Fx(n);t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t}function wwA(t,e){if(t.nid===void 0)throw new Error("URN without nid cannot be serialized");let A=e.scheme||t.scheme||"urn",i=t.nid.toLowerCase(),n=`${A}:${e.nid||i}`,o=Fx(n);o&&(t=o.serialize(t,e));let a=t,r=t.nss;return a.path=`${i||e.nid}:${r}`,e.skipEscape=!0,a}function DwA(t,e){let A=t;return A.uuid=A.nss,A.nss=void 0,!e.tolerant&&(!A.uuid||!EwA(A.uuid))&&(A.error=A.error||"UUID is not valid."),A}function ywA(t){let e=t;return e.nss=(t.uuid||"").toLowerCase(),e}var vW={scheme:"http",domainHost:!0,parse:DW,serialize:yW},vwA={scheme:"https",domainHost:vW.domainHost,parse:DW,serialize:yW},Q5={scheme:"ws",domainHost:!0,parse:fwA,serialize:mwA},bwA={scheme:"wss",domainHost:Q5.domainHost,parse:Q5.parse,serialize:Q5.serialize},MwA={scheme:"urn",parse:pwA,serialize:wwA,skipNormalize:!0},kwA={scheme:"urn:uuid",parse:DwA,serialize:ywA,skipNormalize:!0},h5={http:vW,https:vwA,ws:Q5,wss:bwA,urn:MwA,"urn:uuid":kwA};Object.setPrototypeOf(h5,null);function Fx(t){return t&&(h5[t]||h5[t.toLowerCase()])||void 0}bW.exports={wsIsSecure:Nx,SCHEMES:h5,isValidSchemeName:uwA,getSchemeHandler:Fx}});var xW=qe((M6e,f5)=>{"use strict";var{normalizeIPv6:SwA,removeDotSegments:y3,recomposeAuthority:xwA,normalizeComponentEncoding:u5,isIPv4:RwA,nonSimpleDomain:NwA}=Rx(),{SCHEMES:FwA,getSchemeHandler:kW}=MW();function _wA(t,e){return typeof t=="string"?t=x0(LC(t,e),e):typeof t=="object"&&(t=LC(x0(t,e),e)),t}function LwA(t,e,A){let i=A?Object.assign({scheme:"null"},A):{scheme:"null"},n=SW(LC(t,i),LC(e,i),i,!0);return i.skipEscape=!0,x0(n,i)}function SW(t,e,A,i){let n={};return i||(t=LC(x0(t,A),A),e=LC(x0(e,A),A)),A=A||{},!A.tolerant&&e.scheme?(n.scheme=e.scheme,n.userinfo=e.userinfo,n.host=e.host,n.port=e.port,n.path=y3(e.path||""),n.query=e.query):(e.userinfo!==void 0||e.host!==void 0||e.port!==void 0?(n.userinfo=e.userinfo,n.host=e.host,n.port=e.port,n.path=y3(e.path||""),n.query=e.query):(e.path?(e.path[0]==="/"?n.path=y3(e.path):((t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)&&!t.path?n.path="/"+e.path:t.path?n.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:n.path=e.path,n.path=y3(n.path)),n.query=e.query):(n.path=t.path,e.query!==void 0?n.query=e.query:n.query=t.query),n.userinfo=t.userinfo,n.host=t.host,n.port=t.port),n.scheme=t.scheme),n.fragment=e.fragment,n}function GwA(t,e,A){return typeof t=="string"?(t=unescape(t),t=x0(u5(LC(t,A),!0),Ge(cA({},A),{skipEscape:!0}))):typeof t=="object"&&(t=x0(u5(t,!0),Ge(cA({},A),{skipEscape:!0}))),typeof e=="string"?(e=unescape(e),e=x0(u5(LC(e,A),!0),Ge(cA({},A),{skipEscape:!0}))):typeof e=="object"&&(e=x0(u5(e,!0),Ge(cA({},A),{skipEscape:!0}))),t.toLowerCase()===e.toLowerCase()}function x0(t,e){let A={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},i=Object.assign({},e),n=[],o=kW(i.scheme||A.scheme);o&&o.serialize&&o.serialize(A,i),A.path!==void 0&&(i.skipEscape?A.path=unescape(A.path):(A.path=escape(A.path),A.scheme!==void 0&&(A.path=A.path.split("%3A").join(":")))),i.reference!=="suffix"&&A.scheme&&n.push(A.scheme,":");let a=xwA(A);if(a!==void 0&&(i.reference!=="suffix"&&n.push("//"),n.push(a),A.path&&A.path[0]!=="/"&&n.push("/")),A.path!==void 0){let r=A.path;!i.absolutePath&&(!o||!o.absolutePath)&&(r=y3(r)),a===void 0&&r[0]==="/"&&r[1]==="/"&&(r="/%2F"+r.slice(2)),n.push(r)}return A.query!==void 0&&n.push("?",A.query),A.fragment!==void 0&&n.push("#",A.fragment),n.join("")}var KwA=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function LC(t,e){let A=Object.assign({},e),i={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},n=!1;A.reference==="suffix"&&(A.scheme?t=A.scheme+":"+t:t="//"+t);let o=t.match(KwA);if(o){if(i.scheme=o[1],i.userinfo=o[3],i.host=o[4],i.port=parseInt(o[5],10),i.path=o[6]||"",i.query=o[7],i.fragment=o[8],isNaN(i.port)&&(i.port=o[5]),i.host)if(RwA(i.host)===!1){let s=SwA(i.host);i.host=s.host.toLowerCase(),n=s.isIPV6}else n=!0;i.scheme===void 0&&i.userinfo===void 0&&i.host===void 0&&i.port===void 0&&i.query===void 0&&!i.path?i.reference="same-document":i.scheme===void 0?i.reference="relative":i.fragment===void 0?i.reference="absolute":i.reference="uri",A.reference&&A.reference!=="suffix"&&A.reference!==i.reference&&(i.error=i.error||"URI is not a "+A.reference+" reference.");let a=kW(A.scheme||i.scheme);if(!A.unicodeSupport&&(!a||!a.unicodeSupport)&&i.host&&(A.domainHost||a&&a.domainHost)&&n===!1&&NwA(i.host))try{i.host=URL.domainToASCII(i.host.toLowerCase())}catch(r){i.error=i.error||"Host's domain name can not be converted to ASCII: "+r}(!a||a&&!a.skipNormalize)&&(t.indexOf("%")!==-1&&(i.scheme!==void 0&&(i.scheme=unescape(i.scheme)),i.host!==void 0&&(i.host=unescape(i.host))),i.path&&(i.path=escape(unescape(i.path))),i.fragment&&(i.fragment=encodeURI(decodeURIComponent(i.fragment)))),a&&a.parse&&a.parse(i,A)}else i.error=i.error||"URI can not be parsed.";return i}var _x={SCHEMES:FwA,normalize:_wA,resolve:LwA,resolveComponent:SW,equal:GwA,serialize:x0,parse:LC};f5.exports=_x;f5.exports.default=_x;f5.exports.fastUri=_x});var NW=qe(Lx=>{"use strict";Object.defineProperty(Lx,"__esModule",{value:!0});var RW=xW();RW.code='require("ajv/dist/runtime/uri").default';Lx.default=RW});var YW=qe(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.CodeGen=Pr.Name=Pr.nil=Pr.stringify=Pr.str=Pr._=Pr.KeywordCxt=void 0;var UwA=w3();Object.defineProperty(Pr,"KeywordCxt",{enumerable:!0,get:function(){return UwA.KeywordCxt}});var oQ=rn();Object.defineProperty(Pr,"_",{enumerable:!0,get:function(){return oQ._}});Object.defineProperty(Pr,"str",{enumerable:!0,get:function(){return oQ.str}});Object.defineProperty(Pr,"stringify",{enumerable:!0,get:function(){return oQ.stringify}});Object.defineProperty(Pr,"nil",{enumerable:!0,get:function(){return oQ.nil}});Object.defineProperty(Pr,"Name",{enumerable:!0,get:function(){return oQ.Name}});Object.defineProperty(Pr,"CodeGen",{enumerable:!0,get:function(){return oQ.CodeGen}});var JwA=d5(),KW=D3(),YwA=cx(),v3=E5(),TwA=rn(),b3=f3(),m5=u3(),Kx=On(),FW=uW(),HwA=NW(),UW=(t,e)=>new RegExp(t,e);UW.code="new RegExp";var zwA=["removeAdditional","useDefaults","coerceTypes"],OwA=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),PwA={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},jwA={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},_W=200;function qwA(t){var e,A,i,n,o,a,r,s,g,l,C,I,d,B,E,Q,f,b,S,M,D,F,_,U,J;let j=t.strict,AA=(e=t.code)===null||e===void 0?void 0:e.optimize,O=AA===!0||AA===void 0?1:AA||0,DA=(i=(A=t.code)===null||A===void 0?void 0:A.regExp)!==null&&i!==void 0?i:UW,P=(n=t.uriResolver)!==null&&n!==void 0?n:HwA.default;return{strictSchema:(a=(o=t.strictSchema)!==null&&o!==void 0?o:j)!==null&&a!==void 0?a:!0,strictNumbers:(s=(r=t.strictNumbers)!==null&&r!==void 0?r:j)!==null&&s!==void 0?s:!0,strictTypes:(l=(g=t.strictTypes)!==null&&g!==void 0?g:j)!==null&&l!==void 0?l:"log",strictTuples:(I=(C=t.strictTuples)!==null&&C!==void 0?C:j)!==null&&I!==void 0?I:"log",strictRequired:(B=(d=t.strictRequired)!==null&&d!==void 0?d:j)!==null&&B!==void 0?B:!1,code:t.code?Ge(cA({},t.code),{optimize:O,regExp:DA}):{optimize:O,regExp:DA},loopRequired:(E=t.loopRequired)!==null&&E!==void 0?E:_W,loopEnum:(Q=t.loopEnum)!==null&&Q!==void 0?Q:_W,meta:(f=t.meta)!==null&&f!==void 0?f:!0,messages:(b=t.messages)!==null&&b!==void 0?b:!0,inlineRefs:(S=t.inlineRefs)!==null&&S!==void 0?S:!0,schemaId:(M=t.schemaId)!==null&&M!==void 0?M:"$id",addUsedSchema:(D=t.addUsedSchema)!==null&&D!==void 0?D:!0,validateSchema:(F=t.validateSchema)!==null&&F!==void 0?F:!0,validateFormats:(_=t.validateFormats)!==null&&_!==void 0?_:!0,unicodeRegExp:(U=t.unicodeRegExp)!==null&&U!==void 0?U:!0,int32range:(J=t.int32range)!==null&&J!==void 0?J:!0,uriResolver:P}}var M3=class{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts=cA(cA({},e),qwA(e));let{es5:A,lines:i}=this.opts.code;this.scope=new TwA.ValueScope({scope:{},prefixes:OwA,es5:A,lines:i}),this.logger=A5A(e.logger);let n=e.validateFormats;e.validateFormats=!1,this.RULES=(0,YwA.getRules)(),LW.call(this,PwA,e,"NOT SUPPORTED"),LW.call(this,jwA,e,"DEPRECATED","warn"),this._metaOpts=XwA.call(this),e.formats&&WwA.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&ZwA.call(this,e.keywords),typeof e.meta=="object"&&this.addMetaSchema(e.meta),VwA.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:A,schemaId:i}=this.opts,n=FW;i==="id"&&(n=cA({},FW),n.id=n.$id,delete n.$id),A&&e&&this.addMetaSchema(n,n[i],!1)}defaultMeta(){let{meta:e,schemaId:A}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[A]||e:void 0}validate(e,A){let i;if(typeof e=="string"){if(i=this.getSchema(e),!i)throw new Error(`no schema with key or ref "${e}"`)}else i=this.compile(e);let n=i(A);return"$async"in i||(this.errors=i.errors),n}compile(e,A){let i=this._addSchema(e,A);return i.validate||this._compileSchemaEnv(i)}compileAsync(e,A){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:i}=this.opts;return n.call(this,e,A);function n(l,C){return nt(this,null,function*(){yield o.call(this,l.$schema);let I=this._addSchema(l,C);return I.validate||a.call(this,I)})}function o(l){return nt(this,null,function*(){l&&!this.getSchema(l)&&(yield n.call(this,{$ref:l},!0))})}function a(l){return nt(this,null,function*(){try{return this._compileSchemaEnv(l)}catch(C){if(!(C instanceof KW.default))throw C;return r.call(this,C),yield s.call(this,C.missingSchema),a.call(this,l)}})}function r({missingSchema:l,missingRef:C}){if(this.refs[l])throw new Error(`AnySchema ${l} is loaded but ${C} cannot be resolved`)}function s(l){return nt(this,null,function*(){let C=yield g.call(this,l);this.refs[l]||(yield o.call(this,C.$schema)),this.refs[l]||this.addSchema(C,l,A)})}function g(l){return nt(this,null,function*(){let C=this._loading[l];if(C)return C;try{return yield this._loading[l]=i(l)}finally{delete this._loading[l]}})}}addSchema(e,A,i,n=this.opts.validateSchema){if(Array.isArray(e)){for(let a of e)this.addSchema(a,void 0,i,n);return this}let o;if(typeof e=="object"){let{schemaId:a}=this.opts;if(o=e[a],o!==void 0&&typeof o!="string")throw new Error(`schema ${a} must be string`)}return A=(0,b3.normalizeId)(A||o),this._checkUnique(A),this.schemas[A]=this._addSchema(e,i,A,n,!0),this}addMetaSchema(e,A,i=this.opts.validateSchema){return this.addSchema(e,A,!0,i),this}validateSchema(e,A){if(typeof e=="boolean")return!0;let i;if(i=e.$schema,i!==void 0&&typeof i!="string")throw new Error("$schema must be a string");if(i=i||this.opts.defaultMeta||this.defaultMeta(),!i)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let n=this.validate(i,e);if(!n&&A){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw new Error(o)}return n}getSchema(e){let A;for(;typeof(A=GW.call(this,e))=="string";)e=A;if(A===void 0){let{schemaId:i}=this.opts,n=new v3.SchemaEnv({schema:{},schemaId:i});if(A=v3.resolveSchema.call(this,n,e),!A)return;this.refs[e]=A}return A.validate||this._compileSchemaEnv(A)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let A=GW.call(this,e);return typeof A=="object"&&this._cache.delete(A.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{let A=e;this._cache.delete(A);let i=e[this.opts.schemaId];return i&&(i=(0,b3.normalizeId)(i),delete this.schemas[i],delete this.refs[i]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let A of e)this.addKeyword(A);return this}addKeyword(e,A){let i;if(typeof e=="string")i=e,typeof A=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),A.keyword=i);else if(typeof e=="object"&&A===void 0){if(A=e,i=A.keyword,Array.isArray(i)&&!i.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(t5A.call(this,i,A),!A)return(0,Kx.eachItem)(i,o=>Gx.call(this,o)),this;n5A.call(this,A);let n=Ge(cA({},A),{type:(0,m5.getJSONTypes)(A.type),schemaType:(0,m5.getJSONTypes)(A.schemaType)});return(0,Kx.eachItem)(i,n.type.length===0?o=>Gx.call(this,o,n):o=>n.type.forEach(a=>Gx.call(this,o,n,a))),this}getKeyword(e){let A=this.RULES.all[e];return typeof A=="object"?A.definition:!!A}removeKeyword(e){let{RULES:A}=this;delete A.keywords[e],delete A.all[e];for(let i of A.rules){let n=i.rules.findIndex(o=>o.keyword===e);n>=0&&i.rules.splice(n,1)}return this}addFormat(e,A){return typeof A=="string"&&(A=new RegExp(A)),this.formats[e]=A,this}errorsText(e=this.errors,{separator:A=", ",dataVar:i="data"}={}){return!e||e.length===0?"No errors":e.map(n=>`${i}${n.instancePath} ${n.message}`).reduce((n,o)=>n+A+o)}$dataMetaSchema(e,A){let i=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let n of A){let o=n.split("/").slice(1),a=e;for(let r of o)a=a[r];for(let r in i){let s=i[r];if(typeof s!="object")continue;let{$data:g}=s.definition,l=a[r];g&&l&&(a[r]=JW(l))}}return e}_removeAllSchemas(e,A){for(let i in e){let n=e[i];(!A||A.test(i))&&(typeof n=="string"?delete e[i]:n&&!n.meta&&(this._cache.delete(n.schema),delete e[i]))}}_addSchema(e,A,i,n=this.opts.validateSchema,o=this.opts.addUsedSchema){let a,{schemaId:r}=this.opts;if(typeof e=="object")a=e[r];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof e!="boolean")throw new Error("schema must be object or boolean")}let s=this._cache.get(e);if(s!==void 0)return s;i=(0,b3.normalizeId)(a||i);let g=b3.getSchemaRefs.call(this,e,i);return s=new v3.SchemaEnv({schema:e,schemaId:r,meta:A,baseId:i,localRefs:g}),this._cache.set(s.schema,s),o&&!i.startsWith("#")&&(i&&this._checkUnique(i),this.refs[i]=s),n&&this.validateSchema(e,!0),s}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):v3.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let A=this.opts;this.opts=this._metaOpts;try{v3.compileSchema.call(this,e)}finally{this.opts=A}}};M3.ValidationError=JwA.default;M3.MissingRefError=KW.default;Pr.default=M3;function LW(t,e,A,i="error"){for(let n in t){let o=n;o in e&&this.logger[i](`${A}: option ${n}. ${t[o]}`)}}function GW(t){return t=(0,b3.normalizeId)(t),this.schemas[t]||this.refs[t]}function VwA(){let t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(let e in t)this.addSchema(t[e],e)}function WwA(){for(let t in this.opts.formats){let e=this.opts.formats[t];e&&this.addFormat(t,e)}}function ZwA(t){if(Array.isArray(t)){this.addVocabulary(t);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let e in t){let A=t[e];A.keyword||(A.keyword=e),this.addKeyword(A)}}function XwA(){let t=cA({},this.opts);for(let e of zwA)delete t[e];return t}var $wA={log(){},warn(){},error(){}};function A5A(t){if(t===!1)return $wA;if(t===void 0)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}var e5A=/^[a-z_$][a-z0-9_$:-]*$/i;function t5A(t,e){let{RULES:A}=this;if((0,Kx.eachItem)(t,i=>{if(A.keywords[i])throw new Error(`Keyword ${i} is already defined`);if(!e5A.test(i))throw new Error(`Keyword ${i} has invalid name`)}),!!e&&e.$data&&!("code"in e||"validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function Gx(t,e,A){var i;let n=e?.post;if(A&&n)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:o}=this,a=n?o.post:o.rules.find(({type:s})=>s===A);if(a||(a={type:A,rules:[]},o.rules.push(a)),o.keywords[t]=!0,!e)return;let r={keyword:t,definition:Ge(cA({},e),{type:(0,m5.getJSONTypes)(e.type),schemaType:(0,m5.getJSONTypes)(e.schemaType)})};e.before?i5A.call(this,a,r,e.before):a.rules.push(r),o.all[t]=r,(i=e.implements)===null||i===void 0||i.forEach(s=>this.addKeyword(s))}function i5A(t,e,A){let i=t.rules.findIndex(n=>n.keyword===A);i>=0?t.rules.splice(i,0,e):(t.rules.push(e),this.logger.warn(`rule ${A} is not defined`))}function n5A(t){let{metaSchema:e}=t;e!==void 0&&(t.$data&&this.opts.$data&&(e=JW(e)),t.validateSchema=this.compile(e,!0))}var o5A={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function JW(t){return{anyOf:[t,o5A]}}});var TW=qe(Ux=>{"use strict";Object.defineProperty(Ux,"__esModule",{value:!0});var a5A={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Ux.default=a5A});var PW=qe(Cd=>{"use strict";Object.defineProperty(Cd,"__esModule",{value:!0});Cd.callRef=Cd.getValidate=void 0;var r5A=D3(),HW=vl(),Eg=rn(),aQ=FC(),zW=E5(),p5=On(),s5A={keyword:"$ref",schemaType:"string",code(t){let{gen:e,schema:A,it:i}=t,{baseId:n,schemaEnv:o,validateName:a,opts:r,self:s}=i,{root:g}=o;if((A==="#"||A==="#/")&&n===g.baseId)return C();let l=zW.resolveRef.call(s,g,n,A);if(l===void 0)throw new r5A.default(i.opts.uriResolver,n,A);if(l instanceof zW.SchemaEnv)return I(l);return d(l);function C(){if(o===g)return w5(t,a,o,o.$async);let B=e.scopeValue("root",{ref:g});return w5(t,(0,Eg._)`${B}.validate`,g,g.$async)}function I(B){let E=OW(t,B);w5(t,E,B,B.$async)}function d(B){let E=e.scopeValue("schema",r.code.source===!0?{ref:B,code:(0,Eg.stringify)(B)}:{ref:B}),Q=e.name("valid"),f=t.subschema({schema:B,dataTypes:[],schemaPath:Eg.nil,topSchemaRef:E,errSchemaPath:A},Q);t.mergeEvaluated(f),t.ok(Q)}}};function OW(t,e){let{gen:A}=t;return e.validate?A.scopeValue("validate",{ref:e.validate}):(0,Eg._)`${A.scopeValue("wrapper",{ref:e})}.validate`}Cd.getValidate=OW;function w5(t,e,A,i){let{gen:n,it:o}=t,{allErrors:a,schemaEnv:r,opts:s}=o,g=s.passContext?aQ.default.this:Eg.nil;i?l():C();function l(){if(!r.$async)throw new Error("async schema referenced by sync schema");let B=n.let("valid");n.try(()=>{n.code((0,Eg._)`await ${(0,HW.callValidateCode)(t,e,g)}`),d(e),a||n.assign(B,!0)},E=>{n.if((0,Eg._)`!(${E} instanceof ${o.ValidationError})`,()=>n.throw(E)),I(E),a||n.assign(B,!1)}),t.ok(B)}function C(){t.result((0,HW.callValidateCode)(t,e,g),()=>d(e),()=>I(e))}function I(B){let E=(0,Eg._)`${B}.errors`;n.assign(aQ.default.vErrors,(0,Eg._)`${aQ.default.vErrors} === null ? ${E} : ${aQ.default.vErrors}.concat(${E})`),n.assign(aQ.default.errors,(0,Eg._)`${aQ.default.vErrors}.length`)}function d(B){var E;if(!o.opts.unevaluated)return;let Q=(E=A?.validate)===null||E===void 0?void 0:E.evaluated;if(o.props!==!0)if(Q&&!Q.dynamicProps)Q.props!==void 0&&(o.props=p5.mergeEvaluated.props(n,Q.props,o.props));else{let f=n.var("props",(0,Eg._)`${B}.evaluated.props`);o.props=p5.mergeEvaluated.props(n,f,o.props,Eg.Name)}if(o.items!==!0)if(Q&&!Q.dynamicItems)Q.items!==void 0&&(o.items=p5.mergeEvaluated.items(n,Q.items,o.items));else{let f=n.var("items",(0,Eg._)`${B}.evaluated.items`);o.items=p5.mergeEvaluated.items(n,f,o.items,Eg.Name)}}}Cd.callRef=w5;Cd.default=s5A});var jW=qe(Jx=>{"use strict";Object.defineProperty(Jx,"__esModule",{value:!0});var g5A=TW(),l5A=PW(),c5A=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",g5A.default,l5A.default];Jx.default=c5A});var qW=qe(Yx=>{"use strict";Object.defineProperty(Yx,"__esModule",{value:!0});var D5=rn(),pI=D5.operators,y5={maximum:{okStr:"<=",ok:pI.LTE,fail:pI.GT},minimum:{okStr:">=",ok:pI.GTE,fail:pI.LT},exclusiveMaximum:{okStr:"<",ok:pI.LT,fail:pI.GTE},exclusiveMinimum:{okStr:">",ok:pI.GT,fail:pI.LTE}},C5A={message:({keyword:t,schemaCode:e})=>(0,D5.str)`must be ${y5[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,D5._)`{comparison: ${y5[t].okStr}, limit: ${e}}`},I5A={keyword:Object.keys(y5),type:"number",schemaType:"number",$data:!0,error:C5A,code(t){let{keyword:e,data:A,schemaCode:i}=t;t.fail$data((0,D5._)`${A} ${y5[e].fail} ${i} || isNaN(${A})`)}};Yx.default=I5A});var VW=qe(Tx=>{"use strict";Object.defineProperty(Tx,"__esModule",{value:!0});var k3=rn(),d5A={message:({schemaCode:t})=>(0,k3.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,k3._)`{multipleOf: ${t}}`},B5A={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:d5A,code(t){let{gen:e,data:A,schemaCode:i,it:n}=t,o=n.opts.multipleOfPrecision,a=e.let("res"),r=o?(0,k3._)`Math.abs(Math.round(${a}) - ${a}) > 1e-${o}`:(0,k3._)`${a} !== parseInt(${a})`;t.fail$data((0,k3._)`(${i} === 0 || (${a} = ${A}/${i}, ${r}))`)}};Tx.default=B5A});var ZW=qe(Hx=>{"use strict";Object.defineProperty(Hx,"__esModule",{value:!0});function WW(t){let e=t.length,A=0,i=0,n;for(;i=55296&&n<=56319&&i{"use strict";Object.defineProperty(zx,"__esModule",{value:!0});var Id=rn(),E5A=On(),Q5A=ZW(),h5A={message({keyword:t,schemaCode:e}){let A=t==="maxLength"?"more":"fewer";return(0,Id.str)`must NOT have ${A} than ${e} characters`},params:({schemaCode:t})=>(0,Id._)`{limit: ${t}}`},u5A={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:h5A,code(t){let{keyword:e,data:A,schemaCode:i,it:n}=t,o=e==="maxLength"?Id.operators.GT:Id.operators.LT,a=n.opts.unicode===!1?(0,Id._)`${A}.length`:(0,Id._)`${(0,E5A.useFunc)(t.gen,Q5A.default)}(${A})`;t.fail$data((0,Id._)`${a} ${o} ${i}`)}};zx.default=u5A});var $W=qe(Ox=>{"use strict";Object.defineProperty(Ox,"__esModule",{value:!0});var f5A=vl(),v5=rn(),m5A={message:({schemaCode:t})=>(0,v5.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,v5._)`{pattern: ${t}}`},p5A={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:m5A,code(t){let{data:e,$data:A,schema:i,schemaCode:n,it:o}=t,a=o.opts.unicodeRegExp?"u":"",r=A?(0,v5._)`(new RegExp(${n}, ${a}))`:(0,f5A.usePattern)(t,i);t.fail$data((0,v5._)`!${r}.test(${e})`)}};Ox.default=p5A});var AZ=qe(Px=>{"use strict";Object.defineProperty(Px,"__esModule",{value:!0});var S3=rn(),w5A={message({keyword:t,schemaCode:e}){let A=t==="maxProperties"?"more":"fewer";return(0,S3.str)`must NOT have ${A} than ${e} properties`},params:({schemaCode:t})=>(0,S3._)`{limit: ${t}}`},D5A={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:w5A,code(t){let{keyword:e,data:A,schemaCode:i}=t,n=e==="maxProperties"?S3.operators.GT:S3.operators.LT;t.fail$data((0,S3._)`Object.keys(${A}).length ${n} ${i}`)}};Px.default=D5A});var eZ=qe(jx=>{"use strict";Object.defineProperty(jx,"__esModule",{value:!0});var x3=vl(),R3=rn(),y5A=On(),v5A={message:({params:{missingProperty:t}})=>(0,R3.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,R3._)`{missingProperty: ${t}}`},b5A={keyword:"required",type:"object",schemaType:"array",$data:!0,error:v5A,code(t){let{gen:e,schema:A,schemaCode:i,data:n,$data:o,it:a}=t,{opts:r}=a;if(!o&&A.length===0)return;let s=A.length>=r.loopRequired;if(a.allErrors?g():l(),r.strictRequired){let d=t.parentSchema.properties,{definedProperties:B}=t.it;for(let E of A)if(d?.[E]===void 0&&!B.has(E)){let Q=a.schemaEnv.baseId+a.errSchemaPath,f=`required property "${E}" is not defined at "${Q}" (strictRequired)`;(0,y5A.checkStrictMode)(a,f,a.opts.strictRequired)}}function g(){if(s||o)t.block$data(R3.nil,C);else for(let d of A)(0,x3.checkReportMissingProp)(t,d)}function l(){let d=e.let("missing");if(s||o){let B=e.let("valid",!0);t.block$data(B,()=>I(d,B)),t.ok(B)}else e.if((0,x3.checkMissingProp)(t,A,d)),(0,x3.reportMissingProp)(t,d),e.else()}function C(){e.forOf("prop",i,d=>{t.setParams({missingProperty:d}),e.if((0,x3.noPropertyInData)(e,n,d,r.ownProperties),()=>t.error())})}function I(d,B){t.setParams({missingProperty:d}),e.forOf(d,i,()=>{e.assign(B,(0,x3.propertyInData)(e,n,d,r.ownProperties)),e.if((0,R3.not)(B),()=>{t.error(),e.break()})},R3.nil)}}};jx.default=b5A});var tZ=qe(qx=>{"use strict";Object.defineProperty(qx,"__esModule",{value:!0});var N3=rn(),M5A={message({keyword:t,schemaCode:e}){let A=t==="maxItems"?"more":"fewer";return(0,N3.str)`must NOT have ${A} than ${e} items`},params:({schemaCode:t})=>(0,N3._)`{limit: ${t}}`},k5A={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:M5A,code(t){let{keyword:e,data:A,schemaCode:i}=t,n=e==="maxItems"?N3.operators.GT:N3.operators.LT;t.fail$data((0,N3._)`${A}.length ${n} ${i}`)}};qx.default=k5A});var b5=qe(Vx=>{"use strict";Object.defineProperty(Vx,"__esModule",{value:!0});var iZ=ux();iZ.code='require("ajv/dist/runtime/equal").default';Vx.default=iZ});var nZ=qe(Zx=>{"use strict";Object.defineProperty(Zx,"__esModule",{value:!0});var Wx=u3(),jr=rn(),S5A=On(),x5A=b5(),R5A={message:({params:{i:t,j:e}})=>(0,jr.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,jr._)`{i: ${t}, j: ${e}}`},N5A={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:R5A,code(t){let{gen:e,data:A,$data:i,schema:n,parentSchema:o,schemaCode:a,it:r}=t;if(!i&&!n)return;let s=e.let("valid"),g=o.items?(0,Wx.getSchemaTypes)(o.items):[];t.block$data(s,l,(0,jr._)`${a} === false`),t.ok(s);function l(){let B=e.let("i",(0,jr._)`${A}.length`),E=e.let("j");t.setParams({i:B,j:E}),e.assign(s,!0),e.if((0,jr._)`${B} > 1`,()=>(C()?I:d)(B,E))}function C(){return g.length>0&&!g.some(B=>B==="object"||B==="array")}function I(B,E){let Q=e.name("item"),f=(0,Wx.checkDataTypes)(g,Q,r.opts.strictNumbers,Wx.DataType.Wrong),b=e.const("indices",(0,jr._)`{}`);e.for((0,jr._)`;${B}--;`,()=>{e.let(Q,(0,jr._)`${A}[${B}]`),e.if(f,(0,jr._)`continue`),g.length>1&&e.if((0,jr._)`typeof ${Q} == "string"`,(0,jr._)`${Q} += "_"`),e.if((0,jr._)`typeof ${b}[${Q}] == "number"`,()=>{e.assign(E,(0,jr._)`${b}[${Q}]`),t.error(),e.assign(s,!1).break()}).code((0,jr._)`${b}[${Q}] = ${B}`)})}function d(B,E){let Q=(0,S5A.useFunc)(e,x5A.default),f=e.name("outer");e.label(f).for((0,jr._)`;${B}--;`,()=>e.for((0,jr._)`${E} = ${B}; ${E}--;`,()=>e.if((0,jr._)`${Q}(${A}[${B}], ${A}[${E}])`,()=>{t.error(),e.assign(s,!1).break(f)})))}}};Zx.default=N5A});var oZ=qe($x=>{"use strict";Object.defineProperty($x,"__esModule",{value:!0});var Xx=rn(),F5A=On(),_5A=b5(),L5A={message:"must be equal to constant",params:({schemaCode:t})=>(0,Xx._)`{allowedValue: ${t}}`},G5A={keyword:"const",$data:!0,error:L5A,code(t){let{gen:e,data:A,$data:i,schemaCode:n,schema:o}=t;i||o&&typeof o=="object"?t.fail$data((0,Xx._)`!${(0,F5A.useFunc)(e,_5A.default)}(${A}, ${n})`):t.fail((0,Xx._)`${o} !== ${A}`)}};$x.default=G5A});var aZ=qe(AR=>{"use strict";Object.defineProperty(AR,"__esModule",{value:!0});var F3=rn(),K5A=On(),U5A=b5(),J5A={message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,F3._)`{allowedValues: ${t}}`},Y5A={keyword:"enum",schemaType:"array",$data:!0,error:J5A,code(t){let{gen:e,data:A,$data:i,schema:n,schemaCode:o,it:a}=t;if(!i&&n.length===0)throw new Error("enum must have non-empty array");let r=n.length>=a.opts.loopEnum,s,g=()=>s??(s=(0,K5A.useFunc)(e,U5A.default)),l;if(r||i)l=e.let("valid"),t.block$data(l,C);else{if(!Array.isArray(n))throw new Error("ajv implementation error");let d=e.const("vSchema",o);l=(0,F3.or)(...n.map((B,E)=>I(d,E)))}t.pass(l);function C(){e.assign(l,!1),e.forOf("v",o,d=>e.if((0,F3._)`${g()}(${A}, ${d})`,()=>e.assign(l,!0).break()))}function I(d,B){let E=n[B];return typeof E=="object"&&E!==null?(0,F3._)`${g()}(${A}, ${d}[${B}])`:(0,F3._)`${A} === ${E}`}}};AR.default=Y5A});var rZ=qe(eR=>{"use strict";Object.defineProperty(eR,"__esModule",{value:!0});var T5A=qW(),H5A=VW(),z5A=XW(),O5A=$W(),P5A=AZ(),j5A=eZ(),q5A=tZ(),V5A=nZ(),W5A=oZ(),Z5A=aZ(),X5A=[T5A.default,H5A.default,z5A.default,O5A.default,P5A.default,j5A.default,q5A.default,V5A.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},W5A.default,Z5A.default];eR.default=X5A});var iR=qe(_3=>{"use strict";Object.defineProperty(_3,"__esModule",{value:!0});_3.validateAdditionalItems=void 0;var dd=rn(),tR=On(),$5A={message:({params:{len:t}})=>(0,dd.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,dd._)`{limit: ${t}}`},ADA={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:$5A,code(t){let{parentSchema:e,it:A}=t,{items:i}=e;if(!Array.isArray(i)){(0,tR.checkStrictMode)(A,'"additionalItems" is ignored when "items" is not an array of schemas');return}sZ(t,i)}};function sZ(t,e){let{gen:A,schema:i,data:n,keyword:o,it:a}=t;a.items=!0;let r=A.const("len",(0,dd._)`${n}.length`);if(i===!1)t.setParams({len:e.length}),t.pass((0,dd._)`${r} <= ${e.length}`);else if(typeof i=="object"&&!(0,tR.alwaysValidSchema)(a,i)){let g=A.var("valid",(0,dd._)`${r} <= ${e.length}`);A.if((0,dd.not)(g),()=>s(g)),t.ok(g)}function s(g){A.forRange("i",e.length,r,l=>{t.subschema({keyword:o,dataProp:l,dataPropType:tR.Type.Num},g),a.allErrors||A.if((0,dd.not)(g),()=>A.break())})}}_3.validateAdditionalItems=sZ;_3.default=ADA});var nR=qe(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});L3.validateTuple=void 0;var gZ=rn(),M5=On(),eDA=vl(),tDA={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){let{schema:e,it:A}=t;if(Array.isArray(e))return lZ(t,"additionalItems",e);A.items=!0,!(0,M5.alwaysValidSchema)(A,e)&&t.ok((0,eDA.validateArray)(t))}};function lZ(t,e,A=t.schema){let{gen:i,parentSchema:n,data:o,keyword:a,it:r}=t;l(n),r.opts.unevaluated&&A.length&&r.items!==!0&&(r.items=M5.mergeEvaluated.items(i,A.length,r.items));let s=i.name("valid"),g=i.const("len",(0,gZ._)`${o}.length`);A.forEach((C,I)=>{(0,M5.alwaysValidSchema)(r,C)||(i.if((0,gZ._)`${g} > ${I}`,()=>t.subschema({keyword:a,schemaProp:I,dataProp:I},s)),t.ok(s))});function l(C){let{opts:I,errSchemaPath:d}=r,B=A.length,E=B===C.minItems&&(B===C.maxItems||C[e]===!1);if(I.strictTuples&&!E){let Q=`"${a}" is ${B}-tuple, but minItems or maxItems/${e} are not specified or different at path "${d}"`;(0,M5.checkStrictMode)(r,Q,I.strictTuples)}}}L3.validateTuple=lZ;L3.default=tDA});var cZ=qe(oR=>{"use strict";Object.defineProperty(oR,"__esModule",{value:!0});var iDA=nR(),nDA={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,iDA.validateTuple)(t,"items")};oR.default=nDA});var IZ=qe(aR=>{"use strict";Object.defineProperty(aR,"__esModule",{value:!0});var CZ=rn(),oDA=On(),aDA=vl(),rDA=iR(),sDA={message:({params:{len:t}})=>(0,CZ.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,CZ._)`{limit: ${t}}`},gDA={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:sDA,code(t){let{schema:e,parentSchema:A,it:i}=t,{prefixItems:n}=A;i.items=!0,!(0,oDA.alwaysValidSchema)(i,e)&&(n?(0,rDA.validateAdditionalItems)(t,n):t.ok((0,aDA.validateArray)(t)))}};aR.default=gDA});var dZ=qe(rR=>{"use strict";Object.defineProperty(rR,"__esModule",{value:!0});var Ml=rn(),k5=On(),lDA={message:({params:{min:t,max:e}})=>e===void 0?(0,Ml.str)`must contain at least ${t} valid item(s)`:(0,Ml.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,Ml._)`{minContains: ${t}}`:(0,Ml._)`{minContains: ${t}, maxContains: ${e}}`},cDA={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:lDA,code(t){let{gen:e,schema:A,parentSchema:i,data:n,it:o}=t,a,r,{minContains:s,maxContains:g}=i;o.opts.next?(a=s===void 0?1:s,r=g):a=1;let l=e.const("len",(0,Ml._)`${n}.length`);if(t.setParams({min:a,max:r}),r===void 0&&a===0){(0,k5.checkStrictMode)(o,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(r!==void 0&&a>r){(0,k5.checkStrictMode)(o,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,k5.alwaysValidSchema)(o,A)){let E=(0,Ml._)`${l} >= ${a}`;r!==void 0&&(E=(0,Ml._)`${E} && ${l} <= ${r}`),t.pass(E);return}o.items=!0;let C=e.name("valid");r===void 0&&a===1?d(C,()=>e.if(C,()=>e.break())):a===0?(e.let(C,!0),r!==void 0&&e.if((0,Ml._)`${n}.length > 0`,I)):(e.let(C,!1),I()),t.result(C,()=>t.reset());function I(){let E=e.name("_valid"),Q=e.let("count",0);d(E,()=>e.if(E,()=>B(Q)))}function d(E,Q){e.forRange("i",0,l,f=>{t.subschema({keyword:"contains",dataProp:f,dataPropType:k5.Type.Num,compositeRule:!0},E),Q()})}function B(E){e.code((0,Ml._)`${E}++`),r===void 0?e.if((0,Ml._)`${E} >= ${a}`,()=>e.assign(C,!0).break()):(e.if((0,Ml._)`${E} > ${r}`,()=>e.assign(C,!1).break()),a===1?e.assign(C,!0):e.if((0,Ml._)`${E} >= ${a}`,()=>e.assign(C,!0)))}}};rR.default=cDA});var QZ=qe(R0=>{"use strict";Object.defineProperty(R0,"__esModule",{value:!0});R0.validateSchemaDeps=R0.validatePropertyDeps=R0.error=void 0;var sR=rn(),CDA=On(),G3=vl();R0.error={message:({params:{property:t,depsCount:e,deps:A}})=>{let i=e===1?"property":"properties";return(0,sR.str)`must have ${i} ${A} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:A,missingProperty:i}})=>(0,sR._)`{property: ${t}, - missingProperty: ${i}, - depsCount: ${e}, - deps: ${A}}`};var IDA={keyword:"dependencies",type:"object",schemaType:"object",error:R0.error,code(t){let[e,A]=dDA(t);BZ(t,e),EZ(t,A)}};function dDA({schema:t}){let e={},A={};for(let i in t){if(i==="__proto__")continue;let n=Array.isArray(t[i])?e:A;n[i]=t[i]}return[e,A]}function BZ(t,e=t.schema){let{gen:A,data:i,it:n}=t;if(Object.keys(e).length===0)return;let o=A.let("missing");for(let a in e){let r=e[a];if(r.length===0)continue;let s=(0,G3.propertyInData)(A,i,a,n.opts.ownProperties);t.setParams({property:a,depsCount:r.length,deps:r.join(", ")}),n.allErrors?A.if(s,()=>{for(let g of r)(0,G3.checkReportMissingProp)(t,g)}):(A.if((0,sR._)`${s} && (${(0,G3.checkMissingProp)(t,r,o)})`),(0,G3.reportMissingProp)(t,o),A.else())}}R0.validatePropertyDeps=BZ;function EZ(t,e=t.schema){let{gen:A,data:i,keyword:n,it:o}=t,a=A.name("valid");for(let r in e)(0,CDA.alwaysValidSchema)(o,e[r])||(A.if((0,G3.propertyInData)(A,i,r,o.opts.ownProperties),()=>{let s=t.subschema({keyword:n,schemaProp:r},a);t.mergeValidEvaluated(s,a)},()=>A.var(a,!0)),t.ok(a))}R0.validateSchemaDeps=EZ;R0.default=IDA});var uZ=qe(gR=>{"use strict";Object.defineProperty(gR,"__esModule",{value:!0});var hZ=rn(),BDA=On(),EDA={message:"property name must be valid",params:({params:t})=>(0,hZ._)`{propertyName: ${t.propertyName}}`},QDA={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:EDA,code(t){let{gen:e,schema:A,data:i,it:n}=t;if((0,BDA.alwaysValidSchema)(n,A))return;let o=e.name("valid");e.forIn("key",i,a=>{t.setParams({propertyName:a}),t.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},o),e.if((0,hZ.not)(o),()=>{t.error(!0),n.allErrors||e.break()})}),t.ok(o)}};gR.default=QDA});var cR=qe(lR=>{"use strict";Object.defineProperty(lR,"__esModule",{value:!0});var S5=vl(),vc=rn(),hDA=FC(),x5=On(),uDA={message:"must NOT have additional properties",params:({params:t})=>(0,vc._)`{additionalProperty: ${t.additionalProperty}}`},fDA={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:uDA,code(t){let{gen:e,schema:A,parentSchema:i,data:n,errsCount:o,it:a}=t;if(!o)throw new Error("ajv implementation error");let{allErrors:r,opts:s}=a;if(a.props=!0,s.removeAdditional!=="all"&&(0,x5.alwaysValidSchema)(a,A))return;let g=(0,S5.allSchemaProperties)(i.properties),l=(0,S5.allSchemaProperties)(i.patternProperties);C(),t.ok((0,vc._)`${o} === ${hDA.default.errors}`);function C(){e.forIn("key",n,Q=>{!g.length&&!l.length?B(Q):e.if(I(Q),()=>B(Q))})}function I(Q){let f;if(g.length>8){let b=(0,x5.schemaRefOrVal)(a,i.properties,"properties");f=(0,S5.isOwnProperty)(e,b,Q)}else g.length?f=(0,vc.or)(...g.map(b=>(0,vc._)`${Q} === ${b}`)):f=vc.nil;return l.length&&(f=(0,vc.or)(f,...l.map(b=>(0,vc._)`${(0,S5.usePattern)(t,b)}.test(${Q})`))),(0,vc.not)(f)}function d(Q){e.code((0,vc._)`delete ${n}[${Q}]`)}function B(Q){if(s.removeAdditional==="all"||s.removeAdditional&&A===!1){d(Q);return}if(A===!1){t.setParams({additionalProperty:Q}),t.error(),r||e.break();return}if(typeof A=="object"&&!(0,x5.alwaysValidSchema)(a,A)){let f=e.name("valid");s.removeAdditional==="failing"?(E(Q,f,!1),e.if((0,vc.not)(f),()=>{t.reset(),d(Q)})):(E(Q,f),r||e.if((0,vc.not)(f),()=>e.break()))}}function E(Q,f,b){let S={keyword:"additionalProperties",dataProp:Q,dataPropType:x5.Type.Str};b===!1&&Object.assign(S,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(S,f)}}};lR.default=fDA});var pZ=qe(IR=>{"use strict";Object.defineProperty(IR,"__esModule",{value:!0});var mDA=w3(),fZ=vl(),CR=On(),mZ=cR(),pDA={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:A,parentSchema:i,data:n,it:o}=t;o.opts.removeAdditional==="all"&&i.additionalProperties===void 0&&mZ.default.code(new mDA.KeywordCxt(o,mZ.default,"additionalProperties"));let a=(0,fZ.allSchemaProperties)(A);for(let C of a)o.definedProperties.add(C);o.opts.unevaluated&&a.length&&o.props!==!0&&(o.props=CR.mergeEvaluated.props(e,(0,CR.toHash)(a),o.props));let r=a.filter(C=>!(0,CR.alwaysValidSchema)(o,A[C]));if(r.length===0)return;let s=e.name("valid");for(let C of r)g(C)?l(C):(e.if((0,fZ.propertyInData)(e,n,C,o.opts.ownProperties)),l(C),o.allErrors||e.else().var(s,!0),e.endIf()),t.it.definedProperties.add(C),t.ok(s);function g(C){return o.opts.useDefaults&&!o.compositeRule&&A[C].default!==void 0}function l(C){t.subschema({keyword:"properties",schemaProp:C,dataProp:C},s)}}};IR.default=pDA});var vZ=qe(dR=>{"use strict";Object.defineProperty(dR,"__esModule",{value:!0});var wZ=vl(),R5=rn(),DZ=On(),yZ=On(),wDA={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:A,data:i,parentSchema:n,it:o}=t,{opts:a}=o,r=(0,wZ.allSchemaProperties)(A),s=r.filter(E=>(0,DZ.alwaysValidSchema)(o,A[E]));if(r.length===0||s.length===r.length&&(!o.opts.unevaluated||o.props===!0))return;let g=a.strictSchema&&!a.allowMatchingProperties&&n.properties,l=e.name("valid");o.props!==!0&&!(o.props instanceof R5.Name)&&(o.props=(0,yZ.evaluatedPropsToName)(e,o.props));let{props:C}=o;I();function I(){for(let E of r)g&&d(E),o.allErrors?B(E):(e.var(l,!0),B(E),e.if(l))}function d(E){for(let Q in g)new RegExp(E).test(Q)&&(0,DZ.checkStrictMode)(o,`property ${Q} matches pattern ${E} (use allowMatchingProperties)`)}function B(E){e.forIn("key",i,Q=>{e.if((0,R5._)`${(0,wZ.usePattern)(t,E)}.test(${Q})`,()=>{let f=s.includes(E);f||t.subschema({keyword:"patternProperties",schemaProp:E,dataProp:Q,dataPropType:yZ.Type.Str},l),o.opts.unevaluated&&C!==!0?e.assign((0,R5._)`${C}[${Q}]`,!0):!f&&!o.allErrors&&e.if((0,R5.not)(l),()=>e.break())})})}}};dR.default=wDA});var bZ=qe(BR=>{"use strict";Object.defineProperty(BR,"__esModule",{value:!0});var DDA=On(),yDA={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:A,it:i}=t;if((0,DDA.alwaysValidSchema)(i,A)){t.fail();return}let n=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),t.failResult(n,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};BR.default=yDA});var MZ=qe(ER=>{"use strict";Object.defineProperty(ER,"__esModule",{value:!0});var vDA=vl(),bDA={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:vDA.validateUnion,error:{message:"must match a schema in anyOf"}};ER.default=bDA});var kZ=qe(QR=>{"use strict";Object.defineProperty(QR,"__esModule",{value:!0});var N5=rn(),MDA=On(),kDA={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,N5._)`{passingSchemas: ${t.passing}}`},SDA={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:kDA,code(t){let{gen:e,schema:A,parentSchema:i,it:n}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");if(n.opts.discriminator&&i.discriminator)return;let o=A,a=e.let("valid",!1),r=e.let("passing",null),s=e.name("_valid");t.setParams({passing:r}),e.block(g),t.result(a,()=>t.reset(),()=>t.error(!0));function g(){o.forEach((l,C)=>{let I;(0,MDA.alwaysValidSchema)(n,l)?e.var(s,!0):I=t.subschema({keyword:"oneOf",schemaProp:C,compositeRule:!0},s),C>0&&e.if((0,N5._)`${s} && ${a}`).assign(a,!1).assign(r,(0,N5._)`[${r}, ${C}]`).else(),e.if(s,()=>{e.assign(a,!0),e.assign(r,C),I&&t.mergeEvaluated(I,N5.Name)})})}}};QR.default=SDA});var SZ=qe(hR=>{"use strict";Object.defineProperty(hR,"__esModule",{value:!0});var xDA=On(),RDA={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:A,it:i}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");let n=e.name("valid");A.forEach((o,a)=>{if((0,xDA.alwaysValidSchema)(i,o))return;let r=t.subschema({keyword:"allOf",schemaProp:a},n);t.ok(n),t.mergeEvaluated(r)})}};hR.default=RDA});var NZ=qe(uR=>{"use strict";Object.defineProperty(uR,"__esModule",{value:!0});var F5=rn(),RZ=On(),NDA={message:({params:t})=>(0,F5.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,F5._)`{failingKeyword: ${t.ifClause}}`},FDA={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:NDA,code(t){let{gen:e,parentSchema:A,it:i}=t;A.then===void 0&&A.else===void 0&&(0,RZ.checkStrictMode)(i,'"if" without "then" and "else" is ignored');let n=xZ(i,"then"),o=xZ(i,"else");if(!n&&!o)return;let a=e.let("valid",!0),r=e.name("_valid");if(s(),t.reset(),n&&o){let l=e.let("ifClause");t.setParams({ifClause:l}),e.if(r,g("then",l),g("else",l))}else n?e.if(r,g("then")):e.if((0,F5.not)(r),g("else"));t.pass(a,()=>t.error(!0));function s(){let l=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},r);t.mergeEvaluated(l)}function g(l,C){return()=>{let I=t.subschema({keyword:l},r);e.assign(a,r),t.mergeValidEvaluated(I,a),C?e.assign(C,(0,F5._)`${l}`):t.setParams({ifClause:l})}}}};function xZ(t,e){let A=t.schema[e];return A!==void 0&&!(0,RZ.alwaysValidSchema)(t,A)}uR.default=FDA});var FZ=qe(fR=>{"use strict";Object.defineProperty(fR,"__esModule",{value:!0});var _DA=On(),LDA={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:A}){e.if===void 0&&(0,_DA.checkStrictMode)(A,`"${t}" without "if" is ignored`)}};fR.default=LDA});var _Z=qe(mR=>{"use strict";Object.defineProperty(mR,"__esModule",{value:!0});var GDA=iR(),KDA=cZ(),UDA=nR(),JDA=IZ(),YDA=dZ(),TDA=QZ(),HDA=uZ(),zDA=cR(),ODA=pZ(),PDA=vZ(),jDA=bZ(),qDA=MZ(),VDA=kZ(),WDA=SZ(),ZDA=NZ(),XDA=FZ();function $DA(t=!1){let e=[jDA.default,qDA.default,VDA.default,WDA.default,ZDA.default,XDA.default,HDA.default,zDA.default,TDA.default,ODA.default,PDA.default];return t?e.push(KDA.default,JDA.default):e.push(GDA.default,UDA.default),e.push(YDA.default),e}mR.default=$DA});var LZ=qe(pR=>{"use strict";Object.defineProperty(pR,"__esModule",{value:!0});var Ar=rn(),AyA={message:({schemaCode:t})=>(0,Ar.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,Ar._)`{format: ${t}}`},eyA={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:AyA,code(t,e){let{gen:A,data:i,$data:n,schema:o,schemaCode:a,it:r}=t,{opts:s,errSchemaPath:g,schemaEnv:l,self:C}=r;if(!s.validateFormats)return;n?I():d();function I(){let B=A.scopeValue("formats",{ref:C.formats,code:s.code.formats}),E=A.const("fDef",(0,Ar._)`${B}[${a}]`),Q=A.let("fType"),f=A.let("format");A.if((0,Ar._)`typeof ${E} == "object" && !(${E} instanceof RegExp)`,()=>A.assign(Q,(0,Ar._)`${E}.type || "string"`).assign(f,(0,Ar._)`${E}.validate`),()=>A.assign(Q,(0,Ar._)`"string"`).assign(f,E)),t.fail$data((0,Ar.or)(b(),S()));function b(){return s.strictSchema===!1?Ar.nil:(0,Ar._)`${a} && !${f}`}function S(){let M=l.$async?(0,Ar._)`(${E}.async ? await ${f}(${i}) : ${f}(${i}))`:(0,Ar._)`${f}(${i})`,D=(0,Ar._)`(typeof ${f} == "function" ? ${M} : ${f}.test(${i}))`;return(0,Ar._)`${f} && ${f} !== true && ${Q} === ${e} && !${D}`}}function d(){let B=C.formats[o];if(!B){b();return}if(B===!0)return;let[E,Q,f]=S(B);E===e&&t.pass(M());function b(){if(s.strictSchema===!1){C.logger.warn(D());return}throw new Error(D());function D(){return`unknown format "${o}" ignored in schema at path "${g}"`}}function S(D){let F=D instanceof RegExp?(0,Ar.regexpCode)(D):s.code.formats?(0,Ar._)`${s.code.formats}${(0,Ar.getProperty)(o)}`:void 0,_=A.scopeValue("formats",{key:o,ref:D,code:F});return typeof D=="object"&&!(D instanceof RegExp)?[D.type||"string",D.validate,(0,Ar._)`${_}.validate`]:["string",D,_]}function M(){if(typeof B=="object"&&!(B instanceof RegExp)&&B.async){if(!l.$async)throw new Error("async format in sync schema");return(0,Ar._)`await ${f}(${i})`}return typeof Q=="function"?(0,Ar._)`${f}(${i})`:(0,Ar._)`${f}.test(${i})`}}}};pR.default=eyA});var GZ=qe(wR=>{"use strict";Object.defineProperty(wR,"__esModule",{value:!0});var tyA=LZ(),iyA=[tyA.default];wR.default=iyA});var KZ=qe(rQ=>{"use strict";Object.defineProperty(rQ,"__esModule",{value:!0});rQ.contentVocabulary=rQ.metadataVocabulary=void 0;rQ.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];rQ.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var JZ=qe(DR=>{"use strict";Object.defineProperty(DR,"__esModule",{value:!0});var nyA=jW(),oyA=rZ(),ayA=_Z(),ryA=GZ(),UZ=KZ(),syA=[nyA.default,oyA.default,(0,ayA.default)(),ryA.default,UZ.metadataVocabulary,UZ.contentVocabulary];DR.default=syA});var TZ=qe(_5=>{"use strict";Object.defineProperty(_5,"__esModule",{value:!0});_5.DiscrError=void 0;var YZ=(function(t){return t.Tag="tag",t.Mapping="mapping",t})(YZ||(_5.DiscrError=YZ={}))});var zZ=qe(vR=>{"use strict";Object.defineProperty(vR,"__esModule",{value:!0});var sQ=rn(),yR=TZ(),HZ=E5(),gyA=D3(),lyA=On(),cyA={message:({params:{discrError:t,tagName:e}})=>t===yR.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:A}})=>(0,sQ._)`{error: ${t}, tag: ${A}, tagValue: ${e}}`},CyA={keyword:"discriminator",type:"object",schemaType:"object",error:cyA,code(t){let{gen:e,data:A,schema:i,parentSchema:n,it:o}=t,{oneOf:a}=n;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");let r=i.propertyName;if(typeof r!="string")throw new Error("discriminator: requires propertyName");if(i.mapping)throw new Error("discriminator: mapping is not supported");if(!a)throw new Error("discriminator: requires oneOf keyword");let s=e.let("valid",!1),g=e.const("tag",(0,sQ._)`${A}${(0,sQ.getProperty)(r)}`);e.if((0,sQ._)`typeof ${g} == "string"`,()=>l(),()=>t.error(!1,{discrError:yR.DiscrError.Tag,tag:g,tagName:r})),t.ok(s);function l(){let d=I();e.if(!1);for(let B in d)e.elseIf((0,sQ._)`${g} === ${B}`),e.assign(s,C(d[B]));e.else(),t.error(!1,{discrError:yR.DiscrError.Mapping,tag:g,tagName:r}),e.endIf()}function C(d){let B=e.name("valid"),E=t.subschema({keyword:"oneOf",schemaProp:d},B);return t.mergeEvaluated(E,sQ.Name),B}function I(){var d;let B={},E=f(n),Q=!0;for(let M=0;M{IyA.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var jZ=qe((Ba,bR)=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.MissingRefError=Ba.ValidationError=Ba.CodeGen=Ba.Name=Ba.nil=Ba.stringify=Ba.str=Ba._=Ba.KeywordCxt=Ba.Ajv=void 0;var dyA=YW(),ByA=JZ(),EyA=zZ(),PZ=OZ(),QyA=["/properties"],L5="http://json-schema.org/draft-07/schema",gQ=class extends dyA.default{_addVocabularies(){super._addVocabularies(),ByA.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(EyA.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(PZ,QyA):PZ;this.addMetaSchema(e,L5,!1),this.refs["http://json-schema.org/schema"]=L5}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(L5)?L5:void 0)}};Ba.Ajv=gQ;bR.exports=Ba=gQ;bR.exports.Ajv=gQ;Object.defineProperty(Ba,"__esModule",{value:!0});Ba.default=gQ;var hyA=w3();Object.defineProperty(Ba,"KeywordCxt",{enumerable:!0,get:function(){return hyA.KeywordCxt}});var lQ=rn();Object.defineProperty(Ba,"_",{enumerable:!0,get:function(){return lQ._}});Object.defineProperty(Ba,"str",{enumerable:!0,get:function(){return lQ.str}});Object.defineProperty(Ba,"stringify",{enumerable:!0,get:function(){return lQ.stringify}});Object.defineProperty(Ba,"nil",{enumerable:!0,get:function(){return lQ.nil}});Object.defineProperty(Ba,"Name",{enumerable:!0,get:function(){return lQ.Name}});Object.defineProperty(Ba,"CodeGen",{enumerable:!0,get:function(){return lQ.CodeGen}});var uyA=d5();Object.defineProperty(Ba,"ValidationError",{enumerable:!0,get:function(){return uyA.default}});var fyA=D3();Object.defineProperty(Ba,"MissingRefError",{enumerable:!0,get:function(){return fyA.default}})});var qZ=qe(G5=>{"use strict";(function(t){"use strict";function e(Y){return Y!==null?Object.prototype.toString.call(Y)==="[object Array]":!1}function A(Y){return Y!==null?Object.prototype.toString.call(Y)==="[object Object]":!1}function i(Y,z){if(Y===z)return!0;var nA=Object.prototype.toString.call(Y);if(nA!==Object.prototype.toString.call(z))return!1;if(e(Y)===!0){if(Y.length!==z.length)return!1;for(var rA=0;rA",9:"Array"},S="EOF",M="UnquotedIdentifier",D="QuotedIdentifier",F="Rbracket",_="Rparen",U="Comma",J="Colon",j="Rbrace",AA="Number",O="Current",DA="Expref",P="Pipe",aA="Or",iA="And",BA="EQ",oA="GT",sA="LT",hA="GTE",YA="LTE",ee="NE",UA="Flatten",mA="Star",KA="Filter",Pe="Dot",Je="Not",HA="Lbrace",uA="Lbracket",ZA="Lparen",QA="Literal",WA={".":Pe,"*":mA,",":U,":":J,"{":HA,"}":j,"]":F,"(":ZA,")":_,"@":O},MA={"<":!0,">":!0,"=":!0,"!":!0},be={" ":!0," ":!0,"\n":!0};function LA(Y){return Y>="a"&&Y<="z"||Y>="A"&&Y<="Z"||Y==="_"}function pA(Y){return Y>="0"&&Y<="9"||Y==="-"}function Ft(Y){return Y>="a"&&Y<="z"||Y>="A"&&Y<="Z"||Y>="0"&&Y<="9"||Y==="_"}function ht(){}ht.prototype={tokenize:function(Y){var z=[];this._current=0;for(var nA,rA,NA;this._current")return Y[this._current]==="="?(this._current++,{type:hA,value:">=",start:z}):{type:oA,value:">",start:z};if(nA==="="&&Y[this._current]==="=")return this._current++,{type:BA,value:"==",start:z}},_consumeLiteral:function(Y){this._current++;for(var z=this._current,nA=Y.length,rA;Y[this._current]!=="`"&&this._current=0)return!0;if(nA.indexOf(Y)>=0)return!0;if(rA.indexOf(Y[0])>=0)try{return JSON.parse(Y),!0}catch{return!1}else return!1}};var Ee={};Ee[S]=0,Ee[M]=0,Ee[D]=0,Ee[F]=0,Ee[_]=0,Ee[U]=0,Ee[j]=0,Ee[AA]=0,Ee[O]=0,Ee[DA]=0,Ee[P]=1,Ee[aA]=2,Ee[iA]=3,Ee[BA]=5,Ee[oA]=5,Ee[sA]=5,Ee[hA]=5,Ee[YA]=5,Ee[ee]=5,Ee[UA]=9,Ee[mA]=20,Ee[KA]=21,Ee[Pe]=40,Ee[Je]=45,Ee[HA]=50,Ee[uA]=55,Ee[ZA]=60;function Kt(){}Kt.prototype={parse:function(Y){this._loadTokens(Y),this.index=0;var z=this.expression(0);if(this._lookahead(0)!==S){var nA=this._lookaheadToken(0),rA=new Error("Unexpected token type: "+nA.type+", value: "+nA.value);throw rA.name="ParserError",rA}return z},_loadTokens:function(Y){var z=new ht,nA=z.tokenize(Y);nA.push({type:S,value:"",start:Y.length}),this.tokens=nA},expression:function(Y){var z=this._lookaheadToken(0);this._advance();for(var nA=this.nud(z),rA=this._lookahead(0);Y=0)return this.expression(Y);if(z===uA)return this._match(uA),this._parseMultiselectList();if(z===HA)return this._match(HA),this._parseMultiselectHash()},_parseProjectionRHS:function(Y){var z;if(Ee[this._lookahead(0)]<10)z={type:"Identity"};else if(this._lookahead(0)===uA)z=this.expression(Y);else if(this._lookahead(0)===KA)z=this.expression(Y);else if(this._lookahead(0)===Pe)this._match(Pe),z=this._parseDotRHS(Y);else{var nA=this._lookaheadToken(0),rA=new Error("Sytanx error, unexpected token: "+nA.value+"("+nA.type+")");throw rA.name="ParserError",rA}return z},_parseMultiselectList:function(){for(var Y=[];this._lookahead(0)!==F;){var z=this.expression(0);if(Y.push(z),this._lookahead(0)===U&&(this._match(U),this._lookahead(0)===F))throw new Error("Unexpected token Rbracket")}return this._match(F),{type:"MultiSelectList",children:Y}},_parseMultiselectHash:function(){for(var Y=[],z=[M,D],nA,rA,NA,Ie;;){if(nA=this._lookaheadToken(0),z.indexOf(nA.type)<0)throw new Error("Expecting an identifier token, got: "+nA.type);if(rA=nA.value,this._advance(),this._match(J),NA=this.expression(0),Ie={type:"KeyValuePair",name:rA,value:NA},Y.push(Ie),this._lookahead(0)===U)this._match(U);else if(this._lookahead(0)===j){this._match(j);break}}return{type:"MultiSelectHash",children:Y}}};function Ye(Y){this.runtime=Y}Ye.prototype={search:function(Y,z){return this.visit(Y,z)},visit:function(Y,z){var nA,rA,NA,Ie,Qe,xA,_A,Et,et,Te;switch(Y.type){case"Field":return z!==null&&A(z)?(xA=z[Y.name],xA===void 0?null:xA):null;case"Subexpression":for(NA=this.visit(Y.children[0],z),Te=1;Te0)for(Te=dn;Te<_e;Te+=Wi)NA.push(z[Te]);else for(Te=dn;Te>_e;Te+=Wi)NA.push(z[Te]);return NA;case"Projection":var ui=this.visit(Y.children[0],z);if(!e(ui))return null;for(et=[],Te=0;TeQe;break;case hA:NA=Ie>=Qe;break;case sA:NA=Ie=Y&&(z=nA<0?Y-1:Y),z}};function ze(Y){this._interpreter=Y,this.functionTable={abs:{_func:this._functionAbs,_signature:[{types:[s]}]},avg:{_func:this._functionAvg,_signature:[{types:[Q]}]},ceil:{_func:this._functionCeil,_signature:[{types:[s]}]},contains:{_func:this._functionContains,_signature:[{types:[l,C]},{types:[g]}]},ends_with:{_func:this._functionEndsWith,_signature:[{types:[l]},{types:[l]}]},floor:{_func:this._functionFloor,_signature:[{types:[s]}]},length:{_func:this._functionLength,_signature:[{types:[l,C,I]}]},map:{_func:this._functionMap,_signature:[{types:[B]},{types:[C]}]},max:{_func:this._functionMax,_signature:[{types:[Q,f]}]},merge:{_func:this._functionMerge,_signature:[{types:[I],variadic:!0}]},max_by:{_func:this._functionMaxBy,_signature:[{types:[C]},{types:[B]}]},sum:{_func:this._functionSum,_signature:[{types:[Q]}]},starts_with:{_func:this._functionStartsWith,_signature:[{types:[l]},{types:[l]}]},min:{_func:this._functionMin,_signature:[{types:[Q,f]}]},min_by:{_func:this._functionMinBy,_signature:[{types:[C]},{types:[B]}]},type:{_func:this._functionType,_signature:[{types:[g]}]},keys:{_func:this._functionKeys,_signature:[{types:[I]}]},values:{_func:this._functionValues,_signature:[{types:[I]}]},sort:{_func:this._functionSort,_signature:[{types:[f,Q]}]},sort_by:{_func:this._functionSortBy,_signature:[{types:[C]},{types:[B]}]},join:{_func:this._functionJoin,_signature:[{types:[l]},{types:[f]}]},reverse:{_func:this._functionReverse,_signature:[{types:[l,C]}]},to_array:{_func:this._functionToArray,_signature:[{types:[g]}]},to_string:{_func:this._functionToString,_signature:[{types:[g]}]},to_number:{_func:this._functionToNumber,_signature:[{types:[g]}]},not_null:{_func:this._functionNotNull,_signature:[{types:[g],variadic:!0}]}}}ze.prototype={callFunction:function(Y,z){var nA=this.functionTable[Y];if(nA===void 0)throw new Error("Unknown function: "+Y+"()");return this._validateArgs(Y,z,nA._signature),nA._func.call(this,z)},_validateArgs:function(Y,z,nA){var rA;if(nA[nA.length-1].variadic){if(z.length=0;NA--)rA+=nA[NA];return rA}else{var Ie=Y[0].slice(0);return Ie.reverse(),Ie}},_functionAbs:function(Y){return Math.abs(Y[0])},_functionCeil:function(Y){return Math.ceil(Y[0])},_functionAvg:function(Y){for(var z=0,nA=Y[0],rA=0;rA=0},_functionFloor:function(Y){return Math.floor(Y[0])},_functionLength:function(Y){return A(Y[0])?Object.keys(Y[0]).length:Y[0].length},_functionMap:function(Y){for(var z=[],nA=this._interpreter,rA=Y[0],NA=Y[1],Ie=0;Ie0){var z=this._getTypeName(Y[0][0]);if(z===s)return Math.max.apply(Math,Y[0]);for(var nA=Y[0],rA=nA[0],NA=1;NA0){var z=this._getTypeName(Y[0][0]);if(z===s)return Math.min.apply(Math,Y[0]);for(var nA=Y[0],rA=nA[0],NA=1;NALe?1:TeNA&&(NA=Qe,Ie=nA[xA]);return Ie},_functionMinBy:function(Y){for(var z=Y[1],nA=Y[0],rA=this.createKeyFunction(z,[s,l]),NA=1/0,Ie,Qe,xA=0;xA"u"?G5.jmespath={}:G5)});var OgA=qe(($Je,zgA)=>{"use strict";zgA.exports=[{value:"#B0171F",name:"indian red"},{value:"#DC143C",css:!0,name:"crimson"},{value:"#FFB6C1",css:!0,name:"lightpink"},{value:"#FFAEB9",name:"lightpink 1"},{value:"#EEA2AD",name:"lightpink 2"},{value:"#CD8C95",name:"lightpink 3"},{value:"#8B5F65",name:"lightpink 4"},{value:"#FFC0CB",css:!0,name:"pink"},{value:"#FFB5C5",name:"pink 1"},{value:"#EEA9B8",name:"pink 2"},{value:"#CD919E",name:"pink 3"},{value:"#8B636C",name:"pink 4"},{value:"#DB7093",css:!0,name:"palevioletred"},{value:"#FF82AB",name:"palevioletred 1"},{value:"#EE799F",name:"palevioletred 2"},{value:"#CD6889",name:"palevioletred 3"},{value:"#8B475D",name:"palevioletred 4"},{value:"#FFF0F5",name:"lavenderblush 1"},{value:"#FFF0F5",css:!0,name:"lavenderblush"},{value:"#EEE0E5",name:"lavenderblush 2"},{value:"#CDC1C5",name:"lavenderblush 3"},{value:"#8B8386",name:"lavenderblush 4"},{value:"#FF3E96",name:"violetred 1"},{value:"#EE3A8C",name:"violetred 2"},{value:"#CD3278",name:"violetred 3"},{value:"#8B2252",name:"violetred 4"},{value:"#FF69B4",css:!0,name:"hotpink"},{value:"#FF6EB4",name:"hotpink 1"},{value:"#EE6AA7",name:"hotpink 2"},{value:"#CD6090",name:"hotpink 3"},{value:"#8B3A62",name:"hotpink 4"},{value:"#872657",name:"raspberry"},{value:"#FF1493",name:"deeppink 1"},{value:"#FF1493",css:!0,name:"deeppink"},{value:"#EE1289",name:"deeppink 2"},{value:"#CD1076",name:"deeppink 3"},{value:"#8B0A50",name:"deeppink 4"},{value:"#FF34B3",name:"maroon 1"},{value:"#EE30A7",name:"maroon 2"},{value:"#CD2990",name:"maroon 3"},{value:"#8B1C62",name:"maroon 4"},{value:"#C71585",css:!0,name:"mediumvioletred"},{value:"#D02090",name:"violetred"},{value:"#DA70D6",css:!0,name:"orchid"},{value:"#FF83FA",name:"orchid 1"},{value:"#EE7AE9",name:"orchid 2"},{value:"#CD69C9",name:"orchid 3"},{value:"#8B4789",name:"orchid 4"},{value:"#D8BFD8",css:!0,name:"thistle"},{value:"#FFE1FF",name:"thistle 1"},{value:"#EED2EE",name:"thistle 2"},{value:"#CDB5CD",name:"thistle 3"},{value:"#8B7B8B",name:"thistle 4"},{value:"#FFBBFF",name:"plum 1"},{value:"#EEAEEE",name:"plum 2"},{value:"#CD96CD",name:"plum 3"},{value:"#8B668B",name:"plum 4"},{value:"#DDA0DD",css:!0,name:"plum"},{value:"#EE82EE",css:!0,name:"violet"},{value:"#FF00FF",vga:!0,name:"magenta"},{value:"#FF00FF",vga:!0,css:!0,name:"fuchsia"},{value:"#EE00EE",name:"magenta 2"},{value:"#CD00CD",name:"magenta 3"},{value:"#8B008B",name:"magenta 4"},{value:"#8B008B",css:!0,name:"darkmagenta"},{value:"#800080",vga:!0,css:!0,name:"purple"},{value:"#BA55D3",css:!0,name:"mediumorchid"},{value:"#E066FF",name:"mediumorchid 1"},{value:"#D15FEE",name:"mediumorchid 2"},{value:"#B452CD",name:"mediumorchid 3"},{value:"#7A378B",name:"mediumorchid 4"},{value:"#9400D3",css:!0,name:"darkviolet"},{value:"#9932CC",css:!0,name:"darkorchid"},{value:"#BF3EFF",name:"darkorchid 1"},{value:"#B23AEE",name:"darkorchid 2"},{value:"#9A32CD",name:"darkorchid 3"},{value:"#68228B",name:"darkorchid 4"},{value:"#4B0082",css:!0,name:"indigo"},{value:"#8A2BE2",css:!0,name:"blueviolet"},{value:"#9B30FF",name:"purple 1"},{value:"#912CEE",name:"purple 2"},{value:"#7D26CD",name:"purple 3"},{value:"#551A8B",name:"purple 4"},{value:"#9370DB",css:!0,name:"mediumpurple"},{value:"#AB82FF",name:"mediumpurple 1"},{value:"#9F79EE",name:"mediumpurple 2"},{value:"#8968CD",name:"mediumpurple 3"},{value:"#5D478B",name:"mediumpurple 4"},{value:"#483D8B",css:!0,name:"darkslateblue"},{value:"#8470FF",name:"lightslateblue"},{value:"#7B68EE",css:!0,name:"mediumslateblue"},{value:"#6A5ACD",css:!0,name:"slateblue"},{value:"#836FFF",name:"slateblue 1"},{value:"#7A67EE",name:"slateblue 2"},{value:"#6959CD",name:"slateblue 3"},{value:"#473C8B",name:"slateblue 4"},{value:"#F8F8FF",css:!0,name:"ghostwhite"},{value:"#E6E6FA",css:!0,name:"lavender"},{value:"#0000FF",vga:!0,css:!0,name:"blue"},{value:"#0000EE",name:"blue 2"},{value:"#0000CD",name:"blue 3"},{value:"#0000CD",css:!0,name:"mediumblue"},{value:"#00008B",name:"blue 4"},{value:"#00008B",css:!0,name:"darkblue"},{value:"#000080",vga:!0,css:!0,name:"navy"},{value:"#191970",css:!0,name:"midnightblue"},{value:"#3D59AB",name:"cobalt"},{value:"#4169E1",css:!0,name:"royalblue"},{value:"#4876FF",name:"royalblue 1"},{value:"#436EEE",name:"royalblue 2"},{value:"#3A5FCD",name:"royalblue 3"},{value:"#27408B",name:"royalblue 4"},{value:"#6495ED",css:!0,name:"cornflowerblue"},{value:"#B0C4DE",css:!0,name:"lightsteelblue"},{value:"#CAE1FF",name:"lightsteelblue 1"},{value:"#BCD2EE",name:"lightsteelblue 2"},{value:"#A2B5CD",name:"lightsteelblue 3"},{value:"#6E7B8B",name:"lightsteelblue 4"},{value:"#778899",css:!0,name:"lightslategray"},{value:"#708090",css:!0,name:"slategray"},{value:"#C6E2FF",name:"slategray 1"},{value:"#B9D3EE",name:"slategray 2"},{value:"#9FB6CD",name:"slategray 3"},{value:"#6C7B8B",name:"slategray 4"},{value:"#1E90FF",name:"dodgerblue 1"},{value:"#1E90FF",css:!0,name:"dodgerblue"},{value:"#1C86EE",name:"dodgerblue 2"},{value:"#1874CD",name:"dodgerblue 3"},{value:"#104E8B",name:"dodgerblue 4"},{value:"#F0F8FF",css:!0,name:"aliceblue"},{value:"#4682B4",css:!0,name:"steelblue"},{value:"#63B8FF",name:"steelblue 1"},{value:"#5CACEE",name:"steelblue 2"},{value:"#4F94CD",name:"steelblue 3"},{value:"#36648B",name:"steelblue 4"},{value:"#87CEFA",css:!0,name:"lightskyblue"},{value:"#B0E2FF",name:"lightskyblue 1"},{value:"#A4D3EE",name:"lightskyblue 2"},{value:"#8DB6CD",name:"lightskyblue 3"},{value:"#607B8B",name:"lightskyblue 4"},{value:"#87CEFF",name:"skyblue 1"},{value:"#7EC0EE",name:"skyblue 2"},{value:"#6CA6CD",name:"skyblue 3"},{value:"#4A708B",name:"skyblue 4"},{value:"#87CEEB",css:!0,name:"skyblue"},{value:"#00BFFF",name:"deepskyblue 1"},{value:"#00BFFF",css:!0,name:"deepskyblue"},{value:"#00B2EE",name:"deepskyblue 2"},{value:"#009ACD",name:"deepskyblue 3"},{value:"#00688B",name:"deepskyblue 4"},{value:"#33A1C9",name:"peacock"},{value:"#ADD8E6",css:!0,name:"lightblue"},{value:"#BFEFFF",name:"lightblue 1"},{value:"#B2DFEE",name:"lightblue 2"},{value:"#9AC0CD",name:"lightblue 3"},{value:"#68838B",name:"lightblue 4"},{value:"#B0E0E6",css:!0,name:"powderblue"},{value:"#98F5FF",name:"cadetblue 1"},{value:"#8EE5EE",name:"cadetblue 2"},{value:"#7AC5CD",name:"cadetblue 3"},{value:"#53868B",name:"cadetblue 4"},{value:"#00F5FF",name:"turquoise 1"},{value:"#00E5EE",name:"turquoise 2"},{value:"#00C5CD",name:"turquoise 3"},{value:"#00868B",name:"turquoise 4"},{value:"#5F9EA0",css:!0,name:"cadetblue"},{value:"#00CED1",css:!0,name:"darkturquoise"},{value:"#F0FFFF",name:"azure 1"},{value:"#F0FFFF",css:!0,name:"azure"},{value:"#E0EEEE",name:"azure 2"},{value:"#C1CDCD",name:"azure 3"},{value:"#838B8B",name:"azure 4"},{value:"#E0FFFF",name:"lightcyan 1"},{value:"#E0FFFF",css:!0,name:"lightcyan"},{value:"#D1EEEE",name:"lightcyan 2"},{value:"#B4CDCD",name:"lightcyan 3"},{value:"#7A8B8B",name:"lightcyan 4"},{value:"#BBFFFF",name:"paleturquoise 1"},{value:"#AEEEEE",name:"paleturquoise 2"},{value:"#AEEEEE",css:!0,name:"paleturquoise"},{value:"#96CDCD",name:"paleturquoise 3"},{value:"#668B8B",name:"paleturquoise 4"},{value:"#2F4F4F",css:!0,name:"darkslategray"},{value:"#97FFFF",name:"darkslategray 1"},{value:"#8DEEEE",name:"darkslategray 2"},{value:"#79CDCD",name:"darkslategray 3"},{value:"#528B8B",name:"darkslategray 4"},{value:"#00FFFF",name:"cyan"},{value:"#00FFFF",css:!0,name:"aqua"},{value:"#00EEEE",name:"cyan 2"},{value:"#00CDCD",name:"cyan 3"},{value:"#008B8B",name:"cyan 4"},{value:"#008B8B",css:!0,name:"darkcyan"},{value:"#008080",vga:!0,css:!0,name:"teal"},{value:"#48D1CC",css:!0,name:"mediumturquoise"},{value:"#20B2AA",css:!0,name:"lightseagreen"},{value:"#03A89E",name:"manganeseblue"},{value:"#40E0D0",css:!0,name:"turquoise"},{value:"#808A87",name:"coldgrey"},{value:"#00C78C",name:"turquoiseblue"},{value:"#7FFFD4",name:"aquamarine 1"},{value:"#7FFFD4",css:!0,name:"aquamarine"},{value:"#76EEC6",name:"aquamarine 2"},{value:"#66CDAA",name:"aquamarine 3"},{value:"#66CDAA",css:!0,name:"mediumaquamarine"},{value:"#458B74",name:"aquamarine 4"},{value:"#00FA9A",css:!0,name:"mediumspringgreen"},{value:"#F5FFFA",css:!0,name:"mintcream"},{value:"#00FF7F",css:!0,name:"springgreen"},{value:"#00EE76",name:"springgreen 1"},{value:"#00CD66",name:"springgreen 2"},{value:"#008B45",name:"springgreen 3"},{value:"#3CB371",css:!0,name:"mediumseagreen"},{value:"#54FF9F",name:"seagreen 1"},{value:"#4EEE94",name:"seagreen 2"},{value:"#43CD80",name:"seagreen 3"},{value:"#2E8B57",name:"seagreen 4"},{value:"#2E8B57",css:!0,name:"seagreen"},{value:"#00C957",name:"emeraldgreen"},{value:"#BDFCC9",name:"mint"},{value:"#3D9140",name:"cobaltgreen"},{value:"#F0FFF0",name:"honeydew 1"},{value:"#F0FFF0",css:!0,name:"honeydew"},{value:"#E0EEE0",name:"honeydew 2"},{value:"#C1CDC1",name:"honeydew 3"},{value:"#838B83",name:"honeydew 4"},{value:"#8FBC8F",css:!0,name:"darkseagreen"},{value:"#C1FFC1",name:"darkseagreen 1"},{value:"#B4EEB4",name:"darkseagreen 2"},{value:"#9BCD9B",name:"darkseagreen 3"},{value:"#698B69",name:"darkseagreen 4"},{value:"#98FB98",css:!0,name:"palegreen"},{value:"#9AFF9A",name:"palegreen 1"},{value:"#90EE90",name:"palegreen 2"},{value:"#90EE90",css:!0,name:"lightgreen"},{value:"#7CCD7C",name:"palegreen 3"},{value:"#548B54",name:"palegreen 4"},{value:"#32CD32",css:!0,name:"limegreen"},{value:"#228B22",css:!0,name:"forestgreen"},{value:"#00FF00",vga:!0,name:"green 1"},{value:"#00FF00",vga:!0,css:!0,name:"lime"},{value:"#00EE00",name:"green 2"},{value:"#00CD00",name:"green 3"},{value:"#008B00",name:"green 4"},{value:"#008000",vga:!0,css:!0,name:"green"},{value:"#006400",css:!0,name:"darkgreen"},{value:"#308014",name:"sapgreen"},{value:"#7CFC00",css:!0,name:"lawngreen"},{value:"#7FFF00",name:"chartreuse 1"},{value:"#7FFF00",css:!0,name:"chartreuse"},{value:"#76EE00",name:"chartreuse 2"},{value:"#66CD00",name:"chartreuse 3"},{value:"#458B00",name:"chartreuse 4"},{value:"#ADFF2F",css:!0,name:"greenyellow"},{value:"#CAFF70",name:"darkolivegreen 1"},{value:"#BCEE68",name:"darkolivegreen 2"},{value:"#A2CD5A",name:"darkolivegreen 3"},{value:"#6E8B3D",name:"darkolivegreen 4"},{value:"#556B2F",css:!0,name:"darkolivegreen"},{value:"#6B8E23",css:!0,name:"olivedrab"},{value:"#C0FF3E",name:"olivedrab 1"},{value:"#B3EE3A",name:"olivedrab 2"},{value:"#9ACD32",name:"olivedrab 3"},{value:"#9ACD32",css:!0,name:"yellowgreen"},{value:"#698B22",name:"olivedrab 4"},{value:"#FFFFF0",name:"ivory 1"},{value:"#FFFFF0",css:!0,name:"ivory"},{value:"#EEEEE0",name:"ivory 2"},{value:"#CDCDC1",name:"ivory 3"},{value:"#8B8B83",name:"ivory 4"},{value:"#F5F5DC",css:!0,name:"beige"},{value:"#FFFFE0",name:"lightyellow 1"},{value:"#FFFFE0",css:!0,name:"lightyellow"},{value:"#EEEED1",name:"lightyellow 2"},{value:"#CDCDB4",name:"lightyellow 3"},{value:"#8B8B7A",name:"lightyellow 4"},{value:"#FAFAD2",css:!0,name:"lightgoldenrodyellow"},{value:"#FFFF00",vga:!0,name:"yellow 1"},{value:"#FFFF00",vga:!0,css:!0,name:"yellow"},{value:"#EEEE00",name:"yellow 2"},{value:"#CDCD00",name:"yellow 3"},{value:"#8B8B00",name:"yellow 4"},{value:"#808069",name:"warmgrey"},{value:"#808000",vga:!0,css:!0,name:"olive"},{value:"#BDB76B",css:!0,name:"darkkhaki"},{value:"#FFF68F",name:"khaki 1"},{value:"#EEE685",name:"khaki 2"},{value:"#CDC673",name:"khaki 3"},{value:"#8B864E",name:"khaki 4"},{value:"#F0E68C",css:!0,name:"khaki"},{value:"#EEE8AA",css:!0,name:"palegoldenrod"},{value:"#FFFACD",name:"lemonchiffon 1"},{value:"#FFFACD",css:!0,name:"lemonchiffon"},{value:"#EEE9BF",name:"lemonchiffon 2"},{value:"#CDC9A5",name:"lemonchiffon 3"},{value:"#8B8970",name:"lemonchiffon 4"},{value:"#FFEC8B",name:"lightgoldenrod 1"},{value:"#EEDC82",name:"lightgoldenrod 2"},{value:"#CDBE70",name:"lightgoldenrod 3"},{value:"#8B814C",name:"lightgoldenrod 4"},{value:"#E3CF57",name:"banana"},{value:"#FFD700",name:"gold 1"},{value:"#FFD700",css:!0,name:"gold"},{value:"#EEC900",name:"gold 2"},{value:"#CDAD00",name:"gold 3"},{value:"#8B7500",name:"gold 4"},{value:"#FFF8DC",name:"cornsilk 1"},{value:"#FFF8DC",css:!0,name:"cornsilk"},{value:"#EEE8CD",name:"cornsilk 2"},{value:"#CDC8B1",name:"cornsilk 3"},{value:"#8B8878",name:"cornsilk 4"},{value:"#DAA520",css:!0,name:"goldenrod"},{value:"#FFC125",name:"goldenrod 1"},{value:"#EEB422",name:"goldenrod 2"},{value:"#CD9B1D",name:"goldenrod 3"},{value:"#8B6914",name:"goldenrod 4"},{value:"#B8860B",css:!0,name:"darkgoldenrod"},{value:"#FFB90F",name:"darkgoldenrod 1"},{value:"#EEAD0E",name:"darkgoldenrod 2"},{value:"#CD950C",name:"darkgoldenrod 3"},{value:"#8B6508",name:"darkgoldenrod 4"},{value:"#FFA500",name:"orange 1"},{value:"#FF8000",css:!0,name:"orange"},{value:"#EE9A00",name:"orange 2"},{value:"#CD8500",name:"orange 3"},{value:"#8B5A00",name:"orange 4"},{value:"#FFFAF0",css:!0,name:"floralwhite"},{value:"#FDF5E6",css:!0,name:"oldlace"},{value:"#F5DEB3",css:!0,name:"wheat"},{value:"#FFE7BA",name:"wheat 1"},{value:"#EED8AE",name:"wheat 2"},{value:"#CDBA96",name:"wheat 3"},{value:"#8B7E66",name:"wheat 4"},{value:"#FFE4B5",css:!0,name:"moccasin"},{value:"#FFEFD5",css:!0,name:"papayawhip"},{value:"#FFEBCD",css:!0,name:"blanchedalmond"},{value:"#FFDEAD",name:"navajowhite 1"},{value:"#FFDEAD",css:!0,name:"navajowhite"},{value:"#EECFA1",name:"navajowhite 2"},{value:"#CDB38B",name:"navajowhite 3"},{value:"#8B795E",name:"navajowhite 4"},{value:"#FCE6C9",name:"eggshell"},{value:"#D2B48C",css:!0,name:"tan"},{value:"#9C661F",name:"brick"},{value:"#FF9912",name:"cadmiumyellow"},{value:"#FAEBD7",css:!0,name:"antiquewhite"},{value:"#FFEFDB",name:"antiquewhite 1"},{value:"#EEDFCC",name:"antiquewhite 2"},{value:"#CDC0B0",name:"antiquewhite 3"},{value:"#8B8378",name:"antiquewhite 4"},{value:"#DEB887",css:!0,name:"burlywood"},{value:"#FFD39B",name:"burlywood 1"},{value:"#EEC591",name:"burlywood 2"},{value:"#CDAA7D",name:"burlywood 3"},{value:"#8B7355",name:"burlywood 4"},{value:"#FFE4C4",name:"bisque 1"},{value:"#FFE4C4",css:!0,name:"bisque"},{value:"#EED5B7",name:"bisque 2"},{value:"#CDB79E",name:"bisque 3"},{value:"#8B7D6B",name:"bisque 4"},{value:"#E3A869",name:"melon"},{value:"#ED9121",name:"carrot"},{value:"#FF8C00",css:!0,name:"darkorange"},{value:"#FF7F00",name:"darkorange 1"},{value:"#EE7600",name:"darkorange 2"},{value:"#CD6600",name:"darkorange 3"},{value:"#8B4500",name:"darkorange 4"},{value:"#FFA54F",name:"tan 1"},{value:"#EE9A49",name:"tan 2"},{value:"#CD853F",name:"tan 3"},{value:"#CD853F",css:!0,name:"peru"},{value:"#8B5A2B",name:"tan 4"},{value:"#FAF0E6",css:!0,name:"linen"},{value:"#FFDAB9",name:"peachpuff 1"},{value:"#FFDAB9",css:!0,name:"peachpuff"},{value:"#EECBAD",name:"peachpuff 2"},{value:"#CDAF95",name:"peachpuff 3"},{value:"#8B7765",name:"peachpuff 4"},{value:"#FFF5EE",name:"seashell 1"},{value:"#FFF5EE",css:!0,name:"seashell"},{value:"#EEE5DE",name:"seashell 2"},{value:"#CDC5BF",name:"seashell 3"},{value:"#8B8682",name:"seashell 4"},{value:"#F4A460",css:!0,name:"sandybrown"},{value:"#C76114",name:"rawsienna"},{value:"#D2691E",css:!0,name:"chocolate"},{value:"#FF7F24",name:"chocolate 1"},{value:"#EE7621",name:"chocolate 2"},{value:"#CD661D",name:"chocolate 3"},{value:"#8B4513",name:"chocolate 4"},{value:"#8B4513",css:!0,name:"saddlebrown"},{value:"#292421",name:"ivoryblack"},{value:"#FF7D40",name:"flesh"},{value:"#FF6103",name:"cadmiumorange"},{value:"#8A360F",name:"burntsienna"},{value:"#A0522D",css:!0,name:"sienna"},{value:"#FF8247",name:"sienna 1"},{value:"#EE7942",name:"sienna 2"},{value:"#CD6839",name:"sienna 3"},{value:"#8B4726",name:"sienna 4"},{value:"#FFA07A",name:"lightsalmon 1"},{value:"#FFA07A",css:!0,name:"lightsalmon"},{value:"#EE9572",name:"lightsalmon 2"},{value:"#CD8162",name:"lightsalmon 3"},{value:"#8B5742",name:"lightsalmon 4"},{value:"#FF7F50",css:!0,name:"coral"},{value:"#FF4500",name:"orangered 1"},{value:"#FF4500",css:!0,name:"orangered"},{value:"#EE4000",name:"orangered 2"},{value:"#CD3700",name:"orangered 3"},{value:"#8B2500",name:"orangered 4"},{value:"#5E2612",name:"sepia"},{value:"#E9967A",css:!0,name:"darksalmon"},{value:"#FF8C69",name:"salmon 1"},{value:"#EE8262",name:"salmon 2"},{value:"#CD7054",name:"salmon 3"},{value:"#8B4C39",name:"salmon 4"},{value:"#FF7256",name:"coral 1"},{value:"#EE6A50",name:"coral 2"},{value:"#CD5B45",name:"coral 3"},{value:"#8B3E2F",name:"coral 4"},{value:"#8A3324",name:"burntumber"},{value:"#FF6347",name:"tomato 1"},{value:"#FF6347",css:!0,name:"tomato"},{value:"#EE5C42",name:"tomato 2"},{value:"#CD4F39",name:"tomato 3"},{value:"#8B3626",name:"tomato 4"},{value:"#FA8072",css:!0,name:"salmon"},{value:"#FFE4E1",name:"mistyrose 1"},{value:"#FFE4E1",css:!0,name:"mistyrose"},{value:"#EED5D2",name:"mistyrose 2"},{value:"#CDB7B5",name:"mistyrose 3"},{value:"#8B7D7B",name:"mistyrose 4"},{value:"#FFFAFA",name:"snow 1"},{value:"#FFFAFA",css:!0,name:"snow"},{value:"#EEE9E9",name:"snow 2"},{value:"#CDC9C9",name:"snow 3"},{value:"#8B8989",name:"snow 4"},{value:"#BC8F8F",css:!0,name:"rosybrown"},{value:"#FFC1C1",name:"rosybrown 1"},{value:"#EEB4B4",name:"rosybrown 2"},{value:"#CD9B9B",name:"rosybrown 3"},{value:"#8B6969",name:"rosybrown 4"},{value:"#F08080",css:!0,name:"lightcoral"},{value:"#CD5C5C",css:!0,name:"indianred"},{value:"#FF6A6A",name:"indianred 1"},{value:"#EE6363",name:"indianred 2"},{value:"#8B3A3A",name:"indianred 4"},{value:"#CD5555",name:"indianred 3"},{value:"#A52A2A",css:!0,name:"brown"},{value:"#FF4040",name:"brown 1"},{value:"#EE3B3B",name:"brown 2"},{value:"#CD3333",name:"brown 3"},{value:"#8B2323",name:"brown 4"},{value:"#B22222",css:!0,name:"firebrick"},{value:"#FF3030",name:"firebrick 1"},{value:"#EE2C2C",name:"firebrick 2"},{value:"#CD2626",name:"firebrick 3"},{value:"#8B1A1A",name:"firebrick 4"},{value:"#FF0000",vga:!0,name:"red 1"},{value:"#FF0000",vga:!0,css:!0,name:"red"},{value:"#EE0000",name:"red 2"},{value:"#CD0000",name:"red 3"},{value:"#8B0000",name:"red 4"},{value:"#8B0000",css:!0,name:"darkred"},{value:"#800000",vga:!0,css:!0,name:"maroon"},{value:"#8E388E",name:"sgi beet"},{value:"#7171C6",name:"sgi slateblue"},{value:"#7D9EC0",name:"sgi lightblue"},{value:"#388E8E",name:"sgi teal"},{value:"#71C671",name:"sgi chartreuse"},{value:"#8E8E38",name:"sgi olivedrab"},{value:"#C5C1AA",name:"sgi brightgray"},{value:"#C67171",name:"sgi salmon"},{value:"#555555",name:"sgi darkgray"},{value:"#1E1E1E",name:"sgi gray 12"},{value:"#282828",name:"sgi gray 16"},{value:"#515151",name:"sgi gray 32"},{value:"#5B5B5B",name:"sgi gray 36"},{value:"#848484",name:"sgi gray 52"},{value:"#8E8E8E",name:"sgi gray 56"},{value:"#AAAAAA",name:"sgi lightgray"},{value:"#B7B7B7",name:"sgi gray 72"},{value:"#C1C1C1",name:"sgi gray 76"},{value:"#EAEAEA",name:"sgi gray 92"},{value:"#F4F4F4",name:"sgi gray 96"},{value:"#FFFFFF",vga:!0,css:!0,name:"white"},{value:"#F5F5F5",name:"white smoke"},{value:"#F5F5F5",name:"gray 96"},{value:"#DCDCDC",css:!0,name:"gainsboro"},{value:"#D3D3D3",css:!0,name:"lightgrey"},{value:"#C0C0C0",vga:!0,css:!0,name:"silver"},{value:"#A9A9A9",css:!0,name:"darkgray"},{value:"#808080",vga:!0,css:!0,name:"gray"},{value:"#696969",css:!0,name:"dimgray"},{value:"#696969",name:"gray 42"},{value:"#000000",vga:!0,css:!0,name:"black"},{value:"#FCFCFC",name:"gray 99"},{value:"#FAFAFA",name:"gray 98"},{value:"#F7F7F7",name:"gray 97"},{value:"#F2F2F2",name:"gray 95"},{value:"#F0F0F0",name:"gray 94"},{value:"#EDEDED",name:"gray 93"},{value:"#EBEBEB",name:"gray 92"},{value:"#E8E8E8",name:"gray 91"},{value:"#E5E5E5",name:"gray 90"},{value:"#E3E3E3",name:"gray 89"},{value:"#E0E0E0",name:"gray 88"},{value:"#DEDEDE",name:"gray 87"},{value:"#DBDBDB",name:"gray 86"},{value:"#D9D9D9",name:"gray 85"},{value:"#D6D6D6",name:"gray 84"},{value:"#D4D4D4",name:"gray 83"},{value:"#D1D1D1",name:"gray 82"},{value:"#CFCFCF",name:"gray 81"},{value:"#CCCCCC",name:"gray 80"},{value:"#C9C9C9",name:"gray 79"},{value:"#C7C7C7",name:"gray 78"},{value:"#C4C4C4",name:"gray 77"},{value:"#C2C2C2",name:"gray 76"},{value:"#BFBFBF",name:"gray 75"},{value:"#BDBDBD",name:"gray 74"},{value:"#BABABA",name:"gray 73"},{value:"#B8B8B8",name:"gray 72"},{value:"#B5B5B5",name:"gray 71"},{value:"#B3B3B3",name:"gray 70"},{value:"#B0B0B0",name:"gray 69"},{value:"#ADADAD",name:"gray 68"},{value:"#ABABAB",name:"gray 67"},{value:"#A8A8A8",name:"gray 66"},{value:"#A6A6A6",name:"gray 65"},{value:"#A3A3A3",name:"gray 64"},{value:"#A1A1A1",name:"gray 63"},{value:"#9E9E9E",name:"gray 62"},{value:"#9C9C9C",name:"gray 61"},{value:"#999999",name:"gray 60"},{value:"#969696",name:"gray 59"},{value:"#949494",name:"gray 58"},{value:"#919191",name:"gray 57"},{value:"#8F8F8F",name:"gray 56"},{value:"#8C8C8C",name:"gray 55"},{value:"#8A8A8A",name:"gray 54"},{value:"#878787",name:"gray 53"},{value:"#858585",name:"gray 52"},{value:"#828282",name:"gray 51"},{value:"#7F7F7F",name:"gray 50"},{value:"#7D7D7D",name:"gray 49"},{value:"#7A7A7A",name:"gray 48"},{value:"#787878",name:"gray 47"},{value:"#757575",name:"gray 46"},{value:"#737373",name:"gray 45"},{value:"#707070",name:"gray 44"},{value:"#6E6E6E",name:"gray 43"},{value:"#666666",name:"gray 40"},{value:"#636363",name:"gray 39"},{value:"#616161",name:"gray 38"},{value:"#5E5E5E",name:"gray 37"},{value:"#5C5C5C",name:"gray 36"},{value:"#595959",name:"gray 35"},{value:"#575757",name:"gray 34"},{value:"#545454",name:"gray 33"},{value:"#525252",name:"gray 32"},{value:"#4F4F4F",name:"gray 31"},{value:"#4D4D4D",name:"gray 30"},{value:"#4A4A4A",name:"gray 29"},{value:"#474747",name:"gray 28"},{value:"#454545",name:"gray 27"},{value:"#424242",name:"gray 26"},{value:"#404040",name:"gray 25"},{value:"#3D3D3D",name:"gray 24"},{value:"#3B3B3B",name:"gray 23"},{value:"#383838",name:"gray 22"},{value:"#363636",name:"gray 21"},{value:"#333333",name:"gray 20"},{value:"#303030",name:"gray 19"},{value:"#2E2E2E",name:"gray 18"},{value:"#2B2B2B",name:"gray 17"},{value:"#292929",name:"gray 16"},{value:"#262626",name:"gray 15"},{value:"#242424",name:"gray 14"},{value:"#212121",name:"gray 13"},{value:"#1F1F1F",name:"gray 12"},{value:"#1C1C1C",name:"gray 11"},{value:"#1A1A1A",name:"gray 10"},{value:"#171717",name:"gray 9"},{value:"#141414",name:"gray 8"},{value:"#121212",name:"gray 7"},{value:"#0F0F0F",name:"gray 6"},{value:"#0D0D0D",name:"gray 5"},{value:"#0A0A0A",name:"gray 4"},{value:"#080808",name:"gray 3"},{value:"#050505",name:"gray 2"},{value:"#030303",name:"gray 1"},{value:"#F5F5F5",css:!0,name:"whitesmoke"}]});var qgA=qe((AYe,E1)=>{"use strict";var kb=OgA(),PgA=kb.filter(function(t){return!!t.css}),jgA=kb.filter(function(t){return!!t.vga});E1.exports=function(t){var e=E1.exports.get(t);return e&&e.value};E1.exports.get=function(t){return t=t||"",t=t.trim().toLowerCase(),kb.filter(function(e){return e.name.toLowerCase()===t}).pop()};E1.exports.all=E1.exports.get.all=function(){return kb};E1.exports.get.css=function(t){return t?(t=t||"",t=t.trim().toLowerCase(),PgA.filter(function(e){return e.name.toLowerCase()===t}).pop()):PgA};E1.exports.get.vga=function(t){return t?(t=t||"",t=t.trim().toLowerCase(),jgA.filter(function(e){return e.name.toLowerCase()===t}).pop()):jgA}});var ElA=qe((eYe,BlA)=>{"use strict";var ljA=1/0,cjA="[object Symbol]",CjA=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tlA="\\ud800-\\udfff",IjA="\\u0300-\\u036f\\ufe20-\\ufe23",djA="\\u20d0-\\u20f0",ilA="\\u2700-\\u27bf",nlA="a-z\\xdf-\\xf6\\xf8-\\xff",BjA="\\xac\\xb1\\xd7\\xf7",EjA="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",QjA="\\u2000-\\u206f",hjA=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",olA="A-Z\\xc0-\\xd6\\xd8-\\xde",ujA="\\ufe0e\\ufe0f",alA=BjA+EjA+QjA+hjA,rlA="['\u2019]",VgA="["+alA+"]",fjA="["+IjA+djA+"]",slA="\\d+",mjA="["+ilA+"]",glA="["+nlA+"]",llA="[^"+tlA+alA+slA+ilA+nlA+olA+"]",pjA="\\ud83c[\\udffb-\\udfff]",wjA="(?:"+fjA+"|"+pjA+")",DjA="[^"+tlA+"]",clA="(?:\\ud83c[\\udde6-\\uddff]){2}",ClA="[\\ud800-\\udbff][\\udc00-\\udfff]",eu="["+olA+"]",yjA="\\u200d",WgA="(?:"+glA+"|"+llA+")",vjA="(?:"+eu+"|"+llA+")",ZgA="(?:"+rlA+"(?:d|ll|m|re|s|t|ve))?",XgA="(?:"+rlA+"(?:D|LL|M|RE|S|T|VE))?",IlA=wjA+"?",dlA="["+ujA+"]?",bjA="(?:"+yjA+"(?:"+[DjA,clA,ClA].join("|")+")"+dlA+IlA+")*",MjA=dlA+IlA+bjA,kjA="(?:"+[mjA,clA,ClA].join("|")+")"+MjA,SjA=RegExp([eu+"?"+glA+"+"+ZgA+"(?="+[VgA,eu,"$"].join("|")+")",vjA+"+"+XgA+"(?="+[VgA,eu+WgA,"$"].join("|")+")",eu+"?"+WgA+"+"+ZgA,eu+"+"+XgA,slA,kjA].join("|"),"g"),xjA=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,RjA=typeof global=="object"&&global&&global.Object===Object&&global,NjA=typeof self=="object"&&self&&self.Object===Object&&self,FjA=RjA||NjA||Function("return this")();function _jA(t){return t.match(CjA)||[]}function LjA(t){return xjA.test(t)}function GjA(t){return t.match(SjA)||[]}var KjA=Object.prototype,UjA=KjA.toString,$gA=FjA.Symbol,AlA=$gA?$gA.prototype:void 0,elA=AlA?AlA.toString:void 0;function JjA(t){if(typeof t=="string")return t;if(TjA(t))return elA?elA.call(t):"";var e=t+"";return e=="0"&&1/t==-ljA?"-0":e}function YjA(t){return!!t&&typeof t=="object"}function TjA(t){return typeof t=="symbol"||YjA(t)&&UjA.call(t)==cjA}function HjA(t){return t==null?"":JjA(t)}function zjA(t,e,A){return t=HjA(t),e=A?void 0:e,e===void 0?LjA(t)?GjA(t):_jA(t):t.match(e)||[]}BlA.exports=zjA});var RlA=qe((tYe,xlA)=>{"use strict";var OjA=1/0,PjA="[object Symbol]",jjA=/^\s+/,HK="\\ud800-\\udfff",mlA="\\u0300-\\u036f\\ufe20-\\ufe23",plA="\\u20d0-\\u20f0",wlA="\\ufe0e\\ufe0f",qjA="["+HK+"]",YK="["+mlA+plA+"]",TK="\\ud83c[\\udffb-\\udfff]",VjA="(?:"+YK+"|"+TK+")",DlA="[^"+HK+"]",ylA="(?:\\ud83c[\\udde6-\\uddff]){2}",vlA="[\\ud800-\\udbff][\\udc00-\\udfff]",blA="\\u200d",MlA=VjA+"?",klA="["+wlA+"]?",WjA="(?:"+blA+"(?:"+[DlA,ylA,vlA].join("|")+")"+klA+MlA+")*",ZjA=klA+MlA+WjA,XjA="(?:"+[DlA+YK+"?",YK,ylA,vlA,qjA].join("|")+")",$jA=RegExp(TK+"(?="+TK+")|"+XjA+ZjA,"g"),AqA=RegExp("["+blA+HK+mlA+plA+wlA+"]"),eqA=typeof global=="object"&&global&&global.Object===Object&&global,tqA=typeof self=="object"&&self&&self.Object===Object&&self,iqA=eqA||tqA||Function("return this")();function nqA(t){return t.split("")}function oqA(t,e,A,i){for(var n=t.length,o=A+(i?1:-1);i?o--:++o-1;);return A}function gqA(t){return AqA.test(t)}function QlA(t){return gqA(t)?lqA(t):nqA(t)}function lqA(t){return t.match($jA)||[]}var cqA=Object.prototype,CqA=cqA.toString,hlA=iqA.Symbol,ulA=hlA?hlA.prototype:void 0,flA=ulA?ulA.toString:void 0;function IqA(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++i=i?t:IqA(t,e,A)}function BqA(t){return!!t&&typeof t=="object"}function EqA(t){return typeof t=="symbol"||BqA(t)&&CqA.call(t)==PjA}function QqA(t){return t==null?"":SlA(t)}function hqA(t,e,A){if(t=QqA(t),t&&(A||e===void 0))return t.replace(jjA,"");if(!t||!(e=SlA(e)))return t;var i=QlA(t),n=sqA(i,QlA(e));return dqA(i,n).join("")}xlA.exports=hqA});var XlA=qe((iYe,ZlA)=>{"use strict";var zK=1/0,uqA=9007199254740991,fqA=17976931348623157e292,NlA=NaN,mqA="[object Symbol]",pqA=/^\s+|\s+$/g,wqA=/^[-+]0x[0-9a-f]+$/i,DqA=/^0b[01]+$/i,yqA=/^0o[0-7]+$/i,qK="\\ud800-\\udfff",UlA="\\u0300-\\u036f\\ufe20-\\ufe23",JlA="\\u20d0-\\u20f0",YlA="\\ufe0e\\ufe0f",vqA="["+qK+"]",OK="["+UlA+JlA+"]",PK="\\ud83c[\\udffb-\\udfff]",bqA="(?:"+OK+"|"+PK+")",TlA="[^"+qK+"]",HlA="(?:\\ud83c[\\udde6-\\uddff]){2}",zlA="[\\ud800-\\udbff][\\udc00-\\udfff]",OlA="\\u200d",PlA=bqA+"?",jlA="["+YlA+"]?",MqA="(?:"+OlA+"(?:"+[TlA,HlA,zlA].join("|")+")"+jlA+PlA+")*",kqA=jlA+PlA+MqA,SqA="(?:"+[TlA+OK+"?",OK,HlA,zlA,vqA].join("|")+")",jK=RegExp(PK+"(?="+PK+")|"+SqA+kqA,"g"),xqA=RegExp("["+OlA+qK+UlA+JlA+YlA+"]"),RqA=parseInt,NqA=typeof global=="object"&&global&&global.Object===Object&&global,FqA=typeof self=="object"&&self&&self.Object===Object&&self,_qA=NqA||FqA||Function("return this")(),LqA=KqA("length");function GqA(t){return t.split("")}function KqA(t){return function(e){return e?.[t]}}function VK(t){return xqA.test(t)}function qlA(t){return VK(t)?JqA(t):LqA(t)}function UqA(t){return VK(t)?YqA(t):GqA(t)}function JqA(t){for(var e=jK.lastIndex=0;jK.test(t);)e++;return e}function YqA(t){return t.match(jK)||[]}var TqA=Object.prototype,HqA=TqA.toString,FlA=_qA.Symbol,zqA=Math.ceil,OqA=Math.floor,_lA=FlA?FlA.prototype:void 0,LlA=_lA?_lA.toString:void 0;function GlA(t,e){var A="";if(!t||e<1||e>uqA)return A;do e%2&&(A+=t),e=OqA(e/2),e&&(t+=t);while(e);return A}function PqA(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++i=i?t:PqA(t,e,A)}function qqA(t,e){e=e===void 0?" ":VlA(e);var A=e.length;if(A<2)return A?GlA(e,t):e;var i=GlA(e,zqA(t/qlA(e)));return VK(e)?jqA(UqA(i),0,t).join(""):i.slice(0,t)}function KlA(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function VqA(t){return!!t&&typeof t=="object"}function WlA(t){return typeof t=="symbol"||VqA(t)&&HqA.call(t)==mqA}function WqA(t){if(!t)return t===0?t:0;if(t=XqA(t),t===zK||t===-zK){var e=t<0?-1:1;return e*fqA}return t===t?t:0}function ZqA(t){var e=WqA(t),A=e%1;return e===e?A?e-A:e:0}function XqA(t){if(typeof t=="number")return t;if(WlA(t))return NlA;if(KlA(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=KlA(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(pqA,"");var A=DqA.test(t);return A||yqA.test(t)?RqA(t.slice(2),A?2:8):wqA.test(t)?NlA:+t}function $qA(t){return t==null?"":VlA(t)}function AVA(t,e,A){t=$qA(t),e=ZqA(e);var i=e?qlA(t):0;return e&&i{"use strict";$lA.exports=(t,e,A,i)=>{let n=(t+(i||"")).toString().includes("%");if(typeof t=="string"?[t,e,A,i]=t.match(/(0?\.?\d{1,3})%?\b/g).map(Number):i!==void 0&&(i=parseFloat(i)),typeof t!="number"||typeof e!="number"||typeof A!="number"||t>255||e>255||A>255)throw new TypeError("Expected three numbers below 256");if(typeof i=="number"){if(!n&&i>=0&&i<=1)i=Math.round(255*i);else if(n&&i>=0&&i<=100)i=Math.round(255*i/100);else throw new TypeError(`Expected alpha value (${i}) as a fraction or percentage`);i=(i|256).toString(16).slice(1)}else i="";return(A|e<<8|t<<16|1<<24).toString(16).slice(1)+i}});var tcA=qe((oYe,ecA)=>{"use strict";var jm="a-f\\d",eVA=`#?[${jm}]{3}[${jm}]?`,tVA=`#?[${jm}]{6}([${jm}]{2})?`,iVA=new RegExp(`[^#${jm}]`,"gi"),nVA=new RegExp(`^${eVA}$|^${tVA}$`,"i");ecA.exports=(t,e={})=>{if(typeof t!="string"||iVA.test(t)||!nVA.test(t))throw new TypeError("Expected a valid hex string");t=t.replace(/^#/,"");let A=1;t.length===8&&(A=Number.parseInt(t.slice(6,8),16)/255,t=t.slice(0,6)),t.length===4&&(A=Number.parseInt(t.slice(3,4).repeat(2),16)/255,t=t.slice(0,3)),t.length===3&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);let i=Number.parseInt(t,16),n=i>>16,o=i>>8&255,a=i&255,r=typeof e.alpha=="number"?e.alpha:A;if(e.format==="array")return[n,o,a,r];if(e.format==="css"){let s=r===1?"":` / ${Number((r*100).toFixed(2))}%`;return`rgb(${n} ${o} ${a}${s})`}return{red:n,green:o,blue:a,alpha:r}}});var ocA=qe((aYe,ncA)=>{"use strict";var oVA=qgA(),aVA=ElA(),rVA=RlA(),sVA=XlA(),gVA=AcA(),icA=tcA(),WK=.75,ZK=.25,XK=16777215,lVA=49979693;ncA.exports=function(t){return"#"+IVA(String(JSON.stringify(t)))};function cVA(t){var e=aVA(t),A=[];return e.forEach(function(i){var n=oVA(i);n&&A.push(icA(rVA(n,"#"),{format:"array"}))}),A}function CVA(t){var e=[0,0,0];return t.forEach(function(A){for(var i=0;i<3;i++)e[i]+=A[i]}),[e[0]/t.length,e[1]/t.length,e[2]/t.length]}function IVA(t){var e,A=cVA(t);A.length>0&&(e=CVA(A));var i=1,n=0,o=1;if(t.length>0)for(var a=0;an&&(n=t[a].charCodeAt(0)),o=parseInt(XK/n),i=(i+t[a].charCodeAt(0)*o*lVA)%XK;var r=(i*t.length%XK).toString(16);r=sVA(r,6,r);var s=icA(r,{format:"array"});return e?gVA(ZK*s[0]+WK*e[0],ZK*s[1]+WK*e[1],ZK*s[2]+WK*e[2]):r}});var AJ=(()=>{class t{_renderer;_elementRef;onChange=A=>{};onTouched=()=>{};constructor(A,i){this._renderer=A,this._elementRef=i}setProperty(A,i){this._renderer.setProperty(this._elementRef.nativeElement,A,i)}registerOnTouched(A){this.onTouched=A}registerOnChange(A){this.onChange=A}setDisabledState(A){this.setProperty("disabled",A)}static \u0275fac=function(i){return new(i||t)(at(_i),at(ge))};static \u0275dir=OA({type:t})}return t})(),eJ=(()=>{class t extends AJ{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,features:[It]})}return t})(),Lg=new yA("");var CcA={provide:Lg,useExisting:wr(()=>uo),multi:!0};function IcA(){let t=Ob()?Ob().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}var dcA=new yA(""),uo=(()=>{class t extends AJ{_compositionMode;_composing=!1;constructor(A,i,n){super(A,i),this._compositionMode=n,this._compositionMode==null&&(this._compositionMode=!IcA())}writeValue(A){let i=A??"";this.setProperty("value",i)}_handleInput(A){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(A)}_compositionStart(){this._composing=!0}_compositionEnd(A){this._composing=!1,this._compositionMode&&this.onChange(A)}static \u0275fac=function(i){return new(i||t)(at(_i),at(ge),at(dcA,8))};static \u0275dir=OA({type:t,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,n){i&1&&tA("input",function(a){return n._handleInput(a.target.value)})("blur",function(){return n.onTouched()})("compositionstart",function(){return n._compositionStart()})("compositionend",function(a){return n._compositionEnd(a.target.value)})},standalone:!1,features:[dt([CcA]),It]})}return t})();function Zb(t){return t==null||Xb(t)===0}function Xb(t){return t==null?null:Array.isArray(t)||typeof t=="string"?t.length:t instanceof Set?t.size:null}var a0=new yA(""),fu=new yA(""),BcA=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Ag=class{static min(e){return tJ(e)}static max(e){return EcA(e)}static required(e){return QcA(e)}static requiredTrue(e){return hcA(e)}static email(e){return ucA(e)}static minLength(e){return fcA(e)}static maxLength(e){return mcA(e)}static pattern(e){return pcA(e)}static nullValidator(e){return Qp()}static compose(e){return sJ(e)}static composeAsync(e){return gJ(e)}};function tJ(t){return e=>{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A>t?{max:{max:t,actual:e.value}}:null}}function QcA(t){return Zb(t.value)?{required:!0}:null}function hcA(t){return t.value===!0?null:{required:!0}}function ucA(t){return Zb(t.value)||BcA.test(t.value)?null:{email:!0}}function fcA(t){return e=>{let A=e.value?.length??Xb(e.value);return A===null||A===0?null:A{let A=e.value?.length??Xb(e.value);return A!==null&&A>t?{maxlength:{requiredLength:t,actualLength:A}}:null}}function pcA(t){if(!t)return Qp;let e,A;return typeof t=="string"?(A="",t.charAt(0)!=="^"&&(A+="^"),A+=t,t.charAt(t.length-1)!=="$"&&(A+="$"),e=new RegExp(A)):(A=t.toString(),e=t),i=>{if(Zb(i.value))return null;let n=i.value;return e.test(n)?null:{pattern:{requiredPattern:A,actualValue:n}}}}function Qp(t){return null}function iJ(t){return t!=null}function nJ(t){return lp(t)?Ms(t):t}function oJ(t){let e={};return t.forEach(A=>{e=A!=null?cA(cA({},e),A):e}),Object.keys(e).length===0?null:e}function aJ(t,e){return e.map(A=>A(t))}function wcA(t){return!t.validate}function rJ(t){return t.map(e=>wcA(e)?e:A=>e.validate(A))}function sJ(t){if(!t)return null;let e=t.filter(iJ);return e.length==0?null:function(A){return oJ(aJ(A,e))}}function $b(t){return t!=null?sJ(rJ(t)):null}function gJ(t){if(!t)return null;let e=t.filter(iJ);return e.length==0?null:function(A){let i=aJ(A,e).map(nJ);return $m(i).pipe(fe(oJ))}}function A9(t){return t!=null?gJ(rJ(t)):null}function jU(t,e){return t===null?[e]:Array.isArray(t)?[...t,e]:[t,e]}function lJ(t){return t._rawValidators}function cJ(t){return t._rawAsyncValidators}function qb(t){return t?Array.isArray(t)?t:[t]:[]}function hp(t,e){return Array.isArray(t)?t.includes(e):t===e}function qU(t,e){let A=qb(e);return qb(t).forEach(n=>{hp(A,n)||A.push(n)}),A}function VU(t,e){return qb(e).filter(A=>!hp(t,A))}var up=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(e){this._rawValidators=e||[],this._composedValidatorFn=$b(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=A9(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control&&this.control.reset(e)}hasError(e,A){return this.control?this.control.hasError(e,A):!1}getError(e,A){return this.control?this.control.getError(e,A):null}},gC=class extends up{name;get formDirective(){return null}get path(){return null}},eg=class extends up{_parent=null;name=null;valueAccessor=null},fp=class{_cd;constructor(e){this._cd=e}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}};var fo=(()=>{class t extends fp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(at(eg,2))};static \u0275dir=OA({type:t,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,n){i&2&&ne("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)},standalone:!1,features:[It]})}return t})(),CJ=(()=>{class t extends fp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(at(gC,10))};static \u0275dir=OA({type:t,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["","formArray",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,n){i&2&&ne("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)("ng-submitted",n.isSubmitted)},standalone:!1,features:[It]})}return t})();var Iu="VALID",Ep="INVALID",yB="PENDING",du="DISABLED",y2=class{},mp=class extends y2{value;source;constructor(e,A){super(),this.value=e,this.source=A}},Eu=class extends y2{pristine;source;constructor(e,A){super(),this.pristine=e,this.source=A}},Qu=class extends y2{touched;source;constructor(e,A){super(),this.touched=e,this.source=A}},vB=class extends y2{status;source;constructor(e,A){super(),this.status=e,this.source=A}},pp=class extends y2{source;constructor(e){super(),this.source=e}},hu=class extends y2{source;constructor(e){super(),this.source=e}};function e9(t){return(vp(t)?t.validators:t)||null}function DcA(t){return Array.isArray(t)?$b(t):t||null}function t9(t,e){return(vp(e)?e.asyncValidators:t)||null}function ycA(t){return Array.isArray(t)?A9(t):t||null}function vp(t){return t!=null&&!Array.isArray(t)&&typeof t=="object"}function IJ(t,e,A){let i=t.controls;if(!(e?Object.keys(i):i).length)throw new kt(1e3,"");if(!i[A])throw new kt(1001,"")}function dJ(t,e,A){t._forEachChild((i,n)=>{if(A[n]===void 0)throw new kt(1002,"")})}var bB=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,A){this._assignValidators(e),this._assignAsyncValidators(A)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return la(this.statusReactive)}set status(e){la(()=>this.statusReactive.set(e))}_status=Ue(()=>this.statusReactive());statusReactive=jA(void 0);get valid(){return this.status===Iu}get invalid(){return this.status===Ep}get pending(){return this.status==yB}get disabled(){return this.status===du}get enabled(){return this.status!==du}errors;get pristine(){return la(this.pristineReactive)}set pristine(e){la(()=>this.pristineReactive.set(e))}_pristine=Ue(()=>this.pristineReactive());pristineReactive=jA(!0);get dirty(){return!this.pristine}get touched(){return la(this.touchedReactive)}set touched(e){la(()=>this.touchedReactive.set(e))}_touched=Ue(()=>this.touchedReactive());touchedReactive=jA(!1);get untouched(){return!this.touched}_events=new XA;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(qU(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(qU(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(VU(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(VU(e,this._rawAsyncValidators))}hasValidator(e){return hp(this._rawValidators,e)}hasAsyncValidator(e){return hp(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let A=this.touched===!1;this.touched=!0;let i=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsTouched(Ge(cA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new Qu(!0,i))}markAllAsDirty(e={}){this.markAsDirty({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsDirty(e))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsTouched(e))}markAsUntouched(e={}){let A=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:i})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,i),A&&e.emitEvent!==!1&&this._events.next(new Qu(!1,i))}markAsDirty(e={}){let A=this.pristine===!0;this.pristine=!1;let i=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsDirty(Ge(cA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new Eu(!1,i))}markAsPristine(e={}){let A=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e,i),A&&e.emitEvent!==!1&&this._events.next(new Eu(!0,i))}markAsPending(e={}){this.status=yB;let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new vB(this.status,A)),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.markAsPending(Ge(cA({},e),{sourceControl:A}))}disable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=du,this.errors=null,this._forEachChild(n=>{n.disable(Ge(cA({},e),{onlySelf:!0}))}),this._updateValue();let i=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new mp(this.value,i)),this._events.next(new vB(this.status,i)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Ge(cA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(n=>n(!0))}enable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=Iu,this._forEachChild(i=>{i.enable(Ge(cA({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(Ge(cA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(i=>i(!1))}_updateAncestors(e,A){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine({},A),this._parent._updateTouched({},A))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let i=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Iu||this.status===yB)&&this._runAsyncValidator(i,e.emitEvent)}let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new mp(this.value,A)),this._events.next(new vB(this.status,A)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(Ge(cA({},e),{sourceControl:A}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(A=>A._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?du:Iu}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,A){if(this.asyncValidator){this.status=yB,this._hasOwnPendingAsyncValidator={emitEvent:A!==!1,shouldHaveEmitted:e!==!1};let i=nJ(this.asyncValidator(this));this._asyncValidationSubscription=i.subscribe(n=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(n,{emitEvent:A,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,A={}){this.errors=e,this._updateControlsErrors(A.emitEvent!==!1,this,A.shouldHaveEmitted)}get(e){let A=e;return A==null||(Array.isArray(A)||(A=A.split(".")),A.length===0)?null:A.reduce((i,n)=>i&&i._find(n),this)}getError(e,A){let i=A?this.get(A):this;return i&&i.errors?i.errors[e]:null}hasError(e,A){return!!this.getError(e,A)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,A,i){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||i)&&this._events.next(new vB(this.status,A)),this._parent&&this._parent._updateControlsErrors(e,A,i)}_initObservables(){this.valueChanges=new $A,this.statusChanges=new $A}_calculateStatus(){return this._allControlsDisabled()?du:this.errors?Ep:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(yB)?yB:this._anyControlsHaveStatus(Ep)?Ep:Iu}_anyControlsHaveStatus(e){return this._anyControls(A=>A.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,A){let i=!this._anyControlsDirty(),n=this.pristine!==i;this.pristine=i,this._parent&&!e.onlySelf&&this._parent._updatePristine(e,A),n&&this._events.next(new Eu(this.pristine,A))}_updateTouched(e={},A){this.touched=this._anyControlsTouched(),this._events.next(new Qu(this.touched,A)),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,A)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){vp(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){let A=this._parent&&this._parent.dirty;return!e&&!!A&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=DcA(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=ycA(this._rawAsyncValidators)}},MB=class extends bB{constructor(e,A,i){super(e9(A),t9(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(e,A){return this.controls[e]?this.controls[e]:(this.controls[e]=A,A.setParent(this),A._registerOnCollectionChange(this._onCollectionChange),A)}addControl(e,A,i={}){this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}removeControl(e,A={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}setControl(e,A,i={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],A&&this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}contains(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled}setValue(e,A={}){dJ(this,!0,e),Object.keys(e).forEach(i=>{IJ(this,!0,i),this.controls[i].setValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(Object.keys(e).forEach(i=>{let n=this.controls[i];n&&n.patchValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e={},A={}){this._forEachChild((i,n)=>{i.reset(e?e[n]:null,Ge(cA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new hu(this))}getRawValue(){return this._reduceChildren({},(e,A,i)=>(e[i]=A.getRawValue(),e))}_syncPendingControls(){let e=this._reduceChildren(!1,(A,i)=>i._syncPendingControls()?!0:A);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){Object.keys(this.controls).forEach(A=>{let i=this.controls[A];i&&e(i,A)})}_setUpControls(){this._forEachChild(e=>{e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(e){for(let[A,i]of Object.entries(this.controls))if(this.contains(A)&&e(i))return!0;return!1}_reduceValue(){let e={};return this._reduceChildren(e,(A,i,n)=>((i.enabled||this.disabled)&&(A[n]=i.value),A))}_reduceChildren(e,A){let i=e;return this._forEachChild((n,o)=>{i=A(i,n,o)}),i}_allControlsDisabled(){for(let e of Object.keys(this.controls))if(this.controls[e].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(e){return this.controls.hasOwnProperty(e)?this.controls[e]:null}};var Vb=class extends MB{};var kB=new yA("",{factory:()=>bp}),bp="always";function BJ(t,e){return[...e.path,t]}function uu(t,e,A=bp){i9(t,e),e.valueAccessor.writeValue(t.value),(t.disabled||A==="always")&&e.valueAccessor.setDisabledState?.(t.disabled),bcA(t,e),kcA(t,e),McA(t,e),vcA(t,e)}function wp(t,e,A=!0){let i=()=>{};e.valueAccessor&&(e.valueAccessor.registerOnChange(i),e.valueAccessor.registerOnTouched(i)),yp(t,e),t&&(e._invokeOnDestroyCallbacks(),t._registerOnCollectionChange(()=>{}))}function Dp(t,e){t.forEach(A=>{A.registerOnValidatorChange&&A.registerOnValidatorChange(e)})}function vcA(t,e){if(e.valueAccessor.setDisabledState){let A=i=>{e.valueAccessor.setDisabledState(i)};t.registerOnDisabledChange(A),e._registerOnDestroy(()=>{t._unregisterOnDisabledChange(A)})}}function i9(t,e){let A=lJ(t);e.validator!==null?t.setValidators(jU(A,e.validator)):typeof A=="function"&&t.setValidators([A]);let i=cJ(t);e.asyncValidator!==null?t.setAsyncValidators(jU(i,e.asyncValidator)):typeof i=="function"&&t.setAsyncValidators([i]);let n=()=>t.updateValueAndValidity();Dp(e._rawValidators,n),Dp(e._rawAsyncValidators,n)}function yp(t,e){let A=!1;if(t!==null){if(e.validator!==null){let n=lJ(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.validator);o.length!==n.length&&(A=!0,t.setValidators(o))}}if(e.asyncValidator!==null){let n=cJ(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.asyncValidator);o.length!==n.length&&(A=!0,t.setAsyncValidators(o))}}}let i=()=>{};return Dp(e._rawValidators,i),Dp(e._rawAsyncValidators,i),A}function bcA(t,e){e.valueAccessor.registerOnChange(A=>{t._pendingValue=A,t._pendingChange=!0,t._pendingDirty=!0,t.updateOn==="change"&&EJ(t,e)})}function McA(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,t.updateOn==="blur"&&t._pendingChange&&EJ(t,e),t.updateOn!=="submit"&&t.markAsTouched()})}function EJ(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function kcA(t,e){let A=(i,n)=>{e.valueAccessor.writeValue(i),n&&e.viewToModelUpdate(i)};t.registerOnChange(A),e._registerOnDestroy(()=>{t._unregisterOnChange(A)})}function QJ(t,e){t==null,i9(t,e)}function ScA(t,e){return yp(t,e)}function n9(t,e){if(!t.hasOwnProperty("model"))return!1;let A=t.model;return A.isFirstChange()?!0:!Object.is(e,A.currentValue)}function xcA(t){return Object.getPrototypeOf(t.constructor)===eJ}function hJ(t,e){t._syncPendingControls(),e.forEach(A=>{let i=A.control;i.updateOn==="submit"&&i._pendingChange&&(A.viewToModelUpdate(i._pendingValue),i._pendingChange=!1)})}function o9(t,e){if(!e)return null;Array.isArray(e);let A,i,n;return e.forEach(o=>{o.constructor===uo?A=o:xcA(o)?i=o:n=o}),n||i||A||null}function RcA(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}var NcA={provide:gC,useExisting:wr(()=>SB)},Bu=Promise.resolve(),SB=(()=>{class t extends gC{callSetDisabledState;get submitted(){return la(this.submittedReactive)}_submitted=Ue(()=>this.submittedReactive());submittedReactive=jA(!1);_directives=new Set;form;ngSubmit=new $A;options;constructor(A,i,n){super(),this.callSetDisabledState=n,this.form=new MB({},$b(A),A9(i))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(A){Bu.then(()=>{let i=this._findContainer(A.path);A.control=i.registerControl(A.name,A.control),uu(A.control,A,this.callSetDisabledState),A.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(A)})}getControl(A){return this.form.get(A.path)}removeControl(A){Bu.then(()=>{let i=this._findContainer(A.path);i&&i.removeControl(A.name),this._directives.delete(A)})}addFormGroup(A){Bu.then(()=>{let i=this._findContainer(A.path),n=new MB({});QJ(n,A),i.registerControl(A.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(A){Bu.then(()=>{let i=this._findContainer(A.path);i&&i.removeControl(A.name)})}getFormGroup(A){return this.form.get(A.path)}updateModel(A,i){Bu.then(()=>{this.form.get(A.path).setValue(i)})}setValue(A){this.control.setValue(A)}onSubmit(A){return this.submittedReactive.set(!0),hJ(this.form,this._directives),this.ngSubmit.emit(A),this.form._events.next(new pp(this.control)),A?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(A=void 0){this.form.reset(A),this.submittedReactive.set(!1)}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.form._updateOn=this.options.updateOn)}_findContainer(A){return A.pop(),A.length?this.form.get(A):this.form}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["form",3,"ngNoForm","",3,"formGroup","",3,"formArray",""],["ng-form"],["","ngForm",""]],hostBindings:function(i,n){i&1&&tA("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{options:[0,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[dt([NcA]),It]})}return t})();function WU(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}function ZU(t){return typeof t=="object"&&t!==null&&Object.keys(t).length===2&&"value"in t&&"disabled"in t}var ks=class extends bB{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,A,i){super(e9(A),t9(i,A)),this._applyFormState(e),this._setUpdateStrategy(A),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),vp(A)&&(A.nonNullable||A.initialValueIsDefault)&&(ZU(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,A={}){this.value=this._pendingValue=e,this._onChange.length&&A.emitModelToViewChange!==!1&&this._onChange.forEach(i=>i(this.value,A.emitViewToModelChange!==!1)),this.updateValueAndValidity(A)}patchValue(e,A={}){this.setValue(e,A)}reset(e=this.defaultValue,A={}){this._applyFormState(e),this.markAsPristine(A),this.markAsUntouched(A),this.setValue(this.value,A),A.overwriteDefaultValue&&(this.defaultValue=this.value),this._pendingChange=!1,A?.emitEvent!==!1&&this._events.next(new hu(this))}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){WU(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){WU(this._onDisabledChange,e)}_forEachChild(e){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(e){ZU(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}};var FcA=t=>t instanceof ks;var _cA={provide:eg,useExisting:wr(()=>Sa)},XU=Promise.resolve(),Sa=(()=>{class t extends eg{_changeDetectorRef;callSetDisabledState;control=new ks;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new $A;constructor(A,i,n,o,a,r){super(),this._changeDetectorRef=a,this.callSetDisabledState=r,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=o9(this,o)}ngOnChanges(A){if(this._checkForErrors(),!this._registered||"name"in A){if(this._registered&&(this._checkName(),this.formDirective)){let i=A.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in A&&this._updateDisabled(A),n9(A,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){uu(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(A){XU.then(()=>{this.control.setValue(A,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(A){let i=A.isDisabled.currentValue,n=i!==0&&he(i);XU.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(A){return this._parent?BJ(A,this._parent):[A]}static \u0275fac=function(i){return new(i||t)(at(gC,9),at(a0,10),at(fu,10),at(Lg,10),at(Dt,8),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[dt([_cA]),It,ti]})}return t})();var uJ=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1})}return t})(),LcA={provide:Lg,useExisting:wr(()=>a9),multi:!0},a9=(()=>{class t extends eJ{writeValue(A){let i=A??"";this.setProperty("value",i)}registerOnChange(A){this.onChange=i=>{A(i==""?null:parseFloat(i))}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(i,n){i&1&&tA("input",function(a){return n.onChange(a.target.value)})("blur",function(){return n.onTouched()})},standalone:!1,features:[dt([LcA]),It]})}return t})();var Wb=class extends bB{constructor(e,A,i){super(e9(A),t9(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;at(e){return this.controls[this._adjustIndex(e)]}push(e,A={}){Array.isArray(e)?e.forEach(i=>{this.controls.push(i),this._registerControl(i)}):(this.controls.push(e),this._registerControl(e)),this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}insert(e,A,i={}){this.controls.splice(e,0,A),this._registerControl(A),this.updateValueAndValidity({emitEvent:i.emitEvent})}removeAt(e,A={}){let i=this._adjustIndex(e);i<0&&(i=0),this.controls[i]&&this.controls[i]._registerOnCollectionChange(()=>{}),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:A.emitEvent})}setControl(e,A,i={}){let n=this._adjustIndex(e);n<0&&(n=0),this.controls[n]&&this.controls[n]._registerOnCollectionChange(()=>{}),this.controls.splice(n,1),A&&(this.controls.splice(n,0,A),this._registerControl(A)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(e,A={}){dJ(this,!1,e),e.forEach((i,n)=>{IJ(this,!1,n),this.at(n).setValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(e.forEach((i,n)=>{this.at(n)&&this.at(n).patchValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e=[],A={}){this._forEachChild((i,n)=>{i.reset(e[n],Ge(cA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new hu(this))}getRawValue(){return this.controls.map(e=>e.getRawValue())}clear(e={}){this.controls.length<1||(this._forEachChild(A=>A._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:e.emitEvent}))}_adjustIndex(e){return e<0?e+this.length:e}_syncPendingControls(){let e=this.controls.reduce((A,i)=>i._syncPendingControls()?!0:A,!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){this.controls.forEach((A,i)=>{e(A,i)})}_updateValue(){this.value=this.controls.filter(e=>e.enabled||this.disabled).map(e=>e.value)}_anyControls(e){return this.controls.some(A=>A.enabled&&e(A))}_setUpControls(){this._forEachChild(e=>this._registerControl(e))}_allControlsDisabled(){for(let e of this.controls)if(e.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)}_find(e){return this.at(e)??null}};var GcA=(()=>{class t extends gC{callSetDisabledState;get submitted(){return la(this._submittedReactive)}set submitted(A){this._submittedReactive.set(A)}_submitted=Ue(()=>this._submittedReactive());_submittedReactive=jA(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];constructor(A,i,n){super(),this.callSetDisabledState=n,this._setValidators(A),this._setAsyncValidators(i)}ngOnChanges(A){this.onChanges(A)}ngOnDestroy(){this.onDestroy()}onChanges(A){this._checkFormPresent(),A.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}onDestroy(){this.form&&(yp(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get path(){return[]}addControl(A){let i=this.form.get(A.path);return uu(i,A,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(A),i}getControl(A){return this.form.get(A.path)}removeControl(A){wp(A.control||null,A,!1),RcA(this.directives,A)}addFormGroup(A){this._setUpFormContainer(A)}removeFormGroup(A){this._cleanUpFormContainer(A)}getFormGroup(A){return this.form.get(A.path)}getFormArray(A){return this.form.get(A.path)}addFormArray(A){this._setUpFormContainer(A)}removeFormArray(A){this._cleanUpFormContainer(A)}updateModel(A,i){this.form.get(A.path).setValue(i)}onReset(){this.resetForm()}resetForm(A=void 0,i={}){this.form.reset(A,i),this._submittedReactive.set(!1)}onSubmit(A){return this.submitted=!0,hJ(this.form,this.directives),this.ngSubmit.emit(A),this.form._events.next(new pp(this.control)),A?.target?.method==="dialog"}_updateDomValue(){this.directives.forEach(A=>{let i=A.control,n=this.form.get(A.path);i!==n&&(wp(i||null,A),FcA(n)&&(uu(n,A,this.callSetDisabledState),A.control=n))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(A){let i=this.form.get(A.path);QJ(i,A),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(A){if(this.form){let i=this.form.get(A.path);i&&ScA(i,A)&&i.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){i9(this.form,this),this._oldForm&&yp(this._oldForm,this)}_checkFormPresent(){this.form}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(kB,8))};static \u0275dir=OA({type:t,features:[It,ti]})}return t})();var r9=new yA(""),KcA={provide:eg,useExisting:wr(()=>v1)},v1=(()=>{class t extends eg{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(A){}model;update=new $A;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this._setValidators(A),this._setAsyncValidators(i),this.valueAccessor=o9(this,n)}ngOnChanges(A){if(this._isControlChanged(A)){let i=A.form.previousValue;i&&wp(i,this,!1),uu(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}n9(A,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&wp(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_isControlChanged(A){return A.hasOwnProperty("form")}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(Lg,10),at(r9,8),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["","formControl",""]],inputs:{form:[0,"formControl","form"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],standalone:!1,features:[dt([KcA]),It,ti]})}return t})();var UcA={provide:eg,useExisting:wr(()=>s9)},s9=(()=>{class t extends eg{_ngModelWarningConfig;_added=!1;viewModel;control;name=null;set isDisabled(A){}model;update=new $A;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=a,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=o9(this,o)}ngOnChanges(A){this._added||this._setUpControl(),n9(A,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}get path(){return BJ(this.name==null?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_setUpControl(){this.control=this.formDirective.addControl(this),this._added=!0}static \u0275fac=function(i){return new(i||t)(at(gC,13),at(a0,10),at(fu,10),at(Lg,10),at(r9,8))};static \u0275dir=OA({type:t,selectors:[["","formControlName",""]],inputs:{name:[0,"formControlName","name"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},standalone:!1,features:[dt([UcA]),It,ti]})}return t})();var JcA={provide:gC,useExisting:wr(()=>v2)},v2=(()=>{class t extends GcA{form=null;ngSubmit=new $A;get control(){return this.form}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","formGroup",""]],hostBindings:function(i,n){i&1&&tA("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{form:[0,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[dt([JcA]),It]})}return t})();function YcA(t){return typeof t=="number"?t:parseFloat(t)}var TcA=(()=>{class t{_validator=Qp;_onChange;_enabled;ngOnChanges(A){if(this.inputName in A){let i=this.normalizeInput(A[this.inputName].currentValue);this._enabled=this.enabled(i),this._validator=this._enabled?this.createValidator(i):Qp,this._onChange&&this._onChange()}}validate(A){return this._validator(A)}registerOnValidatorChange(A){this._onChange=A}enabled(A){return A!=null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,features:[ti]})}return t})();var HcA={provide:a0,useExisting:wr(()=>g9),multi:!0},g9=(()=>{class t extends TcA{min;inputName="min";normalizeInput=A=>YcA(A);createValidator=A=>tJ(A);static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(i,n){i&2&&ie("min",n._enabled?n.min:null)},inputs:{min:"min"},standalone:!1,features:[dt([HcA]),It]})}return t})();var fJ=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();function $U(t){return!!t&&(t.asyncValidators!==void 0||t.validators!==void 0||t.updateOn!==void 0)}var mJ=(()=>{class t{useNonNullable=!1;get nonNullable(){let A=new t;return A.useNonNullable=!0,A}group(A,i=null){let n=this._reduceControls(A),o={};return $U(i)?o=i:i!==null&&(o.validators=i.validator,o.asyncValidators=i.asyncValidator),new MB(n,o)}record(A,i=null){let n=this._reduceControls(A);return new Vb(n,i)}control(A,i,n){let o={};return this.useNonNullable?($U(i)?o=i:(o.validators=i,o.asyncValidators=n),new ks(A,Ge(cA({},o),{nonNullable:!0}))):new ks(A,i,n)}array(A,i,n){let o=A.map(a=>this._createControl(a));return new Wb(o,i,n)}_reduceControls(A){let i={};return Object.keys(A).forEach(n=>{i[n]=this._createControl(A[n])}),i}_createControl(A){if(A instanceof ks)return A;if(A instanceof bB)return A;if(Array.isArray(A)){let i=A[0],n=A.length>1?A[1]:null,o=A.length>2?A[2]:null;return this.control(i,n,o)}else return this.control(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Nn=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:kB,useValue:A.callSetDisabledState??bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[fJ]})}return t})(),r0=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:r9,useValue:A.warnOnNgModelWithFormControl??"always"},{provide:kB,useValue:A.callSetDisabledState??bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[fJ]})}return t})();function b1(t){return t.buttons===0||t.detail===0}function M1(t){let e=t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0];return!!e&&e.identifier===-1&&(e.radiusX==null||e.radiusX===1)&&(e.radiusY==null||e.radiusY===1)}var l9;function pJ(){if(l9==null){let t=typeof document<"u"?document.head:null;l9=!!(t&&(t.createShadowRoot||t.attachShadow))}return l9}function c9(t){if(pJ()){let e=t.getRootNode?t.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&e instanceof ShadowRoot)return e}return null}function mu(){let t=typeof document<"u"&&document?document.activeElement:null;for(;t&&t.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}function Jr(t){return t.composedPath?t.composedPath()[0]:t.target}var C9;try{C9=typeof Intl<"u"&&Intl.v8BreakIterator}catch{C9=!1}var Ii=(()=>{class t{_platformId=h(np);isBrowser=this._platformId?sC(this._platformId):typeof document=="object"&&!!document;EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent);TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent);BLINK=this.isBrowser&&!!(window.chrome||C9)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT;WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT;IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window);FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent);ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT;SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT;constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var pu;function wJ(){if(pu==null&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>pu=!0}))}finally{pu=pu||!1}return pu}function b2(t){return wJ()?t:!!t.capture}function tg(t,e=0){return Mp(t)?Number(t):arguments.length===2?e:0}function Mp(t){return!isNaN(parseFloat(t))&&!isNaN(Number(t))}function xs(t){return t instanceof ge?t.nativeElement:t}var DJ=new yA("cdk-input-modality-detector-options"),yJ={ignoreKeys:[18,17,224,91,16]},vJ=650,I9={passive:!0,capture:!0},bJ=(()=>{class t{_platform=h(Ii);_listenerCleanups;modalityDetected;modalityChanged;get mostRecentModality(){return this._modality.value}_mostRecentTarget=null;_modality=new Ht(null);_options;_lastTouchMs=0;_onKeydown=A=>{this._options?.ignoreKeys?.some(i=>i===A.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=Jr(A))};_onMousedown=A=>{Date.now()-this._lastTouchMs{if(M1(A)){this._modality.next("keyboard");return}this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=Jr(A)};constructor(){let A=h(Oe),i=h(Xt),n=h(DJ,{optional:!0});if(this._options=cA(cA({},yJ),n),this.modalityDetected=this._modality.pipe(Fg(1)),this.modalityChanged=this.modalityDetected.pipe(Vl()),this._platform.isBrowser){let o=h(Kr).createRenderer(null,null);this._listenerCleanups=A.runOutsideAngular(()=>[o.listen(i,"keydown",this._onKeydown,I9),o.listen(i,"mousedown",this._onMousedown,I9),o.listen(i,"touchstart",this._onTouchstart,I9)])}}ngOnDestroy(){this._modality.complete(),this._listenerCleanups?.forEach(A=>A())}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),wu=(function(t){return t[t.IMMEDIATE=0]="IMMEDIATE",t[t.EVENTUAL=1]="EVENTUAL",t})(wu||{}),MJ=new yA("cdk-focus-monitor-default-options"),kp=b2({passive:!0,capture:!0}),ar=(()=>{class t{_ngZone=h(Oe);_platform=h(Ii);_inputModalityDetector=h(bJ);_origin=null;_lastFocusOrigin=null;_windowFocused=!1;_windowFocusTimeoutId;_originTimeoutId;_originFromTouchInteraction=!1;_elementInfo=new Map;_monitoredElementCount=0;_rootNodeFocusListenerCount=new Map;_detectionMode;_windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=setTimeout(()=>this._windowFocused=!1)};_document=h(Xt);_stopInputModalityDetector=new XA;constructor(){let A=h(MJ,{optional:!0});this._detectionMode=A?.detectionMode||wu.IMMEDIATE}_rootNodeFocusAndBlurListener=A=>{let i=Jr(A);for(let n=i;n;n=n.parentElement)A.type==="focus"?this._onFocus(A,n):this._onBlur(A,n)};monitor(A,i=!1){let n=xs(A);if(!this._platform.isBrowser||n.nodeType!==1)return se();let o=c9(n)||this._document,a=this._elementInfo.get(n);if(a)return i&&(a.checkChildren=!0),a.subject;let r={checkChildren:i,subject:new XA,rootNode:o};return this._elementInfo.set(n,r),this._registerGlobalListeners(r),r.subject}stopMonitoring(A){let i=xs(A),n=this._elementInfo.get(i);n&&(n.subject.complete(),this._setClasses(i),this._elementInfo.delete(i),this._removeGlobalListeners(n))}focusVia(A,i,n){let o=xs(A),a=this._document.activeElement;o===a?this._getClosestElementsInfo(o).forEach(([r,s])=>this._originChanged(r,i,s)):(this._setOrigin(i),typeof o.focus=="function"&&o.focus(n))}ngOnDestroy(){this._elementInfo.forEach((A,i)=>this.stopMonitoring(i))}_getWindow(){return this._document.defaultView||window}_getFocusOrigin(A){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(A)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:A&&this._isLastInteractionFromInputLabel(A)?"mouse":"program"}_shouldBeAttributedToTouch(A){return this._detectionMode===wu.EVENTUAL||!!A?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(A,i){A.classList.toggle("cdk-focused",!!i),A.classList.toggle("cdk-touch-focused",i==="touch"),A.classList.toggle("cdk-keyboard-focused",i==="keyboard"),A.classList.toggle("cdk-mouse-focused",i==="mouse"),A.classList.toggle("cdk-program-focused",i==="program")}_setOrigin(A,i=!1){this._ngZone.runOutsideAngular(()=>{if(this._origin=A,this._originFromTouchInteraction=A==="touch"&&i,this._detectionMode===wu.IMMEDIATE){clearTimeout(this._originTimeoutId);let n=this._originFromTouchInteraction?vJ:1;this._originTimeoutId=setTimeout(()=>this._origin=null,n)}})}_onFocus(A,i){let n=this._elementInfo.get(i),o=Jr(A);!n||!n.checkChildren&&i!==o||this._originChanged(i,this._getFocusOrigin(o),n)}_onBlur(A,i){let n=this._elementInfo.get(i);!n||n.checkChildren&&A.relatedTarget instanceof Node&&i.contains(A.relatedTarget)||(this._setClasses(i),this._emitOrigin(n,null))}_emitOrigin(A,i){A.subject.observers.length&&this._ngZone.run(()=>A.subject.next(i))}_registerGlobalListeners(A){if(!this._platform.isBrowser)return;let i=A.rootNode,n=this._rootNodeFocusListenerCount.get(i)||0;n||this._ngZone.runOutsideAngular(()=>{i.addEventListener("focus",this._rootNodeFocusAndBlurListener,kp),i.addEventListener("blur",this._rootNodeFocusAndBlurListener,kp)}),this._rootNodeFocusListenerCount.set(i,n+1),++this._monitoredElementCount===1&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(Bt(this._stopInputModalityDetector)).subscribe(o=>{this._setOrigin(o,!0)}))}_removeGlobalListeners(A){let i=A.rootNode;if(this._rootNodeFocusListenerCount.has(i)){let n=this._rootNodeFocusListenerCount.get(i);n>1?this._rootNodeFocusListenerCount.set(i,n-1):(i.removeEventListener("focus",this._rootNodeFocusAndBlurListener,kp),i.removeEventListener("blur",this._rootNodeFocusAndBlurListener,kp),this._rootNodeFocusListenerCount.delete(i))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(A,i,n){this._setClasses(A,i),this._emitOrigin(n,i),this._lastFocusOrigin=i}_getClosestElementsInfo(A){let i=[];return this._elementInfo.forEach((n,o)=>{(o===A||n.checkChildren&&o.contains(A))&&i.push([o,n])}),i}_isLastInteractionFromInputLabel(A){let{_mostRecentTarget:i,mostRecentModality:n}=this._inputModalityDetector;if(n!=="mouse"||!i||i===A||A.nodeName!=="INPUT"&&A.nodeName!=="TEXTAREA"||A.disabled)return!1;let o=A.labels;if(o){for(let a=0;a{class t{_elementRef=h(ge);_focusMonitor=h(ar);_monitorSubscription;_focusOrigin=null;cdkFocusChange=new $A;constructor(){}get focusOrigin(){return this._focusOrigin}ngAfterViewInit(){let A=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(A,A.nodeType===1&&A.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(i=>{this._focusOrigin=i,this.cdkFocusChange.emit(i)})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkMonitorElementFocus",""],["","cdkMonitorSubtreeFocus",""]],outputs:{cdkFocusChange:"cdkFocusChange"},exportAs:["cdkMonitorFocus"]})}return t})();var Sp=new WeakMap,Xn=(()=>{class t{_appRef;_injector=h(ft);_environmentInjector=h(Gr);load(A){let i=this._appRef=this._appRef||this._injector.get(oC),n=Sp.get(i);n||(n={loaders:new Set,refs:[]},Sp.set(i,n),i.onDestroy(()=>{Sp.get(i)?.refs.forEach(o=>o.destroy()),Sp.delete(i)})),n.loaders.has(A)||(n.loaders.add(A),n.refs.push(Ip(A,{environmentInjector:this._environmentInjector})))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var M2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],exportAs:["cdkVisuallyHidden"],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0} -`],encapsulation:2,changeDetection:0})}return t})(),xp;function zcA(){if(xp===void 0&&(xp=null,typeof window<"u")){let t=window;t.trustedTypes!==void 0&&(xp=t.trustedTypes.createPolicy("angular#components",{createHTML:e=>e}))}return xp}function k1(t){return zcA()?.createHTML(t)||t}function kJ(t,e,A){let i=A.sanitize(Wl.HTML,e);t.innerHTML=k1(i||"")}function xB(t){return Array.isArray(t)?t:[t]}var SJ=new Set,S1,RB=(()=>{class t{_platform=h(Ii);_nonce=h(QU,{optional:!0});_matchMedia;constructor(){this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):PcA}matchMedia(A){return(this._platform.WEBKIT||this._platform.BLINK)&&OcA(A,this._nonce),this._matchMedia(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function OcA(t,e){if(!SJ.has(t))try{S1||(S1=document.createElement("style"),e&&S1.setAttribute("nonce",e),S1.setAttribute("type","text/css"),document.head.appendChild(S1)),S1.sheet&&(S1.sheet.insertRule(`@media ${t} {body{ }}`,0),SJ.add(t))}catch(A){console.error(A)}}function PcA(t){return{matches:t==="all"||t==="",media:t,addListener:()=>{},removeListener:()=>{}}}var Du=(()=>{class t{_mediaMatcher=h(RB);_zone=h(Oe);_queries=new Map;_destroySubject=new XA;constructor(){}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(A){return xJ(xB(A)).some(n=>this._registerQuery(n).mql.matches)}observe(A){let n=xJ(xB(A)).map(a=>this._registerQuery(a).observable),o=Ir(n);return o=Xm(o.pipe(oo(1)),o.pipe(Fg(1),Os(0))),o.pipe(fe(a=>{let r={matches:!1,breakpoints:{}};return a.forEach(({matches:s,query:g})=>{r.matches=r.matches||s,r.breakpoints[g]=s}),r}))}_registerQuery(A){if(this._queries.has(A))return this._queries.get(A);let i=this._mediaMatcher.matchMedia(A),o={observable:new $i(a=>{let r=s=>this._zone.run(()=>a.next(s));return i.addListener(r),()=>{i.removeListener(r)}}).pipe(cn(i),fe(({matches:a})=>({query:A,matches:a})),Bt(this._destroySubject)),mql:i};return this._queries.set(A,o),o}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function xJ(t){return t.map(e=>e.split(",")).reduce((e,A)=>e.concat(A)).map(e=>e.trim())}function jcA(t){if(t.type==="characterData"&&t.target instanceof Comment)return!0;if(t.type==="childList"){for(let e=0;e{class t{create(A){return typeof MutationObserver>"u"?null:new MutationObserver(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),NJ=(()=>{class t{_mutationObserverFactory=h(RJ);_observedElements=new Map;_ngZone=h(Oe);constructor(){}ngOnDestroy(){this._observedElements.forEach((A,i)=>this._cleanupObserver(i))}observe(A){let i=xs(A);return new $i(n=>{let a=this._observeElement(i).pipe(fe(r=>r.filter(s=>!jcA(s))),Ze(r=>!!r.length)).subscribe(r=>{this._ngZone.run(()=>{n.next(r)})});return()=>{a.unsubscribe(),this._unobserveElement(i)}})}_observeElement(A){return this._ngZone.runOutsideAngular(()=>{if(this._observedElements.has(A))this._observedElements.get(A).count++;else{let i=new XA,n=this._mutationObserverFactory.create(o=>i.next(o));n&&n.observe(A,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(A,{observer:n,stream:i,count:1})}return this._observedElements.get(A).stream})}_unobserveElement(A){this._observedElements.has(A)&&(this._observedElements.get(A).count--,this._observedElements.get(A).count||this._cleanupObserver(A))}_cleanupObserver(A){if(this._observedElements.has(A)){let{observer:i,stream:n}=this._observedElements.get(A);i&&i.disconnect(),n.complete(),this._observedElements.delete(A)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),FJ=(()=>{class t{_contentObserver=h(NJ);_elementRef=h(ge);event=new $A;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._disabled?this._unsubscribe():this._subscribe()}_disabled=!1;get debounce(){return this._debounce}set debounce(A){this._debounce=tg(A),this._subscribe()}_debounce;_currentSubscription=null;constructor(){}ngAfterContentInit(){!this._currentSubscription&&!this.disabled&&this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();let A=this._contentObserver.observe(this._elementRef);this._currentSubscription=(this.debounce?A.pipe(Os(this.debounce)):A).subscribe(this.event)}_unsubscribe(){this._currentSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkObserveContent",""]],inputs:{disabled:[2,"cdkObserveContentDisabled","disabled",he],debounce:"debounce"},outputs:{event:"cdkObserveContent"},exportAs:["cdkObserveContent"]})}return t})(),Rp=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[RJ]})}return t})();var NB=(()=>{class t{_platform=h(Ii);constructor(){}isDisabled(A){return A.hasAttribute("disabled")}isVisible(A){return VcA(A)&&getComputedStyle(A).visibility==="visible"}isTabbable(A){if(!this._platform.isBrowser)return!1;let i=qcA(i0A(A));if(i&&(_J(i)===-1||!this.isVisible(i)))return!1;let n=A.nodeName.toLowerCase(),o=_J(A);return A.hasAttribute("contenteditable")?o!==-1:n==="iframe"||n==="object"||this._platform.WEBKIT&&this._platform.IOS&&!e0A(A)?!1:n==="audio"?A.hasAttribute("controls")?o!==-1:!1:n==="video"?o===-1?!1:o!==null?!0:this._platform.FIREFOX||A.hasAttribute("controls"):A.tabIndex>=0}isFocusable(A,i){return t0A(A)&&!this.isDisabled(A)&&(i?.ignoreVisibility||this.isVisible(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function qcA(t){try{return t.frameElement}catch{return null}}function VcA(t){return!!(t.offsetWidth||t.offsetHeight||typeof t.getClientRects=="function"&&t.getClientRects().length)}function WcA(t){let e=t.nodeName.toLowerCase();return e==="input"||e==="select"||e==="button"||e==="textarea"}function ZcA(t){return $cA(t)&&t.type=="hidden"}function XcA(t){return A0A(t)&&t.hasAttribute("href")}function $cA(t){return t.nodeName.toLowerCase()=="input"}function A0A(t){return t.nodeName.toLowerCase()=="a"}function KJ(t){if(!t.hasAttribute("tabindex")||t.tabIndex===void 0)return!1;let e=t.getAttribute("tabindex");return!!(e&&!isNaN(parseInt(e,10)))}function _J(t){if(!KJ(t))return null;let e=parseInt(t.getAttribute("tabindex")||"",10);return isNaN(e)?-1:e}function e0A(t){let e=t.nodeName.toLowerCase(),A=e==="input"&&t.type;return A==="text"||A==="password"||e==="select"||e==="textarea"}function t0A(t){return ZcA(t)?!1:WcA(t)||XcA(t)||t.hasAttribute("contenteditable")||KJ(t)}function i0A(t){return t.ownerDocument&&t.ownerDocument.defaultView||window}var Np=class{_element;_checker;_ngZone;_document;_injector;_startAnchor=null;_endAnchor=null;_hasAttached=!1;startAnchorListener=()=>this.focusLastTabbableElement();endAnchorListener=()=>this.focusFirstTabbableElement();get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_enabled=!0;constructor(e,A,i,n,o=!1,a){this._element=e,this._checker=A,this._ngZone=i,this._document=n,this._injector=a,o||this.attachAnchors()}destroy(){let e=this._startAnchor,A=this._endAnchor;e&&(e.removeEventListener("focus",this.startAnchorListener),e.remove()),A&&(A.removeEventListener("focus",this.endAnchorListener),A.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return this._hasAttached?!0:(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusInitialElement(e)))})}focusFirstTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusFirstTabbableElement(e)))})}focusLastTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusLastTabbableElement(e)))})}_getRegionBoundary(e){let A=this._element.querySelectorAll(`[cdk-focus-region-${e}], [cdkFocusRegion${e}], [cdk-focus-${e}]`);return e=="start"?A.length?A[0]:this._getFirstTabbableElement(this._element):A.length?A[A.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(e){let A=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(A){if(!this._checker.isFocusable(A)){let i=this._getFirstTabbableElement(A);return i?.focus(e),!!i}return A.focus(e),!0}return this.focusFirstTabbableElement(e)}focusFirstTabbableElement(e){let A=this._getRegionBoundary("start");return A&&A.focus(e),!!A}focusLastTabbableElement(e){let A=this._getRegionBoundary("end");return A&&A.focus(e),!!A}hasAttached(){return this._hasAttached}_getFirstTabbableElement(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;let A=e.children;for(let i=0;i=0;i--){let n=A[i].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(A[i]):null;if(n)return n}return null}_createAnchor(){let e=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,e),e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e.setAttribute("aria-hidden","true"),e}_toggleAnchorTabIndex(e,A){e?A.setAttribute("tabindex","0"):A.removeAttribute("tabindex")}toggleAnchors(e){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_executeOnStable(e){this._injector?Yn(e,{injector:this._injector}):setTimeout(e)}},yu=(()=>{class t{_checker=h(NB);_ngZone=h(Oe);_document=h(Xt);_injector=h(ft);constructor(){h(Xn).load(M2)}create(A,i=!1){return new Np(A,this._checker,this._ngZone,this._document,i,this._injector)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var UJ=new yA("liveAnnouncerElement",{providedIn:"root",factory:()=>null}),JJ=new yA("LIVE_ANNOUNCER_DEFAULT_OPTIONS"),n0A=0,vu=(()=>{class t{_ngZone=h(Oe);_defaultOptions=h(JJ,{optional:!0});_liveElement;_document=h(Xt);_sanitizer=h($s);_previousTimeout;_currentPromise;_currentResolve;constructor(){let A=h(UJ,{optional:!0});this._liveElement=A||this._createLiveElement()}announce(A,...i){let n=this._defaultOptions,o,a;return i.length===1&&typeof i[0]=="number"?a=i[0]:[o,a]=i,this.clear(),clearTimeout(this._previousTimeout),o||(o=n&&n.politeness?n.politeness:"polite"),a==null&&n&&(a=n.duration),this._liveElement.setAttribute("aria-live",o),this._liveElement.id&&this._exposeAnnouncerToModals(this._liveElement.id),this._ngZone.runOutsideAngular(()=>(this._currentPromise||(this._currentPromise=new Promise(r=>this._currentResolve=r)),clearTimeout(this._previousTimeout),this._previousTimeout=setTimeout(()=>{!A||typeof A=="string"?this._liveElement.textContent=A:kJ(this._liveElement,A,this._sanitizer),typeof a=="number"&&(this._previousTimeout=setTimeout(()=>this.clear(),a)),this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0},100),this._currentPromise))}clear(){this._liveElement&&(this._liveElement.textContent="")}ngOnDestroy(){clearTimeout(this._previousTimeout),this._liveElement?.remove(),this._liveElement=null,this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0}_createLiveElement(){let A="cdk-live-announcer-element",i=this._document.getElementsByClassName(A),n=this._document.createElement("div");for(let o=0;o .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{class t{_platform=h(Ii);_hasCheckedHighContrastMode=!1;_document=h(Xt);_breakpointSubscription;constructor(){this._breakpointSubscription=h(Du).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return k2.NONE;let A=this._document.createElement("div");A.style.backgroundColor="rgb(1,2,3)",A.style.position="absolute",this._document.body.appendChild(A);let i=this._document.defaultView||window,n=i&&i.getComputedStyle?i.getComputedStyle(A):null,o=(n&&n.backgroundColor||"").replace(/ /g,"");switch(A.remove(),o){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return k2.WHITE_ON_BLACK;case"rgb(255,255,255)":case"rgb(255,250,239)":return k2.BLACK_ON_WHITE}return k2.NONE}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){let A=this._document.body.classList;A.remove(B9,LJ,GJ),this._hasCheckedHighContrastMode=!0;let i=this.getHighContrastMode();i===k2.BLACK_ON_WHITE?A.add(B9,LJ):i===k2.WHITE_ON_BLACK&&A.add(B9,GJ)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),bu=(()=>{class t{constructor(){h(YJ)._applyBodyHighContrastModeCssClasses()}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Rp]})}return t})();var E9={},an=class t{_appId=h(ip);static _infix=`a${Math.floor(Math.random()*1e5).toString()}`;getId(e,A=!1){return this._appId!=="ng"&&(e+=this._appId),E9.hasOwnProperty(e)||(E9[e]=0),`${e}${A?t._infix+"-":""}${E9[e]++}`}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var o0A=200,Fp=class{_letterKeyStream=new XA;_items=[];_selectedItemIndex=-1;_pressedLetters=[];_skipPredicateFn;_selectedItem=new XA;selectedItem=this._selectedItem;constructor(e,A){let i=typeof A?.debounceInterval=="number"?A.debounceInterval:o0A;A?.skipPredicate&&(this._skipPredicateFn=A.skipPredicate),this.setItems(e),this._setupKeyHandler(i)}destroy(){this._pressedLetters=[],this._letterKeyStream.complete(),this._selectedItem.complete()}setCurrentSelectedItemIndex(e){this._selectedItemIndex=e}setItems(e){this._items=e}handleKey(e){let A=e.keyCode;e.key&&e.key.length===1?this._letterKeyStream.next(e.key.toLocaleUpperCase()):(A>=65&&A<=90||A>=48&&A<=57)&&this._letterKeyStream.next(String.fromCharCode(A))}isTyping(){return this._pressedLetters.length>0}reset(){this._pressedLetters=[]}_setupKeyHandler(e){this._letterKeyStream.pipe(oi(A=>this._pressedLetters.push(A)),Os(e),Ze(()=>this._pressedLetters.length>0),fe(()=>this._pressedLetters.join("").toLocaleUpperCase())).subscribe(A=>{for(let i=1;it[A]):t.altKey||t.shiftKey||t.ctrlKey||t.metaKey}var FB=class{_items;_activeItemIndex=jA(-1);_activeItem=jA(null);_wrap=!1;_typeaheadSubscription=Jn.EMPTY;_itemChangesSubscription;_vertical=!0;_horizontal=null;_allowedModifierKeys=[];_homeAndEnd=!1;_pageUpAndDown={enabled:!1,delta:10};_effectRef;_typeahead;_skipPredicateFn=e=>e.disabled;constructor(e,A){this._items=e,e instanceof ol?this._itemChangesSubscription=e.changes.subscribe(i=>this._itemsChanged(i.toArray())):w1(e)&&(this._effectRef=Ga(()=>this._itemsChanged(e()),{injector:A}))}tabOut=new XA;change=new XA;skipPredicate(e){return this._skipPredicateFn=e,this}withWrap(e=!0){return this._wrap=e,this}withVerticalOrientation(e=!0){return this._vertical=e,this}withHorizontalOrientation(e){return this._horizontal=e,this}withAllowedModifierKeys(e){return this._allowedModifierKeys=e,this}withTypeAhead(e=200){this._typeaheadSubscription.unsubscribe();let A=this._getItemsArray();return this._typeahead=new Fp(A,{debounceInterval:typeof e=="number"?e:void 0,skipPredicate:i=>this._skipPredicateFn(i)}),this._typeaheadSubscription=this._typeahead.selectedItem.subscribe(i=>{this.setActiveItem(i)}),this}cancelTypeahead(){return this._typeahead?.reset(),this}withHomeAndEnd(e=!0){return this._homeAndEnd=e,this}withPageUpDown(e=!0,A=10){return this._pageUpAndDown={enabled:e,delta:A},this}setActiveItem(e){let A=this._activeItem();this.updateActiveItem(e),this._activeItem()!==A&&this.change.next(this._activeItemIndex())}onKeydown(e){let A=e.keyCode,n=["altKey","ctrlKey","metaKey","shiftKey"].every(o=>!e[o]||this._allowedModifierKeys.indexOf(o)>-1);switch(A){case 9:this.tabOut.next();return;case 40:if(this._vertical&&n){this.setNextItemActive();break}else return;case 38:if(this._vertical&&n){this.setPreviousItemActive();break}else return;case 39:if(this._horizontal&&n){this._horizontal==="rtl"?this.setPreviousItemActive():this.setNextItemActive();break}else return;case 37:if(this._horizontal&&n){this._horizontal==="rtl"?this.setNextItemActive():this.setPreviousItemActive();break}else return;case 36:if(this._homeAndEnd&&n){this.setFirstItemActive();break}else return;case 35:if(this._homeAndEnd&&n){this.setLastItemActive();break}else return;case 33:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()-this._pageUpAndDown.delta;this._setActiveItemByIndex(o>0?o:0,1);break}else return;case 34:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()+this._pageUpAndDown.delta,a=this._getItemsArray().length;this._setActiveItemByIndex(o-1&&i!==this._activeItemIndex()&&(this._activeItemIndex.set(i),this._typeahead?.setCurrentSelectedItemIndex(i))}}};var Ru=class extends FB{setActiveItem(e){this.activeItem&&this.activeItem.setInactiveStyles(),super.setActiveItem(e),this.activeItem&&this.activeItem.setActiveStyles()}};var s0=class extends FB{_origin="program";setFocusOrigin(e){return this._origin=e,this}setActiveItem(e){super.setActiveItem(e),this.activeItem&&this.activeItem.focus(this._origin)}};var zJ=" ";function u9(t,e,A){let i=Lp(t,e);A=A.trim(),!i.some(n=>n.trim()===A)&&(i.push(A),t.setAttribute(e,i.join(zJ)))}function Gp(t,e,A){let i=Lp(t,e);A=A.trim();let n=i.filter(o=>o!==A);n.length?t.setAttribute(e,n.join(zJ)):t.removeAttribute(e)}function Lp(t,e){return t.getAttribute(e)?.match(/\S+/g)??[]}var OJ="cdk-describedby-message",_p="cdk-describedby-host",h9=0,PJ=(()=>{class t{_platform=h(Ii);_document=h(Xt);_messageRegistry=new Map;_messagesContainer=null;_id=`${h9++}`;constructor(){h(Xn).load(M2),this._id=h(ip)+"-"+h9++}describe(A,i,n){if(!this._canBeDescribed(A,i))return;let o=Q9(i,n);typeof i!="string"?(HJ(i,this._id),this._messageRegistry.set(o,{messageElement:i,referenceCount:0})):this._messageRegistry.has(o)||this._createMessageElement(i,n),this._isElementDescribedByMessage(A,o)||this._addMessageReference(A,o)}removeDescription(A,i,n){if(!i||!this._isElementNode(A))return;let o=Q9(i,n);if(this._isElementDescribedByMessage(A,o)&&this._removeMessageReference(A,o),typeof i=="string"){let a=this._messageRegistry.get(o);a&&a.referenceCount===0&&this._deleteMessageElement(o)}this._messagesContainer?.childNodes.length===0&&(this._messagesContainer.remove(),this._messagesContainer=null)}ngOnDestroy(){let A=this._document.querySelectorAll(`[${_p}="${this._id}"]`);for(let i=0;in.indexOf(OJ)!=0);A.setAttribute("aria-describedby",i.join(" "))}_addMessageReference(A,i){let n=this._messageRegistry.get(i);u9(A,"aria-describedby",n.messageElement.id),A.setAttribute(_p,this._id),n.referenceCount++}_removeMessageReference(A,i){let n=this._messageRegistry.get(i);n.referenceCount--,Gp(A,"aria-describedby",n.messageElement.id),A.removeAttribute(_p)}_isElementDescribedByMessage(A,i){let n=Lp(A,"aria-describedby"),o=this._messageRegistry.get(i),a=o&&o.messageElement.id;return!!a&&n.indexOf(a)!=-1}_canBeDescribed(A,i){if(!this._isElementNode(A))return!1;if(i&&typeof i=="object")return!0;let n=i==null?"":`${i}`.trim(),o=A.getAttribute("aria-label");return n?!o||o.trim()!==n:!1}_isElementNode(A){return A.nodeType===this._document.ELEMENT_NODE}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Q9(t,e){return typeof t=="string"?`${e||""}/${t}`:t}function HJ(t,e){t.id||(t.id=`${OJ}-${e}-${h9++}`)}var Xl=(function(t){return t[t.NORMAL=0]="NORMAL",t[t.NEGATED=1]="NEGATED",t[t.INVERTED=2]="INVERTED",t})(Xl||{}),Kp,x1;function Up(){if(x1==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return x1=!1,x1;if(document.documentElement?.style&&"scrollBehavior"in document.documentElement.style)x1=!0;else{let t=Element.prototype.scrollTo;t?x1=!/\{\s*\[native code\]\s*\}/.test(t.toString()):x1=!1}}return x1}function _B(){if(typeof document!="object"||!document)return Xl.NORMAL;if(Kp==null){let t=document.createElement("div"),e=t.style;t.dir="rtl",e.width="1px",e.overflow="auto",e.visibility="hidden",e.pointerEvents="none",e.position="absolute";let A=document.createElement("div"),i=A.style;i.width="2px",i.height="1px",t.appendChild(A),document.body.appendChild(t),Kp=Xl.NORMAL,t.scrollLeft===0&&(t.scrollLeft=1,Kp=t.scrollLeft===0?Xl.NEGATED:Xl.INVERTED),t.remove()}return Kp}function f9(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}var LB,jJ=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"];function m9(){if(LB)return LB;if(typeof document!="object"||!document)return LB=new Set(jJ),LB;let t=document.createElement("input");return LB=new Set(jJ.filter(e=>(t.setAttribute("type",e),t.type===e))),LB}var qJ={XSmall:"(max-width: 599.98px)",Small:"(min-width: 600px) and (max-width: 959.98px)",Medium:"(min-width: 960px) and (max-width: 1279.98px)",Large:"(min-width: 1280px) and (max-width: 1919.98px)",XLarge:"(min-width: 1920px)",Handset:"(max-width: 599.98px) and (orientation: portrait), (max-width: 959.98px) and (orientation: landscape)",Tablet:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",Web:"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)",HandsetPortrait:"(max-width: 599.98px) and (orientation: portrait)",TabletPortrait:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)",WebPortrait:"(min-width: 840px) and (orientation: portrait)",HandsetLandscape:"(max-width: 959.98px) and (orientation: landscape)",TabletLandscape:"(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",WebLandscape:"(min-width: 1280px) and (orientation: landscape)"};var r0A=new yA("MATERIAL_ANIMATIONS"),VJ=null;function Nu(){return h(r0A,{optional:!0})?.animationsDisabled||h(p1,{optional:!0})==="NoopAnimations"?"di-disabled":(VJ??=h(RB).matchMedia("(prefers-reduced-motion)").matches,VJ?"reduced-motion":"enabled")}function ji(){return Nu()!=="enabled"}function Va(t){return t==null?"":typeof t=="string"?t:`${t}px`}function yr(t){return t!=null&&`${t}`!="false"}var Rs=(function(t){return t[t.FADING_IN=0]="FADING_IN",t[t.VISIBLE=1]="VISIBLE",t[t.FADING_OUT=2]="FADING_OUT",t[t.HIDDEN=3]="HIDDEN",t})(Rs||{}),p9=class{_renderer;element;config;_animationForciblyDisabledThroughCss;state=Rs.HIDDEN;constructor(e,A,i,n=!1){this._renderer=e,this.element=A,this.config=i,this._animationForciblyDisabledThroughCss=n}fadeOut(){this._renderer.fadeOutRipple(this)}},WJ=b2({passive:!0,capture:!0}),w9=class{_events=new Map;addHandler(e,A,i,n){let o=this._events.get(A);if(o){let a=o.get(i);a?a.add(n):o.set(i,new Set([n]))}else this._events.set(A,new Map([[i,new Set([n])]])),e.runOutsideAngular(()=>{document.addEventListener(A,this._delegateEventHandler,WJ)})}removeHandler(e,A,i){let n=this._events.get(e);if(!n)return;let o=n.get(A);o&&(o.delete(i),o.size===0&&n.delete(A),n.size===0&&(this._events.delete(e),document.removeEventListener(e,this._delegateEventHandler,WJ)))}_delegateEventHandler=e=>{let A=Jr(e);A&&this._events.get(e.type)?.forEach((i,n)=>{(n===A||n.contains(A))&&i.forEach(o=>o.handleEvent(e))})}},Fu={enterDuration:225,exitDuration:150},s0A=800,ZJ=b2({passive:!0,capture:!0}),XJ=["mousedown","touchstart"],$J=["mouseup","mouseleave","touchend","touchcancel"],g0A=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["mat-ripple-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface) 10%, transparent))}@media(forced-colors: active){.mat-ripple-element{display:none}}.cdk-drag-preview .mat-ripple-element,.cdk-drag-placeholder .mat-ripple-element{display:none} -`],encapsulation:2,changeDetection:0})}return t})(),_u=class t{_target;_ngZone;_platform;_containerElement;_triggerElement=null;_isPointerDown=!1;_activeRipples=new Map;_mostRecentTransientRipple=null;_lastTouchStartEvent;_pointerUpEventsRegistered=!1;_containerRect=null;static _eventManager=new w9;constructor(e,A,i,n,o){this._target=e,this._ngZone=A,this._platform=n,n.isBrowser&&(this._containerElement=xs(i)),o&&o.get(Xn).load(g0A)}fadeInRipple(e,A,i={}){let n=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),o=cA(cA({},Fu),i.animation);i.centered&&(e=n.left+n.width/2,A=n.top+n.height/2);let a=i.radius||l0A(e,A,n),r=e-n.left,s=A-n.top,g=o.enterDuration,l=document.createElement("div");l.classList.add("mat-ripple-element"),l.style.left=`${r-a}px`,l.style.top=`${s-a}px`,l.style.height=`${a*2}px`,l.style.width=`${a*2}px`,i.color!=null&&(l.style.backgroundColor=i.color),l.style.transitionDuration=`${g}ms`,this._containerElement.appendChild(l);let C=window.getComputedStyle(l),I=C.transitionProperty,d=C.transitionDuration,B=I==="none"||d==="0s"||d==="0s, 0s"||n.width===0&&n.height===0,E=new p9(this,l,i,B);l.style.transform="scale3d(1, 1, 1)",E.state=Rs.FADING_IN,i.persistent||(this._mostRecentTransientRipple=E);let Q=null;return!B&&(g||o.exitDuration)&&this._ngZone.runOutsideAngular(()=>{let f=()=>{Q&&(Q.fallbackTimer=null),clearTimeout(S),this._finishRippleTransition(E)},b=()=>this._destroyRipple(E),S=setTimeout(b,g+100);l.addEventListener("transitionend",f),l.addEventListener("transitioncancel",b),Q={onTransitionEnd:f,onTransitionCancel:b,fallbackTimer:S}}),this._activeRipples.set(E,Q),(B||!g)&&this._finishRippleTransition(E),E}fadeOutRipple(e){if(e.state===Rs.FADING_OUT||e.state===Rs.HIDDEN)return;let A=e.element,i=cA(cA({},Fu),e.config.animation);A.style.transitionDuration=`${i.exitDuration}ms`,A.style.opacity="0",e.state=Rs.FADING_OUT,(e._animationForciblyDisabledThroughCss||!i.exitDuration)&&this._finishRippleTransition(e)}fadeOutAll(){this._getActiveRipples().forEach(e=>e.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(e=>{e.config.persistent||e.fadeOut()})}setupTriggerEvents(e){let A=xs(e);!this._platform.isBrowser||!A||A===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=A,XJ.forEach(i=>{t._eventManager.addHandler(this._ngZone,i,A,this)}))}handleEvent(e){e.type==="mousedown"?this._onMousedown(e):e.type==="touchstart"?this._onTouchStart(e):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{$J.forEach(A=>{this._triggerElement.addEventListener(A,this,ZJ)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(e){e.state===Rs.FADING_IN?this._startFadeOutTransition(e):e.state===Rs.FADING_OUT&&this._destroyRipple(e)}_startFadeOutTransition(e){let A=e===this._mostRecentTransientRipple,{persistent:i}=e.config;e.state=Rs.VISIBLE,!i&&(!A||!this._isPointerDown)&&e.fadeOut()}_destroyRipple(e){let A=this._activeRipples.get(e)??null;this._activeRipples.delete(e),this._activeRipples.size||(this._containerRect=null),e===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),e.state=Rs.HIDDEN,A!==null&&(e.element.removeEventListener("transitionend",A.onTransitionEnd),e.element.removeEventListener("transitioncancel",A.onTransitionCancel),A.fallbackTimer!==null&&clearTimeout(A.fallbackTimer)),e.element.remove()}_onMousedown(e){let A=b1(e),i=this._lastTouchStartEvent&&Date.now(){let A=e.state===Rs.VISIBLE||e.config.terminateOnPointerUp&&e.state===Rs.FADING_IN;!e.config.persistent&&A&&e.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){let e=this._triggerElement;e&&(XJ.forEach(A=>t._eventManager.removeHandler(A,e,this)),this._pointerUpEventsRegistered&&($J.forEach(A=>e.removeEventListener(A,this,ZJ)),this._pointerUpEventsRegistered=!1))}};function l0A(t,e,A){let i=Math.max(Math.abs(t-A.left),Math.abs(t-A.right)),n=Math.max(Math.abs(e-A.top),Math.abs(e-A.bottom));return Math.sqrt(i*i+n*n)}var S2=new yA("mat-ripple-global-options"),ig=(()=>{class t{_elementRef=h(ge);_animationsDisabled=ji();color;unbounded=!1;centered=!1;radius=0;animation;get disabled(){return this._disabled}set disabled(A){A&&this.fadeOutAllNonPersistent(),this._disabled=A,this._setupTriggerEventsIfEnabled()}_disabled=!1;get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(A){this._trigger=A,this._setupTriggerEventsIfEnabled()}_trigger;_rippleRenderer;_globalOptions;_isInitialized=!1;constructor(){let A=h(Oe),i=h(Ii),n=h(S2,{optional:!0}),o=h(ft);this._globalOptions=n||{},this._rippleRenderer=new _u(this,A,this._elementRef,i,o)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:cA(cA(cA({},this._globalOptions.animation),this._animationsDisabled?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(A,i=0,n){return typeof A=="number"?this._rippleRenderer.fadeInRipple(A,i,cA(cA({},this.rippleConfig),n)):this._rippleRenderer.fadeInRipple(0,0,cA(cA({},this.rippleConfig),A))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-ripple-unbounded",n.unbounded)},inputs:{color:[0,"matRippleColor","color"],unbounded:[0,"matRippleUnbounded","unbounded"],centered:[0,"matRippleCentered","centered"],radius:[0,"matRippleRadius","radius"],animation:[0,"matRippleAnimation","animation"],disabled:[0,"matRippleDisabled","disabled"],trigger:[0,"matRippleTrigger","trigger"]},exportAs:["matRipple"]})}return t})();var c0A={capture:!0},C0A=["focus","mousedown","mouseenter","touchstart"],D9="mat-ripple-loader-uninitialized",y9="mat-ripple-loader-class-name",AY="mat-ripple-loader-centered",Jp="mat-ripple-loader-disabled",Yp=(()=>{class t{_document=h(Xt);_animationsDisabled=ji();_globalRippleOptions=h(S2,{optional:!0});_platform=h(Ii);_ngZone=h(Oe);_injector=h(ft);_eventCleanups;_hosts=new Map;constructor(){let A=h(Kr).createRenderer(null,null);this._eventCleanups=this._ngZone.runOutsideAngular(()=>C0A.map(i=>A.listen(this._document,i,this._onInteraction,c0A)))}ngOnDestroy(){let A=this._hosts.keys();for(let i of A)this.destroyRipple(i);this._eventCleanups.forEach(i=>i())}configureRipple(A,i){A.setAttribute(D9,this._globalRippleOptions?.namespace??""),(i.className||!A.hasAttribute(y9))&&A.setAttribute(y9,i.className||""),i.centered&&A.setAttribute(AY,""),i.disabled&&A.setAttribute(Jp,"")}setDisabled(A,i){let n=this._hosts.get(A);n?(n.target.rippleDisabled=i,!i&&!n.hasSetUpEvents&&(n.hasSetUpEvents=!0,n.renderer.setupTriggerEvents(A))):i?A.setAttribute(Jp,""):A.removeAttribute(Jp)}_onInteraction=A=>{let i=Jr(A);if(i instanceof HTMLElement){let n=i.closest(`[${D9}="${this._globalRippleOptions?.namespace??""}"]`);n&&this._createRipple(n)}};_createRipple(A){if(!this._document||this._hosts.has(A))return;A.querySelector(".mat-ripple")?.remove();let i=this._document.createElement("span");i.classList.add("mat-ripple",A.getAttribute(y9)),A.append(i);let n=this._globalRippleOptions,o=this._animationsDisabled?0:n?.animation?.enterDuration??Fu.enterDuration,a=this._animationsDisabled?0:n?.animation?.exitDuration??Fu.exitDuration,r={rippleDisabled:this._animationsDisabled||n?.disabled||A.hasAttribute(Jp),rippleConfig:{centered:A.hasAttribute(AY),terminateOnPointerUp:n?.terminateOnPointerUp,animation:{enterDuration:o,exitDuration:a}}},s=new _u(r,this._ngZone,i,this._platform,this._injector),g=!r.rippleDisabled;g&&s.setupTriggerEvents(A),this._hosts.set(A,{target:r,renderer:s,hasSetUpEvents:g}),A.removeAttribute(D9)}destroyRipple(A){let i=this._hosts.get(A);i&&(i.renderer._removeTriggerEvents(),this._hosts.delete(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var dr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["structural-styles"]],decls:0,vars:0,template:function(i,n){},styles:[`.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border-width:var(--mat-focus-indicator-border-width, 3px);border-style:var(--mat-focus-indicator-border-style, solid);border-color:var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus-visible::before{content:""}@media(forced-colors: active){html{--mat-focus-indicator-display: block}} -`],encapsulation:2,changeDetection:0})}return t})();var I0A=["mat-icon-button",""],d0A=["*"],B0A=new yA("MAT_BUTTON_CONFIG");function eY(t){return t==null?void 0:en(t)}var Lu=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_animationsDisabled=ji();_config=h(B0A,{optional:!0});_focusMonitor=h(ar);_cleanupClick;_renderer=h(_i);_rippleLoader=h(Yp);_isAnchor;_isFab=!1;color;get disableRipple(){return this._disableRipple}set disableRipple(A){this._disableRipple=A,this._updateRippleDisabled()}_disableRipple=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._updateRippleDisabled()}_disabled=!1;ariaDisabled;disabledInteractive;tabIndex;set _tabindex(A){this.tabIndex=A}constructor(){h(Xn).load(dr);let A=this._elementRef.nativeElement;this._isAnchor=A.tagName==="A",this.disabledInteractive=this._config?.disabledInteractive??!1,this.color=this._config?.color??null,this._rippleLoader?.configureRipple(A,{className:"mat-mdc-button-ripple"})}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0),this._isAnchor&&this._setupAsAnchor()}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement)}focus(A="program",i){A?this._focusMonitor.focusVia(this._elementRef.nativeElement,A,i):this._elementRef.nativeElement.focus(i)}_getAriaDisabled(){return this.ariaDisabled!=null?this.ariaDisabled:this._isAnchor?this.disabled||null:this.disabled&&this.disabledInteractive?!0:null}_getDisabledAttribute(){return this.disabledInteractive||!this.disabled?null:!0}_updateRippleDisabled(){this._rippleLoader?.setDisabled(this._elementRef.nativeElement,this.disableRipple||this.disabled)}_getTabIndex(){return this._isAnchor?this.disabled&&!this.disabledInteractive?-1:this.tabIndex:this.tabIndex}_setupAsAnchor(){this._cleanupClick=this._ngZone.runOutsideAngular(()=>this._renderer.listen(this._elementRef.nativeElement,"click",A=>{this.disabled&&(A.preventDefault(),A.stopImmediatePropagation())}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,hostAttrs:[1,"mat-mdc-button-base"],hostVars:13,hostBindings:function(i,n){i&2&&(ie("disabled",n._getDisabledAttribute())("aria-disabled",n._getAriaDisabled())("tabindex",n._getTabIndex()),Po(n.color?"mat-"+n.color:""),ne("mat-mdc-button-disabled",n.disabled)("mat-mdc-button-disabled-interactive",n.disabledInteractive)("mat-unthemed",!n.color)("_mat-animation-noopable",n._animationsDisabled))},inputs:{color:"color",disableRipple:[2,"disableRipple","disableRipple",he],disabled:[2,"disabled","disabled",he],ariaDisabled:[2,"aria-disabled","ariaDisabled",he],disabledInteractive:[2,"disabledInteractive","disabledInteractive",he],tabIndex:[2,"tabIndex","tabIndex",eY],_tabindex:[2,"tabindex","_tabindex",eY]}})}return t})(),Wa=(()=>{class t extends Lu{constructor(){super(),this._rippleLoader.configureRipple(this._elementRef.nativeElement,{centered:!0})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-icon-button",""],["a","mat-icon-button",""],["button","matIconButton",""],["a","matIconButton",""]],hostAttrs:[1,"mdc-icon-button","mat-mdc-icon-button"],exportAs:["matButton","matAnchor"],features:[It],attrs:I0A,ngContentSelectors:d0A,decls:4,vars:0,consts:[[1,"mat-mdc-button-persistent-ripple","mdc-icon-button__ripple"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(),Di(0,"span",0),Ke(1),Di(2,"span",1)(3,"span",2))},styles:[`.mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));flex-shrink:0;text-align:center;width:var(--mat-icon-button-state-layer-size, 40px);height:var(--mat-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mat-icon-button-state-layer-size, 40px) - var(--mat-icon-button-icon-size, 24px)) / 2);font-size:var(--mat-icon-button-icon-size, 24px);color:var(--mat-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-icon-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-icon-button-touch-target-size, 48px);display:var(--mat-icon-button-touch-target-display, block);left:50%;width:var(--mat-icon-button-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mat-icon-button-icon-size, 24px);height:var(--mat-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%))}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1} -`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} -`],encapsulation:2,changeDetection:0})}return t})();var E0A=new yA("cdk-dir-doc",{providedIn:"root",factory:()=>h(Xt)}),Q0A=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function tY(t){let e=t?.toLowerCase()||"";return e==="auto"&&typeof navigator<"u"&&navigator?.language?Q0A.test(navigator.language)?"rtl":"ltr":e==="rtl"?"rtl":"ltr"}var Ro=(()=>{class t{get value(){return this.valueSignal()}valueSignal=jA("ltr");change=new $A;constructor(){let A=h(E0A,{optional:!0});if(A){let i=A.body?A.body.dir:null,n=A.documentElement?A.documentElement.dir:null;this.valueSignal.set(tY(i||n||"ltr"))}}ngOnDestroy(){this.change.complete()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Gi=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var x2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var h0A=["matButton",""],v9=[[["",8,"material-icons",3,"iconPositionEnd",""],["mat-icon",3,"iconPositionEnd",""],["","matButtonIcon","",3,"iconPositionEnd",""]],"*",[["","iconPositionEnd","",8,"material-icons"],["mat-icon","iconPositionEnd",""],["","matButtonIcon","","iconPositionEnd",""]]],b9=[".material-icons:not([iconPositionEnd]), mat-icon:not([iconPositionEnd]), [matButtonIcon]:not([iconPositionEnd])","*",".material-icons[iconPositionEnd], mat-icon[iconPositionEnd], [matButtonIcon][iconPositionEnd]"],u0A=["mat-fab",""],f0A=["mat-mini-fab",""],m0A=`.mat-mdc-fab-base{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-fab-base .mat-mdc-button-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-fab-base .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-fab-base .mdc-button__label,.mat-mdc-fab-base .mat-icon{z-index:1;position:relative}.mat-mdc-fab-base .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-fab-base:focus-visible>.mat-focus-indicator::before{content:""}.mat-mdc-fab-base._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-fab-base::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-fab-base[hidden]{display:none}.mat-mdc-fab-base::-moz-focus-inner{padding:0;border:0}.mat-mdc-fab-base:active,.mat-mdc-fab-base:focus{outline:none}.mat-mdc-fab-base:hover{cursor:pointer}.mat-mdc-fab-base>svg{width:100%}.mat-mdc-fab-base .mat-icon,.mat-mdc-fab-base .material-icons{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mat-mdc-fab-base .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base[disabled]:focus,.mat-mdc-fab-base.mat-mdc-button-disabled,.mat-mdc-fab-base.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-fab-base.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab{background-color:var(--mat-fab-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-container-shape, var(--mat-sys-corner-large));color:var(--mat-fab-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-fab:hover{box-shadow:var(--mat-fab-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-fab:focus{box-shadow:var(--mat-fab-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab:active,.mat-mdc-fab:focus:active{box-shadow:var(--mat-fab-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab[disabled],.mat-mdc-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-touch-target-size, 48px);display:var(--mat-fab-touch-target-display, block);left:50%;width:var(--mat-fab-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-fab .mat-ripple-element{background-color:var(--mat-fab-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-disabled-state-layer-color)}.mat-mdc-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-mini-fab{width:40px;height:40px;background-color:var(--mat-fab-small-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-small-container-shape, var(--mat-sys-corner-medium));color:var(--mat-fab-small-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-small-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-mini-fab:hover{box-shadow:var(--mat-fab-small-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-mini-fab:focus{box-shadow:var(--mat-fab-small-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab:active,.mat-mdc-mini-fab:focus:active{box-shadow:var(--mat-fab-small-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab[disabled],.mat-mdc-mini-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-small-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-small-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-mini-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-small-touch-target-size, 48px);display:var(--mat-fab-small-touch-target-display);left:50%;width:var(--mat-fab-small-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-mini-fab .mat-ripple-element{background-color:var(--mat-fab-small-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-mini-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-mini-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-disabled-state-layer-color)}.mat-mdc-mini-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-mini-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-mini-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-extended-fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:20px;padding-right:20px;width:auto;max-width:100%;line-height:normal;box-shadow:var(--mat-fab-extended-container-elevation-shadow, var(--mat-sys-level3));height:var(--mat-fab-extended-container-height, 56px);border-radius:var(--mat-fab-extended-container-shape, var(--mat-sys-corner-large));font-family:var(--mat-fab-extended-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-fab-extended-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-fab-extended-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-fab-extended-label-text-tracking, var(--mat-sys-label-large-tracking))}@media(hover: hover){.mat-mdc-extended-fab:hover{box-shadow:var(--mat-fab-extended-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-extended-fab:focus{box-shadow:var(--mat-fab-extended-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab:active,.mat-mdc-extended-fab:focus:active{box-shadow:var(--mat-fab-extended-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab[disabled]:focus,.mat-mdc-extended-fab.mat-mdc-button-disabled,.mat-mdc-extended-fab.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-extended-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.material-icons,.mat-mdc-extended-fab>.mat-icon,.mat-mdc-extended-fab>.material-icons{margin-left:-8px;margin-right:12px}.mat-mdc-extended-fab .mdc-button__label+.mat-icon,.mat-mdc-extended-fab .mdc-button__label+.material-icons,[dir=rtl] .mat-mdc-extended-fab>.mat-icon,[dir=rtl] .mat-mdc-extended-fab>.material-icons{margin-left:12px;margin-right:-8px}.mat-mdc-extended-fab .mat-mdc-button-touch-target{width:100%} -`,iY=new Map([["text",["mat-mdc-button"]],["filled",["mdc-button--unelevated","mat-mdc-unelevated-button"]],["elevated",["mdc-button--raised","mat-mdc-raised-button"]],["outlined",["mdc-button--outlined","mat-mdc-outlined-button"]],["tonal",["mat-tonal-button"]]]),fn=(()=>{class t extends Lu{get appearance(){return this._appearance}set appearance(A){this.setAppearance(A||this._config?.defaultAppearance||"text")}_appearance=null;constructor(){super();let A=p0A(this._elementRef.nativeElement);A&&this.setAppearance(A)}setAppearance(A){if(A===this._appearance)return;let i=this._elementRef.nativeElement.classList,n=this._appearance?iY.get(this._appearance):null,o=iY.get(A);n&&i.remove(...n),i.add(...o),this._appearance=A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","matButton",""],["a","matButton",""],["button","mat-button",""],["button","mat-raised-button",""],["button","mat-flat-button",""],["button","mat-stroked-button",""],["a","mat-button",""],["a","mat-raised-button",""],["a","mat-flat-button",""],["a","mat-stroked-button",""]],hostAttrs:[1,"mdc-button"],inputs:{appearance:[0,"matButton","appearance"]},exportAs:["matButton","matAnchor"],features:[It],attrs:h0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[`.mat-mdc-button-base{text-decoration:none}.mat-mdc-button-base .mat-icon{min-height:fit-content;flex-shrink:0}@media(hover: none){.mat-mdc-button-base:hover>span.mat-mdc-button-persistent-ripple::before{opacity:0}}.mdc-button{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:rgba(0,0,0,0);padding:0 8px}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button[hidden]{display:none}.mdc-button .mdc-button__label{position:relative}.mat-mdc-button{padding:0 var(--mat-button-text-horizontal-padding, 12px);height:var(--mat-button-text-container-height, 40px);font-family:var(--mat-button-text-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-text-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-text-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-text-label-text-transform);font-weight:var(--mat-button-text-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-button,.mat-mdc-button .mdc-button__ripple{border-radius:var(--mat-button-text-container-shape, var(--mat-sys-corner-full))}.mat-mdc-button:not(:disabled){color:var(--mat-button-text-label-text-color, var(--mat-sys-primary))}.mat-mdc-button[disabled],.mat-mdc-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-text-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-button:has(.material-icons,mat-icon,[matButtonIcon]){padding:0 var(--mat-button-text-with-icon-horizontal-padding, 16px)}.mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}[dir=rtl] .mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}.mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}[dir=rtl] .mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}.mat-mdc-button .mat-ripple-element{background-color:var(--mat-button-text-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-state-layer-color, var(--mat-sys-primary))}.mat-mdc-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-text-touch-target-size, 48px);display:var(--mat-button-text-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-filled-container-height, 40px);font-family:var(--mat-button-filled-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-filled-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-filled-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-filled-label-text-transform);font-weight:var(--mat-button-filled-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-filled-horizontal-padding, 24px)}.mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}.mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}.mat-mdc-unelevated-button .mat-ripple-element{background-color:var(--mat-button-filled-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-state-layer-color, var(--mat-sys-on-primary))}.mat-mdc-unelevated-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-unelevated-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-unelevated-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-unelevated-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-unelevated-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-filled-touch-target-size, 48px);display:var(--mat-button-filled-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button:not(:disabled){color:var(--mat-button-filled-label-text-color, var(--mat-sys-on-primary));background-color:var(--mat-button-filled-container-color, var(--mat-sys-primary))}.mat-mdc-unelevated-button,.mat-mdc-unelevated-button .mdc-button__ripple{border-radius:var(--mat-button-filled-container-shape, var(--mat-sys-corner-full))}.mat-mdc-unelevated-button[disabled],.mat-mdc-unelevated-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-raised-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);box-shadow:var(--mat-button-protected-container-elevation-shadow, var(--mat-sys-level1));height:var(--mat-button-protected-container-height, 40px);font-family:var(--mat-button-protected-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-protected-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-protected-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-protected-label-text-transform);font-weight:var(--mat-button-protected-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-protected-horizontal-padding, 24px)}.mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}[dir=rtl] .mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}.mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}[dir=rtl] .mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}.mat-mdc-raised-button .mat-ripple-element{background-color:var(--mat-button-protected-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-state-layer-color, var(--mat-sys-primary))}.mat-mdc-raised-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-raised-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-raised-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-raised-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-raised-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-protected-touch-target-size, 48px);display:var(--mat-button-protected-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-raised-button:not(:disabled){color:var(--mat-button-protected-label-text-color, var(--mat-sys-primary));background-color:var(--mat-button-protected-container-color, var(--mat-sys-surface))}.mat-mdc-raised-button,.mat-mdc-raised-button .mdc-button__ripple{border-radius:var(--mat-button-protected-container-shape, var(--mat-sys-corner-full))}@media(hover: hover){.mat-mdc-raised-button:hover{box-shadow:var(--mat-button-protected-hover-container-elevation-shadow, var(--mat-sys-level2))}}.mat-mdc-raised-button:focus{box-shadow:var(--mat-button-protected-focus-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button:active,.mat-mdc-raised-button:focus:active{box-shadow:var(--mat-button-protected-pressed-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button[disabled],.mat-mdc-raised-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-protected-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-raised-button[disabled].mat-mdc-button-disabled,.mat-mdc-raised-button.mat-mdc-button-disabled.mat-mdc-button-disabled{box-shadow:var(--mat-button-protected-disabled-container-elevation-shadow, var(--mat-sys-level0))}.mat-mdc-raised-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-outlined-button{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-outlined-container-height, 40px);font-family:var(--mat-button-outlined-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-outlined-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-outlined-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-outlined-label-text-transform);font-weight:var(--mat-button-outlined-label-text-weight, var(--mat-sys-label-large-weight));border-radius:var(--mat-button-outlined-container-shape, var(--mat-sys-corner-full));border-width:var(--mat-button-outlined-outline-width, 1px);padding:0 var(--mat-button-outlined-horizontal-padding, 24px)}.mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}[dir=rtl] .mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}.mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}[dir=rtl] .mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}.mat-mdc-outlined-button .mat-ripple-element{background-color:var(--mat-button-outlined-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-state-layer-color, var(--mat-sys-primary))}.mat-mdc-outlined-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-outlined-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-outlined-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-outlined-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-outlined-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-outlined-touch-target-size, 48px);display:var(--mat-button-outlined-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-outlined-button:not(:disabled){color:var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));border-color:var(--mat-button-outlined-outline-color, var(--mat-sys-outline))}.mat-mdc-outlined-button[disabled],.mat-mdc-outlined-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:var(--mat-button-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-tonal-container-height, 40px);font-family:var(--mat-button-tonal-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-tonal-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-tonal-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-tonal-label-text-transform);font-weight:var(--mat-button-tonal-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-tonal-horizontal-padding, 24px)}.mat-tonal-button:not(:disabled){color:var(--mat-button-tonal-label-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-tonal-container-color, var(--mat-sys-secondary-container))}.mat-tonal-button,.mat-tonal-button .mdc-button__ripple{border-radius:var(--mat-button-tonal-container-shape, var(--mat-sys-corner-full))}.mat-tonal-button[disabled],.mat-tonal-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-tonal-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-tonal-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-tonal-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}[dir=rtl] .mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}.mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}[dir=rtl] .mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}.mat-tonal-button .mat-ripple-element{background-color:var(--mat-button-tonal-ripple-color, color-mix(in srgb, var(--mat-sys-on-secondary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-tonal-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-tonal-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-tonal-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-tonal-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-tonal-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-tonal-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-tonal-touch-target-size, 48px);display:var(--mat-button-tonal-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-button,.mat-mdc-unelevated-button,.mat-mdc-raised-button,.mat-mdc-outlined-button,.mat-tonal-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-button .mdc-button__label,.mat-mdc-button .mat-icon,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-unelevated-button .mat-icon,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-raised-button .mat-icon,.mat-mdc-outlined-button .mdc-button__label,.mat-mdc-outlined-button .mat-icon,.mat-tonal-button .mdc-button__label,.mat-tonal-button .mat-icon{z-index:1;position:relative}.mat-mdc-button .mat-focus-indicator,.mat-mdc-unelevated-button .mat-focus-indicator,.mat-mdc-raised-button .mat-focus-indicator,.mat-mdc-outlined-button .mat-focus-indicator,.mat-tonal-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-unelevated-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-raised-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-outlined-button:focus-visible>.mat-focus-indicator::before,.mat-tonal-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-button._mat-animation-noopable,.mat-mdc-unelevated-button._mat-animation-noopable,.mat-mdc-raised-button._mat-animation-noopable,.mat-mdc-outlined-button._mat-animation-noopable,.mat-tonal-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon,.mat-mdc-raised-button>.mat-icon,.mat-mdc-outlined-button>.mat-icon,.mat-tonal-button>.mat-icon{display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px}.mat-mdc-unelevated-button .mat-focus-indicator::before,.mat-tonal-button .mat-focus-indicator::before,.mat-mdc-raised-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-outlined-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)} -`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} -`],encapsulation:2,changeDetection:0})}return t})();function p0A(t){return t.hasAttribute("mat-raised-button")?"elevated":t.hasAttribute("mat-stroked-button")?"outlined":t.hasAttribute("mat-flat-button")?"filled":t.hasAttribute("mat-button")?"text":null}var nY=new yA("mat-mdc-fab-default-options",{providedIn:"root",factory:()=>Gu}),Gu={color:"accent"},oY=(()=>{class t extends Lu{_options=h(nY,{optional:!0});_isFab=!0;extended=!1;constructor(){super(),this._options=this._options||Gu,this.color=this._options.color||Gu.color}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-fab",""],["a","mat-fab",""],["button","matFab",""],["a","matFab",""]],hostAttrs:[1,"mdc-fab","mat-mdc-fab-base","mat-mdc-fab"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mdc-fab--extended",n.extended)("mat-mdc-extended-fab",n.extended)},inputs:{extended:[2,"extended","extended",he]},exportAs:["matButton","matAnchor"],features:[It],attrs:u0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[`.mat-mdc-fab-base{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-fab-base .mat-mdc-button-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-fab-base .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-fab-base .mdc-button__label,.mat-mdc-fab-base .mat-icon{z-index:1;position:relative}.mat-mdc-fab-base .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-fab-base:focus-visible>.mat-focus-indicator::before{content:""}.mat-mdc-fab-base._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-fab-base::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-fab-base[hidden]{display:none}.mat-mdc-fab-base::-moz-focus-inner{padding:0;border:0}.mat-mdc-fab-base:active,.mat-mdc-fab-base:focus{outline:none}.mat-mdc-fab-base:hover{cursor:pointer}.mat-mdc-fab-base>svg{width:100%}.mat-mdc-fab-base .mat-icon,.mat-mdc-fab-base .material-icons{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mat-mdc-fab-base .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base[disabled]:focus,.mat-mdc-fab-base.mat-mdc-button-disabled,.mat-mdc-fab-base.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-fab-base.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab{background-color:var(--mat-fab-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-container-shape, var(--mat-sys-corner-large));color:var(--mat-fab-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-fab:hover{box-shadow:var(--mat-fab-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-fab:focus{box-shadow:var(--mat-fab-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab:active,.mat-mdc-fab:focus:active{box-shadow:var(--mat-fab-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab[disabled],.mat-mdc-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-touch-target-size, 48px);display:var(--mat-fab-touch-target-display, block);left:50%;width:var(--mat-fab-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-fab .mat-ripple-element{background-color:var(--mat-fab-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-disabled-state-layer-color)}.mat-mdc-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-mini-fab{width:40px;height:40px;background-color:var(--mat-fab-small-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-small-container-shape, var(--mat-sys-corner-medium));color:var(--mat-fab-small-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-small-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-mini-fab:hover{box-shadow:var(--mat-fab-small-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-mini-fab:focus{box-shadow:var(--mat-fab-small-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab:active,.mat-mdc-mini-fab:focus:active{box-shadow:var(--mat-fab-small-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab[disabled],.mat-mdc-mini-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-small-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-small-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-mini-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-small-touch-target-size, 48px);display:var(--mat-fab-small-touch-target-display);left:50%;width:var(--mat-fab-small-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-mini-fab .mat-ripple-element{background-color:var(--mat-fab-small-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-mini-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-mini-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-disabled-state-layer-color)}.mat-mdc-mini-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-mini-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-mini-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-extended-fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:20px;padding-right:20px;width:auto;max-width:100%;line-height:normal;box-shadow:var(--mat-fab-extended-container-elevation-shadow, var(--mat-sys-level3));height:var(--mat-fab-extended-container-height, 56px);border-radius:var(--mat-fab-extended-container-shape, var(--mat-sys-corner-large));font-family:var(--mat-fab-extended-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-fab-extended-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-fab-extended-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-fab-extended-label-text-tracking, var(--mat-sys-label-large-tracking))}@media(hover: hover){.mat-mdc-extended-fab:hover{box-shadow:var(--mat-fab-extended-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-extended-fab:focus{box-shadow:var(--mat-fab-extended-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab:active,.mat-mdc-extended-fab:focus:active{box-shadow:var(--mat-fab-extended-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab[disabled]:focus,.mat-mdc-extended-fab.mat-mdc-button-disabled,.mat-mdc-extended-fab.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-extended-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.material-icons,.mat-mdc-extended-fab>.mat-icon,.mat-mdc-extended-fab>.material-icons{margin-left:-8px;margin-right:12px}.mat-mdc-extended-fab .mdc-button__label+.mat-icon,.mat-mdc-extended-fab .mdc-button__label+.material-icons,[dir=rtl] .mat-mdc-extended-fab>.mat-icon,[dir=rtl] .mat-mdc-extended-fab>.material-icons{margin-left:12px;margin-right:-8px}.mat-mdc-extended-fab .mat-mdc-button-touch-target{width:100%} -`],encapsulation:2,changeDetection:0})}return t})(),Tp=(()=>{class t extends Lu{_options=h(nY,{optional:!0});_isFab=!0;constructor(){super(),this._options=this._options||Gu,this.color=this._options.color||Gu.color}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-mini-fab",""],["a","mat-mini-fab",""],["button","matMiniFab",""],["a","matMiniFab",""]],hostAttrs:[1,"mdc-fab","mat-mdc-fab-base","mdc-fab--mini","mat-mdc-mini-fab"],exportAs:["matButton","matAnchor"],features:[It],attrs:f0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[m0A],encapsulation:2,changeDetection:0})}return t})();var Ns=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Gi]})}return t})();var M9=class{_box;_destroyed=new XA;_resizeSubject=new XA;_resizeObserver;_elementObservables=new Map;constructor(e){this._box=e,typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(A=>this._resizeSubject.next(A)))}observe(e){return this._elementObservables.has(e)||this._elementObservables.set(e,new $i(A=>{let i=this._resizeSubject.subscribe(A);return this._resizeObserver?.observe(e,{box:this._box}),()=>{this._resizeObserver?.unobserve(e),i.unsubscribe(),this._elementObservables.delete(e)}}).pipe(Ze(A=>A.some(i=>i.target===e)),Ps({bufferSize:1,refCount:!0}),Bt(this._destroyed))),this._elementObservables.get(e)}destroy(){this._destroyed.next(),this._destroyed.complete(),this._resizeSubject.complete(),this._elementObservables.clear()}},Hp=(()=>{class t{_cleanupErrorListener;_observers=new Map;_ngZone=h(Oe);constructor(){typeof ResizeObserver<"u"}ngOnDestroy(){for(let[,A]of this._observers)A.destroy();this._observers.clear(),this._cleanupErrorListener?.()}observe(A,i){let n=i?.box||"content-box";return this._observers.has(n)||this._observers.set(n,new M9(n)),this._observers.get(n).observe(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var w0A=["notch"],D0A=["matFormFieldNotchedOutline",""],y0A=["*"],aY=["iconPrefixContainer"],rY=["textPrefixContainer"],sY=["iconSuffixContainer"],gY=["textSuffixContainer"],v0A=["textField"],b0A=["*",[["mat-label"]],[["","matPrefix",""],["","matIconPrefix",""]],[["","matTextPrefix",""]],[["","matTextSuffix",""]],[["","matSuffix",""],["","matIconSuffix",""]],[["mat-error"],["","matError",""]],[["mat-hint",3,"align","end"]],[["mat-hint","align","end"]]],M0A=["*","mat-label","[matPrefix], [matIconPrefix]","[matTextPrefix]","[matTextSuffix]","[matSuffix], [matIconSuffix]","mat-error, [matError]","mat-hint:not([align='end'])","mat-hint[align='end']"];function k0A(t,e){t&1&&GA(0,"span",21)}function S0A(t,e){if(t&1&&(m(0,"label",20),Ke(1,1),V(2,k0A,1,0,"span",21),w()),t&2){let A=v(2);$("floating",A._shouldLabelFloat())("monitorResize",A._hasOutline())("id",A._labelId),ie("for",A._control.disableAutomaticLabeling?null:A._control.id),p(2),W(!A.hideRequiredMarker&&A._control.required?2:-1)}}function x0A(t,e){if(t&1&&V(0,S0A,3,5,"label",20),t&2){let A=v();W(A._hasFloatingLabel()?0:-1)}}function R0A(t,e){t&1&&GA(0,"div",7)}function N0A(t,e){}function F0A(t,e){if(t&1&&pt(0,N0A,0,0,"ng-template",13),t&2){v(2);let A=An(1);$("ngTemplateOutlet",A)}}function _0A(t,e){if(t&1&&(m(0,"div",9),V(1,F0A,1,1,null,13),w()),t&2){let A=v();$("matFormFieldNotchedOutlineOpen",A._shouldLabelFloat()),p(),W(A._forceDisplayInfixLabel()?-1:1)}}function L0A(t,e){t&1&&(m(0,"div",10,2),Ke(2,2),w())}function G0A(t,e){t&1&&(m(0,"div",11,3),Ke(2,3),w())}function K0A(t,e){}function U0A(t,e){if(t&1&&pt(0,K0A,0,0,"ng-template",13),t&2){v();let A=An(1);$("ngTemplateOutlet",A)}}function J0A(t,e){t&1&&(m(0,"div",14,4),Ke(2,4),w())}function Y0A(t,e){t&1&&(m(0,"div",15,5),Ke(2,5),w())}function T0A(t,e){t&1&&GA(0,"div",16)}function H0A(t,e){t&1&&(m(0,"div",18),Ke(1,6),w())}function z0A(t,e){if(t&1&&(m(0,"mat-hint",22),K(1),w()),t&2){let A=v(2);$("id",A._hintLabelId),p(),qA(A.hintLabel)}}function O0A(t,e){if(t&1&&(m(0,"div",19),V(1,z0A,2,2,"mat-hint",22),Ke(2,7),GA(3,"div",23),Ke(4,8),w()),t&2){let A=v();p(),W(A.hintLabel?1:-1)}}var Gg=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-label"]]})}return t})(),EY=new yA("MatError"),k9=(()=>{class t{id=h(an).getId("mat-mdc-error-");constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-error"],["","matError",""]],hostAttrs:[1,"mat-mdc-form-field-error","mat-mdc-form-field-bottom-align"],hostVars:1,hostBindings:function(i,n){i&2&&vo("id",n.id)},inputs:{id:"id"},features:[dt([{provide:EY,useExisting:t}])]})}return t})(),R1=(()=>{class t{align="start";id=h(an).getId("mat-mdc-hint-");static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-hint"]],hostAttrs:[1,"mat-mdc-form-field-hint","mat-mdc-form-field-bottom-align"],hostVars:4,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("align",null),ne("mat-mdc-form-field-hint-end",n.align==="end"))},inputs:{align:"align",id:"id"}})}return t})(),QY=new yA("MatPrefix"),S9=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matPrefix",""],["","matIconPrefix",""],["","matTextPrefix",""]],inputs:{_isTextSelector:[0,"matTextPrefix","_isTextSelector"]},features:[dt([{provide:QY,useExisting:t}])]})}return t})(),hY=new yA("MatSuffix"),x9=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSuffix",""],["","matIconSuffix",""],["","matTextSuffix",""]],inputs:{_isTextSelector:[0,"matTextSuffix","_isTextSelector"]},features:[dt([{provide:hY,useExisting:t}])]})}return t})(),uY=new yA("FloatingLabelParent"),lY=(()=>{class t{_elementRef=h(ge);get floating(){return this._floating}set floating(A){this._floating=A,this.monitorResize&&this._handleResize()}_floating=!1;get monitorResize(){return this._monitorResize}set monitorResize(A){this._monitorResize=A,this._monitorResize?this._subscribeToResize():this._resizeSubscription.unsubscribe()}_monitorResize=!1;_resizeObserver=h(Hp);_ngZone=h(Oe);_parent=h(uY);_resizeSubscription=new Jn;constructor(){}ngOnDestroy(){this._resizeSubscription.unsubscribe()}getWidth(){return P0A(this._elementRef.nativeElement)}get element(){return this._elementRef.nativeElement}_handleResize(){setTimeout(()=>this._parent._handleLabelResized())}_subscribeToResize(){this._resizeSubscription.unsubscribe(),this._ngZone.runOutsideAngular(()=>{this._resizeSubscription=this._resizeObserver.observe(this._elementRef.nativeElement,{box:"border-box"}).subscribe(()=>this._handleResize())})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["label","matFormFieldFloatingLabel",""]],hostAttrs:[1,"mdc-floating-label","mat-mdc-floating-label"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-floating-label--float-above",n.floating)},inputs:{floating:"floating",monitorResize:"monitorResize"}})}return t})();function P0A(t){let e=t;if(e.offsetParent!==null)return e.scrollWidth;let A=e.cloneNode(!0);A.style.setProperty("position","absolute"),A.style.setProperty("transform","translate(-9999px, -9999px)"),document.documentElement.appendChild(A);let i=A.scrollWidth;return A.remove(),i}var cY="mdc-line-ripple--active",zp="mdc-line-ripple--deactivating",CY=(()=>{class t{_elementRef=h(ge);_cleanupTransitionEnd;constructor(){let A=h(Oe),i=h(_i);A.runOutsideAngular(()=>{this._cleanupTransitionEnd=i.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionEnd)})}activate(){let A=this._elementRef.nativeElement.classList;A.remove(zp),A.add(cY)}deactivate(){this._elementRef.nativeElement.classList.add(zp)}_handleTransitionEnd=A=>{let i=this._elementRef.nativeElement.classList,n=i.contains(zp);A.propertyName==="opacity"&&n&&i.remove(cY,zp)};ngOnDestroy(){this._cleanupTransitionEnd()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["div","matFormFieldLineRipple",""]],hostAttrs:[1,"mdc-line-ripple"]})}return t})(),IY=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);open=!1;_notch;ngAfterViewInit(){let A=this._elementRef.nativeElement,i=A.querySelector(".mdc-floating-label");i?(A.classList.add("mdc-notched-outline--upgraded"),typeof requestAnimationFrame=="function"&&(i.style.transitionDuration="0s",this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>i.style.transitionDuration="")}))):A.classList.add("mdc-notched-outline--no-label")}_setNotchWidth(A){let i=this._notch.nativeElement;!this.open||!A?i.style.width="":i.style.width=`calc(${A}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + 9px)`}_setMaxWidth(A){this._notch.nativeElement.style.setProperty("--mat-form-field-notch-max-width",`calc(100% - ${A}px)`)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["div","matFormFieldNotchedOutline",""]],viewQuery:function(i,n){if(i&1&&ai(w0A,5),i&2){let o;ce(o=Ce())&&(n._notch=o.first)}},hostAttrs:[1,"mdc-notched-outline"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-notched-outline--notched",n.open)},inputs:{open:[0,"matFormFieldNotchedOutlineOpen","open"]},attrs:D0A,ngContentSelectors:y0A,decls:5,vars:0,consts:[["notch",""],[1,"mat-mdc-notch-piece","mdc-notched-outline__leading"],[1,"mat-mdc-notch-piece","mdc-notched-outline__notch"],[1,"mat-mdc-notch-piece","mdc-notched-outline__trailing"]],template:function(i,n){i&1&&(Yt(),Di(0,"div",1),li(1,"div",2,0),Ke(3),Ei(),Di(4,"div",3))},encapsulation:2,changeDetection:0})}return t})(),Ku=(()=>{class t{value=null;stateChanges;id;placeholder;ngControl=null;focused=!1;empty=!1;shouldLabelFloat=!1;required=!1;disabled=!1;errorState=!1;controlType;autofilled;userAriaDescribedBy;disableAutomaticLabeling;describedByIds;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t})}return t})();var Uu=new yA("MatFormField"),j0A=new yA("MAT_FORM_FIELD_DEFAULT_OPTIONS"),dY="fill",q0A="auto",BY="fixed",V0A="translateY(-50%)",No=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_platform=h(Ii);_idGenerator=h(an);_ngZone=h(Oe);_defaults=h(j0A,{optional:!0});_currentDirection;_textField;_iconPrefixContainer;_textPrefixContainer;_iconSuffixContainer;_textSuffixContainer;_floatingLabel;_notchedOutline;_lineRipple;_iconPrefixContainerSignal=ca("iconPrefixContainer");_textPrefixContainerSignal=ca("textPrefixContainer");_iconSuffixContainerSignal=ca("iconSuffixContainer");_textSuffixContainerSignal=ca("textSuffixContainer");_prefixSuffixContainers=Ue(()=>[this._iconPrefixContainerSignal(),this._textPrefixContainerSignal(),this._iconSuffixContainerSignal(),this._textSuffixContainerSignal()].map(A=>A?.nativeElement).filter(A=>A!==void 0));_formFieldControl;_prefixChildren;_suffixChildren;_errorChildren;_hintChildren;_labelChild=rC(Gg);get hideRequiredMarker(){return this._hideRequiredMarker}set hideRequiredMarker(A){this._hideRequiredMarker=yr(A)}_hideRequiredMarker=!1;color="primary";get floatLabel(){return this._floatLabel||this._defaults?.floatLabel||q0A}set floatLabel(A){A!==this._floatLabel&&(this._floatLabel=A,this._changeDetectorRef.markForCheck())}_floatLabel;get appearance(){return this._appearanceSignal()}set appearance(A){let i=A||this._defaults?.appearance||dY;this._appearanceSignal.set(i)}_appearanceSignal=jA(dY);get subscriptSizing(){return this._subscriptSizing||this._defaults?.subscriptSizing||BY}set subscriptSizing(A){this._subscriptSizing=A||this._defaults?.subscriptSizing||BY}_subscriptSizing=null;get hintLabel(){return this._hintLabel}set hintLabel(A){this._hintLabel=A,this._processHints()}_hintLabel="";_hasIconPrefix=!1;_hasTextPrefix=!1;_hasIconSuffix=!1;_hasTextSuffix=!1;_labelId=this._idGenerator.getId("mat-mdc-form-field-label-");_hintLabelId=this._idGenerator.getId("mat-mdc-hint-");_describedByIds;get _control(){return this._explicitFormFieldControl||this._formFieldControl}set _control(A){this._explicitFormFieldControl=A}_destroyed=new XA;_isFocused=null;_explicitFormFieldControl;_previousControl=null;_previousControlValidatorFn=null;_stateChanges;_valueChanges;_describedByChanges;_outlineLabelOffsetResizeObserver=null;_animationsDisabled=ji();constructor(){let A=this._defaults,i=h(Ro);A&&(A.appearance&&(this.appearance=A.appearance),this._hideRequiredMarker=!!A?.hideRequiredMarker,A.color&&(this.color=A.color)),Ga(()=>this._currentDirection=i.valueSignal()),this._syncOutlineLabelOffset()}ngAfterViewInit(){this._updateFocusState(),this._animationsDisabled||this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-form-field-animations-enabled")},300)}),this._changeDetectorRef.detectChanges()}ngAfterContentInit(){this._assertFormFieldControl(),this._initializeSubscript(),this._initializePrefixAndSuffix()}ngAfterContentChecked(){this._assertFormFieldControl(),this._control!==this._previousControl&&(this._initializeControl(this._previousControl),this._control.ngControl&&this._control.ngControl.control&&(this._previousControlValidatorFn=this._control.ngControl.control.validator),this._previousControl=this._control),this._control.ngControl&&this._control.ngControl.control&&this._control.ngControl.control.validator!==this._previousControlValidatorFn&&this._changeDetectorRef.markForCheck()}ngOnDestroy(){this._outlineLabelOffsetResizeObserver?.disconnect(),this._stateChanges?.unsubscribe(),this._valueChanges?.unsubscribe(),this._describedByChanges?.unsubscribe(),this._destroyed.next(),this._destroyed.complete()}getLabelId=Ue(()=>this._hasFloatingLabel()?this._labelId:null);getConnectedOverlayOrigin(){return this._textField||this._elementRef}_animateAndLockLabel(){this._hasFloatingLabel()&&(this.floatLabel="always")}_initializeControl(A){let i=this._control,n="mat-mdc-form-field-type-";A&&this._elementRef.nativeElement.classList.remove(n+A.controlType),i.controlType&&this._elementRef.nativeElement.classList.add(n+i.controlType),this._stateChanges?.unsubscribe(),this._stateChanges=i.stateChanges.subscribe(()=>{this._updateFocusState(),this._changeDetectorRef.markForCheck()}),this._describedByChanges?.unsubscribe(),this._describedByChanges=i.stateChanges.pipe(cn([void 0,void 0]),fe(()=>[i.errorState,i.userAriaDescribedBy]),h2(),Ze(([[o,a],[r,s]])=>o!==r||a!==s)).subscribe(()=>this._syncDescribedByIds()),this._valueChanges?.unsubscribe(),i.ngControl&&i.ngControl.valueChanges&&(this._valueChanges=i.ngControl.valueChanges.pipe(Bt(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()))}_checkPrefixAndSuffixTypes(){this._hasIconPrefix=!!this._prefixChildren.find(A=>!A._isText),this._hasTextPrefix=!!this._prefixChildren.find(A=>A._isText),this._hasIconSuffix=!!this._suffixChildren.find(A=>!A._isText),this._hasTextSuffix=!!this._suffixChildren.find(A=>A._isText)}_initializePrefixAndSuffix(){this._checkPrefixAndSuffixTypes(),fi(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(()=>{this._checkPrefixAndSuffixTypes(),this._changeDetectorRef.markForCheck()})}_initializeSubscript(){this._hintChildren.changes.subscribe(()=>{this._processHints(),this._changeDetectorRef.markForCheck()}),this._errorChildren.changes.subscribe(()=>{this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),this._validateHints(),this._syncDescribedByIds()}_assertFormFieldControl(){this._control}_updateFocusState(){let A=this._control.focused;A&&!this._isFocused?(this._isFocused=!0,this._lineRipple?.activate()):!A&&(this._isFocused||this._isFocused===null)&&(this._isFocused=!1,this._lineRipple?.deactivate()),this._elementRef.nativeElement.classList.toggle("mat-focused",A),this._textField?.nativeElement.classList.toggle("mdc-text-field--focused",A)}_syncOutlineLabelOffset(){RU({earlyRead:()=>{if(this._appearanceSignal()!=="outline")return this._outlineLabelOffsetResizeObserver?.disconnect(),null;if(globalThis.ResizeObserver){this._outlineLabelOffsetResizeObserver||=new globalThis.ResizeObserver(()=>{this._writeOutlinedLabelStyles(this._getOutlinedLabelOffset())});for(let A of this._prefixSuffixContainers())this._outlineLabelOffsetResizeObserver.observe(A,{box:"border-box"})}return this._getOutlinedLabelOffset()},write:A=>this._writeOutlinedLabelStyles(A())})}_shouldAlwaysFloat(){return this.floatLabel==="always"}_hasOutline(){return this.appearance==="outline"}_forceDisplayInfixLabel(){return!this._platform.isBrowser&&this._prefixChildren.length&&!this._shouldLabelFloat()}_hasFloatingLabel=Ue(()=>!!this._labelChild());_shouldLabelFloat(){return this._hasFloatingLabel()?this._control.shouldLabelFloat||this._shouldAlwaysFloat():!1}_shouldForward(A){let i=this._control?this._control.ngControl:null;return i&&i[A]}_getSubscriptMessageType(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"}_handleLabelResized(){this._refreshOutlineNotchWidth()}_refreshOutlineNotchWidth(){!this._hasOutline()||!this._floatingLabel||!this._shouldLabelFloat()?this._notchedOutline?._setNotchWidth(0):this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth())}_processHints(){this._validateHints(),this._syncDescribedByIds()}_validateHints(){this._hintChildren}_syncDescribedByIds(){if(this._control){let A=[];if(this._control.userAriaDescribedBy&&typeof this._control.userAriaDescribedBy=="string"&&A.push(...this._control.userAriaDescribedBy.split(" ")),this._getSubscriptMessageType()==="hint"){let o=this._hintChildren?this._hintChildren.find(r=>r.align==="start"):null,a=this._hintChildren?this._hintChildren.find(r=>r.align==="end"):null;o?A.push(o.id):this._hintLabel&&A.push(this._hintLabelId),a&&A.push(a.id)}else this._errorChildren&&A.push(...this._errorChildren.map(o=>o.id));let i=this._control.describedByIds,n;if(i){let o=this._describedByIds||A;n=A.concat(i.filter(a=>a&&!o.includes(a)))}else n=A;this._control.setDescribedByIds(n),this._describedByIds=A}}_getOutlinedLabelOffset(){if(!this._hasOutline()||!this._floatingLabel)return null;if(!this._iconPrefixContainer&&!this._textPrefixContainer)return["",null];if(!this._isAttachedToDom())return null;let A=this._iconPrefixContainer?.nativeElement,i=this._textPrefixContainer?.nativeElement,n=this._iconSuffixContainer?.nativeElement,o=this._textSuffixContainer?.nativeElement,a=A?.getBoundingClientRect().width??0,r=i?.getBoundingClientRect().width??0,s=n?.getBoundingClientRect().width??0,g=o?.getBoundingClientRect().width??0,l=this._currentDirection==="rtl"?"-1":"1",C=`${a+r}px`,d=`calc(${l} * (${C} + var(--mat-mdc-form-field-label-offset-x, 0px)))`,B=`var(--mat-mdc-form-field-label-transform, ${V0A} translateX(${d}))`,E=a+r+s+g;return[B,E]}_writeOutlinedLabelStyles(A){if(A!==null){let[i,n]=A;this._floatingLabel&&(this._floatingLabel.element.style.transform=i),n!==null&&this._notchedOutline?._setMaxWidth(n)}}_isAttachedToDom(){let A=this._elementRef.nativeElement;if(A.getRootNode){let i=A.getRootNode();return i&&i!==A}return document.documentElement.contains(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-form-field"]],contentQueries:function(i,n,o){if(i&1&&(Cp(o,n._labelChild,Gg,5),fa(o,Ku,5)(o,QY,5)(o,hY,5)(o,EY,5)(o,R1,5)),i&2){Dr();let a;ce(a=Ce())&&(n._formFieldControl=a.first),ce(a=Ce())&&(n._prefixChildren=a),ce(a=Ce())&&(n._suffixChildren=a),ce(a=Ce())&&(n._errorChildren=a),ce(a=Ce())&&(n._hintChildren=a)}},viewQuery:function(i,n){if(i&1&&(rs(n._iconPrefixContainerSignal,aY,5)(n._textPrefixContainerSignal,rY,5)(n._iconSuffixContainerSignal,sY,5)(n._textSuffixContainerSignal,gY,5),ai(v0A,5)(aY,5)(rY,5)(sY,5)(gY,5)(lY,5)(IY,5)(CY,5)),i&2){Dr(4);let o;ce(o=Ce())&&(n._textField=o.first),ce(o=Ce())&&(n._iconPrefixContainer=o.first),ce(o=Ce())&&(n._textPrefixContainer=o.first),ce(o=Ce())&&(n._iconSuffixContainer=o.first),ce(o=Ce())&&(n._textSuffixContainer=o.first),ce(o=Ce())&&(n._floatingLabel=o.first),ce(o=Ce())&&(n._notchedOutline=o.first),ce(o=Ce())&&(n._lineRipple=o.first)}},hostAttrs:[1,"mat-mdc-form-field"],hostVars:38,hostBindings:function(i,n){i&2&&ne("mat-mdc-form-field-label-always-float",n._shouldAlwaysFloat())("mat-mdc-form-field-has-icon-prefix",n._hasIconPrefix)("mat-mdc-form-field-has-icon-suffix",n._hasIconSuffix)("mat-form-field-invalid",n._control.errorState)("mat-form-field-disabled",n._control.disabled)("mat-form-field-autofilled",n._control.autofilled)("mat-form-field-appearance-fill",n.appearance=="fill")("mat-form-field-appearance-outline",n.appearance=="outline")("mat-form-field-hide-placeholder",n._hasFloatingLabel()&&!n._shouldLabelFloat())("mat-primary",n.color!=="accent"&&n.color!=="warn")("mat-accent",n.color==="accent")("mat-warn",n.color==="warn")("ng-untouched",n._shouldForward("untouched"))("ng-touched",n._shouldForward("touched"))("ng-pristine",n._shouldForward("pristine"))("ng-dirty",n._shouldForward("dirty"))("ng-valid",n._shouldForward("valid"))("ng-invalid",n._shouldForward("invalid"))("ng-pending",n._shouldForward("pending"))},inputs:{hideRequiredMarker:"hideRequiredMarker",color:"color",floatLabel:"floatLabel",appearance:"appearance",subscriptSizing:"subscriptSizing",hintLabel:"hintLabel"},exportAs:["matFormField"],features:[dt([{provide:Uu,useExisting:t},{provide:uY,useExisting:t}])],ngContentSelectors:M0A,decls:18,vars:21,consts:[["labelTemplate",""],["textField",""],["iconPrefixContainer",""],["textPrefixContainer",""],["textSuffixContainer",""],["iconSuffixContainer",""],[1,"mat-mdc-text-field-wrapper","mdc-text-field",3,"click"],[1,"mat-mdc-form-field-focus-overlay"],[1,"mat-mdc-form-field-flex"],["matFormFieldNotchedOutline","",3,"matFormFieldNotchedOutlineOpen"],[1,"mat-mdc-form-field-icon-prefix"],[1,"mat-mdc-form-field-text-prefix"],[1,"mat-mdc-form-field-infix"],[3,"ngTemplateOutlet"],[1,"mat-mdc-form-field-text-suffix"],[1,"mat-mdc-form-field-icon-suffix"],["matFormFieldLineRipple",""],["aria-atomic","true","aria-live","polite",1,"mat-mdc-form-field-subscript-wrapper","mat-mdc-form-field-bottom-align"],[1,"mat-mdc-form-field-error-wrapper"],[1,"mat-mdc-form-field-hint-wrapper"],["matFormFieldFloatingLabel","",3,"floating","monitorResize","id"],["aria-hidden","true",1,"mat-mdc-form-field-required-marker","mdc-floating-label--required"],[3,"id"],[1,"mat-mdc-form-field-hint-spacer"]],template:function(i,n){if(i&1){let o=JA();Yt(b0A),pt(0,x0A,1,1,"ng-template",null,0,w2),m(2,"div",6,1),tA("click",function(r){return Z(o),X(n._control.onContainerClick(r))}),V(4,R0A,1,0,"div",7),m(5,"div",8),V(6,_0A,2,2,"div",9),V(7,L0A,3,0,"div",10),V(8,G0A,3,0,"div",11),m(9,"div",12),V(10,U0A,1,1,null,13),Ke(11),w(),V(12,J0A,3,0,"div",14),V(13,Y0A,3,0,"div",15),w(),V(14,T0A,1,0,"div",16),w(),m(15,"div",17),V(16,H0A,2,0,"div",18)(17,O0A,5,1,"div",19),w()}if(i&2){let o;p(2),ne("mdc-text-field--filled",!n._hasOutline())("mdc-text-field--outlined",n._hasOutline())("mdc-text-field--no-label",!n._hasFloatingLabel())("mdc-text-field--disabled",n._control.disabled)("mdc-text-field--invalid",n._control.errorState),p(2),W(!n._hasOutline()&&!n._control.disabled?4:-1),p(2),W(n._hasOutline()?6:-1),p(),W(n._hasIconPrefix?7:-1),p(),W(n._hasTextPrefix?8:-1),p(2),W(!n._hasOutline()||n._forceDisplayInfixLabel()?10:-1),p(2),W(n._hasTextSuffix?12:-1),p(),W(n._hasIconSuffix?13:-1),p(),W(n._hasOutline()?-1:14),p(),ne("mat-mdc-form-field-subscript-dynamic-size",n.subscriptSizing==="dynamic");let a=n._getSubscriptMessageType();p(),W((o=a)==="error"?16:o==="hint"?17:-1)}},dependencies:[lY,IY,sl,CY,R1],styles:[`.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator,.mdc-text-field__input::-webkit-search-cancel-button{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-filled-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-filled-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-outlined-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mat-form-field-outlined-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)} -`],encapsulation:2,changeDetection:0})}return t})();var Yr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Rp,No,Gi]})}return t})();var fY=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-text-field-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms} -`],encapsulation:2,changeDetection:0})}return t})(),W0A={passive:!0},mY=(()=>{class t{_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_styleLoader=h(Xn);_monitoredElements=new Map;constructor(){}monitor(A){if(!this._platform.isBrowser)return ja;this._styleLoader.load(fY);let i=xs(A),n=this._monitoredElements.get(i);if(n)return n.subject;let o=new XA,a="cdk-text-field-autofilled",r=g=>{g.animationName==="cdk-text-field-autofill-start"&&!i.classList.contains(a)?(i.classList.add(a),this._ngZone.run(()=>o.next({target:g.target,isAutofilled:!0}))):g.animationName==="cdk-text-field-autofill-end"&&i.classList.contains(a)&&(i.classList.remove(a),this._ngZone.run(()=>o.next({target:g.target,isAutofilled:!1})))},s=this._ngZone.runOutsideAngular(()=>(i.classList.add("cdk-text-field-autofill-monitored"),this._renderer.listen(i,"animationstart",r,W0A)));return this._monitoredElements.set(i,{subject:o,unlisten:s}),o}stopMonitoring(A){let i=xs(A),n=this._monitoredElements.get(i);n&&(n.unlisten(),n.subject.complete(),i.classList.remove("cdk-text-field-autofill-monitored"),i.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(i))}ngOnDestroy(){this._monitoredElements.forEach((A,i)=>this.stopMonitoring(i))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Op=(()=>{class t{_elementRef=h(ge);_platform=h(Ii);_ngZone=h(Oe);_renderer=h(_i);_resizeEvents=new XA;_previousValue;_initialHeight;_destroyed=new XA;_listenerCleanups;_minRows;_maxRows;_enabled=!0;_previousMinRows=-1;_textareaElement;get minRows(){return this._minRows}set minRows(A){this._minRows=tg(A),this._setMinHeight()}get maxRows(){return this._maxRows}set maxRows(A){this._maxRows=tg(A),this._setMaxHeight()}get enabled(){return this._enabled}set enabled(A){this._enabled!==A&&((this._enabled=A)?this.resizeToFitContent(!0):this.reset())}get placeholder(){return this._textareaElement.placeholder}set placeholder(A){this._cachedPlaceholderHeight=void 0,A?this._textareaElement.setAttribute("placeholder",A):this._textareaElement.removeAttribute("placeholder"),this._cacheTextareaPlaceholderHeight()}_cachedLineHeight;_cachedPlaceholderHeight;_document=h(Xt);_hasFocus=!1;_isViewInited=!1;constructor(){h(Xn).load(fY),this._textareaElement=this._elementRef.nativeElement}_setMinHeight(){let A=this.minRows&&this._cachedLineHeight?`${this.minRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.minHeight=A)}_setMaxHeight(){let A=this.maxRows&&this._cachedLineHeight?`${this.maxRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.maxHeight=A)}ngAfterViewInit(){this._platform.isBrowser&&(this._initialHeight=this._textareaElement.style.height,this.resizeToFitContent(),this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[this._renderer.listen("window","resize",()=>this._resizeEvents.next()),this._renderer.listen(this._textareaElement,"focus",this._handleFocusEvent),this._renderer.listen(this._textareaElement,"blur",this._handleFocusEvent)],this._resizeEvents.pipe(m1(16)).subscribe(()=>{this._cachedLineHeight=this._cachedPlaceholderHeight=void 0,this.resizeToFitContent(!0)})}),this._isViewInited=!0,this.resizeToFitContent(!0))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A()),this._resizeEvents.complete(),this._destroyed.next(),this._destroyed.complete()}_cacheTextareaLineHeight(){if(this._cachedLineHeight)return;let A=this._textareaElement.cloneNode(!1),i=A.style;A.rows=1,i.position="absolute",i.visibility="hidden",i.border="none",i.padding="0",i.height="",i.minHeight="",i.maxHeight="",i.top=i.bottom=i.left=i.right="auto",i.overflow="hidden",this._textareaElement.parentNode.appendChild(A),this._cachedLineHeight=A.clientHeight,A.remove(),this._setMinHeight(),this._setMaxHeight()}_measureScrollHeight(){let A=this._textareaElement,i=A.style.marginBottom||"",n=this._platform.FIREFOX,o=this._hasFocus,a=n?"cdk-textarea-autosize-measuring-firefox":"cdk-textarea-autosize-measuring";o&&(A.style.marginBottom=`${A.clientHeight}px`),A.classList.add(a);let r=A.scrollHeight-4;return A.classList.remove(a),o&&(A.style.marginBottom=i),r}_cacheTextareaPlaceholderHeight(){if(!this._isViewInited||this._cachedPlaceholderHeight!=null)return;if(!this.placeholder){this._cachedPlaceholderHeight=0;return}let A=this._textareaElement.value;this._textareaElement.value=this._textareaElement.placeholder,this._cachedPlaceholderHeight=this._measureScrollHeight(),this._textareaElement.value=A}_handleFocusEvent=A=>{this._hasFocus=A.type==="focus"};ngDoCheck(){this._platform.isBrowser&&this.resizeToFitContent()}resizeToFitContent(A=!1){if(!this._enabled||(this._cacheTextareaLineHeight(),this._cacheTextareaPlaceholderHeight(),!this._cachedLineHeight))return;let i=this._elementRef.nativeElement,n=i.value;if(!A&&this._minRows===this._previousMinRows&&n===this._previousValue)return;let o=this._measureScrollHeight(),a=Math.max(o,this._cachedPlaceholderHeight||0);i.style.height=`${a}px`,this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>this._scrollToCaretPosition(i)):setTimeout(()=>this._scrollToCaretPosition(i))}),this._previousValue=n,this._previousMinRows=this._minRows}reset(){this._initialHeight!==void 0&&(this._textareaElement.style.height=this._initialHeight)}_noopInputHandler(){}_scrollToCaretPosition(A){let{selectionStart:i,selectionEnd:n}=A;!this._destroyed.isStopped&&this._hasFocus&&A.setSelectionRange(i,n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["textarea","cdkTextareaAutosize",""]],hostAttrs:["rows","1",1,"cdk-textarea-autosize"],hostBindings:function(i,n){i&1&&tA("input",function(){return n._noopInputHandler()})},inputs:{minRows:[0,"cdkAutosizeMinRows","minRows"],maxRows:[0,"cdkAutosizeMaxRows","maxRows"],enabled:[2,"cdkTextareaAutosize","enabled",he],placeholder:"placeholder"},exportAs:["cdkTextareaAutosize"]})}return t})(),KB=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var wY=new yA("MAT_INPUT_VALUE_ACCESSOR");var UB=(()=>{class t{isErrorState(A,i){return!!(A&&A.invalid&&(A.touched||i&&i.submitted))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var JB=class{_defaultMatcher;ngControl;_parentFormGroup;_parentForm;_stateChanges;errorState=!1;matcher;constructor(e,A,i,n,o){this._defaultMatcher=e,this.ngControl=A,this._parentFormGroup=i,this._parentForm=n,this._stateChanges=o}updateErrorState(){let e=this.errorState,A=this._parentFormGroup||this._parentForm,i=this.matcher||this._defaultMatcher,n=this.ngControl?this.ngControl.control:null,o=i?.isErrorState(n,A)??!1;o!==e&&(this.errorState=o,this._stateChanges.next())}};var Z0A=["button","checkbox","file","hidden","image","radio","range","reset","submit"],X0A=new yA("MAT_INPUT_CONFIG"),wa=(()=>{class t{_elementRef=h(ge);_platform=h(Ii);ngControl=h(eg,{optional:!0,self:!0});_autofillMonitor=h(mY);_ngZone=h(Oe);_formField=h(Uu,{optional:!0});_renderer=h(_i);_uid=h(an).getId("mat-input-");_previousNativeValue;_inputValueAccessor;_signalBasedValueAccessor;_previousPlaceholder=null;_errorStateTracker;_config=h(X0A,{optional:!0});_cleanupIosKeyup;_cleanupWebkitWheel;_isServer=!1;_isNativeSelect=!1;_isTextarea=!1;_isInFormField=!1;focused=!1;stateChanges=new XA;controlType="mat-input";autofilled=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=yr(A),this.focused&&(this.focused=!1,this.stateChanges.next())}_disabled=!1;get id(){return this._id}set id(A){this._id=A||this._uid}_id;placeholder;name;get required(){return this._required??this.ngControl?.control?.hasValidator(Ag.required)??!1}set required(A){this._required=yr(A)}_required;get type(){return this._type}set type(A){this._type=A||"text",this._validateType(),!this._isTextarea&&m9().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}_type="text";get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}userAriaDescribedBy;get value(){return this._signalBasedValueAccessor?this._signalBasedValueAccessor.value():this._inputValueAccessor.value}set value(A){A!==this.value&&(this._signalBasedValueAccessor?this._signalBasedValueAccessor.value.set(A):this._inputValueAccessor.value=A,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(A){this._readonly=yr(A)}_readonly=!1;disabledInteractive;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}_neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(A=>m9().has(A));constructor(){let A=h(SB,{optional:!0}),i=h(v2,{optional:!0}),n=h(UB),o=h(wY,{optional:!0,self:!0}),a=this._elementRef.nativeElement,r=a.nodeName.toLowerCase();o?w1(o.value)?this._signalBasedValueAccessor=o:this._inputValueAccessor=o:this._inputValueAccessor=a,this._previousNativeValue=this.value,this.id=this.id,this._platform.IOS&&this._ngZone.runOutsideAngular(()=>{this._cleanupIosKeyup=this._renderer.listen(a,"keyup",this._iOSKeyupListener)}),this._errorStateTracker=new JB(n,this.ngControl,i,A,this.stateChanges),this._isServer=!this._platform.isBrowser,this._isNativeSelect=r==="select",this._isTextarea=r==="textarea",this._isInFormField=!!this._formField,this.disabledInteractive=this._config?.disabledInteractive||!1,this._isNativeSelect&&(this.controlType=a.multiple?"mat-native-select-multiple":"mat-native-select"),this._signalBasedValueAccessor&&Ga(()=>{this._signalBasedValueAccessor.value(),this.stateChanges.next()})}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(A=>{this.autofilled=A.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement),this._cleanupIosKeyup?.(),this._cleanupWebkitWheel?.()}ngDoCheck(){this.ngControl&&(this.updateErrorState(),this.ngControl.disabled!==null&&this.ngControl.disabled!==this.disabled&&(this.disabled=this.ngControl.disabled,this.stateChanges.next())),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(A){this._elementRef.nativeElement.focus(A)}updateErrorState(){this._errorStateTracker.updateErrorState()}_focusChanged(A){if(A!==this.focused){if(!this._isNativeSelect&&A&&this.disabled&&this.disabledInteractive){let i=this._elementRef.nativeElement;i.type==="number"?(i.type="text",i.setSelectionRange(0,0),i.type="number"):i.setSelectionRange(0,0)}this.focused=A,this.stateChanges.next()}}_onInput(){}_dirtyCheckNativeValue(){let A=this._elementRef.nativeElement.value;this._previousNativeValue!==A&&(this._previousNativeValue=A,this.stateChanges.next())}_dirtyCheckPlaceholder(){let A=this._getPlaceholder();if(A!==this._previousPlaceholder){let i=this._elementRef.nativeElement;this._previousPlaceholder=A,A?i.setAttribute("placeholder",A):i.removeAttribute("placeholder")}}_getPlaceholder(){return this.placeholder||null}_validateType(){Z0A.indexOf(this._type)>-1}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let A=this._elementRef.nativeElement.validity;return A&&A.badInput}get empty(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()&&!this.autofilled}get shouldLabelFloat(){if(this._isNativeSelect){let A=this._elementRef.nativeElement,i=A.options[0];return this.focused||A.multiple||!this.empty||!!(A.selectedIndex>-1&&i&&i.label)}else return this.focused&&!this.disabled||!this.empty}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(){this.focused||this.focus()}_isInlineSelect(){let A=this._elementRef.nativeElement;return this._isNativeSelect&&(A.multiple||A.size>1)}_iOSKeyupListener=A=>{let i=A.target;!i.value&&i.selectionStart===0&&i.selectionEnd===0&&(i.setSelectionRange(1,1),i.setSelectionRange(0,0))};_getReadonlyAttribute(){return this._isNativeSelect?null:this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["input","matInput",""],["textarea","matInput",""],["select","matNativeControl",""],["input","matNativeControl",""],["textarea","matNativeControl",""]],hostAttrs:[1,"mat-mdc-input-element"],hostVars:21,hostBindings:function(i,n){i&1&&tA("focus",function(){return n._focusChanged(!0)})("blur",function(){return n._focusChanged(!1)})("input",function(){return n._onInput()}),i&2&&(vo("id",n.id)("disabled",n.disabled&&!n.disabledInteractive)("required",n.required),ie("name",n.name||null)("readonly",n._getReadonlyAttribute())("aria-disabled",n.disabled&&n.disabledInteractive?"true":null)("aria-invalid",n.empty&&n.required?null:n.errorState)("aria-required",n.required)("id",n.id),ne("mat-input-server",n._isServer)("mat-mdc-form-field-textarea-control",n._isInFormField&&n._isTextarea)("mat-mdc-form-field-input-control",n._isInFormField)("mat-mdc-input-disabled-interactive",n.disabledInteractive)("mdc-text-field__input",n._isInFormField)("mat-mdc-native-select-inline",n._isInlineSelect()))},inputs:{disabled:"disabled",id:"id",placeholder:"placeholder",name:"name",required:"required",type:"type",errorStateMatcher:"errorStateMatcher",userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],value:"value",readonly:"readonly",disabledInteractive:[2,"disabledInteractive","disabledInteractive",he]},exportAs:["matInput"],features:[dt([{provide:Ku,useExisting:t}]),ti]})}return t})(),gl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Yr,Yr,KB,Gi]})}return t})();var tn=(function(t){return t[t.State=0]="State",t[t.Transition=1]="Transition",t[t.Sequence=2]="Sequence",t[t.Group=3]="Group",t[t.Animate=4]="Animate",t[t.Keyframes=5]="Keyframes",t[t.Style=6]="Style",t[t.Trigger=7]="Trigger",t[t.Reference=8]="Reference",t[t.AnimateChild=9]="AnimateChild",t[t.AnimateRef=10]="AnimateRef",t[t.Query=11]="Query",t[t.Stagger=12]="Stagger",t})(tn||{}),$l="*";function DY(t,e=null){return{type:tn.Sequence,steps:t,options:e}}function R9(t){return{type:tn.Style,styles:t,offset:null}}var lC=class{_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_originalOnDoneFns=[];_originalOnStartFns=[];_started=!1;_destroyed=!1;_finished=!1;_position=0;parentPlayer=null;totalTime;constructor(e=0,A=0){this.totalTime=e+A}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},YB=class{_onDoneFns=[];_onStartFns=[];_finished=!1;_started=!1;_destroyed=!1;_onDestroyFns=[];parentPlayer=null;totalTime=0;players;constructor(e){this.players=e;let A=0,i=0,n=0,o=this.players.length;o==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(a=>{a.onDone(()=>{++A==o&&this._onFinish()}),a.onDestroy(()=>{++i==o&&this._onDestroy()}),a.onStart(()=>{++n==o&&this._onStart()})}),this.totalTime=this.players.reduce((a,r)=>Math.max(a,r.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){let A=e*this.totalTime;this.players.forEach(i=>{let n=i.totalTime?Math.min(1,A/i.totalTime):1;i.setPosition(n)})}getPosition(){let e=this.players.reduce((A,i)=>A===null||i.totalTime>A.totalTime?i:A,null);return e!=null?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},Tu="!";function yY(t){return new kt(3e3,!1)}function $0A(){return new kt(3100,!1)}function ACA(){return new kt(3101,!1)}function eCA(t){return new kt(3001,!1)}function tCA(t){return new kt(3003,!1)}function iCA(t){return new kt(3004,!1)}function bY(t,e){return new kt(3005,!1)}function MY(){return new kt(3006,!1)}function kY(){return new kt(3007,!1)}function SY(t,e){return new kt(3008,!1)}function xY(t){return new kt(3002,!1)}function RY(t,e,A,i,n){return new kt(3010,!1)}function NY(){return new kt(3011,!1)}function FY(){return new kt(3012,!1)}function _Y(){return new kt(3200,!1)}function LY(){return new kt(3202,!1)}function GY(){return new kt(3013,!1)}function KY(t){return new kt(3014,!1)}function UY(t){return new kt(3015,!1)}function JY(t){return new kt(3016,!1)}function YY(t,e){return new kt(3404,!1)}function nCA(t){return new kt(3502,!1)}function TY(t){return new kt(3503,!1)}function HY(){return new kt(3300,!1)}function zY(t){return new kt(3504,!1)}function OY(t){return new kt(3301,!1)}function PY(t,e){return new kt(3302,!1)}function jY(t){return new kt(3303,!1)}function qY(t,e){return new kt(3400,!1)}function VY(t){return new kt(3401,!1)}function WY(t){return new kt(3402,!1)}function ZY(t,e){return new kt(3505,!1)}function cC(t){switch(t.length){case 0:return new lC;case 1:return t[0];default:return new YB(t)}}function L9(t,e,A=new Map,i=new Map){let n=[],o=[],a=-1,r=null;if(e.forEach(s=>{let g=s.get("offset"),l=g==a,C=l&&r||new Map;s.forEach((I,d)=>{let B=d,E=I;if(d!=="offset")switch(B=t.normalizePropertyName(B,n),E){case Tu:E=A.get(d);break;case $l:E=i.get(d);break;default:E=t.normalizeStyleValue(d,B,E,n);break}C.set(B,E)}),l||o.push(C),r=C,a=g}),n.length)throw nCA(n);return o}function Pp(t,e,A,i){switch(e){case"start":t.onStart(()=>i(A&&N9(A,"start",t)));break;case"done":t.onDone(()=>i(A&&N9(A,"done",t)));break;case"destroy":t.onDestroy(()=>i(A&&N9(A,"destroy",t)));break}}function N9(t,e,A){let i=A.totalTime,n=!!A.disabled,o=jp(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,i??t.totalTime,n),a=t._data;return a!=null&&(o._data=a),o}function jp(t,e,A,i,n="",o=0,a){return{element:t,triggerName:e,fromState:A,toState:i,phaseName:n,totalTime:o,disabled:!!a}}function ng(t,e,A){let i=t.get(e);return i||t.set(e,i=A),i}function G9(t){let e=t.indexOf(":"),A=t.substring(1,e),i=t.slice(e+1);return[A,i]}var oCA=typeof document>"u"?null:document.documentElement;function qp(t){let e=t.parentNode||t.host||null;return e===oCA?null:e}function aCA(t){return t.substring(1,6)=="ebkit"}var N1=null,vY=!1;function XY(t){N1||(N1=rCA()||{},vY=N1.style?"WebkitAppearance"in N1.style:!1);let e=!0;return N1.style&&!aCA(t)&&(e=t in N1.style,!e&&vY&&(e="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in N1.style)),e}function rCA(){return typeof document<"u"?document.body:null}function K9(t,e){for(;e;){if(e===t)return!0;e=qp(e)}return!1}function U9(t,e,A){if(A)return Array.from(t.querySelectorAll(e));let i=t.querySelector(e);return i?[i]:[]}var sCA=1e3,J9="{{",gCA="}}",Y9="ng-enter",Vp="ng-leave",Hu="ng-trigger",zu=".ng-trigger",T9="ng-animating",Wp=".ng-animating";function g0(t){if(typeof t=="number")return t;let e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:F9(parseFloat(e[1]),e[2])}function F9(t,e){return e==="s"?t*sCA:t}function Ou(t,e,A){return t.hasOwnProperty("duration")?t:cCA(t,e,A)}var lCA=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function cCA(t,e,A){let i,n=0,o="";if(typeof t=="string"){let a=t.match(lCA);if(a===null)return e.push(yY(t)),{duration:0,delay:0,easing:""};i=F9(parseFloat(a[1]),a[2]);let r=a[3];r!=null&&(n=F9(parseFloat(r),a[4]));let s=a[5];s&&(o=s)}else i=t;if(!A){let a=!1,r=e.length;i<0&&(e.push($0A()),a=!0),n<0&&(e.push(ACA()),a=!0),a&&e.splice(r,0,yY(t))}return{duration:i,delay:n,easing:o}}function $Y(t){return t.length?t[0]instanceof Map?t:t.map(e=>new Map(Object.entries(e))):[]}function Ac(t,e,A){e.forEach((i,n)=>{let o=Zp(n);A&&!A.has(n)&&A.set(n,t.style[o]),t.style[o]=i})}function R2(t,e){e.forEach((A,i)=>{let n=Zp(i);t.style[n]=""})}function TB(t){return Array.isArray(t)?t.length==1?t[0]:DY(t):t}function AT(t,e,A){let i=e.params||{},n=H9(t);n.length&&n.forEach(o=>{i.hasOwnProperty(o)||A.push(eCA(o))})}var _9=new RegExp(`${J9}\\s*(.+?)\\s*${gCA}`,"g");function H9(t){let e=[];if(typeof t=="string"){let A;for(;A=_9.exec(t);)e.push(A[1]);_9.lastIndex=0}return e}function HB(t,e,A){let i=`${t}`,n=i.replace(_9,(o,a)=>{let r=e[a];return r==null&&(A.push(tCA(a)),r=""),r.toString()});return n==i?t:n}var CCA=/-+([a-z0-9])/g;function Zp(t){return t.replace(CCA,(...e)=>e[1].toUpperCase())}function eT(t,e){return t===0||e===0}function tT(t,e,A){if(A.size&&e.length){let i=e[0],n=[];if(A.forEach((o,a)=>{i.has(a)||n.push(a),i.set(a,o)}),n.length)for(let o=1;oa.set(r,Xp(t,r)))}}return e}function og(t,e,A){switch(e.type){case tn.Trigger:return t.visitTrigger(e,A);case tn.State:return t.visitState(e,A);case tn.Transition:return t.visitTransition(e,A);case tn.Sequence:return t.visitSequence(e,A);case tn.Group:return t.visitGroup(e,A);case tn.Animate:return t.visitAnimate(e,A);case tn.Keyframes:return t.visitKeyframes(e,A);case tn.Style:return t.visitStyle(e,A);case tn.Reference:return t.visitReference(e,A);case tn.AnimateChild:return t.visitAnimateChild(e,A);case tn.AnimateRef:return t.visitAnimateRef(e,A);case tn.Query:return t.visitQuery(e,A);case tn.Stagger:return t.visitStagger(e,A);default:throw iCA(e.type)}}function Xp(t,e){return window.getComputedStyle(t)[e]}var aM=(()=>{class t{validateStyleProperty(A){return XY(A)}containsElement(A,i){return K9(A,i)}getParentElement(A){return qp(A)}query(A,i,n){return U9(A,i,n)}computeStyle(A,i,n){return n||""}animate(A,i,n,o,a,r=[],s){return new lC(n,o)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})(),_1=class{static NOOP=new aM},L1=class{};var ICA=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),i6=class extends L1{normalizePropertyName(e,A){return Zp(e)}normalizeStyleValue(e,A,i,n){let o="",a=i.toString().trim();if(ICA.has(A)&&i!==0&&i!=="0")if(typeof i=="number")o="px";else{let r=i.match(/^[+-]?[\d\.]+([a-z]*)$/);r&&r[1].length==0&&n.push(bY(e,i))}return a+o}};var n6="*";function dCA(t,e){let A=[];return typeof t=="string"?t.split(/\s*,\s*/).forEach(i=>BCA(i,A,e)):A.push(t),A}function BCA(t,e,A){if(t[0]==":"){let s=ECA(t,A);if(typeof s=="function"){e.push(s);return}t=s}let i=t.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(i==null||i.length<4)return A.push(UY(t)),e;let n=i[1],o=i[2],a=i[3];e.push(iT(n,a));let r=n==n6&&a==n6;o[0]=="<"&&!r&&e.push(iT(a,n))}function ECA(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(A,i)=>parseFloat(i)>parseFloat(A);case":decrement":return(A,i)=>parseFloat(i) *"}}var $p=new Set(["true","1"]),A6=new Set(["false","0"]);function iT(t,e){let A=$p.has(t)||A6.has(t),i=$p.has(e)||A6.has(e);return(n,o)=>{let a=t==n6||t==n,r=e==n6||e==o;return!a&&A&&typeof n=="boolean"&&(a=n?$p.has(t):A6.has(t)),!r&&i&&typeof o=="boolean"&&(r=o?$p.has(e):A6.has(e)),a&&r}}var IT=":self",QCA=new RegExp(`s*${IT}s*,?`,"g");function dT(t,e,A,i){return new V9(t).build(e,A,i)}var nT="",V9=class{_driver;constructor(e){this._driver=e}build(e,A,i){let n=new W9(A);return this._resetContextStyleTimingState(n),og(this,TB(e),n)}_resetContextStyleTimingState(e){e.currentQuerySelector=nT,e.collectedStyles=new Map,e.collectedStyles.set(nT,new Map),e.currentTime=0}visitTrigger(e,A){let i=A.queryCount=0,n=A.depCount=0,o=[],a=[];return e.name.charAt(0)=="@"&&A.errors.push(MY()),e.definitions.forEach(r=>{if(this._resetContextStyleTimingState(A),r.type==tn.State){let s=r,g=s.name;g.toString().split(/\s*,\s*/).forEach(l=>{s.name=l,o.push(this.visitState(s,A))}),s.name=g}else if(r.type==tn.Transition){let s=this.visitTransition(r,A);i+=s.queryCount,n+=s.depCount,a.push(s)}else A.errors.push(kY())}),{type:tn.Trigger,name:e.name,states:o,transitions:a,queryCount:i,depCount:n,options:null}}visitState(e,A){let i=this.visitStyle(e.styles,A),n=e.options&&e.options.params||null;if(i.containsDynamicStyles){let o=new Set,a=n||{};i.styles.forEach(r=>{r instanceof Map&&r.forEach(s=>{H9(s).forEach(g=>{a.hasOwnProperty(g)||o.add(g)})})}),o.size&&A.errors.push(SY(e.name,[...o.values()]))}return{type:tn.State,name:e.name,style:i,options:n?{params:n}:null}}visitTransition(e,A){A.queryCount=0,A.depCount=0;let i=og(this,TB(e.animation),A),n=dCA(e.expr,A.errors);return{type:tn.Transition,matchers:n,animation:i,queryCount:A.queryCount,depCount:A.depCount,options:F1(e.options)}}visitSequence(e,A){return{type:tn.Sequence,steps:e.steps.map(i=>og(this,i,A)),options:F1(e.options)}}visitGroup(e,A){let i=A.currentTime,n=0,o=e.steps.map(a=>{A.currentTime=i;let r=og(this,a,A);return n=Math.max(n,A.currentTime),r});return A.currentTime=n,{type:tn.Group,steps:o,options:F1(e.options)}}visitAnimate(e,A){let i=mCA(e.timings,A.errors);A.currentAnimateTimings=i;let n,o=e.styles?e.styles:R9({});if(o.type==tn.Keyframes)n=this.visitKeyframes(o,A);else{let a=e.styles,r=!1;if(!a){r=!0;let g={};i.easing&&(g.easing=i.easing),a=R9(g)}A.currentTime+=i.duration+i.delay;let s=this.visitStyle(a,A);s.isEmptyStep=r,n=s}return A.currentAnimateTimings=null,{type:tn.Animate,timings:i,style:n,options:null}}visitStyle(e,A){let i=this._makeStyleAst(e,A);return this._validateStyleAst(i,A),i}_makeStyleAst(e,A){let i=[],n=Array.isArray(e.styles)?e.styles:[e.styles];for(let r of n)typeof r=="string"?r===$l?i.push(r):A.errors.push(xY(r)):i.push(new Map(Object.entries(r)));let o=!1,a=null;return i.forEach(r=>{if(r instanceof Map&&(r.has("easing")&&(a=r.get("easing"),r.delete("easing")),!o)){for(let s of r.values())if(s.toString().indexOf(J9)>=0){o=!0;break}}}),{type:tn.Style,styles:i,easing:a,offset:e.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(e,A){let i=A.currentAnimateTimings,n=A.currentTime,o=A.currentTime;i&&o>0&&(o-=i.duration+i.delay),e.styles.forEach(a=>{typeof a!="string"&&a.forEach((r,s)=>{let g=A.collectedStyles.get(A.currentQuerySelector),l=g.get(s),C=!0;l&&(o!=n&&o>=l.startTime&&n<=l.endTime&&(A.errors.push(RY(s,l.startTime,l.endTime,o,n)),C=!1),o=l.startTime),C&&g.set(s,{startTime:o,endTime:n}),A.options&&AT(r,A.options,A.errors)})})}visitKeyframes(e,A){let i={type:tn.Keyframes,styles:[],options:null};if(!A.currentAnimateTimings)return A.errors.push(NY()),i;let n=1,o=0,a=[],r=!1,s=!1,g=0,l=e.steps.map(f=>{let b=this._makeStyleAst(f,A),S=b.offset!=null?b.offset:fCA(b.styles),M=0;return S!=null&&(o++,M=b.offset=S),s=s||M<0||M>1,r=r||M0&&o{let S=I>0?b==d?1:I*b:a[b],M=S*Q;A.currentTime=B+E.delay+M,E.duration=M,this._validateStyleAst(f,A),f.offset=S,i.styles.push(f)}),i}visitReference(e,A){return{type:tn.Reference,animation:og(this,TB(e.animation),A),options:F1(e.options)}}visitAnimateChild(e,A){return A.depCount++,{type:tn.AnimateChild,options:F1(e.options)}}visitAnimateRef(e,A){return{type:tn.AnimateRef,animation:this.visitReference(e.animation,A),options:F1(e.options)}}visitQuery(e,A){let i=A.currentQuerySelector,n=e.options||{};A.queryCount++,A.currentQuery=e;let[o,a]=hCA(e.selector);A.currentQuerySelector=i.length?i+" "+o:o,ng(A.collectedStyles,A.currentQuerySelector,new Map);let r=og(this,TB(e.animation),A);return A.currentQuery=null,A.currentQuerySelector=i,{type:tn.Query,selector:o,limit:n.limit||0,optional:!!n.optional,includeSelf:a,animation:r,originalSelector:e.selector,options:F1(e.options)}}visitStagger(e,A){A.currentQuery||A.errors.push(GY());let i=e.timings==="full"?{duration:0,delay:0,easing:"full"}:Ou(e.timings,A.errors,!0);return{type:tn.Stagger,animation:og(this,TB(e.animation),A),timings:i,options:null}}};function hCA(t){let e=!!t.split(/\s*,\s*/).find(A=>A==IT);return e&&(t=t.replace(QCA,"")),t=t.replace(/@\*/g,zu).replace(/@\w+/g,A=>zu+"-"+A.slice(1)).replace(/:animating/g,Wp),[t,e]}function uCA(t){return t?cA({},t):null}var W9=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(e){this.errors=e}};function fCA(t){if(typeof t=="string")return null;let e=null;if(Array.isArray(t))t.forEach(A=>{if(A instanceof Map&&A.has("offset")){let i=A;e=parseFloat(i.get("offset")),i.delete("offset")}});else if(t instanceof Map&&t.has("offset")){let A=t;e=parseFloat(A.get("offset")),A.delete("offset")}return e}function mCA(t,e){if(t.hasOwnProperty("duration"))return t;if(typeof t=="number"){let o=Ou(t,e).duration;return z9(o,0,"")}let A=t;if(A.split(/\s+/).some(o=>o.charAt(0)=="{"&&o.charAt(1)=="{")){let o=z9(0,0,"");return o.dynamic=!0,o.strValue=A,o}let n=Ou(A,e);return z9(n.duration,n.delay,n.easing)}function F1(t){return t?(t=cA({},t),t.params&&(t.params=uCA(t.params))):t={},t}function z9(t,e,A){return{duration:t,delay:e,easing:A}}function rM(t,e,A,i,n,o,a=null,r=!1){return{type:1,element:t,keyframes:e,preStyleProps:A,postStyleProps:i,duration:n,delay:o,totalTime:n+o,easing:a,subTimeline:r}}var ju=class{_map=new Map;get(e){return this._map.get(e)||[]}append(e,A){let i=this._map.get(e);i||this._map.set(e,i=[]),i.push(...A)}has(e){return this._map.has(e)}clear(){this._map.clear()}},pCA=1,wCA=":enter",DCA=new RegExp(wCA,"g"),yCA=":leave",vCA=new RegExp(yCA,"g");function BT(t,e,A,i,n,o=new Map,a=new Map,r,s,g=[]){return new Z9().buildKeyframes(t,e,A,i,n,o,a,r,s,g)}var Z9=class{buildKeyframes(e,A,i,n,o,a,r,s,g,l=[]){g=g||new ju;let C=new X9(e,A,g,n,o,l,[]);C.options=s;let I=s.delay?g0(s.delay):0;C.currentTimeline.delayNextStep(I),C.currentTimeline.setStyles([a],null,C.errors,s),og(this,i,C);let d=C.timelines.filter(B=>B.containsAnimation());if(d.length&&r.size){let B;for(let E=d.length-1;E>=0;E--){let Q=d[E];if(Q.element===A){B=Q;break}}B&&!B.allowOnlyTimelineStyles()&&B.setStyles([r],null,C.errors,s)}return d.length?d.map(B=>B.buildKeyframes()):[rM(A,[],[],[],0,I,"",!1)]}visitTrigger(e,A){}visitState(e,A){}visitTransition(e,A){}visitAnimateChild(e,A){let i=A.subInstructions.get(A.element);if(i){let n=A.createSubContext(e.options),o=A.currentTimeline.currentTime,a=this._visitSubInstructions(i,n,n.options);o!=a&&A.transformIntoNewTimeline(a)}A.previousNode=e}visitAnimateRef(e,A){let i=A.createSubContext(e.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],A,i),this.visitReference(e.animation,i),A.transformIntoNewTimeline(i.currentTimeline.currentTime),A.previousNode=e}_applyAnimationRefDelays(e,A,i){for(let n of e){let o=n?.delay;if(o){let a=typeof o=="number"?o:g0(HB(o,n?.params??{},A.errors));i.delayNextStep(a)}}}_visitSubInstructions(e,A,i){let o=A.currentTimeline.currentTime,a=i.duration!=null?g0(i.duration):null,r=i.delay!=null?g0(i.delay):null;return a!==0&&e.forEach(s=>{let g=A.appendInstructionToTimeline(s,a,r);o=Math.max(o,g.duration+g.delay)}),o}visitReference(e,A){A.updateOptions(e.options,!0),og(this,e.animation,A),A.previousNode=e}visitSequence(e,A){let i=A.subContextCount,n=A,o=e.options;if(o&&(o.params||o.delay)&&(n=A.createSubContext(o),n.transformIntoNewTimeline(),o.delay!=null)){n.previousNode.type==tn.Style&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=o6);let a=g0(o.delay);n.delayNextStep(a)}e.steps.length&&(e.steps.forEach(a=>og(this,a,n)),n.currentTimeline.applyStylesToKeyframe(),n.subContextCount>i&&n.transformIntoNewTimeline()),A.previousNode=e}visitGroup(e,A){let i=[],n=A.currentTimeline.currentTime,o=e.options&&e.options.delay?g0(e.options.delay):0;e.steps.forEach(a=>{let r=A.createSubContext(e.options);o&&r.delayNextStep(o),og(this,a,r),n=Math.max(n,r.currentTimeline.currentTime),i.push(r.currentTimeline)}),i.forEach(a=>A.currentTimeline.mergeTimelineCollectedStyles(a)),A.transformIntoNewTimeline(n),A.previousNode=e}_visitTiming(e,A){if(e.dynamic){let i=e.strValue,n=A.params?HB(i,A.params,A.errors):i;return Ou(n,A.errors)}else return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,A){let i=A.currentAnimateTimings=this._visitTiming(e.timings,A),n=A.currentTimeline;i.delay&&(A.incrementTime(i.delay),n.snapshotCurrentStyles());let o=e.style;o.type==tn.Keyframes?this.visitKeyframes(o,A):(A.incrementTime(i.duration),this.visitStyle(o,A),n.applyStylesToKeyframe()),A.currentAnimateTimings=null,A.previousNode=e}visitStyle(e,A){let i=A.currentTimeline,n=A.currentAnimateTimings;!n&&i.hasCurrentStyleProperties()&&i.forwardFrame();let o=n&&n.easing||e.easing;e.isEmptyStep?i.applyEmptyStep(o):i.setStyles(e.styles,o,A.errors,A.options),A.previousNode=e}visitKeyframes(e,A){let i=A.currentAnimateTimings,n=A.currentTimeline.duration,o=i.duration,r=A.createSubContext().currentTimeline;r.easing=i.easing,e.styles.forEach(s=>{let g=s.offset||0;r.forwardTime(g*o),r.setStyles(s.styles,s.easing,A.errors,A.options),r.applyStylesToKeyframe()}),A.currentTimeline.mergeTimelineCollectedStyles(r),A.transformIntoNewTimeline(n+o),A.previousNode=e}visitQuery(e,A){let i=A.currentTimeline.currentTime,n=e.options||{},o=n.delay?g0(n.delay):0;o&&(A.previousNode.type===tn.Style||i==0&&A.currentTimeline.hasCurrentStyleProperties())&&(A.currentTimeline.snapshotCurrentStyles(),A.previousNode=o6);let a=i,r=A.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!n.optional,A.errors);A.currentQueryTotal=r.length;let s=null;r.forEach((g,l)=>{A.currentQueryIndex=l;let C=A.createSubContext(e.options,g);o&&C.delayNextStep(o),g===A.element&&(s=C.currentTimeline),og(this,e.animation,C),C.currentTimeline.applyStylesToKeyframe();let I=C.currentTimeline.currentTime;a=Math.max(a,I)}),A.currentQueryIndex=0,A.currentQueryTotal=0,A.transformIntoNewTimeline(a),s&&(A.currentTimeline.mergeTimelineCollectedStyles(s),A.currentTimeline.snapshotCurrentStyles()),A.previousNode=e}visitStagger(e,A){let i=A.parentContext,n=A.currentTimeline,o=e.timings,a=Math.abs(o.duration),r=a*(A.currentQueryTotal-1),s=a*A.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":s=r-s;break;case"full":s=i.currentStaggerTime;break}let l=A.currentTimeline;s&&l.delayNextStep(s);let C=l.currentTime;og(this,e.animation,A),A.previousNode=e,i.currentStaggerTime=n.currentTime-C+(n.startTime-i.currentTimeline.startTime)}},o6={},X9=class t{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=o6;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(e,A,i,n,o,a,r,s){this._driver=e,this.element=A,this.subInstructions=i,this._enterClassName=n,this._leaveClassName=o,this.errors=a,this.timelines=r,this.currentTimeline=s||new a6(this._driver,A,0),r.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,A){if(!e)return;let i=e,n=this.options;i.duration!=null&&(n.duration=g0(i.duration)),i.delay!=null&&(n.delay=g0(i.delay));let o=i.params;if(o){let a=n.params;a||(a=this.options.params={}),Object.keys(o).forEach(r=>{(!A||!a.hasOwnProperty(r))&&(a[r]=HB(o[r],a,this.errors))})}}_copyOptions(){let e={};if(this.options){let A=this.options.params;if(A){let i=e.params={};Object.keys(A).forEach(n=>{i[n]=A[n]})}}return e}createSubContext(e=null,A,i){let n=A||this.element,o=new t(this._driver,n,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(n,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(e),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(e){return this.previousNode=o6,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,A,i){let n={duration:A??e.duration,delay:this.currentTimeline.currentTime+(i??0)+e.delay,easing:""},o=new $9(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,n,e.stretchStartingKeyframe);return this.timelines.push(o),n}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,A,i,n,o,a){let r=[];if(n&&r.push(this.element),e.length>0){e=e.replace(DCA,"."+this._enterClassName),e=e.replace(vCA,"."+this._leaveClassName);let s=i!=1,g=this._driver.query(this.element,e,s);i!==0&&(g=i<0?g.slice(g.length+i,g.length):g.slice(0,i)),r.push(...g)}return!o&&r.length==0&&a.push(KY(A)),r}},a6=class t{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(e,A,i,n){this._driver=e,this.element=A,this.startTime=i,this._elementTimelineStylesLookup=n,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(A),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(A,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){let A=this._keyframes.size===1&&this._pendingStyles.size;this.duration||A?(this.forwardTime(this.currentTime+e),A&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,A){return this.applyStylesToKeyframe(),new t(this._driver,e,A||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=pCA,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,A){this._localTimelineStyles.set(e,A),this._globalTimelineStyles.set(e,A),this._styleSummary.set(e,{time:this.currentTime,value:A})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[A,i]of this._globalTimelineStyles)this._backFill.set(A,i||$l),this._currentKeyframe.set(A,$l);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,A,i,n){A&&this._previousKeyframe.set("easing",A);let o=n&&n.params||{},a=bCA(e,this._globalTimelineStyles);for(let[r,s]of a){let g=HB(s,o,i);this._pendingStyles.set(r,g),this._localTimelineStyles.has(r)||this._backFill.set(r,this._globalTimelineStyles.get(r)??$l),this._updateStyle(r,g)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((e,A)=>{this._currentKeyframe.set(A,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,A)=>{this._currentKeyframe.has(A)||this._currentKeyframe.set(A,e)}))}snapshotCurrentStyles(){for(let[e,A]of this._localTimelineStyles)this._pendingStyles.set(e,A),this._updateStyle(e,A)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let e=[];for(let A in this._currentKeyframe)e.push(A);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((A,i)=>{let n=this._styleSummary.get(i);(!n||A.time>n.time)&&this._updateStyle(i,A.value)})}buildKeyframes(){this.applyStylesToKeyframe();let e=new Set,A=new Set,i=this._keyframes.size===1&&this.duration===0,n=[];this._keyframes.forEach((r,s)=>{let g=new Map([...this._backFill,...r]);g.forEach((l,C)=>{l===Tu?e.add(C):l===$l&&A.add(C)}),i||g.set("offset",s/this.duration),n.push(g)});let o=[...e.values()],a=[...A.values()];if(i){let r=n[0],s=new Map(r);r.set("offset",0),s.set("offset",1),n=[r,s]}return rM(this.element,n,o,a,this.duration,this.startTime,this.easing,!1)}},$9=class extends a6{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(e,A,i,n,o,a,r=!1){super(e,A,a.delay),this.keyframes=i,this.preStyleProps=n,this.postStyleProps=o,this._stretchStartingKeyframe=r,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:A,duration:i,easing:n}=this.timings;if(this._stretchStartingKeyframe&&A){let o=[],a=i+A,r=A/a,s=new Map(e[0]);s.set("offset",0),o.push(s);let g=new Map(e[0]);g.set("offset",oT(r)),o.push(g);let l=e.length-1;for(let C=1;C<=l;C++){let I=new Map(e[C]),d=I.get("offset"),B=A+d*i;I.set("offset",oT(B/a)),o.push(I)}i=a,A=0,n="",e=o}return rM(this.element,e,this.preStyleProps,this.postStyleProps,i,A,n,!0)}};function oT(t,e=3){let A=Math.pow(10,e-1);return Math.round(t*A)/A}function bCA(t,e){let A=new Map,i;return t.forEach(n=>{if(n==="*"){i??=e.keys();for(let o of i)A.set(o,$l)}else for(let[o,a]of n)A.set(o,a)}),A}function aT(t,e,A,i,n,o,a,r,s,g,l,C,I){return{type:0,element:t,triggerName:e,isRemovalTransition:n,fromState:A,fromStyles:o,toState:i,toStyles:a,timelines:r,queriedElements:s,preStyleProps:g,postStyleProps:l,totalTime:C,errors:I}}var O9={},r6=class{_triggerName;ast;_stateStyles;constructor(e,A,i){this._triggerName=e,this.ast=A,this._stateStyles=i}match(e,A,i,n){return MCA(this.ast.matchers,e,A,i,n)}buildStyles(e,A,i){let n=this._stateStyles.get("*");return e!==void 0&&(n=this._stateStyles.get(e?.toString())||n),n?n.buildStyles(A,i):new Map}build(e,A,i,n,o,a,r,s,g,l){let C=[],I=this.ast.options&&this.ast.options.params||O9,d=r&&r.params||O9,B=this.buildStyles(i,d,C),E=s&&s.params||O9,Q=this.buildStyles(n,E,C),f=new Set,b=new Map,S=new Map,M=n==="void",D={params:ET(E,I),delay:this.ast.options?.delay},F=l?[]:BT(e,A,this.ast.animation,o,a,B,Q,D,g,C),_=0;return F.forEach(U=>{_=Math.max(U.duration+U.delay,_)}),C.length?aT(A,this._triggerName,i,n,M,B,Q,[],[],b,S,_,C):(F.forEach(U=>{let J=U.element,j=ng(b,J,new Set);U.preStyleProps.forEach(O=>j.add(O));let AA=ng(S,J,new Set);U.postStyleProps.forEach(O=>AA.add(O)),J!==A&&f.add(J)}),aT(A,this._triggerName,i,n,M,B,Q,F,[...f.values()],b,S,_))}};function MCA(t,e,A,i,n){return t.some(o=>o(e,A,i,n))}function ET(t,e){let A=cA({},e);return Object.entries(t).forEach(([i,n])=>{n!=null&&(A[i]=n)}),A}var AM=class{styles;defaultParams;normalizer;constructor(e,A,i){this.styles=e,this.defaultParams=A,this.normalizer=i}buildStyles(e,A){let i=new Map,n=ET(e,this.defaultParams);return this.styles.styles.forEach(o=>{typeof o!="string"&&o.forEach((a,r)=>{a&&(a=HB(a,n,A));let s=this.normalizer.normalizePropertyName(r,A);a=this.normalizer.normalizeStyleValue(r,s,a,A),i.set(r,a)})}),i}};function kCA(t,e,A){return new eM(t,e,A)}var eM=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(e,A,i){this.name=e,this.ast=A,this._normalizer=i,A.states.forEach(n=>{let o=n.options&&n.options.params||{};this.states.set(n.name,new AM(n.style,o,i))}),rT(this.states,"true","1"),rT(this.states,"false","0"),A.transitions.forEach(n=>{this.transitionFactories.push(new r6(e,n,this.states))}),this.fallbackTransition=SCA(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,A,i,n){return this.transitionFactories.find(a=>a.match(e,A,i,n))||null}matchStyles(e,A,i){return this.fallbackTransition.buildStyles(e,A,i)}};function SCA(t,e,A){let i=[(a,r)=>!0],n={type:tn.Sequence,steps:[],options:null},o={type:tn.Transition,animation:n,matchers:i,options:null,queryCount:0,depCount:0};return new r6(t,o,e)}function rT(t,e,A){t.has(e)?t.has(A)||t.set(A,t.get(e)):t.has(A)&&t.set(e,t.get(A))}var xCA=new ju,tM=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(e,A,i){this.bodyNode=e,this._driver=A,this._normalizer=i}register(e,A){let i=[],n=[],o=dT(this._driver,A,i,n);if(i.length)throw TY(i);this._animations.set(e,o)}_buildPlayer(e,A,i){let n=e.element,o=L9(this._normalizer,e.keyframes,A,i);return this._driver.animate(n,o,e.duration,e.delay,e.easing,[],!0)}create(e,A,i={}){let n=[],o=this._animations.get(e),a,r=new Map;if(o?(a=BT(this._driver,A,o,Y9,Vp,new Map,new Map,i,xCA,n),a.forEach(l=>{let C=ng(r,l.element,new Map);l.postStyleProps.forEach(I=>C.set(I,null))})):(n.push(HY()),a=[]),n.length)throw zY(n);r.forEach((l,C)=>{l.forEach((I,d)=>{l.set(d,this._driver.computeStyle(C,d,$l))})});let s=a.map(l=>{let C=r.get(l.element);return this._buildPlayer(l,new Map,C)}),g=cC(s);return this._playersById.set(e,g),g.onDestroy(()=>this.destroy(e)),this.players.push(g),g}destroy(e){let A=this._getPlayer(e);A.destroy(),this._playersById.delete(e);let i=this.players.indexOf(A);i>=0&&this.players.splice(i,1)}_getPlayer(e){let A=this._playersById.get(e);if(!A)throw OY(e);return A}listen(e,A,i,n){let o=jp(A,"","","");return Pp(this._getPlayer(e),i,o,n),()=>{}}command(e,A,i,n){if(i=="register"){this.register(e,n[0]);return}if(i=="create"){let a=n[0]||{};this.create(e,A,a);return}let o=this._getPlayer(e);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(n[0]));break;case"destroy":this.destroy(e);break}}},sT="ng-animate-queued",RCA=".ng-animate-queued",P9="ng-animate-disabled",NCA=".ng-animate-disabled",FCA="ng-star-inserted",_CA=".ng-star-inserted",LCA=[],QT={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},GCA={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},ec="__ng_removed",qu=class{namespaceId;value;options;get params(){return this.options.params}constructor(e,A=""){this.namespaceId=A;let i=e&&e.hasOwnProperty("value"),n=i?e.value:e;if(this.value=UCA(n),i){let o=e,{value:a}=o,r=tU(o,["value"]);this.options=r}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){let A=e.params;if(A){let i=this.options.params;Object.keys(A).forEach(n=>{i[n]==null&&(i[n]=A[n])})}}},Pu="void",j9=new qu(Pu),iM=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(e,A,i){this.id=e,this.hostElement=A,this._engine=i,this._hostClassName="ng-tns-"+e,ll(A,this._hostClassName)}listen(e,A,i,n){if(!this._triggers.has(A))throw PY(i,A);if(i==null||i.length==0)throw jY(A);if(!JCA(i))throw qY(i,A);let o=ng(this._elementListeners,e,[]),a={name:A,phase:i,callback:n};o.push(a);let r=ng(this._engine.statesByElement,e,new Map);return r.has(A)||(ll(e,Hu),ll(e,Hu+"-"+A),r.set(A,j9)),()=>{this._engine.afterFlush(()=>{let s=o.indexOf(a);s>=0&&o.splice(s,1),this._triggers.has(A)||r.delete(A)})}}register(e,A){return this._triggers.has(e)?!1:(this._triggers.set(e,A),!0)}_getTrigger(e){let A=this._triggers.get(e);if(!A)throw VY(e);return A}trigger(e,A,i,n=!0){let o=this._getTrigger(A),a=new Vu(this.id,A,e),r=this._engine.statesByElement.get(e);r||(ll(e,Hu),ll(e,Hu+"-"+A),this._engine.statesByElement.set(e,r=new Map));let s=r.get(A),g=new qu(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&s&&g.absorbOptions(s.options),r.set(A,g),s||(s=j9),!(g.value===Pu)&&s.value===g.value){if(!HCA(s.params,g.params)){let E=[],Q=o.matchStyles(s.value,s.params,E),f=o.matchStyles(g.value,g.params,E);E.length?this._engine.reportError(E):this._engine.afterFlush(()=>{R2(e,Q),Ac(e,f)})}return}let I=ng(this._engine.playersByElement,e,[]);I.forEach(E=>{E.namespaceId==this.id&&E.triggerName==A&&E.queued&&E.destroy()});let d=o.matchTransition(s.value,g.value,e,g.params),B=!1;if(!d){if(!n)return;d=o.fallbackTransition,B=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:A,transition:d,fromState:s,toState:g,player:a,isFallbackTransition:B}),B||(ll(e,sT),a.onStart(()=>{zB(e,sT)})),a.onDone(()=>{let E=this.players.indexOf(a);E>=0&&this.players.splice(E,1);let Q=this._engine.playersByElement.get(e);if(Q){let f=Q.indexOf(a);f>=0&&Q.splice(f,1)}}),this.players.push(a),I.push(a),a}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(A=>A.delete(e)),this._elementListeners.forEach((A,i)=>{this._elementListeners.set(i,A.filter(n=>n.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);let A=this._engine.playersByElement.get(e);A&&(A.forEach(i=>i.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,A){let i=this._engine.driver.query(e,zu,!0);i.forEach(n=>{if(n[ec])return;let o=this._engine.fetchNamespacesByElement(n);o.size?o.forEach(a=>a.triggerLeaveAnimation(n,A,!1,!0)):this.clearElementCache(n)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(n=>this.clearElementCache(n)))}triggerLeaveAnimation(e,A,i,n){let o=this._engine.statesByElement.get(e),a=new Map;if(o){let r=[];if(o.forEach((s,g)=>{if(a.set(g,s.value),this._triggers.has(g)){let l=this.trigger(e,g,Pu,n);l&&r.push(l)}}),r.length)return this._engine.markElementAsRemoved(this.id,e,!0,A,a),i&&cC(r).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){let A=this._elementListeners.get(e),i=this._engine.statesByElement.get(e);if(A&&i){let n=new Set;A.forEach(o=>{let a=o.name;if(n.has(a))return;n.add(a);let s=this._triggers.get(a).fallbackTransition,g=i.get(a)||j9,l=new qu(Pu),C=new Vu(this.id,a,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:a,transition:s,fromState:g,toState:l,player:C,isFallbackTransition:!0})})}}removeNode(e,A){let i=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,A),this.triggerLeaveAnimation(e,A,!0))return;let n=!1;if(i.totalAnimations){let o=i.players.length?i.playersByQueriedElement.get(e):[];if(o&&o.length)n=!0;else{let a=e;for(;a=a.parentNode;)if(i.statesByElement.get(a)){n=!0;break}}}if(this.prepareLeaveAnimationListeners(e),n)i.markElementAsRemoved(this.id,e,!1,A);else{let o=e[ec];(!o||o===QT)&&(i.afterFlush(()=>this.clearElementCache(e)),i.destroyInnerAnimations(e),i._onRemovalComplete(e,A))}}insertNode(e,A){ll(e,this._hostClassName)}drainQueuedTransitions(e){let A=[];return this._queue.forEach(i=>{let n=i.player;if(n.destroyed)return;let o=i.element,a=this._elementListeners.get(o);a&&a.forEach(r=>{if(r.name==i.triggerName){let s=jp(o,i.triggerName,i.fromState.value,i.toState.value);s._data=e,Pp(i.player,r.phase,s,r.callback)}}),n.markedForDestroy?this._engine.afterFlush(()=>{n.destroy()}):A.push(i)}),this._queue=[],A.sort((i,n)=>{let o=i.transition.ast.depCount,a=n.transition.ast.depCount;return o==0||a==0?o-a:this._engine.driver.containsElement(i.element,n.element)?1:-1})}destroy(e){this.players.forEach(A=>A.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}},nM=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(e,A)=>{};_onRemovalComplete(e,A){this.onRemovalComplete(e,A)}constructor(e,A,i){this.bodyNode=e,this.driver=A,this._normalizer=i}get queuedPlayers(){let e=[];return this._namespaceList.forEach(A=>{A.players.forEach(i=>{i.queued&&e.push(i)})}),e}createNamespace(e,A){let i=new iM(e,A,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,A)?this._balanceNamespaceList(i,A):(this.newHostElements.set(A,i),this.collectEnterElement(A)),this._namespaceLookup[e]=i}_balanceNamespaceList(e,A){let i=this._namespaceList,n=this.namespacesByHostElement;if(i.length-1>=0){let a=!1,r=this.driver.getParentElement(A);for(;r;){let s=n.get(r);if(s){let g=i.indexOf(s);i.splice(g+1,0,e),a=!0;break}r=this.driver.getParentElement(r)}a||i.unshift(e)}else i.push(e);return n.set(A,e),e}register(e,A){let i=this._namespaceLookup[e];return i||(i=this.createNamespace(e,A)),i}registerTrigger(e,A,i){let n=this._namespaceLookup[e];n&&n.register(A,i)&&this.totalAnimations++}destroy(e,A){e&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let i=this._fetchNamespace(e);this.namespacesByHostElement.delete(i.hostElement);let n=this._namespaceList.indexOf(i);n>=0&&this._namespaceList.splice(n,1),i.destroy(A),delete this._namespaceLookup[e]}))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){let A=new Set,i=this.statesByElement.get(e);if(i){for(let n of i.values())if(n.namespaceId){let o=this._fetchNamespace(n.namespaceId);o&&A.add(o)}}return A}trigger(e,A,i,n){if(e6(A)){let o=this._fetchNamespace(e);if(o)return o.trigger(A,i,n),!0}return!1}insertNode(e,A,i,n){if(!e6(A))return;let o=A[ec];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;let a=this.collectedLeaveElements.indexOf(A);a>=0&&this.collectedLeaveElements.splice(a,1)}if(e){let a=this._fetchNamespace(e);a&&a.insertNode(A,i)}n&&this.collectEnterElement(A)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,A){A?this.disabledNodes.has(e)||(this.disabledNodes.add(e),ll(e,P9)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),zB(e,P9))}removeNode(e,A,i){if(e6(A)){let n=e?this._fetchNamespace(e):null;n?n.removeNode(A,i):this.markElementAsRemoved(e,A,!1,i);let o=this.namespacesByHostElement.get(A);o&&o.id!==e&&o.removeNode(A,i)}else this._onRemovalComplete(A,i)}markElementAsRemoved(e,A,i,n,o){this.collectedLeaveElements.push(A),A[ec]={namespaceId:e,setForRemoval:n,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:o}}listen(e,A,i,n,o){return e6(A)?this._fetchNamespace(e).listen(A,i,n,o):()=>{}}_buildInstruction(e,A,i,n,o){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,i,n,e.fromState.options,e.toState.options,A,o)}destroyInnerAnimations(e){let A=this.driver.query(e,zu,!0);A.forEach(i=>this.destroyActiveAnimationsForElement(i)),this.playersByQueriedElement.size!=0&&(A=this.driver.query(e,Wp,!0),A.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(e){let A=this.playersByElement.get(e);A&&A.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(e){let A=this.playersByQueriedElement.get(e);A&&A.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return cC(this.players).onDone(()=>e());e()})}processLeaveNode(e){let A=e[ec];if(A&&A.setForRemoval){if(e[ec]=QT,A.namespaceId){this.destroyInnerAnimations(e);let i=this._fetchNamespace(A.namespaceId);i&&i.clearElementCache(e)}this._onRemovalComplete(e,A.setForRemoval)}e.classList?.contains(P9)&&this.markElementAsDisabled(e,!1),this.driver.query(e,NCA,!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(e=-1){let A=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,n)=>this._balanceNamespaceList(i,n)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;ii()),this._flushFns=[],this._whenQuietFns.length){let i=this._whenQuietFns;this._whenQuietFns=[],A.length?cC(A).onDone(()=>{i.forEach(n=>n())}):i.forEach(n=>n())}}reportError(e){throw WY(e)}_flushAnimations(e,A){let i=new ju,n=[],o=new Map,a=[],r=new Map,s=new Map,g=new Map,l=new Set;this.disabledNodes.forEach(iA=>{l.add(iA);let BA=this.driver.query(iA,RCA,!0);for(let oA=0;oA{let oA=Y9+E++;B.set(BA,oA),iA.forEach(sA=>ll(sA,oA))});let Q=[],f=new Set,b=new Set;for(let iA=0;iAf.add(sA)):b.add(BA))}let S=new Map,M=cT(I,Array.from(f));M.forEach((iA,BA)=>{let oA=Vp+E++;S.set(BA,oA),iA.forEach(sA=>ll(sA,oA))}),e.push(()=>{d.forEach((iA,BA)=>{let oA=B.get(BA);iA.forEach(sA=>zB(sA,oA))}),M.forEach((iA,BA)=>{let oA=S.get(BA);iA.forEach(sA=>zB(sA,oA))}),Q.forEach(iA=>{this.processLeaveNode(iA)})});let D=[],F=[];for(let iA=this._namespaceList.length-1;iA>=0;iA--)this._namespaceList[iA].drainQueuedTransitions(A).forEach(oA=>{let sA=oA.player,hA=oA.element;if(D.push(sA),this.collectedEnterElements.length){let Je=hA[ec];if(Je&&Je.setForMove){if(Je.previousTriggersValues&&Je.previousTriggersValues.has(oA.triggerName)){let HA=Je.previousTriggersValues.get(oA.triggerName),uA=this.statesByElement.get(oA.element);if(uA&&uA.has(oA.triggerName)){let ZA=uA.get(oA.triggerName);ZA.value=HA,uA.set(oA.triggerName,ZA)}}sA.destroy();return}}let YA=!C||!this.driver.containsElement(C,hA),ee=S.get(hA),UA=B.get(hA),mA=this._buildInstruction(oA,i,UA,ee,YA);if(mA.errors&&mA.errors.length){F.push(mA);return}if(YA){sA.onStart(()=>R2(hA,mA.fromStyles)),sA.onDestroy(()=>Ac(hA,mA.toStyles)),n.push(sA);return}if(oA.isFallbackTransition){sA.onStart(()=>R2(hA,mA.fromStyles)),sA.onDestroy(()=>Ac(hA,mA.toStyles)),n.push(sA);return}let KA=[];mA.timelines.forEach(Je=>{Je.stretchStartingKeyframe=!0,this.disabledNodes.has(Je.element)||KA.push(Je)}),mA.timelines=KA,i.append(hA,mA.timelines);let Pe={instruction:mA,player:sA,element:hA};a.push(Pe),mA.queriedElements.forEach(Je=>ng(r,Je,[]).push(sA)),mA.preStyleProps.forEach((Je,HA)=>{if(Je.size){let uA=s.get(HA);uA||s.set(HA,uA=new Set),Je.forEach((ZA,QA)=>uA.add(QA))}}),mA.postStyleProps.forEach((Je,HA)=>{let uA=g.get(HA);uA||g.set(HA,uA=new Set),Je.forEach((ZA,QA)=>uA.add(QA))})});if(F.length){let iA=[];F.forEach(BA=>{iA.push(ZY(BA.triggerName,BA.errors))}),D.forEach(BA=>BA.destroy()),this.reportError(iA)}let _=new Map,U=new Map;a.forEach(iA=>{let BA=iA.element;i.has(BA)&&(U.set(BA,BA),this._beforeAnimationBuild(iA.player.namespaceId,iA.instruction,_))}),n.forEach(iA=>{let BA=iA.element;this._getPreviousPlayers(BA,!1,iA.namespaceId,iA.triggerName,null).forEach(sA=>{ng(_,BA,[]).push(sA),sA.destroy()})});let J=Q.filter(iA=>CT(iA,s,g)),j=new Map;lT(j,this.driver,b,g,$l).forEach(iA=>{CT(iA,s,g)&&J.push(iA)});let O=new Map;d.forEach((iA,BA)=>{lT(O,this.driver,new Set(iA),s,Tu)}),J.forEach(iA=>{let BA=j.get(iA),oA=O.get(iA);j.set(iA,new Map([...BA?.entries()??[],...oA?.entries()??[]]))});let DA=[],P=[],aA={};a.forEach(iA=>{let{element:BA,player:oA,instruction:sA}=iA;if(i.has(BA)){if(l.has(BA)){oA.onDestroy(()=>Ac(BA,sA.toStyles)),oA.disabled=!0,oA.overrideTotalTime(sA.totalTime),n.push(oA);return}let hA=aA;if(U.size>1){let ee=BA,UA=[];for(;ee=ee.parentNode;){let mA=U.get(ee);if(mA){hA=mA;break}UA.push(ee)}UA.forEach(mA=>U.set(mA,hA))}let YA=this._buildAnimation(oA.namespaceId,sA,_,o,O,j);if(oA.setRealPlayer(YA),hA===aA)DA.push(oA);else{let ee=this.playersByElement.get(hA);ee&&ee.length&&(oA.parentPlayer=cC(ee)),n.push(oA)}}else R2(BA,sA.fromStyles),oA.onDestroy(()=>Ac(BA,sA.toStyles)),P.push(oA),l.has(BA)&&n.push(oA)}),P.forEach(iA=>{let BA=o.get(iA.element);if(BA&&BA.length){let oA=cC(BA);iA.setRealPlayer(oA)}}),n.forEach(iA=>{iA.parentPlayer?iA.syncPlayerEvents(iA.parentPlayer):iA.destroy()});for(let iA=0;iA!YA.destroyed);hA.length?YCA(this,BA,hA):this.processLeaveNode(BA)}return Q.length=0,DA.forEach(iA=>{this.players.push(iA),iA.onDone(()=>{iA.destroy();let BA=this.players.indexOf(iA);this.players.splice(BA,1)}),iA.play()}),DA}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,A,i,n,o){let a=[];if(A){let r=this.playersByQueriedElement.get(e);r&&(a=r)}else{let r=this.playersByElement.get(e);if(r){let s=!o||o==Pu;r.forEach(g=>{g.queued||!s&&g.triggerName!=n||a.push(g)})}}return(i||n)&&(a=a.filter(r=>!(i&&i!=r.namespaceId||n&&n!=r.triggerName))),a}_beforeAnimationBuild(e,A,i){let n=A.triggerName,o=A.element,a=A.isRemovalTransition?void 0:e,r=A.isRemovalTransition?void 0:n;for(let s of A.timelines){let g=s.element,l=g!==o,C=ng(i,g,[]);this._getPreviousPlayers(g,l,a,r,A.toState).forEach(d=>{let B=d.getRealPlayer();B.beforeDestroy&&B.beforeDestroy(),d.destroy(),C.push(d)})}R2(o,A.fromStyles)}_buildAnimation(e,A,i,n,o,a){let r=A.triggerName,s=A.element,g=[],l=new Set,C=new Set,I=A.timelines.map(B=>{let E=B.element;l.add(E);let Q=E[ec];if(Q&&Q.removedBeforeQueried)return new lC(B.duration,B.delay);let f=E!==s,b=TCA((i.get(E)||LCA).map(_=>_.getRealPlayer())).filter(_=>{let U=_;return U.element?U.element===E:!1}),S=o.get(E),M=a.get(E),D=L9(this._normalizer,B.keyframes,S,M),F=this._buildPlayer(B,D,b);if(B.subTimeline&&n&&C.add(E),f){let _=new Vu(e,r,E);_.setRealPlayer(F),g.push(_)}return F});g.forEach(B=>{ng(this.playersByQueriedElement,B.element,[]).push(B),B.onDone(()=>KCA(this.playersByQueriedElement,B.element,B))}),l.forEach(B=>ll(B,T9));let d=cC(I);return d.onDestroy(()=>{l.forEach(B=>zB(B,T9)),Ac(s,A.toStyles)}),C.forEach(B=>{ng(n,B,[]).push(d)}),d}_buildPlayer(e,A,i){return A.length>0?this.driver.animate(e.element,A,e.duration,e.delay,e.easing,i):new lC(e.duration,e.delay)}},Vu=class{namespaceId;triggerName;element;_player=new lC;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(e,A,i){this.namespaceId=e,this.triggerName=A,this.element=i}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((A,i)=>{A.forEach(n=>Pp(e,i,void 0,n))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){let A=this._player;A.triggerCallback&&e.onStart(()=>A.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,A){ng(this._queuedCallbacks,e,[]).push(A)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){let A=this._player;A.triggerCallback&&A.triggerCallback(e)}};function KCA(t,e,A){let i=t.get(e);if(i){if(i.length){let n=i.indexOf(A);i.splice(n,1)}i.length==0&&t.delete(e)}return i}function UCA(t){return t??null}function e6(t){return t&&t.nodeType===1}function JCA(t){return t=="start"||t=="done"}function gT(t,e){let A=t.style.display;return t.style.display=e??"none",A}function lT(t,e,A,i,n){let o=[];A.forEach(s=>o.push(gT(s)));let a=[];i.forEach((s,g)=>{let l=new Map;s.forEach(C=>{let I=e.computeStyle(g,C,n);l.set(C,I),(!I||I.length==0)&&(g[ec]=GCA,a.push(g))}),t.set(g,l)});let r=0;return A.forEach(s=>gT(s,o[r++])),a}function cT(t,e){let A=new Map;if(t.forEach(r=>A.set(r,[])),e.length==0)return A;let i=1,n=new Set(e),o=new Map;function a(r){if(!r)return i;let s=o.get(r);if(s)return s;let g=r.parentNode;return A.has(g)?s=g:n.has(g)?s=i:s=a(g),o.set(r,s),s}return e.forEach(r=>{let s=a(r);s!==i&&A.get(s).push(r)}),A}function ll(t,e){t.classList?.add(e)}function zB(t,e){t.classList?.remove(e)}function YCA(t,e,A){cC(A).onDone(()=>t.processLeaveNode(e))}function TCA(t){let e=[];return hT(t,e),e}function hT(t,e){for(let A=0;An.add(o)):e.set(t,i),A.delete(t),!0}var OB=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(e,A)=>{};constructor(e,A,i){this._driver=A,this._normalizer=i,this._transitionEngine=new nM(e.body,A,i),this._timelineEngine=new tM(e.body,A,i),this._transitionEngine.onRemovalComplete=(n,o)=>this.onRemovalComplete(n,o)}registerTrigger(e,A,i,n,o){let a=e+"-"+n,r=this._triggerCache[a];if(!r){let s=[],g=[],l=dT(this._driver,o,s,g);if(s.length)throw YY(n,s);r=kCA(n,l,this._normalizer),this._triggerCache[a]=r}this._transitionEngine.registerTrigger(A,n,r)}register(e,A){this._transitionEngine.register(e,A)}destroy(e,A){this._transitionEngine.destroy(e,A)}onInsert(e,A,i,n){this._transitionEngine.insertNode(e,A,i,n)}onRemove(e,A,i){this._transitionEngine.removeNode(e,A,i)}disableAnimations(e,A){this._transitionEngine.markElementAsDisabled(e,A)}process(e,A,i,n){if(i.charAt(0)=="@"){let[o,a]=G9(i),r=n;this._timelineEngine.command(o,A,a,r)}else this._transitionEngine.trigger(e,A,i,n)}listen(e,A,i,n,o){if(i.charAt(0)=="@"){let[a,r]=G9(i);return this._timelineEngine.listen(a,A,r,o)}return this._transitionEngine.listen(e,A,i,n,o)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(e){this._transitionEngine.afterFlushAnimationsDone(e)}};function zCA(t,e){let A=null,i=null;return Array.isArray(e)&&e.length?(A=q9(e[0]),e.length>1&&(i=q9(e[e.length-1]))):e instanceof Map&&(A=q9(e)),A||i?new OCA(t,A,i):null}var OCA=(()=>{class t{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(A,i,n){this._element=A,this._startStyles=i,this._endStyles=n;let o=t.initialStylesByElement.get(A);o||t.initialStylesByElement.set(A,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Ac(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Ac(this._element,this._initialStyles),this._endStyles&&(Ac(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(R2(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(R2(this._element,this._endStyles),this._endStyles=null),Ac(this._element,this._initialStyles),this._state=3)}}return t})();function q9(t){let e=null;return t.forEach((A,i)=>{PCA(i)&&(e=e||new Map,e.set(i,A))}),e}function PCA(t){return t==="display"||t==="position"}var s6=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(e,A,i,n){this.element=e,this.keyframes=A,this.options=i,this._specialStyles=n,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let e=this.keyframes,A=this._triggerWebAnimation(this.element,e,this.options);if(!A)return this._onFinish(),null;this.domPlayer=A,this._finalKeyframe=e.length?e[e.length-1]:new Map;let i=()=>this._onFinish();return A.addEventListener("finish",i),this.onDestroy(()=>{A.removeEventListener("finish",i)}),A}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(e){let A=[];return e.forEach(i=>{A.push(Object.fromEntries(i))}),A}_triggerWebAnimation(e,A,i){let n=this._convertKeyframesToObject(A);try{return e.animate(n,i)}catch{return null}}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){let e=this._buildPlayer();e&&(this.hasStarted()||(this._onStartFns.forEach(A=>A()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),e.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=e*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,n)=>{n!=="offset"&&e.set(n,this._finished?i:Xp(this.element,n))}),this.currentSnapshot=e}triggerCallback(e){let A=e==="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},g6=class{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}containsElement(e,A){return K9(e,A)}getParentElement(e){return qp(e)}query(e,A,i){return U9(e,A,i)}computeStyle(e,A,i){return Xp(e,A)}animate(e,A,i,n,o,a=[]){let r=n==0?"both":"forwards",s={duration:i,delay:n,fill:r};o&&(s.easing=o);let g=new Map,l=a.filter(d=>d instanceof s6);eT(i,n)&&l.forEach(d=>{d.currentSnapshot.forEach((B,E)=>g.set(E,B))});let C=$Y(A).map(d=>new Map(d));C=tT(e,C,g);let I=zCA(e,C);return new s6(e,C,s,I)}};var t6="@",uT="@.disabled",l6=class{namespaceId;delegate;engine;_onDestroy;\u0275type=0;constructor(e,A,i,n){this.namespaceId=e,this.delegate=A,this.engine=i,this._onDestroy=n}get data(){return this.delegate.data}destroyNode(e){this.delegate.destroyNode?.(e)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(e,A){return this.delegate.createElement(e,A)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,A){this.delegate.appendChild(e,A),this.engine.onInsert(this.namespaceId,A,e,!1)}insertBefore(e,A,i,n=!0){this.delegate.insertBefore(e,A,i),this.engine.onInsert(this.namespaceId,A,e,n)}removeChild(e,A,i,n){if(n){this.delegate.removeChild(e,A,i,n);return}this.parentNode(A)&&this.engine.onRemove(this.namespaceId,A,this.delegate)}selectRootElement(e,A){return this.delegate.selectRootElement(e,A)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,A,i,n){this.delegate.setAttribute(e,A,i,n)}removeAttribute(e,A,i){this.delegate.removeAttribute(e,A,i)}addClass(e,A){this.delegate.addClass(e,A)}removeClass(e,A){this.delegate.removeClass(e,A)}setStyle(e,A,i,n){this.delegate.setStyle(e,A,i,n)}removeStyle(e,A,i){this.delegate.removeStyle(e,A,i)}setProperty(e,A,i){A.charAt(0)==t6&&A==uT?this.disableAnimations(e,!!i):this.delegate.setProperty(e,A,i)}setValue(e,A){this.delegate.setValue(e,A)}listen(e,A,i,n){return this.delegate.listen(e,A,i,n)}disableAnimations(e,A){this.engine.disableAnimations(e,A)}},oM=class extends l6{factory;constructor(e,A,i,n,o){super(A,i,n,o),this.factory=e,this.namespaceId=A}setProperty(e,A,i){A.charAt(0)==t6?A.charAt(1)=="."&&A==uT?(i=i===void 0?!0:!!i,this.disableAnimations(e,i)):this.engine.process(this.namespaceId,e,A.slice(1),i):this.delegate.setProperty(e,A,i)}listen(e,A,i,n){if(A.charAt(0)==t6){let o=jCA(e),a=A.slice(1),r="";return a.charAt(0)!=t6&&([a,r]=qCA(a)),this.engine.listen(this.namespaceId,o,a,r,s=>{let g=s._data||-1;this.factory.scheduleListenerCallback(g,i,s)})}return this.delegate.listen(e,A,i,n)}};function jCA(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}function qCA(t){let e=t.indexOf("."),A=t.substring(0,e),i=t.slice(e+1);return[A,i]}var c6=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(e,A,i){this.delegate=e,this.engine=A,this._zone=i,A.onRemovalComplete=(n,o)=>{o?.removeChild(null,n)}}createRenderer(e,A){let n=this.delegate.createRenderer(e,A);if(!e||!A?.data?.animation){let g=this._rendererCache,l=g.get(n);if(!l){let C=()=>g.delete(n);l=new l6("",n,this.engine,C),g.set(n,l)}return l}let o=A.id,a=A.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);let r=g=>{Array.isArray(g)?g.forEach(r):this.engine.registerTrigger(o,a,e,g.name,g)};return A.data.animation.forEach(r),new oM(this,a,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(e,A,i){if(e>=0&&eA(i));return}let n=this._animationCallbacksBuffer;n.length==0&&queueMicrotask(()=>{this._zone.run(()=>{n.forEach(o=>{let[a,r]=o;a(r)}),this._animationCallbacksBuffer=[]})}),n.push([A,i])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(e){this.engine.flush(),this.delegate.componentReplaced?.(e)}};var WCA=(()=>{class t extends OB{constructor(A,i,n){super(A,i,n)}ngOnDestroy(){this.flush()}static \u0275fac=function(i){return new(i||t)(xo(Xt),xo(_1),xo(L1))};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})();function ZCA(){return new i6}function XCA(){return new c6(h(GU),h(OB),h(Oe))}var fT=[{provide:L1,useFactory:ZCA},{provide:OB,useClass:WCA},{provide:Kr,useFactory:XCA}],CAe=[{provide:_1,useClass:aM},{provide:p1,useValue:"NoopAnimations"},...fT],$CA=[{provide:_1,useFactory:()=>new g6},{provide:p1,useFactory:()=>"BrowserAnimations"},...fT];function mT(){return op("NgEagerAnimations"),[...$CA]}function Tr(t){t||(t=h(qa));let e=new $i(A=>{if(t.destroyed){A.next();return}return t.onDestroy(A.next.bind(A))});return A=>A.pipe(Bt(e))}var sM=class{source;destroyed=!1;destroyRef=h(qa);constructor(e){this.source=e,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}subscribe(e){if(this.destroyed)throw new kt(953,!1);let A=this.source.pipe(Tr(this.destroyRef)).subscribe({next:i=>e(i)});return{unsubscribe:()=>A.unsubscribe()}}};function Dn(t,e){return new sM(t)}function $n(t,e){let A=e?.injector??h(ft),i=new ql(1),n=Ga(()=>{let o;try{o=t()}catch(a){la(()=>i.error(a));return}la(()=>i.next(o))},{injector:A,manualCleanup:!0});return A.get(qa).onDestroy(()=>{n.destroy(),i.complete()}),i.asObservable()}function Fs(t,e){let i=!e?.manualCleanup?e?.injector?.get(qa)??h(qa):null,n=A2A(e?.equal),o;e?.requireSync?o=jA({kind:0},{equal:n}):o=jA({kind:1,value:e?.initialValue},{equal:n});let a,r=t.subscribe({next:s=>o.set({kind:1,value:s}),error:s=>{o.set({kind:2,error:s}),a?.()},complete:()=>{a?.()}});if(e?.requireSync&&o().kind===0)throw new kt(601,!1);return a=i?.onDestroy(r.unsubscribe.bind(r)),Ue(()=>{let s=o();switch(s.kind){case 1:return s.value;case 2:throw s.error;case 0:throw new kt(601,!1)}},{equal:e?.equal})}function A2A(t=Object.is){return(e,A)=>e.kind===1&&A.kind===1&&t(e.value,A.value)}function C6(t){return MU(Ge(cA({},t),{loader:void 0,stream:e=>{let A,i=()=>A?.unsubscribe();e.abortSignal.addEventListener("abort",i);let n=jA({value:void 0}),o,a=new Promise(g=>o=g);function r(g){n.set(g),o?.(n),o=void 0}let s=t.stream??t.loader;if(s===void 0)throw new kt(990,!1);return A=s(e).subscribe({next:g=>r({value:g}),error:g=>{r({error:kU(g)}),e.abortSignal.removeEventListener("abort",i)},complete:()=>{o&&r({error:new kt(991,!1)}),e.abortSignal.removeEventListener("abort",i)}}),a}}))}function CM(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var K1=CM();function MT(t){K1=t}var $u={exec:()=>null};function Ao(t,e=""){let A=typeof t=="string"?t:t.source,i={replace:(n,o)=>{let a=typeof o=="string"?o:o.source;return a=a.replace(_s.caret,"$1"),A=A.replace(n,a),i},getRegex:()=>new RegExp(A,e)};return i}var e2A=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i")},t2A=/^(?:[ \t]*(?:\n|$))+/,i2A=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,n2A=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,A4=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,o2A=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,IM=/(?:[*+-]|\d{1,9}[.)])/,kT=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ST=Ao(kT).replace(/bull/g,IM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),a2A=Ao(kT).replace(/bull/g,IM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),dM=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,r2A=/^[^\n]+/,BM=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,s2A=Ao(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",BM).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),g2A=Ao(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,IM).getRegex(),E6="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",EM=/|$))/,l2A=Ao("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",EM).replace("tag",E6).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),xT=Ao(dM).replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),c2A=Ao(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",xT).getRegex(),QM={blockquote:c2A,code:i2A,def:s2A,fences:n2A,heading:o2A,hr:A4,html:l2A,lheading:ST,list:g2A,newline:t2A,paragraph:xT,table:$u,text:r2A},pT=Ao("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),C2A=Ge(cA({},QM),{lheading:a2A,table:pT,paragraph:Ao(dM).replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",pT).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex()}),I2A=Ge(cA({},QM),{html:Ao(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",EM).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:$u,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ao(dM).replace("hr",A4).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",ST).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),d2A=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,B2A=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,RT=/^( {2,}|\\)\n(?!\s*$)/,E2A=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",e2A?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),_T=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,m2A=Ao(_T,"u").replace(/punct/g,Q6).getRegex(),p2A=Ao(_T,"u").replace(/punct/g,FT).getRegex(),LT="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",w2A=Ao(LT,"gu").replace(/notPunctSpace/g,NT).replace(/punctSpace/g,hM).replace(/punct/g,Q6).getRegex(),D2A=Ao(LT,"gu").replace(/notPunctSpace/g,u2A).replace(/punctSpace/g,h2A).replace(/punct/g,FT).getRegex(),y2A=Ao("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,NT).replace(/punctSpace/g,hM).replace(/punct/g,Q6).getRegex(),v2A=Ao(/\\(punct)/,"gu").replace(/punct/g,Q6).getRegex(),b2A=Ao(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),M2A=Ao(EM).replace("(?:-->|$)","-->").getRegex(),k2A=Ao("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",M2A).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),d6=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,S2A=Ao(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",d6).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),GT=Ao(/^!?\[(label)\]\[(ref)\]/).replace("label",d6).replace("ref",BM).getRegex(),KT=Ao(/^!?\[(ref)\](?:\[\])?/).replace("ref",BM).getRegex(),x2A=Ao("reflink|nolink(?!\\()","g").replace("reflink",GT).replace("nolink",KT).getRegex(),wT=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,uM={_backpedal:$u,anyPunctuation:v2A,autolink:b2A,blockSkip:f2A,br:RT,code:B2A,del:$u,emStrongLDelim:m2A,emStrongRDelimAst:w2A,emStrongRDelimUnd:y2A,escape:d2A,link:S2A,nolink:KT,punctuation:Q2A,reflink:GT,reflinkSearch:x2A,tag:k2A,text:E2A,url:$u},R2A=Ge(cA({},uM),{link:Ao(/^!?\[(label)\]\((.*?)\)/).replace("label",d6).getRegex(),reflink:Ao(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",d6).getRegex()}),gM=Ge(cA({},uM),{emStrongRDelimAst:D2A,emStrongLDelim:p2A,url:Ao(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",wT).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Ao(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},DT=t=>F2A[t];function CC(t,e){if(e){if(_s.escapeTest.test(t))return t.replace(_s.escapeReplace,DT)}else if(_s.escapeTestNoEncode.test(t))return t.replace(_s.escapeReplaceNoEncode,DT);return t}function yT(t){try{t=encodeURI(t).replace(_s.percentDecode,"%")}catch{return null}return t}function vT(t,e){let A=t.replace(_s.findPipe,(o,a,r)=>{let s=!1,g=a;for(;--g>=0&&r[g]==="\\";)s=!s;return s?"|":" |"}),i=A.split(_s.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function bT(t,e,A,i,n){let o=e.href,a=e.title||null,r=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let s={type:t[0].charAt(0)==="!"?"image":"link",raw:A,href:o,title:a,text:r,tokens:i.inlineTokens(r)};return i.state.inLink=!1,s}function L2A(t,e,A){let i=t.match(A.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` -`).map(o=>{let a=o.match(A.other.beginningSpace);if(a===null)return o;let[r]=a;return r.length>=n.length?o.slice(n.length):o}).join(` -`)}var B6=class{options;rules;lexer;constructor(t){this.options=t||K1}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let A=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?A:Zu(A,` -`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let A=e[0],i=L2A(A,e[3]||"",this.rules);return{type:"code",raw:A,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let A=e[2].trim();if(this.rules.other.endingHash.test(A)){let i=Zu(A,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(A=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:A,tokens:this.lexer.inline(A)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Zu(e[0],` -`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let A=Zu(e[0],` -`).split(` -`),i="",n="",o=[];for(;A.length>0;){let a=!1,r=[],s;for(s=0;s1,n={type:"list",raw:"",ordered:i,start:i?+A.slice(0,-1):"",loose:!1,items:[]};A=i?`\\d{1,9}\\${A.slice(-1)}`:`\\${A}`,this.options.pedantic&&(A=i?A:"[*+-]");let o=this.rules.other.listItemRegex(A),a=!1;for(;t;){let s=!1,g="",l="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;g=e[0],t=t.substring(g.length);let C=e[2].split(` -`,1)[0].replace(this.rules.other.listReplaceTabs,E=>" ".repeat(3*E.length)),I=t.split(` -`,1)[0],d=!C.trim(),B=0;if(this.options.pedantic?(B=2,l=C.trimStart()):d?B=e[1].length+1:(B=e[2].search(this.rules.other.nonSpaceChar),B=B>4?1:B,l=C.slice(B),B+=e[1].length),d&&this.rules.other.blankLine.test(I)&&(g+=I+` -`,t=t.substring(I.length+1),s=!0),!s){let E=this.rules.other.nextBulletRegex(B),Q=this.rules.other.hrRegex(B),f=this.rules.other.fencesBeginRegex(B),b=this.rules.other.headingBeginRegex(B),S=this.rules.other.htmlBeginRegex(B);for(;t;){let M=t.split(` -`,1)[0],D;if(I=M,this.options.pedantic?(I=I.replace(this.rules.other.listReplaceNesting," "),D=I):D=I.replace(this.rules.other.tabCharGlobal," "),f.test(I)||b.test(I)||S.test(I)||E.test(I)||Q.test(I))break;if(D.search(this.rules.other.nonSpaceChar)>=B||!I.trim())l+=` -`+D.slice(B);else{if(d||C.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||f.test(C)||b.test(C)||Q.test(C))break;l+=` -`+I}!d&&!I.trim()&&(d=!0),g+=M+` -`,t=t.substring(M.length+1),C=D.slice(B)}}n.loose||(a?n.loose=!0:this.rules.other.doubleBlankLine.test(g)&&(a=!0)),n.items.push({type:"list_item",raw:g,task:!!this.options.gfm&&this.rules.other.listIsTask.test(l),loose:!1,text:l,tokens:[]}),n.raw+=g}let r=n.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let s of n.items){if(this.lexer.state.top=!1,s.tokens=this.lexer.blockTokens(s.text,[]),s.task){if(s.text=s.text.replace(this.rules.other.listReplaceTask,""),s.tokens[0]?.type==="text"||s.tokens[0]?.type==="paragraph"){s.tokens[0].raw=s.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),s.tokens[0].text=s.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let l=this.lexer.inlineQueue.length-1;l>=0;l--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[l].src)){this.lexer.inlineQueue[l].src=this.lexer.inlineQueue[l].src.replace(this.rules.other.listReplaceTask,"");break}}let g=this.rules.other.listTaskCheckbox.exec(s.raw);if(g){let l={type:"checkbox",raw:g[0]+" ",checked:g[0]!=="[ ]"};s.checked=l.checked,n.loose?s.tokens[0]&&["paragraph","text"].includes(s.tokens[0].type)&&"tokens"in s.tokens[0]&&s.tokens[0].tokens?(s.tokens[0].raw=l.raw+s.tokens[0].raw,s.tokens[0].text=l.raw+s.tokens[0].text,s.tokens[0].tokens.unshift(l)):s.tokens.unshift({type:"paragraph",raw:l.raw,text:l.raw,tokens:[l]}):s.tokens.unshift(l)}}if(!n.loose){let g=s.tokens.filter(C=>C.type==="space"),l=g.length>0&&g.some(C=>this.rules.other.anyLine.test(C.raw));n.loose=l}}if(n.loose)for(let s of n.items){s.loose=!0;for(let g of s.tokens)g.type==="text"&&(g.type="paragraph")}return n}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let A=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",n=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:A,raw:e[0],href:i,title:n}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let A=vT(e[1]),i=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),n=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` -`):[],o={type:"table",raw:e[0],header:[],align:[],rows:[]};if(A.length===i.length){for(let a of i)this.rules.other.tableAlignRight.test(a)?o.align.push("right"):this.rules.other.tableAlignCenter.test(a)?o.align.push("center"):this.rules.other.tableAlignLeft.test(a)?o.align.push("left"):o.align.push(null);for(let a=0;a({text:r,tokens:this.lexer.inline(r),header:!1,align:o.align[s]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let A=e[1].charAt(e[1].length-1)===` -`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:A,tokens:this.lexer.inline(A)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let A=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(A)){if(!this.rules.other.endAngleBracket.test(A))return;let o=Zu(A.slice(0,-1),"\\");if((A.length-o.length)%2===0)return}else{let o=_2A(e[2],"()");if(o===-2)return;if(o>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(i);o&&(i=o[1],n=o[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(A)?i=i.slice(1):i=i.slice(1,-1)),bT(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let A;if((A=this.rules.inline.reflink.exec(t))||(A=this.rules.inline.nolink.exec(t))){let i=(A[2]||A[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let o=A[0].charAt(0);return{type:"text",raw:o,text:o}}return bT(A,n,A[0],this.lexer,this.rules)}}emStrong(t,e,A=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&A.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!A||this.rules.inline.punctuation.exec(A))){let n=[...i[0]].length-1,o,a,r=n,s=0,g=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(g.lastIndex=0,e=e.slice(-1*t.length+n);(i=g.exec(e))!=null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o)continue;if(a=[...o].length,i[3]||i[4]){r+=a;continue}else if((i[5]||i[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(r-=a,r>0)continue;a=Math.min(a,a+r+s);let l=[...i[0]][0].length,C=t.slice(0,n+i.index+l+a);if(Math.min(n,a)%2){let d=C.slice(1,-1);return{type:"em",raw:C,text:d,tokens:this.lexer.inlineTokens(d)}}let I=C.slice(2,-2);return{type:"strong",raw:C,text:I,tokens:this.lexer.inlineTokens(I)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let A=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(A),n=this.rules.other.startingSpaceChar.test(A)&&this.rules.other.endingSpaceChar.test(A);return i&&n&&(A=A.substring(1,A.length-1)),{type:"codespan",raw:e[0],text:A}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let A,i;return e[2]==="@"?(A=e[1],i="mailto:"+A):(A=e[1],i=A),{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let A,i;if(e[2]==="@")A=e[0],i="mailto:"+A;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);A=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let A=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:A}}}},tc=class lM{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||K1,this.options.tokenizer=this.options.tokenizer||new B6,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let A={other:_s,block:I6.normal,inline:Wu.normal};this.options.pedantic?(A.block=I6.pedantic,A.inline=Wu.pedantic):this.options.gfm&&(A.block=I6.gfm,this.options.breaks?A.inline=Wu.breaks:A.inline=Wu.gfm),this.tokenizer.rules=A}static get rules(){return{block:I6,inline:Wu}}static lex(e,A){return new lM(A).lex(e)}static lexInline(e,A){return new lM(A).inlineTokens(e)}lex(e){e=e.replace(_s.carriageReturn,` -`),this.blockTokens(e,this.tokens);for(let A=0;A(n=a.call({lexer:this},e,A))?(e=e.substring(n.raw.length),A.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let a=A.at(-1);n.raw.length===1&&a!==void 0?a.raw+=` -`:A.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},A.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),A.push(n);continue}let o=e;if(this.options.extensions?.startBlock){let a=1/0,r=e.slice(1),s;this.options.extensions.startBlock.forEach(g=>{s=g.call({lexer:this},r),typeof s=="number"&&s>=0&&(a=Math.min(a,s))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){let a=A.at(-1);i&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n),i=o.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(e){let a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}else throw new Error(a)}}return this.state.top=!0,A}inline(e,A=[]){return this.inlineQueue.push({src:e,tokens:A}),A}inlineTokens(e,A=[]){let i=e,n=null;if(this.tokens.links){let s=Object.keys(this.tokens.links);if(s.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)s.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)o=n[2]?n[2].length:0,i=i.slice(0,n.index+o)+"["+"a".repeat(n[0].length-o-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,r="";for(;e;){a||(r=""),a=!1;let s;if(this.options.extensions?.inline?.some(l=>(s=l.call({lexer:this},e,A))?(e=e.substring(s.raw.length),A.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let l=A.at(-1);s.type==="text"&&l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(s=this.tokenizer.emStrong(e,i,r)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.del(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),A.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),A.push(s);continue}let g=e;if(this.options.extensions?.startInline){let l=1/0,C=e.slice(1),I;this.options.extensions.startInline.forEach(d=>{I=d.call({lexer:this},C),typeof I=="number"&&I>=0&&(l=Math.min(l,I))}),l<1/0&&l>=0&&(g=e.substring(0,l+1))}if(s=this.tokenizer.inlineText(g)){e=e.substring(s.raw.length),s.raw.slice(-1)!=="_"&&(r=s.raw.slice(-1)),a=!0;let l=A.at(-1);l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return A}},N2=class{options;parser;constructor(t){this.options=t||K1}space(t){return""}code({text:t,lang:e,escaped:A}){let i=(e||"").match(_s.notSpaceStart)?.[0],n=t.replace(_s.endingNewline,"")+` -`;return i?'
      '+(A?n:CC(n,!0))+`
      -`:"
      "+(A?n:CC(n,!0))+`
      -`}blockquote({tokens:t}){return`
      -${this.parser.parse(t)}
      -`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} -`}hr(t){return`
      -`}list(t){let e=t.ordered,A=t.start,i="";for(let a=0;a -`+i+" -`}listitem(t){return`
    • ${this.parser.parse(t.tokens)}
    • -`}checkbox({checked:t}){return" '}paragraph({tokens:t}){return`

      ${this.parser.parseInline(t)}

      -`}table(t){let e="",A="";for(let n=0;n${i}`),` - -`+e+` -`+i+`
      -`}tablerow({text:t}){return` -${t} -`}tablecell(t){let e=this.parser.parseInline(t.tokens),A=t.header?"th":"td";return(t.align?`<${A} align="${t.align}">`:`<${A}>`)+e+` -`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${CC(t,!0)}`}br(t){return"
      "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:A}){let i=this.parser.parseInline(A),n=yT(t);if(n===null)return i;t=n;let o='
      ",o}image({href:t,title:e,text:A,tokens:i}){i&&(A=this.parser.parseInline(i,this.parser.textRenderer));let n=yT(t);if(n===null)return CC(A);t=n;let o=`${A}{let a=n[o].flat(1/0);A=A.concat(this.walkTokens(a,e))}):n.tokens&&(A=A.concat(this.walkTokens(n.tokens,e)))}}return A}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(A=>{let i=cA({},A);if(i.async=this.defaults.async||i.async||!1,A.extensions&&(A.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let o=e.renderers[n.name];o?e.renderers[n.name]=function(...a){let r=n.renderer.apply(this,a);return r===!1&&(r=o.apply(this,a)),r}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[n.level];o?o.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),A.renderer){let n=this.defaults.renderer||new N2(this.defaults);for(let o in A.renderer){if(!(o in n))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let a=o,r=A.renderer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l||""}}i.renderer=n}if(A.tokenizer){let n=this.defaults.tokenizer||new B6(this.defaults);for(let o in A.tokenizer){if(!(o in n))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let a=o,r=A.tokenizer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.tokenizer=n}if(A.hooks){let n=this.defaults.hooks||new Xu;for(let o in A.hooks){if(!(o in n))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let a=o,r=A.hooks[a],s=n[a];Xu.passThroughHooks.has(o)?n[a]=g=>{if(this.defaults.async&&Xu.passThroughHooksRespectAsync.has(o))return nt(this,null,function*(){let C=yield r.call(n,g);return s.call(n,C)});let l=r.call(n,g);return s.call(n,l)}:n[a]=(...g)=>{if(this.defaults.async)return nt(this,null,function*(){let C=yield r.apply(n,g);return C===!1&&(C=yield s.apply(n,g)),C});let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.hooks=n}if(A.walkTokens){let n=this.defaults.walkTokens,o=A.walkTokens;i.walkTokens=function(a){let r=[];return r.push(o.call(this,a)),n&&(r=r.concat(n.call(this,a))),r}}this.defaults=cA(cA({},this.defaults),i)}),this}setOptions(t){return this.defaults=cA(cA({},this.defaults),t),this}lexer(t,e){return tc.lex(t,e??this.defaults)}parser(t,e){return ic.parse(t,e??this.defaults)}parseMarkdown(t){return(e,A)=>{let i=cA({},A),n=cA(cA({},this.defaults),i),o=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return nt(this,null,function*(){let a=n.hooks?yield n.hooks.preprocess(e):e,r=yield(n.hooks?yield n.hooks.provideLexer():t?tc.lex:tc.lexInline)(a,n),s=n.hooks?yield n.hooks.processAllTokens(r):r;n.walkTokens&&(yield Promise.all(this.walkTokens(s,n.walkTokens)));let g=yield(n.hooks?yield n.hooks.provideParser():t?ic.parse:ic.parseInline)(s,n);return n.hooks?yield n.hooks.postprocess(g):g}).catch(o);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer():t?tc.lex:tc.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let r=(n.hooks?n.hooks.provideParser():t?ic.parse:ic.parseInline)(a,n);return n.hooks&&(r=n.hooks.postprocess(r)),r}catch(a){return o(a)}}}onError(t,e){return A=>{if(A.message+=` -Please report this to https://github.com/markedjs/marked.`,t){let i="

      An error occurred:

      "+CC(A.message+"",!0)+"
      ";return e?Promise.resolve(i):i}if(e)return Promise.reject(A);throw A}}},G1=new G2A;function Hn(t,e){return G1.parse(t,e)}Hn.options=Hn.setOptions=function(t){return G1.setOptions(t),Hn.defaults=G1.defaults,MT(Hn.defaults),Hn};Hn.getDefaults=CM;Hn.defaults=K1;Hn.use=function(...t){return G1.use(...t),Hn.defaults=G1.defaults,MT(Hn.defaults),Hn};Hn.walkTokens=function(t,e){return G1.walkTokens(t,e)};Hn.parseInline=G1.parseInline;Hn.Parser=ic;Hn.parser=ic.parse;Hn.Renderer=N2;Hn.TextRenderer=fM;Hn.Lexer=tc;Hn.lexer=tc.lex;Hn.Tokenizer=B6;Hn.Hooks=Xu;Hn.parse=Hn;var DAe=Hn.options,yAe=Hn.setOptions,vAe=Hn.use,bAe=Hn.walkTokens,MAe=Hn.parseInline;var kAe=ic.parse,SAe=tc.lex;var K2A=["*"],U2A="Copy",J2A="Copied",Y2A=(()=>{class t{constructor(){this._buttonClick$=new XA,this.copied=Fs(this._buttonClick$.pipe(Si(()=>fi(se(!0),Ap(3e3).pipe(cu(!1)))),Vl(),Ps(1))),this.copiedText=Ue(()=>this.copied()?J2A:U2A)}onCopyToClipboardClick(){this._buttonClick$.next()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["markdown-clipboard"]],decls:2,vars:3,consts:[[1,"markdown-clipboard-button",3,"click"]],template:function(i,n){i&1&&(li(0,"button",0),p2("click",function(){return n.onCopyToClipboardClick()}),K(1),Ei()),i&2&&(ne("copied",n.copied()),p(),qA(n.copiedText()))},encapsulation:2,changeDetection:0})}}return t})(),T2A=new yA("CLIPBOARD_OPTIONS");var H2A=new yA("MARKED_EXTENSIONS"),z2A=new yA("MARKED_OPTIONS"),O2A=new yA("MERMAID_OPTIONS"),P2A=new yA("SANITIZE");function j2A(t){return typeof t=="function"}var q2A="[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information",V2A="[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information",W2A="[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information",Z2A="[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information",X2A="[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function",$2A="[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information";var UT=(()=>{class t{get options(){return this._options}set options(A){this._options=cA(cA({},this.DEFAULT_MARKED_OPTIONS),A)}get renderer(){return this.options.renderer}set renderer(A){this.options.renderer=A}constructor(){this.clipboardOptions=h(T2A,{optional:!0}),this.extensions=h(H2A,{optional:!0}),this.http=h(Xs,{optional:!0}),this.mermaidOptions=h(O2A,{optional:!0}),this.platform=h(np),this.sanitize=h(P2A,{optional:!0}),this.sanitizer=h($s),this.DEFAULT_MARKED_OPTIONS={renderer:new N2},this.DEFAULT_KATEX_OPTIONS={delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}]},this.DEFAULT_MERMAID_OPTIONS={startOnLoad:!1},this.DEFAULT_CLIPBOARD_OPTIONS={buttonComponent:void 0},this.DEFAULT_PARSE_OPTIONS={decodeHtml:!1,inline:!1,emoji:!1,mermaid:!1,markedOptions:void 0,disableSanitizer:!1},this.DEFAULT_RENDER_OPTIONS={clipboard:!1,clipboardOptions:void 0,katex:!1,katexOptions:void 0,mermaid:!1,mermaidOptions:void 0},this.DEFAULT_SECURITY_CONTEXT=Wl.HTML,this._options=null,this._reload$=new XA,this.reload$=this._reload$.asObservable(),this.options=h(z2A,{optional:!0})}parse(A,i=this.DEFAULT_PARSE_OPTIONS){let{decodeHtml:n,inline:o,emoji:a,mermaid:r,disableSanitizer:s}=i,g=cA(cA({},this.options),i.markedOptions),l=g.renderer||this.renderer||new N2;this.extensions&&(this.renderer=this.extendsRendererForExtensions(l)),r&&(this.renderer=this.extendsRendererForMermaid(l));let C=this.trimIndentation(A),I=n?this.decodeHtml(C):C,d=a?this.parseEmoji(I):I,B=this.parseMarked(d,g,o);return s?B:this.sanitizeHtml(B)}render(A,i=this.DEFAULT_RENDER_OPTIONS,n){let{clipboard:o,clipboardOptions:a,katex:r,katexOptions:s,mermaid:g,mermaidOptions:l}=i;r&&this.renderKatex(A,cA(cA({},this.DEFAULT_KATEX_OPTIONS),s)),g&&this.renderMermaid(A,cA(cA(cA({},this.DEFAULT_MERMAID_OPTIONS),this.mermaidOptions),l)),o&&this.renderClipboard(A,n,cA(cA(cA({},this.DEFAULT_CLIPBOARD_OPTIONS),this.clipboardOptions),a)),this.highlight(A)}reload(){this._reload$.next()}getSource(A){if(!this.http)throw new Error($2A);return this.http.get(A,{responseType:"text"}).pipe(fe(i=>this.handleExtension(A,i)))}highlight(A){if(!sC(this.platform)||typeof Prism>"u"||typeof Prism.highlightAllUnder>"u")return;A||(A=document);let i=A.querySelectorAll('pre code:not([class*="language-"])');Array.prototype.forEach.call(i,n=>n.classList.add("language-none")),Prism.highlightAllUnder(A)}decodeHtml(A){if(!sC(this.platform))return A;let i=document.createElement("textarea");return i.innerHTML=A,i.value}extendsRendererForExtensions(A){let i=A;return i.\u0275NgxMarkdownRendererExtendedForExtensions===!0||(this.extensions&&this.extensions.length>0&&Hn.use(...this.extensions),i.\u0275NgxMarkdownRendererExtendedForExtensions=!0),A}extendsRendererForMermaid(A){let i=A;if(i.\u0275NgxMarkdownRendererExtendedForMermaid===!0)return A;let n=A.code;return A.code=o=>o.lang==="mermaid"?`
      ${o.text}
      `:n(o),i.\u0275NgxMarkdownRendererExtendedForMermaid=!0,A}handleExtension(A,i){let n=A.lastIndexOf("://"),o=n>-1?A.substring(n+4):A,a=o.lastIndexOf("/"),r=a>-1?o.substring(a+1).split("?")[0]:"",s=r.lastIndexOf("."),g=s>-1?r.substring(s+1):"";return g&&g!=="md"?"```"+g+` -`+i+"\n```":i}parseMarked(A,i,n=!1){if(i.renderer){let o=cA({},i.renderer);delete o.\u0275NgxMarkdownRendererExtendedForExtensions,delete o.\u0275NgxMarkdownRendererExtendedForMermaid,delete i.renderer,Hn.use({renderer:o})}return n?Hn.parseInline(A,i):Hn.parse(A,i)}parseEmoji(A){if(!sC(this.platform))return A;if(typeof joypixels>"u"||typeof joypixels.shortnameToUnicode>"u")throw new Error(q2A);return joypixels.shortnameToUnicode(A)}renderKatex(A,i){if(sC(this.platform)){if(typeof katex>"u"||typeof renderMathInElement>"u")throw new Error(V2A);renderMathInElement(A,i)}}renderClipboard(A,i,n){if(!sC(this.platform))return;if(typeof ClipboardJS>"u")throw new Error(Z2A);if(!i)throw new Error(X2A);let{buttonComponent:o,buttonTemplate:a}=n,r=A.querySelectorAll("pre");for(let s=0;sC.classList.add("hover"),l.onmouseleave=()=>C.classList.remove("hover");let I;if(o){let B=i.createComponent(o);I=B.hostView,B.changeDetectorRef.markForCheck()}else if(a)I=i.createEmbeddedView(a);else{let B=i.createComponent(Y2A);I=B.hostView,B.changeDetectorRef.markForCheck()}let d;I.rootNodes.forEach(B=>{C.appendChild(B),d=new ClipboardJS(B,{text:()=>g.innerText})}),I.onDestroy(()=>d.destroy())}}renderMermaid(A,i=this.DEFAULT_MERMAID_OPTIONS){if(!sC(this.platform))return;if(typeof mermaid>"u"||typeof mermaid.initialize>"u")throw new Error(W2A);let n=A.querySelectorAll(".mermaid");n.length!==0&&(mermaid.initialize(i),mermaid.run({nodes:n}))}trimIndentation(A){if(!A)return"";let i;return A.split(` -`).map(n=>{let o=i;return n.length>0&&(o=isNaN(o)?n.search(/\S|$/):Math.min(n.search(/\S|$/),o)),isNaN(i)&&(i=o),o?n.substring(o):n}).join(` -`)}sanitizeHtml(A){return nt(this,null,function*(){return j2A(this.sanitize)?this.sanitize(yield A):this.sanitize!==Wl.NONE?this.sanitizer.sanitize(this.sanitize??this.DEFAULT_SECURITY_CONTEXT,A)??"":A})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),mM=(function(t){return t.CommandLine="command-line",t.LineHighlight="line-highlight",t.LineNumbers="line-numbers",t})(mM||{}),JT=(()=>{class t{constructor(){this.element=h(ge),this.markdownService=h(UT),this.viewContainerRef=h(Oo),this.error=new $A,this.load=new $A,this.ready=new $A,this._clipboard=!1,this._commandLine=!1,this._disableSanitizer=!1,this._emoji=!1,this._inline=!1,this._katex=!1,this._lineHighlight=!1,this._lineNumbers=!1,this._mermaid=!1,this.destroyed$=new XA}get disableSanitizer(){return this._disableSanitizer}set disableSanitizer(A){this._disableSanitizer=this.coerceBooleanProperty(A)}get inline(){return this._inline}set inline(A){this._inline=this.coerceBooleanProperty(A)}get clipboard(){return this._clipboard}set clipboard(A){this._clipboard=this.coerceBooleanProperty(A)}get emoji(){return this._emoji}set emoji(A){this._emoji=this.coerceBooleanProperty(A)}get katex(){return this._katex}set katex(A){this._katex=this.coerceBooleanProperty(A)}get mermaid(){return this._mermaid}set mermaid(A){this._mermaid=this.coerceBooleanProperty(A)}get lineHighlight(){return this._lineHighlight}set lineHighlight(A){this._lineHighlight=this.coerceBooleanProperty(A)}get lineNumbers(){return this._lineNumbers}set lineNumbers(A){this._lineNumbers=this.coerceBooleanProperty(A)}get commandLine(){return this._commandLine}set commandLine(A){this._commandLine=this.coerceBooleanProperty(A)}ngOnChanges(){this.loadContent()}loadContent(){if(this.data!=null){this.handleData();return}if(this.src!=null){this.handleSrc();return}}ngAfterViewInit(){!this.data&&!this.src&&this.handleTransclusion(),this.markdownService.reload$.pipe(Bt(this.destroyed$)).subscribe(()=>this.loadContent())}ngOnDestroy(){this.destroyed$.next(),this.destroyed$.complete()}render(A,i=!1){return nt(this,null,function*(){let n={decodeHtml:i,inline:this.inline,emoji:this.emoji,mermaid:this.mermaid,disableSanitizer:this.disableSanitizer},o={clipboard:this.clipboard,clipboardOptions:this.getClipboardOptions(),katex:this.katex,katexOptions:this.katexOptions,mermaid:this.mermaid,mermaidOptions:this.mermaidOptions},a=yield this.markdownService.parse(A,n);this.element.nativeElement.innerHTML=a,this.handlePlugins(),this.markdownService.render(this.element.nativeElement,o,this.viewContainerRef),this.ready.emit()})}coerceBooleanProperty(A){return A!=null&&`${String(A)}`!="false"}getClipboardOptions(){if(this.clipboardButtonComponent||this.clipboardButtonTemplate)return{buttonComponent:this.clipboardButtonComponent,buttonTemplate:this.clipboardButtonTemplate}}handleData(){this.render(this.data)}handleSrc(){this.markdownService.getSource(this.src).subscribe({next:A=>{this.render(A).then(()=>{this.load.emit(A)})},error:A=>this.error.emit(A)})}handleTransclusion(){this.render(this.element.nativeElement.innerHTML,!0)}handlePlugins(){this.commandLine&&(this.setPluginClass(this.element.nativeElement,mM.CommandLine),this.setPluginOptions(this.element.nativeElement,{dataFilterOutput:this.filterOutput,dataHost:this.host,dataPrompt:this.prompt,dataOutput:this.output,dataUser:this.user})),this.lineHighlight&&this.setPluginOptions(this.element.nativeElement,{dataLine:this.line,dataLineOffset:this.lineOffset}),this.lineNumbers&&(this.setPluginClass(this.element.nativeElement,mM.LineNumbers),this.setPluginOptions(this.element.nativeElement,{dataStart:this.start}))}setPluginClass(A,i){let n=A.querySelectorAll("pre");for(let o=0;o{let r=i[a];if(r){let s=this.toLispCase(a);n.item(o).setAttribute(s,r.toString())}})}toLispCase(A){let i=A.match(/([A-Z])/g);if(!i)return A;let n=A.toString();for(let o=0,a=i.length;o{class t{static forRoot(A){return{ngModule:t,providers:[e4(A)]}}static forChild(){return{ngModule:t}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275mod=$e({type:t})}static{this.\u0275inj=Xe({})}}return t})();var yi="primary",c4=Symbol("RouteTitle"),vM=class{params;constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A[0]:A}return null}getAll(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A:[A]}return[]}get keys(){return Object.keys(this.params)}};function Y1(t){return new vM(t)}function pM(t,e,A){for(let i=0;it.length||A.pathMatch==="full"&&(e.hasChildren()||i.lengtht.length||A.pathMatch==="full"&&e.hasChildren()&&A.path!=="**")return null;let r={};return!pM(o,t.slice(0,o.length),r)||!pM(a,t.slice(t.length-a.length),r)?null:{consumed:t,posParams:r}}function w6(t){return new Promise((e,A)=>{t.pipe(zo()).subscribe({next:i=>e(i),error:i=>A(i)})})}function eIA(t,e){if(t.length!==e.length)return!1;for(let A=0;Ai[o]===n)}else return t===e}function tIA(t){return t.length>0?t[t.length-1]:null}function H1(t){return mB(t)?t:lp(t)?Ms(Promise.resolve(t)):se(t)}function $T(t){return mB(t)?w6(t):Promise.resolve(t)}var iIA={exact:eH,subset:tH},AH={exact:nIA,subset:oIA,ignored:()=>!0};function TT(t,e,A){return iIA[A.paths](t.root,e.root,A.matrixParams)&&AH[A.queryParams](t.queryParams,e.queryParams)&&!(A.fragment==="exact"&&t.fragment!==e.fragment)}function nIA(t,e){return l0(t,e)}function eH(t,e,A){if(!U1(t.segments,e.segments)||!f6(t.segments,e.segments,A)||t.numberOfChildren!==e.numberOfChildren)return!1;for(let i in e.children)if(!t.children[i]||!eH(t.children[i],e.children[i],A))return!1;return!0}function oIA(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(A=>XT(t[A],e[A]))}function tH(t,e,A){return iH(t,e,e.segments,A)}function iH(t,e,A,i){if(t.segments.length>A.length){let n=t.segments.slice(0,A.length);return!(!U1(n,A)||e.hasChildren()||!f6(n,A,i))}else if(t.segments.length===A.length){if(!U1(t.segments,A)||!f6(t.segments,A,i))return!1;for(let n in e.children)if(!t.children[n]||!tH(t.children[n],e.children[n],i))return!1;return!0}else{let n=A.slice(0,t.segments.length),o=A.slice(t.segments.length);return!U1(t.segments,n)||!f6(t.segments,n,i)||!t.children[yi]?!1:iH(t.children[yi],e,o,i)}}function f6(t,e,A){return e.every((i,n)=>AH[A](t[n].parameters,i.parameters))}var oc=class{root;queryParams;fragment;_queryParamMap;constructor(e=new ro([],{}),A={},i=null){this.root=e,this.queryParams=A,this.fragment=i}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){return sIA.serialize(this)}},ro=class{segments;children;parent=null;constructor(e,A){this.segments=e,this.children=A,Object.values(A).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return m6(this)}},F2=class{path;parameters;_parameterMap;constructor(e,A){this.path=e,this.parameters=A}get parameterMap(){return this._parameterMap??=Y1(this.parameters),this._parameterMap}toString(){return oH(this)}};function aIA(t,e){return U1(t,e)&&t.every((A,i)=>l0(A.parameters,e[i].parameters))}function U1(t,e){return t.length!==e.length?!1:t.every((A,i)=>A.path===e[i].path)}function rIA(t,e){let A=[];return Object.entries(t.children).forEach(([i,n])=>{i===yi&&(A=A.concat(e(n,i)))}),Object.entries(t.children).forEach(([i,n])=>{i!==yi&&(A=A.concat(e(n,i)))}),A}var z1=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>new dC,providedIn:"root"})}return t})(),dC=class{parse(e){let A=new kM(e);return new oc(A.parseRootSegment(),A.parseQueryParams(),A.parseFragment())}serialize(e){let A=`/${t4(e.root,!0)}`,i=cIA(e.queryParams),n=typeof e.fragment=="string"?`#${gIA(e.fragment)}`:"";return`${A}${i}${n}`}},sIA=new dC;function m6(t){return t.segments.map(e=>oH(e)).join("/")}function t4(t,e){if(!t.hasChildren())return m6(t);if(e){let A=t.children[yi]?t4(t.children[yi],!1):"",i=[];return Object.entries(t.children).forEach(([n,o])=>{n!==yi&&i.push(`${n}:${t4(o,!1)}`)}),i.length>0?`${A}(${i.join("//")})`:A}else{let A=rIA(t,(i,n)=>n===yi?[t4(t.children[yi],!1)]:[`${n}:${t4(i,!1)}`]);return Object.keys(t.children).length===1&&t.children[yi]!=null?`${m6(t)}/${A[0]}`:`${m6(t)}/(${A.join("//")})`}}function nH(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function h6(t){return nH(t).replace(/%3B/gi,";")}function gIA(t){return encodeURI(t)}function MM(t){return nH(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function p6(t){return decodeURIComponent(t)}function HT(t){return p6(t.replace(/\+/g,"%20"))}function oH(t){return`${MM(t.path)}${lIA(t.parameters)}`}function lIA(t){return Object.entries(t).map(([e,A])=>`;${MM(e)}=${MM(A)}`).join("")}function cIA(t){let e=Object.entries(t).map(([A,i])=>Array.isArray(i)?i.map(n=>`${h6(A)}=${h6(n)}`).join("&"):`${h6(A)}=${h6(i)}`).filter(A=>A);return e.length?`?${e.join("&")}`:""}var CIA=/^[^\/()?;#]+/;function wM(t){let e=t.match(CIA);return e?e[0]:""}var IIA=/^[^\/()?;=#]+/;function dIA(t){let e=t.match(IIA);return e?e[0]:""}var BIA=/^[^=?&#]+/;function EIA(t){let e=t.match(BIA);return e?e[0]:""}var QIA=/^[^&#]+/;function hIA(t){let e=t.match(QIA);return e?e[0]:""}var kM=class{url;remaining;constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new ro([],{}):new ro([],this.parseChildren())}parseQueryParams(){let e={};if(this.consumeOptional("?"))do this.parseQueryParam(e);while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());let A={};this.peekStartsWith("/(")&&(this.capture("/"),A=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(e.length>0||Object.keys(A).length>0)&&(i[yi]=new ro(e,A)),i}parseSegment(){let e=wM(this.remaining);if(e===""&&this.peekStartsWith(";"))throw new kt(4009,!1);return this.capture(e),new F2(p6(e),this.parseMatrixParams())}parseMatrixParams(){let e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){let A=dIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let n=wM(this.remaining);n&&(i=n,this.capture(i))}e[p6(A)]=p6(i)}parseQueryParam(e){let A=EIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let a=hIA(this.remaining);a&&(i=a,this.capture(i))}let n=HT(A),o=HT(i);if(e.hasOwnProperty(n)){let a=e[n];Array.isArray(a)||(a=[a],e[n]=a),a.push(o)}else e[n]=o}parseParens(e){let A={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let i=wM(this.remaining),n=this.remaining[i.length];if(n!=="/"&&n!==")"&&n!==";")throw new kt(4010,!1);let o;i.indexOf(":")>-1?(o=i.slice(0,i.indexOf(":")),this.capture(o),this.capture(":")):e&&(o=yi);let a=this.parseChildren();A[o??yi]=Object.keys(a).length===1&&a[yi]?a[yi]:new ro([],a),this.consumeOptional("//")}return A}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return this.peekStartsWith(e)?(this.remaining=this.remaining.substring(e.length),!0):!1}capture(e){if(!this.consumeOptional(e))throw new kt(4011,!1)}};function aH(t){return t.segments.length>0?new ro([],{[yi]:t}):t}function rH(t){let e={};for(let[i,n]of Object.entries(t.children)){let o=rH(n);if(i===yi&&o.segments.length===0&&o.hasChildren())for(let[a,r]of Object.entries(o.children))e[a]=r;else(o.segments.length>0||o.hasChildren())&&(e[i]=o)}let A=new ro(t.segments,e);return uIA(A)}function uIA(t){if(t.numberOfChildren===1&&t.children[yi]){let e=t.children[yi];return new ro(t.segments.concat(e.segments),e.children)}return t}function WB(t){return t instanceof oc}function sH(t,e,A=null,i=null,n=new dC){let o=gH(t);return lH(o,e,A,i,n)}function gH(t){let e;function A(o){let a={};for(let s of o.children){let g=A(s);a[s.outlet]=g}let r=new ro(o.url,a);return o===t&&(e=r),r}let i=A(t.root),n=aH(i);return e??n}function lH(t,e,A,i,n){let o=t;for(;o.parent;)o=o.parent;if(e.length===0)return DM(o,o,o,A,i,n);let a=fIA(e);if(a.toRoot())return DM(o,o,new ro([],{}),A,i,n);let r=mIA(a,o,t),s=r.processChildren?n4(r.segmentGroup,r.index,a.commands):CH(r.segmentGroup,r.index,a.commands);return DM(o,r.segmentGroup,s,A,i,n)}function D6(t){return typeof t=="object"&&t!=null&&!t.outlets&&!t.segmentPath}function a4(t){return typeof t=="object"&&t!=null&&t.outlets}function zT(t,e,A){t||="\u0275";let i=new oc;return i.queryParams={[t]:e},A.parse(A.serialize(i)).queryParams[t]}function DM(t,e,A,i,n,o){let a={};for(let[g,l]of Object.entries(i??{}))a[g]=Array.isArray(l)?l.map(C=>zT(g,C,o)):zT(g,l,o);let r;t===e?r=A:r=cH(t,e,A);let s=aH(rH(r));return new oc(s,a,n)}function cH(t,e,A){let i={};return Object.entries(t.children).forEach(([n,o])=>{o===e?i[n]=A:i[n]=cH(o,e,A)}),new ro(t.segments,i)}var y6=class{isAbsolute;numberOfDoubleDots;commands;constructor(e,A,i){if(this.isAbsolute=e,this.numberOfDoubleDots=A,this.commands=i,e&&i.length>0&&D6(i[0]))throw new kt(4003,!1);let n=i.find(a4);if(n&&n!==tIA(i))throw new kt(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function fIA(t){if(typeof t[0]=="string"&&t.length===1&&t[0]==="/")return new y6(!0,0,t);let e=0,A=!1,i=t.reduce((n,o,a)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let r={};return Object.entries(o.outlets).forEach(([s,g])=>{r[s]=typeof g=="string"?g.split("/"):g}),[...n,{outlets:r}]}if(o.segmentPath)return[...n,o.segmentPath]}return typeof o!="string"?[...n,o]:a===0?(o.split("/").forEach((r,s)=>{s==0&&r==="."||(s==0&&r===""?A=!0:r===".."?e++:r!=""&&n.push(r))}),n):[...n,o]},[]);return new y6(A,e,i)}var jB=class{segmentGroup;processChildren;index;constructor(e,A,i){this.segmentGroup=e,this.processChildren=A,this.index=i}};function mIA(t,e,A){if(t.isAbsolute)return new jB(e,!0,0);if(!A)return new jB(e,!1,NaN);if(A.parent===null)return new jB(A,!0,0);let i=D6(t.commands[0])?0:1,n=A.segments.length-1+i;return pIA(A,n,t.numberOfDoubleDots)}function pIA(t,e,A){let i=t,n=e,o=A;for(;o>n;){if(o-=n,i=i.parent,!i)throw new kt(4005,!1);n=i.segments.length}return new jB(i,!1,n-o)}function wIA(t){return a4(t[0])?t[0].outlets:{[yi]:t}}function CH(t,e,A){if(t??=new ro([],{}),t.segments.length===0&&t.hasChildren())return n4(t,e,A);let i=DIA(t,e,A),n=A.slice(i.commandIndex);if(i.match&&i.pathIndexo!==yi)&&t.children[yi]&&t.numberOfChildren===1&&t.children[yi].segments.length===0){let o=n4(t.children[yi],e,A);return new ro(t.segments,o.children)}return Object.entries(i).forEach(([o,a])=>{typeof a=="string"&&(a=[a]),a!==null&&(n[o]=CH(t.children[o],e,a))}),Object.entries(t.children).forEach(([o,a])=>{i[o]===void 0&&(n[o]=a)}),new ro(t.segments,n)}}function DIA(t,e,A){let i=0,n=e,o={match:!1,pathIndex:0,commandIndex:0};for(;n=A.length)return o;let a=t.segments[n],r=A[i];if(a4(r))break;let s=`${r}`,g=i0&&s===void 0)break;if(s&&g&&typeof g=="object"&&g.outlets===void 0){if(!PT(s,g,a))return o;i+=2}else{if(!PT(s,{},a))return o;i++}n++}return{match:!0,pathIndex:n,commandIndex:i}}function SM(t,e,A){let i=t.segments.slice(0,e),n=0;for(;n{typeof i=="string"&&(i=[i]),i!==null&&(e[A]=SM(new ro([],{}),0,i))}),e}function OT(t){let e={};return Object.entries(t).forEach(([A,i])=>e[A]=`${i}`),e}function PT(t,e,A){return t==A.path&&l0(e,A.parameters)}var qB="imperative",Br=(function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t})(Br||{}),Ug=class{id;url;constructor(e,A){this.id=e,this.url=A}},_2=class extends Ug{type=Br.NavigationStart;navigationTrigger;restoredState;constructor(e,A,i="imperative",n=null){super(e,A),this.navigationTrigger=i,this.restoredState=n}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},ac=class extends Ug{urlAfterRedirects;type=Br.NavigationEnd;constructor(e,A,i){super(e,A),this.urlAfterRedirects=i}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},cs=(function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t})(cs||{}),ZB=(function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t})(ZB||{}),cl=class extends Ug{reason;code;type=Br.NavigationCancel;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}};function IH(t){return t instanceof cl&&(t.code===cs.Redirect||t.code===cs.SupersededByNewNavigation)}var c0=class extends Ug{reason;code;type=Br.NavigationSkipped;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}},T1=class extends Ug{error;target;type=Br.NavigationError;constructor(e,A,i,n){super(e,A),this.error=i,this.target=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},XB=class extends Ug{urlAfterRedirects;state;type=Br.RoutesRecognized;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},v6=class extends Ug{urlAfterRedirects;state;type=Br.GuardsCheckStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},b6=class extends Ug{urlAfterRedirects;state;shouldActivate;type=Br.GuardsCheckEnd;constructor(e,A,i,n,o){super(e,A),this.urlAfterRedirects=i,this.state=n,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},M6=class extends Ug{urlAfterRedirects;state;type=Br.ResolveStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},k6=class extends Ug{urlAfterRedirects;state;type=Br.ResolveEnd;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},S6=class{route;type=Br.RouteConfigLoadStart;constructor(e){this.route=e}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},x6=class{route;type=Br.RouteConfigLoadEnd;constructor(e){this.route=e}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},R6=class{snapshot;type=Br.ChildActivationStart;constructor(e){this.snapshot=e}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},N6=class{snapshot;type=Br.ChildActivationEnd;constructor(e){this.snapshot=e}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},F6=class{snapshot;type=Br.ActivationStart;constructor(e){this.snapshot=e}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},_6=class{snapshot;type=Br.ActivationEnd;constructor(e){this.snapshot=e}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},$B=class{routerEvent;position;anchor;scrollBehavior;type=Br.Scroll;constructor(e,A,i,n){this.routerEvent=e,this.position=A,this.anchor=i,this.scrollBehavior=n}toString(){let e=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${e}')`}},AE=class{},eE=class{url;navigationBehaviorOptions;constructor(e,A){this.url=e,this.navigationBehaviorOptions=A}};function vIA(t){return!(t instanceof AE)&&!(t instanceof eE)}var L6=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return this.route?.snapshot._environmentInjector??this.rootInjector}constructor(e){this.rootInjector=e,this.children=new O1(this.rootInjector)}},O1=(()=>{class t{rootInjector;contexts=new Map;constructor(A){this.rootInjector=A}onChildOutletCreated(A,i){let n=this.getOrCreateContext(A);n.outlet=i,this.contexts.set(A,n)}onChildOutletDestroyed(A){let i=this.getContext(A);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){let A=this.contexts;return this.contexts=new Map,A}onOutletReAttached(A){this.contexts=A}getOrCreateContext(A){let i=this.getContext(A);return i||(i=new L6(this.rootInjector),this.contexts.set(A,i)),i}getContext(A){return this.contexts.get(A)||null}static \u0275fac=function(i){return new(i||t)(xo(Gr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),G6=class{_root;constructor(e){this._root=e}get root(){return this._root.value}parent(e){let A=this.pathFromRoot(e);return A.length>1?A[A.length-2]:null}children(e){let A=xM(e,this._root);return A?A.children.map(i=>i.value):[]}firstChild(e){let A=xM(e,this._root);return A&&A.children.length>0?A.children[0].value:null}siblings(e){let A=RM(e,this._root);return A.length<2?[]:A[A.length-2].children.map(n=>n.value).filter(n=>n!==e)}pathFromRoot(e){return RM(e,this._root).map(A=>A.value)}};function xM(t,e){if(t===e.value)return e;for(let A of e.children){let i=xM(t,A);if(i)return i}return null}function RM(t,e){if(t===e.value)return[e];for(let A of e.children){let i=RM(t,A);if(i.length)return i.unshift(e),i}return[]}var Kg=class{value;children;constructor(e,A){this.value=e,this.children=A}toString(){return`TreeNode(${this.value})`}};function PB(t){let e={};return t&&t.children.forEach(A=>e[A.value.outlet]=A),e}var r4=class extends G6{snapshot;constructor(e,A){super(e),this.snapshot=A,YM(this,e)}toString(){return this.snapshot.toString()}};function dH(t,e){let A=bIA(t,e),i=new Ht([new F2("",{})]),n=new Ht({}),o=new Ht({}),a=new Ht({}),r=new Ht(""),s=new ag(i,n,a,r,o,yi,t,A.root);return s.snapshot=A.root,new r4(new Kg(s,[]),A)}function bIA(t,e){let A={},i={},n={},a=new J1([],A,n,"",i,yi,t,null,{},e);return new s4("",new Kg(a,[]))}var ag=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(e,A,i,n,o,a,r,s){this.urlSubject=e,this.paramsSubject=A,this.queryParamsSubject=i,this.fragmentSubject=n,this.dataSubject=o,this.outlet=a,this.component=r,this._futureSnapshot=s,this.title=this.dataSubject?.pipe(fe(g=>g[c4]))??se(void 0),this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(fe(e=>Y1(e))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(fe(e=>Y1(e))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function K6(t,e,A="emptyOnly"){let i,{routeConfig:n}=t;return e!==null&&(A==="always"||n?.path===""||!e.component&&!e.routeConfig?.loadComponent)?i={params:cA(cA({},e.params),t.params),data:cA(cA({},e.data),t.data),resolve:cA(cA(cA(cA({},t.data),e.data),n?.data),t._resolvedData)}:i={params:cA({},t.params),data:cA({},t.data),resolve:cA(cA({},t.data),t._resolvedData??{})},n&&EH(n)&&(i.resolve[c4]=n.title),i}var J1=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;get title(){return this.data?.[c4]}constructor(e,A,i,n,o,a,r,s,g,l){this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o,this.outlet=a,this.component=r,this.routeConfig=s,this._resolve=g,this._environmentInjector=l}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Y1(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){let e=this.url.map(i=>i.toString()).join("/"),A=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${e}', path:'${A}')`}},s4=class extends G6{url;constructor(e,A){super(A),this.url=e,YM(this,A)}toString(){return BH(this._root)}};function YM(t,e){e.value._routerState=t,e.children.forEach(A=>YM(t,A))}function BH(t){let e=t.children.length>0?` { ${t.children.map(BH).join(", ")} } `:"";return`${t.value}${e}`}function yM(t){if(t.snapshot){let e=t.snapshot,A=t._futureSnapshot;t.snapshot=A,l0(e.queryParams,A.queryParams)||t.queryParamsSubject.next(A.queryParams),e.fragment!==A.fragment&&t.fragmentSubject.next(A.fragment),l0(e.params,A.params)||t.paramsSubject.next(A.params),eIA(e.url,A.url)||t.urlSubject.next(A.url),l0(e.data,A.data)||t.dataSubject.next(A.data)}else t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data)}function NM(t,e){let A=l0(t.params,e.params)&&aIA(t.url,e.url),i=!t.parent!=!e.parent;return A&&!i&&(!t.parent||NM(t.parent,e.parent))}function EH(t){return typeof t.title=="string"||t.title===null}var QH=new yA(""),TM=(()=>{class t{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=yi;activateEvents=new $A;deactivateEvents=new $A;attachEvents=new $A;detachEvents=new $A;routerOutletData=rt();parentContexts=h(O1);location=h(Oo);changeDetector=h(Dt);inputBinder=h(C4,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(A){if(A.name){let{firstChange:i,previousValue:n}=A.name;if(i)return;this.isTrackedInParentContexts(n)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(n)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(A){return this.parentContexts.getContext(A)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let A=this.parentContexts.getContext(this.name);A?.route&&(A.attachRef?this.attach(A.attachRef,A.route):this.activateWith(A.route,A.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new kt(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new kt(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new kt(4012,!1);this.location.detach();let A=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(A.instance),A}attach(A,i){this.activated=A,this._activatedRoute=i,this.location.insert(A.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(A.instance)}deactivate(){if(this.activated){let A=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(A)}}activateWith(A,i){if(this.isActivated)throw new kt(4013,!1);this._activatedRoute=A;let n=this.location,a=A.snapshot.component,r=this.parentContexts.getOrCreateContext(this.name).children,s=new FM(A,r,n.injector,this.routerOutletData);this.activated=n.createComponent(a,{index:n.length,injector:s,environmentInjector:i}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[ti]})}return t})(),FM=class{route;childContexts;parent;outletData;constructor(e,A,i,n){this.route=e,this.childContexts=A,this.parent=i,this.outletData=n}get(e,A){return e===ag?this.route:e===O1?this.childContexts:e===QH?this.outletData:this.parent.get(e,A)}},C4=new yA(""),HM=(()=>{class t{outletDataSubscriptions=new Map;bindActivatedRouteToOutletComponent(A){this.unsubscribeFromRouteData(A),this.subscribeToRouteData(A)}unsubscribeFromRouteData(A){this.outletDataSubscriptions.get(A)?.unsubscribe(),this.outletDataSubscriptions.delete(A)}subscribeToRouteData(A){let{activatedRoute:i}=A,n=Ir([i.queryParams,i.params,i.data]).pipe(Si(([o,a,r],s)=>(r=cA(cA(cA({},o),a),r),s===0?se(r):Promise.resolve(r)))).subscribe(o=>{if(!A.isActivated||!A.activatedComponentRef||A.activatedRoute!==i||i.component===null){this.unsubscribeFromRouteData(A);return}let a=NU(i.component);if(!a){this.unsubscribeFromRouteData(A);return}for(let{templateName:r}of a.inputs)A.activatedComponentRef.setInput(r,o[r])});this.outletDataSubscriptions.set(A,n)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})(),zM=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(i,n){i&1&&GA(0,"router-outlet")},dependencies:[TM],encapsulation:2})}return t})();function OM(t){let e=t.children&&t.children.map(OM),A=e?Ge(cA({},t),{children:e}):cA({},t);return!A.component&&!A.loadComponent&&(e||A.loadChildren)&&A.outlet&&A.outlet!==yi&&(A.component=zM),A}function MIA(t,e,A){let i=g4(t,e._root,A?A._root:void 0);return new r4(i,e)}function g4(t,e,A){if(A&&t.shouldReuseRoute(e.value,A.value.snapshot)){let i=A.value;i._futureSnapshot=e.value;let n=kIA(t,e,A);return new Kg(i,n)}else{if(t.shouldAttach(e.value)){let o=t.retrieve(e.value);if(o!==null){let a=o.route;return a.value._futureSnapshot=e.value,a.children=e.children.map(r=>g4(t,r)),a}}let i=SIA(e.value),n=e.children.map(o=>g4(t,o));return new Kg(i,n)}}function kIA(t,e,A){return e.children.map(i=>{for(let n of A.children)if(t.shouldReuseRoute(i.value,n.value.snapshot))return g4(t,i,n);return g4(t,i)})}function SIA(t){return new ag(new Ht(t.url),new Ht(t.params),new Ht(t.queryParams),new Ht(t.fragment),new Ht(t.data),t.outlet,t.component,t)}var tE=class{redirectTo;navigationBehaviorOptions;constructor(e,A){this.redirectTo=e,this.navigationBehaviorOptions=A}},hH="ngNavigationCancelingError";function U6(t,e){let{redirectTo:A,navigationBehaviorOptions:i}=WB(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,n=uH(!1,cs.Redirect);return n.url=A,n.navigationBehaviorOptions=i,n}function uH(t,e){let A=new Error(`NavigationCancelingError: ${t||""}`);return A[hH]=!0,A.cancellationCode=e,A}function xIA(t){return fH(t)&&WB(t.url)}function fH(t){return!!t&&t[hH]}var _M=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(e,A,i,n,o){this.routeReuseStrategy=e,this.futureState=A,this.currState=i,this.forwardEvent=n,this.inputBindingEnabled=o}activate(e){let A=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(A,i,e),yM(this.futureState.root),this.activateChildRoutes(A,i,e)}deactivateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{let a=o.value.outlet;this.deactivateRoutes(o,n[a],i),delete n[a]}),Object.values(n).forEach(o=>{this.deactivateRouteAndItsChildren(o,i)})}deactivateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(n===o)if(n.component){let a=i.getContext(n.outlet);a&&this.deactivateChildRoutes(e,A,a.children)}else this.deactivateChildRoutes(e,A,i);else o&&this.deactivateRouteAndItsChildren(A,i)}deactivateRouteAndItsChildren(e,A){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,A):this.deactivateRouteAndOutlet(e,A)}detachAndStoreRouteSubtree(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);if(i&&i.outlet){let a=i.outlet.detach(),r=i.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:a,route:e,contexts:r})}}deactivateRouteAndOutlet(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{this.activateRoutes(o,n[o.value.outlet],i),this.forwardEvent(new _6(o.value.snapshot))}),e.children.length&&this.forwardEvent(new N6(e.value.snapshot))}activateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(yM(n),n===o)if(n.component){let a=i.getOrCreateContext(n.outlet);this.activateChildRoutes(e,A,a.children)}else this.activateChildRoutes(e,A,i);else if(n.component){let a=i.getOrCreateContext(n.outlet);if(this.routeReuseStrategy.shouldAttach(n.snapshot)){let r=this.routeReuseStrategy.retrieve(n.snapshot);this.routeReuseStrategy.store(n.snapshot,null),a.children.onOutletReAttached(r.contexts),a.attachRef=r.componentRef,a.route=r.route.value,a.outlet&&a.outlet.attach(r.componentRef,r.route.value),yM(r.route.value),this.activateChildRoutes(e,null,a.children)}else a.attachRef=null,a.route=n,a.outlet&&a.outlet.activateWith(n,a.injector),this.activateChildRoutes(e,null,a.children)}else this.activateChildRoutes(e,null,i)}},J6=class{path;route;constructor(e){this.path=e,this.route=this.path[this.path.length-1]}},VB=class{component;route;constructor(e,A){this.component=e,this.route=A}};function RIA(t,e,A){let i=t._root,n=e?e._root:null;return i4(i,n,A,[i.value])}function NIA(t){let e=t.routeConfig?t.routeConfig.canActivateChild:null;return!e||e.length===0?null:{node:t,guards:e}}function nE(t,e){let A=Symbol(),i=e.get(t,A);return i===A?typeof t=="function"&&!IU(t)?t:e.get(t):i}function i4(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=PB(e);return t.children.forEach(a=>{FIA(a,o[a.value.outlet],A,i.concat([a.value]),n),delete o[a.value.outlet]}),Object.entries(o).forEach(([a,r])=>o4(r,A.getContext(a),n)),n}function FIA(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=t.value,a=e?e.value:null,r=A?A.getContext(t.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){let s=_IA(a,o,o.routeConfig.runGuardsAndResolvers);s?n.canActivateChecks.push(new J6(i)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?i4(t,e,r?r.children:null,i,n):i4(t,e,A,i,n),s&&r&&r.outlet&&r.outlet.isActivated&&n.canDeactivateChecks.push(new VB(r.outlet.component,a))}else a&&o4(e,r,n),n.canActivateChecks.push(new J6(i)),o.component?i4(t,null,r?r.children:null,i,n):i4(t,null,A,i,n);return n}function _IA(t,e,A){if(typeof A=="function")return or(e._environmentInjector,()=>A(t,e));switch(A){case"pathParamsChange":return!U1(t.url,e.url);case"pathParamsOrQueryParamsChange":return!U1(t.url,e.url)||!l0(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!NM(t,e)||!l0(t.queryParams,e.queryParams);default:return!NM(t,e)}}function o4(t,e,A){let i=PB(t),n=t.value;Object.entries(i).forEach(([o,a])=>{n.component?e?o4(a,e.children.getContext(o),A):o4(a,null,A):o4(a,e,A)}),n.component?e&&e.outlet&&e.outlet.isActivated?A.canDeactivateChecks.push(new VB(e.outlet.component,n)):A.canDeactivateChecks.push(new VB(null,n)):A.canDeactivateChecks.push(new VB(null,n))}function I4(t){return typeof t=="function"}function LIA(t){return typeof t=="boolean"}function GIA(t){return t&&I4(t.canLoad)}function KIA(t){return t&&I4(t.canActivate)}function UIA(t){return t&&I4(t.canActivateChild)}function JIA(t){return t&&I4(t.canDeactivate)}function YIA(t){return t&&I4(t.canMatch)}function mH(t){return t instanceof rU||t?.name==="EmptyError"}var u6=Symbol("INITIAL_VALUE");function iE(){return Si(t=>Ir(t.map(e=>e.pipe(oo(1),cn(u6)))).pipe(fe(e=>{for(let A of e)if(A!==!0){if(A===u6)return u6;if(A===!1||TIA(A))return A}return!0}),Ze(e=>e!==u6),oo(1)))}function TIA(t){return WB(t)||t instanceof tE}function pH(t){return t.aborted?se(void 0).pipe(oo(1)):new $i(e=>{let A=()=>{e.next(),e.complete()};return t.addEventListener("abort",A),()=>t.removeEventListener("abort",A)})}function wH(t){return Bt(pH(t))}function HIA(t){return t0(e=>{let{targetSnapshot:A,currentSnapshot:i,guards:{canActivateChecks:n,canDeactivateChecks:o}}=e;return o.length===0&&n.length===0?se(Ge(cA({},e),{guardsResult:!0})):zIA(o,A,i).pipe(t0(a=>a&&LIA(a)?OIA(A,n,t):se(a)),fe(a=>Ge(cA({},e),{guardsResult:a})))})}function zIA(t,e,A){return Ms(t).pipe(t0(i=>WIA(i.component,i.route,A,e)),zo(i=>i!==!0,!0))}function OIA(t,e,A){return Ms(e).pipe(lu(i=>Xm(jIA(i.route.parent,A),PIA(i.route,A),VIA(t,i.path),qIA(t,i.route))),zo(i=>i!==!0,!0))}function PIA(t,e){return t!==null&&e&&e(new F6(t)),se(!0)}function jIA(t,e){return t!==null&&e&&e(new R6(t)),se(!0)}function qIA(t,e){let A=e.routeConfig?e.routeConfig.canActivate:null;if(!A||A.length===0)return se(!0);let i=A.map(n=>i0(()=>{let o=e._environmentInjector,a=nE(n,o),r=KIA(a)?a.canActivate(e,t):or(o,()=>a(e,t));return H1(r).pipe(zo())}));return se(i).pipe(iE())}function VIA(t,e){let A=e[e.length-1],n=e.slice(0,e.length-1).reverse().map(o=>NIA(o)).filter(o=>o!==null).map(o=>i0(()=>{let a=o.guards.map(r=>{let s=o.node._environmentInjector,g=nE(r,s),l=UIA(g)?g.canActivateChild(A,t):or(s,()=>g(A,t));return H1(l).pipe(zo())});return se(a).pipe(iE())}));return se(n).pipe(iE())}function WIA(t,e,A,i){let n=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!n||n.length===0)return se(!0);let o=n.map(a=>{let r=e._environmentInjector,s=nE(a,r),g=JIA(s)?s.canDeactivate(t,e,A,i):or(r,()=>s(t,e,A,i));return H1(g).pipe(zo())});return se(o).pipe(iE())}function ZIA(t,e,A,i,n){let o=e.canLoad;if(o===void 0||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=GIA(s)?s.canLoad(e,A):or(t,()=>s(e,A)),l=H1(g);return n?l.pipe(wH(n)):l});return se(a).pipe(iE(),DH(i))}function DH(t){return nU(oi(e=>{if(typeof e!="boolean")throw U6(t,e)}),fe(e=>e===!0))}function XIA(t,e,A,i,n){let o=e.canMatch;if(!o||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=YIA(s)?s.canMatch(e,A):or(t,()=>s(e,A));return H1(g).pipe(wH(n))});return se(a).pipe(iE(),DH(i))}var IC=class t extends Error{segmentGroup;constructor(e){super(),this.segmentGroup=e||null,Object.setPrototypeOf(this,t.prototype)}},l4=class t extends Error{urlTree;constructor(e){super(),this.urlTree=e,Object.setPrototypeOf(this,t.prototype)}};function $IA(t){throw new kt(4e3,!1)}function A1A(t){throw uH(!1,cs.GuardRejected)}var LM=class{urlSerializer;urlTree;constructor(e,A){this.urlSerializer=e,this.urlTree=A}lineralizeSegments(e,A){return nt(this,null,function*(){let i=[],n=A.root;for(;;){if(i=i.concat(n.segments),n.numberOfChildren===0)return i;if(n.numberOfChildren>1||!n.children[yi])throw $IA(`${e.redirectTo}`);n=n.children[yi]}})}applyRedirectCommands(e,A,i,n,o){return nt(this,null,function*(){let a=yield e1A(A,n,o);if(a instanceof oc)throw new l4(a);let r=this.applyRedirectCreateUrlTree(a,this.urlSerializer.parse(a),e,i);if(a[0]==="/")throw new l4(r);return r})}applyRedirectCreateUrlTree(e,A,i,n){let o=this.createSegmentGroup(e,A.root,i,n);return new oc(o,this.createQueryParams(A.queryParams,this.urlTree.queryParams),A.fragment)}createQueryParams(e,A){let i={};return Object.entries(e).forEach(([n,o])=>{if(typeof o=="string"&&o[0]===":"){let r=o.substring(1);i[n]=A[r]}else i[n]=o}),i}createSegmentGroup(e,A,i,n){let o=this.createSegments(e,A.segments,i,n),a={};return Object.entries(A.children).forEach(([r,s])=>{a[r]=this.createSegmentGroup(e,s,i,n)}),new ro(o,a)}createSegments(e,A,i,n){return A.map(o=>o.path[0]===":"?this.findPosParam(e,o,n):this.findOrReturn(o,i))}findPosParam(e,A,i){let n=i[A.path.substring(1)];if(!n)throw new kt(4001,!1);return n}findOrReturn(e,A){let i=0;for(let n of A){if(n.path===e.path)return A.splice(i),n;i++}return e}};function e1A(t,e,A){if(typeof t=="string")return Promise.resolve(t);let i=t,{queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,params:g,data:l,title:C,paramMap:I,queryParamMap:d}=e;return w6(H1(or(A,()=>i({params:g,data:l,queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,title:C,paramMap:I,queryParamMap:d}))))}function t1A(t,e){return t.providers&&!t._injector&&(t._injector=rp(t.providers,e,`Route: ${t.path}`)),t._injector??e}function nc(t){return t.outlet||yi}function i1A(t,e){let A=t.filter(i=>nc(i)===e);return A.push(...t.filter(i=>nc(i)!==e)),A}var GM={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function n1A(t,e,A,i,n,o){let a=yH(t,e,A);return a.matched?(i=t1A(e,i),XIA(i,e,A,n,o).pipe(fe(r=>r===!0?a:cA({},GM)))):se(a)}function yH(t,e,A){if(e.path==="")return e.pathMatch==="full"&&(t.hasChildren()||A.length>0)?cA({},GM):{matched:!0,consumedSegments:[],remainingSegments:A,parameters:{},positionalParamSegments:{}};let n=(e.matcher||ZT)(A,t,e);if(!n)return cA({},GM);let o={};Object.entries(n.posParams??{}).forEach(([r,s])=>{o[r]=s.path});let a=n.consumed.length>0?cA(cA({},o),n.consumed[n.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:n.consumed,remainingSegments:A.slice(n.consumed.length),parameters:a,positionalParamSegments:n.posParams??{}}}function jT(t,e,A,i){return A.length>0&&r1A(t,A,i)?{segmentGroup:new ro(e,a1A(i,new ro(A,t.children))),slicedSegments:[]}:A.length===0&&s1A(t,A,i)?{segmentGroup:new ro(t.segments,o1A(t,A,i,t.children)),slicedSegments:A}:{segmentGroup:new ro(t.segments,t.children),slicedSegments:A}}function o1A(t,e,A,i){let n={};for(let o of A)if(T6(t,e,o)&&!i[nc(o)]){let a=new ro([],{});n[nc(o)]=a}return cA(cA({},i),n)}function a1A(t,e){let A={};A[yi]=e;for(let i of t)if(i.path===""&&nc(i)!==yi){let n=new ro([],{});A[nc(i)]=n}return A}function r1A(t,e,A){return A.some(i=>T6(t,e,i)&&nc(i)!==yi)}function s1A(t,e,A){return A.some(i=>T6(t,e,i))}function T6(t,e,A){return(t.hasChildren()||e.length>0)&&A.pathMatch==="full"?!1:A.path===""}function g1A(t,e,A){return e.length===0&&!t.children[A]}var KM=class{};function l1A(t,e,A,i,n,o,a="emptyOnly",r){return nt(this,null,function*(){return new UM(t,e,A,i,n,a,o,r).recognize()})}var c1A=31,UM=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(e,A,i,n,o,a,r,s){this.injector=e,this.configLoader=A,this.rootComponentType=i,this.config=n,this.urlTree=o,this.paramsInheritanceStrategy=a,this.urlSerializer=r,this.abortSignal=s,this.applyRedirects=new LM(this.urlSerializer,this.urlTree)}noMatchError(e){return new kt(4002,`'${e.segmentGroup}'`)}recognize(){return nt(this,null,function*(){let e=jT(this.urlTree.root,[],[],this.config).segmentGroup,{children:A,rootSnapshot:i}=yield this.match(e),n=new Kg(i,A),o=new s4("",n),a=sH(i,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(a),{state:o,tree:a}})}match(e){return nt(this,null,function*(){let A=new J1([],Object.freeze({}),Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),yi,this.rootComponentType,null,{},this.injector);try{return{children:yield this.processSegmentGroup(this.injector,this.config,e,yi,A),rootSnapshot:A}}catch(i){if(i instanceof l4)return this.urlTree=i.urlTree,this.match(i.urlTree.root);throw i instanceof IC?this.noMatchError(i):i}})}processSegmentGroup(e,A,i,n,o){return nt(this,null,function*(){if(i.segments.length===0&&i.hasChildren())return this.processChildren(e,A,i,o);let a=yield this.processSegment(e,A,i,i.segments,n,!0,o);return a instanceof Kg?[a]:[]})}processChildren(e,A,i,n){return nt(this,null,function*(){let o=[];for(let s of Object.keys(i.children))s==="primary"?o.unshift(s):o.push(s);let a=[];for(let s of o){let g=i.children[s],l=i1A(A,s),C=yield this.processSegmentGroup(e,l,g,s,n);a.push(...C)}let r=vH(a);return C1A(r),r})}processSegment(e,A,i,n,o,a,r){return nt(this,null,function*(){for(let s of A)try{return yield this.processSegmentAgainstRoute(s._injector??e,A,s,i,n,o,a,r)}catch(g){if(g instanceof IC||mH(g))continue;throw g}if(g1A(i,n,o))return new KM;throw new IC(i)})}processSegmentAgainstRoute(e,A,i,n,o,a,r,s){return nt(this,null,function*(){if(nc(i)!==a&&(a===yi||!T6(n,o,i)))throw new IC(n);if(i.redirectTo===void 0)return this.matchSegmentAgainstRoute(e,n,i,o,a,s);if(this.allowRedirects&&r)return this.expandSegmentAgainstRouteUsingRedirect(e,n,A,i,o,a,s);throw new IC(n)})}expandSegmentAgainstRouteUsingRedirect(e,A,i,n,o,a,r){return nt(this,null,function*(){let{matched:s,parameters:g,consumedSegments:l,positionalParamSegments:C,remainingSegments:I}=yH(A,n,o);if(!s)throw new IC(A);typeof n.redirectTo=="string"&&n.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>c1A&&(this.allowRedirects=!1));let d=new J1(o,g,Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,qT(n),nc(n),n.component??n._loadedComponent??null,n,VT(n),e),B=K6(d,r,this.paramsInheritanceStrategy);if(d.params=Object.freeze(B.params),d.data=Object.freeze(B.data),this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let E=yield this.applyRedirects.applyRedirectCommands(l,n.redirectTo,C,d,e),Q=yield this.applyRedirects.lineralizeSegments(n,E);return this.processSegment(e,i,A,Q.concat(I),a,!1,r)})}matchSegmentAgainstRoute(e,A,i,n,o,a){return nt(this,null,function*(){if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let r=yield w6(n1A(A,i,n,e,this.urlSerializer,this.abortSignal));if(i.path==="**"&&(A.children={}),!r?.matched)throw new IC(A);e=i._injector??e;let{routes:s}=yield this.getChildConfig(e,i,n),g=i._loadedInjector??e,{parameters:l,consumedSegments:C,remainingSegments:I}=r,d=new J1(C,l,Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,qT(i),nc(i),i.component??i._loadedComponent??null,i,VT(i),e),B=K6(d,a,this.paramsInheritanceStrategy);d.params=Object.freeze(B.params),d.data=Object.freeze(B.data);let{segmentGroup:E,slicedSegments:Q}=jT(A,C,I,s);if(Q.length===0&&E.hasChildren()){let S=yield this.processChildren(g,s,E,d);return new Kg(d,S)}if(s.length===0&&Q.length===0)return new Kg(d,[]);let f=nc(i)===o,b=yield this.processSegment(g,s,E,Q,f?yi:o,!0,d);return new Kg(d,b instanceof Kg?[b]:[])})}getChildConfig(e,A,i){return nt(this,null,function*(){if(A.children)return{routes:A.children,injector:e};if(A.loadChildren){if(A._loadedRoutes!==void 0){let o=A._loadedNgModuleFactory;return o&&!A._loadedInjector&&(A._loadedInjector=o.create(e).injector),{routes:A._loadedRoutes,injector:A._loadedInjector}}if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);if(yield w6(ZIA(e,A,i,this.urlSerializer,this.abortSignal))){let o=yield this.configLoader.loadChildren(e,A);return A._loadedRoutes=o.routes,A._loadedInjector=o.injector,A._loadedNgModuleFactory=o.factory,o}throw A1A(A)}return{routes:[],injector:e}})}};function C1A(t){t.sort((e,A)=>e.value.outlet===yi?-1:A.value.outlet===yi?1:e.value.outlet.localeCompare(A.value.outlet))}function I1A(t){let e=t.value.routeConfig;return e&&e.path===""}function vH(t){let e=[],A=new Set;for(let i of t){if(!I1A(i)){e.push(i);continue}let n=e.find(o=>i.value.routeConfig===o.value.routeConfig);n!==void 0?(n.children.push(...i.children),A.add(n)):e.push(i)}for(let i of A){let n=vH(i.children);e.push(new Kg(i.value,n))}return e.filter(i=>!A.has(i))}function qT(t){return t.data||{}}function VT(t){return t.resolve||{}}function d1A(t,e,A,i,n,o,a){return t0(r=>nt(null,null,function*(){let{state:s,tree:g}=yield l1A(t,e,A,i,r.extractedUrl,n,o,a);return Ge(cA({},r),{targetSnapshot:s,urlAfterRedirects:g})}))}function B1A(t){return t0(e=>{let{targetSnapshot:A,guards:{canActivateChecks:i}}=e;if(!i.length)return se(e);let n=new Set(i.map(r=>r.route)),o=new Set;for(let r of n)if(!o.has(r))for(let s of bH(r))o.add(s);let a=0;return Ms(o).pipe(lu(r=>n.has(r)?E1A(r,A,t):(r.data=K6(r,r.parent,t).resolve,se(void 0))),oi(()=>a++),Yb(1),t0(r=>a===o.size?se(e):ja))})}function bH(t){let e=t.children.map(A=>bH(A)).flat();return[t,...e]}function E1A(t,e,A){let i=t.routeConfig,n=t._resolve;return i?.title!==void 0&&!EH(i)&&(n[c4]=i.title),i0(()=>(t.data=K6(t,t.parent,A).resolve,Q1A(n,t,e).pipe(fe(o=>(t._resolvedData=o,t.data=cA(cA({},t.data),o),null)))))}function Q1A(t,e,A){let i=bM(t);if(i.length===0)return se({});let n={};return Ms(i).pipe(t0(o=>h1A(t[o],e,A).pipe(zo(),oi(a=>{if(a instanceof tE)throw U6(new dC,a);n[o]=a}))),Yb(1),fe(()=>n),ta(o=>mH(o)?ja:Zm(o)))}function h1A(t,e,A){let i=e._environmentInjector,n=nE(t,i),o=n.resolve?n.resolve(e,A):or(i,()=>n(e,A));return H1(o)}function WT(t){return Si(e=>{let A=t(e);return A?Ms(A).pipe(fe(()=>e)):se(e)})}var PM=(()=>{class t{buildTitle(A){let i,n=A.root;for(;n!==void 0;)i=this.getResolvedTitleForRoute(n)??i,n=n.children.find(o=>o.outlet===yi);return i}getResolvedTitleForRoute(A){return A.data[c4]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(MH),providedIn:"root"})}return t})(),MH=(()=>{class t extends PM{title;constructor(A){super(),this.title=A}updateTitle(A){let i=this.buildTitle(A);i!==void 0&&this.title.setTitle(i)}static \u0275fac=function(i){return new(i||t)(xo(YU))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),P1=new yA("",{factory:()=>({})}),oE=new yA(""),H6=(()=>{class t{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=h(vU);loadComponent(A,i){return nt(this,null,function*(){if(this.componentLoaders.get(i))return this.componentLoaders.get(i);if(i._loadedComponent)return Promise.resolve(i._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield $T(or(A,()=>i.loadComponent())),a=yield xH(SH(o));return this.onLoadEndListener&&this.onLoadEndListener(i),i._loadedComponent=a,a}finally{this.componentLoaders.delete(i)}});return this.componentLoaders.set(i,n),n})}loadChildren(A,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return Promise.resolve({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield kH(i,this.compiler,A,this.onLoadEndListener);return i._loadedRoutes=o.routes,i._loadedInjector=o.injector,i._loadedNgModuleFactory=o.factory,o}finally{this.childrenLoaders.delete(i)}});return this.childrenLoaders.set(i,n),n}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function kH(t,e,A,i){return nt(this,null,function*(){let n=yield $T(or(A,()=>t.loadChildren())),o=yield xH(SH(n)),a;o instanceof uU||Array.isArray(o)?a=o:a=yield e.compileModuleAsync(o),i&&i(t);let r,s,g=!1,l;return Array.isArray(a)?(s=a,g=!0):(r=a.create(A).injector,l=a,s=r.get(oE,[],{optional:!0,self:!0}).flat()),{routes:s.map(OM),injector:r,factory:l}})}function u1A(t){return t&&typeof t=="object"&&"default"in t}function SH(t){return u1A(t)?t.default:t}function xH(t){return nt(this,null,function*(){return t})}var z6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(f1A),providedIn:"root"})}return t})(),f1A=(()=>{class t{shouldProcessUrl(A){return!0}extract(A){return A}merge(A,i){return A}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),jM=new yA(""),qM=new yA("");function RH(t,e,A){let i=t.get(qM),n=t.get(Xt);if(!n.startViewTransition||i.skipNextTransition)return i.skipNextTransition=!1,new Promise(g=>setTimeout(g));let o,a=new Promise(g=>{o=g}),r=n.startViewTransition(()=>(o(),m1A(t)));r.updateCallbackDone.catch(g=>{}),r.ready.catch(g=>{}),r.finished.catch(g=>{});let{onViewTransitionCreated:s}=i;return s&&or(t,()=>s({transition:r,from:e,to:A})),a}function m1A(t){return new Promise(e=>{Yn({read:()=>setTimeout(e)},{injector:t})})}var p1A=()=>{},VM=new yA(""),O6=(()=>{class t{currentNavigation=jA(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=jA(null);events=new XA;transitionAbortWithErrorSubject=new XA;configLoader=h(H6);environmentInjector=h(Gr);destroyRef=h(qa);urlSerializer=h(z1);rootContexts=h(O1);location=h(o0);inputBindingEnabled=h(C4,{optional:!0})!==null;titleStrategy=h(PM);options=h(P1,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=h(z6);createViewTransition=h(jM,{optional:!0});navigationErrorHandler=h(VM,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>se(void 0);rootComponentType=null;destroyed=!1;constructor(){let A=n=>this.events.next(new S6(n)),i=n=>this.events.next(new x6(n));this.configLoader.onLoadEndListener=i,this.configLoader.onLoadStartListener=A,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(A){let i=++this.navigationId;la(()=>{this.transitions?.next(Ge(cA({},A),{extractedUrl:this.urlHandlingStrategy.extract(A.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:i}))})}setupNavigations(A){return this.transitions=new Ht(null),this.transitions.pipe(Ze(i=>i!==null),Si(i=>{let n=!1,o=new AbortController,a=()=>!n&&this.currentTransition?.id===i.id;return se(i).pipe(Si(r=>{if(this.navigationId>i.id)return this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),ja;this.currentTransition=i;let s=this.lastSuccessfulNavigation();this.currentNavigation.set({id:r.id,initialUrl:r.rawUrl,extractedUrl:r.extractedUrl,targetBrowserUrl:typeof r.extras.browserUrl=="string"?this.urlSerializer.parse(r.extras.browserUrl):r.extras.browserUrl,trigger:r.source,extras:r.extras,previousNavigation:s?Ge(cA({},s),{previousNavigation:null}):null,abort:()=>o.abort()});let g=!A.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),l=r.extras.onSameUrlNavigation??A.onSameUrlNavigation;if(!g&&l!=="reload")return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.rawUrl),"",ZB.IgnoredSameUrlNavigation)),r.resolve(!1),ja;if(this.urlHandlingStrategy.shouldProcessUrl(r.rawUrl))return se(r).pipe(Si(C=>(this.events.next(new _2(C.id,this.urlSerializer.serialize(C.extractedUrl),C.source,C.restoredState)),C.id!==this.navigationId?ja:Promise.resolve(C))),d1A(this.environmentInjector,this.configLoader,this.rootComponentType,A.config,this.urlSerializer,this.paramsInheritanceStrategy,o.signal),oi(C=>{i.targetSnapshot=C.targetSnapshot,i.urlAfterRedirects=C.urlAfterRedirects,this.currentNavigation.update(d=>(d.finalUrl=C.urlAfterRedirects,d));let I=new XB(C.id,this.urlSerializer.serialize(C.extractedUrl),this.urlSerializer.serialize(C.urlAfterRedirects),C.targetSnapshot);this.events.next(I)}));if(g&&this.urlHandlingStrategy.shouldProcessUrl(r.currentRawUrl)){let{id:C,extractedUrl:I,source:d,restoredState:B,extras:E}=r,Q=new _2(C,this.urlSerializer.serialize(I),d,B);this.events.next(Q);let f=dH(this.rootComponentType,this.environmentInjector).snapshot;return this.currentTransition=i=Ge(cA({},r),{targetSnapshot:f,urlAfterRedirects:I,extras:Ge(cA({},E),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(b=>(b.finalUrl=I,b)),se(i)}else return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.extractedUrl),"",ZB.IgnoredByUrlHandlingStrategy)),r.resolve(!1),ja}),fe(r=>{let s=new v6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);return this.events.next(s),this.currentTransition=i=Ge(cA({},r),{guards:RIA(r.targetSnapshot,r.currentSnapshot,this.rootContexts)}),i}),HIA(r=>this.events.next(r)),Si(r=>{if(i.guardsResult=r.guardsResult,r.guardsResult&&typeof r.guardsResult!="boolean")throw U6(this.urlSerializer,r.guardsResult);let s=new b6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot,!!r.guardsResult);if(this.events.next(s),!a())return ja;if(!r.guardsResult)return this.cancelNavigationTransition(r,"",cs.GuardRejected),ja;if(r.guards.canActivateChecks.length===0)return se(r);let g=new M6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);if(this.events.next(g),!a())return ja;let l=!1;return se(r).pipe(B1A(this.paramsInheritanceStrategy),oi({next:()=>{l=!0;let C=new k6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);this.events.next(C)},complete:()=>{l||this.cancelNavigationTransition(r,"",cs.NoDataFromResolver)}}))}),WT(r=>{let s=l=>{let C=[];if(l.routeConfig?._loadedComponent)l.component=l.routeConfig?._loadedComponent;else if(l.routeConfig?.loadComponent){let I=l._environmentInjector;C.push(this.configLoader.loadComponent(I,l.routeConfig).then(d=>{l.component=d}))}for(let I of l.children)C.push(...s(I));return C},g=s(r.targetSnapshot.root);return g.length===0?se(r):Ms(Promise.all(g).then(()=>r))}),WT(()=>this.afterPreactivation()),Si(()=>{let{currentSnapshot:r,targetSnapshot:s}=i,g=this.createViewTransition?.(this.environmentInjector,r.root,s.root);return g?Ms(g).pipe(fe(()=>i)):se(i)}),oo(1),fe(r=>{let s=MIA(A.routeReuseStrategy,r.targetSnapshot,r.currentRouterState);this.currentTransition=i=r=Ge(cA({},r),{targetRouterState:s}),this.currentNavigation.update(g=>(g.targetRouterState=s,g)),this.events.next(new AE),a()&&(new _M(A.routeReuseStrategy,i.targetRouterState,i.currentRouterState,g=>this.events.next(g),this.inputBindingEnabled).activate(this.rootContexts),a()&&(n=!0,this.currentNavigation.update(g=>(g.abort=p1A,g)),this.lastSuccessfulNavigation.set(la(this.currentNavigation)),this.events.next(new ac(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects))),this.titleStrategy?.updateTitle(r.targetRouterState.snapshot),r.resolve(!0)))}),Bt(pH(o.signal).pipe(Ze(()=>!n&&!i.targetRouterState),oi(()=>{this.cancelNavigationTransition(i,o.signal.reason+"",cs.Aborted)}))),oi({complete:()=>{n=!0}}),Bt(this.transitionAbortWithErrorSubject.pipe(oi(r=>{throw r}))),ep(()=>{o.abort(),n||this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),this.currentTransition?.id===i.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),ta(r=>{if(n=!0,this.destroyed)return i.resolve(!1),ja;if(fH(r))this.events.next(new cl(i.id,this.urlSerializer.serialize(i.extractedUrl),r.message,r.cancellationCode)),xIA(r)?this.events.next(new eE(r.url,r.navigationBehaviorOptions)):i.resolve(!1);else{let s=new T1(i.id,this.urlSerializer.serialize(i.extractedUrl),r,i.targetSnapshot??void 0);try{let g=or(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(g instanceof tE){let{message:l,cancellationCode:C}=U6(this.urlSerializer,g);this.events.next(new cl(i.id,this.urlSerializer.serialize(i.extractedUrl),l,C)),this.events.next(new eE(g.redirectTo,g.navigationBehaviorOptions))}else throw this.events.next(s),r}catch(g){this.options.resolveNavigationPromiseOnError?i.resolve(!1):i.reject(g)}}return ja}))}))}cancelNavigationTransition(A,i,n){let o=new cl(A.id,this.urlSerializer.serialize(A.extractedUrl),i,n);this.events.next(o),A.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let A=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),i=la(this.currentNavigation),n=i?.targetBrowserUrl??i?.extractedUrl;return A.toString()!==n?.toString()&&!i?.extras.skipLocationChange}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function w1A(t){return t!==qB}var NH=new yA("");var FH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(D1A),providedIn:"root"})}return t})(),Y6=class{shouldDetach(e){return!1}store(e,A){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,A){return e.routeConfig===A.routeConfig}shouldDestroyInjector(e){return!0}},D1A=(()=>{class t extends Y6{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),WM=(()=>{class t{urlSerializer=h(z1);options=h(P1,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=h(o0);urlHandlingStrategy=h(z6);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new oc;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:A,initialUrl:i,targetBrowserUrl:n}){let o=A!==void 0?this.urlHandlingStrategy.merge(A,i):i,a=n??o;return a instanceof oc?this.urlSerializer.serialize(a):a}commitTransition({targetRouterState:A,finalUrl:i,initialUrl:n}){i&&A?(this.currentUrlTree=i,this.rawUrlTree=this.urlHandlingStrategy.merge(i,n),this.routerState=A):this.rawUrlTree=n}routerState=dH(null,h(Gr));getRouterState(){return this.routerState}_stateMemento=this.createStateMemento();get stateMemento(){return this._stateMemento}updateStateMemento(){this._stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}restoredState(){return this.location.getState()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(y1A),providedIn:"root"})}return t})(),y1A=(()=>{class t extends WM{currentPageId=0;lastSuccessfulId=-1;get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(A){return this.location.subscribe(i=>{i.type==="popstate"&&setTimeout(()=>{A(i.url,i.state,"popstate")})})}handleRouterEvent(A,i){A instanceof _2?this.updateStateMemento():A instanceof c0?this.commitTransition(i):A instanceof XB?this.urlUpdateStrategy==="eager"&&(i.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof AE?(this.commitTransition(i),this.urlUpdateStrategy==="deferred"&&!i.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof cl&&!IH(A)?this.restoreHistory(i):A instanceof T1?this.restoreHistory(i,!0):A instanceof ac&&(this.lastSuccessfulId=A.id,this.currentPageId=this.browserPageId)}setBrowserUrl(A,{extras:i,id:n}){let{replaceUrl:o,state:a}=i;if(this.location.isCurrentPathEqualTo(A)||o){let r=this.browserPageId,s=cA(cA({},a),this.generateNgRouterState(n,r));this.location.replaceState(A,"",s)}else{let r=cA(cA({},a),this.generateNgRouterState(n,this.browserPageId+1));this.location.go(A,"",r)}}restoreHistory(A,i=!1){if(this.canceledNavigationResolution==="computed"){let n=this.browserPageId,o=this.currentPageId-n;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===A.finalUrl&&o===0&&(this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(i&&this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}resetInternalState({finalUrl:A}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,A??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(A,i){return this.canceledNavigationResolution==="computed"?{navigationId:A,\u0275routerPageId:i}:{navigationId:A}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function P6(t,e){t.events.pipe(Ze(A=>A instanceof ac||A instanceof cl||A instanceof T1||A instanceof c0),fe(A=>A instanceof ac||A instanceof c0?0:(A instanceof cl?A.code===cs.Redirect||A.code===cs.SupersededByNewNavigation:!1)?2:1),Ze(A=>A!==2),oo(1)).subscribe(()=>{e()})}var _H={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},LH={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},Cs=(()=>{class t{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=h(fU);stateManager=h(WM);options=h(P1,{optional:!0})||{};pendingTasks=h(EU);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=h(O6);urlSerializer=h(z1);location=h(o0);urlHandlingStrategy=h(z6);injector=h(Gr);_events=new XA;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=h(FH);injectorCleanup=h(NH,{optional:!0});onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=h(oE,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!h(C4,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:A=>{}}),this.subscribeToNavigationEvents()}eventsSubscription=new Jn;subscribeToNavigationEvents(){let A=this.navigationTransitions.events.subscribe(i=>{try{let n=this.navigationTransitions.currentTransition,o=la(this.navigationTransitions.currentNavigation);if(n!==null&&o!==null){if(this.stateManager.handleRouterEvent(i,o),i instanceof cl&&i.code!==cs.Redirect&&i.code!==cs.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof ac)this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);else if(i instanceof eE){let a=i.navigationBehaviorOptions,r=this.urlHandlingStrategy.merge(i.url,n.currentRawUrl),s=cA({scroll:n.extras.scroll,browserUrl:n.extras.browserUrl,info:n.extras.info,skipLocationChange:n.extras.skipLocationChange,replaceUrl:n.extras.replaceUrl||this.urlUpdateStrategy==="eager"||w1A(n.source)},a);this.scheduleNavigation(r,qB,null,s,{resolve:n.resolve,reject:n.reject,promise:n.promise})}}vIA(i)&&this._events.next(i)}catch(n){this.navigationTransitions.transitionAbortWithErrorSubject.next(n)}});this.eventsSubscription.add(A)}resetRootComponentType(A){this.routerState.root.component=A,this.navigationTransitions.rootComponentType=A}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),qB,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((A,i,n)=>{this.navigateToSyncWithBrowser(A,n,i)})}navigateToSyncWithBrowser(A,i,n){let o={replaceUrl:!0},a=n?.navigationId?n:null;if(n){let s=cA({},n);delete s.navigationId,delete s.\u0275routerPageId,Object.keys(s).length!==0&&(o.state=s)}let r=this.parseUrl(A);this.scheduleNavigation(r,i,a,o).catch(s=>{this.disposed||this.injector.get(Tb)(s)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return la(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(A){this.config=A.map(OM),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(A,i={}){let{relativeTo:n,queryParams:o,fragment:a,queryParamsHandling:r,preserveFragment:s}=i,g=s?this.currentUrlTree.fragment:a,l=null;switch(r??this.options.defaultQueryParamsHandling){case"merge":l=cA(cA({},this.currentUrlTree.queryParams),o);break;case"preserve":l=this.currentUrlTree.queryParams;break;default:l=o||null}l!==null&&(l=this.removeEmptyProps(l));let C;try{let I=n?n.snapshot:this.routerState.snapshot.root;C=gH(I)}catch{(typeof A[0]!="string"||A[0][0]!=="/")&&(A=[]),C=this.currentUrlTree.root}return lH(C,A,l,g??null,this.urlSerializer)}navigateByUrl(A,i={skipLocationChange:!1}){let n=WB(A)?A:this.parseUrl(A),o=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(o,qB,null,i)}navigate(A,i={skipLocationChange:!1}){return v1A(A),this.navigateByUrl(this.createUrlTree(A,i),i)}serializeUrl(A){return this.urlSerializer.serialize(A)}parseUrl(A){try{return this.urlSerializer.parse(A)}catch{return this.console.warn(CU(4018,!1)),this.urlSerializer.parse("/")}}isActive(A,i){let n;if(i===!0?n=cA({},_H):i===!1?n=cA({},LH):n=i,WB(A))return TT(this.currentUrlTree,A,n);let o=this.parseUrl(A);return TT(this.currentUrlTree,o,n)}removeEmptyProps(A){return Object.entries(A).reduce((i,[n,o])=>(o!=null&&(i[n]=o),i),{})}scheduleNavigation(A,i,n,o,a){if(this.disposed)return Promise.resolve(!1);let r,s,g;a?(r=a.resolve,s=a.reject,g=a.promise):g=new Promise((C,I)=>{r=C,s=I});let l=this.pendingTasks.add();return P6(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(l))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:A,extras:o,resolve:r,reject:s,promise:g,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),g.catch(C=>Promise.reject(C))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function v1A(t){for(let e=0;e{class t{router;injector;preloadingStrategy;loader;subscription;constructor(A,i,n,o){this.router=A,this.injector=i,this.preloadingStrategy=n,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(Ze(A=>A instanceof ac),lu(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription?.unsubscribe()}processRoutes(A,i){let n=[];for(let o of i){o.providers&&!o._injector&&(o._injector=rp(o.providers,A,""));let a=o._injector??A;o._loadedNgModuleFactory&&!o._loadedInjector&&(o._loadedInjector=o._loadedNgModuleFactory.create(a).injector);let r=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&n.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&n.push(this.processRoutes(r,o.children??o._loadedRoutes))}return Ms(n).pipe(Jb())}preloadConfig(A,i){return this.preloadingStrategy.preload(i,()=>{if(A.destroyed)return se(null);let n;i.loadChildren&&i.canLoad===void 0?n=Ms(this.loader.loadChildren(A,i)):n=se(null);let o=n.pipe(t0(a=>a===null?se(void 0):(i._loadedRoutes=a.routes,i._loadedInjector=a.injector,i._loadedNgModuleFactory=a.factory,this.processRoutes(a.injector??A,a.routes))));if(i.loadComponent&&!i._loadedComponent){let a=this.loader.loadComponent(A,i);return Ms([o,a]).pipe(Jb())}else return o})}static \u0275fac=function(i){return new(i||t)(xo(Cs),xo(Gr),xo(d4),xo(H6))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),KH=new yA(""),M1A=(()=>{class t{options;routerEventsSubscription;scrollEventsSubscription;lastId=0;lastSource=qB;restoredId=0;store={};urlSerializer=h(z1);zone=h(Oe);viewportScroller=h(jb);transitions=h(O6);constructor(A){this.options=A,this.options.scrollPositionRestoration||="disabled",this.options.anchorScrolling||="disabled"}init(){this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(A=>{A instanceof _2?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=A.navigationTrigger,this.restoredId=A.restoredState?A.restoredState.navigationId:0):A instanceof ac?(this.lastId=A.id,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.urlAfterRedirects).fragment)):A instanceof c0&&A.code===ZB.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(A=>{if(!(A instanceof $B)||A.scrollBehavior==="manual")return;let i={behavior:"instant"};A.position?this.options.scrollPositionRestoration==="top"?this.viewportScroller.scrollToPosition([0,0],i):this.options.scrollPositionRestoration==="enabled"&&this.viewportScroller.scrollToPosition(A.position,i):A.anchor&&this.options.anchorScrolling==="enabled"?this.viewportScroller.scrollToAnchor(A.anchor):this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.scrollToPosition([0,0])})}scheduleScrollEvent(A,i){let n=la(this.transitions.currentNavigation)?.extras.scroll;this.zone.runOutsideAngular(()=>nt(this,null,function*(){yield new Promise(o=>{setTimeout(o),typeof requestAnimationFrame<"u"&&requestAnimationFrame(o)}),this.zone.run(()=>{this.transitions.events.next(new $B(A,this.lastSource==="popstate"?this.store[this.restoredId]:null,i,n))})}))}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static \u0275fac=function(i){ap()};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})();function k1A(){return h(Cs).routerState.root}function B4(t,e){return{\u0275kind:t,\u0275providers:e}}function S1A(){let t=h(ft);return e=>{let A=t.get(oC);if(e!==A.components[0])return;let i=t.get(Cs),n=t.get(UH);t.get(XM)===1&&i.initialNavigation(),t.get(TH,null,{optional:!0})?.setUpPreloading(),t.get(KH,null,{optional:!0})?.init(),i.resetRootComponentType(A.componentTypes[0]),n.closed||(n.next(),n.complete(),n.unsubscribe())}}var UH=new yA("",{factory:()=>new XA}),XM=new yA("",{factory:()=>1});function JH(){let t=[{provide:hU,useValue:!0},{provide:XM,useValue:0},zb(()=>{let e=h(ft);return e.get(FU,Promise.resolve()).then(()=>new Promise(i=>{let n=e.get(Cs),o=e.get(UH);P6(n,()=>{i(!0)}),e.get(O6).afterPreactivation=()=>(i(!0),o.closed?se(void 0):o),n.initialNavigation()}))})];return B4(2,t)}function YH(){let t=[zb(()=>{h(Cs).setUpLocationChangeListener()}),{provide:XM,useValue:2}];return B4(3,t)}var TH=new yA("");function HH(t){return B4(0,[{provide:TH,useExisting:GH},{provide:d4,useExisting:t}])}function zH(){return B4(8,[HM,{provide:C4,useExisting:HM}])}function OH(t){op("NgRouterViewTransitions");let e=[{provide:jM,useValue:RH},{provide:qM,useValue:cA({skipNextTransition:!!t?.skipInitialTransition},t)}];return B4(9,e)}var PH=[o0,{provide:z1,useClass:dC},Cs,O1,{provide:ag,useFactory:k1A},H6,[]],j6=(()=>{class t{constructor(){}static forRoot(A,i){return{ngModule:t,providers:[PH,[],{provide:oE,multi:!0,useValue:A},[],i?.errorHandler?{provide:VM,useValue:i.errorHandler}:[],{provide:P1,useValue:i||{}},i?.useHash?R1A():N1A(),x1A(),i?.preloadingStrategy?HH(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?F1A(i):[],i?.bindToComponentInputs?zH().\u0275providers:[],i?.enableViewTransitions?OH().\u0275providers:[],_1A()]}}static forChild(A){return{ngModule:t,providers:[{provide:oE,multi:!0,useValue:A}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();function x1A(){return{provide:KH,useFactory:()=>{let t=h(jb),e=h(P1);return e.scrollOffset&&t.setOffset(e.scrollOffset),new M1A(e)}}}function R1A(){return{provide:Pb,useClass:LU}}function N1A(){return{provide:Pb,useClass:_U}}function F1A(t){return[t.initialNavigation==="disabled"?YH().\u0275providers:[],t.initialNavigation==="enabledBlocking"?JH().\u0275providers:[]]}var ZM=new yA("");function _1A(){return[{provide:ZM,useFactory:S1A},{provide:mU,multi:!0,useExisting:ZM}]}var K1A=["*"];var U1A=new yA("MAT_CARD_CONFIG"),aE=(()=>{class t{appearance;constructor(){let A=h(U1A,{optional:!0});this.appearance=A?.appearance||"raised"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(i,n){i&2&&ne("mat-mdc-card-outlined",n.appearance==="outlined")("mdc-card--outlined",n.appearance==="outlined")("mat-mdc-card-filled",n.appearance==="filled")("mdc-card--filled",n.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:K1A,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`.mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:"";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end} -`],encapsulation:2,changeDetection:0})}return t})();var jH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var E4=class{};function Q4(t){return t&&typeof t.connect=="function"&&!(t instanceof oU)}var rc=(function(t){return t[t.REPLACED=0]="REPLACED",t[t.INSERTED=1]="INSERTED",t[t.MOVED=2]="MOVED",t[t.REMOVED=3]="REMOVED",t})(rc||{}),q6=class{viewCacheSize=20;_viewCache=[];applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=()=>i(a,r,s);g=this._insertView(C,s,A,n(a)),l=g?rc.INSERTED:rc.REPLACED}else s==null?(this._detachAndCacheView(r,A),l=rc.REMOVED):(g=this._moveView(r,s,A,n(a)),l=rc.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){for(let e of this._viewCache)e.destroy();this._viewCache=[]}_insertView(e,A,i,n){let o=this._insertViewFromCache(A,i);if(o){o.context.$implicit=n;return}let a=e();return i.createEmbeddedView(a.templateRef,a.context,a.index)}_detachAndCacheView(e,A){let i=A.detach(e);this._maybeCacheView(i,A)}_moveView(e,A,i,n){let o=i.get(e);return i.move(o,A),o.context.$implicit=n,o}_maybeCacheView(e,A){if(this._viewCache.length{class t{_ngZone=h(Oe);_platform=h(Ii);_renderer=h(Kr).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new XA;_scrolledCount=0;scrollContainers=new Map;register(A){this.scrollContainers.has(A)||this.scrollContainers.set(A,A.elementScrolled().subscribe(()=>this._scrolled.next(A)))}deregister(A){let i=this.scrollContainers.get(A);i&&(i.unsubscribe(),this.scrollContainers.delete(A))}scrolled(A=Y1A){return this._platform.isBrowser?new $i(i=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let n=A>0?this._scrolled.pipe(m1(A)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{n.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):se()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((A,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(A,i){let n=this.getAncestorScrollContainers(A);return this.scrolled(i).pipe(Ze(o=>!o||n.indexOf(o)>-1))}getAncestorScrollContainers(A){let i=[];return this.scrollContainers.forEach((n,o)=>{this._scrollableContainsElement(o,A)&&i.push(o)}),i}_scrollableContainsElement(A,i){let n=xs(i),o=A.getElementRef().nativeElement;do if(n==o)return!0;while(n=n.parentElement);return!1}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),BC=(()=>{class t{elementRef=h(ge);scrollDispatcher=h(I0);ngZone=h(Oe);dir=h(Ro,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new XA;_renderer=h(_i);_cleanupScroll;_elementScrolled=new XA;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",A=>this._elementScrolled.next(A))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(A){let i=this.elementRef.nativeElement,n=this.dir&&this.dir.value=="rtl";A.left==null&&(A.left=n?A.end:A.start),A.right==null&&(A.right=n?A.start:A.end),A.bottom!=null&&(A.top=i.scrollHeight-i.clientHeight-A.bottom),n&&_B()!=Xl.NORMAL?(A.left!=null&&(A.right=i.scrollWidth-i.clientWidth-A.left),_B()==Xl.INVERTED?A.left=A.right:_B()==Xl.NEGATED&&(A.left=A.right?-A.right:A.right)):A.right!=null&&(A.left=i.scrollWidth-i.clientWidth-A.right),this._applyScrollToOptions(A)}_applyScrollToOptions(A){let i=this.elementRef.nativeElement;Up()?i.scrollTo(A):(A.top!=null&&(i.scrollTop=A.top),A.left!=null&&(i.scrollLeft=A.left))}measureScrollOffset(A){let i="left",n="right",o=this.elementRef.nativeElement;if(A=="top")return o.scrollTop;if(A=="bottom")return o.scrollHeight-o.clientHeight-o.scrollTop;let a=this.dir&&this.dir.value=="rtl";return A=="start"?A=a?n:i:A=="end"&&(A=a?i:n),a&&_B()==Xl.INVERTED?A==i?o.scrollWidth-o.clientWidth-o.scrollLeft:o.scrollLeft:a&&_B()==Xl.NEGATED?A==i?o.scrollLeft+o.scrollWidth-o.clientWidth:-o.scrollLeft:A==i?o.scrollLeft:o.scrollWidth-o.clientWidth-o.scrollLeft}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return t})(),T1A=20,Ls=(()=>{class t{_platform=h(Ii);_listeners;_viewportSize=null;_change=new XA;_document=h(Xt);constructor(){let A=h(Oe),i=h(Kr).createRenderer(null,null);A.runOutsideAngular(()=>{if(this._platform.isBrowser){let n=o=>this._change.next(o);this._listeners=[i.listen("window","resize",n),i.listen("window","orientationchange",n)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(A=>A()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let A={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),A}getViewportRect(){let A=this.getViewportScrollPosition(),{width:i,height:n}=this.getViewportSize();return{top:A.top,left:A.left,bottom:A.top+n,right:A.left+i,height:n,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let A=this._document,i=this._getWindow(),n=A.documentElement,o=n.getBoundingClientRect(),a=-o.top||A.body?.scrollTop||i.scrollY||n.scrollTop||0,r=-o.left||A.body?.scrollLeft||i.scrollX||n.scrollLeft||0;return{top:a,left:r}}change(A=T1A){return A>0?this._change.pipe(m1(A)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let A=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:A.innerWidth,height:A.innerHeight}:{width:0,height:0}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var qH=new yA("CDK_VIRTUAL_SCROLL_VIEWPORT");var C0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})(),V6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi,C0,Gi,C0]})}return t})();var h4=class{_attachedHost=null;attach(e){return this._attachedHost=e,e.attach(this)}detach(){let e=this._attachedHost;e!=null&&(this._attachedHost=null,e.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(e){this._attachedHost=e}},Jg=class extends h4{component;viewContainerRef;injector;projectableNodes;constructor(e,A,i,n){super(),this.component=e,this.viewContainerRef=A,this.injector=i,this.projectableNodes=n}},Is=class extends h4{templateRef;viewContainerRef;context;injector;constructor(e,A,i,n){super(),this.templateRef=e,this.viewContainerRef=A,this.context=i,this.injector=n}get origin(){return this.templateRef.elementRef}attach(e,A=this.context){return this.context=A,super.attach(e)}detach(){return this.context=void 0,super.detach()}},$M=class extends h4{element;constructor(e){super(),this.element=e instanceof ge?e.nativeElement:e}},L2=class{_attachedPortal=null;_disposeFn=null;_isDisposed=!1;hasAttached(){return!!this._attachedPortal}attach(e){if(e instanceof Jg)return this._attachedPortal=e,this.attachComponentPortal(e);if(e instanceof Is)return this._attachedPortal=e,this.attachTemplatePortal(e);if(this.attachDomPortal&&e instanceof $M)return this._attachedPortal=e,this.attachDomPortal(e)}attachDomPortal=null;detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(e){this._disposeFn=e}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}},u4=class extends L2{outletElement;_appRef;_defaultInjector;constructor(e,A,i){super(),this.outletElement=e,this._appRef=A,this._defaultInjector=i}attachComponentPortal(e){let A;if(e.viewContainerRef){let i=e.injector||e.viewContainerRef.injector,n=i.get(Hb,null,{optional:!0})||void 0;A=e.viewContainerRef.createComponent(e.component,{index:e.viewContainerRef.length,injector:i,ngModuleRef:n,projectableNodes:e.projectableNodes||void 0}),this.setDisposeFn(()=>A.destroy())}else{let i=this._appRef,n=e.injector||this._defaultInjector||ft.NULL,o=n.get(Gr,i.injector);A=Ip(e.component,{elementInjector:n,environmentInjector:o,projectableNodes:e.projectableNodes||void 0}),i.attachView(A.hostView),this.setDisposeFn(()=>{i.viewCount>0&&i.detachView(A.hostView),A.destroy()})}return this.outletElement.appendChild(this._getComponentRootNode(A)),this._attachedPortal=e,A}attachTemplatePortal(e){let A=e.viewContainerRef,i=A.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return i.rootNodes.forEach(n=>this.outletElement.appendChild(n)),i.detectChanges(),this.setDisposeFn(()=>{let n=A.indexOf(i);n!==-1&&A.remove(n)}),this._attachedPortal=e,i}attachDomPortal=e=>{let A=e.element;A.parentNode;let i=this.outletElement.ownerDocument.createComment("dom-portal");A.parentNode.insertBefore(i,A),this.outletElement.appendChild(A),this._attachedPortal=e,super.setDisposeFn(()=>{i.parentNode&&i.parentNode.replaceChild(A,i)})};dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(e){return e.hostView.rootNodes[0]}},VH=(()=>{class t extends Is{constructor(){let A=h(Tn),i=h(Oo);super(A,i)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[It]})}return t})(),Yg=(()=>{class t extends L2{_moduleRef=h(Hb,{optional:!0});_document=h(Xt);_viewContainerRef=h(Oo);_isInitialized=!1;_attachedRef=null;constructor(){super()}get portal(){return this._attachedPortal}set portal(A){this.hasAttached()&&!A&&!this._isInitialized||(this.hasAttached()&&super.detach(),A&&super.attach(A),this._attachedPortal=A||null)}attached=new $A;get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(A){A.setAttachedHost(this);let i=A.viewContainerRef!=null?A.viewContainerRef:this._viewContainerRef,n=i.createComponent(A.component,{index:i.length,injector:A.injector||i.injector,projectableNodes:A.projectableNodes||void 0,ngModuleRef:this._moduleRef||void 0});return i!==this._viewContainerRef&&this._getRootNode().appendChild(n.hostView.rootNodes[0]),super.setDisposeFn(()=>n.destroy()),this._attachedPortal=A,this._attachedRef=n,this.attached.emit(n),n}attachTemplatePortal(A){A.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(A.templateRef,A.context,{injector:A.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=A,this._attachedRef=i,this.attached.emit(i),i}attachDomPortal=A=>{let i=A.element;i.parentNode;let n=this._document.createComment("dom-portal");A.setAttachedHost(this),i.parentNode.insertBefore(n,i),this._getRootNode().appendChild(i),this._attachedPortal=A,super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(i,n)})};_getRootNode(){let A=this._viewContainerRef.element.nativeElement;return A.nodeType===A.ELEMENT_NODE?A:A.parentNode}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[0,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[It]})}return t})(),d0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var WH=Up();function gE(t){return new W6(t.get(Ls),t.get(Xt))}var W6=class{_viewportRuler;_previousHTMLStyles={top:"",left:""};_previousScrollPosition;_isEnabled=!1;_document;constructor(e,A){this._viewportRuler=e,this._document=A}attach(){}enable(){if(this._canBeEnabled()){let e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=Va(-this._previousScrollPosition.left),e.style.top=Va(-this._previousScrollPosition.top),e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let e=this._document.documentElement,A=this._document.body,i=e.style,n=A.style,o=i.scrollBehavior||"",a=n.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),WH&&(i.scrollBehavior=n.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),WH&&(i.scrollBehavior=o,n.scrollBehavior=a)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let A=this._document.documentElement,i=this._viewportRuler.getViewportSize();return A.scrollHeight>i.height||A.scrollWidth>i.width}};function iz(t,e){return new Z6(t.get(I0),t.get(Oe),t.get(Ls),e)}var Z6=class{_scrollDispatcher;_ngZone;_viewportRuler;_config;_scrollSubscription=null;_overlayRef;_initialScrollPosition;constructor(e,A,i,n){this._scrollDispatcher=e,this._ngZone=A,this._viewportRuler=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(this._scrollSubscription)return;let e=this._scrollDispatcher.scrolled(0).pipe(Ze(A=>!A||!this._overlayRef.overlayElement.contains(A.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(()=>{let A=this._viewportRuler.getViewportScrollPosition().top;Math.abs(A-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}_detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}};var f4=class{enable(){}disable(){}attach(){}};function Ak(t,e){return e.some(A=>{let i=t.bottomA.bottom,o=t.rightA.right;return i||n||o||a})}function ZH(t,e){return e.some(A=>{let i=t.topA.bottom,o=t.leftA.right;return i||n||o||a})}function EC(t,e){return new X6(t.get(I0),t.get(Ls),t.get(Oe),e)}var X6=class{_scrollDispatcher;_viewportRuler;_ngZone;_config;_scrollSubscription=null;_overlayRef;constructor(e,A,i,n){this._scrollDispatcher=e,this._viewportRuler=A,this._ngZone=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(!this._scrollSubscription){let e=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(e).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let A=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:n}=this._viewportRuler.getViewportSize();Ak(A,[{width:i,height:n,bottom:n,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},nz=(()=>{class t{_injector=h(ft);constructor(){}noop=()=>new f4;close=A=>iz(this._injector,A);block=()=>gE(this._injector);reposition=A=>EC(this._injector,A);static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),sc=class{positionStrategy;scrollStrategy=new f4;panelClass="";hasBackdrop=!1;backdropClass="cdk-overlay-dark-backdrop";disableAnimations;width;height;minWidth;minHeight;maxWidth;maxHeight;direction;disposeOnNavigation=!1;usePopover;constructor(e){if(e){let A=Object.keys(e);for(let i of A)e[i]!==void 0&&(this[i]=e[i])}}};var $6=class{connectionPair;scrollableViewProperties;constructor(e,A){this.connectionPair=e,this.scrollableViewProperties=A}};var oz=(()=>{class t{_attachedOverlays=[];_document=h(Xt);_isAttached=!1;constructor(){}ngOnDestroy(){this.detach()}add(A){this.remove(A),this._attachedOverlays.push(A)}remove(A){let i=this._attachedOverlays.indexOf(A);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),az=(()=>{class t extends oz{_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cleanupKeydown;add(A){super.add(A),this._isAttached||(this._ngZone.runOutsideAngular(()=>{this._cleanupKeydown=this._renderer.listen("body","keydown",this._keydownListener)}),this._isAttached=!0)}detach(){this._isAttached&&(this._cleanupKeydown?.(),this._isAttached=!1)}_keydownListener=A=>{let i=this._attachedOverlays;for(let n=i.length-1;n>-1;n--)if(i[n]._keydownEvents.observers.length>0){this._ngZone.run(()=>i[n]._keydownEvents.next(A));break}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),rz=(()=>{class t extends oz{_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cursorOriginalValue;_cursorStyleIsSet=!1;_pointerDownEventTarget=null;_cleanups;add(A){if(super.add(A),!this._isAttached){let i=this._document.body,n={capture:!0},o=this._renderer;this._cleanups=this._ngZone.runOutsideAngular(()=>[o.listen(i,"pointerdown",this._pointerDownListener,n),o.listen(i,"click",this._clickListener,n),o.listen(i,"auxclick",this._clickListener,n),o.listen(i,"contextmenu",this._clickListener,n)]),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){this._isAttached&&(this._cleanups?.forEach(A=>A()),this._cleanups=void 0,this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}_pointerDownListener=A=>{this._pointerDownEventTarget=Jr(A)};_clickListener=A=>{let i=Jr(A),n=A.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:i;this._pointerDownEventTarget=null;let o=this._attachedOverlays.slice();for(let a=o.length-1;a>-1;a--){let r=o[a];if(r._outsidePointerEvents.observers.length<1||!r.hasAttached())continue;if(XH(r.overlayElement,i)||XH(r.overlayElement,n))break;let s=r._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>s.next(A)):s.next(A)}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function XH(t,e){let A=typeof ShadowRoot<"u"&&ShadowRoot,i=e;for(;i;){if(i===t)return!0;i=A&&i instanceof ShadowRoot?i.host:i.parentNode}return!1}var sz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-overlay-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed}@layer cdk-overlay{.cdk-overlay-container{z-index:1000}}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute}@layer cdk-overlay{.cdk-global-overlay-wrapper{z-index:1000}}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%}@layer cdk-overlay{.cdk-overlay-pane{z-index:1000}}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation}@layer cdk-overlay{.cdk-overlay-backdrop{z-index:1000;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}@layer cdk-overlay{.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px}@layer cdk-overlay{.cdk-overlay-connected-position-bounding-box{z-index:1000}}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:auto;top:0;left:0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto} -`],encapsulation:2,changeDetection:0})}return t})(),t8=(()=>{class t{_platform=h(Ii);_containerElement;_document=h(Xt);_styleLoader=h(Xn);constructor(){}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._loadStyles(),this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let A="cdk-overlay-container";if(this._platform.isBrowser||f9()){let n=this._document.querySelectorAll(`.${A}[platform="server"], .${A}[platform="test"]`);for(let o=0;o{let e=this.element;clearTimeout(this._fallbackTimeout),this._cleanupTransitionEnd?.(),this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this.dispose),this._fallbackTimeout=setTimeout(this.dispose,500),e.style.pointerEvents="none",e.classList.remove("cdk-overlay-backdrop-showing")})}dispose=()=>{clearTimeout(this._fallbackTimeout),this._cleanupClick?.(),this._cleanupTransitionEnd?.(),this._cleanupClick=this._cleanupTransitionEnd=this._fallbackTimeout=void 0,this.element.remove()}};function tk(t){return t&&t.nodeType===1}var rE=class{_portalOutlet;_host;_pane;_config;_ngZone;_keyboardDispatcher;_document;_location;_outsideClickDispatcher;_animationsDisabled;_injector;_renderer;_backdropClick=new XA;_attachments=new XA;_detachments=new XA;_positionStrategy;_scrollStrategy;_locationChanges=Jn.EMPTY;_backdropRef=null;_detachContentMutationObserver;_detachContentAfterRenderRef;_disposed=!1;_previousHostParent;_keydownEvents=new XA;_outsidePointerEvents=new XA;_afterNextRenderRef;constructor(e,A,i,n,o,a,r,s,g,l=!1,C,I){this._portalOutlet=e,this._host=A,this._pane=i,this._config=n,this._ngZone=o,this._keyboardDispatcher=a,this._document=r,this._location=s,this._outsideClickDispatcher=g,this._animationsDisabled=l,this._injector=C,this._renderer=I,n.scrollStrategy&&(this._scrollStrategy=n.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=n.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropRef?.element||null}get hostElement(){return this._host}attach(e){if(this._disposed)return null;this._attachHost();let A=this._portalOutlet.attach(e);return this._positionStrategy?.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._afterNextRenderRef?.destroy(),this._afterNextRenderRef=Yn(()=>{this.hasAttached()&&this.updatePosition()},{injector:this._injector}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._completeDetachContent(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof A?.onDestroy=="function"&&A.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),A}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let e=this._portalOutlet.detach();return this._detachments.next(),this._completeDetachContent(),this._keyboardDispatcher.remove(this),this._detachContentWhenEmpty(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),e}dispose(){if(this._disposed)return;let e=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._backdropRef?.dispose(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._afterNextRenderRef?.destroy(),this._previousHostParent=this._pane=this._host=this._backdropRef=null,e&&this._detachments.next(),this._detachments.complete(),this._completeDetachContent(),this._disposed=!0}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))}updateSize(e){this._config=cA(cA({},this._config),e),this._updateElementSize()}setDirection(e){this._config=Ge(cA({},this._config),{direction:e}),this._updateElementDirection()}addPanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!0)}removePanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!1)}getDirection(){let e=this._config.direction;return e?typeof e=="string"?e:e.value:"ltr"}updateScrollStrategy(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let e=this._pane.style;e.width=Va(this._config.width),e.height=Va(this._config.height),e.minWidth=Va(this._config.minWidth),e.minHeight=Va(this._config.minHeight),e.maxWidth=Va(this._config.maxWidth),e.maxHeight=Va(this._config.maxHeight)}_togglePointerEvents(e){this._pane.style.pointerEvents=e?"":"none"}_attachHost(){if(!this._host.parentElement){let e=this._config.usePopover?this._positionStrategy?.getPopoverInsertionPoint?.():null;tk(e)?e.after(this._host):e?.type==="parent"?e.element.appendChild(this._host):this._previousHostParent?.appendChild(this._host)}if(this._config.usePopover)try{this._host.showPopover()}catch{}}_attachBackdrop(){let e="cdk-overlay-backdrop-showing";this._backdropRef?.dispose(),this._backdropRef=new ek(this._document,this._renderer,this._ngZone,A=>{this._backdropClick.next(A)}),this._animationsDisabled&&this._backdropRef.element.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropRef.element,this._config.backdropClass,!0),this._config.usePopover?this._host.prepend(this._backdropRef.element):this._host.parentElement.insertBefore(this._backdropRef.element,this._host),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this._backdropRef?.element.classList.add(e))}):this._backdropRef.element.classList.add(e)}_updateStackingOrder(){!this._config.usePopover&&this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){this._animationsDisabled?(this._backdropRef?.dispose(),this._backdropRef=null):this._backdropRef?.detach()}_toggleClasses(e,A,i){let n=xB(A||[]).filter(o=>!!o);n.length&&(i?e.classList.add(...n):e.classList.remove(...n))}_detachContentWhenEmpty(){let e=!1;try{this._detachContentAfterRenderRef=Yn(()=>{e=!0,this._detachContent()},{injector:this._injector})}catch(A){if(e)throw A;this._detachContent()}globalThis.MutationObserver&&this._pane&&(this._detachContentMutationObserver||=new globalThis.MutationObserver(()=>{this._detachContent()}),this._detachContentMutationObserver.observe(this._pane,{childList:!0}))}_detachContent(){(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),this._completeDetachContent())}_completeDetachContent(){this._detachContentAfterRenderRef?.destroy(),this._detachContentAfterRenderRef=void 0,this._detachContentMutationObserver?.disconnect()}_disposeScrollStrategy(){let e=this._scrollStrategy;e?.disable(),e?.detach?.()}},$H="cdk-overlay-connected-position-bounding-box",z1A=/([A-Za-z%]+)$/;function q1(t,e){return new A8(e,t.get(Ls),t.get(Xt),t.get(Ii),t.get(t8))}var A8=class{_viewportRuler;_document;_platform;_overlayContainer;_overlayRef;_isInitialRender=!1;_lastBoundingBoxSize={width:0,height:0};_isPushed=!1;_canPush=!0;_growAfterOpen=!1;_hasFlexibleDimensions=!0;_positionLocked=!1;_originRect;_overlayRect;_viewportRect;_containerRect;_viewportMargin=0;_scrollables=[];_preferredPositions=[];_origin;_pane;_isDisposed=!1;_boundingBox=null;_lastPosition=null;_lastScrollVisibility=null;_positionChanges=new XA;_resizeSubscription=Jn.EMPTY;_offsetX=0;_offsetY=0;_transformOriginSelector;_appliedPanelClasses=[];_previousPushAmount=null;_popoverLocation="global";positionChanges=this._positionChanges;get positions(){return this._preferredPositions}constructor(e,A,i,n,o){this._viewportRuler=A,this._document=i,this._platform=n,this._overlayContainer=o,this.setOrigin(e)}attach(e){this._overlayRef&&this._overlayRef,this._validatePositions(),e.hostElement.classList.add($H),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._getContainerRect();let e=this._originRect,A=this._overlayRect,i=this._viewportRect,n=this._containerRect,o=[],a;for(let r of this._preferredPositions){let s=this._getOriginPoint(e,n,r),g=this._getOverlayPoint(s,A,r),l=this._getOverlayFit(g,A,i,r);if(l.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(r,s);return}if(this._canFitWithFlexibleDimensions(l,g,i)){o.push({position:r,origin:s,overlayRect:A,boundingBoxRect:this._calculateBoundingBoxRect(s,r)});continue}(!a||a.overlayFit.visibleAreas&&(s=l,r=g)}this._isPushed=!1,this._applyPosition(r.position,r.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(a.position,a.originPoint);return}this._applyPosition(a.position,a.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&j1(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove($H),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let e=this._lastPosition;e?(this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._getContainerRect(),this._applyPosition(e,this._getOriginPoint(this._originRect,this._containerRect,e))):this.apply()}withScrollableContainers(e){return this._scrollables=e,this}withPositions(e){return this._preferredPositions=e,e.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(e){return this._viewportMargin=e,this}withFlexibleDimensions(e=!0){return this._hasFlexibleDimensions=e,this}withGrowAfterOpen(e=!0){return this._growAfterOpen=e,this}withPush(e=!0){return this._canPush=e,this}withLockedPosition(e=!0){return this._positionLocked=e,this}setOrigin(e){return this._origin=e,this}withDefaultOffsetX(e){return this._offsetX=e,this}withDefaultOffsetY(e){return this._offsetY=e,this}withTransformOriginOn(e){return this._transformOriginSelector=e,this}withPopoverLocation(e){return this._popoverLocation=e,this}getPopoverInsertionPoint(){return this._popoverLocation==="global"?null:this._popoverLocation!=="inline"?this._popoverLocation:this._origin instanceof ge?this._origin.nativeElement:tk(this._origin)?this._origin:null}_getOriginPoint(e,A,i){let n;if(i.originX=="center")n=e.left+e.width/2;else{let a=this._isRtl()?e.right:e.left,r=this._isRtl()?e.left:e.right;n=i.originX=="start"?a:r}A.left<0&&(n-=A.left);let o;return i.originY=="center"?o=e.top+e.height/2:o=i.originY=="top"?e.top:e.bottom,A.top<0&&(o-=A.top),{x:n,y:o}}_getOverlayPoint(e,A,i){let n;i.overlayX=="center"?n=-A.width/2:i.overlayX==="start"?n=this._isRtl()?-A.width:0:n=this._isRtl()?0:-A.width;let o;return i.overlayY=="center"?o=-A.height/2:o=i.overlayY=="top"?0:-A.height,{x:e.x+n,y:e.y+o}}_getOverlayFit(e,A,i,n){let o=ez(A),{x:a,y:r}=e,s=this._getOffset(n,"x"),g=this._getOffset(n,"y");s&&(a+=s),g&&(r+=g);let l=0-a,C=a+o.width-i.width,I=0-r,d=r+o.height-i.height,B=this._subtractOverflows(o.width,l,C),E=this._subtractOverflows(o.height,I,d),Q=B*E;return{visibleArea:Q,isCompletelyWithinViewport:o.width*o.height===Q,fitsInViewportVertically:E===o.height,fitsInViewportHorizontally:B==o.width}}_canFitWithFlexibleDimensions(e,A,i){if(this._hasFlexibleDimensions){let n=i.bottom-A.y,o=i.right-A.x,a=Az(this._overlayRef.getConfig().minHeight),r=Az(this._overlayRef.getConfig().minWidth),s=e.fitsInViewportVertically||a!=null&&a<=n,g=e.fitsInViewportHorizontally||r!=null&&r<=o;return s&&g}return!1}_pushOverlayOnScreen(e,A,i){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};let n=ez(A),o=this._viewportRect,a=Math.max(e.x+n.width-o.width,0),r=Math.max(e.y+n.height-o.height,0),s=Math.max(o.top-i.top-e.y,0),g=Math.max(o.left-i.left-e.x,0),l=0,C=0;return n.width<=o.width?l=g||-a:l=e.xB&&!this._isInitialRender&&!this._growAfterOpen&&(a=e.y-B/2)}let s=A.overlayX==="start"&&!n||A.overlayX==="end"&&n,g=A.overlayX==="end"&&!n||A.overlayX==="start"&&n,l,C,I;if(g)I=i.width-e.x+this._getViewportMarginStart()+this._getViewportMarginEnd(),l=e.x-this._getViewportMarginStart();else if(s)C=e.x,l=i.right-e.x-this._getViewportMarginEnd();else{let d=Math.min(i.right-e.x+i.left,e.x),B=this._lastBoundingBoxSize.width;l=d*2,C=e.x-d,l>B&&!this._isInitialRender&&!this._growAfterOpen&&(C=e.x-B/2)}return{top:a,left:C,bottom:r,right:I,width:l,height:o}}_setBoundingBoxStyles(e,A){let i=this._calculateBoundingBoxRect(e,A);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let n={};if(this._hasExactPosition())n.top=n.left="0",n.bottom=n.right="auto",n.maxHeight=n.maxWidth="",n.width=n.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,a=this._overlayRef.getConfig().maxWidth;n.width=Va(i.width),n.height=Va(i.height),n.top=Va(i.top)||"auto",n.bottom=Va(i.bottom)||"auto",n.left=Va(i.left)||"auto",n.right=Va(i.right)||"auto",A.overlayX==="center"?n.alignItems="center":n.alignItems=A.overlayX==="end"?"flex-end":"flex-start",A.overlayY==="center"?n.justifyContent="center":n.justifyContent=A.overlayY==="bottom"?"flex-end":"flex-start",o&&(n.maxHeight=Va(o)),a&&(n.maxWidth=Va(a))}this._lastBoundingBoxSize=i,j1(this._boundingBox.style,n)}_resetBoundingBoxStyles(){j1(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){j1(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(e,A){let i={},n=this._hasExactPosition(),o=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(n){let l=this._viewportRuler.getViewportScrollPosition();j1(i,this._getExactOverlayY(A,e,l)),j1(i,this._getExactOverlayX(A,e,l))}else i.position="static";let r="",s=this._getOffset(A,"x"),g=this._getOffset(A,"y");s&&(r+=`translateX(${s}px) `),g&&(r+=`translateY(${g}px)`),i.transform=r.trim(),a.maxHeight&&(n?i.maxHeight=Va(a.maxHeight):o&&(i.maxHeight="")),a.maxWidth&&(n?i.maxWidth=Va(a.maxWidth):o&&(i.maxWidth="")),j1(this._pane.style,i)}_getExactOverlayY(e,A,i){let n={top:"",bottom:""},o=this._getOverlayPoint(A,this._overlayRect,e);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),e.overlayY==="bottom"){let a=this._document.documentElement.clientHeight;n.bottom=`${a-(o.y+this._overlayRect.height)}px`}else n.top=Va(o.y);return n}_getExactOverlayX(e,A,i){let n={left:"",right:""},o=this._getOverlayPoint(A,this._overlayRect,e);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let a;if(this._isRtl()?a=e.overlayX==="end"?"left":"right":a=e.overlayX==="end"?"right":"left",a==="right"){let r=this._document.documentElement.clientWidth;n.right=`${r-(o.x+this._overlayRect.width)}px`}else n.left=Va(o.x);return n}_getScrollVisibility(){let e=this._getOriginRect(),A=this._pane.getBoundingClientRect(),i=this._scrollables.map(n=>n.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:ZH(e,i),isOriginOutsideView:Ak(e,i),isOverlayClipped:ZH(A,i),isOverlayOutsideView:Ak(A,i)}}_subtractOverflows(e,...A){return A.reduce((i,n)=>i-Math.max(n,0),e)}_getNarrowedViewportRect(){let e=this._document.documentElement.clientWidth,A=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._getViewportMarginTop(),left:i.left+this._getViewportMarginStart(),right:i.left+e-this._getViewportMarginEnd(),bottom:i.top+A-this._getViewportMarginBottom(),width:e-this._getViewportMarginStart()-this._getViewportMarginEnd(),height:A-this._getViewportMarginTop()-this._getViewportMarginBottom()}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(e,A){return A==="x"?e.offsetX==null?this._offsetX:e.offsetX:e.offsetY==null?this._offsetY:e.offsetY}_validatePositions(){}_addPanelClasses(e){this._pane&&xB(e).forEach(A=>{A!==""&&this._appliedPanelClasses.indexOf(A)===-1&&(this._appliedPanelClasses.push(A),this._pane.classList.add(A))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(e=>{this._pane.classList.remove(e)}),this._appliedPanelClasses=[])}_getViewportMarginStart(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.start??0}_getViewportMarginEnd(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.end??0}_getViewportMarginTop(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.top??0}_getViewportMarginBottom(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.bottom??0}_getOriginRect(){let e=this._origin;if(e instanceof ge)return e.nativeElement.getBoundingClientRect();if(e instanceof Element)return e.getBoundingClientRect();let A=e.width||0,i=e.height||0;return{top:e.y,bottom:e.y+i,left:e.x,right:e.x+A,height:i,width:A}}_getContainerRect(){let e=this._overlayRef.getConfig().usePopover&&this._popoverLocation!=="global",A=this._overlayContainer.getContainerElement();e&&(A.style.display="block");let i=A.getBoundingClientRect();return e&&(A.style.display=""),i}};function j1(t,e){for(let A in e)e.hasOwnProperty(A)&&(t[A]=e[A]);return t}function Az(t){if(typeof t!="number"&&t!=null){let[e,A]=t.split(z1A);return!A||A==="px"?parseFloat(e):null}return t||null}function ez(t){return{top:Math.floor(t.top),right:Math.floor(t.right),bottom:Math.floor(t.bottom),left:Math.floor(t.left),width:Math.floor(t.width),height:Math.floor(t.height)}}function O1A(t,e){return t===e?!0:t.isOriginClipped===e.isOriginClipped&&t.isOriginOutsideView===e.isOriginOutsideView&&t.isOverlayClipped===e.isOverlayClipped&&t.isOverlayOutsideView===e.isOverlayOutsideView}var tz="cdk-global-overlay-wrapper";function G2(t){return new e8}var e8=class{_overlayRef;_cssPosition="static";_topOffset="";_bottomOffset="";_alignItems="";_xPosition="";_xOffset="";_width="";_height="";_isDisposed=!1;attach(e){let A=e.getConfig();this._overlayRef=e,this._width&&!A.width&&e.updateSize({width:this._width}),this._height&&!A.height&&e.updateSize({height:this._height}),e.hostElement.classList.add(tz),this._isDisposed=!1}top(e=""){return this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this}left(e=""){return this._xOffset=e,this._xPosition="left",this}bottom(e=""){return this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this}right(e=""){return this._xOffset=e,this._xPosition="right",this}start(e=""){return this._xOffset=e,this._xPosition="start",this}end(e=""){return this._xOffset=e,this._xPosition="end",this}width(e=""){return this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this}height(e=""){return this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this}centerHorizontally(e=""){return this.left(e),this._xPosition="center",this}centerVertically(e=""){return this.top(e),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:n,height:o,maxWidth:a,maxHeight:r}=i,s=(n==="100%"||n==="100vw")&&(!a||a==="100%"||a==="100vw"),g=(o==="100%"||o==="100vh")&&(!r||r==="100%"||r==="100vh"),l=this._xPosition,C=this._xOffset,I=this._overlayRef.getConfig().direction==="rtl",d="",B="",E="";s?E="flex-start":l==="center"?(E="center",I?B=C:d=C):I?l==="left"||l==="end"?(E="flex-end",d=C):(l==="right"||l==="start")&&(E="flex-start",B=C):l==="left"||l==="start"?(E="flex-start",d=C):(l==="right"||l==="end")&&(E="flex-end",B=C),e.position=this._cssPosition,e.marginLeft=s?"0":d,e.marginTop=g?"0":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=s?"0":B,A.justifyContent=E,A.alignItems=g?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement,i=A.style;A.classList.remove(tz),i.justifyContent=i.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position="",this._overlayRef=null,this._isDisposed=!0}},gz=(()=>{class t{_injector=h(ft);constructor(){}global(){return G2()}flexibleConnectedTo(A){return q1(this._injector,A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),m4=new yA("OVERLAY_DEFAULT_CONFIG");function lc(t,e){t.get(Xn).load(sz);let A=t.get(t8),i=t.get(Xt),n=t.get(an),o=t.get(oC),a=t.get(Ro),r=t.get(_i,null,{optional:!0})||t.get(Kr).createRenderer(null,null),s=new sc(e),g=t.get(m4,null,{optional:!0})?.usePopover??!0;s.direction=s.direction||a.value,"showPopover"in i.body?s.usePopover=e?.usePopover??g:s.usePopover=!1;let l=i.createElement("div"),C=i.createElement("div");l.id=n.getId("cdk-overlay-"),l.classList.add("cdk-overlay-pane"),C.appendChild(l),s.usePopover&&(C.setAttribute("popover","manual"),C.classList.add("cdk-overlay-popover"));let I=s.usePopover?s.positionStrategy?.getPopoverInsertionPoint?.():null;return tk(I)?I.after(C):I?.type==="parent"?I.element.appendChild(C):A.getContainerElement().appendChild(C),new rE(new u4(l,o,t),C,l,s,t.get(Oe),t.get(az),i,t.get(o0),t.get(rz),e?.disableAnimations??t.get(p1,null,{optional:!0})==="NoopAnimations",t.get(Gr),r)}var i8=(()=>{class t{scrollStrategies=h(nz);_positionBuilder=h(gz);_injector=h(ft);constructor(){}create(A){return lc(this._injector,A)}position(){return this._positionBuilder}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),P1A=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],j1A=new yA("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}}),sE=(()=>{class t{elementRef=h(ge);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-overlay-origin",""],["","overlay-origin",""],["","cdkOverlayOrigin",""]],exportAs:["cdkOverlayOrigin"]})}return t})(),lz=new yA("cdk-connected-overlay-default-config"),n8=(()=>{class t{_dir=h(Ro,{optional:!0});_injector=h(ft);_overlayRef;_templatePortal;_backdropSubscription=Jn.EMPTY;_attachSubscription=Jn.EMPTY;_detachSubscription=Jn.EMPTY;_positionSubscription=Jn.EMPTY;_offsetX;_offsetY;_position;_scrollStrategyFactory=h(j1A);_ngZone=h(Oe);origin;positions;positionStrategy;get offsetX(){return this._offsetX}set offsetX(A){this._offsetX=A,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(A){this._offsetY=A,this._position&&this._updatePositionStrategy(this._position)}width;height;minWidth;minHeight;backdropClass;panelClass;viewportMargin=0;scrollStrategy;open=!1;disableClose=!1;transformOriginSelector;hasBackdrop=!1;lockPosition=!1;flexibleDimensions=!1;growAfterOpen=!1;push=!1;disposeOnNavigation=!1;usePopover;matchWidth=!1;set _config(A){typeof A!="string"&&this._assignConfig(A)}backdropClick=new $A;positionChange=new $A;attach=new $A;detach=new $A;overlayKeydown=new $A;overlayOutsideClick=new $A;constructor(){let A=h(Tn),i=h(Oo),n=h(lz,{optional:!0}),o=h(m4,{optional:!0});this.usePopover=o?.usePopover===!1?null:"global",this._templatePortal=new Is(A,i),this.scrollStrategy=this._scrollStrategyFactory(),n&&this._assignConfig(n)}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:"ltr"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef?.dispose()}ngOnChanges(A){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef?.updateSize({width:this._getWidth(),minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),A.origin&&this.open&&this._position.apply()),A.open&&(this.open?this.attachOverlay():this.detachOverlay())}_createOverlay(){(!this.positions||!this.positions.length)&&(this.positions=P1A);let A=this._overlayRef=lc(this._injector,this._buildConfig());this._attachSubscription=A.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=A.detachments().subscribe(()=>this.detach.emit()),A.keydownEvents().subscribe(i=>{this.overlayKeydown.next(i),i.keyCode===27&&!this.disableClose&&!pa(i)&&(i.preventDefault(),this.detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(i=>{let n=this._getOriginElement(),o=Jr(i);(!n||n!==o&&!n.contains(o))&&this.overlayOutsideClick.next(i)})}_buildConfig(){let A=this._position=this.positionStrategy||this._createPositionStrategy(),i=new sc({direction:this._dir||"ltr",positionStrategy:A,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop,disposeOnNavigation:this.disposeOnNavigation,usePopover:!!this.usePopover});return(this.height||this.height===0)&&(i.height=this.height),(this.minWidth||this.minWidth===0)&&(i.minWidth=this.minWidth),(this.minHeight||this.minHeight===0)&&(i.minHeight=this.minHeight),this.backdropClass&&(i.backdropClass=this.backdropClass),this.panelClass&&(i.panelClass=this.panelClass),i}_updatePositionStrategy(A){let i=this.positions.map(n=>({originX:n.originX,originY:n.originY,overlayX:n.overlayX,overlayY:n.overlayY,offsetX:n.offsetX||this.offsetX,offsetY:n.offsetY||this.offsetY,panelClass:n.panelClass||void 0}));return A.setOrigin(this._getOrigin()).withPositions(i).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector).withPopoverLocation(this.usePopover===null?"global":this.usePopover)}_createPositionStrategy(){let A=q1(this._injector,this._getOrigin());return this._updatePositionStrategy(A),A}_getOrigin(){return this.origin instanceof sE?this.origin.elementRef:this.origin}_getOriginElement(){return this.origin instanceof sE?this.origin.elementRef.nativeElement:this.origin instanceof ge?this.origin.nativeElement:typeof Element<"u"&&this.origin instanceof Element?this.origin:null}_getWidth(){return this.width?this.width:this.matchWidth?this._getOriginElement()?.getBoundingClientRect?.().width:void 0}attachOverlay(){this._overlayRef||this._createOverlay();let A=this._overlayRef;A.getConfig().hasBackdrop=this.hasBackdrop,A.updateSize({width:this._getWidth()}),A.hasAttached()||A.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=A.backdropClick().subscribe(i=>this.backdropClick.emit(i)):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(cU(()=>this.positionChange.observers.length>0)).subscribe(i=>{this._ngZone.run(()=>this.positionChange.emit(i)),this.positionChange.observers.length===0&&this._positionSubscription.unsubscribe()})),this.open=!0}detachOverlay(){this._overlayRef?.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.open=!1}_assignConfig(A){this.origin=A.origin??this.origin,this.positions=A.positions??this.positions,this.positionStrategy=A.positionStrategy??this.positionStrategy,this.offsetX=A.offsetX??this.offsetX,this.offsetY=A.offsetY??this.offsetY,this.width=A.width??this.width,this.height=A.height??this.height,this.minWidth=A.minWidth??this.minWidth,this.minHeight=A.minHeight??this.minHeight,this.backdropClass=A.backdropClass??this.backdropClass,this.panelClass=A.panelClass??this.panelClass,this.viewportMargin=A.viewportMargin??this.viewportMargin,this.scrollStrategy=A.scrollStrategy??this.scrollStrategy,this.disableClose=A.disableClose??this.disableClose,this.transformOriginSelector=A.transformOriginSelector??this.transformOriginSelector,this.hasBackdrop=A.hasBackdrop??this.hasBackdrop,this.lockPosition=A.lockPosition??this.lockPosition,this.flexibleDimensions=A.flexibleDimensions??this.flexibleDimensions,this.growAfterOpen=A.growAfterOpen??this.growAfterOpen,this.push=A.push??this.push,this.disposeOnNavigation=A.disposeOnNavigation??this.disposeOnNavigation,this.usePopover=A.usePopover??this.usePopover,this.matchWidth=A.matchWidth??this.matchWidth}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-connected-overlay",""],["","connected-overlay",""],["","cdkConnectedOverlay",""]],inputs:{origin:[0,"cdkConnectedOverlayOrigin","origin"],positions:[0,"cdkConnectedOverlayPositions","positions"],positionStrategy:[0,"cdkConnectedOverlayPositionStrategy","positionStrategy"],offsetX:[0,"cdkConnectedOverlayOffsetX","offsetX"],offsetY:[0,"cdkConnectedOverlayOffsetY","offsetY"],width:[0,"cdkConnectedOverlayWidth","width"],height:[0,"cdkConnectedOverlayHeight","height"],minWidth:[0,"cdkConnectedOverlayMinWidth","minWidth"],minHeight:[0,"cdkConnectedOverlayMinHeight","minHeight"],backdropClass:[0,"cdkConnectedOverlayBackdropClass","backdropClass"],panelClass:[0,"cdkConnectedOverlayPanelClass","panelClass"],viewportMargin:[0,"cdkConnectedOverlayViewportMargin","viewportMargin"],scrollStrategy:[0,"cdkConnectedOverlayScrollStrategy","scrollStrategy"],open:[0,"cdkConnectedOverlayOpen","open"],disableClose:[0,"cdkConnectedOverlayDisableClose","disableClose"],transformOriginSelector:[0,"cdkConnectedOverlayTransformOriginOn","transformOriginSelector"],hasBackdrop:[2,"cdkConnectedOverlayHasBackdrop","hasBackdrop",he],lockPosition:[2,"cdkConnectedOverlayLockPosition","lockPosition",he],flexibleDimensions:[2,"cdkConnectedOverlayFlexibleDimensions","flexibleDimensions",he],growAfterOpen:[2,"cdkConnectedOverlayGrowAfterOpen","growAfterOpen",he],push:[2,"cdkConnectedOverlayPush","push",he],disposeOnNavigation:[2,"cdkConnectedOverlayDisposeOnNavigation","disposeOnNavigation",he],usePopover:[0,"cdkConnectedOverlayUsePopover","usePopover"],matchWidth:[2,"cdkConnectedOverlayMatchWidth","matchWidth",he],_config:[0,"cdkConnectedOverlay","_config"]},outputs:{backdropClick:"backdropClick",positionChange:"positionChange",attach:"attach",detach:"detach",overlayKeydown:"overlayKeydown",overlayOutsideClick:"overlayOutsideClick"},exportAs:["cdkConnectedOverlay"],features:[ti]})}return t})(),Cl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[i8],imports:[Gi,d0,V6,V6]})}return t})();function q1A(t,e){}var K2=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;positionStrategy;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;closeOnNavigation=!0;closeOnDestroy=!0;closeOnOverlayDetachments=!0;disableAnimations=!1;providers;container;templateContext};var nk=(()=>{class t extends L2{_elementRef=h(ge);_focusTrapFactory=h(yu);_config;_interactivityChecker=h(NB);_ngZone=h(Oe);_focusMonitor=h(ar);_renderer=h(_i);_changeDetectorRef=h(Dt);_injector=h(ft);_platform=h(Ii);_document=h(Xt);_portalOutlet;_focusTrapped=new XA;_focusTrap=null;_elementFocusedBeforeDialogWasOpened=null;_closeInteractionType=null;_ariaLabelledByQueue=[];_isDestroyed=!1;constructor(){super(),this._config=h(K2,{optional:!0})||new K2,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(A){this._ariaLabelledByQueue.push(A),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(A){let i=this._ariaLabelledByQueue.indexOf(A);i>-1&&(this._ariaLabelledByQueue.splice(i,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._focusTrapped.complete(),this._isDestroyed=!0,this._restoreFocus()}attachComponentPortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._contentAttached(),i}attachTemplatePortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._contentAttached(),i}attachDomPortal=A=>{this._portalOutlet.hasAttached();let i=this._portalOutlet.attachDomPortal(A);return this._contentAttached(),i};_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_trapFocus(A){this._isDestroyed||Yn(()=>{let i=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||i.focus(A);break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElement(A)||this._focusDialogContainer(A);break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]',A);break;default:this._focusByCssSelector(this._config.autoFocus,A);break}this._focusTrapped.next()},{injector:this._injector})}_restoreFocus(){let A=this._config.restoreFocus,i=null;if(typeof A=="string"?i=this._document.querySelector(A):typeof A=="boolean"?i=A?this._elementFocusedBeforeDialogWasOpened:null:A&&(i=A),this._config.restoreFocus&&i&&typeof i.focus=="function"){let n=mu(),o=this._elementRef.nativeElement;(!n||n===this._document.body||n===o||o.contains(n))&&(this._focusMonitor?(this._focusMonitor.focusVia(i,this._closeInteractionType),this._closeInteractionType=null):i.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(A){this._elementRef.nativeElement.focus?.(A)}_containsFocus(){let A=this._elementRef.nativeElement,i=mu();return A===i||A.contains(i)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=mu()))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-dialog-container"]],viewQuery:function(i,n){if(i&1&&ai(Yg,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(i,n){i&2&&ie("id",n._config.id||null)("role",n._config.role)("aria-modal",n._config.ariaModal)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null)},features:[It],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(i,n){i&1&&pt(0,q1A,0,0,"ng-template",0)},dependencies:[Yg],styles:[`.cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit} -`],encapsulation:2})}return t})(),p4=class{overlayRef;config;componentInstance=null;componentRef=null;containerInstance;disableClose;closed=new XA;backdropClick;keydownEvents;outsidePointerEvents;id;_detachSubscription;constructor(e,A){this.overlayRef=e,this.config=A,this.disableClose=A.disableClose,this.backdropClick=e.backdropClick(),this.keydownEvents=e.keydownEvents(),this.outsidePointerEvents=e.outsidePointerEvents(),this.id=A.id,this.keydownEvents.subscribe(i=>{i.keyCode===27&&!this.disableClose&&!pa(i)&&(i.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{!this.disableClose&&this._canClose()?this.close(void 0,{focusOrigin:"mouse"}):this.containerInstance._recaptureFocus?.()}),this._detachSubscription=e.detachments().subscribe(()=>{A.closeOnOverlayDetachments!==!1&&this.close()})}close(e,A){if(this._canClose(e)){let i=this.closed;this.containerInstance._closeInteractionType=A?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),i.next(e),i.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(e="",A=""){return this.overlayRef.updateSize({width:e,height:A}),this}addPanelClass(e){return this.overlayRef.addPanelClass(e),this}removePanelClass(e){return this.overlayRef.removePanelClass(e),this}_canClose(e){let A=this.config;return!!this.containerInstance&&(!A.closePredicate||A.closePredicate(e,A,this.componentInstance))}},V1A=new yA("DialogScrollStrategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),W1A=new yA("DialogData"),Z1A=new yA("DefaultDialogConfig");function X1A(t){let e=jA(t),A=new $A;return{valueSignal:e,get value(){return e()},change:A,ngOnDestroy(){A.complete()}}}var ok=(()=>{class t{_injector=h(ft);_defaultOptions=h(Z1A,{optional:!0});_parentDialog=h(t,{optional:!0,skipSelf:!0});_overlayContainer=h(t8);_idGenerator=h(an);_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new XA;_afterOpenedAtThisLevel=new XA;_ariaHiddenElements=new Map;_scrollStrategy=h(V1A);get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}afterAllClosed=i0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){}open(A,i){let n=this._defaultOptions||new K2;i=cA(cA({},n),i),i.id=i.id||this._idGenerator.getId("cdk-dialog-"),i.id&&this.getDialogById(i.id);let o=this._getOverlayConfig(i),a=lc(this._injector,o),r=new p4(a,i),s=this._attachContainer(a,r,i);if(r.containerInstance=s,!this.openDialogs.length){let g=this._overlayContainer.getContainerElement();s._focusTrapped?s._focusTrapped.pipe(oo(1)).subscribe(()=>{this._hideNonDialogContentFromAssistiveTechnology(g)}):this._hideNonDialogContentFromAssistiveTechnology(g)}return this._attachDialogContent(A,r,s,i),this.openDialogs.push(r),r.closed.subscribe(()=>this._removeOpenDialog(r,!0)),this.afterOpened.next(r),r}closeAll(){ik(this.openDialogs,A=>A.close())}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){ik(this._openDialogsAtThisLevel,A=>{A.config.closeOnDestroy===!1&&this._removeOpenDialog(A,!1)}),ik(this._openDialogsAtThisLevel,A=>A.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(A){let i=new sc({positionStrategy:A.positionStrategy||G2().centerHorizontally().centerVertically(),scrollStrategy:A.scrollStrategy||this._scrollStrategy(),panelClass:A.panelClass,hasBackdrop:A.hasBackdrop,direction:A.direction,minWidth:A.minWidth,minHeight:A.minHeight,maxWidth:A.maxWidth,maxHeight:A.maxHeight,width:A.width,height:A.height,disposeOnNavigation:A.closeOnNavigation,disableAnimations:A.disableAnimations});return A.backdropClass&&(i.backdropClass=A.backdropClass),i}_attachContainer(A,i,n){let o=n.injector||n.viewContainerRef?.injector,a=[{provide:K2,useValue:n},{provide:p4,useValue:i},{provide:rE,useValue:A}],r;n.container?typeof n.container=="function"?r=n.container:(r=n.container.type,a.push(...n.container.providers(n))):r=nk;let s=new Jg(r,n.viewContainerRef,ft.create({parent:o||this._injector,providers:a}));return A.attach(s).instance}_attachDialogContent(A,i,n,o){if(A instanceof Tn){let a=this._createInjector(o,i,n,void 0),r={$implicit:o.data,dialogRef:i};o.templateContext&&(r=cA(cA({},r),typeof o.templateContext=="function"?o.templateContext():o.templateContext)),n.attachTemplatePortal(new Is(A,null,r,a))}else{let a=this._createInjector(o,i,n,this._injector),r=n.attachComponentPortal(new Jg(A,o.viewContainerRef,a));i.componentRef=r,i.componentInstance=r.instance}}_createInjector(A,i,n,o){let a=A.injector||A.viewContainerRef?.injector,r=[{provide:W1A,useValue:A.data},{provide:p4,useValue:i}];return A.providers&&(typeof A.providers=="function"?r.push(...A.providers(i,A,n)):r.push(...A.providers)),A.direction&&(!a||!a.get(Ro,null,{optional:!0}))&&r.push({provide:Ro,useValue:X1A(A.direction)}),ft.create({parent:a||o,providers:r})}_removeOpenDialog(A,i){let n=this.openDialogs.indexOf(A);n>-1&&(this.openDialogs.splice(n,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((o,a)=>{o?a.setAttribute("aria-hidden",o):a.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),i&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(A){if(A.parentElement){let i=A.parentElement.children;for(let n=i.length-1;n>-1;n--){let o=i[n];o!==A&&o.nodeName!=="SCRIPT"&&o.nodeName!=="STYLE"&&!o.hasAttribute("aria-live")&&!o.hasAttribute("popover")&&(this._ariaHiddenElements.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function ik(t,e){let A=t.length;for(;A--;)e(t[A])}var cz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[ok],imports:[Cl,d0,bu,d0]})}return t})();function $1A(t,e){}var a8=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;position;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;delayFocusTrap=!0;scrollStrategy;closeOnNavigation=!0;enterAnimationDuration;exitAnimationDuration},ak="mdc-dialog--open",Cz="mdc-dialog--opening",Iz="mdc-dialog--closing",AdA=150,edA=75,tdA=(()=>{class t extends nk{_animationStateChanged=new $A;_animationsEnabled=!ji();_actionSectionCount=0;_hostElement=this._elementRef.nativeElement;_enterAnimationDuration=this._animationsEnabled?Bz(this._config.enterAnimationDuration)??AdA:0;_exitAnimationDuration=this._animationsEnabled?Bz(this._config.exitAnimationDuration)??edA:0;_animationTimer=null;_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(dz,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(Cz,ak)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(ak),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(ak),this._animationsEnabled?(this._hostElement.style.setProperty(dz,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(Iz)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(A){this._actionSectionCount+=A,this._changeDetectorRef.markForCheck()}_finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)};_finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})};_clearAnimationClasses(){this._hostElement.classList.remove(Cz,Iz)}_waitForAnimationToComplete(A,i){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(i,A)}_requestAnimationFrame(A){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(A):A()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(A){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:A})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(A){let i=super.attachComponentPortal(A);return i.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),i}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(i,n){i&2&&(vo("id",n._config.id),ie("aria-modal",n._config.ariaModal)("role",n._config.role)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null),ne("_mat-animation-noopable",!n._animationsEnabled)("mat-mdc-dialog-container-with-actions",n._actionSectionCount>0))},features:[It],decls:3,vars:0,consts:[[1,"mat-mdc-dialog-inner-container","mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",0)(1,"div",1),pt(2,$1A,0,0,"ng-template",2),w()())},dependencies:[Yg],styles:[`.mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents} -`],encapsulation:2})}return t})(),dz="--mat-dialog-transition-duration";function Bz(t){return t==null?null:typeof t=="number"?t:t.endsWith("ms")?tg(t.substring(0,t.length-2)):t.endsWith("s")?tg(t.substring(0,t.length-1))*1e3:t==="0"?0:null}var o8=(function(t){return t[t.OPEN=0]="OPEN",t[t.CLOSING=1]="CLOSING",t[t.CLOSED=2]="CLOSED",t})(o8||{}),bo=class{_ref;_config;_containerInstance;componentInstance;componentRef=null;disableClose;id;_afterOpened=new ql(1);_beforeClosed=new ql(1);_result;_closeFallbackTimeout;_state=o8.OPEN;_closeInteractionType;constructor(e,A,i){this._ref=e,this._config=A,this._containerInstance=i,this.disableClose=A.disableClose,this.id=e.id,e.addPanelClass("mat-mdc-dialog-panel"),i._animationStateChanged.pipe(Ze(n=>n.state==="opened"),oo(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),i._animationStateChanged.pipe(Ze(n=>n.state==="closed"),oo(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),e.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),fi(this.backdropClick(),this.keydownEvents().pipe(Ze(n=>n.keyCode===27&&!this.disableClose&&!pa(n)))).subscribe(n=>{this.disableClose||(n.preventDefault(),Ez(this,n.type==="keydown"?"keyboard":"mouse"))})}close(e){let A=this._config.closePredicate;A&&!A(e,this._config,this.componentInstance)||(this._result=e,this._containerInstance._animationStateChanged.pipe(Ze(i=>i.state==="closing"),oo(1)).subscribe(i=>{this._beforeClosed.next(e),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),i.totalTime+100)}),this._state=o8.CLOSING,this._containerInstance._startExitAnimation())}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(e){let A=this._ref.config.positionStrategy;return e&&(e.left||e.right)?e.left?A.left(e.left):A.right(e.right):A.centerHorizontally(),e&&(e.top||e.bottom)?e.top?A.top(e.top):A.bottom(e.bottom):A.centerVertically(),this._ref.updatePosition(),this}updateSize(e="",A=""){return this._ref.updateSize(e,A),this}addPanelClass(e){return this._ref.addPanelClass(e),this}removePanelClass(e){return this._ref.removePanelClass(e),this}getState(){return this._state}_finishDialogClose(){this._state=o8.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function Ez(t,e,A){return t._closeInteractionType=e,t.close(A)}var Ca=new yA("MatMdcDialogData"),idA=new yA("mat-mdc-dialog-default-options"),ndA=new yA("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),Gs=(()=>{class t{_defaultOptions=h(idA,{optional:!0});_scrollStrategy=h(ndA);_parentDialog=h(t,{optional:!0,skipSelf:!0});_idGenerator=h(an);_injector=h(ft);_dialog=h(ok);_animationsDisabled=ji();_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new XA;_afterOpenedAtThisLevel=new XA;dialogConfigClass=a8;_dialogRefConstructor;_dialogContainerType;_dialogDataToken;get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}afterAllClosed=i0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){this._dialogRefConstructor=bo,this._dialogContainerType=tdA,this._dialogDataToken=Ca}open(A,i){let n;i=cA(cA({},this._defaultOptions||new a8),i),i.id=i.id||this._idGenerator.getId("mat-mdc-dialog-"),i.scrollStrategy=i.scrollStrategy||this._scrollStrategy();let o=this._dialog.open(A,Ge(cA({},i),{positionStrategy:G2(this._injector).centerHorizontally().centerVertically(),disableClose:!0,closePredicate:void 0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,disableAnimations:this._animationsDisabled||i.enterAnimationDuration?.toLocaleString()==="0"||i.exitAnimationDuration?.toString()==="0",container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:i},{provide:K2,useValue:i}]},templateContext:()=>({dialogRef:n}),providers:(a,r,s)=>(n=new this._dialogRefConstructor(a,i,s),n.updatePosition(i?.position),[{provide:this._dialogContainerType,useValue:s},{provide:this._dialogDataToken,useValue:r.data},{provide:this._dialogRefConstructor,useValue:n}])}));return n.componentRef=o.componentRef,n.componentInstance=o.componentInstance,this.openDialogs.push(n),this.afterOpened.next(n),n.afterClosed().subscribe(()=>{let a=this.openDialogs.indexOf(n);a>-1&&(this.openDialogs.splice(a,1),this.openDialogs.length||this._getAfterAllClosed().next())}),n}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(A){let i=A.length;for(;i--;)A[i].close()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),B0=(()=>{class t{dialogRef=h(bo,{optional:!0});_elementRef=h(ge);_dialog=h(Gs);ariaLabel;type="button";dialogResult;_matDialogClose;constructor(){}ngOnInit(){this.dialogRef||(this.dialogRef=hz(this._elementRef,this._dialog.openDialogs))}ngOnChanges(A){let i=A._matDialogClose||A._matDialogCloseResult;i&&(this.dialogResult=i.currentValue)}_onButtonClick(A){Ez(this.dialogRef,A.screenX===0&&A.screenY===0?"keyboard":"mouse",this.dialogResult)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-close",""],["","matDialogClose",""]],hostVars:2,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._onButtonClick(a)}),i&2&&ie("aria-label",n.ariaLabel||null)("type",n.type)},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],type:"type",dialogResult:[0,"mat-dialog-close","dialogResult"],_matDialogClose:[0,"matDialogClose","_matDialogClose"]},exportAs:["matDialogClose"],features:[ti]})}return t})(),Qz=(()=>{class t{_dialogRef=h(bo,{optional:!0});_elementRef=h(ge);_dialog=h(Gs);constructor(){}ngOnInit(){this._dialogRef||(this._dialogRef=hz(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(()=>{this._onAdd()})}ngOnDestroy(){this._dialogRef?._containerInstance&&Promise.resolve().then(()=>{this._onRemove()})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t})}return t})(),Da=(()=>{class t extends Qz{id=h(an).getId("mat-mdc-dialog-title-");_onAdd(){this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id)}_onRemove(){this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-title",""],["","matDialogTitle",""]],hostAttrs:[1,"mat-mdc-dialog-title","mdc-dialog__title"],hostVars:1,hostBindings:function(i,n){i&2&&vo("id",n.id)},inputs:{id:"id"},exportAs:["matDialogTitle"],features:[It]})}return t})(),rr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-content",""],["mat-dialog-content"],["","matDialogContent",""]],hostAttrs:[1,"mat-mdc-dialog-content","mdc-dialog__content"],features:[sp([BC])]})}return t})(),Ua=(()=>{class t extends Qz{align;_onAdd(){this._dialogRef._containerInstance?._updateActionSectionCount?.(1)}_onRemove(){this._dialogRef._containerInstance?._updateActionSectionCount?.(-1)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-actions",""],["mat-dialog-actions"],["","matDialogActions",""]],hostAttrs:[1,"mat-mdc-dialog-actions","mdc-dialog__actions"],hostVars:6,hostBindings:function(i,n){i&2&&ne("mat-mdc-dialog-actions-align-start",n.align==="start")("mat-mdc-dialog-actions-align-center",n.align==="center")("mat-mdc-dialog-actions-align-end",n.align==="end")},inputs:{align:"align"},features:[It]})}return t})();function hz(t,e){let A=t.nativeElement.parentElement;for(;A&&!A.classList.contains("mat-mdc-dialog-container");)A=A.parentElement;return A?e.find(i=>i.id===A.id):null}var uz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[Gs],imports:[cz,Cl,d0,Gi]})}return t})();var r8=(()=>{class t{get vertical(){return this._vertical}set vertical(A){this._vertical=yr(A)}_vertical=!1;get inset(){return this._inset}set inset(A){this._inset=yr(A)}_inset=!1;static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(i,n){i&2&&(ie("aria-orientation",n.vertical?"vertical":"horizontal"),ne("mat-divider-vertical",n.vertical)("mat-divider-horizontal",!n.vertical)("mat-divider-inset",n.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px} -`],encapsulation:2,changeDetection:0})}return t})(),fz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();function mz(t){return Error(`Unable to find icon with the name "${t}"`)}function adA(){return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.")}function pz(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${t}".`)}function wz(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${t}".`)}var hC=class{url;svgText;options;svgElement=null;constructor(e,A,i){this.url=e,this.svgText=A,this.options=i}},yz=(()=>{class t{_httpClient;_sanitizer;_errorHandler;_document;_svgIconConfigs=new Map;_iconSetConfigs=new Map;_cachedIconsByUrl=new Map;_inProgressUrlFetches=new Map;_fontCssClassesByAlias=new Map;_resolvers=[];_defaultFontSetClass=["material-icons","mat-ligature-font"];constructor(A,i,n,o){this._httpClient=A,this._sanitizer=i,this._errorHandler=o,this._document=n}addSvgIcon(A,i,n){return this.addSvgIconInNamespace("",A,i,n)}addSvgIconLiteral(A,i,n){return this.addSvgIconLiteralInNamespace("",A,i,n)}addSvgIconInNamespace(A,i,n,o){return this._addSvgIconConfig(A,i,new hC(n,null,o))}addSvgIconResolver(A){return this._resolvers.push(A),this}addSvgIconLiteralInNamespace(A,i,n,o){let a=this._sanitizer.sanitize(Wl.HTML,n);if(!a)throw wz(n);let r=k1(a);return this._addSvgIconConfig(A,i,new hC("",r,o))}addSvgIconSet(A,i){return this.addSvgIconSetInNamespace("",A,i)}addSvgIconSetLiteral(A,i){return this.addSvgIconSetLiteralInNamespace("",A,i)}addSvgIconSetInNamespace(A,i,n){return this._addSvgIconSetConfig(A,new hC(i,null,n))}addSvgIconSetLiteralInNamespace(A,i,n){let o=this._sanitizer.sanitize(Wl.HTML,i);if(!o)throw wz(i);let a=k1(o);return this._addSvgIconSetConfig(A,new hC("",a,n))}registerFontClassAlias(A,i=A){return this._fontCssClassesByAlias.set(A,i),this}classNameForFontAlias(A){return this._fontCssClassesByAlias.get(A)||A}setDefaultFontSetClass(...A){return this._defaultFontSetClass=A,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(A){let i=this._sanitizer.sanitize(Wl.RESOURCE_URL,A);if(!i)throw pz(A);let n=this._cachedIconsByUrl.get(i);return n?se(s8(n)):this._loadSvgIconFromConfig(new hC(A,null)).pipe(oi(o=>this._cachedIconsByUrl.set(i,o)),fe(o=>s8(o)))}getNamedSvgIcon(A,i=""){let n=Dz(i,A),o=this._svgIconConfigs.get(n);if(o)return this._getSvgFromConfig(o);if(o=this._getIconConfigFromResolvers(i,A),o)return this._svgIconConfigs.set(n,o),this._getSvgFromConfig(o);let a=this._iconSetConfigs.get(i);return a?this._getSvgFromIconSetConfigs(A,a):Zm(mz(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(A){return A.svgText?se(s8(this._svgElementFromConfig(A))):this._loadSvgIconFromConfig(A).pipe(fe(i=>s8(i)))}_getSvgFromIconSetConfigs(A,i){let n=this._extractIconWithNameFromAnySet(A,i);if(n)return se(n);let o=i.filter(a=>!a.svgText).map(a=>this._loadSvgIconSetFromConfig(a).pipe(ta(r=>{let g=`Loading icon set URL: ${this._sanitizer.sanitize(Wl.RESOURCE_URL,a.url)} failed: ${r.message}`;return this._errorHandler.handleError(new Error(g)),se(null)})));return $m(o).pipe(fe(()=>{let a=this._extractIconWithNameFromAnySet(A,i);if(!a)throw mz(A);return a}))}_extractIconWithNameFromAnySet(A,i){for(let n=i.length-1;n>=0;n--){let o=i[n];if(o.svgText&&o.svgText.toString().indexOf(A)>-1){let a=this._svgElementFromConfig(o),r=this._extractSvgIconFromSet(a,A,o.options);if(r)return r}}return null}_loadSvgIconFromConfig(A){return this._fetchIcon(A).pipe(oi(i=>A.svgText=i),fe(()=>this._svgElementFromConfig(A)))}_loadSvgIconSetFromConfig(A){return A.svgText?se(null):this._fetchIcon(A).pipe(oi(i=>A.svgText=i))}_extractSvgIconFromSet(A,i,n){let o=A.querySelector(`[id="${i}"]`);if(!o)return null;let a=o.cloneNode(!0);if(a.removeAttribute("id"),a.nodeName.toLowerCase()==="svg")return this._setSvgAttributes(a,n);if(a.nodeName.toLowerCase()==="symbol")return this._setSvgAttributes(this._toSvgElement(a),n);let r=this._svgElementFromString(k1(""));return r.appendChild(a),this._setSvgAttributes(r,n)}_svgElementFromString(A){let i=this._document.createElement("DIV");i.innerHTML=A;let n=i.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(A){let i=this._svgElementFromString(k1("")),n=A.attributes;for(let o=0;ok1(g)),ep(()=>this._inProgressUrlFetches.delete(a)),u2());return this._inProgressUrlFetches.set(a,s),s}_addSvgIconConfig(A,i,n){return this._svgIconConfigs.set(Dz(A,i),n),this}_addSvgIconSetConfig(A,i){let n=this._iconSetConfigs.get(A);return n?n.push(i):this._iconSetConfigs.set(A,[i]),this}_svgElementFromConfig(A){if(!A.svgElement){let i=this._svgElementFromString(A.svgText);this._setSvgAttributes(i,A.options),A.svgElement=i}return A.svgElement}_getIconConfigFromResolvers(A,i){for(let n=0;n{let t=h(Xt),e=t?t.location:null;return{getPathname:()=>e?e.pathname+e.search:""}}}),vz=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],cdA=vz.map(t=>`[${t}]`).join(", "),CdA=/^url\(['"]?#(.*?)['"]?\)$/,Fn=(()=>{class t{_elementRef=h(ge);_iconRegistry=h(yz);_location=h(ldA);_errorHandler=h(tp);_defaultColor;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;inline=!1;get svgIcon(){return this._svgIcon}set svgIcon(A){A!==this._svgIcon&&(A?this._updateSvgIcon(A):this._svgIcon&&this._clearSvgElement(),this._svgIcon=A)}_svgIcon;get fontSet(){return this._fontSet}set fontSet(A){let i=this._cleanupFontValue(A);i!==this._fontSet&&(this._fontSet=i,this._updateFontIconClasses())}_fontSet;get fontIcon(){return this._fontIcon}set fontIcon(A){let i=this._cleanupFontValue(A);i!==this._fontIcon&&(this._fontIcon=i,this._updateFontIconClasses())}_fontIcon;_previousFontSetClass=[];_previousFontIconClass;_svgName=null;_svgNamespace=null;_previousPath;_elementsWithExternalReferences;_currentIconFetch=Jn.EMPTY;constructor(){let A=h(new Ws("aria-hidden"),{optional:!0}),i=h(gdA,{optional:!0});i&&(i.color&&(this.color=this._defaultColor=i.color),i.fontSet&&(this.fontSet=i.fontSet)),A||this._elementRef.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(A){if(!A)return["",""];let i=A.split(":");switch(i.length){case 1:return["",i[0]];case 2:return i;default:throw Error(`Invalid icon name: "${A}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){let A=this._elementsWithExternalReferences;if(A&&A.size){let i=this._location.getPathname();i!==this._previousPath&&(this._previousPath=i,this._prependPathToReferences(i))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(A){this._clearSvgElement();let i=this._location.getPathname();this._previousPath=i,this._cacheChildrenWithExternalReferences(A),this._prependPathToReferences(i),this._elementRef.nativeElement.appendChild(A)}_clearSvgElement(){let A=this._elementRef.nativeElement,i=A.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();i--;){let n=A.childNodes[i];(n.nodeType!==1||n.nodeName.toLowerCase()==="svg")&&n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;let A=this._elementRef.nativeElement,i=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(n=>n.length>0);this._previousFontSetClass.forEach(n=>A.classList.remove(n)),i.forEach(n=>A.classList.add(n)),this._previousFontSetClass=i,this.fontIcon!==this._previousFontIconClass&&!i.includes("mat-ligature-font")&&(this._previousFontIconClass&&A.classList.remove(this._previousFontIconClass),this.fontIcon&&A.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(A){return typeof A=="string"?A.trim().split(" ")[0]:A}_prependPathToReferences(A){let i=this._elementsWithExternalReferences;i&&i.forEach((n,o)=>{n.forEach(a=>{o.setAttribute(a.name,`url('${A}#${a.value}')`)})})}_cacheChildrenWithExternalReferences(A){let i=A.querySelectorAll(cdA),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let o=0;o{let r=i[o],s=r.getAttribute(a),g=s?s.match(CdA):null;if(g){let l=n.get(r);l||(l=[],n.set(r,l)),l.push({name:a,value:g[1]})}})}_updateSvgIcon(A){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),A){let[i,n]=this._splitIconName(A);i&&(this._svgNamespace=i),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,i).pipe(oo(1)).subscribe(o=>this._setSvgElement(o),o=>{let a=`Error retrieving icon ${i}:${n}! ${o.message}`;this._errorHandler.handleError(new Error(a))})}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),Po(n.color?"mat-"+n.color:""),ne("mat-icon-inline",n.inline)("mat-icon-no-color",n.color!=="primary"&&n.color!=="accent"&&n.color!=="warn"))},inputs:{color:"color",inline:[2,"inline","inline",he],svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],ngContentSelectors:sdA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto} -`],encapsulation:2,changeDetection:0})}return t})(),Il=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var bz=(()=>{class t{_animationsDisabled=ji();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(i,n){i&2&&ne("mat-pseudo-checkbox-indeterminate",n.state==="indeterminate")("mat-pseudo-checkbox-checked",n.state==="checked")("mat-pseudo-checkbox-disabled",n.disabled)("mat-pseudo-checkbox-minimal",n.appearance==="minimal")("mat-pseudo-checkbox-full",n.appearance==="full")("_mat-animation-noopable",n._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px} -`],encapsulation:2,changeDetection:0})}return t})();var IdA=["text"],ddA=[[["mat-icon"]],"*"],BdA=["mat-icon","*"];function EdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",1),t&2){let A=v();$("disabled",A.disabled)("state",A.selected?"checked":"unchecked")}}function QdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",3),t&2){let A=v();$("disabled",A.disabled)}}function hdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),Se("(",A.group.label,")")}}var c8=new yA("MAT_OPTION_PARENT_COMPONENT"),C8=new yA("MatOptgroup");var l8=class{source;isUserInput;constructor(e,A=!1){this.source=e,this.isUserInput=A}},Hr=(()=>{class t{_element=h(ge);_changeDetectorRef=h(Dt);_parent=h(c8,{optional:!0});group=h(C8,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=h(an).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new $A;_text;_stateChanges=new XA;constructor(){let A=h(Xn);A.load(dr),A.load(M2),this._signalDisableRipple=!!this._parent&&w1(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(A=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}deselect(A=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}focus(A,i){let n=this._getHostElement();typeof n.focus=="function"&&n.focus(i)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!pa(A)&&(this._selectViaInteraction(),A.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let A=this.viewValue;A!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=A)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(A=!1){this.onSelectionChange.emit(new l8(this,A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-option"]],viewQuery:function(i,n){if(i&1&&ai(IdA,7),i&2){let o;ce(o=Ce())&&(n._text=o.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(i,n){i&1&&tA("click",function(){return n._selectViaInteraction()})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("aria-selected",n.selected)("aria-disabled",n.disabled.toString()),ne("mdc-list-item--selected",n.selected)("mat-mdc-option-multiple",n.multiple)("mat-mdc-option-active",n.active)("mdc-list-item--disabled",n.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",he]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:BdA,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(i,n){i&1&&(Yt(ddA),V(0,EdA,1,2,"mat-pseudo-checkbox",1),Ke(1),m(2,"span",2,0),Ke(4,1),w(),V(5,QdA,1,1,"mat-pseudo-checkbox",3),V(6,hdA,2,1,"span",4),GA(7,"div",5)),i&2&&(W(n.multiple?0:-1),p(5),W(!n.multiple&&n.selected&&!n.hideSingleSelectionIndicator?5:-1),p(),W(n.group&&n.group._inert?6:-1),p(),$("matRippleTrigger",n._getHostElement())("matRippleDisabled",n.disabled||n.disableRipple))},dependencies:[bz,ig],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""} -`],encapsulation:2,changeDetection:0})}return t})();function rk(t,e,A){if(A.length){let i=e.toArray(),n=A.toArray(),o=0;for(let a=0;aA+i?Math.max(0,t-i+e):A}var D4=(()=>{class t{_listeners=[];notify(A,i){for(let n of this._listeners)n(A,i)}listen(A){return this._listeners.push(A),()=>{this._listeners=this._listeners.filter(i=>A!==i)}}ngOnDestroy(){this._listeners=[]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var I8=class{applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=i(a,r,s);g=A.createEmbeddedView(C.templateRef,C.context,C.index),l=rc.INSERTED}else s==null?(A.remove(r),l=rc.REMOVED):(g=A.get(r),A.move(g,s),l=rc.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){}};var V1=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected=null;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new XA;constructor(e=!1,A,i=!0,n){this._multiple=e,this._emitChanges=i,this.compareWith=n,A&&A.length&&(e?A.forEach(o=>this._markSelected(o)):this._markSelected(A[0]),this._selectedToEmit.length=0)}select(...e){this._verifyValueAssignment(e),e.forEach(i=>this._markSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}deselect(...e){this._verifyValueAssignment(e),e.forEach(i=>this._unmarkSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}setSelection(...e){this._verifyValueAssignment(e);let A=this.selected,i=new Set(e.map(o=>this._getConcreteValue(o)));e.forEach(o=>this._markSelected(o)),A.filter(o=>!i.has(this._getConcreteValue(o,i))).forEach(o=>this._unmarkSelected(o));let n=this._hasQueuedChanges();return this._emitChangeEvent(),n}toggle(e){return this.isSelected(e)?this.deselect(e):this.select(e)}clear(e=!0){this._unmarkAll();let A=this._hasQueuedChanges();return e&&this._emitChangeEvent(),A}isSelected(e){return this._selection.has(this._getConcreteValue(e))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(e){this._multiple&&this.selected&&this._selected.sort(e)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(e){e=this._getConcreteValue(e),this.isSelected(e)||(this._multiple||this._unmarkAll(),this.isSelected(e)||this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))}_unmarkSelected(e){e=this._getConcreteValue(e),this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))}_unmarkAll(){this.isEmpty()||this._selection.forEach(e=>this._unmarkSelected(e))}_verifyValueAssignment(e){e.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(e,A){if(this.compareWith){A=A??this._selection;for(let i of A)if(this.compareWith(e,i))return i;return e}else return e}};var Mz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var gk=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Mz,Hr,Gi]})}return t})();var udA=["trigger"],fdA=["panel"],mdA=[[["mat-select-trigger"]],"*"],pdA=["mat-select-trigger","*"];function wdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),qA(A.placeholder)}}function DdA(t,e){t&1&&Ke(0)}function ydA(t,e){if(t&1&&(m(0,"span",11),K(1),w()),t&2){let A=v(2);p(),qA(A.triggerValue)}}function vdA(t,e){if(t&1&&(m(0,"span",5),V(1,DdA,1,0)(2,ydA,2,1,"span",11),w()),t&2){let A=v();p(),W(A.customTrigger?1:2)}}function bdA(t,e){if(t&1){let A=JA();m(0,"div",12,1),tA("keydown",function(n){Z(A);let o=v();return X(o._handleKeydown(n))}),Ke(2,1),w()}if(t&2){let A=v();Po(DU("mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open ",A._getPanelTheme())),ne("mat-select-panel-animations-enabled",!A._animationsDisabled),$("ngClass",A.panelClass),ie("id",A.id+"-panel")("aria-multiselectable",A.multiple)("aria-label",A.ariaLabel||null)("aria-labelledby",A._getPanelAriaLabelledby())}}var MdA=new yA("mat-select-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}}),kdA=new yA("MAT_SELECT_CONFIG"),SdA=new yA("MatSelectTrigger"),lk=class{source;value;constructor(e,A){this.source=e,this.value=A}},Bl=(()=>{class t{_viewportRuler=h(Ls);_changeDetectorRef=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_idGenerator=h(an);_renderer=h(_i);_parentFormField=h(Uu,{optional:!0});ngControl=h(eg,{self:!0,optional:!0});_liveAnnouncer=h(vu);_defaultOptions=h(kdA,{optional:!0});_animationsDisabled=ji();_popoverLocation;_initialized=new XA;_cleanupDetach;options;optionGroups;customTrigger;_positions=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"}];_scrollOptionIntoView(A){let i=this.options.toArray()[A];if(i){let n=this.panel.nativeElement,o=rk(A,this.options,this.optionGroups),a=i._getHostElement();A===0&&o===1?n.scrollTop=0:n.scrollTop=sk(a.offsetTop,a.offsetHeight,n.scrollTop,n.offsetHeight)}}_positioningSettled(){this._scrollOptionIntoView(this._keyManager.activeItemIndex||0)}_getChangeEvent(A){return new lk(this,A)}_scrollStrategyFactory=h(MdA);_panelOpen=!1;_compareWith=(A,i)=>A===i;_uid=this._idGenerator.getId("mat-select-");_triggerAriaLabelledBy=null;_previousControl;_destroy=new XA;_errorStateTracker;stateChanges=new XA;disableAutomaticLabeling=!0;userAriaDescribedBy;_selectionModel;_keyManager;_preferredOverlayOrigin;_overlayWidth;_onChange=()=>{};_onTouched=()=>{};_valueId=this._idGenerator.getId("mat-select-value-");_scrollStrategy;_overlayPanelClass=this._defaultOptions?.overlayPanelClass||"";get focused(){return this._focused||this._panelOpen}_focused=!1;controlType="mat-select";trigger;panel;_overlayDir;panelClass;disabled=!1;get disableRipple(){return this._disableRipple()}set disableRipple(A){this._disableRipple.set(A)}_disableRipple=jA(!1);tabIndex=0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncParentProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get placeholder(){return this._placeholder}set placeholder(A){this._placeholder=A,this.stateChanges.next()}_placeholder;get required(){return this._required??this.ngControl?.control?.hasValidator(Ag.required)??!1}set required(A){this._required=A,this.stateChanges.next()}_required;get multiple(){return this._multiple}set multiple(A){this._selectionModel,this._multiple=A}_multiple=!1;disableOptionCentering=this._defaultOptions?.disableOptionCentering??!1;get compareWith(){return this._compareWith}set compareWith(A){this._compareWith=A,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(A){this._assignValue(A)&&this._onChange(A)}_value;ariaLabel="";ariaLabelledby;get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}typeaheadDebounceInterval;sortComparator;get id(){return this._id}set id(A){this._id=A||this._uid,this.stateChanges.next()}_id;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}panelWidth=this._defaultOptions&&typeof this._defaultOptions.panelWidth<"u"?this._defaultOptions.panelWidth:"auto";canSelectNullableOptions=this._defaultOptions?.canSelectNullableOptions??!1;optionSelectionChanges=i0(()=>{let A=this.options;return A?A.changes.pipe(cn(A),Si(()=>fi(...A.map(i=>i.onSelectionChange)))):this._initialized.pipe(Si(()=>this.optionSelectionChanges))});openedChange=new $A;_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));selectionChange=new $A;valueChange=new $A;constructor(){let A=h(UB),i=h(SB,{optional:!0}),n=h(v2,{optional:!0}),o=h(new Ws("tabindex"),{optional:!0}),a=h(m4,{optional:!0});this.ngControl&&(this.ngControl.valueAccessor=this),this._defaultOptions?.typeaheadDebounceInterval!=null&&(this.typeaheadDebounceInterval=this._defaultOptions.typeaheadDebounceInterval),this._errorStateTracker=new JB(A,this.ngControl,n,i,this.stateChanges),this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=o==null?0:parseInt(o)||0,this._popoverLocation=a?.usePopover===!1?null:"inline",this.id=this.id}ngOnInit(){this._selectionModel=new V1(this.multiple),this.stateChanges.next(),this._viewportRuler.change().pipe(Bt(this._destroy)).subscribe(()=>{this.panelOpen&&(this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._changeDetectorRef.detectChanges())})}ngAfterContentInit(){this._initialized.next(),this._initialized.complete(),this._initKeyManager(),this._selectionModel.changed.pipe(Bt(this._destroy)).subscribe(A=>{A.added.forEach(i=>i.select()),A.removed.forEach(i=>i.deselect())}),this.options.changes.pipe(cn(null),Bt(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){let A=this._getTriggerAriaLabelledby(),i=this.ngControl;if(A!==this._triggerAriaLabelledBy){let n=this._elementRef.nativeElement;this._triggerAriaLabelledBy=A,A?n.setAttribute("aria-labelledby",A):n.removeAttribute("aria-labelledby")}i&&(this._previousControl!==i.control&&(this._previousControl!==void 0&&i.disabled!==null&&i.disabled!==this.disabled&&(this.disabled=i.disabled),this._previousControl=i.control),this.updateErrorState())}ngOnChanges(A){(A.disabled||A.userAriaDescribedBy)&&this.stateChanges.next(),A.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval)}ngOnDestroy(){this._cleanupDetach?.(),this._keyManager?.destroy(),this._destroy.next(),this._destroy.complete(),this.stateChanges.complete(),this._clearFromModal()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._parentFormField&&(this._preferredOverlayOrigin=this._parentFormField.getConnectedOverlayOrigin()),this._cleanupDetach?.(),this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._applyModalPanelOwnership(),this._panelOpen=!0,this._overlayDir.positionChange.pipe(oo(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()}),this._overlayDir.attachOverlay(),this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!0)))}_trackedModal=null;_applyModalPanelOwnership(){let A=this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!A)return;let i=`${this.id}-panel`;this._trackedModal&&Gp(this._trackedModal,"aria-owns",i),u9(A,"aria-owns",i),this._trackedModal=A}_clearFromModal(){if(!this._trackedModal)return;let A=`${this.id}-panel`;Gp(this._trackedModal,"aria-owns",A),this._trackedModal=null}close(){this._panelOpen&&(this._panelOpen=!1,this._exitAndDetach(),this._keyManager.withHorizontalOrientation(this._isRtl()?"rtl":"ltr"),this._changeDetectorRef.markForCheck(),this._onTouched(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!1)))}_exitAndDetach(){if(this._animationsDisabled||!this.panel){this._detachOverlay();return}this._cleanupDetach?.(),this._cleanupDetach=()=>{i(),clearTimeout(n),this._cleanupDetach=void 0};let A=this.panel.nativeElement,i=this._renderer.listen(A,"animationend",o=>{o.animationName==="_mat-select-exit"&&(this._cleanupDetach?.(),this._detachOverlay())}),n=setTimeout(()=>{this._cleanupDetach?.(),this._detachOverlay()},200);A.classList.add("mat-select-panel-exit")}_detachOverlay(){this._overlayDir.detachOverlay(),this._changeDetectorRef.markForCheck()}writeValue(A){this._assignValue(A)}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel?.selected||[]:this._selectionModel?.selected[0]}get triggerValue(){if(this.empty)return"";if(this._multiple){let A=this._selectionModel.selected.map(i=>i.viewValue);return this._isRtl()&&A.reverse(),A.join(", ")}return this._selectionModel.selected[0].viewValue}updateErrorState(){this._errorStateTracker.updateErrorState()}_isRtl(){return this._dir?this._dir.value==="rtl":!1}_handleKeydown(A){this.disabled||(this.panelOpen?this._handleOpenKeydown(A):this._handleClosedKeydown(A))}_handleClosedKeydown(A){let i=A.keyCode,n=i===40||i===38||i===37||i===39,o=i===13||i===32,a=this._keyManager;if(!a.isTyping()&&o&&!pa(A)||(this.multiple||A.altKey)&&n)A.preventDefault(),this.open();else if(!this.multiple){let r=this.selected;a.onKeydown(A);let s=this.selected;s&&r!==s&&this._liveAnnouncer.announce(s.viewValue,1e4)}}_handleOpenKeydown(A){let i=this._keyManager,n=A.keyCode,o=n===40||n===38,a=i.isTyping();if(o&&A.altKey)A.preventDefault(),this.close();else if(!a&&(n===13||n===32)&&i.activeItem&&!pa(A))A.preventDefault(),i.activeItem._selectViaInteraction();else if(!a&&this._multiple&&n===65&&A.ctrlKey){A.preventDefault();let r=this.options.some(s=>!s.disabled&&!s.selected);this.options.forEach(s=>{s.disabled||(r?s.select():s.deselect())})}else{let r=i.activeItemIndex;i.onKeydown(A),this._multiple&&o&&A.shiftKey&&i.activeItem&&i.activeItemIndex!==r&&i.activeItem._selectViaInteraction()}}_handleOverlayKeydown(A){A.keyCode===27&&!pa(A)&&(A.preventDefault(),this.close())}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this._keyManager?.cancelTypeahead(),!this.disabled&&!this.panelOpen&&(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}_getPanelTheme(){return this._parentFormField?`mat-${this._parentFormField.color}`:""}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this.ngControl&&(this._value=this.ngControl.value),this._setSelectionByValue(this._value),this.stateChanges.next()})}_setSelectionByValue(A){if(this.options.forEach(i=>i.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&A)Array.isArray(A),A.forEach(i=>this._selectOptionByValue(i)),this._sortValues();else{let i=this._selectOptionByValue(A);i?this._keyManager.updateActiveItem(i):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectOptionByValue(A){let i=this.options.find(n=>{if(this._selectionModel.isSelected(n))return!1;try{return(n.value!=null||this.canSelectNullableOptions)&&this._compareWith(n.value,A)}catch{return!1}});return i&&this._selectionModel.select(i),i}_assignValue(A){return A!==this._value||this._multiple&&Array.isArray(A)?(this.options&&this._setSelectionByValue(A),this._value=A,!0):!1}_skipPredicate=A=>this.panelOpen?!1:A.disabled;_getOverlayWidth(A){return this.panelWidth==="auto"?(A instanceof sE?A.elementRef:A||this._elementRef).nativeElement.getBoundingClientRect().width:this.panelWidth===null?"":this.panelWidth}_syncParentProperties(){if(this.options)for(let A of this.options)A._changeDetectorRef.markForCheck()}_initKeyManager(){this._keyManager=new Ru(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?"rtl":"ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate),this._keyManager.tabOut.subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):!this._panelOpen&&!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){let A=fi(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(Bt(A)).subscribe(i=>{this._onSelect(i.source,i.isUserInput),i.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),fi(...this.options.map(i=>i._stateChanges)).pipe(Bt(A)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this.stateChanges.next()})}_onSelect(A,i){let n=this._selectionModel.isSelected(A);!this.canSelectNullableOptions&&A.value==null&&!this._multiple?(A.deselect(),this._selectionModel.clear(),this.value!=null&&this._propagateChanges(A.value)):(n!==A.selected&&(A.selected?this._selectionModel.select(A):this._selectionModel.deselect(A)),i&&this._keyManager.setActiveItem(A),this.multiple&&(this._sortValues(),i&&this.focus())),n!==this._selectionModel.isSelected(A)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){let A=this.options.toArray();this._selectionModel.sort((i,n)=>this.sortComparator?this.sortComparator(i,n,A):A.indexOf(i)-A.indexOf(n)),this.stateChanges.next()}}_propagateChanges(A){let i;this.multiple?i=this.selected.map(n=>n.value):i=this.selected?this.selected.value:A,this._value=i,this.valueChange.emit(i),this._onChange(i),this.selectionChange.emit(this._getChangeEvent(i)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){if(this._keyManager)if(this.empty){let A=-1;for(let i=0;i0&&!!this._overlayDir}focus(A){this._elementRef.nativeElement.focus(A)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||null,i=A?A+" ":"";return this.ariaLabelledby?i+this.ariaLabelledby:A}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||"";return this.ariaLabelledby&&(A+=" "+this.ariaLabelledby),A||(A=this._valueId),A}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(A){let i=Jr(A);i&&(i.tagName==="MAT-OPTION"||i.classList.contains("cdk-overlay-backdrop")||i.closest(".mat-mdc-select-panel"))||(this.focus(),this.open())}get shouldLabelFloat(){return this.panelOpen||!this.empty||this.focused&&!!this.placeholder}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-select"]],contentQueries:function(i,n,o){if(i&1&&fa(o,SdA,5)(o,Hr,5)(o,C8,5),i&2){let a;ce(a=Ce())&&(n.customTrigger=a.first),ce(a=Ce())&&(n.options=a),ce(a=Ce())&&(n.optionGroups=a)}},viewQuery:function(i,n){if(i&1&&ai(udA,5)(fdA,5)(n8,5),i&2){let o;ce(o=Ce())&&(n.trigger=o.first),ce(o=Ce())&&(n.panel=o.first),ce(o=Ce())&&(n._overlayDir=o.first)}},hostAttrs:["role","combobox","aria-haspopup","listbox",1,"mat-mdc-select"],hostVars:21,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)})("focus",function(){return n._onFocus()})("blur",function(){return n._onBlur()}),i&2&&(ie("id",n.id)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n.panelOpen?n.id+"-panel":null)("aria-expanded",n.panelOpen)("aria-label",n.ariaLabel||null)("aria-required",n.required.toString())("aria-disabled",n.disabled.toString())("aria-invalid",n.errorState)("aria-activedescendant",n._getAriaActiveDescendant()),ne("mat-mdc-select-disabled",n.disabled)("mat-mdc-select-invalid",n.errorState)("mat-mdc-select-required",n.required)("mat-mdc-select-empty",n.empty)("mat-mdc-select-multiple",n.multiple)("mat-select-open",n.panelOpen))},inputs:{userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],panelClass:"panelClass",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],placeholder:"placeholder",required:[2,"required","required",he],multiple:[2,"multiple","multiple",he],disableOptionCentering:[2,"disableOptionCentering","disableOptionCentering",he],compareWith:"compareWith",value:"value",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],errorStateMatcher:"errorStateMatcher",typeaheadDebounceInterval:[2,"typeaheadDebounceInterval","typeaheadDebounceInterval",en],sortComparator:"sortComparator",id:"id",panelWidth:"panelWidth",canSelectNullableOptions:[2,"canSelectNullableOptions","canSelectNullableOptions",he]},outputs:{openedChange:"openedChange",_openedStream:"opened",_closedStream:"closed",selectionChange:"selectionChange",valueChange:"valueChange"},exportAs:["matSelect"],features:[dt([{provide:Ku,useExisting:t},{provide:c8,useExisting:t}]),ti],ngContentSelectors:pdA,decls:11,vars:10,consts:[["fallbackOverlayOrigin","cdkOverlayOrigin","trigger",""],["panel",""],["cdk-overlay-origin","",1,"mat-mdc-select-trigger",3,"click"],[1,"mat-mdc-select-value"],[1,"mat-mdc-select-placeholder","mat-mdc-select-min-line"],[1,"mat-mdc-select-value-text"],[1,"mat-mdc-select-arrow-wrapper"],[1,"mat-mdc-select-arrow"],["viewBox","0 0 24 24","width","24px","height","24px","focusable","false","aria-hidden","true"],["d","M7 10l5 5 5-5z"],["cdk-connected-overlay","","cdkConnectedOverlayLockPosition","","cdkConnectedOverlayHasBackdrop","","cdkConnectedOverlayBackdropClass","cdk-overlay-transparent-backdrop",3,"detach","backdropClick","overlayKeydown","cdkConnectedOverlayDisableClose","cdkConnectedOverlayPanelClass","cdkConnectedOverlayScrollStrategy","cdkConnectedOverlayOrigin","cdkConnectedOverlayPositions","cdkConnectedOverlayWidth","cdkConnectedOverlayFlexibleDimensions","cdkConnectedOverlayUsePopover"],[1,"mat-mdc-select-min-line"],["role","listbox","tabindex","-1",3,"keydown","ngClass"]],template:function(i,n){if(i&1){let o=JA();Yt(mdA),m(0,"div",2,0),tA("click",function(){return Z(o),X(n.open())}),m(3,"div",3),V(4,wdA,2,1,"span",4)(5,vdA,3,1,"span",5),w(),m(6,"div",6)(7,"div",7),Qt(),m(8,"svg",8),GA(9,"path",9),w()()()(),pt(10,bdA,3,10,"ng-template",10),tA("detach",function(){return Z(o),X(n.close())})("backdropClick",function(){return Z(o),X(n.close())})("overlayKeydown",function(r){return Z(o),X(n._handleOverlayKeydown(r))})}if(i&2){let o=An(1);p(3),ie("id",n._valueId),p(),W(n.empty?4:5),p(6),$("cdkConnectedOverlayDisableClose",!0)("cdkConnectedOverlayPanelClass",n._overlayPanelClass)("cdkConnectedOverlayScrollStrategy",n._scrollStrategy)("cdkConnectedOverlayOrigin",n._preferredOverlayOrigin||o)("cdkConnectedOverlayPositions",n._positions)("cdkConnectedOverlayWidth",n._overlayWidth)("cdkConnectedOverlayFlexibleDimensions",!0)("cdkConnectedOverlayUsePopover",n._popoverLocation)}},dependencies:[sE,n8,gs],styles:[`@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-select-open .mat-mdc-select-arrow{transform:rotate(180deg)}.mat-form-field-animations-enabled .mat-mdc-select-arrow{transition:transform 80ms linear}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))} -`],encapsulation:2,changeDetection:0})}return t})();var ck=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Cl,gk,Gi,C0,Yr,gk]})}return t})();var RdA=["tooltip"],NdA=20;var FdA=new yA("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t,{scrollThrottle:NdA})}}),_dA=new yA("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var kz="tooltip-panel",Sz=b2({passive:!0}),LdA=8,GdA=8,KdA=24,UdA=200,xa=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_platform=h(Ii);_ariaDescriber=h(PJ);_focusMonitor=h(ar);_dir=h(Ro);_injector=h(ft);_viewContainerRef=h(Oo);_mediaMatcher=h(RB);_animationsDisabled=ji();_defaultOptions=h(_dA,{optional:!0});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=xz;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=!1;_dirSubscribed=!1;get position(){return this._position}set position(A){A!==this._position&&(this._position=A,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(A){this._positionAtOrigin=yr(A),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(A){let i=yr(A);this._disabled!==i&&(this._disabled=i,i?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(A){this._showDelay=tg(A)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(A){this._hideDelay=tg(A),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(A){let i=this._message;this._message=A!=null?String(A).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(i)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(A){this._tooltipClass=A,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_passiveListeners=[];_touchstartTimeout=null;_destroyed=new XA;_isDestroyed=!1;constructor(){let A=this._defaultOptions;A&&(this._showDelay=A.showDelay,this._hideDelay=A.hideDelay,A.position&&(this.position=A.position),A.positionAtOrigin&&(this.positionAtOrigin=A.positionAtOrigin),A.touchGestures&&(this.touchGestures=A.touchGestures),A.tooltipClass&&(this.tooltipClass=A.tooltipClass)),this._viewportMargin=LdA}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Bt(this._destroyed)).subscribe(A=>{A?A==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let A=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([i,n])=>{A.removeEventListener(i,n,Sz)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(A,this.message,"tooltip"),this._focusMonitor.stopMonitoring(A)}show(A=this.showDelay,i){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let n=this._createOverlay(i);this._detach(),this._portal=this._portal||new Jg(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=n.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(A)}hide(A=this.hideDelay){let i=this._tooltipInstance;i&&(i.isVisible()?i.hide(A):(i._cancelPendingAnimations(),this._detach()))}toggle(A){this._isTooltipVisible()?this.hide():this.show(void 0,A)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(A){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!A)&&a._origin instanceof ge)return this._overlayRef;this._detach()}let i=this._injector.get(I0).getAncestorScrollContainers(this._elementRef),n=`${this._cssClassPrefix}-${kz}`,o=q1(this._injector,this.positionAtOrigin?A||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(i).withPopoverLocation("global");return o.positionChanges.pipe(Bt(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=lc(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,n]:n,scrollStrategy:this._injector.get(FdA)(),disableAnimations:this._animationsDisabled}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Bt(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Bt(this._destroyed)).subscribe(a=>{this._isTooltipVisible()&&a.keyCode===27&&!pa(a)&&(a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(A){let i=A.getConfig().positionStrategy,n=this._getOrigin(),o=this._getOverlayPosition();i.withPositions([this._addOffset(cA(cA({},n.main),o.main)),this._addOffset(cA(cA({},n.fallback),o.fallback))])}_addOffset(A){let i=GdA,n=!this._dir||this._dir.value=="ltr";return A.originY==="top"?A.offsetY=-i:A.originY==="bottom"?A.offsetY=i:A.originX==="start"?A.offsetX=n?-i:i:A.originX==="end"&&(A.offsetX=n?i:-i),A}_getOrigin(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"||i=="below"?n={originX:"center",originY:i=="above"?"top":"bottom"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={originX:"start",originY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={originX:"end",originY:"center"});let{x:o,y:a}=this._invertPosition(n.originX,n.originY);return{main:n,fallback:{originX:o,originY:a}}}_getOverlayPosition(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"?n={overlayX:"center",overlayY:"bottom"}:i=="below"?n={overlayX:"center",overlayY:"top"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={overlayX:"end",overlayY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={overlayX:"start",overlayY:"center"});let{x:o,y:a}=this._invertPosition(n.overlayX,n.overlayY);return{main:n,fallback:{overlayX:o,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),Yn(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(A){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=A,this._tooltipInstance._markForCheck())}_invertPosition(A,i){return this.position==="above"||this.position==="below"?i==="top"?i="bottom":i==="bottom"&&(i="top"):A==="end"?A="start":A==="start"&&(A="end"),{x:A,y:i}}_updateCurrentPositionClass(A){let{overlayY:i,originX:n,originY:o}=A,a;if(i==="center"?this._dir&&this._dir.value==="rtl"?a=n==="end"?"left":"right":a=n==="start"?"left":"right":a=i==="bottom"&&o==="top"?"above":"below",a!==this._currentPosition){let r=this._overlayRef;if(r){let s=`${this._cssClassPrefix}-${kz}-`;r.removePanelClass(s+this._currentPosition),r.addPanelClass(s+a)}this._currentPosition=a}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",A=>{let i=A.targetTouches?.[0],n=i?{x:i.clientX,y:i.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,n)},this._defaultOptions?.touchLongPressShowDelay??o)}])):this._passiveListeners.push(["mouseenter",A=>{this._setupPointerExitEventsIfNeeded();let i;A.x!==void 0&&A.y!==void 0&&(i=A),this.show(void 0,i)}]),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;let A=[];if(!this._isTouchPlatform())A.push(["mouseleave",i=>{let n=i.relatedTarget;(!n||!this._overlayRef?.overlayElement.contains(n))&&this.hide()}],["wheel",i=>this._wheelListener(i)]);else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let i=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};A.push(["touchend",i],["touchcancel",i])}this._addListeners(A),this._passiveListeners.push(...A)}_addListeners(A){A.forEach(([i,n])=>{this._elementRef.nativeElement.addEventListener(i,n,Sz)})}_isTouchPlatform(){return this._platform.IOS||this._platform.ANDROID?!0:this._platform.isBrowser?!!this._defaultOptions?.detectHoverCapability&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:!1}_wheelListener(A){if(this._isTooltipVisible()){let i=this._injector.get(Xt).elementFromPoint(A.clientX,A.clientY),n=this._elementRef.nativeElement;i!==n&&!n.contains(i)&&this.hide()}}_disableNativeGesturesIfNecessary(){let A=this.touchGestures;if(A!=="off"){let i=this._elementRef.nativeElement,n=i.style;(A==="on"||i.nodeName!=="INPUT"&&i.nodeName!=="TEXTAREA")&&(n.userSelect=n.msUserSelect=n.webkitUserSelect=n.MozUserSelect="none"),(A==="on"||!i.draggable)&&(n.webkitUserDrag="none"),n.touchAction="none",n.webkitTapHighlightColor="transparent"}}_syncAriaDescription(A){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,A,"tooltip"),this._isDestroyed||Yn({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-mdc-tooltip-disabled",n.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return t})(),xz=(()=>{class t{_changeDetectorRef=h(Dt);_elementRef=h(ge);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=ji();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new XA;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(A){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},A)}hide(A){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},A)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:A}){(!A||!this._triggerElement.contains(A))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let A=this._elementRef.nativeElement.getBoundingClientRect();return A.height>KdA&&A.width>=UdA}_handleAnimationEnd({animationName:A}){(A===this._showAnimation||A===this._hideAnimation)&&this._finalizeAnimation(A===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(A){A?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(A){let i=this._tooltip.nativeElement,n=this._showAnimation,o=this._hideAnimation;if(i.classList.remove(A?o:n),i.classList.add(A?n:o),this._isVisible!==A&&(this._isVisible=A,this._changeDetectorRef.markForCheck()),A&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(i);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}A&&this._onShow(),this._animationsDisabled&&(i.classList.add("_mat-animation-noopable"),this._finalizeAnimation(A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tooltip-component"]],viewQuery:function(i,n){if(i&1&&ai(RdA,7),i&2){let o;ce(o=Ce())&&(n._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(i,n){i&1&&tA("mouseleave",function(a){return n._handleMouseLeave(a)})},decls:4,vars:4,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend","ngClass"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(i,n){if(i&1){let o=JA();m(0,"div",1,0),tA("animationend",function(r){return Z(o),X(n._handleAnimationEnd(r))}),m(2,"div",2),K(3),w()()}i&2&&(ne("mdc-tooltip--multiline",n._isMultiline),$("ngClass",n.tooltipClass),p(3),qA(n.message))},dependencies:[gs],styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards} -`],encapsulation:2,changeDetection:0})}return t})();var U2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[bu,Cl,Gi,C0]})}return t})();function JdA(t,e){if(t&1&&(m(0,"mat-option",17),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function YdA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",14)(1,"mat-select",16,0),tA("selectionChange",function(n){Z(A);let o=v(2);return X(o._changePageSize(n.value))}),Ut(3,JdA,2,2,"mat-option",17,Li),w(),m(5,"div",18),tA("click",function(){Z(A);let n=An(2);return X(n.open())}),w()()}if(t&2){let A=v(2);$("appearance",A._formFieldAppearance)("color",A.color),p(),$("value",A.pageSize)("disabled",A.disabled),cp("aria-labelledby",A._pageSizeLabelId),$("panelClass",A.selectConfig.panelClass||"")("disableOptionCentering",A.selectConfig.disableOptionCentering),p(2),Jt(A._displayedPageSizeOptions)}}function TdA(t,e){if(t&1&&(m(0,"div",15),K(1),w()),t&2){let A=v(2);p(),qA(A.pageSize)}}function HdA(t,e){if(t&1&&(m(0,"div",3)(1,"div",13),K(2),w(),V(3,YdA,6,7,"mat-form-field",14),V(4,TdA,2,1,"div",15),w()),t&2){let A=v();p(),ie("id",A._pageSizeLabelId),p(),Se(" ",A._intl.itemsPerPageLabel," "),p(),W(A._displayedPageSizeOptions.length>1?3:-1),p(),W(A._displayedPageSizeOptions.length<=1?4:-1)}}function zdA(t,e){if(t&1){let A=JA();m(0,"button",19),tA("click",function(){Z(A);let n=v();return X(n._buttonClicked(0,n._previousButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",20),w()()}if(t&2){let A=v();$("matTooltip",A._intl.firstPageLabel)("matTooltipDisabled",A._previousButtonsDisabled())("disabled",A._previousButtonsDisabled())("tabindex",A._previousButtonsDisabled()?-1:null),ie("aria-label",A._intl.firstPageLabel)}}function OdA(t,e){if(t&1){let A=JA();m(0,"button",21),tA("click",function(){Z(A);let n=v();return X(n._buttonClicked(n.getNumberOfPages()-1,n._nextButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",22),w()()}if(t&2){let A=v();$("matTooltip",A._intl.lastPageLabel)("matTooltipDisabled",A._nextButtonsDisabled())("disabled",A._nextButtonsDisabled())("tabindex",A._nextButtonsDisabled()?-1:null),ie("aria-label",A._intl.lastPageLabel)}}var B8=(()=>{class t{changes=new XA;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(A,i,n)=>{if(n==0||i==0)return`0 of ${n}`;n=Math.max(n,0);let o=A*i,a=o{class t{_intl=h(B8);_changeDetectorRef=h(Dt);_formFieldAppearance;_pageSizeLabelId=h(an).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new ql(1);color;get pageIndex(){return this._pageIndex}set pageIndex(A){this._pageIndex=Math.max(A||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(A){this._length=A||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(A){this._pageSize=Math.max(A||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(A){this._pageSizeOptions=(A||[]).map(i=>en(i,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new $A;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let A=this._intl,i=h(jdA,{optional:!0});if(this._intlChanges=A.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),i){let{pageSize:n,pageSizeOptions:o,hidePageSize:a,showFirstLastButtons:r}=i;n!=null&&(this._pageSize=n),o!=null&&(this._pageSizeOptions=o),a!=null&&(this.hidePageSize=a),r!=null&&(this.showFirstLastButtons=r)}this._formFieldAppearance=i?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let A=this.getNumberOfPages()-1;return this.pageIndexA-i),this._changeDetectorRef.markForCheck())}_emitPageEvent(A){this.page.emit({previousPageIndex:A,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(A){let i=this.pageIndex;A!==i&&(this.pageIndex=A,this._emitPageEvent(i))}_buttonClicked(A,i){i||this._navigate(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",en],length:[2,"length","length",en],pageSize:[2,"pageSize","pageSize",en],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",he],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",he],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",he]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-atomic","true","aria-live","polite","role","status",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["aria-hidden","true",1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2),V(2,HdA,5,4,"div",3),m(3,"div",4)(4,"div",5),K(5),w(),V(6,zdA,3,5,"button",6),m(7,"button",7),tA("click",function(){return n._buttonClicked(n.pageIndex-1,n._previousButtonsDisabled())}),Qt(),m(8,"svg",8),GA(9,"path",9),w()(),as(),m(10,"button",10),tA("click",function(){return n._buttonClicked(n.pageIndex+1,n._nextButtonsDisabled())}),Qt(),m(11,"svg",8),GA(12,"path",11),w()(),V(13,OdA,3,5,"button",12),w()()()),i&2&&(p(2),W(n.hidePageSize?-1:2),p(3),Se(" ",n._intl.getRangeLabel(n.pageIndex,n.pageSize,n.length)," "),p(),W(n.showFirstLastButtons?6:-1),p(),$("matTooltip",n._intl.previousPageLabel)("matTooltipDisabled",n._previousButtonsDisabled())("disabled",n._previousButtonsDisabled())("tabindex",n._previousButtonsDisabled()?-1:null),ie("aria-label",n._intl.previousPageLabel),p(3),$("matTooltip",n._intl.nextPageLabel)("matTooltipDisabled",n._nextButtonsDisabled())("disabled",n._nextButtonsDisabled())("tabindex",n._nextButtonsDisabled()?-1:null),ie("aria-label",n._intl.nextPageLabel),p(3),W(n.showFirstLastButtons?13:-1))},dependencies:[No,Bl,Hr,Wa,xa],styles:[`.mat-mdc-paginator{display:block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));background-color:var(--mat-paginator-container-background-color, var(--mat-sys-surface));font-family:var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));letter-spacing:var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px)}.mat-mdc-paginator .mat-mdc-select-value{font-size:var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size))}.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper{display:none}.mat-mdc-paginator .mat-mdc-select{line-height:1.5}.mat-mdc-paginator-outer-container{display:flex}.mat-mdc-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap;width:100%;min-height:var(--mat-paginator-container-size, 56px)}.mat-mdc-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-mdc-paginator-page-size{margin-right:0;margin-left:8px}.mat-mdc-paginator-page-size-label{margin:0 4px}.mat-mdc-paginator-page-size-select{margin:0 4px;width:var(--mat-paginator-page-size-select-width, 84px)}.mat-mdc-paginator-range-label{margin:0 32px 0 24px}.mat-mdc-paginator-range-actions{display:flex;align-items:center}.mat-mdc-paginator-icon{display:inline-block;width:28px;fill:var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon{fill:var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}[dir=rtl] .mat-mdc-paginator-icon{transform:rotate(180deg)}@media(forced-colors: active){.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,.mat-mdc-paginator-icon{fill:currentColor}.mat-mdc-paginator-range-actions .mat-mdc-icon-button{outline:solid 1px}.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled]{color:GrayText}}.mat-mdc-paginator-touch-target{display:var(--mat-paginator-touch-target-display, block);position:absolute;top:50%;left:50%;width:var(--mat-paginator-page-size-select-width, 84px);height:var(--mat-paginator-page-size-select-touch-target-height, 48px);background-color:rgba(0,0,0,0);transform:translate(-50%, -50%);cursor:pointer} -`],encapsulation:2,changeDetection:0})}return t})();var Nz=["*"],qdA=["content"],VdA=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],WdA=["mat-drawer","mat-drawer-content","*"];function ZdA(t,e){if(t&1){let A=JA();m(0,"div",1),tA("click",function(){Z(A);let n=v();return X(n._onBackdropClicked())}),w()}if(t&2){let A=v();ne("mat-drawer-shown",A._isShowingBackdrop())}}function XdA(t,e){t&1&&(m(0,"mat-drawer-content"),Ke(1,2),w())}var $dA=new yA("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:()=>!1}),Fz=new yA("MAT_DRAWER_CONTAINER"),Ck=(()=>{class t extends BC{_platform=h(Ii);_changeDetectorRef=h(Dt);_container=h(dk);constructor(){let A=h(ge),i=h(I0),n=h(Oe);super(A,i,n)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:A,end:i}=this._container;return A!=null&&A.mode!=="over"&&A.opened||i!=null&&i.mode!=="over"&&i.opened}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(i,n){i&2&&(wn("margin-left",n._container._contentMargins.left,"px")("margin-right",n._container._contentMargins.right,"px"),ne("mat-drawer-content-hidden",n._shouldBeHidden()))},features:[dt([{provide:BC,useExisting:t}]),It],ngContentSelectors:Nz,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},encapsulation:2,changeDetection:0})}return t})(),Ik=(()=>{class t{_elementRef=h(ge);_focusTrapFactory=h(yu);_focusMonitor=h(ar);_platform=h(Ii);_ngZone=h(Oe);_renderer=h(_i);_interactivityChecker=h(NB);_doc=h(Xt);_container=h(Fz,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached=!1;_anchor=null;get position(){return this._position}set position(A){A=A==="end"?"end":"start",A!==this._position&&(this._isAttached&&this._updatePositionInParent(A),this._position=A,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(A){this._mode=A,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(A){this._disableClose=yr(A)}_disableClose=!1;get autoFocus(){let A=this._autoFocus;return A??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(A){(A==="true"||A==="false"||A==null)&&(A=yr(A)),this._autoFocus=A}_autoFocus;get opened(){return this._opened()}set opened(A){this.toggle(yr(A))}_opened=jA(!1);_openedVia=null;_animationStarted=new XA;_animationEnd=new XA;openedChange=new $A(!0);_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));openedStart=this._animationStarted.pipe(Ze(()=>this.opened),cu(void 0));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));closedStart=this._animationStarted.pipe(Ze(()=>!this.opened),cu(void 0));_destroyed=new XA;onPositionChanged=new $A;_content;_modeChanged=new XA;_injector=h(ft);_changeDetectorRef=h(Dt);constructor(){this.openedChange.pipe(Bt(this._destroyed)).subscribe(A=>{A?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement;nl(A,"keydown").pipe(Ze(i=>i.keyCode===27&&!this.disableClose&&!pa(i)),Bt(this._destroyed)).subscribe(i=>this._ngZone.run(()=>{this.close(),i.stopPropagation(),i.preventDefault()})),this._eventCleanups=[this._renderer.listen(A,"transitionrun",this._handleTransitionEvent),this._renderer.listen(A,"transitionend",this._handleTransitionEvent),this._renderer.listen(A,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_takeFocus(){if(!this._focusTrap)return;let A=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":Yn(()=>{!this._focusTrap.focusInitialElement()&&typeof A.focus=="function"&&A.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(A){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,A):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let A=this._doc.activeElement;return!!A&&this._elementRef.nativeElement.contains(A)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(A){return this.toggle(!0,A)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(A=!this.opened,i){A&&i&&(this._openedVia=i);let n=this._setOpen(A,!A&&this._isFocusWithinDrawer(),this._openedVia||"program");return A||(this._openedVia=null),n}_setOpen(A,i,n){return A===this.opened?Promise.resolve(A?"open":"close"):(this._opened.set(A),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",A),!A&&i&&this._restoreFocus(n),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(o=>{this.openedChange.pipe(oo(1)).subscribe(a=>o(a?"open":"close"))}))}_setIsAnimating(A){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",A)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=!!this._container?.hasBackdrop&&this.opened)}_updatePositionInParent(A){if(!this._platform.isBrowser)return;let i=this._elementRef.nativeElement,n=i.parentNode;A==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),n.insertBefore(this._anchor,i)),n.appendChild(i)):this._anchor&&this._anchor.parentNode.insertBefore(i,this._anchor)}_handleTransitionEvent=A=>{let i=this._elementRef.nativeElement;A.target===i&&this._ngZone.run(()=>{A.type==="transitionrun"?this._animationStarted.next(A):(A.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(A))})};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer"]],viewQuery:function(i,n){if(i&1&&ai(qdA,5),i&2){let o;ce(o=Ce())&&(n._content=o.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(i,n){i&2&&(ie("align",null)("tabIndex",n.mode!=="side"?"-1":null),wn("visibility",!n._container&&!n.opened?"hidden":null),ne("mat-drawer-end",n.position==="end")("mat-drawer-over",n.mode==="over")("mat-drawer-push",n.mode==="push")("mat-drawer-side",n.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:Nz,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(i,n){i&1&&(Yt(),m(0,"div",1,0),Ke(2),w())},dependencies:[BC],encapsulation:2,changeDetection:0})}return t})(),dk=(()=>{class t{_dir=h(Ro,{optional:!0});_element=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(Dt);_animationDisabled=ji();_transitionsEnabled=!1;_allDrawers;_drawers=new ol;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(A){this._autosize=yr(A)}_autosize=h($dA);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(A){this._backdropOverride=A==null?null:yr(A)}_backdropOverride=null;backdropClick=new $A;_start=null;_end=null;_left=null;_right=null;_destroyed=new XA;_doCheckSubject=new XA;_contentMargins={left:null,right:null};_contentMarginChanges=new XA;get scrollable(){return this._userContent||this._content}_injector=h(ft);constructor(){let A=h(Ii),i=h(Ls);this._dir?.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),i.change().pipe(Bt(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&A.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(cn(this._allDrawers),Bt(this._destroyed)).subscribe(A=>{this._drawers.reset(A.filter(i=>!i._container||i._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(cn(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(A=>{this._watchDrawerToggle(A),this._watchDrawerPosition(A),this._watchDrawerMode(A)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(Os(10),Bt(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(A=>A.open())}close(){this._drawers.forEach(A=>A.close())}updateContentMargins(){let A=0,i=0;if(this._left&&this._left.opened){if(this._left.mode=="side")A+=this._left._getWidth();else if(this._left.mode=="push"){let n=this._left._getWidth();A+=n,i-=n}}if(this._right&&this._right.opened){if(this._right.mode=="side")i+=this._right._getWidth();else if(this._right.mode=="push"){let n=this._right._getWidth();i+=n,A-=n}}A=A||null,i=i||null,(A!==this._contentMargins.left||i!==this._contentMargins.right)&&(this._contentMargins={left:A,right:i},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(A){A._animationStarted.pipe(Bt(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),A.mode!=="side"&&A.openedChange.pipe(Bt(this._drawers.changes)).subscribe(()=>this._setContainerClass(A.opened))}_watchDrawerPosition(A){A.onPositionChanged.pipe(Bt(this._drawers.changes)).subscribe(()=>{Yn({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(A){A._modeChanged.pipe(Bt(fi(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(A){let i=this._element.nativeElement.classList,n="mat-drawer-container-has-open";A?i.add(n):i.remove(n)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(A=>{A.position=="end"?(this._end!=null,this._end=A):(this._start!=null,this._start=A)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(A=>A&&!A.disableClose&&this._drawerHasBackdrop(A)).forEach(A=>A._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(A){return A!=null&&A.opened}_drawerHasBackdrop(A){return this._backdropOverride==null?!!A&&A.mode!=="side":this._backdropOverride}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-container"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Ck,5)(o,Ik,5),i&2){let a;ce(a=Ce())&&(n._content=a.first),ce(a=Ce())&&(n._allDrawers=a)}},viewQuery:function(i,n){if(i&1&&ai(Ck,5),i&2){let o;ce(o=Ce())&&(n._userContent=o.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-drawer-container-explicit-backdrop",n._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[dt([{provide:Fz,useExisting:t}])],ngContentSelectors:WdA,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(i,n){i&1&&(Yt(VdA),V(0,ZdA,1,2,"div",0),Ke(1),Ke(2,1),V(3,XdA,2,0,"mat-drawer-content")),i&2&&(W(n.hasBackdrop?0:-1),p(3),W(n._content?-1:3))},dependencies:[Ck],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed} -`],encapsulation:2,changeDetection:0})}return t})();var ABA=["mat-internal-form-field",""],eBA=["*"],E8=(()=>{class t{labelPosition="after";static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-form-field--align-end",n.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},attrs:ABA,ngContentSelectors:eBA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-flex;align-items:center;vertical-align:middle}.mat-internal-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mat-internal-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end .mdc-form-field--align-end label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0} -`],encapsulation:2,changeDetection:0})}return t})();var tBA=["switch"],iBA=["*"];function nBA(t,e){t&1&&(m(0,"span",11),Qt(),m(1,"svg",13),GA(2,"path",14),w(),m(3,"svg",15),GA(4,"path",16),w()())}var oBA=new yA("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1,hideIcon:!1,disabledInteractive:!1})}),Q8=class{source;checked;constructor(e,A){this.source=e,this.checked=A}},_z=(()=>{class t{_elementRef=h(ge);_focusMonitor=h(ar);_changeDetectorRef=h(Dt);defaults=h(oBA);_onChange=A=>{};_onTouched=()=>{};_validatorOnChange=()=>{};_uniqueId;_checked=!1;_createChangeEvent(A){return new Q8(this,A)}_labelId;get buttonId(){return`${this.id||this._uniqueId}-button`}_switchElement;focus(){this._switchElement.nativeElement.focus()}_noopAnimations=ji();_focused=!1;name=null;id;labelPosition="after";ariaLabel=null;ariaLabelledby=null;ariaDescribedby;required=!1;color;disabled=!1;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(A){this._checked=A,this._changeDetectorRef.markForCheck()}hideIcon;disabledInteractive;change=new $A;toggleChange=new $A;get inputId(){return`${this.id||this._uniqueId}-input`}constructor(){h(Xn).load(dr);let A=h(new Ws("tabindex"),{optional:!0}),i=this.defaults;this.tabIndex=A==null?0:parseInt(A)||0,this.color=i.color||"accent",this.id=this._uniqueId=h(an).getId("mat-mdc-slide-toggle-"),this.hideIcon=i.hideIcon??!1,this.disabledInteractive=i.disabledInteractive??!1,this._labelId=this._uniqueId+"-label"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{A==="keyboard"||A==="program"?(this._focused=!0,this._changeDetectorRef.markForCheck()):A||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnChanges(A){A.required&&this._validatorOnChange()}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(A){this.checked=!!A}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorOnChange=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}_handleClick(){this.disabled||(this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new Q8(this,this.checked))))}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slide-toggle"]],viewQuery:function(i,n){if(i&1&&ai(tBA,5),i&2){let o;ce(o=Ce())&&(n._switchElement=o.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:13,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),Po(n.color?"mat-"+n.color:""),ne("mat-mdc-slide-toggle-focused",n._focused)("mat-mdc-slide-toggle-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],required:[2,"required","required",he],color:"color",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],checked:[2,"checked","checked",he],hideIcon:[2,"hideIcon","hideIcon",he],disabledInteractive:[2,"disabledInteractive","disabledInteractive",he]},outputs:{change:"change",toggleChange:"toggleChange"},exportAs:["matSlideToggle"],features:[dt([{provide:Lg,useExisting:wr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:iBA,decls:14,vars:27,consts:[["switch",""],["mat-internal-form-field","",3,"labelPosition"],["role","switch","type","button",1,"mdc-switch",3,"click","tabIndex","disabled"],[1,"mat-mdc-slide-toggle-touch-target"],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],[1,"mdc-label",3,"click","for"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",1)(1,"button",2,0),tA("click",function(){return Z(o),X(n._handleClick())}),GA(3,"div",3)(4,"span",4),m(5,"span",5)(6,"span",6)(7,"span",7),GA(8,"span",8),w(),m(9,"span",9),GA(10,"span",10),w(),V(11,nBA,5,0,"span",11),w()()(),m(12,"label",12),tA("click",function(r){return Z(o),X(r.stopPropagation())}),Ke(13),w()()}if(i&2){let o=An(2);$("labelPosition",n.labelPosition),p(),ne("mdc-switch--selected",n.checked)("mdc-switch--unselected",!n.checked)("mdc-switch--checked",n.checked)("mdc-switch--disabled",n.disabled)("mat-mdc-slide-toggle-disabled-interactive",n.disabledInteractive),$("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex)("disabled",n.disabled&&!n.disabledInteractive),ie("id",n.buttonId)("name",n.name)("aria-label",n.ariaLabel)("aria-labelledby",n._getAriaLabelledBy())("aria-describedby",n.ariaDescribedby)("aria-required",n.required||null)("aria-checked",n.checked)("aria-disabled",n.disabled&&n.disabledInteractive?"true":null),p(9),$("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),W(n.hideIcon?-1:11),p(),$("for",n.buttonId),ie("id",n._labelId)}},dependencies:[ig,E8],styles:[`.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative;width:var(--mat-slide-toggle-track-width, 52px)}.mdc-switch.mdc-switch--disabled{cursor:default;pointer-events:none}.mdc-switch.mat-mdc-slide-toggle-disabled-interactive{pointer-events:auto}label:empty{display:none}.mdc-switch__track{overflow:hidden;position:relative;width:100%;height:var(--mat-slide-toggle-track-height, 32px);border-radius:var(--mat-slide-toggle-track-shape, var(--mat-sys-corner-full))}.mdc-switch--disabled.mdc-switch .mdc-switch__track{opacity:var(--mat-slide-toggle-disabled-track-opacity, 0.12)}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%;border-width:var(--mat-slide-toggle-track-outline-width, 2px);border-color:var(--mat-slide-toggle-track-outline-color, var(--mat-sys-outline))}.mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track::after{border-width:var(--mat-slide-toggle-selected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-selected-track-outline-color, transparent)}.mdc-switch--disabled .mdc-switch__track::before,.mdc-switch--disabled .mdc-switch__track::after{border-width:var(--mat-slide-toggle-disabled-unselected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-disabled-unselected-track-outline-color, var(--mat-sys-on-surface))}@media(forced-colors: active){.mdc-switch__track{border-color:currentColor}}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0);background:var(--mat-slide-toggle-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-hover-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-focus-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-pressed-track-color, var(--mat-sys-surface-variant))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before,.mdc-switch.mdc-switch--disabled .mdc-switch__track::before{background:var(--mat-slide-toggle-disabled-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch__track::after{transform:translateX(-100%);background:var(--mat-slide-toggle-selected-track-color, var(--mat-sys-primary))}[dir=rtl] .mdc-switch__track::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::after{transform:translateX(0)}.mdc-switch--selected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-hover-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-focus-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-pressed-track-color, var(--mat-sys-primary))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after,.mdc-switch.mdc-switch--disabled .mdc-switch__track::after{background:var(--mat-slide-toggle-disabled-selected-track-color, var(--mat-sys-on-surface))}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0);width:calc(100% - var(--mat-slide-toggle-handle-width))}[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto;transition:width 75ms cubic-bezier(0.4, 0, 0.2, 1),height 75ms cubic-bezier(0.4, 0, 0.2, 1),margin 75ms cubic-bezier(0.4, 0, 0.2, 1);width:var(--mat-slide-toggle-handle-width);height:var(--mat-slide-toggle-handle-height);border-radius:var(--mat-slide-toggle-handle-shape, var(--mat-sys-corner-full))}[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle{width:var(--mat-slide-toggle-unselected-handle-size, 16px);height:var(--mat-slide-toggle-unselected-handle-size, 16px);margin:var(--mat-slide-toggle-unselected-handle-horizontal-margin, 0 8px)}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin, 0 4px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle{width:var(--mat-slide-toggle-selected-handle-size, 24px);height:var(--mat-slide-toggle-selected-handle-size, 24px);margin:var(--mat-slide-toggle-selected-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-selected-with-icon-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons){width:var(--mat-slide-toggle-with-icon-handle-size, 24px);height:var(--mat-slide-toggle-with-icon-handle-size, 24px)}.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle{width:var(--mat-slide-toggle-pressed-handle-size, 28px);height:var(--mat-slide-toggle-pressed-handle-size, 28px)}.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-selected-pressed-handle-horizontal-margin, 0 22px)}.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-unselected-pressed-handle-horizontal-margin, 0 2px)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-selected-handle-opacity, 1)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-unselected-handle-opacity, 0.38)}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}@media(forced-colors: active){.mdc-switch__handle::before,.mdc-switch__handle::after{border-color:currentColor}}.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-handle-color, var(--mat-sys-on-primary))}.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-hover-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-focus-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-pressed-handle-color, var(--mat-sys-primary-container))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after,.mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-selected-handle-color, var(--mat-sys-surface))}.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-handle-color, var(--mat-sys-outline))}.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-hover-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-focus-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-pressed-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-unselected-handle-color, var(--mat-sys-on-surface))}.mdc-switch__handle::before{background:var(--mat-slide-toggle-handle-surface-color)}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-handle-elevation-shadow)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow,.mdc-switch.mdc-switch--disabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-disabled-handle-elevation-shadow)}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1;width:var(--mat-slide-toggle-state-layer-size, 40px);height:var(--mat-slide-toggle-state-layer-size, 40px)}.mdc-switch__ripple::after{content:"";opacity:0}.mdc-switch--disabled .mdc-switch__ripple::after{display:none}.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after{display:block}.mdc-switch:hover .mdc-switch__ripple::after{transition:75ms opacity cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after,.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-pressed-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-hover-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-focus-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-pressed-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch__icons{position:relative;height:100%;width:100%;z-index:1;transform:translateZ(0)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-unselected-icon-opacity, 0.38)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-selected-icon-opacity, 0.38)}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--unselected .mdc-switch__icon{width:var(--mat-slide-toggle-unselected-icon-size, 16px);height:var(--mat-slide-toggle-unselected-icon-size, 16px);fill:var(--mat-slide-toggle-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__icon{width:var(--mat-slide-toggle-selected-icon-size, 16px);height:var(--mat-slide-toggle-selected-icon-size, 16px);fill:var(--mat-slide-toggle-selected-icon-color, var(--mat-sys-on-primary-container))}.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-selected-icon-color, var(--mat-sys-on-surface))}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{-webkit-user-select:none;user-select:none;display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-focus-indicator::before{content:""}.mat-mdc-slide-toggle .mat-internal-form-field{color:var(--mat-slide-toggle-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-slide-toggle-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-slide-toggle-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-slide-toggle-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-slide-toggle-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-slide-toggle-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}.mat-mdc-slide-toggle .mdc-switch:enabled+.mdc-label{cursor:pointer}.mat-mdc-slide-toggle .mdc-switch--disabled+label{color:var(--mat-slide-toggle-disabled-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-slide-toggle-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-slide-toggle-touch-target-size, 48px);width:100%;transform:translate(-50%, -50%);display:var(--mat-slide-toggle-touch-target-display, block)}[dir=rtl] .mat-mdc-slide-toggle-touch-target{left:auto;right:50%;transform:translate(50%, -50%)} -`],encapsulation:2,changeDetection:0})}return t})();function aBA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"button",2),tA("click",function(){Z(A);let n=v();return X(n.action())}),K(2),w()()}if(t&2){let A=v();p(2),Se(" ",A.data.action," ")}}var rBA=["label"];function sBA(t,e){}var gBA=Math.pow(2,31)-1,y4=class{_overlayRef;instance;containerInstance;_afterDismissed=new XA;_afterOpened=new XA;_onAction=new XA;_durationTimeoutId;_dismissedByAction=!1;constructor(e,A){this._overlayRef=A,this.containerInstance=e,e._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete(),this.dismiss()),clearTimeout(this._durationTimeoutId)}closeWithAction(){this.dismissWithAction()}_dismissAfter(e){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(e,gBA))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}},Lz=new yA("MatSnackBarData"),lE=class{politeness="polite";announcementMessage="";viewContainerRef;duration=0;panelClass;direction;data=null;horizontalPosition="center";verticalPosition="bottom"},lBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarLabel",""]],hostAttrs:[1,"mat-mdc-snack-bar-label","mdc-snackbar__label"]})}return t})(),cBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarActions",""]],hostAttrs:[1,"mat-mdc-snack-bar-actions","mdc-snackbar__actions"]})}return t})(),CBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarAction",""]],hostAttrs:[1,"mat-mdc-snack-bar-action","mdc-snackbar__action"]})}return t})(),IBA=(()=>{class t{snackBarRef=h(y4);data=h(Lz);constructor(){}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["simple-snack-bar"]],hostAttrs:[1,"mat-mdc-simple-snack-bar"],exportAs:["matSnackBar"],decls:3,vars:2,consts:[["matSnackBarLabel",""],["matSnackBarActions",""],["matButton","","matSnackBarAction","",3,"click"]],template:function(i,n){i&1&&(m(0,"div",0),K(1),w(),V(2,aBA,3,1,"div",1)),i&2&&(p(),Se(" ",n.data.message,` -`),p(),W(n.hasAction?2:-1))},dependencies:[fn,lBA,cBA,CBA],styles:[`.mat-mdc-simple-snack-bar{display:flex}.mat-mdc-simple-snack-bar .mat-mdc-snack-bar-label{max-height:50vh;overflow:auto} -`],encapsulation:2,changeDetection:0})}return t})(),Bk="_mat-snack-bar-enter",Ek="_mat-snack-bar-exit",dBA=(()=>{class t extends L2{_ngZone=h(Oe);_elementRef=h(ge);_changeDetectorRef=h(Dt);_platform=h(Ii);_animationsDisabled=ji();snackBarConfig=h(lE);_document=h(Xt);_trackedModals=new Set;_enterFallback;_exitFallback;_injector=h(ft);_announceDelay=150;_announceTimeoutId;_destroyed=!1;_portalOutlet;_onAnnounce=new XA;_onExit=new XA;_onEnter=new XA;_animationState="void";_live;_label;_role;_liveElementId=h(an).getId("mat-snack-bar-container-live-");constructor(){super();let A=this.snackBarConfig;A.politeness==="assertive"&&!A.announcementMessage?this._live="assertive":A.politeness==="off"?this._live="off":this._live="polite",this._platform.FIREFOX&&(this._live==="polite"&&(this._role="status"),this._live==="assertive"&&(this._role="alert"))}attachComponentPortal(A){this._assertNotAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._afterPortalAttached(),i}attachTemplatePortal(A){this._assertNotAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._afterPortalAttached(),i}attachDomPortal=A=>{this._assertNotAttached();let i=this._portalOutlet.attachDomPortal(A);return this._afterPortalAttached(),i};onAnimationEnd(A){A===Ek?this._completeExit():A===Bk&&(clearTimeout(this._enterFallback),this._ngZone.run(()=>{this._onEnter.next(),this._onEnter.complete()}))}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce(),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(Bk)))},{injector:this._injector}):(clearTimeout(this._enterFallback),this._enterFallback=setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-snack-bar-fallback-visible"),this.onAnimationEnd(Bk)},200)))}exit(){return this._destroyed?se(void 0):(this._ngZone.run(()=>{this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._elementRef.nativeElement.setAttribute("mat-exit",""),clearTimeout(this._announceTimeoutId),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(Ek)))},{injector:this._injector}):(clearTimeout(this._exitFallback),this._exitFallback=setTimeout(()=>this.onAnimationEnd(Ek),200))}),this._onExit)}ngOnDestroy(){this._destroyed=!0,this._clearFromModals(),this._completeExit()}_completeExit(){clearTimeout(this._exitFallback),queueMicrotask(()=>{this._onExit.next(),this._onExit.complete()})}_afterPortalAttached(){let A=this._elementRef.nativeElement,i=this.snackBarConfig.panelClass;i&&(Array.isArray(i)?i.forEach(a=>A.classList.add(a)):A.classList.add(i)),this._exposeToModals();let n=this._label.nativeElement,o="mdc-snackbar__label";n.classList.toggle(o,!n.querySelector(`.${o}`))}_exposeToModals(){let A=this._liveElementId,i=this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{let i=A.getAttribute("aria-owns");if(i){let n=i.replace(this._liveElementId,"").trim();n.length>0?A.setAttribute("aria-owns",n):A.removeAttribute("aria-owns")}}),this._trackedModals.clear()}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{if(this._destroyed)return;let A=this._elementRef.nativeElement,i=A.querySelector("[aria-hidden]"),n=A.querySelector("[aria-live]");if(i&&n){let o=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&i.contains(document.activeElement)&&(o=document.activeElement),i.removeAttribute("aria-hidden"),n.appendChild(i),o?.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-snack-bar-container"]],viewQuery:function(i,n){if(i&1&&ai(Yg,7)(rBA,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first),ce(o=Ce())&&(n._label=o.first)}},hostAttrs:[1,"mdc-snackbar","mat-mdc-snack-bar-container"],hostVars:6,hostBindings:function(i,n){i&1&&tA("animationend",function(a){return n.onAnimationEnd(a.animationName)})("animationcancel",function(a){return n.onAnimationEnd(a.animationName)}),i&2&&ne("mat-snack-bar-container-enter",n._animationState==="visible")("mat-snack-bar-container-exit",n._animationState==="hidden")("mat-snack-bar-container-animations-enabled",!n._animationsDisabled)},features:[It],decls:6,vars:3,consts:[["label",""],[1,"mdc-snackbar__surface","mat-mdc-snackbar-surface"],[1,"mat-mdc-snack-bar-label"],["aria-hidden","true"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2,0)(3,"div",3),pt(4,sBA,0,0,"ng-template",4),w(),GA(5,"div"),w()()),i&2&&(p(5),ie("aria-live",n._live)("role",n._role)("id",n._liveElementId))},dependencies:[Yg],styles:[`@keyframes _mat-snack-bar-enter{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes _mat-snack-bar-exit{from{opacity:1}to{opacity:0}}.mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-snack-bar-container-animations-enabled{opacity:0}.mat-snack-bar-container-animations-enabled.mat-snack-bar-fallback-visible{opacity:1}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-enter{animation:_mat-snack-bar-enter 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-exit{animation:_mat-snack-bar-exit 75ms cubic-bezier(0.4, 0, 1, 1) forwards}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}@media(forced-colors: active){.mat-mdc-snackbar-surface{outline:solid 1px}}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-snack-bar-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mat-snack-bar-supporting-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-snack-bar-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-snack-bar-supporting-text-weight, var(--mat-sys-body-medium-weight));line-height:var(--mat-snack-bar-supporting-text-line-height, var(--mat-sys-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-button-text-state-layer-color: currentColor;--mat-button-text-ripple-color: currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-sys-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1} -`],encapsulation:2})}return t})(),BBA=new yA("mat-snack-bar-default-options",{providedIn:"root",factory:()=>new lE}),J2=(()=>{class t{_live=h(vu);_injector=h(ft);_breakpointObserver=h(Du);_parentSnackBar=h(t,{optional:!0,skipSelf:!0});_defaultConfig=h(BBA);_animationsDisabled=ji();_snackBarRefAtThisLevel=null;simpleSnackBarComponent=IBA;snackBarContainerComponent=dBA;handsetCssClass="mat-mdc-snack-bar-handset";get _openedSnackBarRef(){let A=this._parentSnackBar;return A?A._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(A){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=A:this._snackBarRefAtThisLevel=A}constructor(){}openFromComponent(A,i){return this._attach(A,i)}openFromTemplate(A,i){return this._attach(A,i)}open(A,i="",n){let o=cA(cA({},this._defaultConfig),n);return o.data={message:A,action:i},o.announcementMessage===A&&(o.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,o)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(A,i){let n=i&&i.viewContainerRef&&i.viewContainerRef.injector,o=ft.create({parent:n||this._injector,providers:[{provide:lE,useValue:i}]}),a=new Jg(this.snackBarContainerComponent,i.viewContainerRef,o),r=A.attach(a);return r.instance.snackBarConfig=i,r.instance}_attach(A,i){let n=cA(cA(cA({},new lE),this._defaultConfig),i),o=this._createOverlay(n),a=this._attachSnackBarContainer(o,n),r=new y4(a,o);if(A instanceof Tn){let s=new Is(A,null,{$implicit:n.data,snackBarRef:r});r.instance=a.attachTemplatePortal(s)}else{let s=this._createInjector(n,r),g=new Jg(A,void 0,s),l=a.attachComponentPortal(g);r.instance=l.instance}return this._breakpointObserver.observe(qJ.HandsetPortrait).pipe(Bt(o.detachments())).subscribe(s=>{o.overlayElement.classList.toggle(this.handsetCssClass,s.matches)}),n.announcementMessage&&a._onAnnounce.subscribe(()=>{this._live.announce(n.announcementMessage,n.politeness)}),this._animateSnackBar(r,n),this._openedSnackBarRef=r,this._openedSnackBarRef}_animateSnackBar(A,i){A.afterDismissed().subscribe(()=>{this._openedSnackBarRef==A&&(this._openedSnackBarRef=null),i.announcementMessage&&this._live.clear()}),i.duration&&i.duration>0&&A.afterOpened().subscribe(()=>A._dismissAfter(i.duration)),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{A.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):A.containerInstance.enter()}_createOverlay(A){let i=new sc;i.direction=A.direction;let n=G2(this._injector),o=A.direction==="rtl",a=A.horizontalPosition==="left"||A.horizontalPosition==="start"&&!o||A.horizontalPosition==="end"&&o,r=!a&&A.horizontalPosition!=="center";return a?n.left("0"):r?n.right("0"):n.centerHorizontally(),A.verticalPosition==="top"?n.top("0"):n.bottom("0"),i.positionStrategy=n,i.disableAnimations=this._animationsDisabled,lc(this._injector,i)}_createInjector(A,i){let n=A&&A.viewContainerRef&&A.viewContainerRef.injector;return ft.create({parent:n||this._injector,providers:[{provide:y4,useValue:i},{provide:Lz,useValue:A.data}]})}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var EBA=t=>["segment",t],QBA=(t,e)=>({"segment-main":!0,expandable:t,expanded:e});function hBA(t,e){t&1&&GA(0,"div",9)}function uBA(t,e){if(t&1&&(m(0,"span",10),K(1),w()),t&2){let A=v().$implicit;p(),qA(A.description)}}function fBA(t,e){if(t&1&&(m(0,"section",11),GA(1,"ngx-json-viewer",12),w()),t&2){let A=v().$implicit,i=v();p(),$("json",A.value)("expanded",i.expanded)("depth",i.depth)("_currentDepth",i._currentDepth+1)}}function mBA(t,e){if(t&1){let A=JA();m(0,"section",2)(1,"section",3),tA("click",function(){let n=Z(A).$implicit,o=v();return X(o.toggle(n))}),pt(2,hBA,1,0,"div",4),m(3,"span",5),K(4),w(),m(5,"span",6),K(6,": "),w(),pt(7,uBA,2,1,"span",7),w(),pt(8,fBA,2,4,"section",8),w()}if(t&2){let A=e.$implicit,i=v();$("ngClass",ss(6,EBA,"segment-type-"+A.type)),p(),$("ngClass",Zl(8,QBA,i.isExpandable(A),A.expanded)),p(),$("ngIf",i.isExpandable(A)),p(2),qA(A.key),p(3),$("ngIf",!A.expanded||!i.isExpandable(A)),p(),$("ngIf",A.expanded&&i.isExpandable(A))}}var Y2=(()=>{class t{constructor(){this.expanded=!0,this.depth=-1,this._currentDepth=0,this.segments=[]}ngOnChanges(){this.segments=[],this.json=this.decycle(this.json),typeof this.json=="object"?Object.keys(this.json).forEach(A=>{this.segments.push(this.parseKeyValue(A,this.json[A]))}):this.segments.push(this.parseKeyValue(`(${typeof this.json})`,this.json))}isExpandable(A){return A.type==="object"||A.type==="array"}toggle(A){this.isExpandable(A)&&(A.expanded=!A.expanded)}parseKeyValue(A,i){let n={key:A,value:i,type:void 0,description:""+i,expanded:this.isExpanded()};switch(typeof n.value){case"number":{n.type="number";break}case"boolean":{n.type="boolean";break}case"function":{n.type="function";break}case"string":{n.type="string",n.description='"'+n.value+'"';break}case"undefined":{n.type="undefined",n.description="undefined";break}case"object":{n.value===null?(n.type="null",n.description="null"):Array.isArray(n.value)?(n.type="array",n.description="Array["+n.value.length+"] "+JSON.stringify(n.value)):n.value instanceof Date?n.type="date":(n.type="object",n.description="Object "+JSON.stringify(n.value));break}}return n}isExpanded(){return this.expanded&&!(this.depth>-1&&this._currentDepth>=this.depth)}decycle(A){let i=new WeakMap;return(function n(o,a){let r,s;return typeof o=="object"&&o!==null&&!(o instanceof Boolean)&&!(o instanceof Date)&&!(o instanceof Number)&&!(o instanceof RegExp)&&!(o instanceof String)?(r=i.get(o),r!==void 0?{$ref:r}:(i.set(o,a),Array.isArray(o)?(s=[],o.forEach(function(g,l){s[l]=n(g,a+"["+l+"]")})):(s={},Object.keys(o).forEach(function(g){s[g]=n(o[g],a+"["+JSON.stringify(g)+"]")})),s)):o})(A,"$")}}return t.\u0275fac=function(A){return new(A||t)},t.\u0275cmp=kA({type:t,selectors:[["ngx-json-viewer"]],inputs:{json:"json",expanded:"expanded",depth:"depth",_currentDepth:"_currentDepth"},standalone:!1,features:[ti],decls:2,vars:1,consts:[[1,"ngx-json-viewer"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],[3,"click","ngClass"],["class","toggler",4,"ngIf"],[1,"segment-key"],[1,"segment-separator"],["class","segment-value",4,"ngIf"],["class","children",4,"ngIf"],[1,"toggler"],[1,"segment-value"],[1,"children"],[3,"json","expanded","depth","_currentDepth"]],template:function(A,i){A&1&&(m(0,"section",0),pt(1,mBA,9,11,"section",1),w()),A&2&&(p(),$("ngForOf",i.segments))},dependencies:[gs,DB,rl,t],styles:['@charset "UTF-8";.ngx-json-viewer[_ngcontent-%COMP%]{font-family:var(--ngx-json-font-family, monospace);font-size:var(--ngx-json-font-size, 1em);width:100%;height:100%;overflow:hidden;position:relative}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%]{padding:2px;margin:1px 1px 1px 12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%]{word-wrap:break-word}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]{position:absolute;margin-left:-14px;margin-top:3px;font-size:.8em;line-height:1.2em;vertical-align:middle;color:var(--ngx-json-toggler, #787878)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]:after{display:inline-block;content:"\\25ba";transition:transform .1s ease-in}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-key, #4E187C)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-separator[_ngcontent-%COMP%]{color:var(--ngx-json-separator, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-value, #000)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .children[_ngcontent-%COMP%]{margin-left:12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-string[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-string, #FF6B6B)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-number[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-number, #009688)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-boolean[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-boolean, #B938A4)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-date[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-date, #05668D)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-array, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-object, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-function[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-function, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-null, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-undefined, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-null-bg, red)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%]{white-space:nowrap}.ngx-json-viewer[_ngcontent-%COMP%] .expanded[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]:after{transform:rotate(90deg)}.ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]{cursor:pointer}']}),t})(),E0=(()=>{class t{}return t.\u0275fac=function(A){return new(A||t)},t.\u0275mod=$e({type:t}),t.\u0275inj=Xe({imports:[ma]}),t})();var zr=class t{static getBaseUrlWithoutPath(){let e=window.location.href;return new URL(e).origin+"/dev-ui/"}static getApiServerBaseUrl(){return window.runtimeConfig?.backendUrl||""}static getWSServerUrl(){let e=t.getApiServerBaseUrl();return!e||e==""?window.location.host:e.startsWith("http://")?e.slice(7):e.startsWith("https://")?e.slice(8):e}};var sg=new yA("AgentService");var Q0=new yA("AgentBuilderService");var u8=new yA("ArtifactService");var cE=new yA("DownloadService");var h0=new yA("EvalService");var CE=new yA("EventService");var Gz="import_session",Kz="edit_function_args";var Uz="a2a_card",vr=new yA("FeatureFlagService");var IE=new yA("GraphService");var f8=new yA("LocalFileService");var u0=new yA("SafeValuesService"),m8=class{openBase64InNewTab(e,A){try{if(!e)return;let i=e;if(e.startsWith("data:")&&e.includes(";base64,")&&(i=i.substring(i.indexOf(";base64,")+8)),!A||!i)return;let n=atob(i),o=new Array(n.length);for(let g=0;gthis.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--bottom-panel-height","310px"),this.renderer.setStyle(this.el.nativeElement,"height","var(--bottom-panel-height)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorY:e.clientY,startingHeight:this.bottomPanelHeight},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=this.resizingEvent.startingCursorY-e.clientY,i=this.resizingEvent.startingHeight+A;this.bottomPanelHeight=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.bottomMaxHeight=window.innerHeight/2,this.bottomPanelHeight=this.bottomPanelHeight}set bottomPanelHeight(e){let A=Math.min(Math.max(e,this.bottomMinHeight),this.bottomMaxHeight);document.body.style.setProperty("--bottom-panel-height",`${A}px`)}get bottomPanelHeight(){let e=getComputedStyle(document.body).getPropertyValue("--bottom-panel-height"),A=parseInt(e,10);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(at(ge),at(_i))};static \u0275dir=OA({type:t,selectors:[["","appResizableBottomPanel",""]],hostBindings:function(A,i){A&1&&tA("mousemove",function(o){return i.onMouseMove(o)},nC)("mouseup",function(){return i.onMouseUp()},nC)("resize",function(){return i.onResize()},m2)}})};var y8=class t{constructor(e,A){this.el=e;this.renderer=A}sideDrawerMinWidth=310;sideDrawerMaxWidth=window.innerWidth/2;resizeHandle=null;resizingEvent={isResizing:!1,startingCursorX:0,startingWidth:0};ngAfterViewInit(){this.sideDrawerMaxWidth=window.innerWidth/2,this.resizeHandle=document.getElementsByClassName("resize-handler")[0],this.resizeHandle&&this.renderer.listen(this.resizeHandle,"mousedown",e=>this.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--side-drawer-width","570px"),this.renderer.setStyle(this.el.nativeElement,"width","var(--side-drawer-width)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorX:e.clientX,startingWidth:this.sideDrawerWidth},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=e.clientX-this.resizingEvent.startingCursorX,i=this.resizingEvent.startingWidth+A;this.sideDrawerWidth=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.sideDrawerMaxWidth=window.innerWidth/2,this.sideDrawerWidth=this.sideDrawerWidth}set sideDrawerWidth(e){let A=Math.min(Math.max(e,this.sideDrawerMinWidth),this.sideDrawerMaxWidth);document.documentElement.style.setProperty("--side-drawer-width",`${A}px`)}get sideDrawerWidth(){let e=getComputedStyle(document.documentElement).getPropertyValue("--side-drawer-width"),A=parseFloat(e);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(at(ge),at(_i))};static \u0275dir=OA({type:t,selectors:[["","appResizableDrawer",""]],hostBindings:function(A,i){A&1&&tA("mousemove",function(o){return i.onMouseMove(o)},nC)("mouseup",function(){return i.onMouseUp()},nC)("resize",function(){return i.onResize()},m2)}})};var v8=Symbol.for("yaml.alias"),b8=Symbol.for("yaml.document"),cc=Symbol.for("yaml.map"),Qk=Symbol.for("yaml.pair"),Tg=Symbol.for("yaml.scalar"),fC=Symbol.for("yaml.seq"),Ks=Symbol.for("yaml.node.type"),hl=t=>!!t&&typeof t=="object"&&t[Ks]===v8,Cc=t=>!!t&&typeof t=="object"&&t[Ks]===b8,Ic=t=>!!t&&typeof t=="object"&&t[Ks]===cc,mn=t=>!!t&&typeof t=="object"&&t[Ks]===Qk,Yi=t=>!!t&&typeof t=="object"&&t[Ks]===Tg,dc=t=>!!t&&typeof t=="object"&&t[Ks]===fC;function so(t){if(t&&typeof t=="object")switch(t[Ks]){case cc:case fC:return!0}return!1}function yn(t){if(t&&typeof t=="object")switch(t[Ks]){case v8:case cc:case Tg:case fC:return!0}return!1}var M8=t=>(Yi(t)||so(t))&&!!t.anchor;var gg=Symbol("break visit"),Jz=Symbol("skip children"),f0=Symbol("remove node");function m0(t,e){let A=Yz(e);Cc(t)?BE(null,t.contents,A,Object.freeze([t]))===f0&&(t.contents=null):BE(null,t,A,Object.freeze([]))}m0.BREAK=gg;m0.SKIP=Jz;m0.REMOVE=f0;function BE(t,e,A,i){let n=Tz(t,e,A,i);if(yn(n)||mn(n))return Hz(t,i,n),BE(t,n,A,i);if(typeof n!="symbol"){if(so(e)){i=Object.freeze(i.concat(e));for(let o=0;ot.replace(/[!,[\]{}]/g,e=>pBA[e]),QE=(()=>{class t{constructor(A,i){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,A),this.tags=Object.assign({},t.defaultTags,i)}clone(){let A=new t(this.yaml,this.tags);return A.docStart=this.docStart,A}atDocument(){let A=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return A}add(A,i){this.atNextDocument&&(this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1);let n=A.trim().split(/[ \t]+/),o=n.shift();switch(o){case"%TAG":{if(n.length!==2&&(i(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[a,r]=n;return this.tags[a]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return i(0,"%YAML directive should contain exactly one part"),!1;let[a]=n;if(a==="1.1"||a==="1.2")return this.yaml.version=a,!0;{let r=/^\d+\.\d+$/.test(a);return i(6,`Unsupported YAML version ${a}`,r),!1}}default:return i(0,`Unknown directive ${o}`,!0),!1}}tagName(A,i){if(A==="!")return"!";if(A[0]!=="!")return i(`Not a valid tag: ${A}`),null;if(A[1]==="<"){let r=A.slice(2,-1);return r==="!"||r==="!!"?(i(`Verbatim tags aren't resolved, so ${A} is invalid.`),null):(A[A.length-1]!==">"&&i("Verbatim tags must end with a >"),r)}let[,n,o]=A.match(/^(.*!)([^!]*)$/s);o||i(`The ${A} tag has no suffix`);let a=this.tags[n];if(a)try{return a+decodeURIComponent(o)}catch(r){return i(String(r)),null}return n==="!"?A:(i(`Could not resolve tag: ${A}`),null)}tagString(A){for(let[i,n]of Object.entries(this.tags))if(A.startsWith(n))return i+wBA(A.substring(n.length));return A[0]==="!"?A:`!<${A}>`}toString(A){let i=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),o;if(A&&n.length>0&&yn(A.contents)){let a={};m0(A.contents,(r,s)=>{yn(s)&&s.tag&&(a[s.tag]=!0)}),o=Object.keys(a)}else o=[];for(let[a,r]of n)a==="!!"&&r==="tag:yaml.org,2002:"||(!A||o.some(s=>s.startsWith(r)))&&i.push(`%TAG ${a} ${r}`);return i.join(` -`)}}return t.defaultYaml={explicit:!1,version:"1.2"},t.defaultTags={"!!":"tag:yaml.org,2002:"},t})();function S8(t){if(/[\x00-\x19\s,[\]{}]/.test(t)){let A=`Anchor must not contain whitespace or control characters: ${JSON.stringify(t)}`;throw new Error(A)}return!0}function hk(t){let e=new Set;return m0(t,{Value(A,i){i.anchor&&e.add(i.anchor)}}),e}function uk(t,e){for(let A=1;;++A){let i=`${t}${A}`;if(!e.has(i))return i}}function zz(t,e){let A=[],i=new Map,n=null;return{onAnchor:o=>{A.push(o),n??(n=hk(t));let a=uk(e,n);return n.add(a),a},setAnchors:()=>{for(let o of A){let a=i.get(o);if(typeof a=="object"&&a.anchor&&(Yi(a.node)||so(a.node)))a.node.anchor=a.anchor;else{let r=new Error("Failed to resolve repeated object (this should not happen)");throw r.source=o,r}}},sourceObjects:i}}function H2(t,e,A,i){if(i&&typeof i=="object")if(Array.isArray(i))for(let n=0,o=i.length;nEr(i,String(n),A));if(t&&typeof t.toJSON=="function"){if(!A||!M8(t))return t.toJSON(e,A);let i={aliasCount:0,count:1,res:void 0};A.anchors.set(t,i),A.onCreate=o=>{i.res=o,delete A.onCreate};let n=t.toJSON(e,A);return A.onCreate&&A.onCreate(n),n}return typeof t=="bigint"&&!A?.keep?Number(t):t}var z2=class{constructor(e){Object.defineProperty(this,Ks,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:A,maxAliasCount:i,onAnchor:n,reviver:o}={}){if(!Cc(e))throw new TypeError("A document argument is required");let a={anchors:new Map,doc:e,keep:!0,mapAsMap:A===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},r=Er(this,"",a);if(typeof n=="function")for(let{count:s,res:g}of a.anchors.values())n(g,s);return typeof o=="function"?H2(o,{"":r},"",r):r}};var mC=class extends z2{constructor(e){super(v8),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,A){let i;A?.aliasResolveCache?i=A.aliasResolveCache:(i=[],m0(e,{Node:(o,a)=>{(hl(a)||M8(a))&&i.push(a)}}),A&&(A.aliasResolveCache=i));let n;for(let o of i){if(o===this)break;o.anchor===this.source&&(n=o)}return n}toJSON(e,A){if(!A)return{source:this.source};let{anchors:i,doc:n,maxAliasCount:o}=A,a=this.resolve(n,A);if(!a){let s=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(s)}let r=i.get(a);if(r||(Er(a,null,A),r=i.get(a)),r?.res===void 0){let s="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(s)}if(o>=0&&(r.count+=1,r.aliasCount===0&&(r.aliasCount=x8(n,a,i)),r.count*r.aliasCount>o)){let s="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(s)}return r.res}toString(e,A,i){let n=`*${this.source}`;if(e){if(S8(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let o=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(o)}if(e.implicitKey)return`${n} `}return n}};function x8(t,e,A){if(hl(e)){let i=e.resolve(t),n=A&&i&&A.get(i);return n?n.count*n.aliasCount:0}else if(so(e)){let i=0;for(let n of e.items){let o=x8(t,n,A);o>i&&(i=o)}return i}else if(mn(e)){let i=x8(t,e.key,A),n=x8(t,e.value,A);return Math.max(i,n)}return 1}var R8=t=>!t||typeof t!="function"&&typeof t!="object",zt=(()=>{class t extends z2{constructor(A){super(Tg),this.value=A}toJSON(A,i){return i?.keep?this.value:Er(this.value,A,i)}toString(){return String(this.value)}}return t.BLOCK_FOLDED="BLOCK_FOLDED",t.BLOCK_LITERAL="BLOCK_LITERAL",t.PLAIN="PLAIN",t.QUOTE_DOUBLE="QUOTE_DOUBLE",t.QUOTE_SINGLE="QUOTE_SINGLE",t})();var DBA="tag:yaml.org,2002:";function yBA(t,e,A){if(e){let i=A.filter(o=>o.tag===e),n=i.find(o=>!o.format)??i[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return A.find(i=>i.identify?.(t)&&!i.format)}function pC(t,e,A){if(Cc(t)&&(t=t.contents),yn(t))return t;if(mn(t)){let C=A.schema[cc].createNode?.(A.schema,null,A);return C.items.push(t),C}(t instanceof String||t instanceof Number||t instanceof Boolean||typeof BigInt<"u"&&t instanceof BigInt)&&(t=t.valueOf());let{aliasDuplicateObjects:i,onAnchor:n,onTagObj:o,schema:a,sourceObjects:r}=A,s;if(i&&t&&typeof t=="object"){if(s=r.get(t),s)return s.anchor??(s.anchor=n(t)),new mC(s.anchor);s={anchor:null,node:null},r.set(t,s)}e?.startsWith("!!")&&(e=DBA+e.slice(2));let g=yBA(t,e,a.tags);if(!g){if(t&&typeof t.toJSON=="function"&&(t=t.toJSON()),!t||typeof t!="object"){let C=new zt(t);return s&&(s.node=C),C}g=t instanceof Map?a[cc]:Symbol.iterator in Object(t)?a[fC]:a[cc]}o&&(o(g),delete A.onTagObj);let l=g?.createNode?g.createNode(A.schema,t,A):typeof g?.nodeClass?.from=="function"?g.nodeClass.from(A.schema,t,A):new zt(t);return e?l.tag=e:g.default||(l.tag=g.tag),s&&(s.node=l),l}function v4(t,e,A){let i=A;for(let n=e.length-1;n>=0;--n){let o=e[n];if(typeof o=="number"&&Number.isInteger(o)&&o>=0){let a=[];a[o]=i,i=a}else i=new Map([[o,i]])}return pC(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:t,sourceObjects:new Map})}var uE=t=>t==null||typeof t=="object"&&!!t[Symbol.iterator]().next().done,hE=class extends z2{constructor(e,A){super(e),Object.defineProperty(this,"schema",{value:A,configurable:!0,enumerable:!1,writable:!0})}clone(e){let A=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(A.schema=e),A.items=A.items.map(i=>yn(i)||mn(i)?i.clone(e):i),this.range&&(A.range=this.range.slice()),A}addIn(e,A){if(uE(e))this.add(A);else{let[i,...n]=e,o=this.get(i,!0);if(so(o))o.addIn(n,A);else if(o===void 0&&this.schema)this.set(i,v4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}deleteIn(e){let[A,...i]=e;if(i.length===0)return this.delete(A);let n=this.get(A,!0);if(so(n))return n.deleteIn(i);throw new Error(`Expected YAML collection at ${A}. Remaining path: ${i}`)}getIn(e,A){let[i,...n]=e,o=this.get(i,!0);return n.length===0?!A&&Yi(o)?o.value:o:so(o)?o.getIn(n,A):void 0}hasAllNullValues(e){return this.items.every(A=>{if(!mn(A))return!1;let i=A.value;return i==null||e&&Yi(i)&&i.value==null&&!i.commentBefore&&!i.comment&&!i.tag})}hasIn(e){let[A,...i]=e;if(i.length===0)return this.has(A);let n=this.get(A,!0);return so(n)?n.hasIn(i):!1}setIn(e,A){let[i,...n]=e;if(n.length===0)this.set(i,A);else{let o=this.get(i,!0);if(so(o))o.setIn(n,A);else if(o===void 0&&this.schema)this.set(i,v4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}};var Oz=t=>t.replace(/^(?!$)(?: $)?/gm,"#");function ul(t,e){return/^\n+$/.test(t)?t.substring(1):e?t.replace(/^(?! *$)/gm,e):t}var p0=(t,e,A)=>t.endsWith(` -`)?ul(A,e):A.includes(` -`)?` -`+ul(A,e):(t.endsWith(" ")?"":" ")+A;var fk="flow",N8="block",b4="quoted";function M4(t,e,A="flow",{indentAtStart:i,lineWidth:n=80,minContentWidth:o=20,onFold:a,onOverflow:r}={}){if(!n||n<0)return t;nn-Math.max(2,o)?g.push(0):C=n-i);let I,d,B=!1,E=-1,Q=-1,f=-1;A===N8&&(E=Pz(t,E,e.length),E!==-1&&(C=E+s));for(let S;S=t[E+=1];){if(A===b4&&S==="\\"){switch(Q=E,t[E+1]){case"x":E+=3;break;case"u":E+=5;break;case"U":E+=9;break;default:E+=1}f=E}if(S===` -`)A===N8&&(E=Pz(t,E,e.length)),C=E+e.length+s,I=void 0;else{if(S===" "&&d&&d!==" "&&d!==` -`&&d!==" "){let M=t[E+1];M&&M!==" "&&M!==` -`&&M!==" "&&(I=E)}if(E>=C)if(I)g.push(I),C=I+s,I=void 0;else if(A===b4){for(;d===" "||d===" ";)d=S,S=t[E+=1],B=!0;let M=E>f+1?E-2:Q-1;if(l[M])return t;g.push(M),l[M]=!0,C=M+s,I=void 0}else B=!0}d=S}if(B&&r&&r(),g.length===0)return t;a&&a();let b=t.slice(0,g[0]);for(let S=0;S({indentAtStart:e?t.indent.length:t.indentAtStart,lineWidth:t.options.lineWidth,minContentWidth:t.options.minContentWidth}),L8=t=>/^(%|---|\.\.\.)/m.test(t);function vBA(t,e,A){if(!e||e<0)return!1;let i=e-A,n=t.length;if(n<=i)return!1;for(let o=0,a=0;oi)return!0;if(a=o+1,n-a<=i)return!1}return!0}function k4(t,e){let A=JSON.stringify(t);if(e.options.doubleQuotedAsJSON)return A;let{implicitKey:i}=e,n=e.options.doubleQuotedMinMultiLineLength,o=e.indent||(L8(t)?" ":""),a="",r=0;for(let s=0,g=A[s];g;g=A[++s])if(g===" "&&A[s+1]==="\\"&&A[s+2]==="n"&&(a+=A.slice(r,s)+"\\ ",s+=1,r=s,g="\\"),g==="\\")switch(A[s+1]){case"u":{a+=A.slice(r,s);let l=A.substr(s+2,4);switch(l){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:l.substr(0,2)==="00"?a+="\\x"+l.substr(2):a+=A.substr(s,6)}s+=5,r=s+1}break;case"n":if(i||A[s+2]==='"'||A.length -`;let C,I;for(I=A.length;I>0;--I){let D=A[I-1];if(D!==` -`&&D!==" "&&D!==" ")break}let d=A.substring(I),B=d.indexOf(` -`);B===-1?C="-":A===d||B!==d.length-1?(C="+",o&&o()):C="",d&&(A=A.slice(0,-d.length),d[d.length-1]===` -`&&(d=d.slice(0,-1)),d=d.replace(pk,`$&${g}`));let E=!1,Q,f=-1;for(Q=0;Q{F=!0});let U=M4(`${b}${D}${d}`,g,N8,_);if(!F)return`>${M} -${g}${U}`}return A=A.replace(/\n+/g,`$&${g}`),`|${M} -${g}${b}${A}${d}`}function bBA(t,e,A,i){let{type:n,value:o}=t,{actualString:a,implicitKey:r,indent:s,indentStep:g,inFlow:l}=e;if(r&&o.includes(` -`)||l&&/[[\]{},]/.test(o))return fE(o,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(o))return r||l||!o.includes(` -`)?fE(o,e):F8(t,e,A,i);if(!r&&!l&&n!==zt.PLAIN&&o.includes(` -`))return F8(t,e,A,i);if(L8(o)){if(s==="")return e.forceBlockIndent=!0,F8(t,e,A,i);if(r&&s===g)return fE(o,e)}let C=o.replace(/\n+/g,`$& -${s}`);if(a){let I=E=>E.default&&E.tag!=="tag:yaml.org,2002:str"&&E.test?.test(C),{compat:d,tags:B}=e.doc.schema;if(B.some(I)||d?.some(I))return fE(o,e)}return r?C:M4(C,s,fk,_8(e,!1))}function W1(t,e,A,i){let{implicitKey:n,inFlow:o}=e,a=typeof t.value=="string"?t:Object.assign({},t,{value:String(t.value)}),{type:r}=t;r!==zt.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(r=zt.QUOTE_DOUBLE);let s=l=>{switch(l){case zt.BLOCK_FOLDED:case zt.BLOCK_LITERAL:return n||o?fE(a.value,e):F8(a,e,A,i);case zt.QUOTE_DOUBLE:return k4(a.value,e);case zt.QUOTE_SINGLE:return mk(a.value,e);case zt.PLAIN:return bBA(a,e,A,i);default:return null}},g=s(r);if(g===null){let{defaultKeyType:l,defaultStringType:C}=e.options,I=n&&l||C;if(g=s(I),g===null)throw new Error(`Unsupported default string type ${I}`)}return g}function G8(t,e){let A=Object.assign({blockQuote:!0,commentString:Oz,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},t.schema.toStringOptions,e),i;switch(A.collectionStyle){case"block":i=!1;break;case"flow":i=!0;break;default:i=null}return{anchors:new Set,doc:t,flowCollectionPadding:A.flowCollectionPadding?" ":"",indent:"",indentStep:typeof A.indent=="number"?" ".repeat(A.indent):" ",inFlow:i,options:A}}function MBA(t,e){if(e.tag){let n=t.filter(o=>o.tag===e.tag);if(n.length>0)return n.find(o=>o.format===e.format)??n[0]}let A,i;if(Yi(e)){i=e.value;let n=t.filter(o=>o.identify?.(i));if(n.length>1){let o=n.filter(a=>a.test);o.length>0&&(n=o)}A=n.find(o=>o.format===e.format)??n.find(o=>!o.format)}else i=e,A=t.find(n=>n.nodeClass&&i instanceof n.nodeClass);if(!A){let n=i?.constructor?.name??(i===null?"null":typeof i);throw new Error(`Tag not resolved for ${n} value`)}return A}function kBA(t,e,{anchors:A,doc:i}){if(!i.directives)return"";let n=[],o=(Yi(t)||so(t))&&t.anchor;o&&S8(o)&&(A.add(o),n.push(`&${o}`));let a=t.tag??(e.default?null:e.tag);return a&&n.push(i.directives.tagString(a)),n.join(" ")}function wC(t,e,A,i){if(mn(t))return t.toString(e,A,i);if(hl(t)){if(e.doc.directives)return t.toString(e);if(e.resolvedAliases?.has(t))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(t):e.resolvedAliases=new Set([t]),t=t.resolve(e.doc)}let n,o=yn(t)?t:e.doc.createNode(t,{onTagObj:s=>n=s});n??(n=MBA(e.doc.schema.tags,o));let a=kBA(o,n,e);a.length>0&&(e.indentAtStart=(e.indentAtStart??0)+a.length+1);let r=typeof n.stringify=="function"?n.stringify(o,e,A,i):Yi(o)?W1(o,e,A,i):o.toString(e,A,i);return a?Yi(o)||r[0]==="{"||r[0]==="["?`${a} ${r}`:`${a} -${e.indent}${r}`:r}function jz({key:t,value:e},A,i,n){let{allNullValues:o,doc:a,indent:r,indentStep:s,options:{commentString:g,indentSeq:l,simpleKeys:C}}=A,I=yn(t)&&t.comment||null;if(C){if(I)throw new Error("With simple keys, key nodes cannot have comments");if(so(t)||!yn(t)&&typeof t=="object"){let _="With simple keys, collection cannot be used as a key value";throw new Error(_)}}let d=!C&&(!t||I&&e==null&&!A.inFlow||so(t)||(Yi(t)?t.type===zt.BLOCK_FOLDED||t.type===zt.BLOCK_LITERAL:typeof t=="object"));A=Object.assign({},A,{allNullValues:!1,implicitKey:!d&&(C||!o),indent:r+s});let B=!1,E=!1,Q=wC(t,A,()=>B=!0,()=>E=!0);if(!d&&!A.inFlow&&Q.length>1024){if(C)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");d=!0}if(A.inFlow){if(o||e==null)return B&&i&&i(),Q===""?"?":d?`? ${Q}`:Q}else if(o&&!C||e==null&&d)return Q=`? ${Q}`,I&&!B?Q+=p0(Q,A.indent,g(I)):E&&n&&n(),Q;B&&(I=null),d?(I&&(Q+=p0(Q,A.indent,g(I))),Q=`? ${Q} -${r}:`):(Q=`${Q}:`,I&&(Q+=p0(Q,A.indent,g(I))));let f,b,S;yn(e)?(f=!!e.spaceBefore,b=e.commentBefore,S=e.comment):(f=!1,b=null,S=null,e&&typeof e=="object"&&(e=a.createNode(e))),A.implicitKey=!1,!d&&!I&&Yi(e)&&(A.indentAtStart=Q.length+1),E=!1,!l&&s.length>=2&&!A.inFlow&&!d&&dc(e)&&!e.flow&&!e.tag&&!e.anchor&&(A.indent=A.indent.substring(2));let M=!1,D=wC(e,A,()=>M=!0,()=>E=!0),F=" ";if(I||f||b){if(F=f?` -`:"",b){let _=g(b);F+=` -${ul(_,A.indent)}`}D===""&&!A.inFlow?F===` -`&&S&&(F=` - -`):F+=` -${A.indent}`}else if(!d&&so(e)){let _=D[0],U=D.indexOf(` -`),J=U!==-1,j=A.inFlow??e.flow??e.items.length===0;if(J||!j){let AA=!1;if(J&&(_==="&"||_==="!")){let O=D.indexOf(" ");_==="&"&&O!==-1&&Ot===U8||typeof t=="symbol"&&t.description===U8,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new zt(Symbol(U8)),{addToJSMap:Dk}),stringify:()=>U8},qz=(t,e)=>(Bc.identify(e)||Yi(e)&&(!e.type||e.type===zt.PLAIN)&&Bc.identify(e.value))&&t?.doc.schema.tags.some(A=>A.tag===Bc.tag&&A.default);function Dk(t,e,A){if(A=t&&hl(A)?A.resolve(t.doc):A,dc(A))for(let i of A.items)wk(t,e,i);else if(Array.isArray(A))for(let i of A)wk(t,e,i);else wk(t,e,A)}function wk(t,e,A){let i=t&&hl(A)?A.resolve(t.doc):A;if(!Ic(i))throw new Error("Merge sources must be maps or map aliases");let n=i.toJSON(null,t,Map);for(let[o,a]of n)e instanceof Map?e.has(o)||e.set(o,a):e instanceof Set?e.add(o):Object.prototype.hasOwnProperty.call(e,o)||Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0});return e}function J8(t,e,{key:A,value:i}){if(yn(A)&&A.addToJSMap)A.addToJSMap(t,e,i);else if(qz(t,A))Dk(t,e,i);else{let n=Er(A,"",t);if(e instanceof Map)e.set(n,Er(i,n,t));else if(e instanceof Set)e.add(n);else{let o=SBA(A,n,t),a=Er(i,o,t);o in e?Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0}):e[o]=a}}return e}function SBA(t,e,A){if(e===null)return"";if(typeof e!="object")return String(e);if(yn(t)&&A?.doc){let i=G8(A.doc,{});i.anchors=new Set;for(let o of A.anchors.keys())i.anchors.add(o.anchor);i.inFlow=!0,i.inStringifyKey=!0;let n=t.toString(i);if(!A.mapKeyWarned){let o=JSON.stringify(n);o.length>40&&(o=o.substring(0,36)+'..."'),K8(A.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${o}. Set mapAsMap: true to use object keys.`),A.mapKeyWarned=!0}return n}return JSON.stringify(e)}function mE(t,e,A){let i=pC(t,void 0,A),n=pC(e,void 0,A);return new Ja(i,n)}var Ja=class t{constructor(e,A=null){Object.defineProperty(this,Ks,{value:Qk}),this.key=e,this.value=A}clone(e){let{key:A,value:i}=this;return yn(A)&&(A=A.clone(e)),yn(i)&&(i=i.clone(e)),new t(A,i)}toJSON(e,A){let i=A?.mapAsMap?new Map:{};return J8(A,i,this)}toString(e,A,i){return e?.doc?jz(this,e,A,i):JSON.stringify(this)}};function T8(t,e,A){return(e.inFlow??t.flow?RBA:xBA)(t,e,A)}function xBA({comment:t,items:e},A,{blockItemPrefix:i,flowChars:n,itemIndent:o,onChompKeep:a,onComment:r}){let{indent:s,options:{commentString:g}}=A,l=Object.assign({},A,{indent:o,type:null}),C=!1,I=[];for(let B=0;BQ=null,()=>C=!0);Q&&(f+=p0(f,o,g(Q))),C&&Q&&(C=!1),I.push(i+f)}let d;if(I.length===0)d=n.start+n.end;else{d=I[0];for(let B=1;BQ=null);Bl||f.includes(` -`))&&(g=!0),C.push(f),l=C.length}let{start:I,end:d}=A;if(C.length===0)return I+d;if(!g){let B=C.reduce((E,Q)=>E+Q.length+2,2);g=e.options.lineWidth>0&&B>e.options.lineWidth}if(g){let B=I;for(let E of C)B+=E?` -${o}${n}${E}`:` -`;return`${B} -${n}${d}`}else return`${I}${a}${C.join(" ")}${a}${d}`}function Y8({indent:t,options:{commentString:e}},A,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let o=ul(e(i),t);A.push(o.trimStart())}}function O2(t,e){let A=Yi(e)?e.value:e;for(let i of t)if(mn(i)&&(i.key===e||i.key===A||Yi(i.key)&&i.key.value===A))return i}var Za=class extends hE{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(cc,e),this.items=[]}static from(e,A,i){let{keepUndefined:n,replacer:o}=i,a=new this(e),r=(s,g)=>{if(typeof o=="function")g=o.call(A,s,g);else if(Array.isArray(o)&&!o.includes(s))return;(g!==void 0||n)&&a.items.push(mE(s,g,i))};if(A instanceof Map)for(let[s,g]of A)r(s,g);else if(A&&typeof A=="object")for(let s of Object.keys(A))r(s,A[s]);return typeof e.sortMapEntries=="function"&&a.items.sort(e.sortMapEntries),a}add(e,A){let i;mn(e)?i=e:!e||typeof e!="object"||!("key"in e)?i=new Ja(e,e?.value):i=new Ja(e.key,e.value);let n=O2(this.items,i.key),o=this.schema?.sortMapEntries;if(n){if(!A)throw new Error(`Key ${i.key} already set`);Yi(n.value)&&R8(i.value)?n.value.value=i.value:n.value=i.value}else if(o){let a=this.items.findIndex(r=>o(i,r)<0);a===-1?this.items.push(i):this.items.splice(a,0,i)}else this.items.push(i)}delete(e){let A=O2(this.items,e);return A?this.items.splice(this.items.indexOf(A),1).length>0:!1}get(e,A){let n=O2(this.items,e)?.value;return(!A&&Yi(n)?n.value:n)??void 0}has(e){return!!O2(this.items,e)}set(e,A){this.add(new Ja(e,A),!0)}toJSON(e,A,i){let n=i?new i:A?.mapAsMap?new Map:{};A?.onCreate&&A.onCreate(n);for(let o of this.items)J8(A,n,o);return n}toString(e,A,i){if(!e)return JSON.stringify(this);for(let n of this.items)if(!mn(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),T8(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:i,onComment:A})}};var Ec={collection:"map",default:!0,nodeClass:Za,tag:"tag:yaml.org,2002:map",resolve(t,e){return Ic(t)||e("Expected a mapping for this tag"),t},createNode:(t,e,A)=>Za.from(t,e,A)};var ds=class extends hE{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(fC,e),this.items=[]}add(e){this.items.push(e)}delete(e){let A=H8(e);return typeof A!="number"?!1:this.items.splice(A,1).length>0}get(e,A){let i=H8(e);if(typeof i!="number")return;let n=this.items[i];return!A&&Yi(n)?n.value:n}has(e){let A=H8(e);return typeof A=="number"&&A=0?e:null}var Qc={collection:"seq",default:!0,nodeClass:ds,tag:"tag:yaml.org,2002:seq",resolve(t,e){return dc(t)||e("Expected a sequence for this tag"),t},createNode:(t,e,A)=>ds.from(t,e,A)};var P2={identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify(t,e,A,i){return e=Object.assign({actualString:!0},e),W1(t,e,A,i)}};var Z1={identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new zt(null),stringify:({source:t},e)=>typeof t=="string"&&Z1.test.test(t)?t:e.options.nullStr};var S4={identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:t=>new zt(t[0]==="t"||t[0]==="T"),stringify({source:t,value:e},A){if(t&&S4.test.test(t)){let i=t[0]==="t"||t[0]==="T";if(e===i)return t}return e?A.options.trueStr:A.options.falseStr}};function Bs({format:t,minFractionDigits:e,tag:A,value:i}){if(typeof i=="bigint")return String(i);let n=typeof i=="number"?i:Number(i);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let o=Object.is(i,-0)?"-0":JSON.stringify(i);if(!t&&e&&(!A||A==="tag:yaml.org,2002:float")&&/^\d/.test(o)){let a=o.indexOf(".");a<0&&(a=o.length,o+=".");let r=e-(o.length-a-1);for(;r-- >0;)o+="0"}return o}var z8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Bs},O8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Bs(t)}},P8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(t){let e=new zt(parseFloat(t)),A=t.indexOf(".");return A!==-1&&t[t.length-1]==="0"&&(e.minFractionDigits=t.length-A-1),e},stringify:Bs};var j8=t=>typeof t=="bigint"||Number.isInteger(t),yk=(t,e,A,{intAsBigInt:i})=>i?BigInt(t):parseInt(t.substring(e),A);function Vz(t,e,A){let{value:i}=t;return j8(i)&&i>=0?A+i.toString(e):Bs(t)}var q8={identify:t=>j8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(t,e,A)=>yk(t,2,8,A),stringify:t=>Vz(t,8,"0o")},V8={identify:j8,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(t,e,A)=>yk(t,0,10,A),stringify:Bs},W8={identify:t=>j8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(t,e,A)=>yk(t,2,16,A),stringify:t=>Vz(t,16,"0x")};var Wz=[Ec,Qc,P2,Z1,S4,q8,V8,W8,z8,O8,P8];function Zz(t){return typeof t=="bigint"||Number.isInteger(t)}var Z8=({value:t})=>JSON.stringify(t),NBA=[{identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify:Z8},{identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Z8},{identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:t=>t==="true",stringify:Z8},{identify:Zz,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(t,e,{intAsBigInt:A})=>A?BigInt(t):parseInt(t,10),stringify:({value:t})=>Zz(t)?t.toString():JSON.stringify(t)},{identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:t=>parseFloat(t),stringify:Z8}],FBA={default:!0,tag:"",test:/^/,resolve(t,e){return e(`Unresolved plain scalar ${JSON.stringify(t)}`),t}},Xz=[Ec,Qc].concat(NBA,FBA);var x4={identify:t=>t instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(t,e){if(typeof atob=="function"){let A=atob(t.replace(/[\n\r]/g,"")),i=new Uint8Array(A.length);for(let n=0;n1&&e("Each pair must have its own sequence indicator");let n=i.items[0]||new Ja(new zt(null));if(i.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${i.commentBefore} -${n.key.commentBefore}`:i.commentBefore),i.comment){let o=n.value??n.key;o.comment=o.comment?`${i.comment} -${o.comment}`:i.comment}i=n}t.items[A]=mn(i)?i:new Ja(i)}}else e("Expected a sequence for this tag");return t}function bk(t,e,A){let{replacer:i}=A,n=new ds(t);n.tag="tag:yaml.org,2002:pairs";let o=0;if(e&&Symbol.iterator in Object(e))for(let a of e){typeof i=="function"&&(a=i.call(e,String(o++),a));let r,s;if(Array.isArray(a))if(a.length===2)r=a[0],s=a[1];else throw new TypeError(`Expected [key, value] tuple: ${a}`);else if(a&&a instanceof Object){let g=Object.keys(a);if(g.length===1)r=g[0],s=a[r];else throw new TypeError(`Expected tuple with one key, not ${g.length} keys`)}else r=a;n.items.push(mE(r,s,A))}return n}var R4={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:vk,createNode:bk};var Mk=(()=>{class t extends ds{constructor(){super(),this.add=Za.prototype.add.bind(this),this.delete=Za.prototype.delete.bind(this),this.get=Za.prototype.get.bind(this),this.has=Za.prototype.has.bind(this),this.set=Za.prototype.set.bind(this),this.tag=t.tag}toJSON(A,i){if(!i)return super.toJSON(A);let n=new Map;i?.onCreate&&i.onCreate(n);for(let o of this.items){let a,r;if(mn(o)?(a=Er(o.key,"",i),r=Er(o.value,a,i)):a=Er(o,"",i),n.has(a))throw new Error("Ordered maps must not include duplicate keys");n.set(a,r)}return n}static from(A,i,n){let o=bk(A,i,n),a=new this;return a.items=o.items,a}}return t.tag="tag:yaml.org,2002:omap",t})(),N4={collection:"seq",identify:t=>t instanceof Map,nodeClass:Mk,default:!1,tag:"tag:yaml.org,2002:omap",resolve(t,e){let A=vk(t,e),i=[];for(let{key:n}of A.items)Yi(n)&&(i.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):i.push(n.value));return Object.assign(new Mk,A)},createNode:(t,e,A)=>Mk.from(t,e,A)};function $z({value:t,source:e},A){return e&&(t?kk:Sk).test.test(e)?e:t?A.options.trueStr:A.options.falseStr}var kk={identify:t=>t===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new zt(!0),stringify:$z},Sk={identify:t=>t===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new zt(!1),stringify:$z};var AO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Bs},eO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t.replace(/_/g,"")),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Bs(t)}},tO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(t){let e=new zt(parseFloat(t.replace(/_/g,""))),A=t.indexOf(".");if(A!==-1){let i=t.substring(A+1).replace(/_/g,"");i[i.length-1]==="0"&&(e.minFractionDigits=i.length)}return e},stringify:Bs};var F4=t=>typeof t=="bigint"||Number.isInteger(t);function X8(t,e,A,{intAsBigInt:i}){let n=t[0];if((n==="-"||n==="+")&&(e+=1),t=t.substring(e).replace(/_/g,""),i){switch(A){case 2:t=`0b${t}`;break;case 8:t=`0o${t}`;break;case 16:t=`0x${t}`;break}let a=BigInt(t);return n==="-"?BigInt(-1)*a:a}let o=parseInt(t,A);return n==="-"?-1*o:o}function xk(t,e,A){let{value:i}=t;if(F4(i)){let n=i.toString(e);return i<0?"-"+A+n.substr(1):A+n}return Bs(t)}var iO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(t,e,A)=>X8(t,2,2,A),stringify:t=>xk(t,2,"0b")},nO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(t,e,A)=>X8(t,1,8,A),stringify:t=>xk(t,8,"0")},oO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(t,e,A)=>X8(t,0,10,A),stringify:Bs},aO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(t,e,A)=>X8(t,2,16,A),stringify:t=>xk(t,16,"0x")};var Rk=(()=>{class t extends Za{constructor(A){super(A),this.tag=t.tag}add(A){let i;mn(A)?i=A:A&&typeof A=="object"&&"key"in A&&"value"in A&&A.value===null?i=new Ja(A.key,null):i=new Ja(A,null),O2(this.items,i.key)||this.items.push(i)}get(A,i){let n=O2(this.items,A);return!i&&mn(n)?Yi(n.key)?n.key.value:n.key:n}set(A,i){if(typeof i!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof i}`);let n=O2(this.items,A);n&&!i?this.items.splice(this.items.indexOf(n),1):!n&&i&&this.items.push(new Ja(A))}toJSON(A,i){return super.toJSON(A,i,Set)}toString(A,i,n){if(!A)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},A,{allNullValues:!0}),i,n);throw new Error("Set items must all have null values")}static from(A,i,n){let{replacer:o}=n,a=new this(A);if(i&&Symbol.iterator in Object(i))for(let r of i)typeof o=="function"&&(r=o.call(i,r,r)),a.items.push(mE(r,null,n));return a}}return t.tag="tag:yaml.org,2002:set",t})(),_4={collection:"map",identify:t=>t instanceof Set,nodeClass:Rk,default:!1,tag:"tag:yaml.org,2002:set",createNode:(t,e,A)=>Rk.from(t,e,A),resolve(t,e){if(Ic(t)){if(t.hasAllNullValues(!0))return Object.assign(new Rk,t);e("Set items must all have null values")}else e("Expected a mapping for this tag");return t}};function Nk(t,e){let A=t[0],i=A==="-"||A==="+"?t.substring(1):t,n=a=>e?BigInt(a):Number(a),o=i.replace(/_/g,"").split(":").reduce((a,r)=>a*n(60)+n(r),n(0));return A==="-"?n(-1)*o:o}function rO(t){let{value:e}=t,A=a=>a;if(typeof e=="bigint")A=a=>BigInt(a);else if(isNaN(e)||!isFinite(e))return Bs(t);let i="";e<0&&(i="-",e*=A(-1));let n=A(60),o=[e%n];return e<60?o.unshift(0):(e=(e-o[0])/n,o.unshift(e%n),e>=60&&(e=(e-o[0])/n,o.unshift(e))),i+o.map(a=>String(a).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var $8={identify:t=>typeof t=="bigint"||Number.isInteger(t),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(t,e,{intAsBigInt:A})=>Nk(t,A),stringify:rO},Aw={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:t=>Nk(t,!1),stringify:rO},pE={identify:t=>t instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(t){let e=t.match(pE.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,A,i,n,o,a,r]=e.map(Number),s=e[7]?Number((e[7]+"00").substr(1,3)):0,g=Date.UTC(A,i-1,n,o||0,a||0,r||0,s),l=e[8];if(l&&l!=="Z"){let C=Nk(l,!1);Math.abs(C)<30&&(C*=60),g-=6e4*C}return new Date(g)},stringify:({value:t})=>t?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};var Fk=[Ec,Qc,P2,Z1,kk,Sk,iO,nO,oO,aO,AO,eO,tO,x4,Bc,N4,R4,_4,$8,Aw,pE];var sO=new Map([["core",Wz],["failsafe",[Ec,Qc,P2]],["json",Xz],["yaml11",Fk],["yaml-1.1",Fk]]),gO={binary:x4,bool:S4,float:P8,floatExp:O8,floatNaN:z8,floatTime:Aw,int:V8,intHex:W8,intOct:q8,intTime:$8,map:Ec,merge:Bc,null:Z1,omap:N4,pairs:R4,seq:Qc,set:_4,timestamp:pE},lO={"tag:yaml.org,2002:binary":x4,"tag:yaml.org,2002:merge":Bc,"tag:yaml.org,2002:omap":N4,"tag:yaml.org,2002:pairs":R4,"tag:yaml.org,2002:set":_4,"tag:yaml.org,2002:timestamp":pE};function ew(t,e,A){let i=sO.get(e);if(i&&!t)return A&&!i.includes(Bc)?i.concat(Bc):i.slice();let n=i;if(!n)if(Array.isArray(t))n=[];else{let o=Array.from(sO.keys()).filter(a=>a!=="yaml11").map(a=>JSON.stringify(a)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${o} or define customTags array`)}if(Array.isArray(t))for(let o of t)n=n.concat(o);else typeof t=="function"&&(n=t(n.slice()));return A&&(n=n.concat(Bc)),n.reduce((o,a)=>{let r=typeof a=="string"?gO[a]:a;if(!r){let s=JSON.stringify(a),g=Object.keys(gO).map(l=>JSON.stringify(l)).join(", ");throw new Error(`Unknown custom tag ${s}; use one of ${g}`)}return o.includes(r)||o.push(r),o},[])}var _BA=(t,e)=>t.keye.key?1:0,L4=class t{constructor({compat:e,customTags:A,merge:i,resolveKnownTags:n,schema:o,sortMapEntries:a,toStringDefaults:r}){this.compat=Array.isArray(e)?ew(e,"compat"):e?ew(null,e):null,this.name=typeof o=="string"&&o||"core",this.knownTags=n?lO:{},this.tags=ew(A,this.name,i),this.toStringOptions=r??null,Object.defineProperty(this,cc,{value:Ec}),Object.defineProperty(this,Tg,{value:P2}),Object.defineProperty(this,fC,{value:Qc}),this.sortMapEntries=typeof a=="function"?a:a===!0?_BA:null}clone(){let e=Object.create(t.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function cO(t,e){let A=[],i=e.directives===!0;if(e.directives!==!1&&t.directives){let s=t.directives.toString(t);s?(A.push(s),i=!0):t.directives.docStart&&(i=!0)}i&&A.push("---");let n=G8(t,e),{commentString:o}=n.options;if(t.commentBefore){A.length!==1&&A.unshift("");let s=o(t.commentBefore);A.unshift(ul(s,""))}let a=!1,r=null;if(t.contents){if(yn(t.contents)){if(t.contents.spaceBefore&&i&&A.push(""),t.contents.commentBefore){let l=o(t.contents.commentBefore);A.push(ul(l,""))}n.forceBlockIndent=!!t.comment,r=t.contents.comment}let s=r?void 0:()=>a=!0,g=wC(t.contents,n,()=>r=null,s);r&&(g+=p0(g,"",o(r))),(g[0]==="|"||g[0]===">")&&A[A.length-1]==="---"?A[A.length-1]=`--- ${g}`:A.push(g)}else A.push(wC(t.contents,n));if(t.directives?.docEnd)if(t.comment){let s=o(t.comment);s.includes(` -`)?(A.push("..."),A.push(ul(s,""))):A.push(`... ${s}`)}else A.push("...");else{let s=t.comment;s&&a&&(s=s.replace(/^\n+/,"")),s&&((!a||r)&&A[A.length-1]!==""&&A.push(""),A.push(ul(o(s),"")))}return A.join(` -`)+` -`}var DC=class t{constructor(e,A,i){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Ks,{value:b8});let n=null;typeof A=="function"||Array.isArray(A)?n=A:i===void 0&&A&&(i=A,A=void 0);let o=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},i);this.options=o;let{version:a}=o;i?._directives?(this.directives=i._directives.atDocument(),this.directives.yaml.explicit&&(a=this.directives.yaml.version)):this.directives=new QE({version:a}),this.setSchema(a,i),this.contents=e===void 0?null:this.createNode(e,n,i)}clone(){let e=Object.create(t.prototype,{[Ks]:{value:b8}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=yn(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){wE(this.contents)&&this.contents.add(e)}addIn(e,A){wE(this.contents)&&this.contents.addIn(e,A)}createAlias(e,A){if(!e.anchor){let i=hk(this);e.anchor=!A||i.has(A)?uk(A||"a",i):A}return new mC(e.anchor)}createNode(e,A,i){let n;if(typeof A=="function")e=A.call({"":e},"",e),n=A;else if(Array.isArray(A)){let Q=b=>typeof b=="number"||b instanceof String||b instanceof Number,f=A.filter(Q).map(String);f.length>0&&(A=A.concat(f)),n=A}else i===void 0&&A&&(i=A,A=void 0);let{aliasDuplicateObjects:o,anchorPrefix:a,flow:r,keepUndefined:s,onTagObj:g,tag:l}=i??{},{onAnchor:C,setAnchors:I,sourceObjects:d}=zz(this,a||"a"),B={aliasDuplicateObjects:o??!0,keepUndefined:s??!1,onAnchor:C,onTagObj:g,replacer:n,schema:this.schema,sourceObjects:d},E=pC(e,l,B);return r&&so(E)&&(E.flow=!0),I(),E}createPair(e,A,i={}){let n=this.createNode(e,null,i),o=this.createNode(A,null,i);return new Ja(n,o)}delete(e){return wE(this.contents)?this.contents.delete(e):!1}deleteIn(e){return uE(e)?this.contents==null?!1:(this.contents=null,!0):wE(this.contents)?this.contents.deleteIn(e):!1}get(e,A){return so(this.contents)?this.contents.get(e,A):void 0}getIn(e,A){return uE(e)?!A&&Yi(this.contents)?this.contents.value:this.contents:so(this.contents)?this.contents.getIn(e,A):void 0}has(e){return so(this.contents)?this.contents.has(e):!1}hasIn(e){return uE(e)?this.contents!==void 0:so(this.contents)?this.contents.hasIn(e):!1}set(e,A){this.contents==null?this.contents=v4(this.schema,[e],A):wE(this.contents)&&this.contents.set(e,A)}setIn(e,A){uE(e)?this.contents=A:this.contents==null?this.contents=v4(this.schema,Array.from(e),A):wE(this.contents)&&this.contents.setIn(e,A)}setSchema(e,A={}){typeof e=="number"&&(e=String(e));let i;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new QE({version:"1.1"}),i={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new QE({version:e}),i={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,i=null;break;default:{let n=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(A.schema instanceof Object)this.schema=A.schema;else if(i)this.schema=new L4(Object.assign(i,A));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:A,mapAsMap:i,maxAliasCount:n,onAnchor:o,reviver:a}={}){let r={anchors:new Map,doc:this,keep:!e,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},s=Er(this.contents,A??"",r);if(typeof o=="function")for(let{count:g,res:l}of r.anchors.values())o(l,g);return typeof a=="function"?H2(a,{"":s},"",s):s}toJSON(e,A){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:A})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let A=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${A}`)}return cO(this,e)}};function wE(t){if(so(t))return!0;throw new Error("Expected a YAML collection as document contents")}var G4=class extends Error{constructor(e,A,i,n){super(),this.name=e,this.code=i,this.message=n,this.pos=A}},hc=class extends G4{constructor(e,A,i){super("YAMLParseError",e,A,i)}},K4=class extends G4{constructor(e,A,i){super("YAMLWarning",e,A,i)}},_k=(t,e)=>A=>{if(A.pos[0]===-1)return;A.linePos=A.pos.map(r=>e.linePos(r));let{line:i,col:n}=A.linePos[0];A.message+=` at line ${i}, column ${n}`;let o=n-1,a=t.substring(e.lineStarts[i-1],e.lineStarts[i]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){let r=Math.min(o-39,a.length-79);a="\u2026"+a.substring(r),o-=r-1}if(a.length>80&&(a=a.substring(0,79)+"\u2026"),i>1&&/^ *$/.test(a.substring(0,o))){let r=t.substring(e.lineStarts[i-2],e.lineStarts[i-1]);r.length>80&&(r=r.substring(0,79)+`\u2026 -`),a=r+a}if(/[^ ]/.test(a)){let r=1,s=A.linePos[1];s?.line===i&&s.col>n&&(r=Math.max(1,Math.min(s.col-n,80-o)));let g=" ".repeat(o)+"^".repeat(r);A.message+=`: - -${a} -${g} -`}};function w0(t,{flow:e,indicator:A,next:i,offset:n,onError:o,parentIndent:a,startOnNewline:r}){let s=!1,g=r,l=r,C="",I="",d=!1,B=!1,E=null,Q=null,f=null,b=null,S=null,M=null,D=null;for(let U of t)switch(B&&(U.type!=="space"&&U.type!=="newline"&&U.type!=="comma"&&o(U.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),B=!1),E&&(g&&U.type!=="comment"&&U.type!=="newline"&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),E=null),U.type){case"space":!e&&(A!=="doc-start"||i?.type!=="flow-collection")&&U.source.includes(" ")&&(E=U),l=!0;break;case"comment":{l||o(U,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let J=U.source.substring(1)||" ";C?C+=I+J:C=J,I="",g=!1;break}case"newline":g?C?C+=U.source:(!M||A!=="seq-item-ind")&&(s=!0):I+=U.source,g=!0,d=!0,(Q||f)&&(b=U),l=!0;break;case"anchor":Q&&o(U,"MULTIPLE_ANCHORS","A node can have at most one anchor"),U.source.endsWith(":")&&o(U.offset+U.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),Q=U,D??(D=U.offset),g=!1,l=!1,B=!0;break;case"tag":{f&&o(U,"MULTIPLE_TAGS","A node can have at most one tag"),f=U,D??(D=U.offset),g=!1,l=!1,B=!0;break}case A:(Q||f)&&o(U,"BAD_PROP_ORDER",`Anchors and tags must be after the ${U.source} indicator`),M&&o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.source} in ${e??"collection"}`),M=U,g=A==="seq-item-ind"||A==="explicit-key-ind",l=!1;break;case"comma":if(e){S&&o(U,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),S=U,g=!1,l=!1;break}default:o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.type} token`),g=!1,l=!1}let F=t[t.length-1],_=F?F.offset+F.source.length:n;return B&&i&&i.type!=="space"&&i.type!=="newline"&&i.type!=="comma"&&(i.type!=="scalar"||i.source!=="")&&o(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),E&&(g&&E.indent<=a||i?.type==="block-map"||i?.type==="block-seq")&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:S,found:M,spaceBefore:s,comment:C,hasNewline:d,anchor:Q,tag:f,newlineAfterProp:b,end:_,start:D??_}}function j2(t){if(!t)return null;switch(t.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(t.source.includes(` -`))return!0;if(t.end){for(let e of t.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of t.items){for(let A of e.start)if(A.type==="newline")return!0;if(e.sep){for(let A of e.sep)if(A.type==="newline")return!0}if(j2(e.key)||j2(e.value))return!0}return!1;default:return!0}}function U4(t,e,A){if(e?.type==="flow-collection"){let i=e.end[0];i.indent===t&&(i.source==="]"||i.source==="}")&&j2(e)&&A(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function tw(t,e,A){let{uniqueKeys:i}=t.options;if(i===!1)return!1;let n=typeof i=="function"?i:(o,a)=>o===a||Yi(o)&&Yi(a)&&o.value===a.value;return e.some(o=>n(o.key,A))}var CO="All mapping items must start at the same column";function IO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=o?.nodeClass??Za,r=new a(A.schema);A.atRoot&&(A.atRoot=!1);let s=i.offset,g=null;for(let l of i.items){let{start:C,key:I,sep:d,value:B}=l,E=w0(C,{indicator:"explicit-key-ind",next:I??d?.[0],offset:s,onError:n,parentIndent:i.indent,startOnNewline:!0}),Q=!E.found;if(Q){if(I&&(I.type==="block-seq"?n(s,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in I&&I.indent!==i.indent&&n(s,"BAD_INDENT",CO)),!E.anchor&&!E.tag&&!d){g=E.end,E.comment&&(r.comment?r.comment+=` -`+E.comment:r.comment=E.comment);continue}(E.newlineAfterProp||j2(I))&&n(I??C[C.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else E.found?.indent!==i.indent&&n(s,"BAD_INDENT",CO);A.atKey=!0;let f=E.end,b=I?t(A,I,E,n):e(A,f,C,null,E,n);A.schema.compat&&U4(i.indent,I,n),A.atKey=!1,tw(A,r.items,b)&&n(f,"DUPLICATE_KEY","Map keys must be unique");let S=w0(d??[],{indicator:"map-value-ind",next:B,offset:b.range[2],onError:n,parentIndent:i.indent,startOnNewline:!I||I.type==="block-scalar"});if(s=S.end,S.found){Q&&(B?.type==="block-map"&&!S.hasNewline&&n(s,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),A.options.strict&&E.startt&&(t.type==="block-map"||t.type==="block-seq");function BO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=i.start.source==="{",r=a?"flow map":"flow sequence",s=o?.nodeClass??(a?Za:ds),g=new s(A.schema);g.flow=!0;let l=A.atRoot;l&&(A.atRoot=!1),A.atKey&&(A.atKey=!1);let C=i.offset+i.start.source.length;for(let Q=0;Q0){let Q=D0(B,E,A.options.strict,n);Q.comment&&(g.comment?g.comment+=` -`+Q.comment:g.comment=Q.comment),g.range=[i.offset,E,Q.offset]}else g.range=[i.offset,E,E];return g}function Kk(t,e,A,i,n,o){let a=A.type==="block-map"?IO(t,e,A,i,o):A.type==="block-seq"?dO(t,e,A,i,o):BO(t,e,A,i,o),r=a.constructor;return n==="!"||n===r.tagName?(a.tag=r.tagName,a):(n&&(a.tag=n),a)}function EO(t,e,A,i,n){let o=i.tag,a=o?e.directives.tagName(o.source,I=>n(o,"TAG_RESOLVE_FAILED",I)):null;if(A.type==="block-seq"){let{anchor:I,newlineAfterProp:d}=i,B=I&&o?I.offset>o.offset?I:o:I??o;B&&(!d||d.offsetI.tag===a&&I.collection===r);if(!s){let I=e.schema.knownTags[a];if(I?.collection===r)e.schema.tags.push(Object.assign({},I,{default:!1})),s=I;else return I?n(o,"BAD_COLLECTION_TYPE",`${I.tag} used for ${r} collection, but expects ${I.collection??"scalar"}`,!0):n(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${a}`,!0),Kk(t,e,A,n,a)}let g=Kk(t,e,A,n,a,s),l=s.resolve?.(g,I=>n(o,"TAG_RESOLVE_FAILED",I),e.options)??g,C=yn(l)?l:new zt(l);return C.range=g.range,C.tag=a,s?.format&&(C.format=s.format),C}function Uk(t,e,A){let i=e.offset,n=LBA(e,t.options.strict,A);if(!n)return{value:"",type:null,comment:"",range:[i,i,i]};let o=n.mode===">"?zt.BLOCK_FOLDED:zt.BLOCK_LITERAL,a=e.source?GBA(e.source):[],r=a.length;for(let E=a.length-1;E>=0;--E){let Q=a[E][1];if(Q===""||Q==="\r")r=E;else break}if(r===0){let E=n.chomp==="+"&&a.length>0?` -`.repeat(Math.max(1,a.length-1)):"",Q=i+n.length;return e.source&&(Q+=e.source.length),{value:E,type:o,comment:n.comment,range:[i,Q,Q]}}let s=e.indent+n.indent,g=e.offset+n.length,l=0;for(let E=0;Es&&(s=Q.length);else{Q.length=r;--E)a[E][0].length>s&&(r=E+1);let C="",I="",d=!1;for(let E=0;Es||f[0]===" "?(I===" "?I=` -`:!d&&I===` -`&&(I=` - -`),C+=I+Q.slice(s)+f,I=` -`,d=!0):f===""?I===` -`?C+=` -`:I=` -`:(C+=I+f,I=" ",d=!1)}switch(n.chomp){case"-":break;case"+":for(let E=r;EA(i+I,d,B);switch(n){case"scalar":r=zt.PLAIN,s=KBA(o,g);break;case"single-quoted-scalar":r=zt.QUOTE_SINGLE,s=UBA(o,g);break;case"double-quoted-scalar":r=zt.QUOTE_DOUBLE,s=JBA(o,g);break;default:return A(t,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[i,i+o.length,i+o.length]}}let l=i+o.length,C=D0(a,l,e,A);return{value:s,type:r,comment:C.comment,range:[i,l,C.offset]}}function KBA(t,e){let A="";switch(t[0]){case" ":A="a tab character";break;case",":A="flow indicator character ,";break;case"%":A="directive indicator character %";break;case"|":case">":{A=`block scalar indicator ${t[0]}`;break}case"@":case"`":{A=`reserved character ${t[0]}`;break}}return A&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${A}`),QO(t)}function UBA(t,e){return(t[t.length-1]!=="'"||t.length===1)&&e(t.length,"MISSING_CHAR","Missing closing 'quote"),QO(t.slice(1,-1)).replace(/''/g,"'")}function QO(t){let e,A;try{e=new RegExp(`(.*?)(?o?t.slice(o,i+1):n)}else A+=n}return(t[t.length-1]!=='"'||t.length===1)&&e(t.length,"MISSING_CHAR",'Missing closing "quote'),A}function YBA(t,e){let A="",i=t[e+1];for(;(i===" "||i===" "||i===` -`||i==="\r")&&!(i==="\r"&&t[e+2]!==` -`);)i===` -`&&(A+=` -`),e+=1,i=t[e+1];return A||(A=" "),{fold:A,offset:e}}var TBA={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:` -`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function HBA(t,e,A,i){let n=t.substr(e,A),a=n.length===A&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(a)){let r=t.substr(e-2,A+2);return i(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${r}`),r}return String.fromCodePoint(a)}function Yk(t,e,A,i){let{value:n,type:o,comment:a,range:r}=e.type==="block-scalar"?Uk(t,e,i):Jk(e,t.options.strict,i),s=A?t.directives.tagName(A.source,C=>i(A,"TAG_RESOLVE_FAILED",C)):null,g;t.options.stringKeys&&t.atKey?g=t.schema[Tg]:s?g=zBA(t.schema,n,s,A,i):e.type==="scalar"?g=OBA(t,n,e,i):g=t.schema[Tg];let l;try{let C=g.resolve(n,I=>i(A??e,"TAG_RESOLVE_FAILED",I),t.options);l=Yi(C)?C:new zt(C)}catch(C){let I=C instanceof Error?C.message:String(C);i(A??e,"TAG_RESOLVE_FAILED",I),l=new zt(n)}return l.range=r,l.source=n,o&&(l.type=o),s&&(l.tag=s),g.format&&(l.format=g.format),a&&(l.comment=a),l}function zBA(t,e,A,i,n){if(A==="!")return t[Tg];let o=[];for(let r of t.tags)if(!r.collection&&r.tag===A)if(r.default&&r.test)o.push(r);else return r;for(let r of o)if(r.test?.test(e))return r;let a=t.knownTags[A];return a&&!a.collection?(t.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${A}`,A!=="tag:yaml.org,2002:str"),t[Tg])}function OBA({atKey:t,directives:e,schema:A},i,n,o){let a=A.tags.find(r=>(r.default===!0||t&&r.default==="key")&&r.test?.test(i))||A[Tg];if(A.compat){let r=A.compat.find(s=>s.default&&s.test?.test(i))??A[Tg];if(a.tag!==r.tag){let s=e.tagString(a.tag),g=e.tagString(r.tag),l=`Value may be parsed as either ${s} or ${g}`;o(n,"TAG_RESOLVE_FAILED",l,!0)}}return a}function hO(t,e,A){if(e){A??(A=e.length);for(let i=A-1;i>=0;--i){let n=e[i];switch(n.type){case"space":case"comment":case"newline":t-=n.source.length;continue}for(n=e[++i];n?.type==="space";)t+=n.source.length,n=e[++i];break}}return t}var PBA={composeNode:Tk,composeEmptyNode:iw};function Tk(t,e,A,i){let n=t.atKey,{spaceBefore:o,comment:a,anchor:r,tag:s}=A,g,l=!0;switch(e.type){case"alias":g=jBA(t,e,i),(r||s)&&i(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":g=Yk(t,e,s,i),r&&(g.anchor=r.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":g=EO(PBA,t,e,A,i),r&&(g.anchor=r.source.substring(1));break;default:{let C=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;i(e,"UNEXPECTED_TOKEN",C),g=iw(t,e.offset,void 0,null,A,i),l=!1}}return r&&g.anchor===""&&i(r,"BAD_ALIAS","Anchor cannot be an empty string"),n&&t.options.stringKeys&&(!Yi(g)||typeof g.value!="string"||g.tag&&g.tag!=="tag:yaml.org,2002:str")&&i(s??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),o&&(g.spaceBefore=!0),a&&(e.type==="scalar"&&e.source===""?g.comment=a:g.commentBefore=a),t.options.keepSourceTokens&&l&&(g.srcToken=e),g}function iw(t,e,A,i,{spaceBefore:n,comment:o,anchor:a,tag:r,end:s},g){let l={type:"scalar",offset:hO(e,A,i),indent:-1,source:""},C=Yk(t,l,r,g);return a&&(C.anchor=a.source.substring(1),C.anchor===""&&g(a,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(C.spaceBefore=!0),o&&(C.comment=o,C.range[2]=s),C}function jBA({options:t},{offset:e,source:A,end:i},n){let o=new mC(A.substring(1));o.source===""&&n(e,"BAD_ALIAS","Alias cannot be an empty string"),o.source.endsWith(":")&&n(e+A.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let a=e+A.length,r=D0(i,a,t.strict,n);return o.range=[e,a,r.offset],r.comment&&(o.comment=r.comment),o}function uO(t,e,{offset:A,start:i,value:n,end:o},a){let r=Object.assign({_directives:e},t),s=new DC(void 0,r),g={atKey:!1,atRoot:!0,directives:s.directives,options:s.options,schema:s.schema},l=w0(i,{indicator:"doc-start",next:n??o?.[0],offset:A,onError:a,parentIndent:0,startOnNewline:!0});l.found&&(s.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!l.hasNewline&&a(l.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),s.contents=n?Tk(g,n,l,a):iw(g,l.end,i,null,l,a);let C=s.contents.range[2],I=D0(o,C,!1,a);return I.comment&&(s.comment=I.comment),s.range=[A,C,I.offset],s}function J4(t){if(typeof t=="number")return[t,t+1];if(Array.isArray(t))return t.length===2?t:[t[0],t[1]];let{offset:e,source:A}=t;return[e,e+(typeof A=="string"?A.length:1)]}function fO(t){let e="",A=!1,i=!1;for(let n=0;n{let a=J4(A);o?this.warnings.push(new K4(a,i,n)):this.errors.push(new hc(a,i,n))},this.directives=new QE({version:e.version||"1.2"}),this.options=e}decorate(e,A){let{comment:i,afterEmptyLine:n}=fO(this.prelude);if(i){let o=e.contents;if(A)e.comment=e.comment?`${e.comment} -${i}`:i;else if(n||e.directives.docStart||!o)e.commentBefore=i;else if(so(o)&&!o.flow&&o.items.length>0){let a=o.items[0];mn(a)&&(a=a.key);let r=a.commentBefore;a.commentBefore=r?`${i} -${r}`:i}else{let a=o.commentBefore;o.commentBefore=a?`${i} -${a}`:i}}A?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:fO(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,A=!1,i=-1){for(let n of e)yield*le(this.next(n));yield*le(this.end(A,i))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(A,i,n)=>{let o=J4(e);o[0]+=A,this.onError(o,"BAD_DIRECTIVE",i,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let A=uO(this.options,this.directives,e,this.onError);this.atDirectives&&!A.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(A,!1),this.doc&&(yield this.doc),this.doc=A,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let A=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,i=new hc(J4(e),"UNEXPECTED_TOKEN",A);this.atDirectives||!this.doc?this.errors.push(i):this.doc.errors.push(i);break}case"doc-end":{if(!this.doc){let i="Unexpected doc-end without preceding document";this.errors.push(new hc(J4(e),"UNEXPECTED_TOKEN",i));break}this.doc.directives.docEnd=!0;let A=D0(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),A.comment){let i=this.doc.comment;this.doc.comment=i?`${i} -${A.comment}`:A.comment}this.doc.range[2]=A.offset;break}default:this.errors.push(new hc(J4(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,A=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let i=Object.assign({_directives:this.directives},this.options),n=new DC(void 0,i);this.atDirectives&&this.onError(A,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,A,A],this.decorate(n,!1),yield n}}};var Hk=Symbol("break visit"),qBA=Symbol("skip children"),mO=Symbol("remove item");function X1(t,e){"type"in t&&t.type==="document"&&(t={start:t.start,value:t.value}),pO(Object.freeze([]),t,e)}X1.BREAK=Hk;X1.SKIP=qBA;X1.REMOVE=mO;X1.itemAtPath=(t,e)=>{let A=t;for(let[i,n]of e){let o=A?.[i];if(o&&"items"in o)A=o.items[n];else return}return A};X1.parentCollection=(t,e)=>{let A=X1.itemAtPath(t,e.slice(0,-1)),i=e[e.length-1][0],n=A?.[i];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function pO(t,e,A){let i=A(e,t);if(typeof i=="symbol")return i;for(let n of["key","value"]){let o=e[n];if(o&&"items"in o){for(let a=0;a":return"block-scalar-header"}return null}function uc(t){switch(t){case void 0:case" ":case` -`:case"\r":case" ":return!0;default:return!1}}var DO=new Set("0123456789ABCDEFabcdef"),WBA=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),ow=new Set(",[]{}"),ZBA=new Set(` ,[]{} -\r `),jk=t=>!t||ZBA.has(t),T4=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,A=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!A;let i=this.next??"stream";for(;i&&(A||this.hasChars(1));)i=yield*le(this.parseNext(i))}atLineEnd(){let e=this.pos,A=this.buffer[e];for(;A===" "||A===" ";)A=this.buffer[++e];return!A||A==="#"||A===` -`?!0:A==="\r"?this.buffer[e+1]===` -`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let A=this.buffer[e];if(this.indentNext>0){let i=0;for(;A===" ";)A=this.buffer[++i+e];if(A==="\r"){let n=this.buffer[i+e+1];if(n===` -`||!n&&!this.atEnd)return e+i+1}return A===` -`||i>=this.indentNext||!A&&!this.atEnd?e+i:-1}if(A==="-"||A==="."){let i=this.buffer.substr(e,3);if((i==="---"||i==="...")&&uc(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!uc(this.charAt(1))&&(this.indentNext=this.indentValue),yield*le(this.parseBlockStart())}*parseBlockStart(){let[e,A]=this.peek(2);if(!A&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&uc(A)){let i=(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=i,yield*le(this.parseBlockStart())}return"doc"}*parseDocument(){yield*le(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let A=yield*le(this.pushIndicators());switch(e[A]){case"#":yield*le(this.pushCount(e.length-A));case void 0:return yield*le(this.pushNewline()),yield*le(this.parseLineStart());case"{":case"[":return yield*le(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*le(this.pushCount(1)),"doc";case"*":return yield*le(this.pushUntil(jk)),"doc";case'"':case"'":return yield*le(this.parseQuotedScalar());case"|":case">":return A+=yield*le(this.parseBlockScalarHeader()),A+=yield*le(this.pushSpaces(!0)),yield*le(this.pushCount(e.length-A)),yield*le(this.pushNewline()),yield*le(this.parseBlockScalar());default:return yield*le(this.parsePlainScalar())}}*parseFlowCollection(){let e,A,i=-1;do e=yield*le(this.pushNewline()),e>0?(A=yield*le(this.pushSpaces(!1)),this.indentValue=i=A):A=0,A+=yield*le(this.pushSpaces(!0));while(e+A>0);let n=this.getLine();if(n===null)return this.setNext("flow");if((i!==-1&&i"0"&&A<="9")this.blockScalarIndent=Number(A)-1;else if(A!=="-")break}return yield*le(this.pushUntil(A=>uc(A)||A==="#"))}*parseBlockScalar(){let e=this.pos-1,A=0,i;A:for(let o=this.pos;i=this.buffer[o];++o)switch(i){case" ":A+=1;break;case` -`:e=o,A=0;break;case"\r":{let a=this.buffer[o+1];if(!a&&!this.atEnd)return this.setNext("block-scalar");if(a===` -`)break}default:break A}if(!i&&!this.atEnd)return this.setNext("block-scalar");if(A>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=A:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let o=this.continueScalar(e+1);if(o===-1)break;e=this.buffer.indexOf(` -`,o)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let n=e+1;for(i=this.buffer[n];i===" ";)i=this.buffer[++n];if(i===" "){for(;i===" "||i===" "||i==="\r"||i===` -`;)i=this.buffer[++n];e=n-1}else if(!this.blockScalarKeep)do{let o=e-1,a=this.buffer[o];a==="\r"&&(a=this.buffer[--o]);let r=o;for(;a===" ";)a=this.buffer[--o];if(a===` -`&&o>=this.pos&&o+1+A>r)e=o;else break}while(!0);return yield nw,yield*le(this.pushToIndex(e+1,!0)),yield*le(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,A=this.pos-1,i=this.pos-1,n;for(;n=this.buffer[++i];)if(n===":"){let o=this.buffer[i+1];if(uc(o)||e&&ow.has(o))break;A=i}else if(uc(n)){let o=this.buffer[i+1];if(n==="\r"&&(o===` -`?(i+=1,n=` -`,o=this.buffer[i+1]):A=i),o==="#"||e&&ow.has(o))break;if(n===` -`){let a=this.continueScalar(i+1);if(a===-1)break;i=Math.max(i,a-2)}}else{if(e&&ow.has(n))break;A=i}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield nw,yield*le(this.pushToIndex(A+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,A){let i=this.buffer.slice(this.pos,e);return i?(yield i,this.pos+=i.length,i.length):(A&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*le(this.pushTag()))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"&":return(yield*le(this.pushUntil(jk)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,A=this.charAt(1);if(uc(A)||e&&ow.has(A))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,A=this.buffer[e];for(;!uc(A)&&A!==">";)A=this.buffer[++e];return yield*le(this.pushToIndex(A===">"?e+1:e,!1))}else{let e=this.pos+1,A=this.buffer[e];for(;A;)if(WBA.has(A))A=this.buffer[++e];else if(A==="%"&&DO.has(this.buffer[e+1])&&DO.has(this.buffer[e+2]))A=this.buffer[e+=3];else break;return yield*le(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===` -`?yield*le(this.pushCount(1)):e==="\r"&&this.charAt(1)===` -`?yield*le(this.pushCount(2)):0}*pushSpaces(e){let A=this.pos-1,i;do i=this.buffer[++A];while(i===" "||e&&i===" ");let n=A-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=A),n}*pushUntil(e){let A=this.pos,i=this.buffer[A];for(;!e(i);)i=this.buffer[++A];return yield*le(this.pushToIndex(A,!1))}};var H4=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let A=0,i=this.lineStarts.length;for(;A>1;this.lineStarts[o]=0;)switch(t[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break A}for(;t[++e]?.type==="space";);return t.splice(e,t.length)}function vO(t){if(t.start.type==="flow-seq-start")for(let e of t.items)e.sep&&!e.value&&!q2(e.start,"explicit-key-ind")&&!q2(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,bO(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var z4=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new T4,this.onNewLine=e}*parse(e,A=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let i of this.lexer.lex(e,A))yield*le(this.next(i));A||(yield*le(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*le(this.step()),this.offset+=e.length;return}let A=wO(e);if(A)if(A==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=A,yield*le(this.step()),A){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let i=`Not a YAML token: ${e}`;yield*le(this.pop({type:"error",offset:this.offset,message:i,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*le(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*le(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*le(this.stream());switch(e.type){case"document":return yield*le(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*le(this.scalar(e));case"block-scalar":return yield*le(this.blockScalar(e));case"block-map":return yield*le(this.blockMap(e));case"block-seq":return yield*le(this.blockSequence(e));case"flow-collection":return yield*le(this.flowCollection(e));case"doc-end":return yield*le(this.documentEnd(e))}yield*le(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let A=e??this.stack.pop();if(!A)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield A;else{let i=this.peek(1);switch(A.type==="block-scalar"?A.indent="indent"in i?i.indent:0:A.type==="flow-collection"&&i.type==="document"&&(A.indent=0),A.type==="flow-collection"&&vO(A),i.type){case"document":i.value=A;break;case"block-scalar":i.props.push(A);break;case"block-map":{let n=i.items[i.items.length-1];if(n.value){i.items.push({start:[],key:A,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=A;else{Object.assign(n,{key:A,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=i.items[i.items.length-1];n.value?i.items.push({start:[],value:A}):n.value=A;break}case"flow-collection":{let n=i.items[i.items.length-1];!n||n.value?i.items.push({start:[],key:A,sep:[]}):n.sep?n.value=A:Object.assign(n,{key:A,sep:[]});return}default:yield*le(this.pop()),yield*le(this.pop(A))}if((i.type==="document"||i.type==="block-map"||i.type==="block-seq")&&(A.type==="block-map"||A.type==="block-seq")){let n=A.items[A.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&yO(n.start)===-1&&(A.indent===0||n.start.every(o=>o.type!=="comment"||o.indent=e.indent){let i=!this.onKeyLine&&this.indent===e.indent,n=i&&(A.sep||A.explicitKey)&&this.type!=="seq-item-ind",o=[];if(n&&A.sep&&!A.value){let a=[];for(let r=0;re.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=A.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":n||A.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"explicit-key-ind":!A.sep&&!A.explicitKey?(A.start.push(this.sourceToken),A.explicitKey=!0):n||A.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(A.explicitKey)if(A.sep)if(A.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(q2(A.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(bO(A.key)&&!q2(A.sep,"newline")){let a=DE(A.start),r=A.key,s=A.sep;s.push(this.sourceToken),delete A.key,delete A.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:r,sep:s}]})}else o.length>0?A.sep=A.sep.concat(o,this.sourceToken):A.sep.push(this.sourceToken);else if(q2(A.start,"newline"))Object.assign(A,{key:null,sep:[this.sourceToken]});else{let a=DE(A.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else A.sep?A.value||n?e.items.push({start:o,key:null,sep:[this.sourceToken]}):q2(A.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);n||A.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):A.sep?this.stack.push(a):(Object.assign(A,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){if(a.type==="block-seq"){if(!A.explicitKey&&A.sep&&!q2(A.sep,"newline")){yield*le(this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source}));return}}else i&&e.items.push({start:o});this.stack.push(a);return}}}}yield*le(this.pop()),yield*le(this.step())}*blockSequence(e){let A=e.items[e.items.length-1];switch(this.type){case"newline":if(A.value){let i="end"in A.value?A.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else A.start.push(this.sourceToken);return;case"space":case"comment":if(A.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(A.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,A.start),n.push(this.sourceToken),e.items.pop();return}}A.start.push(this.sourceToken)}return;case"anchor":case"tag":if(A.value||this.indent<=e.indent)break;A.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;A.value||q2(A.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return}if(this.indent>e.indent){let i=this.startBlockValue(e);if(i){this.stack.push(i);return}}yield*le(this.pop()),yield*le(this.step())}*flowCollection(e){let A=e.items[e.items.length-1];if(this.type==="flow-error-end"){let i;do yield*le(this.pop()),i=this.peek(1);while(i?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!A||A.sep?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return;case"map-value-ind":!A||A.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!A||A.value?e.items.push({start:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);!A||A.value?e.items.push({start:[],key:n,sep:[]}):A.sep?this.stack.push(n):Object.assign(A,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let i=this.startBlockValue(e);i?this.stack.push(i):(yield*le(this.pop()),yield*le(this.step()))}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===e.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*le(this.pop()),yield*le(this.step());else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=aw(i),o=DE(n);vO(e);let a=e.end.splice(1,e.end.length);a.push(this.sourceToken);let r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:o,key:e,sep:a}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*le(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let A=this.source.indexOf(` -`)+1;for(;A!==0;)this.onNewLine(this.offset+A),A=this.source.indexOf(` -`,A)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let A=aw(e),i=DE(A);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let A=aw(e),i=DE(A);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,A){return this.type!=="comment"||this.indent<=A?!1:e.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*le(this.pop()),yield*le(this.step());break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop()))}}};function XBA(t){let e=t.prettyErrors!==!1;return{lineCounter:t.lineCounter||e&&new H4||null,prettyErrors:e}}function MO(t,e={}){let{lineCounter:A,prettyErrors:i}=XBA(e),n=new z4(A?.addNewLine),o=new Y4(e),a=null;for(let r of o.compose(n.parse(t),!0,t.length))if(!a)a=r;else if(a.options.logLevel!=="silent"){a.errors.push(new hc(r.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&A&&(a.errors.forEach(_k(t,A)),a.warnings.forEach(_k(t,A))),a}function yE(t,e,A){let i;typeof e=="function"?i=e:A===void 0&&e&&typeof e=="object"&&(A=e);let n=MO(t,A);if(!n)return null;if(n.warnings.forEach(o=>K8(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:i},A))}function qk(t,e,A){let i=null;if(typeof e=="function"||Array.isArray(e)?i=e:A===void 0&&e&&(A=e),typeof A=="string"&&(A=A.length),typeof A=="number"){let n=Math.round(A);A=n<1?void 0:n>8?{indent:8}:{indent:n}}if(t===void 0){let{keepUndefined:n}=A??e??{};if(!n)return}return Cc(t)&&!i?t.toString(A):new DC(t,i,A).toString(A)}var y0=class t{static generateYamlFile(e,A,i,n,o=new Set){if(o.has(e.name))return;o.add(e.name);let a=e.isRoot?"root_agent.yaml":`${e.name}.yaml`,r=`${i}/${a}`,s=e.sub_agents?e.sub_agents.map(B=>({config_path:`./${B.name}.yaml`})):[],g={name:e.name,model:e.model,agent_class:e.agent_class,description:e.description||"",instruction:e.instruction,sub_agents:s,tools:t.buildToolsConfig(e.tools,n)};(!e.description||e.description.trim()==="")&&delete g.description,e.agent_class!="LlmAgent"&&(delete g.model,delete g.instruction,delete g.tools),e.agent_class==="LoopAgent"&&e.max_iterations&&(g.max_iterations=e.max_iterations);let l=t.buildCallbacksConfig(e.callbacks);Object.keys(l).length>0&&Object.assign(g,l);let C=qk(g),I=new Blob([C],{type:"application/x-yaml"}),d=new File([I],r,{type:"application/x-yaml"});A.append("files",d);for(let B of e.sub_agents??[])t.generateYamlFile(B,A,i,n,o);if(e.tools){for(let B of e.tools)if(B.toolType==="Agent Tool"){let E=B.toolAgentName||B.name;if(!E||E==="undefined"||E.trim()==="")continue;let Q=n.get(E);Q&&t.generateYamlFile(Q,A,i,n,o)}}}static buildToolsConfig(e,A){return!e||e.length===0?[]:e.map(i=>{let n={name:i.name};if(i.toolType==="Agent Tool"){n.name="AgentTool";let o=i.toolAgentName||i.name;if(!o||o==="undefined"||o.trim()==="")return null;let a=A.get(o);return n.args={agent:{config_path:`./${o}.yaml`},skip_summarization:a?.skip_summarization||!1},n}return i.args&&Object.keys(i.args).some(a=>{let r=i.args[a];return r!=null&&r!==""})&&(n.args=i.args),n}).filter(i=>i!==null)}static buildCallbacksConfig(e){if(!e||e.length===0)return{};let A={};return e.forEach(i=>{let n=`${i.type}_callbacks`;A[n]||(A[n]=[]),A[n].push({name:i.name})}),A}};function AEA(t,e){t&1&&(m(0,"mat-hint",3),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}var rw=class t{constructor(e,A){this.data=e;this.dialogRef=A}newAppName="";agentService=h(sg);_snackBar=h(J2);router=h(Cs);isNameValid(){let e=this.newAppName.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}createNewApp(){let e=this.newAppName.trim();if(!this.isNameValid()){this._snackBar.open("App name must start with a letter or underscore and can only contain letters, digits, and underscores.","OK");return}if(this.data.existingAppNames.includes(e)){this._snackBar.open("App name already exists. Please choose a different name.","OK");return}let A={agent_class:"LlmAgent",instruction:"You are the root agent that coordinates other agents.",isRoot:!0,model:"gemini-2.5-flash",name:e,sub_agents:[],tools:[]},i=new FormData,n=new Map;y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o?(this.router.navigate(["/"],{queryParams:{app:e,mode:"builder"}}).then(()=>{window.location.reload()}),this.dialogRef.close(!0)):this._snackBar.open("Something went wrong, please try again","OK")})}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-add-item-dialog"]],decls:10,vars:3,consts:[["mat-dialog-title","",1,"new-app-title"],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],[1,"validation-hint"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click","disabled"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create a new app"),w(),m(2,"mat-form-field",1)(3,"input",2),ho("ngModelChange",function(o){return ao(i.newAppName,o)||(i.newAppName=o),o}),tA("keydown.enter",function(){return i.createNewApp()}),w(),V(4,AEA,2,0,"mat-hint",3),w(),m(5,"mat-dialog-actions",4)(6,"button",5),K(7,"Cancel"),w(),m(8,"button",6),tA("click",function(){return i.createNewApp()}),K(9," Create "),w()()),A&2&&(p(3),Qo("ngModel",i.newAppName),p(),W(i.isNameValid()?-1:4),p(4),$("disabled",!i.isNameValid()))},dependencies:[Da,No,wa,Nn,uo,fo,Sa,Ua,fn,B0,R1],styles:[".new-app-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.validation-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mdc-dialog-supporting-text-color)}"]})};var eEA=["audioPlayer"],vE=class t{base64data=rt("");audioPlayerRef=ca("audioPlayer");audioSrc="";constructor(){}ngOnChanges(e){e.base64data&&this.base64data()&&this.setAudioSource(this.base64data())}setAudioSource(e){e.startsWith("data:")?this.audioSrc=e:this.audioSrc=`data:audio/mpeg;base64,${e}`,this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.load()}play(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.play()}pause(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.pause()}stop(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&(this.audioPlayerRef().nativeElement.pause(),this.audioPlayerRef().nativeElement.currentTime=0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-audio-player"]],viewQuery:function(A,i){A&1&&rs(i.audioPlayerRef,eEA,5),A&2&&Dr()},inputs:{base64data:[1,"base64data"]},features:[ti],decls:3,vars:1,consts:[["audioPlayer",""],["controls","",3,"src"]],template:function(A,i){A&1&&(li(0,"div"),Di(1,"audio",1,0),Ei()),A&2&&(p(),vo("src",i.audioSrc))},styles:[".audio-player-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;padding:15px;background-color:var(--audio-player-container-background-color);border-radius:8px;box-shadow:0 2px 5px var(--audio-player-container-box-shadow-color);margin:20px auto;max-width:350px}audio[_ngcontent-%COMP%]{outline:none;border-radius:5px;width:350px}.custom-controls[_ngcontent-%COMP%]{margin-top:10px;display:flex;gap:10px}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:8px 15px;border:none;border-radius:5px;background-color:var(--audio-player-custom-controls-button-background-color);color:var(--audio-player-custom-controls-button-color);cursor:pointer;font-size:14px;transition:background-color .2s ease}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background-color:var(--audio-player-custom-controls-button-hover-background-color)}"]})};function tEA(t,e){if(t&1&&Di(0,"img",5),t&2){let A=v(2);vo("src",A.displayContent,Ka)}}function iEA(t,e){t&1&&(li(0,"div",6),K(1," No image data provided. "),Ei())}function nEA(t,e){if(t&1&&(li(0,"div",3),V(1,tEA,1,1,"img",5),V(2,iEA,2,0,"div",6),Ei()),t&2){let A=v();p(),W(A.displayContent?1:-1),p(),W(A.displayContent?-1:2)}}function oEA(t,e){if(t&1&&Di(0,"div",4),t&2){let A=v();vo("innerHTML",A.displayContent,al)}}var V2=class t{displayContent=null;isSvgContent=!1;dialogRef=h(bo);data=h(Ca);safeValuesService=h(u0);ngOnInit(){this.processImageData()}processImageData(){let e=this.data.imageData;if(!e){this.displayContent=null,this.isSvgContent=!1;return}if(e.trim().includes("0?1:-1),p(3),Se(" ",o.getArtifactName(i)," "),p(5),Qo("ngModel",o.selectedArtifacts[n]),p(),Jt(o.getSortedArtifactsFromId(i)),p(7),W((A=o.selectedArtifacts[n].mediaType)===o.MediaType.IMAGE?17:A===o.MediaType.AUDIO?18:-1)}}var cEA="default_artifact_name",$1=(n=>(n.IMAGE="image",n.AUDIO="audio",n.TEXT="text",n.UNSPECIFIED="unspecified",n))($1||{});function O4(t){let e=t.toLowerCase();for(let A of Object.values($1))if(A!=="unspecified"&&e.startsWith(A+"/"))return A;return"unspecified"}function CEA(t){return t?t.startsWith("image/"):!1}function IEA(t){return t?t.startsWith("audio/"):!1}var sw=class t{artifacts=rt([]);selectedArtifacts=[];isArtifactAudio=IEA;isArtifactImage=CEA;MediaType=$1;downloadService=h(cE);dialog=h(Gs);safeValuesService=h(u0);ngOnChanges(e){if(e.artifacts){this.selectedArtifacts=[];for(let A of this.getDistinctArtifactIds())this.selectedArtifacts.push(this.getSortedArtifactsFromId(A)[0])}}downloadArtifact(e){this.downloadService.downloadBase64Data(e.data,e.mimeType,e.id)}getArtifactName(e){return e??cEA}getDistinctArtifactIds(){return[...new Set(this.artifacts().map(e=>e.id))]}getSortedArtifactsFromId(e){return this.artifacts().filter(A=>A.id===e).sort((A,i)=>i.versionId-A.versionId)}onArtifactVersionChange(e,A){this.selectedArtifacts[A]=e.value}openViewImageDialog(e){if(!e||!e.startsWith("data:")||e.indexOf(";base64,")===-1)return;let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}openArtifact(e,A){if(this.isArtifactImage(A)){this.openViewImageDialog(e);return}this.openBase64InNewTab(e,A)}openBase64InNewTab(e,A){}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-artifact-tab"]],inputs:{artifacts:[1,"artifacts"]},features:[ti],decls:3,vars:0,consts:[[1,"artifact-container"],[1,"artifact-box"],[1,"white-separator"],[1,"artifact-metadata"],[1,"link-style-button",3,"click"],[1,"version-select-container"],[3,"ngModelChange","selectionChange","ngModel"],[3,"value"],["mat-flat-button","",1,"download-button",3,"click"],["alt","artifact.id",1,"generated-image",3,"click","src"],[3,"base64data"]],template:function(A,i){A&1&&(m(0,"div",0),Ut(1,lEA,19,4,"div",1,Li),w()),A&2&&(p(),Jt(i.getDistinctArtifactIds()))},dependencies:[Bl,Nn,fo,Sa,Hr,fn,Fn,vE],styles:[".artifact-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}.artifact-box[_ngcontent-%COMP%]{padding:10px;max-width:100%;margin-left:26px;display:flex;flex-direction:column}.artifact-metadata[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:15px;flex-wrap:wrap;gap:5px}.download-button[_ngcontent-%COMP%]{background-color:var(--artifact-tab-download-button-background-color)!important;margin-left:35px;width:130px;height:28px;font-size:14px}.generated-image[_ngcontent-%COMP%]{max-width:60%;border-radius:8px;cursor:pointer}hr.white-separator[_ngcontent-%COMP%]{border:none;border-top:1px solid var(--artifact-tab-white-separator-border-top-color);margin-bottom:1.2em;margin-right:15px}.version-select-container[_ngcontent-%COMP%]{background-color:var(--artifact-tab-version-select-container-background-color);width:80px;margin-left:15px}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--artifact-tab-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none}.link-style-button[_ngcontent-%COMP%]:hover{color:var(--artifact-tab-link-style-button-hover-color);text-decoration:underline}.link-style-button[_ngcontent-%COMP%]:focus{outline:1px dotted var(--artifact-tab-link-style-button-focus-outline-color)}.link-style-button[_ngcontent-%COMP%]:active{color:var(--artifact-tab-link-style-button-active-color)}.link-style-button[_ngcontent-%COMP%]:disabled{color:var(--artifact-tab-link-style-button-disabled-color);text-decoration:none;cursor:not-allowed}"]})};var dEA=["input"],BEA=["label"],EEA=["*"],Vk={color:"accent",clickAction:"check-indeterminate",disabledInteractive:!1},QEA=new yA("mat-checkbox-default-options",{providedIn:"root",factory:()=>Vk}),Es=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(Es||{}),Wk=class{source;checked},bE=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_ngZone=h(Oe);_animationsDisabled=ji();_options=h(QEA,{optional:!0});focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(A){let i=new Wk;return i.source=this,i.checked=A,i}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return`${this.id||this._uniqueId}-input`}required=!1;labelPosition="after";name=null;change=new $A;indeterminateChange=new $A;value;disableRipple=!1;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=Es.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){h(Xn).load(dr);let A=h(new Ws("tabindex"),{optional:!0});this._options=this._options||Vk,this.color=this._options.color||Vk.color,this.tabIndex=A==null?0:parseInt(A)||0,this.id=this._uniqueId=h(an).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??!1}ngOnChanges(A){A.required&&this._validatorChangeFn()}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate)}get checked(){return this._checked}set checked(A){A!=this.checked&&(this._checked=A,this._changeDetectorRef.markForCheck())}_checked=!1;get disabled(){return this._disabled}set disabled(A){A!==this.disabled&&(this._disabled=A,this._changeDetectorRef.markForCheck())}_disabled=!1;get indeterminate(){return this._indeterminate()}set indeterminate(A){let i=A!=this._indeterminate();this._indeterminate.set(A),i&&(A?this._transitionCheckState(Es.Indeterminate):this._transitionCheckState(this.checked?Es.Checked:Es.Unchecked),this.indeterminateChange.emit(A)),this._syncIndeterminate(A)}_indeterminate=jA(!1);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(A){this.checked=!!A}registerOnChange(A){this._controlValueAccessorChangeFn=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorChangeFn=A}_transitionCheckState(A){let i=this._currentCheckState,n=this._getAnimationTargetElement();if(!(i===A||!n)&&(this._currentAnimationClass&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(i,A),this._currentCheckState=A,this._currentAnimationClass.length>0)){n.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{n.classList.remove(o)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){let A=this._options?.clickAction;!this.disabled&&A!=="noop"?(this.indeterminate&&A!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(!1),this.indeterminateChange.emit(!1)}),this._checked=!this._checked,this._transitionCheckState(this._checked?Es.Checked:Es.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&A==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate)}_onInteractionEvent(A){A.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(A,i){if(this._animationsDisabled)return"";switch(A){case Es.Init:if(i===Es.Checked)return this._animationClasses.uncheckedToChecked;if(i==Es.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case Es.Unchecked:return i===Es.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case Es.Checked:return i===Es.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case Es.Indeterminate:return i===Es.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(A){let i=this._inputElement;i&&(i.nativeElement.indeterminate=A)}_onInputClick(){this._handleInputClick()}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus()}_preventBubblingFromLabel(A){A.target&&this._labelElement.nativeElement.contains(A.target)&&A.stopPropagation()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-checkbox"]],viewQuery:function(i,n){if(i&1&&ai(dEA,5)(BEA,5),i&2){let o;ce(o=Ce())&&(n._inputElement=o.first),ce(o=Ce())&&(n._labelElement=o.first)}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-labelledby",null),Po(n.color?"mat-"+n.color:"mat-accent"),ne("_mat-animation-noopable",n._animationsDisabled)("mdc-checkbox--disabled",n.disabled)("mat-mdc-checkbox-disabled",n.disabled)("mat-mdc-checkbox-checked",n.checked)("mat-mdc-checkbox-disabled-interactive",n.disabledInteractive))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",he],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",he],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?void 0:en(A)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",he],checked:[2,"checked","checked",he],disabled:[2,"disabled","disabled",he],indeterminate:[2,"indeterminate","indeterminate",he]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[dt([{provide:Lg,useExisting:wr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:EEA,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],[1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],[1,"mdc-checkbox__ripple"],[1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",3),tA("click",function(r){return Z(o),X(n._preventBubblingFromLabel(r))}),m(1,"div",4,0)(3,"div",5),tA("click",function(){return Z(o),X(n._onTouchTargetClick())}),w(),m(4,"input",6,1),tA("blur",function(){return Z(o),X(n._onBlur())})("click",function(){return Z(o),X(n._onInputClick())})("change",function(r){return Z(o),X(n._onInteractionEvent(r))}),w(),GA(6,"div",7),m(7,"div",8),Qt(),m(8,"svg",9),GA(9,"path",10),w(),as(),GA(10,"div",11),w(),GA(11,"div",12),w(),m(12,"label",13,2),Ke(14),w()()}if(i&2){let o=An(2);$("labelPosition",n.labelPosition),p(4),ne("mdc-checkbox--selected",n.checked),$("checked",n.checked)("indeterminate",n.indeterminate)("disabled",n.disabled&&!n.disabledInteractive)("id",n.inputId)("required",n.required)("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby)("aria-checked",n.indeterminate?"mixed":null)("aria-controls",n.ariaControls)("aria-disabled",n.disabled&&n.disabledInteractive?!0:null)("aria-expanded",n.ariaExpanded)("aria-owns",n.ariaOwns)("name",n.name)("value",n.value),p(7),$("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),$("for",n.inputId)}},dependencies:[ig,E8],styles:[`.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover>.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:hover>.mat-mdc-checkbox-ripple>.mat-ripple-element{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control+.mdc-checkbox__ripple{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}@media(forced-colors: active){.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:GrayText}}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:GrayText}}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-checkbox-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-checkbox-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-checkbox-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-checkbox-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-checkbox-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive{pointer-events:auto}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive input{cursor:default}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{color:GrayText}}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox .mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox .mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-checkbox-touch-target-size, 48px);width:var(--mat-checkbox-touch-target-size, 48px);transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display, block)}.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus-visible~.mat-focus-indicator::before{content:""} -`],encapsulation:2,changeDetection:0})}return t})();var SO=new yA("CdkAccordion");var xO=(()=>{class t{accordion=h(SO,{optional:!0,skipSelf:!0});_changeDetectorRef=h(Dt);_expansionDispatcher=h(D4);_openCloseAllSubscription=Jn.EMPTY;closed=new $A;opened=new $A;destroyed=new $A;expandedChange=new $A;id=h(an).getId("cdk-accordion-child-");get expanded(){return this._expanded}set expanded(A){if(this._expanded!==A){if(this._expanded=A,this.expandedChange.emit(A),A){this.opened.emit();let i=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,i)}else this.closed.emit();this._changeDetectorRef.markForCheck()}}_expanded=!1;get disabled(){return this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);_removeUniqueSelectionListener=()=>{};constructor(){}ngOnInit(){this._removeUniqueSelectionListener=this._expansionDispatcher.listen((A,i)=>{this.accordion&&!this.accordion.multi&&this.accordion.id===i&&this.id!==A&&(this.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}ngOnDestroy(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()}toggle(){this.disabled||(this.expanded=!this.expanded)}close(){this.disabled||(this.expanded=!1)}open(){this.disabled||(this.expanded=!0)}_subscribeToOpenCloseAllActions(){return this.accordion._openCloseAllActions.subscribe(A=>{this.disabled||(this.expanded=A)})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-accordion-item"],["","cdkAccordionItem",""]],inputs:{expanded:[2,"expanded","expanded",he],disabled:[2,"disabled","disabled",he]},outputs:{closed:"closed",opened:"opened",destroyed:"destroyed",expandedChange:"expandedChange"},exportAs:["cdkAccordionItem"],features:[dt([{provide:SO,useValue:void 0}])]})}return t})(),RO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var hEA=["body"],uEA=["bodyWrapper"],fEA=[[["mat-expansion-panel-header"]],"*",[["mat-action-row"]]],mEA=["mat-expansion-panel-header","*","mat-action-row"];function pEA(t,e){}var wEA=[[["mat-panel-title"]],[["mat-panel-description"]],"*"],DEA=["mat-panel-title","mat-panel-description","*"];function yEA(t,e){t&1&&(li(0,"span",1),Qt(),li(1,"svg",2),Di(2,"path",3),Ei()())}var NO=new yA("MAT_ACCORDION"),FO=new yA("MAT_EXPANSION_PANEL"),vEA=(()=>{class t{_template=h(Tn);_expansionPanel=h(FO,{optional:!0});constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","matExpansionPanelContent",""]]})}return t})(),_O=new yA("MAT_EXPANSION_PANEL_DEFAULT_OPTIONS"),Zk=(()=>{class t extends xO{_viewContainerRef=h(Oo);_animationsDisabled=ji();_document=h(Xt);_ngZone=h(Oe);_elementRef=h(ge);_renderer=h(_i);_cleanupTransitionEnd;get hideToggle(){return this._hideToggle||this.accordion&&this.accordion.hideToggle}set hideToggle(A){this._hideToggle=A}_hideToggle=!1;get togglePosition(){return this._togglePosition||this.accordion&&this.accordion.togglePosition}set togglePosition(A){this._togglePosition=A}_togglePosition;afterExpand=new $A;afterCollapse=new $A;_inputChanges=new XA;accordion=h(NO,{optional:!0,skipSelf:!0});_lazyContent;_body;_bodyWrapper;_portal;_headerId=h(an).getId("mat-expansion-panel-header-");constructor(){super();let A=h(_O,{optional:!0});this._expansionDispatcher=h(D4),A&&(this.hideToggle=A.hideToggle)}_hasSpacing(){return this.accordion?this.expanded&&this.accordion.displayMode==="default":!1}_getExpandedState(){return this.expanded?"expanded":"collapsed"}toggle(){this.expanded=!this.expanded}close(){this.expanded=!1}open(){this.expanded=!0}ngAfterContentInit(){this._lazyContent&&this._lazyContent._expansionPanel===this&&this.opened.pipe(cn(null),Ze(()=>this.expanded&&!this._portal),oo(1)).subscribe(()=>{this._portal=new Is(this._lazyContent._template,this._viewContainerRef)}),this._setupAnimationEvents()}ngOnChanges(A){this._inputChanges.next(A)}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransitionEnd?.(),this._inputChanges.complete()}_containsFocus(){if(this._body){let A=this._document.activeElement,i=this._body.nativeElement;return A===i||i.contains(A)}return!1}_transitionEndListener=({target:A,propertyName:i})=>{A===this._bodyWrapper?.nativeElement&&i==="grid-template-rows"&&this._ngZone.run(()=>{this.expanded?this.afterExpand.emit():this.afterCollapse.emit()})};_setupAnimationEvents(){this._ngZone.runOutsideAngular(()=>{this._animationsDisabled?(this.opened.subscribe(()=>this._ngZone.run(()=>this.afterExpand.emit())),this.closed.subscribe(()=>this._ngZone.run(()=>this.afterCollapse.emit()))):setTimeout(()=>{let A=this._elementRef.nativeElement;this._cleanupTransitionEnd=this._renderer.listen(A,"transitionend",this._transitionEndListener),A.classList.add("mat-expansion-panel-animations-enabled")},200)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel"]],contentQueries:function(i,n,o){if(i&1&&fa(o,vEA,5),i&2){let a;ce(a=Ce())&&(n._lazyContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(hEA,5)(uEA,5),i&2){let o;ce(o=Ce())&&(n._body=o.first),ce(o=Ce())&&(n._bodyWrapper=o.first)}},hostAttrs:[1,"mat-expansion-panel"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mat-expanded",n.expanded)("mat-expansion-panel-spacing",n._hasSpacing())},inputs:{hideToggle:[2,"hideToggle","hideToggle",he],togglePosition:"togglePosition"},outputs:{afterExpand:"afterExpand",afterCollapse:"afterCollapse"},exportAs:["matExpansionPanel"],features:[dt([{provide:NO,useValue:void 0},{provide:FO,useExisting:t}]),It,ti],ngContentSelectors:mEA,decls:9,vars:4,consts:[["bodyWrapper",""],["body",""],[1,"mat-expansion-panel-content-wrapper"],["role","region",1,"mat-expansion-panel-content",3,"id"],[1,"mat-expansion-panel-body"],[3,"cdkPortalOutlet"]],template:function(i,n){i&1&&(Yt(fEA),Ke(0),m(1,"div",2,0)(3,"div",3,1)(5,"div",4),Ke(6,1),pt(7,pEA,0,0,"ng-template",5),w(),Ke(8,2),w()()),i&2&&(p(),ie("inert",n.expanded?null:""),p(2),$("id",n.id),ie("aria-labelledby",n._headerId),p(4),$("cdkPortalOutlet",n._portal))},dependencies:[Yg],styles:[`.mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;position:relative;background:var(--mat-expansion-container-background-color, var(--mat-sys-surface));color:var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));border-radius:var(--mat-expansion-container-shape, 12px)}.mat-expansion-panel.mat-expansion-panel-animations-enabled{transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape, 12px);border-top-left-radius:var(--mat-expansion-container-shape, 12px)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape, 12px);border-bottom-left-radius:var(--mat-expansion-container-shape, 12px)}@media(forced-colors: active){.mat-expansion-panel{outline:solid 1px}}.mat-expansion-panel-content-wrapper{display:grid;grid-template-rows:0fr;grid-template-columns:100%}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper{transition:grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{grid-template-rows:1fr}@supports not (grid-template-rows: 0fr){.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}@media print{.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;min-height:0;visibility:hidden;font-family:var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));line-height:var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));letter-spacing:var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content{transition:visibility 190ms linear}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper>.mat-expansion-panel-content{visibility:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color, var(--mat-sys-outline))}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px} -`],encapsulation:2,changeDetection:0})}return t})();var LO=(()=>{class t{panel=h(Zk,{host:!0});_element=h(ge);_focusMonitor=h(ar);_changeDetectorRef=h(Dt);_parentChangeSubscription=Jn.EMPTY;constructor(){h(Xn).load(dr);let A=this.panel,i=h(_O,{optional:!0}),n=h(new Ws("tabindex"),{optional:!0}),o=A.accordion?A.accordion._stateChanges.pipe(Ze(a=>!!(a.hideToggle||a.togglePosition))):ja;this.tabIndex=parseInt(n||"")||0,this._parentChangeSubscription=fi(A.opened,A.closed,o,A._inputChanges.pipe(Ze(a=>!!(a.hideToggle||a.disabled||a.togglePosition)))).subscribe(()=>this._changeDetectorRef.markForCheck()),A.closed.pipe(Ze(()=>A._containsFocus())).subscribe(()=>this._focusMonitor.focusVia(this._element,"program")),i&&(this.expandedHeight=i.expandedHeight,this.collapsedHeight=i.collapsedHeight)}expandedHeight;collapsedHeight;tabIndex=0;get disabled(){return this.panel.disabled}_toggle(){this.disabled||this.panel.toggle()}_isExpanded(){return this.panel.expanded}_getExpandedState(){return this.panel._getExpandedState()}_getPanelId(){return this.panel.id}_getTogglePosition(){return this.panel.togglePosition}_showToggle(){return!this.panel.hideToggle&&!this.panel.disabled}_getHeaderHeight(){let A=this._isExpanded();return A&&this.expandedHeight?this.expandedHeight:!A&&this.collapsedHeight?this.collapsedHeight:null}_keydown(A){switch(A.keyCode){case 32:case 13:pa(A)||(A.preventDefault(),this._toggle());break;default:this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(A);return}}focus(A,i){A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}ngAfterViewInit(){this._focusMonitor.monitor(this._element).subscribe(A=>{A&&this.panel.accordion&&this.panel.accordion._handleHeaderFocus(this)})}ngOnDestroy(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel-header"]],hostAttrs:["role","button",1,"mat-expansion-panel-header","mat-focus-indicator"],hostVars:13,hostBindings:function(i,n){i&1&&tA("click",function(){return n._toggle()})("keydown",function(a){return n._keydown(a)}),i&2&&(ie("id",n.panel._headerId)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n._getPanelId())("aria-expanded",n._isExpanded())("aria-disabled",n.panel.disabled),wn("height",n._getHeaderHeight()),ne("mat-expanded",n._isExpanded())("mat-expansion-toggle-indicator-after",n._getTogglePosition()==="after")("mat-expansion-toggle-indicator-before",n._getTogglePosition()==="before"))},inputs:{expandedHeight:"expandedHeight",collapsedHeight:"collapsedHeight",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:DEA,decls:5,vars:3,consts:[[1,"mat-content"],[1,"mat-expansion-indicator"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 -960 960 960","aria-hidden","true","focusable","false"],["d","M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z"]],template:function(i,n){i&1&&(Yt(wEA),li(0,"span",0),Ke(1),Ke(2,1),Ke(3,2),Ei(),V(4,yEA,3,0,"span",1)),i&2&&(ne("mat-content-hide-toggle",!n._showToggle()),p(4),W(n._showToggle()?4:-1))},styles:[`.mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;height:var(--mat-expansion-header-collapsed-state-height, 48px);font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-size:var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-header{transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header::before{border-radius:inherit}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height, 64px)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color, var(--mat-sys-surface))}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color, var(--mat-sys-on-surface))}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant))}.mat-expansion-panel-animations-enabled .mat-expansion-indicator{transition:transform 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator{transform:rotate(180deg)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:"";padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-legacy-header-indicator-display, none)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-header-indicator-display, inline-block)}@media(forced-colors: active){.mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}} -`],encapsulation:2,changeDetection:0})}return t})();var GO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-panel-title"]],hostAttrs:[1,"mat-expansion-panel-header-title"]})}return t})();var KO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[RO,d0,Gi]})}return t})();var bEA={google_search:"search",EnterpriseWebSearchTool:"web",VertexAiSearchTool:"search",FilesRetrieval:"find_in_page",load_memory:"memory",preload_memory:"memory",url_context:"link",VertexAiRagRetrieval:"find_in_page",exit_loop:"sync",get_user_choice:"how_to_reg",load_artifacts:"image",LongRunningFunctionTool:"data_object"};function ME(t,e){return e==="Agent Tool"?"smart_toy":e==="Built-in tool"?bEA[t]||"build":e==="Function tool"?"data_object":"build"}var fc=class t{static toolMenuTooltips=new Map([["Function tool","Build custom tools for your specific ADK agent needs."],["Built-in tool","Ready-to-use functionality such as Google Search or code executors that provide agents with common capabilities. "],["Agent tool","A sub-agent that can be invoked as a tool by another agent."]]);static toolDetailedInfo=new Map([["Function tool",{shortDescription:"Build custom tools for your specific ADK agent needs.",detailedDescription:"The ADK framework automatically inspects your Python function's signature\u2014including its name, docstring, parameters, type hints, and default values\u2014to generate a schema. This schema is what the LLM uses to understand the tool's purpose, when to use it, and what arguments it requires.",docLink:"https://google.github.io/adk-docs/tools/function-tools/"}],["Agent tool",{shortDescription:"Wraps a sub-agent as a callable tool, enabling modular and hierarchical agent architectures.",detailedDescription:"Agent tools allow you to use one agent as a tool within another agent, creating powerful multi-agent workflows.",docLink:"https://google.github.io/adk-docs/agents/multi-agents/#c-explicit-invocation-agenttool"}]]);static callbackMenuTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDialogTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDetailedInfo=new Map([["before_agent",{shortDescription:"Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed. It runs after the agent's InvocationContext is created but before its core logic begins.",detailedDescription:" Ideal for setting up resources or state needed only for this specific agent's run, performing validation checks on the session state (callback_context.state) before execution starts, logging the entry point of the agent's activity, or potentially modifying the invocation context before the core logic uses it.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback"}],["after_agent",{shortDescription:"Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes.",detailedDescription:"Useful for cleanup tasks, post-execution validation, logging the completion of an agent's activity, modifying final state, or augmenting/replacing the agent's final output.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-agent-callback"}],["before_model",{shortDescription:"Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow.",detailedDescription:"Allows inspection and modification of the request going to the LLM. Use cases include adding dynamic instructions, injecting few-shot examples based on state, modifying model config, implementing guardrails (like profanity filters), or implementing request-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-model-callback"}],["after_model",{shortDescription:"Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent.",detailedDescription:"Allows inspection or modification of the raw LLM response.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-model-callback"}],["before_tool",{shortDescription:"Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it.",detailedDescription:"Allows inspection and modification of tool arguments, performing authorization checks before execution, logging tool usage attempts, or implementing tool-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-tool-callback"}],["after_tool",{shortDescription:"Called just after the tool's run_async method completes successfully.",detailedDescription:"Allows inspection and modification of the tool's result before it's sent back to the LLM (potentially after summarization). Useful for logging tool results, post-processing or formatting results, or saving specific parts of the result to the session state.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-tool-callback"}]]);static getToolMenuTooltips(e){return t.toolMenuTooltips.get(e)}static getToolDetailedInfo(e){return t.toolDetailedInfo.get(e)}static getCallbackMenuTooltips(e){return t.callbackMenuTooltips.get(e)}static getCallbackDialogTooltips(e){return t.callbackDialogTooltips.get(e)}static getCallbackDetailedInfo(e){return t.callbackDetailedInfo.get(e)}};var MEA=["callbackNameInput"];function kEA(t,e){if(t&1){let A=JA();js(0),m(1,"div",8)(2,"div",9),tA("click",function(){Z(A);let n=v();return X(n.toggleCallbackInfo())}),m(3,"mat-icon",10),K(4,"info"),w(),m(5,"div",11)(6,"span"),K(7,"Callback Information"),w()(),m(8,"button",12)(9,"mat-icon"),K(10),w()()(),m(11,"div",13)(12,"div",14)(13,"div",15),K(14),w(),m(15,"div",16),K(16),w()(),m(17,"div",17)(18,"a",18)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isCallbackInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isCallbackInfoExpanded),p(3),qA((A=o.getCallbackInfo())==null?null:A.shortDescription),p(2),qA((i=o.getCallbackInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getCallbackInfo())==null?null:n.docLink,Ka)}}function SEA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),qA(A)}}function xEA(t,e){if(t&1){let A=JA();js(0),m(1,"mat-form-field",3)(2,"mat-label"),K(3,"Callback Type"),w(),m(4,"mat-select",19),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.callbackType,n)||(o.callbackType=n),X(n)}),pt(5,SEA,2,2,"mat-option",20),w()(),qs()}if(t&2){let A=v();p(4),Qo("ngModel",A.callbackType),p(),$("ngForOf",A.availableCallbackTypes)}}function REA(t,e){t&1&&(m(0,"mat-error"),K(1,"Same callback name has been used"),w())}function NEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Cannot have callback consist of two words"),w())}function FEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Callback function names cannot have spaces"),w())}var Xk=class{isErrorState(e){return!!(e&&e.invalid)}},P4=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.callbackType=A?.callbackType??"",this.existingCallbackNames=A?.existingCallbackNames??[],this.isEditMode=!!A?.isEditMode,this.availableCallbackTypes=A?.availableCallbackTypes??[],this.isEditMode&&A?.callback&&(this.callbackName=A.callback.name,this.callbackType=A.callback.type,this.originalCallbackName=A.callback.name,this.existingCallbackNames=this.existingCallbackNames.filter(i=>i!==this.originalCallbackName))}callbackNameInput;callbackName="";callbackType="";existingCallbackNames=[];matcher=new Xk;isEditMode=!1;availableCallbackTypes=[];originalCallbackName="";isCallbackInfoExpanded=!1;addCallback(){if(!this.callbackName.trim()||this.hasSpaces()||this.isDuplicateName())return;let e={name:this.callbackName.trim(),type:this.callbackType,isEditMode:this.isEditMode,originalName:this.originalCallbackName||this.callbackName.trim()};this.dialogRef.close(e)}cancel(){this.dialogRef.close()}isDuplicateName(){if(!Array.isArray(this.existingCallbackNames))return!1;let e=(this.callbackName||"").trim();return this.existingCallbackNames.includes(e)}hasSpaces(){return/\s/.test(this.callbackName||"")}createDisabled(){return!this.callbackName.trim()||this.isDuplicateName()||this.hasSpaces()}validate(){this.hasSpaces()?this.callbackNameInput.control.setErrors({hasSpaces:!0}):this.isDuplicateName()?this.callbackNameInput.control.setErrors({duplicateName:!0}):this.callbackNameInput.control.setErrors(null)}getCallbackInfo(){return fc.getCallbackDetailedInfo(this.callbackType)}toggleCallbackInfo(){this.isCallbackInfoExpanded=!this.isCallbackInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-add-callback-dialog"]],viewQuery:function(A,i){if(A&1&&ai(MEA,5),A&2){let n;ce(n=Ce())&&(i.callbackNameInput=n.first)}},decls:18,vars:10,consts:[["callbackNameInput","ngModel"],["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%"],["matInput","",3,"ngModelChange","keydown.enter","ngModel","errorStateMatcher"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","secondary",3,"click","disabled"],[1,"callback-info-container"],[1,"callback-info-header",3,"click"],[1,"callback-info-icon"],[1,"callback-info-title"],["mat-icon-button","","type","button","aria-label","Toggle callback information",1,"callback-info-toggle"],[1,"callback-info-body"],[1,"callback-info-content"],[1,"callback-info-short"],[1,"callback-info-detailed"],[1,"callback-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"callback-info-link",3,"href"],[3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){if(A&1){let n=JA();m(0,"h2",1),K(1),w(),m(2,"mat-dialog-content"),pt(3,kEA,23,6,"ng-container",2)(4,xEA,6,2,"ng-container",2),m(5,"mat-form-field",3)(6,"mat-label"),K(7,"Callback Name"),w(),m(8,"input",4,0),ho("ngModelChange",function(a){return Z(n),ao(i.callbackName,a)||(i.callbackName=a),X(a)}),tA("ngModelChange",function(){return Z(n),X(i.validate())})("keydown.enter",function(){return Z(n),X(i.addCallback())}),w(),pt(10,REA,2,0,"mat-error",2)(11,NEA,2,0,"mat-error",2)(12,FEA,2,0,"mat-error",2),w()(),m(13,"mat-dialog-actions",5)(14,"button",6),tA("click",function(){return Z(n),X(i.cancel())}),K(15,"Cancel"),w(),m(16,"button",7),tA("click",function(){return Z(n),X(i.addCallback())}),K(17),w()()}if(A&2){let n=An(9);p(),qA(i.isEditMode?"Edit Callback":"Add "+i.callbackType+" Callback"),p(2),$("ngIf",i.getCallbackInfo()),p(),$("ngIf",i.isEditMode),p(4),Qo("ngModel",i.callbackName),$("errorStateMatcher",i.matcher),p(2),$("ngIf",n.hasError("duplicateName")),p(),$("ngIf",n.hasError("hasSpaces")),p(),$("ngIf",n.hasError("hasSpaces")),p(4),$("disabled",i.createDisabled()),p(),Se(" ",i.isEditMode?"Save":"Add"," ")}},dependencies:[ma,DB,rl,Nn,uo,fo,Sa,uz,Da,Ua,rr,Ns,fn,Wa,Yr,No,Gg,k9,gl,wa,ck,Bl,Hr,Il,Fn],styles:[".callback-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;min-width:400px;max-width:600px}.full-width[_ngcontent-%COMP%]{width:100%}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}mat-dialog-actions[_ngcontent-%COMP%]{padding:16px 24px;margin:0}mat-form-field[_ngcontent-%COMP%]{margin-top:8px!important}.mat-mdc-raised-button.mat-secondary[_ngcontent-%COMP%]:not([disabled]){background-color:#8ab4f8}.callback-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.callback-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.callback-info-header[_ngcontent-%COMP%]:hover .callback-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.callback-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.callback-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.callback-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.callback-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.callback-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.callback-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.callback-info-content[_ngcontent-%COMP%]{flex:1}.callback-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-dialog-content-text-color);margin-bottom:8px;line-height:1.4}.callback-info-detailed[_ngcontent-%COMP%]{color:var(--mat-dialog-content-text-color);font-size:14px;line-height:1.5;opacity:.8}.callback-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.callback-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.callback-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.callback-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function _EA(t,e){if(t&1){let A=JA();js(0),m(1,"div",6)(2,"div",7),tA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getToolInfo())==null?null:n.docLink,Ka)}}function LEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.toolName,n)||(o.toolName=n),X(n)}),tA("keydown.enter",function(){Z(A);let n=v();return X(n.addTool())}),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.toolName)}}function GEA(t,e){if(t&1&&(m(0,"mat-option",20),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function KEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-select",18),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.selectedBuiltInTool,n)||(o.selectedBuiltInTool=n),X(n)}),pt(2,GEA,2,2,"mat-option",19),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.selectedBuiltInTool),p(),$("ngForOf",A.builtInTools)}}var W2=class t{constructor(e,A){this.data=e;this.dialogRef=A}toolName="";toolType="Function tool";selectedBuiltInTool="google_search";builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];isEditMode=!1;isToolInfoExpanded=!1;ngOnInit(){this.toolType=this.data.toolType,this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName&&(this.toolType==="Function tool"?this.toolName=this.data.toolName:this.toolType==="Built-in tool"&&(this.selectedBuiltInTool=this.data.toolName))}addTool(){if(this.toolType==="Function tool"&&!this.toolName.trim())return;let e={toolType:this.toolType,isEditMode:this.isEditMode};this.toolType==="Function tool"?e.name=this.toolName.trim():this.toolType==="Built-in tool"&&(e.name=this.selectedBuiltInTool),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}createDisabled(){return this.toolType==="Function tool"&&!this.toolName.trim()}getToolInfo(){return fc.getToolDetailedInfo(this.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-add-tool-dialog"]],decls:11,vars:6,consts:[["mat-dialog-title","",1,"dialog-title"],[4,"ngIf"],[2,"width","100%"],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","placeholder","Enter full function name",3,"ngModelChange","keydown.enter","ngModel"],["placeholder","Select built-in tool",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),pt(3,_EA,23,6,"ng-container",1),V(4,LEA,2,1,"mat-form-field",2),V(5,KEA,3,2,"mat-form-field",2),w(),m(6,"mat-dialog-actions",3)(7,"button",4),tA("click",function(){return i.cancel()}),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.addTool()}),K(10),w()()),A&2&&(p(),qA(i.isEditMode?"Editing Tool":"Add New Tool"),p(2),$("ngIf",i.getToolInfo()),p(),W(i.toolType==="Function tool"?4:-1),p(),W(i.toolType==="Built-in tool"?5:-1),p(4),$("disabled",i.createDisabled()),p(),Se(" ",i.isEditMode?"Save":"Create"," "))},dependencies:[ma,DB,rl,Nn,uo,fo,Sa,Da,rr,No,wa,Bl,Hr,Ua,fn,Wa,Fn],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-family:Google Sans;font-size:24px}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:#e3e3e3;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:#c4c7ca;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function qo(t){return Array.isArray(t)}function ia(t){return t!==null&&typeof t=="object"&&(t.constructor===void 0||t.constructor.name==="Object")}function $k(t){return t&&typeof t=="object"?t.op==="add":!1}function AS(t){return t&&typeof t=="object"?t.op==="remove":!1}function gw(t){return t&&typeof t=="object"?t.op==="replace":!1}function lw(t){return t&&typeof t=="object"?t.op==="copy":!1}function Z2(t){return t&&typeof t=="object"?t.op==="move":!1}function UO(t,e){return JSON.stringify(t)===JSON.stringify(e)}function UEA(t,e){return t===e}function eS(t){return t.slice(0,t.length-1)}function JO(t){return t[t.length-1]}function YO(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:UEA;if(t.length{e[A]=t[A]}),e}if(ia(t)){let e=cA({},t);return Object.getOwnPropertySymbols(t).forEach(A=>{e[A]=t[A]}),e}return t}function nS(t,e,A){if(t[e]===A)return t;let i=iS(t);return i[e]=A,i}function je(t,e){let A=t,i=0;for(;i3&&arguments[3]!==void 0?arguments[3]:!1;if(e.length===0)return A;let n=e[0],o=Or(t?t[n]:void 0,e.slice(1),A,i);if(ia(t)||qo(t))return nS(t,n,o);if(i){let a=JEA.test(n)?[]:{};return a[n]=o,a}throw new Error("Path does not exist")}var JEA=/^\d+$/;function j4(t,e,A){if(e.length===0)return A(t);if(!tS(t))throw new Error("Path doesn't exist");let i=e[0],n=j4(t[i],e.slice(1),A);return nS(t,i,n)}function Ad(t,e){if(e.length===0)return t;if(!tS(t))throw new Error("Path does not exist");if(e.length===1){let n=e[0];if(!(n in t))return t;let o=iS(t);return qo(o)&&o.splice(Number.parseInt(n),1),ia(o)&&delete o[n],o}let A=e[0],i=Ad(t[A],e.slice(1));return nS(t,A,i)}function q4(t,e,A){let i=e.slice(0,e.length-1),n=e[e.length-1];return j4(t,i,o=>{if(!Array.isArray(o))throw new TypeError(`Array expected at path ${JSON.stringify(i)}`);let a=iS(o);return a.splice(Number.parseInt(n),0,A),a})}function br(t,e){return t===void 0?!1:e.length===0?!0:t===null?!1:br(t[e[0]],e.slice(1))}function Qs(t){let e=t.split("/");return e.shift(),e.map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function wt(t){return t.map(TO).join("")}function TO(t){return`/${String(t).replace(/~/g,"~0").replace(/\//g,"~1")}`}function V4(t,e){return t+TO(e)}function lg(t,e,A){let i=t;for(let n=0;n{let r,s=cg(o,a.path);if(a.op==="add")r=OO(o,s);else if(a.op==="remove")r=zO(o,s);else if(a.op==="replace")r=HO(o,s);else if(a.op==="copy")r=VEA(o,s);else if(a.op==="move")r=WEA(o,s,W4(a.from));else if(a.op==="test")r=[];else throw new Error(`Unknown JSONPatch operation ${JSON.stringify(a)}`);let g;if(A?.before){let l=A.before(o,a,r);if(l?.revertOperations&&(r=l.revertOperations),l?.document&&(g=l.document),l?.json)throw new Error('Deprecation warning: returned object property ".json" has been renamed to ".document"')}if(i=r.concat(i),g!==void 0)return{document:g}}}),i}function HO(t,e){return br(t,e)?[{op:"replace",path:wt(e),value:je(t,e)}]:[]}function zO(t,e){return[{op:"add",path:wt(e),value:je(t,e)}]}function OO(t,e){return kE(t,e)||!br(t,e)?[{op:"remove",path:wt(e)}]:HO(t,e)}function VEA(t,e){return OO(t,e)}function WEA(t,e,A){if(e.length="0"&&t<="9"}function VO(t){return t>=" "}function Z4(t){return`,:[]/{}() -+`.includes(t)}function rS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"}function sS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"||t>="0"&&t<="9"}var gS=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,lS=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function cS(t){return`,[]/{} -+`.includes(t)}function CS(t){return X4(t)||rQA.test(t)}var rQA=/^[[{\w-]$/;function WO(t){return t===` -`||t==="\r"||t===" "||t==="\b"||t==="\f"}function X2(t,e){let A=t.charCodeAt(e);return A===32||A===10||A===9||A===13}function ZO(t,e){let A=t.charCodeAt(e);return A===32||A===9||A===13}function XO(t,e){let A=t.charCodeAt(e);return A===160||A>=8192&&A<=8202||A===8239||A===8287||A===12288}function X4(t){return IS(t)||dw(t)}function IS(t){return t==='"'||t==="\u201C"||t==="\u201D"}function dS(t){return t==='"'}function dw(t){return t==="'"||t==="\u2018"||t==="\u2019"||t==="`"||t==="\xB4"}function BS(t){return t==="'"}function SE(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=t.lastIndexOf(e);return i!==-1?t.substring(0,i)+(A?"":t.substring(i+1)):t}function fl(t,e){let A=t.length;if(!X2(t,A-1))return t+e;for(;X2(t,A-1);)A--;return t.substring(0,A)+e+t.substring(A)}function $O(t,e,A){return t.substring(0,e)+t.substring(e+A)}function AP(t){return/[,\n][ \t\r]*$/.test(t)}var sQA={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},gQA={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` -`,r:"\r",t:" "};function ml(t){let e=0,A="";g(["```","[```","{```"]),o()||P(),g(["```","```]","```}"]);let n=C(",");for(n&&a(),CS(t[e])&&AP(A)?(n||(A=fl(A,",")),f()):n&&(A=SE(A,","));t[e]==="}"||t[e]==="]";)e++,a();if(e>=t.length)return A;DA();function o(){a();let oA=E()||Q()||b()||M()||D()||_(!1)||U();return a(),oA}function a(){let oA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,sA=e,hA=r(oA);do hA=s(),hA&&(hA=r(oA));while(hA);return e>sA}function r(oA){let sA=oA?X2:ZO,hA="";for(;;)if(sA(t,e))hA+=t[e],e++;else if(XO(t,e))hA+=" ",e++;else break;return hA.length>0?(A+=hA,!0):!1}function s(){if(t[e]==="/"&&t[e+1]==="*"){for(;e=t.length;YA||(CS(t[e])||ee?A=fl(A,":"):iA()),o()||(YA||ee?A+="null":iA())}return t[e]==="}"?(A+="}",e++):A=fl(A,"}"),!0}return!1}function Q(){if(t[e]==="["){A+="[",e++,a(),I(",")&&a();let oA=!0;for(;e0&&arguments[0]!==void 0?arguments[0]:!1,sA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,hA=t[e]==="\\";if(hA&&(e++,hA=!0),X4(t[e])){let YA=dS(t[e])?dS:BS(t[e])?BS:dw(t[e])?dw:IS,ee=e,UA=A.length,mA='"';for(e++;;){if(e>=t.length){let KA=J(e-1);return!oA&&Z4(t.charAt(KA))?(e=ee,A=A.substring(0,UA),b(!0)):(mA=fl(mA,'"'),A+=mA,!0)}if(e===sA)return mA=fl(mA,'"'),A+=mA,!0;if(YA(t[e])){let KA=e,Pe=mA.length;if(mA+='"',e++,A+=mA,a(!1),oA||e>=t.length||Z4(t[e])||X4(t[e])||$2(t[e]))return S(),!0;let Je=J(KA-1),HA=t.charAt(Je);if(HA===",")return e=ee,A=A.substring(0,UA),b(!1,Je);if(Z4(HA))return e=ee,A=A.substring(0,UA),b(!0);A=A.substring(0,UA),e=KA+1,mA=`${mA.substring(0,Pe)}\\${mA.substring(Pe)}`}else if(oA&&cS(t[e])){if(t[e-1]===":"&&gS.test(t.substring(ee+1,e+2)))for(;e=t.length?e=t.length:BA()}else mA+=KA,e+=2}else{let KA=t.charAt(e);KA==='"'&&t[e-1]!=="\\"?(mA+=`\\${KA}`,e++):WO(KA)?(mA+=sQA[KA],e++):(VO(KA)||O(KA),mA+=KA,e++)}hA&&d()}}return!1}function S(){let oA=!1;for(a();t[e]==="+";){oA=!0,e++,a(),A=SE(A,'"',!0);let sA=A.length;b()?A=$O(A,sA,1):A=fl(A,'"')}return oA}function M(){let oA=e;if(t[e]==="-"){if(e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1}for(;$2(t[e]);)e++;if(t[e]==="."){if(e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(t[e]==="e"||t[e]==="E"){if(e++,(t[e]==="-"||t[e]==="+")&&e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(!j())return e=oA,!1;if(e>oA){let sA=t.slice(oA,e),hA=/^0\d/.test(sA);return A+=hA?`"${sA}"`:sA,!0}return!1}function D(){return F("true","true")||F("false","false")||F("null","null")||F("True","true")||F("False","false")||F("None","null")}function F(oA,sA){return t.slice(e,e+oA.length)===oA?(A+=sA,e+=oA.length,!0):!1}function _(oA){let sA=e;if(rS(t[e])){for(;esA){for(;X2(t,e-1)&&e>0;)e--;let hA=t.slice(sA,e);return A+=hA==="undefined"?"null":JSON.stringify(hA),t[e]==='"'&&e++,!0}}function U(){if(t[e]==="/"){let oA=e;for(e++;e0&&X2(t,sA);)sA--;return sA}function j(){return e>=t.length||Z4(t[e])||X2(t,e)}function AA(oA){A+=`${t.slice(oA,e)}0`}function O(oA){throw new yC(`Invalid character ${JSON.stringify(oA)}`,e)}function DA(){throw new yC(`Unexpected character ${JSON.stringify(t[e])}`,e)}function P(){throw new yC("Unexpected end of json string",t.length)}function aA(){throw new yC("Object key expected",e)}function iA(){throw new yC("Colon expected",e)}function BA(){let oA=t.slice(e,e+6);throw new yC(`Invalid unicode character "${oA}"`,e)}}function lQA(t,e){return t[e]==="*"&&t[e+1]==="/"}var cQA=typeof global=="object"&&global&&global.Object===Object&&global,Bw=cQA;var CQA=typeof self=="object"&&self&&self.Object===Object&&self,IQA=Bw||CQA||Function("return this")(),Ya=IQA;var dQA=Ya.Symbol,Mr=dQA;var eP=Object.prototype,BQA=eP.hasOwnProperty,EQA=eP.toString,$4=Mr?Mr.toStringTag:void 0;function QQA(t){var e=BQA.call(t,$4),A=t[$4];try{t[$4]=void 0;var i=!0}catch{}var n=EQA.call(t);return i&&(e?t[$4]=A:delete t[$4]),n}var tP=QQA;var hQA=Object.prototype,uQA=hQA.toString;function fQA(t){return uQA.call(t)}var iP=fQA;var mQA="[object Null]",pQA="[object Undefined]",nP=Mr?Mr.toStringTag:void 0;function wQA(t){return t==null?t===void 0?pQA:mQA:nP&&nP in Object(t)?tP(t):iP(t)}var mc=wQA;function DQA(t){return t!=null&&typeof t=="object"}var Us=DQA;var yQA="[object Symbol]";function vQA(t){return typeof t=="symbol"||Us(t)&&mc(t)==yQA}var Hg=vQA;function bQA(t,e){for(var A=-1,i=t==null?0:t.length,n=Array(i);++A0){if(++e>=BhA)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var pP=hhA;function uhA(t){return function(){return t}}var wP=uhA;var fhA=(function(){try{var t=Cg(Object,"defineProperty");return t({},"",{}),t}catch{}})(),RE=fhA;var mhA=RE?function(t,e){return RE(t,"toString",{configurable:!0,enumerable:!1,value:wP(e),writable:!0})}:v0,DP=mhA;var phA=pP(DP),yP=phA;function whA(t,e){for(var A=-1,i=t==null?0:t.length;++A-1&&t%1==0&&t-1&&t%1==0&&t<=_hA}var FE=LhA;function GhA(t){return t!=null&&FE(t.length)&&!Ew(t)}var pl=GhA;function KhA(t,e,A){if(!Qr(A))return!1;var i=typeof e;return(i=="number"?pl(A)&&NE(e,A.length):i=="string"&&e in A)?tI(A[e],t):!1}var e3=KhA;var UhA=Object.prototype;function JhA(t){var e=t&&t.constructor,A=typeof e=="function"&&e.prototype||UhA;return t===A}var nI=JhA;function YhA(t,e){for(var A=-1,i=Array(t);++A-1}var VP=r4A;function s4A(t,e){var A=this.__data__,i=rI(A,t);return i<0?(++this.size,A.push([t,e])):A[i][1]=e,this}var WP=s4A;function UE(t){var e=-1,A=t==null?0:t.length;for(this.clear();++e0&&A(r)?e>1?gj(r,e-1,A,i,n):TE(n,r):i||(n[n.length]=r)}return n}var lj=gj;var x4A=pw(Object.getPrototypeOf,Object),vw=x4A;function R4A(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++ir))return!1;var g=o.get(t),l=o.get(e);if(g&&l)return g==e&&l==t;var C=-1,I=!0,d=A&xfA?new Aq:void 0;for(o.set(t,e),o.set(e,t);++C=e||_<0||C&&U>=o}function f(){var F=Ow();if(Q(F))return b(F);r=setTimeout(f,E(F))}function b(F){return r=void 0,I&&i?d(F):(i=n=void 0,a)}function S(){r!==void 0&&clearTimeout(r),g=0,i=s=n=r=void 0}function M(){return r===void 0?a:b(Ow())}function D(){var F=Ow(),_=Q(F);if(i=arguments,n=this,s=F,_){if(r===void 0)return B(s);if(C)return clearTimeout(r),r=setTimeout(f,e),d(s)}return r===void 0&&(r=setTimeout(f,e)),a}return D.cancel=S,D.flush=M,D}var qE=xmA;function RmA(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var mi=RmA;function NmA(t){return typeof t=="function"?t:v0}var Pw=NmA;function FmA(t,e){for(var A=t==null?0:t.length;A--&&e(t[A],A,t)!==!1;);return t}var vq=FmA;var _mA=Jw(!0),bq=_mA;function LmA(t,e){return t&&bq(t,e,wl)}var Mq=LmA;var GmA=Tw(Mq,!0),kq=GmA;function KmA(t,e){var A=go(t)?vq:kq;return A(t,Pw(e))}var pS=KmA;function UmA(t){return t&&t.length?t[0]:void 0}var Dl=UmA;function JmA(t,e){var A=-1,i=pl(t)?Array(t.length):[];return Hw(t,function(n,o,a){i[++A]=e(n,o,a)}),i}var jw=JmA;function YmA(t,e){var A=go(t)?AI:jw;return A(t,b0(e,3))}var wS=YmA;var TmA=Object.prototype,HmA=TmA.hasOwnProperty,zmA=zw(function(t,e,A){HmA.call(t,A)?t[A].push(e):eI(t,A,[e])}),DS=zmA;function OmA(t){var e=t==null?0:t.length;return e?cj(t,0,-1):[]}var Ki=OmA;var PmA="[object Map]",jmA="[object Set]",qmA=Object.prototype,VmA=qmA.hasOwnProperty;function WmA(t){if(t==null)return!0;if(pl(t)&&(go(t)||typeof t=="string"||typeof t.splice=="function"||bC(t)||_E(t)||oI(t)))return!t.length;var e=pc(t);if(e==PmA||e==jmA)return!t.size;if(nI(t))return!ww(t).length;for(var A in t)if(VmA.call(t,A))return!1;return!0}var qi=WmA;function ZmA(t,e){return jE(t,e)}var Qi=ZmA;function XmA(t,e){return te||o&&a&&s&&!r&&!g||i&&a&&s||!A&&s||!n)return 1;if(!i&&!o&&!g&&t=r)return s;var g=A[i];return s*(g=="desc"?-1:1)}}return t.index-e.index}var Fq=npA;function opA(t,e,A){e.length?e=AI(e,function(o){return go(o)?function(a){return YE(a,o.length===1?o[0]:o)}:o}):e=[v0];var i=-1;e=AI(e,aI(b0));var n=jw(t,function(o,a,r){var s=AI(e,function(g){return g(o)});return{criteria:s,index:++i,value:o}});return Rq(n,function(o,a){return Fq(o,a,A)})}var _q=opA;var apA=zw(function(t,e,A){t[A?0:1].push(e)},function(){return[[],[]]}),vS=apA;var rpA=Math.ceil,spA=Math.max;function gpA(t,e,A,i){for(var n=-1,o=spA(rpA((e-t)/(A||1)),0),a=Array(o);o--;)a[i?o:++n]=t,t+=A;return a}var Lq=gpA;function lpA(t){return function(e,A,i){return i&&typeof i!="number"&&e3(e,A,i)&&(A=i=void 0),e=xE(e),A===void 0?(A=e,e=0):A=xE(A),i=i===void 0?e1&&e3(t,e[0],e[1])?e=[]:A>2&&e3(e[0],e[1],e[2])&&(e=[e[0]]),_q(t,lj(e,1),[])}),bS=CpA;var IpA=9007199254740991,MS=4294967295,dpA=Math.min;function BpA(t,e){if(t=IP(t),t<1||t>IpA)return[];var A=MS,i=dpA(t,MS);e=Pw(e),t-=MS;for(var n=fw(i,e);++AArray.isArray(t),hpA=t=>t!==null&&typeof t=="object"&&!dI(t),upA=t=>typeof t=="string",id=(t,e)=>t===e?!0:t!==null&&e!==null&&typeof t=="object"&&typeof e=="object"&&Object.keys(t).length===Object.keys(e).length&&Object.entries(t).every(([A,i])=>id(i,e[A])),Kq=(t,e)=>{let A=t?.[e];if(A!==void 0){if(!Object.hasOwn(t,e)||Array.isArray(t)&&!/^\d+$/.test(e)||typeof t!="object")throw new TypeError(`Unsupported property "${e}"`);return A}};function Xa(t){return(...e)=>{let A=e.map(o=>$a(o)),i=A[0],n=A[1];return A.length===1?o=>t(i(o)):A.length===2?o=>t(i(o),n(o)):o=>t(...A.map(a=>a(o)))}}var r3={boolean:0,number:1,string:2},Uq=3,Tq=(t,e)=>typeof t==typeof e&&typeof t in r3?t>e:!1,fpA=(t,e)=>id(t,e)||Tq(t,e),Hq=(t,e)=>typeof t==typeof e&&typeof t in r3?tid(t,e)||Hq(t,e),a3={pipe:(...t)=>{let e=t.map(A=>$a(A));return A=>e.reduce((i,n)=>n(i),A)},object:t=>{let e=Object.keys(t).map(A=>[A,$a(t[A])]);return A=>{let i={};for(let[n,o]of e)i[n]=o(A);return i}},array:(...t)=>{let e=t.map(A=>$a(A));return A=>e.map(i=>i(A))},get:(...t)=>{if(t.length===0)return e=>e??null;if(t.length===1){let e=t[0];return A=>Kq(A,e)??null}return e=>{let A=e;for(let i of t)A=Kq(A,i);return A??null}},map:t=>{let e=$a(t);return A=>A.map(e)},mapObject:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e({key:n,value:A[n]});i[o.key]=o.value}return i}},mapKeys:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e(n);i[o]=A[n]}return i}},mapValues:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A))i[n]=e(A[n]);return i}},filter:t=>{let e=$a(t);return A=>A.filter(i=>Jq(e(i)))},sort:(t=["get"],e)=>{let A=$a(t),i=e==="desc"?-1:1;function n(o,a){let r=A(o),s=A(a);if(typeof r!=typeof s){let g=r3[typeof r]??Uq,l=r3[typeof s]??Uq;return g>l?i:gs?i:ro.slice().sort(n)},reverse:()=>t=>t.toReversed(),pick:(...t)=>{let e=t.map(([i,...n])=>[n[n.length-1],a3.get(...n)]),A=(i,n)=>{let o={};for(let[a,r]of n)o[a]=r(i);return o};return i=>dI(i)?i.map(n=>A(n,e)):A(i,e)},groupBy:t=>{let e=$a(t);return A=>{let i={};for(let n of A){let o=e(n);i[o]?i[o].push(n):i[o]=[n]}return i}},keyBy:t=>{let e=$a(t);return A=>{let i={};for(let n of A){let o=e(n);o in i||(i[o]=n)}return i}},flatten:()=>t=>t.flat(),join:(t="")=>e=>e.join(t),split:Xa((t,e)=>e!==void 0?t.split(e):t.trim().split(/\s+/)),substring:Xa((t,e,A)=>t.slice(Math.max(e,0),A)),uniq:()=>t=>{let e=[];for(let A of t)e.findIndex(i=>id(i,A))===-1&&e.push(A);return e},uniqBy:t=>e=>Object.values(a3.keyBy(t)(e)),limit:t=>e=>e.slice(0,Math.max(t,0)),size:()=>t=>t.length,keys:()=>Object.keys,values:()=>Object.values,prod:()=>t=>o3(t,(e,A)=>e*A),sum:()=>t=>dI(t)?t.reduce((e,A)=>e+A,0):SS(),average:()=>t=>dI(t)?t.length>0?t.reduce((e,A)=>e+A)/t.length:null:SS(),min:()=>t=>o3(t,(e,A)=>Math.min(e,A)),max:()=>t=>o3(t,(e,A)=>Math.max(e,A)),and:Xa((...t)=>o3(t,(e,A)=>!!(e&&A))),or:Xa((...t)=>o3(t,(e,A)=>!!(e||A))),not:Xa(t=>!t),exists:t=>{let e=t.slice(1),A=e.pop(),i=a3.get(...e);return n=>{let o=i(n);return!!o&&Object.hasOwnProperty.call(o,A)}},if:(t,e,A)=>{let i=$a(t),n=$a(e),o=$a(A);return a=>Jq(i(a))?n(a):o(a)},in:(t,e)=>{let A=$a(t),i=$a(e);return n=>{let o=A(n);return i(n).findIndex(a=>id(a,o))!==-1}},"not in":(t,e)=>{let A=a3.in(t,e);return i=>!A(i)},regex:(t,e,A)=>{let i=new RegExp(e,A),n=$a(t);return o=>i.test(n(o))},match:(t,e,A)=>{let i=new RegExp(e,A),n=$a(t);return o=>{let a=n(o).match(i);return a?Yq(a):null}},matchAll:(t,e,A)=>{let i=new RegExp(e,`${A??""}g`),n=$a(t);return o=>Array.from(n(o).matchAll(i)).map(Yq)},eq:Xa(id),gt:Xa(Tq),gte:Xa(fpA),lt:Xa(Hq),lte:Xa(mpA),ne:Xa((t,e)=>!id(t,e)),add:Xa((t,e)=>t+e),subtract:Xa((t,e)=>t-e),multiply:Xa((t,e)=>t*e),divide:Xa((t,e)=>t/e),mod:Xa((t,e)=>t%e),pow:Xa((t,e)=>t**e),abs:Xa(Math.abs),round:Xa((t,e=0)=>+`${Math.round(+`${t}e${e}`)}e${-e}`),number:Xa(t=>{let e=Number(t);return Number.isNaN(Number(t))?null:e}),string:Xa(String)},Jq=t=>t!==null&&t!==0&&t!==!1,o3=(t,e)=>(dI(t)||SS(),t.length===0?null:t.reduce(e)),Yq=t=>{let[e,...A]=t,i=t.groups;return A.length?i?{value:e,groups:A,namedGroups:i}:{value:e,groups:A}:{value:e}},SS=()=>{xS("Array expected")},xS=t=>{throw new TypeError(t)},Vw=[];function $a(t,e){Vw.unshift(cA(cA(cA({},a3),Vw[0]),e?.functions));try{let A=dI(t)?ppA(t,Vw[0]):hpA(t)?xS(`Function notation ["object", {...}] expected but got ${JSON.stringify(t)}`):()=>t;return i=>{try{return A(i)}catch(n){throw n.jsonquery=[{data:i,query:t},...n.jsonquery??[]],n}}}finally{Vw.shift()}}function ppA(t,e){let[A,...i]=t,n=e[A];return n||xS(`Unknown function '${A}'`),n(...i)}var zq=[{pow:"^"},{multiply:"*",divide:"/",mod:"%"},{add:"+",subtract:"-"},{gt:">",gte:">=",lt:"<",lte:"<=",in:"in","not in":"not in"},{eq:"==",ne:"!="},{and:"and"},{or:"or"},{pipe:"|"}],wpA=["|","and","or"],Oq=["|","and","or","*","/","%","+","-"];function Pq(t,e){if(!dI(e))throw new Error("Invalid custom operators");return e.reduce(DpA,t)}function DpA(t,{name:e,op:A,at:i,after:n,before:o}){if(i)return t.map(s=>Object.values(s).includes(i)?Ge(cA({},s),{[e]:A}):s);let a=n??o,r=t.findIndex(s=>Object.values(s).includes(a));if(r!==-1)return t.toSpliced(r+(n?1:0),0,{[e]:A});throw new Error("Invalid custom operator")}var ypA=/^[a-zA-Z_$][a-zA-Z\d_$]*$/,vpA=/^[a-zA-Z_$][a-zA-Z\d_$]*/,bpA=/^"(?:[^"\\]|\\.)*"/,MpA=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,kpA=/^(0|[1-9][0-9]*)/,SpA=/^(true|false|null)/,xpA=/^[ \n\t\r]+/;function RS(t,e){let A=e?.operators??[],i=Pq(zq,A),n=Object.assign({},...i),o=wpA.concat(A.filter(j=>j.vararg).map(j=>j.op)),a=Oq.concat(A.filter(j=>j.leftAssociative).map(j=>j.op)),r=(j=i.length-1)=>{let AA=i[j];if(!AA)return g();let O=t[U]==="(",DA=r(j-1);for(;;){if(D(),t[U]==="."&&"pipe"in AA){let sA=l();DA=DA[0]==="pipe"?[...DA,sA]:["pipe",DA,sA];continue}let P=U,aA=s(AA);if(!aA)break;let iA=r(j-1),BA=DA[0],oA=aA===BA&&!O;if(oA&&!a.includes(n[aA])){U=P;break}DA=oA&&o.includes(n[aA])?[...DA,iA]:[aA,DA,iA]}return DA},s=j=>{let AA=Object.keys(j).sort((O,DA)=>DA.length-O.length);for(let O of AA){let DA=j[O];if(t.substring(U,U+DA.length)===DA)return U+=DA.length,D(),O}},g=()=>{if(D(),t[U]==="("){U++;let j=r();return F(")"),j}return l()},l=()=>{if(t[U]==="."){let j=[];for(;t[U]===".";)U++,j.push(B()??E()??f()??_("Property expected")),D();return["get",...j]}return C()},C=()=>{let j=U,AA=E();if(D(),!AA||t[U]!=="(")return U=j,I();U++,D();let O=t[U]!==")"?[r()]:[];for(;U{if(t[U]==="{"){U++,D();let j={},AA=!0;for(;U{if(t[U]==="["){U++,D();let j=[],AA=!0;for(;UM(bpA,JSON.parse),E=()=>M(vpA,j=>j),Q=()=>M(MpA,JSON.parse),f=()=>M(kpA,JSON.parse),b=()=>{let j=M(SpA,JSON.parse);if(j!==void 0)return j;_("Value expected")},S=()=>{D(),U{let O=t.substring(U).match(j);if(O)return U+=O[0].length,AA(O[0])},D=()=>M(xpA,j=>j),F=j=>{t[U]!==j&&_(`Character '${j}' expected`),U++},_=(j,AA=U)=>{throw new SyntaxError(`${j} (pos: ${AA})`)},U=0,J=r();return S(),J}var RpA=40,NpA=" ",jq=(t,e)=>{let A=e?.indentation??NpA,i=e?.operators??[],n=Pq(zq,i),o=Object.assign({},...n),a=Oq.concat(i.filter(d=>d.leftAssociative).map(d=>d.op)),r=(d,B,E=!1)=>dI(d)?s(d,B,E):JSON.stringify(d),s=(d,B,E)=>{let[Q,...f]=d;if(Q==="get"&&f.length>0)return l(f);if(Q==="object")return g(f[0],B);if(Q==="array"){let D=f.map(F=>r(F,B));return I(D,["[",", ","]"],[`[ -${B+A}`,`, -${B+A}`,` -${B}]`])}let b=o[Q];if(b){let D=E?"(":"",F=E?")":"",_=f.map((U,J)=>{let j=U?.[0],AA=n.findIndex(P=>Q in P),O=n.findIndex(P=>j in P),DA=AA0||Q===j&&!a.includes(b);return r(U,B+A,DA)});return I(_,[D,` ${b} `,F],[D,` -${B+A}${b} `,F])}let S=f.length===1?B:B+A,M=f.map(D=>r(D,S));return I(M,[`${Q}(`,", ",")"],f.length===1?[`${Q}(`,`, -${B}`,")"]:[`${Q}( -${S}`,`, -${S}`,` -${B})`])},g=(d,B)=>{let E=B+A,Q=Object.entries(d).map(([f,b])=>`${C(f)}: ${r(b,E)}`);return I(Q,["{ ",", "," }"],[`{ -${E}`,`, -${E}`,` -${B}}`])},l=d=>d.map(B=>`.${C(B)}`).join(""),C=d=>ypA.test(d)?d:JSON.stringify(d),I=(d,[B,E,Q],[f,b,S])=>B.length+d.reduce((M,D)=>M+D.length+E.length,0)-E.length+Q.length<=(e?.maxLineLength??RpA)?B+d.join(E)+Q:f+d.join(b)+S;return r(t,"")};function qq(t,e,A){return $a(upA(e)?RS(e,A):e,A)(t)}var Vq={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256a208 208 0 1 1 -416 0 208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]};var FpA={prefix:"far",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zm230.7 89.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"]},NS=FpA;var Wq={prefix:"far",iconName:"lightbulb",icon:[384,512,[128161],"f0eb","M296.5 291.1C321 265.2 336 230.4 336 192 336 112.5 271.5 48 192 48S48 112.5 48 192c0 38.4 15 73.2 39.5 99.1 21.3 22.4 44.9 54 53.3 92.9l102.4 0c8.4-39 32-70.5 53.3-92.9zm34.8 33C307.7 349 288 379.4 288 413.7l0 18.3c0 44.2-35.8 80-80 80l-32 0c-44.2 0-80-35.8-80-80l0-18.3C96 379.4 76.3 349 52.7 324.1 20 289.7 0 243.2 0 192 0 86 86 0 192 0S384 86 384 192c0 51.2-20 97.7-52.7 132.1zM144 184c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6 39.4-88 88-88 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.1 0-40 17.9-40 40z"]};var FS={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z"]};var Zq={prefix:"fas",iconName:"rotate",icon:[512,512,[128260,"sync-alt"],"f2f1","M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z"]};var _S={prefix:"fas",iconName:"paste",icon:[512,512,["file-clipboard"],"f0ea","M64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-224c0-61.9 50.1-112 112-112l64 0 0-48c0-35.3-28.7-64-64-64L64 0zM248 112l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm40 48c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160z"]};var _pA={prefix:"fas",iconName:"crop-simple",icon:[512,512,["crop-alt"],"f565","M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-208 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64l-208 0 0 64 208 0 0 352z"]},Xq=_pA;var s3={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z"]};var LpA={prefix:"fas",iconName:"square-caret-down",icon:[448,512,["caret-square-down"],"f150","M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9S110.5 192 120 192l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"]},$q=LpA;var WE={prefix:"fas",iconName:"caret-right",icon:[256,512,[],"f0da","M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"]};var GpA={prefix:"fas",iconName:"magnifying-glass",icon:[512,512,[128269,"search"],"f002","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"]},g3=GpA;var AV={prefix:"fas",iconName:"eye",icon:[576,512,[128065],"f06e","M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z"]},eV={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]};var tV={prefix:"fas",iconName:"chevron-up",icon:[448,512,[],"f077","M201.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 173.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"]};var iV={prefix:"fas",iconName:"circle-notch",icon:[512,512,[],"f1ce","M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8-79.3 23.6-137.1 97.1-137.1 184.1 0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256 512 397.4 397.4 512 256 512S0 397.4 0 256c0-116 77.1-213.9 182.9-245.4 16.9-5 34.8 4.6 39.8 21.5z"]};var KpA={prefix:"fas",iconName:"ellipsis-vertical",icon:[128,512,["ellipsis-v"],"f142","M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z"]},LS=KpA;var UpA={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L368 46.1 465.9 144 490.3 119.6c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L432 177.9 334.1 80 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"]},nV=UpA;var GS={prefix:"fas",iconName:"clone",icon:[512,512,[],"f24d","M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"]};var JpA={prefix:"fas",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"]},KS=JpA;var YpA={prefix:"fas",iconName:"square-caret-up",icon:[448,512,["caret-square-up"],"f151","M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9S337.5 320 328 320l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z"]},oV=YpA;var l3={prefix:"fas",iconName:"code",icon:[576,512,[],"f121","M360.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm64.6 136.1c-12.5 12.5-12.5 32.8 0 45.3l73.4 73.4-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0zm-274.7 0c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 150.6 182.6c12.5-12.5 12.5-32.8 0-45.3z"]};var US={prefix:"fas",iconName:"angle-right",icon:[256,512,[8250],"f105","M247.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L179.2 256 41.9 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"]};var TpA={prefix:"fas",iconName:"gear",icon:[512,512,[9881,"cog"],"f013","M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z"]},aV=TpA;var rV={prefix:"fas",iconName:"up-right-and-down-left-from-center",icon:[512,512,["expand-alt"],"f424","M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"]};var SC={prefix:"fas",iconName:"wrench",icon:[576,512,[128295],"f0ad","M509.4 98.6c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 88.4-71.6 160-160 160-17.5 0-34.4-2.8-50.2-8L146.9 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8L232 210.2c-5.2-15.8-8-32.6-8-50.2 0-88.4 71.6-160 160-160 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7z"]},Ww={prefix:"fas",iconName:"trash-can",icon:[448,512,[61460,"trash-alt"],"f2ed","M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"]};var Zw={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"]};var sV={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},gV=sV;var c3=sV;var nd={prefix:"fas",iconName:"pen",icon:[512,512,[128394],"f304","M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"]};var lV={prefix:"fas",iconName:"chevron-down",icon:[448,512,[],"f078","M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"]};var cV={prefix:"fas",iconName:"angle-down",icon:[384,512,[8964],"f107","M169.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 306.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var HpA={prefix:"fas",iconName:"arrow-down-short-wide",icon:[576,512,["sort-amount-desc","sort-amount-down-alt"],"f884","M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"]};var C3=HpA;var zpA={prefix:"fas",iconName:"triangle-exclamation",icon:[512,512,[9888,"exclamation-triangle","warning"],"f071","M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},BI=zpA;var OpA={prefix:"fas",iconName:"scissors",icon:[512,512,[9984,9986,9988,"cut"],"f0c4","M192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6-28.3-28.3-74.1-28.3-102.4 0L256 192 216.5 152.5c4.9-12.6 7.5-26.2 7.5-40.5 0-61.9-50.1-112-112-112S0 50.1 0 112 50.1 224 112 224c14.3 0 27.9-2.7 40.5-7.5L192 256zm97.9 97.9L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0 7.1-7.1 7.1-18.5 0-25.6l-145.3-145.3-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"]},od=OpA;var I3={prefix:"fas",iconName:"arrow-right-arrow-left",icon:[512,512,[8644,"exchange"],"f0ec","M502.6 150.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L402.7 160 32 160c-17.7 0-32-14.3-32-32S14.3 96 32 96l370.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 352 480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-370.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z"]};var JS={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z"]};var CV={prefix:"fas",iconName:"down-left-and-up-right-to-center",icon:[512,512,["compress-alt"],"f422","M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"]};var ad={prefix:"fas",iconName:"plus",icon:[448,512,[10133,61543,"add"],"2b","M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z"]};var xC={prefix:"fas",iconName:"copy",icon:[448,512,[],"f0c5","M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z"]};var PpA={prefix:"fas",iconName:"arrow-rotate-right",icon:[512,512,[8635,"arrow-right-rotate","arrow-rotate-forward","redo"],"f01e","M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"]};var Xw=PpA;var M0={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z"]};var jpA={prefix:"fas",iconName:"arrow-rotate-left",icon:[512,512,[8634,"arrow-left-rotate","arrow-rotate-back","arrow-rotate-backward","undo"],"f0e2","M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"]};var $w=jpA;var YS={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z"]};var TS={prefix:"fas",iconName:"arrow-down",icon:[384,512,[8595],"f063","M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var inA=su(BV(),1);var EV=Number.isNaN||function(e){return typeof e=="number"&&e!==e};function qpA(t,e){return!!(t===e||EV(t)&&EV(e))}function VpA(t,e){if(t.length!==e.length)return!1;for(var A=0;A{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},Qg=class t{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+t.version}static addUnaryOp(e){return t.max_unop_len=Math.max(e.length,t.max_unop_len),t.unary_ops[e]=1,t}static addBinaryOp(e,A,i){return t.max_binop_len=Math.max(e.length,t.max_binop_len),t.binary_ops[e]=A,i?t.right_associative.add(e):t.right_associative.delete(e),t}static addIdentifierChar(e){return t.additional_identifier_chars.add(e),t}static addLiteral(e,A){return t.literals[e]=A,t}static removeUnaryOp(e){return delete t.unary_ops[e],e.length===t.max_unop_len&&(t.max_unop_len=t.getMaxKeyLen(t.unary_ops)),t}static removeAllUnaryOps(){return t.unary_ops={},t.max_unop_len=0,t}static removeIdentifierChar(e){return t.additional_identifier_chars.delete(e),t}static removeBinaryOp(e){return delete t.binary_ops[e],e.length===t.max_binop_len&&(t.max_binop_len=t.getMaxKeyLen(t.binary_ops)),t.right_associative.delete(e),t}static removeAllBinaryOps(){return t.binary_ops={},t.max_binop_len=0,t}static removeLiteral(e){return delete t.literals[e],t}static removeAllLiterals(){return t.literals={},t}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new t(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(A=>A.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return t.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!t.binary_ops[String.fromCharCode(e)]||t.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return t.isIdentifierStart(e)||t.isDecimalDigit(e)}throwError(e){let A=new Error(e+" at character "+this.index);throw A.index=this.index,A.description=e,A}runHook(e,A){if(t.hooks[e]){let i={context:this,node:A};return t.hooks.run(e,i),i.node}return A}searchHook(e){if(t.hooks[e]){let A={context:this};return t.hooks[e].find(function(i){return i.call(A.context,A),A.node}),A.node}}gobbleSpaces(){let e=this.code;for(;e===t.SPACE_CODE||e===t.TAB_CODE||e===t.LF_CODE||e===t.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),A=e.length===1?e[0]:{type:t.COMPOUND,body:e};return this.runHook("after-all",A)}gobbleExpressions(e){let A=[],i,n;for(;this.index0;){if(t.binary_ops.hasOwnProperty(e)&&(!t.isIdentifierStart(this.code)||this.index+e.lengtho.right_a&&C.right_a?i>C.prec:i<=C.prec;for(;n.length>2&&l(n[n.length-2]);)r=n.pop(),A=n.pop().value,a=n.pop(),e={type:t.BINARY_EXP,operator:A,left:a,right:r},n.push(e);e=this.gobbleToken(),e||this.throwError("Expected expression after "+g),n.push(o,e)}for(s=n.length-1,e=n[s];s>1;)e={type:t.BINARY_EXP,operator:n[s-1].value,left:n[s-2],right:e},s-=2;return e}gobbleToken(){let e,A,i,n;if(this.gobbleSpaces(),n=this.searchHook("gobble-token"),n)return this.runHook("after-token",n);if(e=this.code,t.isDecimalDigit(e)||e===t.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===t.SQUOTE_CODE||e===t.DQUOTE_CODE)n=this.gobbleStringLiteral();else if(e===t.OBRACK_CODE)n=this.gobbleArray();else{for(A=this.expr.substr(this.index,t.max_unop_len),i=A.length;i>0;){if(t.unary_ops.hasOwnProperty(A)&&(!t.isIdentifierStart(this.code)||this.index+A.length=A.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}else if(o===t.COMMA_CODE){if(this.index++,n++,n!==A.length){if(e===t.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===t.CBRACK_CODE)for(let a=A.length;a":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});Qg.max_unop_len=Qg.getMaxKeyLen(Qg.unary_ops);Qg.max_binop_len=Qg.getMaxKeyLen(Qg.binary_ops);var GC=t=>new Qg(t).parse(),pyA=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(Qg).filter(t=>!pyA.includes(t)&&GC[t]===void 0).forEach(t=>{GC[t]=Qg[t]});GC.Jsep=Qg;var wyA="ConditionalExpression",DyA={name:"ternary",init(t){t.hooks.add("after-expression",function(A){if(A.node&&this.code===t.QUMARK_CODE){this.index++;let i=A.node,n=this.gobbleExpression();if(n||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;let o=this.gobbleExpression();if(o||this.throwError("Expected expression"),A.node={type:wyA,test:i,consequent:n,alternate:o},i.operator&&t.binary_ops[i.operator]<=.9){let a=i;for(;a.right.operator&&t.binary_ops[a.right.operator]<=.9;)a=a.right;A.node.test=a.right,a.right=A.node,A.node=i}}else this.throwError("Expected :")}})}};GC.plugins.register(DyA);var VZ=47,yyA=92,vyA={name:"regex",init(t){t.hooks.add("gobble-token",function(A){if(this.code===VZ){let i=++this.index,n=!1;for(;this.index=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57)a+=this.char;else break}let r;try{r=new RegExp(o,a)}catch(s){this.throwError(s.message)}return A.node={type:t.LITERAL,value:r,raw:this.expr.slice(i-1,this.index)},A.node=this.gobbleTokenProperty(A.node),A.node}this.code===t.OBRACK_CODE?n=!0:n&&this.code===t.CBRACK_CODE&&(n=!1),this.index+=this.code===yyA?2:1}this.throwError("Unclosed Regex")}})}},MR=43,byA=45,cQ={name:"assignment",assignmentOperators:new Set(["=","*=","**=","/=","%=","+=","-=","<<=",">>=",">>>=","&=","^=","|=","||=","&&=","??="]),updateOperators:[MR,byA],assignmentPrecedence:.9,init(t){let e=[t.IDENTIFIER,t.MEMBER_EXP];cQ.assignmentOperators.forEach(i=>t.addBinaryOp(i,cQ.assignmentPrecedence,!0)),t.hooks.add("gobble-token",function(n){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(this.index+=2,n.node={type:"UpdateExpression",operator:o===MR?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},(!n.node.argument||!e.includes(n.node.argument.type))&&this.throwError(`Unexpected ${n.node.operator}`))}),t.hooks.add("after-token",function(n){if(n.node){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(e.includes(n.node.type)||this.throwError(`Unexpected ${n.node.operator}`),this.index+=2,n.node={type:"UpdateExpression",operator:o===MR?"++":"--",argument:n.node,prefix:!1})}}),t.hooks.add("after-expression",function(n){n.node&&A(n.node)});function A(i){cQ.assignmentOperators.has(i.operator)?(i.type="AssignmentExpression",A(i.left),A(i.right)):i.operator||Object.values(i).forEach(n=>{n&&typeof n=="object"&&A(n)})}}};GC.plugins.register(vyA,cQ);GC.addUnaryOp("typeof");GC.addLiteral("null",null);GC.addLiteral("undefined",void 0);var MyA=new Set(["constructor","__proto__","__defineGetter__","__defineSetter__"]),_o={evalAst(t,e){switch(t.type){case"BinaryExpression":case"LogicalExpression":return _o.evalBinaryExpression(t,e);case"Compound":return _o.evalCompound(t,e);case"ConditionalExpression":return _o.evalConditionalExpression(t,e);case"Identifier":return _o.evalIdentifier(t,e);case"Literal":return _o.evalLiteral(t,e);case"MemberExpression":return _o.evalMemberExpression(t,e);case"UnaryExpression":return _o.evalUnaryExpression(t,e);case"ArrayExpression":return _o.evalArrayExpression(t,e);case"CallExpression":return _o.evalCallExpression(t,e);case"AssignmentExpression":return _o.evalAssignmentExpression(t,e);default:throw SyntaxError("Unexpected expression",t)}},evalBinaryExpression(t,e){return{"||":(i,n)=>i||n(),"&&":(i,n)=>i&&n(),"|":(i,n)=>i|n(),"^":(i,n)=>i^n(),"&":(i,n)=>i&n(),"==":(i,n)=>i==n(),"!=":(i,n)=>i!=n(),"===":(i,n)=>i===n(),"!==":(i,n)=>i!==n(),"<":(i,n)=>i":(i,n)=>i>n(),"<=":(i,n)=>i<=n(),">=":(i,n)=>i>=n(),"<<":(i,n)=>i<>":(i,n)=>i>>n(),">>>":(i,n)=>i>>>n(),"+":(i,n)=>i+n(),"-":(i,n)=>i-n(),"*":(i,n)=>i*n(),"/":(i,n)=>i/n(),"%":(i,n)=>i%n()}[t.operator](_o.evalAst(t.left,e),()=>_o.evalAst(t.right,e))},evalCompound(t,e){let A;for(let i=0;i-_o.evalAst(i,e),"!":i=>!_o.evalAst(i,e),"~":i=>~_o.evalAst(i,e),"+":i=>+_o.evalAst(i,e),typeof:i=>typeof _o.evalAst(i,e)}[t.operator](t.argument)},evalArrayExpression(t,e){return t.elements.map(A=>_o.evalAst(A,e))},evalCallExpression(t,e){let A=t.arguments.map(n=>_o.evalAst(n,e));return _o.evalAst(t.callee,e)(...A)},evalAssignmentExpression(t,e){if(t.left.type!=="Identifier")throw SyntaxError("Invalid left-hand side in assignment");let A=t.left.name,i=_o.evalAst(t.right,e);return e[A]=i,e[A]}},xR=class{constructor(e){this.code=e,this.ast=GC(this.code)}runInNewContext(e){let A=Object.assign(Object.create(null),e);return _o.evalAst(this.ast,A)}};function wI(t,e){return t=t.slice(),t.push(e),t}function RR(t,e){return e=e.slice(),e.unshift(t),e}var NR=class extends Error{constructor(e){super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),this.avoidNew=!0,this.value=e,this.name="NewError"}};function eo(t,e,A,i,n){if(!(this instanceof eo))try{return new eo(t,e,A,i,n)}catch(a){if(!a.avoidNew)throw a;return a.value}typeof t=="string"&&(n=i,i=A,A=e,e=t,t=null);let o=t&&typeof t=="object";if(t=t||{},this.json=t.json||A,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=Object.hasOwn(t,"wrap")?t.wrap:!0,this.sandbox=t.sandbox||{},this.eval=t.eval===void 0?"safe":t.eval,this.ignoreEvalErrors=typeof t.ignoreEvalErrors>"u"?!1:t.ignoreEvalErrors,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||i||null,this.otherTypeCallback=t.otherTypeCallback||n||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},t.autostart!==!1){let a={path:o?t.path:e};o?"json"in t&&(a.json=t.json):a.json=A;let r=this.evaluate(a);if(!r||typeof r!="object")throw new NR(r);return r}}eo.prototype.evaluate=function(t,e,A,i){let n=this.parent,o=this.parentProperty,{flatten:a,wrap:r}=this;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,A=A||this.callback,this.currOtherTypeCallback=i||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&typeof t=="object"&&!Array.isArray(t)){if(!t.path&&t.path!=="")throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!Object.hasOwn(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');({json:e}=t),a=Object.hasOwn(t,"flatten")?t.flatten:a,this.currResultType=Object.hasOwn(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=Object.hasOwn(t,"sandbox")?t.sandbox:this.currSandbox,r=Object.hasOwn(t,"wrap")?t.wrap:r,this.currEval=Object.hasOwn(t,"eval")?t.eval:this.currEval,A=Object.hasOwn(t,"callback")?t.callback:A,this.currOtherTypeCallback=Object.hasOwn(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,n=Object.hasOwn(t,"parent")?t.parent:n,o=Object.hasOwn(t,"parentProperty")?t.parentProperty:o,t=t.path}if(n=n||null,o=o||null,Array.isArray(t)&&(t=eo.toPathString(t)),!t&&t!==""||!e)return;let s=eo.toPathArray(t);s[0]==="$"&&s.length>1&&s.shift(),this._hasParentSelector=null;let g=this._trace(s,e,["$"],n,o,A).filter(function(l){return l&&!l.isParentSelector});return g.length?!r&&g.length===1&&!g[0].hasArrExpr?this._getPreferredOutput(g[0]):g.reduce((l,C)=>{let I=this._getPreferredOutput(C);return a&&Array.isArray(I)?l=l.concat(I):l.push(I),l},[]):r?[]:void 0};eo.prototype._getPreferredOutput=function(t){let e=this.currResultType;switch(e){case"all":{let A=Array.isArray(t.path)?t.path:eo.toPathArray(t.path);return t.pointer=eo.toPointer(A),t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),t}case"value":case"parent":case"parentProperty":return t[e];case"path":return eo.toPathString(t[e]);case"pointer":return eo.toPointer(t.path);default:throw new TypeError("Unknown result type")}};eo.prototype._handleCallback=function(t,e,A){if(e){let i=this._getPreferredOutput(t);t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),e(i,A,t)}};eo.prototype._trace=function(t,e,A,i,n,o,a,r){let s;if(!t.length)return s={path:A,value:e,parent:i,parentProperty:n,hasArrExpr:a},this._handleCallback(s,o,"value"),s;let g=t[0],l=t.slice(1),C=[];function I(d){Array.isArray(d)?d.forEach(B=>{C.push(B)}):C.push(d)}if((typeof g!="string"||r)&&e&&Object.hasOwn(e,g))I(this._trace(l,e[g],wI(A,g),e,g,o,a));else if(g==="*")this._walk(e,d=>{I(this._trace(l,e[d],wI(A,d),e,d,o,!0,!0))});else if(g==="..")I(this._trace(l,e,A,i,n,o,a)),this._walk(e,d=>{typeof e[d]=="object"&&I(this._trace(t.slice(),e[d],wI(A,d),e,d,o,!0))});else{if(g==="^")return this._hasParentSelector=!0,{path:A.slice(0,-1),expr:l,isParentSelector:!0};if(g==="~")return s={path:wI(A,g),value:n,parent:i,parentProperty:null},this._handleCallback(s,o,"property"),s;if(g==="$")I(this._trace(l,e,A,null,null,o,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(g))I(this._slice(g,l,e,A,i,n,o));else if(g.indexOf("?(")===0){if(this.currEval===!1)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");let d=g.replace(/^\?\((.*?)\)$/u,"$1"),B=/@.?([^?]*)[['](\??\(.*?\))(?!.\)\])[\]']/gu.exec(d);B?this._walk(e,E=>{let Q=[B[2]],f=B[1]?e[E][B[1]]:e[E];this._trace(Q,f,A,i,n,o,!0).length>0&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))}):this._walk(e,E=>{this._eval(d,e[E],E,A,i,n)&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))})}else if(g[0]==="("){if(this.currEval===!1)throw new Error("Eval [(expr)] prevented in JSONPath expression.");I(this._trace(RR(this._eval(g,e,A.at(-1),A.slice(0,-1),i,n),l),e,A,i,n,o,a))}else if(g[0]==="@"){let d=!1,B=g.slice(1,-2);switch(B){case"scalar":(!e||!["object","function"].includes(typeof e))&&(d=!0);break;case"boolean":case"string":case"undefined":case"function":typeof e===B&&(d=!0);break;case"integer":Number.isFinite(e)&&!(e%1)&&(d=!0);break;case"number":Number.isFinite(e)&&(d=!0);break;case"nonFinite":typeof e=="number"&&!Number.isFinite(e)&&(d=!0);break;case"object":e&&typeof e===B&&(d=!0);break;case"array":Array.isArray(e)&&(d=!0);break;case"other":d=this.currOtherTypeCallback(e,A,i,n);break;case"null":e===null&&(d=!0);break;default:throw new TypeError("Unknown value type "+B)}if(d)return s={path:A,value:e,parent:i,parentProperty:n},this._handleCallback(s,o,"value"),s}else if(g[0]==="`"&&e&&Object.hasOwn(e,g.slice(1))){let d=g.slice(1);I(this._trace(l,e[d],wI(A,d),e,d,o,a,!0))}else if(g.includes(",")){let d=g.split(",");for(let B of d)I(this._trace(RR(B,l),e,A,i,n,o,!0))}else!r&&e&&Object.hasOwn(e,g)&&I(this._trace(l,e[g],wI(A,g),e,g,o,a,!0))}if(this._hasParentSelector)for(let d=0;d{e(A)})};eo.prototype._slice=function(t,e,A,i,n,o,a){if(!Array.isArray(A))return;let r=A.length,s=t.split(":"),g=s[2]&&Number.parseInt(s[2])||1,l=s[0]&&Number.parseInt(s[0])||0,C=s[1]&&Number.parseInt(s[1])||r;l=l<0?Math.max(0,l+r):Math.min(r,l),C=C<0?Math.max(0,C+r):Math.min(r,C);let I=[];for(let d=l;d{I.push(E)});return I};eo.prototype._eval=function(t,e,A,i,n,o){this.currSandbox._$_parentProperty=o,this.currSandbox._$_parent=n,this.currSandbox._$_property=A,this.currSandbox._$_root=this.json,this.currSandbox._$_v=e;let a=t.includes("@path");a&&(this.currSandbox._$_path=eo.toPathString(i.concat([A])));let r=this.currEval+"Script:"+t;if(!eo.cache[r]){let s=t.replaceAll("@parentProperty","_$_parentProperty").replaceAll("@parent","_$_parent").replaceAll("@property","_$_property").replaceAll("@root","_$_root").replaceAll(/@([.\s)[])/gu,"_$_v$1");if(a&&(s=s.replaceAll("@path","_$_path")),this.currEval==="safe"||this.currEval===!0||this.currEval===void 0)eo.cache[r]=new this.safeVm.Script(s);else if(this.currEval==="native")eo.cache[r]=new this.vm.Script(s);else if(typeof this.currEval=="function"&&this.currEval.prototype&&Object.hasOwn(this.currEval.prototype,"runInNewContext")){let g=this.currEval;eo.cache[r]=new g(s)}else if(typeof this.currEval=="function")eo.cache[r]={runInNewContext:g=>this.currEval(s,g)};else throw new TypeError(`Unknown "eval" property "${this.currEval}"`)}try{return eo.cache[r].runInNewContext(this.currSandbox)}catch(s){if(this.ignoreEvalErrors)return!1;throw new Error("jsonPath: "+s.message+": "+t)}};eo.cache={};eo.toPathString=function(t){let e=t,A=e.length,i="$";for(let n=1;ntypeof e[g]=="function");let o=i.map(g=>e[g]);A=n.reduce((g,l)=>{let C=e[l].toString();return/function/u.test(C)||(C="function "+C),"var "+l+"="+C+";"+g},"")+A,!/(['"])use strict\1/u.test(A)&&!i.includes("arguments")&&(A="var arguments = undefined;"+A),A=A.replace(/;\s*$/u,"");let r=A.lastIndexOf(";"),s=r!==-1?A.slice(0,r+1)+" return "+A.slice(r+1):" return "+A;return new Function(...i,s)(...o)}};eo.prototype.vm={Script:FR};var LR=[],$Z=[];(()=>{let t="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,A=0;e>1;if(t=$Z[i])e=i+1;else return!0;if(e==A)return!1}}function WZ(t){return t>=127462&&t<=127487}var ZZ=8205;function AX(t,e,A=!0,i=!0){return(A?eX:xyA)(t,e,i)}function eX(t,e,A){if(e==t.length)return e;e&&tX(t.charCodeAt(e))&&iX(t.charCodeAt(e-1))&&e--;let i=_R(t,e);for(e+=XZ(i);e=0&&WZ(_R(t,a));)o++,a-=2;if(o%2==0)break;e+=2}else break}return e}function xyA(t,e,A){for(;e>0;){let i=eX(t,e-2,A);if(i=56320&&t<57344}function iX(t){return t>=55296&&t<56320}function XZ(t){return t<65536?1:2}var bn=class t{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,A,i){[e,A]=EQ(this,e,A);let n=[];return this.decompose(0,e,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(A,this.length,n,1),IQ.from(n,this.length-(A-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,A=this.length){[e,A]=EQ(this,e,A);let i=[];return this.decompose(e,A,i,0),IQ.from(i,A-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let A=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new Qd(this),o=new Qd(e);for(let a=A,r=A;;){if(n.next(a),o.next(a),a=0,n.lineBreak!=o.lineBreak||n.done!=o.done||n.value!=o.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(e=1){return new Qd(this,e)}iterRange(e,A=this.length){return new T5(this,e,A)}iterLines(e,A){let i;if(e==null)i=this.iter();else{A==null&&(A=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,A==this.lines+1?this.length:A<=1?0:this.line(A-1).to))}return new H5(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?t.empty:e.length<=32?new zg(e):IQ.from(zg.split(e,[]))}},zg=class t extends bn{constructor(e,A=RyA(e)){super(),this.text=e,this.length=A}get lines(){return this.text.length}get children(){return null}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.text[o],r=n+a.length;if((A?i:r)>=e)return new UR(n,r,i,a);n=r+1,i++}}decompose(e,A,i,n){let o=e<=0&&A>=this.length?this:new t(nX(this.text,e,A),Math.min(A,this.length)-Math.max(0,e));if(n&1){let a=i.pop(),r=Y5(o.text,a.text.slice(),0,o.length);if(r.length<=32)i.push(new t(r,a.length+o.length));else{let s=r.length>>1;i.push(new t(r.slice(0,s)),new t(r.slice(s)))}}else i.push(o)}replace(e,A,i){if(!(i instanceof t))return super.replace(e,A,i);[e,A]=EQ(this,e,A);let n=Y5(this.text,Y5(i.text,nX(this.text,0,e)),A),o=this.length+i.length-(A-e);return n.length<=32?new t(n,o):IQ.from(t.split(n,[]),o)}sliceString(e,A=this.length,i=` -`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;o<=A&&ae&&a&&(n+=i),eo&&(n+=r.slice(Math.max(0,e-o),A-o)),o=s+1}return n}flatten(e){for(let A of this.text)e.push(A)}scanIdentical(){return 0}static split(e,A){let i=[],n=-1;for(let o of e)i.push(o),n+=o.length+1,i.length==32&&(A.push(new t(i,n)),i=[],n=-1);return n>-1&&A.push(new t(i,n)),A}},IQ=class t extends bn{constructor(e,A){super(),this.children=e,this.length=A,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.children[o],r=n+a.length,s=i+a.lines-1;if((A?s:r)>=e)return a.lineInner(e,A,i,n);n=r+1,i=s+1}}decompose(e,A,i,n){for(let o=0,a=0;a<=A&&o=a){let g=n&((a<=e?1:0)|(s>=A?2:0));a>=e&&s<=A&&!g?i.push(r):r.decompose(e-a,A-a,i,g)}a=s+1}}replace(e,A,i){if([e,A]=EQ(this,e,A),i.lines=o&&A<=r){let s=a.replace(e-o,A-o,i),g=this.lines-a.lines+s.lines;if(s.lines>4&&s.lines>g>>6){let l=this.children.slice();return l[n]=s,new t(l,this.length-(A-e)+i.length)}return super.replace(o,r,s)}o=r+1}return super.replace(e,A,i)}sliceString(e,A=this.length,i=` -`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;oe&&o&&(n+=i),ea&&(n+=r.sliceString(e-a,A-a,i)),a=s+1}return n}flatten(e){for(let A of this.children)A.flatten(e)}scanIdentical(e,A){if(!(e instanceof t))return 0;let i=0,[n,o,a,r]=A>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;n+=A,o+=A){if(n==a||o==r)return i;let s=this.children[n],g=e.children[o];if(s!=g)return i+s.scanIdentical(g,A);i+=s.length+1}}static from(e,A=e.reduce((i,n)=>i+n.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let B of e)B.flatten(d);return new zg(d,A)}let n=Math.max(32,i>>5),o=n<<1,a=n>>1,r=[],s=0,g=-1,l=[];function C(d){let B;if(d.lines>o&&d instanceof t)for(let E of d.children)C(E);else d.lines>a&&(s>a||!s)?(I(),r.push(d)):d instanceof zg&&s&&(B=l[l.length-1])instanceof zg&&d.lines+B.lines<=32?(s+=d.lines,g+=d.length+1,l[l.length-1]=new zg(B.text.concat(d.text),B.length+1+d.length)):(s+d.lines>n&&I(),s+=d.lines,g+=d.length+1,l.push(d))}function I(){s!=0&&(r.push(l.length==1?l[0]:t.from(l,g)),g=-1,s=l.length=0)}for(let d of e)C(d);return I(),r.length==1?r[0]:new t(r,A)}};bn.empty=new zg([""],0);function RyA(t){let e=-1;for(let A of t)e+=A.length+1;return e}function Y5(t,e,A=0,i=1e9){for(let n=0,o=0,a=!0;o=A&&(s>i&&(r=r.slice(0,i-n)),n0?1:(e instanceof zg?e.text.length:e.children.length)<<1]}nextInner(e,A){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],o=this.offsets[i],a=o>>1,r=n instanceof zg?n.text.length:n.children.length;if(a==(A>0?r:0)){if(i==0)return this.done=!0,this.value="",this;A>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((o&1)==(A>0?0:1)){if(this.offsets[i]+=A,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(n instanceof zg){let s=n.text[a+(A<0?-1:0)];if(this.offsets[i]+=A,s.length>Math.max(0,e))return this.value=e==0?s:A>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{let s=n.children[a+(A<0?-1:0)];e>s.length?(e-=s.length,this.offsets[i]+=A):(A<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(A>0?1:(s instanceof zg?s.text.length:s.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},T5=class{constructor(e,A,i){this.value="",this.done=!1,this.cursor=new Qd(e,A>i?-1:1),this.pos=A>i?e.length:0,this.from=Math.min(A,i),this.to=Math.max(A,i)}nextInner(e,A){if(A<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,A<0?this.pos-this.to:this.from-this.pos);let i=A<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*A,this.value=n.length<=i?n:A<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},H5=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:A,lineBreak:i,value:n}=this.inner.next(e);return A&&this.afterBreak?(this.value="",this.afterBreak=!1):A?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(bn.prototype[Symbol.iterator]=function(){return this.iter()},Qd.prototype[Symbol.iterator]=T5.prototype[Symbol.iterator]=H5.prototype[Symbol.iterator]=function(){return this});var UR=class{constructor(e,A,i,n){this.from=e,this.to=A,this.number=i,this.text=n}get length(){return this.to-this.from}};function EQ(t,e,A){return e=Math.max(0,Math.min(t.length,e)),[e,Math.max(e,Math.min(t.length,A))]}function Ta(t,e,A=!0,i=!0){return AX(t,e,A,i)}function NyA(t){return t>=56320&&t<57344}function FyA(t){return t>=55296&&t<56320}function Zr(t,e){let A=t.charCodeAt(e);if(!FyA(A)||e+1==t.length)return A;let i=t.charCodeAt(e+1);return NyA(i)?(A-55296<<10)+(i-56320)+65536:A}function H3(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10)+55296,(t&1023)+56320))}function Og(t){return t<65536?1:2}var JR=/\r\n?|\n/,qr=(function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t})(qr||(qr={})),yI=class t{constructor(e){this.sections=e}get length(){let e=0;for(let A=0;Ae)return o+(e-n);o+=r}else{if(i!=qr.Simple&&g>=e&&(i==qr.TrackDel&&ne||i==qr.TrackBefore&&ne))return null;if(g>e||g==e&&A<0&&!r)return e==n||A<0?o:o+s;o+=s}n=g}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return o}touchesRange(e,A=e){for(let i=0,n=0;i=0&&n<=A&&r>=e)return nA?"cover":!0;n=r}return!1}toString(){let e="";for(let A=0;A=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(A=>typeof A!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new t(e)}static create(e){return new t(e)}},Vr=class t extends yI{constructor(e,A){super(e),this.inserted=A}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return YR(this,(A,i,n,o,a)=>e=e.replace(n,n+(i-A),a),!1),e}mapDesc(e,A=!1){return TR(this,e,A,!0)}invert(e){let A=this.sections.slice(),i=[];for(let n=0,o=0;n=0){A[n]=r,A[n+1]=a;let s=n>>1;for(;i.length0&&DI(i,A,o.text),o.forward(l),r+=l}let g=e[a++];for(;r>1].toJSON()))}return e}static of(e,A,i){let n=[],o=[],a=0,r=null;function s(l=!1){if(!l&&!n.length)return;aI||C<0||I>A)throw new RangeError(`Invalid change range ${C} to ${I} (in doc of length ${A})`);let B=d?typeof d=="string"?bn.of(d.split(i||JR)):d:bn.empty,E=B.length;if(C==I&&E==0)return;Ca&&ms(n,C-a,-1),ms(n,I-C,E),DI(o,n,B),a=I}}return g(e),s(!r),r}static empty(e){return new t(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let A=[],i=[];for(let n=0;nr&&typeof a!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(o.length==1)A.push(o[0],0);else{for(;i.length=0&&A<=0&&A==t[n+1]?t[n]+=e:n>=0&&e==0&&t[n]==0?t[n+1]+=A:i?(t[n]+=e,t[n+1]+=A):t.push(e,A)}function DI(t,e,A){if(A.length==0)return;let i=e.length-2>>1;if(i>1])),!(A||a==t.sections.length||t.sections[a+1]<0);)r=t.sections[a++],s=t.sections[a++];e(n,g,o,l,C),n=g,o=l}}}function TR(t,e,A,i=!1){let n=[],o=i?[]:null,a=new hd(t),r=new hd(e);for(let s=-1;;){if(a.done&&r.len||r.done&&a.len)throw new Error("Mismatched change set lengths");if(a.ins==-1&&r.ins==-1){let g=Math.min(a.len,r.len);ms(n,g,-1),a.forward(g),r.forward(g)}else if(r.ins>=0&&(a.ins<0||s==a.i||a.off==0&&(r.len=0&&s=0){let g=0,l=a.len;for(;l;)if(r.ins==-1){let C=Math.min(l,r.len);g+=C,l-=C,r.forward(C)}else if(r.ins==0&&r.lens||a.ins>=0&&a.len>s)&&(r||i.length>g),o.forward2(s),a.forward(s)}}}}var hd=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return A>=e.length?bn.empty:e[A]}textBit(e){let{inserted:A}=this.set,i=this.i-2>>1;return i>=A.length&&!e?bn.empty:A[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},CQ=class t{constructor(e,A,i){this.from=e,this.to=A,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,A=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,A):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new t(i,n,this.flags)}extend(e,A=e){if(e<=this.anchor&&A>=this.anchor)return de.range(e,A);let i=Math.abs(e-this.anchor)>Math.abs(A-this.anchor)?e:A;return de.range(this.anchor,i)}eq(e,A=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!A||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return de.range(e.anchor,e.head)}static create(e,A,i){return new t(e,A,i)}},de=class t{constructor(e,A){this.ranges=e,this.mainIndex=A}map(e,A=-1){return e.empty?this:t.create(this.ranges.map(i=>i.map(e,A)),this.mainIndex)}eq(e,A=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new t(e.ranges.map(A=>CQ.fromJSON(A)),e.main)}static single(e,A=e){return new t([t.range(e,A)],0)}static create(e,A=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;ne?8:0)|o)}static normalized(e,A=0){let i=e[A];e.sort((n,o)=>n.from-o.from),A=e.indexOf(i);for(let n=1;no.head?t.range(s,r):t.range(r,s))}}return new t(e,A)}};function CX(t,e){for(let A of t.ranges)if(A.to>e)throw new RangeError("Selection points outside of document")}var ZR=0,We=class t{constructor(e,A,i,n,o){this.combine=e,this.compareInput=A,this.compare=i,this.isStatic=n,this.id=ZR++,this.default=e([]),this.extensions=typeof o=="function"?o(this):o}get reader(){return this}static define(e={}){return new t(e.combine||(A=>A),e.compareInput||((A,i)=>A===i),e.compare||(e.combine?(A,i)=>A===i:XR),!!e.static,e.enables)}of(e){return new dQ([],this,0,e)}compute(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,1,A)}computeN(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,2,A)}from(e,A){return A||(A=i=>i),this.compute([e],i=>A(i.field(e)))}};function XR(t,e){return t==e||t.length==e.length&&t.every((A,i)=>A===e[i])}var dQ=class{constructor(e,A,i,n){this.dependencies=e,this.facet=A,this.type=i,this.value=n,this.id=ZR++}dynamicSlot(e){var A;let i=this.value,n=this.facet.compareInput,o=this.id,a=e[o]>>1,r=this.type==2,s=!1,g=!1,l=[];for(let C of this.dependencies)C=="doc"?s=!0:C=="selection"?g=!0:(((A=e[C.id])!==null&&A!==void 0?A:1)&1)==0&&l.push(e[C.id]);return{create(C){return C.values[a]=i(C),1},update(C,I){if(s&&I.docChanged||g&&(I.docChanged||I.selection)||HR(C,l)){let d=i(C);if(r?!oX(d,C.values[a],n):!n(d,C.values[a]))return C.values[a]=d,1}return 0},reconfigure:(C,I)=>{let d,B=I.config.address[o];if(B!=null){let E=P5(I,B);if(this.dependencies.every(Q=>Q instanceof We?I.facet(Q)===C.facet(Q):Q instanceof va?I.field(Q,!1)==C.field(Q,!1):!0)||(r?oX(d=i(C),E,n):n(d=i(C),E)))return C.values[a]=E,0}else d=i(C);return C.values[a]=d,1}}}};function oX(t,e,A){if(t.length!=e.length)return!1;for(let i=0;it[s.id]),n=A.map(s=>s.type),o=i.filter(s=>!(s&1)),a=t[e.id]>>1;function r(s){let g=[];for(let l=0;li===n),e);return e.provide&&(A.provides=e.provide(A)),A}create(e){let A=e.facet(K5).find(i=>i.field==this);return(A?.create||this.createF)(e)}slot(e){let A=e[this.id]>>1;return{create:i=>(i.values[A]=this.create(i),1),update:(i,n)=>{let o=i.values[A],a=this.updateF(o,n);return this.compareF(o,a)?0:(i.values[A]=a,1)},reconfigure:(i,n)=>{let o=i.facet(K5),a=n.facet(K5),r;return(r=o.find(s=>s.field==this))&&r!=a.find(s=>s.field==this)?(i.values[A]=r.create(i),1):n.config.address[this.id]!=null?(i.values[A]=n.field(this),0):(i.values[A]=this.create(i),1)}}}init(e){return[this,K5.of({field:this,create:e})]}get extension(){return this}},Bd={lowest:4,low:3,default:2,high:1,highest:0};function K3(t){return e=>new z5(e,t)}var bc={highest:K3(Bd.highest),high:K3(Bd.high),default:K3(Bd.default),low:K3(Bd.low),lowest:K3(Bd.lowest)},z5=class{constructor(e,A){this.inner=e,this.prec=A}},F0=class t{of(e){return new J3(this,e)}reconfigure(e){return t.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},J3=class{constructor(e,A){this.compartment=e,this.inner=A}},O5=class t{constructor(e,A,i,n,o,a){for(this.base=e,this.compartments=A,this.dynamicSlots=i,this.address=n,this.staticValues=o,this.facets=a,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,A,i){let n=[],o=Object.create(null),a=new Map;for(let I of LyA(e,A,a))I instanceof va?n.push(I):(o[I.facet.id]||(o[I.facet.id]=[])).push(I);let r=Object.create(null),s=[],g=[];for(let I of n)r[I.id]=g.length<<1,g.push(d=>I.slot(d));let l=i?.config.facets;for(let I in o){let d=o[I],B=d[0].facet,E=l&&l[I]||[];if(d.every(Q=>Q.type==0))if(r[B.id]=s.length<<1|1,XR(E,d))s.push(i.facet(B));else{let Q=B.combine(d.map(f=>f.value));s.push(i&&B.compare(Q,i.facet(B))?i.facet(B):Q)}else{for(let Q of d)Q.type==0?(r[Q.id]=s.length<<1|1,s.push(Q.value)):(r[Q.id]=g.length<<1,g.push(f=>Q.dynamicSlot(f)));r[B.id]=g.length<<1,g.push(Q=>_yA(Q,B,d))}}let C=g.map(I=>I(r));return new t(e,a,C,r,s,o)}};function LyA(t,e,A){let i=[[],[],[],[],[]],n=new Map;function o(a,r){let s=n.get(a);if(s!=null){if(s<=r)return;let g=i[s].indexOf(a);g>-1&&i[s].splice(g,1),a instanceof J3&&A.delete(a.compartment)}if(n.set(a,r),Array.isArray(a))for(let g of a)o(g,r);else if(a instanceof J3){if(A.has(a.compartment))throw new RangeError("Duplicate use of compartment in extensions");let g=e.get(a.compartment)||a.inner;A.set(a.compartment,g),o(g,r)}else if(a instanceof z5)o(a.inner,a.prec);else if(a instanceof va)i[r].push(a),a.provides&&o(a.provides,r);else if(a instanceof dQ)i[r].push(a),a.facet.extensions&&o(a.facet.extensions,Bd.default);else{let g=a.extension;if(!g)throw new Error(`Unrecognized extension value in extension set (${a}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);o(g,r)}}return o(t,Bd.default),i.reduce((a,r)=>a.concat(r))}function U3(t,e){if(e&1)return 2;let A=e>>1,i=t.status[A];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;t.status[A]=4;let n=t.computeSlot(t,t.config.dynamicSlots[A]);return t.status[A]=2|n}function P5(t,e){return e&1?t.config.staticValues[e>>1]:t.values[e>>1]}var aX=We.define(),GR=We.define({combine:t=>t.some(e=>e),static:!0}),IX=We.define({combine:t=>t.length?t[0]:void 0,static:!0}),dX=We.define(),BX=We.define(),EX=We.define(),rX=We.define({combine:t=>t.length?t[0]:!1}),hg=class{constructor(e,A){this.type=e,this.value=A}static define(){return new zR}},zR=class{of(e){return new hg(this,e)}},OR=class{constructor(e){this.map=e}of(e){return new Hi(this,e)}},Hi=(()=>{class t{constructor(A,i){this.type=A,this.value=i}map(A){let i=this.type.map(this.value,A);return i===void 0?void 0:i==this.value?this:new t(this.type,i)}is(A){return this.type==A}static define(A={}){return new OR(A.map||(i=>i))}static mapEffects(A,i){if(!A.length)return A;let n=[];for(let o of A){let a=o.map(i);a&&n.push(a)}return n}}return t.reconfigure=t.define(),t.appendConfig=t.define(),t})(),N0=(()=>{class t{constructor(A,i,n,o,a,r){this.startState=A,this.changes=i,this.selection=n,this.effects=o,this.annotations=a,this.scrollIntoView=r,this._doc=null,this._state=null,n&&CX(n,i.newLength),a.some(s=>s.type==t.time)||(this.annotations=a.concat(t.time.of(Date.now())))}static create(A,i,n,o,a,r){return new t(A,i,n,o,a,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(A){for(let i of this.annotations)if(i.type==A)return i.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(A){let i=this.annotation(t.userEvent);return!!(i&&(i==A||i.length>A.length&&i.slice(0,A.length)==A&&i[A.length]=="."))}}return t.time=hg.define(),t.userEvent=hg.define(),t.addToHistory=hg.define(),t.remote=hg.define(),t})();function GyA(t,e){let A=[];for(let i=0,n=0;;){let o,a;if(i=t[i]))o=t[i++],a=t[i++];else if(n=0;n--){let o=i[n](t);o instanceof N0?t=o:Array.isArray(o)&&o.length==1&&o[0]instanceof N0?t=o[0]:t=hX(e,BQ(o),!1)}return t}function UyA(t){let e=t.startState,A=e.facet(EX),i=t;for(let n=A.length-1;n>=0;n--){let o=A[n](t);o&&Object.keys(o).length&&(i=QX(i,PR(e,o,t.changes.newLength),!0))}return i==t?t:N0.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}var JyA=[];function BQ(t){return t==null?JyA:Array.isArray(t)?t:[t]}var Lo=(function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t})(Lo||(Lo={})),YyA=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,jR;try{jR=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function TyA(t){if(jR)return jR.test(t);for(let e=0;e"\x80"&&(A.toUpperCase()!=A.toLowerCase()||YyA.test(A)))return!0}return!1}function HyA(t){return e=>{if(!/\S/.test(e))return Lo.Space;if(TyA(e))return Lo.Word;for(let A=0;A-1)return Lo.Word;return Lo.Other}}var er=(()=>{class t{constructor(A,i,n,o,a,r){this.config=A,this.doc=i,this.selection=n,this.values=o,this.status=A.statusTemplate.slice(),this.computeSlot=a,r&&(r._state=this);for(let s=0;so.set(l,g)),i=null),o.set(s.value.compartment,s.value.extension)):s.is(Hi.reconfigure)?(i=null,n=s.value):s.is(Hi.appendConfig)&&(i=null,n=BQ(n).concat(s.value));let a;i?a=A.startState.values.slice():(i=O5.resolve(n,o,this),a=new t(i,this.doc,this.selection,i.dynamicSlots.map(()=>null),(g,l)=>l.reconfigure(g,this),null).values);let r=A.startState.facet(GR)?A.newSelection:A.newSelection.asSingle();new t(i,A.newDoc,r,a,(s,g)=>g.update(s,A),A)}replaceSelection(A){return typeof A=="string"&&(A=this.toText(A)),this.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:A},range:de.cursor(i.from+A.length)}))}changeByRange(A){let i=this.selection,n=A(i.ranges[0]),o=this.changes(n.changes),a=[n.range],r=BQ(n.effects);for(let s=1;sr.spec.fromJSON(s,g)))}}return t.create({doc:A.doc,selection:de.fromJSON(A.selection),extensions:i.extensions?o.concat([i.extensions]):o})}static create(A={}){let i=O5.resolve(A.extensions||[],new Map),n=A.doc instanceof bn?A.doc:bn.of((A.doc||"").split(i.staticFacet(t.lineSeparator)||JR)),o=A.selection?A.selection instanceof de?A.selection:de.single(A.selection.anchor,A.selection.head):de.single(0);return CX(o,n.length),i.staticFacet(GR)||(o=o.asSingle()),new t(i,n,o,i.dynamicSlots.map(()=>null),(a,r)=>r.create(a),null)}get tabSize(){return this.facet(t.tabSize)}get lineBreak(){return this.facet(t.lineSeparator)||` -`}get readOnly(){return this.facet(rX)}phrase(A,...i){for(let n of this.facet(t.phrases))if(Object.prototype.hasOwnProperty.call(n,A)){A=n[A];break}return i.length&&(A=A.replace(/\$(\$|\d*)/g,(n,o)=>{if(o=="$")return"$";let a=+(o||1);return!a||a>i.length?n:i[a-1]})),A}languageDataAt(A,i,n=-1){let o=[];for(let a of this.facet(aX))for(let r of a(this,i,n))Object.prototype.hasOwnProperty.call(r,A)&&o.push(r[A]);return o}charCategorizer(A){let i=this.languageDataAt("wordChars",A);return HyA(i.length?i[0]:"")}wordAt(A){let{text:i,from:n,length:o}=this.doc.lineAt(A),a=this.charCategorizer(A),r=A-n,s=A-n;for(;r>0;){let g=Ta(i,r,!1);if(a(i.slice(g,r))!=Lo.Word)break;r=g}for(;se.length?e[0]:4}),t.lineSeparator=IX,t.readOnly=rX,t.phrases=We.define({compare(e,A){let i=Object.keys(e),n=Object.keys(A);return i.length==n.length&&i.every(o=>e[o]==A[o])}}),t.languageData=aX,t.changeFilter=dX,t.transactionFilter=BX,t.transactionExtender=EX,t})();F0.reconfigure=Hi.define();function kr(t,e,A={}){let i={};for(let n of t)for(let o of Object.keys(n)){let a=n[o],r=i[o];if(r===void 0)i[o]=a;else if(!(r===a||a===void 0))if(Object.hasOwnProperty.call(A,o))i[o]=A[o](r,a);else throw new Error("Config merge conflict for field "+o)}for(let n in e)i[n]===void 0&&(i[n]=e[n]);return i}var kl=class{eq(e){return this==e}range(e,A=e){return Y3.create(e,A,this)}};kl.prototype.startSide=kl.prototype.endSide=0;kl.prototype.point=!1;kl.prototype.mapMode=qr.TrackDel;function $R(t,e){return t==e||t.constructor==e.constructor&&t.eq(e)}var Y3=class t{constructor(e,A,i){this.from=e,this.to=A,this.value=i}static create(e,A,i){return new t(e,A,i)}};function qR(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}var VR=class t{constructor(e,A,i,n){this.from=e,this.to=A,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(e,A,i,n=0){let o=i?this.to:this.from;for(let a=n,r=o.length;;){if(a==r)return a;let s=a+r>>1,g=o[s]-e||(i?this.value[s].endSide:this.value[s].startSide)-A;if(s==a)return g>=0?a:r;g>=0?r=s:a=s+1}}between(e,A,i,n){for(let o=this.findIndex(A,-1e9,!0),a=this.findIndex(i,1e9,!1,o);od||I==d&&g.startSide>0&&g.endSide<=0)continue;(d-I||g.endSide-g.startSide)<0||(a<0&&(a=I),g.point&&(r=Math.max(r,d-I)),i.push(g),n.push(I-a),o.push(d-a))}return{mapped:i.length?new t(n,o,i,r):null,pos:a}}},to=(()=>{class t{constructor(A,i,n,o){this.chunkPos=A,this.chunk=i,this.nextLayer=n,this.maxPoint=o}static create(A,i,n,o){return new t(A,i,n,o)}get length(){let A=this.chunk.length-1;return A<0?0:Math.max(this.chunkEnd(A),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let A=this.nextLayer.size;for(let i of this.chunk)A+=i.value.length;return A}chunkEnd(A){return this.chunkPos[A]+this.chunk[A].length}update(A){let{add:i=[],sort:n=!1,filterFrom:o=0,filterTo:a=this.length}=A,r=A.filter;if(i.length==0&&!r)return this;if(n&&(i=i.slice().sort(qR)),this.isEmpty)return i.length?t.of(i):this;let s=new j5(this,null,-1).goto(0),g=0,l=[],C=new Wr;for(;s.value||g=0){let I=i[g++];C.addInner(I.from,I.to,I.value)||l.push(I)}else s.rangeIndex==1&&s.chunkIndexthis.chunkEnd(s.chunkIndex)||as.to||a=a&&A<=a+r.length&&r.between(a,A-a,i-a,n)===!1)return}this.nextLayer.between(A,i,n)}}iter(A=0){return T3.from([this]).goto(A)}get isEmpty(){return this.nextLayer==this}static iter(A,i=0){return T3.from(A).goto(i)}static compare(A,i,n,o,a=-1){let r=A.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),s=i.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),g=sX(r,s,n),l=new Ed(r,g,a),C=new Ed(s,g,a);n.iterGaps((I,d,B)=>gX(l,I,C,d,B,o)),n.empty&&n.length==0&&gX(l,0,C,0,0,o)}static eq(A,i,n=0,o){o==null&&(o=999999999);let a=A.filter(C=>!C.isEmpty&&i.indexOf(C)<0),r=i.filter(C=>!C.isEmpty&&A.indexOf(C)<0);if(a.length!=r.length)return!1;if(!a.length)return!0;let s=sX(a,r),g=new Ed(a,s,0).goto(n),l=new Ed(r,s,0).goto(n);for(;;){if(g.to!=l.to||!WR(g.active,l.active)||g.point&&(!l.point||!$R(g.point,l.point)))return!1;if(g.to>o)return!0;g.next(),l.next()}}static spans(A,i,n,o,a=-1){let r=new Ed(A,null,a).goto(i),s=i,g=r.openStart;for(;;){let l=Math.min(r.to,n);if(r.point){let C=r.activeForPoint(r.to),I=r.pointFroms&&(o.span(s,l,r.active,g),g=r.openEnd(l));if(r.to>n)return g+(r.point&&r.to>n?1:0);s=r.to,r.next()}}static of(A,i=!1){let n=new Wr;for(let o of A instanceof Y3?[A]:i?zyA(A):A)n.add(o.from,o.to,o.value);return n.finish()}static join(A){if(!A.length)return t.empty;let i=A[A.length-1];for(let n=A.length-2;n>=0;n--)for(let o=A[n];o!=t.empty;o=o.nextLayer)i=new t(o.chunkPos,o.chunk,i,Math.max(o.maxPoint,i.maxPoint));return i}}return t.empty=new t([],[],null,-1),t})();function zyA(t){if(t.length>1)for(let e=t[0],A=1;A0)return t.slice().sort(qR);e=i}return t}to.empty.nextLayer=to.empty;var Wr=class t{finishChunk(e){this.chunks.push(new VR(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,A,i){this.addInner(e,A,i)||(this.nextLayer||(this.nextLayer=new t)).add(e,A,i)}addInner(e,A,i){let n=e-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return n<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(A-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=A,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,A-e)),!0)}addChunk(e,A){if((e-this.lastTo||A.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,A.maxPoint),this.chunks.push(A),this.chunkPos.push(e);let i=A.value.length-1;return this.last=A.value[i],this.lastFrom=A.from[i]+e,this.lastTo=A.to[i]+e,!0}finish(){return this.finishInner(to.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let A=to.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,A}};function sX(t,e,A){let i=new Map;for(let o of t)for(let a=0;a=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new j5(a,A,i,o));return n.length==1?n[0]:new t(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,A=-1e9){for(let i of this.heap)i.goto(e,A);for(let i=this.heap.length>>1;i>=0;i--)KR(this.heap,i);return this.next(),this}forward(e,A){for(let i of this.heap)i.forward(e,A);for(let i=this.heap.length>>1;i>=0;i--)KR(this.heap,i);(this.to-e||this.value.endSide-A)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),KR(this.heap,0)}}};function KR(t,e){for(let A=t[e];;){let i=(e<<1)+1;if(i>=t.length)break;let n=t[i];if(i+1=0&&(n=t[i+1],i++),A.compare(n)<0)break;t[i]=A,t[e]=n,e=i}}var Ed=class{constructor(e,A,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=T3.from(e,A,i)}goto(e,A=-1e9){return this.cursor.goto(e,A),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=A,this.openStart=-1,this.next(),this}forward(e,A){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-A)<0;)this.removeActive(this.minActive);this.cursor.forward(e,A)}removeActive(e){U5(this.active,e),U5(this.activeTo,e),U5(this.activeRank,e),this.minActive=lX(this.active,this.activeTo)}addActive(e){let A=0,{value:i,to:n,rank:o}=this.cursor;for(;A0;)A++;J5(this.active,A,i),J5(this.activeTo,A,n),J5(this.activeRank,A,o),e&&J5(e,A,this.cursor.from),this.minActive=lX(this.active,this.activeTo)}next(){let e=this.to,A=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let n=this.minActive;if(n>-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&U5(i,n)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let o=this.cursor.value;if(!o.point)this.addActive(i),this.cursor.next();else if(A&&this.cursor.to==this.to&&this.cursor.from=0&&i[n]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&A.push(this.active[i]);return A.reverse()}openEnd(e){let A=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)A++;return A}};function gX(t,e,A,i,n,o){t.goto(e),A.goto(i);let a=i+n,r=i,s=i-e,g=!!o.boundChange;for(let l=!1;;){let C=t.to+s-A.to,I=C||t.endSide-A.endSide,d=I<0?t.to+s:A.to,B=Math.min(d,a);if(t.point||A.point?(t.point&&A.point&&$R(t.point,A.point)&&WR(t.activeForPoint(t.to),A.activeForPoint(A.to))||o.comparePoint(r,B,t.point,A.point),l=!1):(l&&o.boundChange(r),B>r&&!WR(t.active,A.active)&&o.compareRange(r,B,t.active,A.active),g&&Ba)break;r=d,I<=0&&t.next(),I>=0&&A.next()}}function WR(t,e){if(t.length!=e.length)return!1;for(let A=0;A=e;i--)t[i+1]=t[i];t[e]=A}function lX(t,e){let A=-1,i=1e9;for(let n=0;n=e)return n;if(n==t.length)break;o+=t.charCodeAt(n)==9?A-o%A:1,n=Ta(t,n)}return i===!0?-1:t.length}var uX=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),AN=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),fX=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Sl=class{constructor(e,A){this.rules=[];let{finish:i}=A||{};function n(a){return/^@/.test(a)?[a]:a.split(/,\s*/)}function o(a,r,s,g){let l=[],C=/^@(\w+)\b/.exec(a[0]),I=C&&C[1]=="keyframes";if(C&&r==null)return s.push(a[0]+";");for(let d in r){let B=r[d];if(/&/.test(d))o(d.split(/,\s*/).map(E=>a.map(Q=>E.replace(/&/,Q))).reduce((E,Q)=>E.concat(Q)),B,s);else if(B&&typeof B=="object"){if(!C)throw new RangeError("The value of a property ("+d+") should be a primitive value.");o(n(d),B,l,I)}else B!=null&&l.push(d.replace(/_.*/,"").replace(/[A-Z]/g,E=>"-"+E.toLowerCase())+": "+B+";")}(l.length||I)&&s.push((i&&!C&&!g?a.map(i):a).join(", ")+" {"+l.join(" ")+"}")}for(let a in e)o(n(a),e[a],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=fX[uX]||1;return fX[uX]=e+1,"\u037C"+e.toString(36)}static mount(e,A,i){let n=e[AN],o=i&&i.nonce;n?o&&n.setNonce(o):n=new eN(e,o),n.mount(Array.isArray(A)?A:[A],e)}},mX=new Map,eN=class{constructor(e,A){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let o=mX.get(i);if(o)return e[AN]=o;this.sheet=new n.CSSStyleSheet,mX.set(i,this)}else this.styleTag=i.createElement("style"),A&&this.styleTag.setAttribute("nonce",A);this.modules=[],e[AN]=this}mount(e,A){let i=this.sheet,n=0,o=0;for(let a=0;a-1&&(this.modules.splice(s,1),o--,s=-1),s==-1){if(this.modules.splice(o++,0,r),i)for(let g=0;g",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},OyA=typeof navigator<"u"&&/Mac/.test(navigator.platform),PyA=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(sr=0;sr<10;sr++)UC[48+sr]=UC[96+sr]=String(sr);var sr;for(sr=1;sr<=24;sr++)UC[sr+111]="F"+sr;var sr;for(sr=65;sr<=90;sr++)UC[sr]=String.fromCharCode(sr+32),QQ[sr]=String.fromCharCode(sr);var sr;for(V5 in UC)QQ.hasOwnProperty(V5)||(QQ[V5]=UC[V5]);var V5;function pX(t){var e=OyA&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||PyA&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",A=!e&&t.key||(t.shiftKey?QQ:UC)[t.keyCode]||t.key||"Unidentified";return A=="Esc"&&(A="Escape"),A=="Del"&&(A="Delete"),A=="Left"&&(A="ArrowLeft"),A=="Up"&&(A="ArrowUp"),A=="Right"&&(A="ArrowRight"),A=="Down"&&(A="ArrowDown"),A}function io(){var t=arguments[0];typeof t=="string"&&(t=document.createElement(t));var e=1,A=arguments[1];if(A&&typeof A=="object"&&A.nodeType==null&&!Array.isArray(A)){for(var i in A)if(Object.prototype.hasOwnProperty.call(A,i)){var n=A[i];typeof n=="string"?t.setAttribute(i,n):n!=null&&(t[i]=n)}e++}for(;e2),lt={mac:vX||/Mac/.test(Ts.platform),windows:/Win/.test(Ts.platform),linux:/Linux|X11/.test(Ts.platform),ie:MD,ie_version:C$?IN.documentMode||6:BN?+BN[1]:dN?+dN[1]:0,gecko:DX,gecko_version:DX?+(/Firefox\/(\d+)/.exec(Ts.userAgent)||[0,0])[1]:0,chrome:!!tN,chrome_version:tN?+tN[1]:0,ios:vX,android:/Android\b/.test(Ts.userAgent),webkit:yX,webkit_version:yX?+(/\bAppleWebKit\/(\d+)/.exec(Ts.userAgent)||[0,0])[1]:0,safari:EN,safari_version:EN?+(/\bVersion\/(\d+(\.\d+)?)/.exec(Ts.userAgent)||[0,0])[1]:0,tabSize:IN.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function aF(t,e){for(let A in t)A=="class"&&e.class?e.class+=" "+t.class:A=="style"&&e.style?e.style+=";"+t.style:e[A]=t[A];return e}var lD=Object.create(null);function rF(t,e,A){if(t==e)return!0;t||(t=lD),e||(e=lD);let i=Object.keys(t),n=Object.keys(e);if(i.length-(A&&i.indexOf(A)>-1?1:0)!=n.length-(A&&n.indexOf(A)>-1?1:0))return!1;for(let o of i)if(o!=A&&(n.indexOf(o)==-1||t[o]!==e[o]))return!1;return!0}function jyA(t,e){for(let A=t.attributes.length-1;A>=0;A--){let i=t.attributes[A].name;e[i]==null&&t.removeAttribute(i)}for(let A in e){let i=e[A];A=="style"?t.style.cssText=i:t.getAttribute(A)!=i&&t.setAttribute(A,i)}}function bX(t,e,A){let i=!1;if(e)for(let n in e)A&&n in A||(i=!0,n=="style"?t.style.cssText="":t.removeAttribute(n));if(A)for(let n in A)e&&e[n]==A[n]||(i=!0,n=="style"?t.style.cssText=A[n]:t.setAttribute(n,A[n]));return i}function qyA(t){let e=Object.create(null);for(let A=0;A0?3e8:-4e8:A>0?1e8:-1e8,new md(e,A,A,i,e.widget||null,!1)}static replace(e){let A=!!e.block,i,n;if(e.isBlockGap)i=-5e8,n=4e8;else{let{start:o,end:a}=I$(e,A);i=(o?A?-3e8:-1:5e8)-1,n=(a?A?2e8:1:-6e8)+1}return new md(e,i,n,A,e.widget||null,!0)}static line(e){return new of(e)}static set(e,A=!1){return to.of(e,A)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};yt.none=to.empty;var nf=class t extends yt{constructor(e){let{start:A,end:i}=I$(e);super(A?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?aF(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||lD}eq(e){return this==e||e instanceof t&&this.tagName==e.tagName&&rF(this.attrs,e.attrs)}range(e,A=e){if(e>=A)throw new RangeError("Mark decorations may not be empty");return super.range(e,A)}};nf.prototype.point=!1;var of=class t extends yt{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof t&&this.spec.class==e.spec.class&&rF(this.spec.attributes,e.spec.attributes)}range(e,A=e){if(A!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,A)}};of.prototype.mapMode=qr.TrackBefore;of.prototype.point=!0;var md=class t extends yt{constructor(e,A,i,n,o,a){super(A,i,o,e),this.block=n,this.isReplace=a,this.mapMode=n?A<=0?qr.TrackBefore:qr.TrackAfter:qr.TrackDel}get type(){return this.startSide!=this.endSide?Xr.WidgetRange:this.startSide<=0?Xr.WidgetBefore:Xr.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof t&&VyA(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,A=e){if(this.isReplace&&(e>A||e==A&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&A!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,A)}};md.prototype.point=!0;function I$(t,e=!1){let{inclusiveStart:A,inclusiveEnd:i}=t;return A==null&&(A=t.inclusive),i==null&&(i=t.inclusive),{start:A??e,end:i??e}}function VyA(t,e){return t==e||!!(t&&e&&t.compare(e))}function pQ(t,e,A,i=0){let n=A.length-1;n>=0&&A[n]+i>=t?A[n]=Math.max(A[n],e):A.push(t,e)}var cD=class t extends kl{constructor(e,A){super(),this.tagName=e,this.attributes=A}eq(e){return e==this||e instanceof t&&this.tagName==e.tagName&&rF(this.attributes,e.attributes)}static create(e){return new t(e.tagName,e.attributes||lD)}static set(e,A=!1){return to.of(e,A)}};cD.prototype.startSide=cD.prototype.endSide=-1;function DQ(t){let e;return t.nodeType==11?e=t.getSelection?t:t.ownerDocument:e=t,e.getSelection()}function QN(t,e){return e?t==e||t.contains(e.nodeType!=1?e.parentNode:e):!1}function q3(t,e){if(!e.anchorNode)return!1;try{return QN(t,e.anchorNode)}catch{return!1}}function oD(t){return t.nodeType==3?af(t,0,t.nodeValue.length).getClientRects():t.nodeType==1?t.getClientRects():[]}function V3(t,e,A,i){return A?MX(t,e,A,i,-1)||MX(t,e,A,i,1):!1}function kI(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e}function CD(t){return t.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function MX(t,e,A,i,n){for(;;){if(t==A&&e==i)return!0;if(e==(n<0?0:YC(t))){if(t.nodeName=="DIV")return!1;let o=t.parentNode;if(!o||o.nodeType!=1)return!1;e=kI(t)+(n<0?0:1),t=o}else if(t.nodeType==1){if(t=t.childNodes[e+(n<0?-1:0)],t.nodeType==1&&t.contentEditable=="false")return!1;e=n<0?YC(t):0}else return!1}}function YC(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function ID(t,e){let A=e?t.left:t.right;return{left:A,right:A,top:t.top,bottom:t.bottom}}function WyA(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function d$(t,e){let A=e.width/t.offsetWidth,i=e.height/t.offsetHeight;return(A>.995&&A<1.005||!isFinite(A)||Math.abs(e.width-t.offsetWidth)<1)&&(A=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-t.offsetHeight)<1)&&(i=1),{scaleX:A,scaleY:i}}function ZyA(t,e,A,i,n,o,a,r){let s=t.ownerDocument,g=s.defaultView||window;for(let l=t,C=!1;l&&!C;)if(l.nodeType==1){let I,d=l==s.body,B=1,E=1;if(d)I=WyA(g);else{if(/^(fixed|sticky)$/.test(getComputedStyle(l).position)&&(C=!0),l.scrollHeight<=l.clientHeight&&l.scrollWidth<=l.clientWidth){l=l.assignedSlot||l.parentNode;continue}let b=l.getBoundingClientRect();({scaleX:B,scaleY:E}=d$(l,b)),I={left:b.left,right:b.left+l.clientWidth*B,top:b.top,bottom:b.top+l.clientHeight*E}}let Q=0,f=0;if(n=="nearest")e.top0&&e.bottom>I.bottom+f&&(f=e.bottom-I.bottom+a)):e.bottom>I.bottom&&(f=e.bottom-I.bottom+a,A<0&&e.top-f0&&e.right>I.right+Q&&(Q=e.right-I.right+o)):e.right>I.right&&(Q=e.right-I.right+o,A<0&&e.leftI.bottom||e.leftI.right)&&(e={left:Math.max(e.left,I.left),right:Math.min(e.right,I.right),top:Math.max(e.top,I.top),bottom:Math.min(e.bottom,I.bottom)}),l=l.assignedSlot||l.parentNode}else if(l.nodeType==11)l=l.host;else break}function XyA(t){let e=t.ownerDocument,A,i;for(let n=t.parentNode;n&&!(n==e.body||A&&i);)if(n.nodeType==1)!i&&n.scrollHeight>n.clientHeight&&(i=n),!A&&n.scrollWidth>n.clientWidth&&(A=n),n=n.assignedSlot||n.parentNode;else if(n.nodeType==11)n=n.host;else break;return{x:A,y:i}}var hN=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:A,focusNode:i}=e;this.set(A,Math.min(e.anchorOffset,A?YC(A):0),i,Math.min(e.focusOffset,i?YC(i):0))}set(e,A,i,n){this.anchorNode=e,this.anchorOffset=A,this.focusNode=i,this.focusOffset=n}},ud=null;lt.safari&<.safari_version>=26&&(ud=!1);function B$(t){if(t.setActive)return t.setActive();if(ud)return t.focus(ud);let e=[];for(let A=t;A&&(e.push(A,A.scrollTop,A.scrollLeft),A!=A.ownerDocument);A=A.parentNode);if(t.focus(ud==null?{get preventScroll(){return ud={preventScroll:!0},!0}}:void 0),!ud){ud=!1;for(let A=0;AMath.max(1,t.scrollHeight-t.clientHeight-4)}function Q$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i>0)return{node:A,offset:i};if(A.nodeType==1&&i>0){if(A.contentEditable=="false")return null;A=A.childNodes[i-1],i=YC(A)}else if(A.parentNode&&!CD(A))i=kI(A),A=A.parentNode;else return null}}function h$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i=A){if(r.level==i)return a;(o<0||(n!=0?n<0?r.fromA:e[o].level>r.level))&&(o=a)}}if(o<0)throw new RangeError("Index out of range");return o}};function m$(t,e){if(t.length!=e.length)return!1;for(let A=0;A=0;E-=3)if(_0[E+1]==-d){let Q=_0[E+2],f=Q&2?n:Q&4?Q&1?o:n:0;f&&(Wo[C]=Wo[_0[E]]=f),r=E;break}}else{if(_0.length==189)break;_0[r++]=C,_0[r++]=I,_0[r++]=s}else if((B=Wo[C])==2||B==1){let E=B==n;s=E?0:1;for(let Q=r-3;Q>=0;Q-=3){let f=_0[Q+2];if(f&2)break;if(E)_0[Q+2]|=2;else{if(f&4)break;_0[Q+2]|=4}}}}}function avA(t,e,A,i){for(let n=0,o=i;n<=A.length;n++){let a=n?A[n-1].to:t,r=ns;)B==Q&&(B=A[--E].from,Q=E?A[E-1].to:t),Wo[--B]=d;s=l}else o=g,s++}}}function fN(t,e,A,i,n,o,a){let r=i%2?2:1;if(i%2==n%2)for(let s=e,g=0;ss&&a.push(new kc(s,E.from,d));let Q=E.direction==pd!=!(d%2);mN(t,Q?i+1:i,n,E.inner,E.from,E.to,a),s=E.to}B=E.to}else{if(B==A||(l?Wo[B]!=r:Wo[B]==r))break;B++}I?fN(t,s,B,i+1,n,I,a):se;){let l=!0,C=!1;if(!g||s>o[g-1].to){let E=Wo[s-1];E!=r&&(l=!1,C=E==16)}let I=!l&&r==1?[]:null,d=l?i:i+1,B=s;A:for(;;)if(g&&B==o[g-1].to){if(C)break A;let E=o[--g];if(!l)for(let Q=E.from,f=g;;){if(Q==e)break A;if(f&&o[f-1].to==Q)Q=o[--f].from;else{if(Wo[Q-1]==r)break A;break}}if(I)I.push(E);else{E.toWo.length;)Wo[Wo.length]=256;let i=[],n=e==pd?0:1;return mN(t,n,n,A,0,t.length,i),i}function p$(t){return[new kc(0,t,0)]}var w$="";function svA(t,e,A,i,n){var o;let a=i.head-t.from,r=kc.find(e,a,(o=i.bidiLevel)!==null&&o!==void 0?o:-1,i.assoc),s=e[r],g=s.side(n,A);if(a==g){let I=r+=n?1:-1;if(I<0||I>=e.length)return null;s=e[r=I],a=s.side(!n,A),g=s.side(n,A)}let l=Ta(t.text,a,s.forward(n,A));(ls.to)&&(l=g),w$=t.text.slice(Math.min(a,l),Math.max(a,l));let C=r==(n?e.length-1:0)?null:e[r+(n?1:-1)];return C&&l==g&&C.level+(n?0:1)t.some(e=>e)}),S$=We.define({combine:t=>t.some(e=>e)}),x$=We.define(),W3=class t{constructor(e,A="nearest",i="nearest",n=5,o=5,a=!1){this.range=e,this.y=A,this.x=i,this.yMargin=n,this.xMargin=o,this.isSnapshot=a}map(e){return e.empty?this:new t(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new t(de.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},W5=Hi.define({map:(t,e)=>t.map(e)}),R$=Hi.define();function Sr(t,e,A){let i=t.facet(b$);i.length?i[0](e):window.onerror&&window.onerror(String(e),A,void 0,void 0,e)||(A?console.error(A+":",e):console.error(e))}var JC=We.define({combine:t=>t.length?t[0]:!0}),lvA=0,hQ=We.define({combine(t){return t.filter((e,A)=>{for(let i=0;i{let s=[];return a&&s.push(kD.of(g=>{let l=g.plugin(r);return l?a(l):yt.none})),o&&s.push(o(r)),s})}static fromClass(e,A){return t.define((i,n)=>new e(i,n),A)}},Z3=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let A=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(A)}catch(i){if(Sr(A.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(A){Sr(e.state,A,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var A;if(!((A=this.value)===null||A===void 0)&&A.destroy)try{this.value.destroy()}catch(i){Sr(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},xX=We.define(),pN=We.define(),kD=We.define(),N$=We.define(),cF=We.define(),gf=We.define(),F$=We.define();function RX(t,e){let A=t.state.facet(F$);if(!A.length)return A;let i=A.map(o=>o instanceof Function?o(t):o),n=[];return to.spans(i,e.from,e.to,{point(){},span(o,a,r,s){let g=o-e.from,l=a-e.from,C=n;for(let I=r.length-1;I>=0;I--,s--){let d=r[I].spec.bidiIsolate,B;if(d==null&&(d=gvA(e.text,g,l)),s>0&&C.length&&(B=C[C.length-1]).to==g&&B.direction==d)B.to=l,C=B.inner;else{let E={from:g,to:l,direction:d,inner:[]};C.push(E),C=E.inner}}}}),n}var _$=We.define();function CF(t){let e=0,A=0,i=0,n=0;for(let o of t.state.facet(_$)){let a=o(t);a&&(a.left!=null&&(e=Math.max(e,a.left)),a.right!=null&&(A=Math.max(A,a.right)),a.top!=null&&(i=Math.max(i,a.top)),a.bottom!=null&&(n=Math.max(n,a.bottom)))}return{left:e,right:A,top:i,bottom:n}}var z3=We.define(),Sc=class t{constructor(e,A,i,n){this.fromA=e,this.toA=A,this.fromB=i,this.toB=n}join(e){return new t(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let A=e.length,i=this;for(;A>0;A--){let n=e[A-1];if(!(n.fromA>i.toA)){if(n.toAn.push(new Sc(o,a,r,s))),this.changedRanges=n}static create(e,A,i){return new t(e,A,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},cvA=[],Ha=class{constructor(e,A,i=0){this.dom=e,this.length=A,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return cvA}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let A=this.domAttrs;A&&jyA(this.dom,A)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,A=this.posAtStart){let i=A;for(let n of this.children){if(n==e)return i;i+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,A){return null}domPosFor(e,A){let i=kI(this.dom),n=this.length?e>0:A>0;return new L0(this.parent.dom,i+(n?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof vQ)return e;return null}static get(e){return e.cmTile}},yQ=class extends Ha{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let A=this.dom,i=null,n,o=e?.node==A?e:null,a=0;for(let r of this.children){if(r.sync(e),a+=r.length+r.breakAfter,n=i?i.nextSibling:A.firstChild,o&&n!=r.dom&&(o.written=!0),r.dom.parentNode==A)for(;n&&n!=r.dom;)n=NX(n);else A.insertBefore(r.dom,n);i=r.dom}for(n=i?i.nextSibling:A.firstChild,o&&n&&(o.written=!0);n;)n=NX(n);this.length=a}};function NX(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var vQ=class extends yQ{constructor(e,A){super(A),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let A=Ha.get(e);if(A&&this.owns(A))return A;e=e.parentNode}}blockTiles(e){for(let A=[],i=this,n=0,o=0;;)if(n==i.children.length){if(!A.length)return;i=i.parent,i.breakAfter&&o++,n=A.pop()}else{let a=i.children[n++];if(a instanceof bI)A.push(n),i=a,n=0;else{let r=o+a.length,s=e(a,o);if(s!==void 0)return s;o=r+a.breakAfter}}}resolveBlock(e,A){let i,n=-1,o,a=-1;if(this.blockTiles((r,s)=>{let g=s+r.length;if(e>=s&&e<=g){if(r.isWidget()&&A>=-1&&A<=1){if(r.flags&32)return!0;r.flags&16&&(i=void 0)}(se||e==s&&(A>1?r.length:r.covers(-1)))&&(!o||!r.isWidget()&&o.isWidget())&&(o=r,a=e-s)}}),!i&&!o)throw new Error("No tile at position "+e);return i&&A<0||!o?{tile:i,offset:n}:{tile:o,offset:a}}},bI=class t extends yQ{constructor(e,A){super(e),this.wrapper=A}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,A){let i=new t(A||document.createElement(e.tagName),e);return A||(i.flags|=4),i}},bQ=class t extends yQ{constructor(e,A){super(e),this.attrs=A}isLine(){return!0}static start(e,A,i){let n=new t(A||document.createElement("div"),e);return(!A||!i)&&(n.flags|=4),n}get domAttrs(){return this.attrs}resolveInline(e,A,i){let n=null,o=-1,a=null,r=-1;function s(l,C){for(let I=0,d=0;I=C&&(B.isComposite()?s(B,C-d):(!a||a.isHidden&&(A>0||i&&IvA(a,B)))&&(E>C||B.flags&32)?(a=B,r=C-d):(di&&(e=i);let n=e,o=e,a=0;e==0&&A<0||e==i&&A>=0?lt.chrome||lt.gecko||(e?(n--,a=1):o=0)?0:r.length-1];return lt.safari&&!a&&s.width==0&&(s=Array.prototype.find.call(r,g=>g.width)||s),a?ID(s,a<0):s||null}static of(e,A){let i=new t(A||document.createTextNode(e),e);return A||(i.flags|=2),i}},wd=class t extends Ha{constructor(e,A,i,n){super(e,A,n),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,A){return this.coordsInWidget(e,A,!1)}coordsInWidget(e,A,i){let n=this.widget.coordsAt(this.dom,e,A);if(n)return n;if(i)return ID(this.dom.getBoundingClientRect(),this.length?e==0:A<=0);{let o=this.dom.getClientRects(),a=null;if(!o.length)return null;let r=this.flags&16?!0:this.flags&32?!1:e>0;for(let s=r?o.length-1:0;a=o[s],!(e>0?s==0:s==o.length-1||a.top0;)if(n.isComposite())if(a){if(!e)break;i&&i.break(),e--,a=!1}else if(o==n.children.length){if(!e&&!r.length)break;i&&i.leave(n),a=!!n.breakAfter,{tile:n,index:o}=r.pop(),o++}else{let s=n.children[o],g=s.breakAfter;(A>0?s.length<=e:s.length=0;r--){let s=A.marks[r],g=n.lastChild;if(g instanceof ug&&g.mark.eq(s.mark))g.dom!=s.dom&&g.setDOM(nN(s.dom)),n=g;else{if(this.cache.reused.get(s)){let C=Ha.get(s.dom);C&&C.setDOM(nN(s.dom))}let l=ug.of(s.mark,s.dom);n.append(l),n=l}this.cache.reused.set(s,2)}let o=Ha.get(e.text);o&&this.cache.reused.set(o,2);let a=new fd(e.text,e.text.nodeValue);a.flags|=8,n.append(a)}addInlineWidget(e,A,i){let n=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);n||this.flushBuffer();let o=this.ensureMarks(A,i);!n&&!(e.flags&16)&&o.append(this.getBuffer(1)),o.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,A,i){this.flushBuffer(),this.ensureMarks(A,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let A=this.afterWidget||this.lastBlock;A.length+=e,this.pos+=e}addLineStart(e,A){var i;e||(e=L$);let n=bQ.start(e,A||((i=this.cache.find(bQ))===null||i===void 0?void 0:i.dom),!!A);this.getBlockPos().append(this.lastBlock=this.curLine=n)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,A){var i;let n=this.curLine;for(let o=e.length-1;o>=0;o--){let a=e[o],r;if(A>0&&(r=n.lastChild)&&r instanceof ug&&r.mark.eq(a))n=r,A--;else{let s=ug.of(a,(i=this.cache.find(ug,g=>g.mark.eq(a)))===null||i===void 0?void 0:i.dom);n.append(s),n=s,A=0}}return n}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!FX(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(lt.ios&&FX(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(oN,0,32)||new wd(oN.toDOM(),0,oN,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let A=new DN(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-A.rank||this.wrappers[i-1].to-A.to)<0;)i--;this.wrappers.splice(i,0,A)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let A=this.root;for(let i of this.wrappers){let n=A.lastChild;if(i.froma.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);A.append(o),A=o}}return A}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let A=2|(e<0?16:32),i=this.cache.find(MQ,void 0,1);return i&&(i.flags=A),i||new MQ(A)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},vN=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:n,lineBreak:o,done:a}=this.cursor.next(this.skipCount);if(this.skipCount=0,a)throw new Error("Ran out of text content when drawing inline views");this.text=n;let r=this.textOff=Math.min(e,n.length);return o?null:n.slice(0,r)}let A=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,A);return this.textOff=A,i}},BD=[wd,bQ,fd,ug,MQ,bI,vQ];for(let t=0;t[]),this.index=BD.map(()=>0),this.reused=new Map}add(e){let A=e.constructor.bucket,i=this.buckets[A];i.length<6?i.push(e):i[this.index[A]=(this.index[A]+1)%6]=e}find(e,A,i=2){let n=e.bucket,o=this.buckets[n],a=this.index[n];for(let r=o.length-1;r>=0;r--){let s=(r+a)%o.length,g=o[s];if((!A||A(g))&&!this.reused.has(g))return o.splice(s,1),s{if(this.cache.add(a),a.isComposite())return!1},enter:a=>this.cache.add(a),leave:()=>{},break:()=>{}}}run(e,A){let i=A&&this.getCompositionContext(A.text);for(let n=0,o=0,a=0;;){let r=an){let g=s-n;this.preserve(g,!a,!r),n=s,o+=g}if(!r)break;A&&r.fromA<=A.range.fromA&&r.toA>=A.range.toA?(this.forward(r.fromA,A.range.fromA,A.range.fromA{if(a.isWidget())if(this.openWidget)this.builder.continueWidget(s-r);else{let g=s>0||r{a.isLine()?this.builder.addLineStart(a.attrs,this.cache.maybeReuse(a)):(this.cache.add(a),a instanceof ug&&n.unshift(a.mark)),this.openWidget=!1},leave:a=>{a.isLine()?n.length&&(n.length=o=0):a instanceof ug&&(n.shift(),o=Math.min(o,n.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,A){let i=null,n=this.builder,o=0,a=to.spans(this.decorations,e,A,{point:(r,s,g,l,C,I)=>{if(g instanceof md){if(this.disallowBlockEffectsFor[I]){if(g.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.view.state.doc.lineAt(r).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(o=l.length,C>l.length)n.continueWidget(s-r);else{let d=g.widget||(g.block?_X.block:_X.inline),B=dvA(g),E=this.cache.findWidget(d,s-r,B)||wd.of(d,this.view,s-r,B);g.block?(g.startSide>0&&n.addLineStartIfNotCovered(i),n.addBlockWidget(E)):(n.ensureLine(i),n.addInlineWidget(E,l,C))}i=null}else i=BvA(i,g);s>r&&this.text.skip(s-r)},span:(r,s,g,l)=>{for(let C=r;Co,this.openMarks=a}forward(e,A,i=1){A-e<=10?this.old.advance(A-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(A-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let A=[],i=null;for(let n=e.parentNode;;n=n.parentNode){let o=Ha.get(n);if(n==this.view.contentDOM)break;o instanceof ug?A.push(o):o?.isLine()?i=o:n.nodeName=="DIV"&&!i&&n!=this.view.contentDOM?i=new bQ(n,L$):A.push(ug.of(new nf({tagName:n.nodeName.toLowerCase(),attributes:qyA(n)}),n))}return{line:i,marks:A}}};function FX(t,e){let A=i=>{for(let n of i.children)if((e?n.isText():n.length)||A(n))return!0;return!1};return A(t)}function dvA(t){let e=t.isReplace?(t.startSide<0?64:0)|(t.endSide>0?128:0):t.startSide>0?32:16;return t.block&&(e|=256),e}var L$={class:"cm-line"};function BvA(t,e){let A=e.spec.attributes,i=e.spec.class;return!A&&!i||(t||(t={class:"cm-line"}),A&&aF(A,t),i&&(t.class+=" "+i)),t}function EvA(t){let e=[];for(let A=t.parents.length;A>1;A--){let i=A==t.parents.length?t.tile:t.parents[A].tile;i instanceof ug&&e.push(i.mark)}return e}function nN(t){let e=Ha.get(t);return e&&e.setDOM(t.cloneNode()),t}var _X=(()=>{class t extends fg{constructor(A){super(),this.tag=A}eq(A){return A.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(A){return A.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}return t.inline=new t("span"),t.block=new t("div"),t})(),oN=new class extends fg{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},ED=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=yt.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new vQ(e,e.contentDOM),this.updateInner([new Sc(0,0,0,e.state.doc.length)],null)}update(e){var A;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:l,toA:C})=>Cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let n=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((A=this.domChanged)===null||A===void 0)&&A.newSel?n=this.domChanged.newSel.head:!DvA(e.changes,this.hasComposition)&&!e.selectionSet&&(n=e.state.selection.main.head));let o=n>-1?hvA(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){let{from:l,to:C}=this.hasComposition;i=new Sc(l,C,e.changes.mapPos(l,-1),e.changes.mapPos(C,1)).addToSet(i.slice())}this.hasComposition=o?{from:o.range.fromB,to:o.range.toB}:null,(lt.ie||lt.chrome)&&!o&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,r=this.blockWrappers;this.updateDeco();let s=mvA(a,this.decorations,e.changes);s.length&&(i=Sc.extendWithRanges(i,s));let g=pvA(r,this.blockWrappers,e.changes);return g.length&&(i=Sc.extendWithRanges(i,g)),o&&!i.some(l=>l.fromA<=o.range.fromA&&l.toA>=o.range.toA)&&(i=o.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,o),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,A){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(A||e.length){let a=this.tile,r=new MN(this.view,a,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=r.run(e,A),kN(a,r.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=lt.chrome||lt.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(o),o&&(o.written||i.selectionRange.focusNode!=o.node||!this.tile.dom.contains(o.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let n=[];if(this.view.viewport.from||this.view.viewport.to-1)&&q3(i,this.view.observer.selectionRange)&&!(n&&i.contains(n));if(!(o||A||a))return;let r=this.forceSelection;this.forceSelection=!1;let s=this.view.state.selection.main,g,l;if(s.empty?l=g=this.inlineDOMNearPos(s.anchor,s.assoc||1):(l=this.inlineDOMNearPos(s.head,s.head==s.from?1:-1),g=this.inlineDOMNearPos(s.anchor,s.anchor==s.from?1:-1)),lt.gecko&&s.empty&&!this.hasComposition&&QvA(g)){let I=document.createTextNode("");this.view.observer.ignore(()=>g.node.insertBefore(I,g.node.childNodes[g.offset]||null)),g=l=new L0(I,0),r=!0}let C=this.view.observer.selectionRange;(r||!C.focusNode||(!V3(g.node,g.offset,C.anchorNode,C.anchorOffset)||!V3(l.node,l.offset,C.focusNode,C.focusOffset))&&!this.suppressWidgetCursorChange(C,s))&&(this.view.observer.ignore(()=>{lt.android&<.chrome&&i.contains(C.focusNode)&&wvA(C.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let I=DQ(this.view.root);if(I)if(s.empty){if(lt.gecko){let d=uvA(g.node,g.offset);if(d&&d!=3){let B=(d==1?Q$:h$)(g.node,g.offset);B&&(g=new L0(B.node,B.offset))}}I.collapse(g.node,g.offset),s.bidiLevel!=null&&I.caretBidiLevel!==void 0&&(I.caretBidiLevel=s.bidiLevel)}else if(I.extend){I.collapse(g.node,g.offset);try{I.extend(l.node,l.offset)}catch{}}else{let d=document.createRange();s.anchor>s.head&&([g,l]=[l,g]),d.setEnd(l.node,l.offset),d.setStart(g.node,g.offset),I.removeAllRanges(),I.addRange(d)}a&&this.view.root.activeElement==i&&(i.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(g,l)),this.impreciseAnchor=g.precise?null:new L0(C.anchorNode,C.anchorOffset),this.impreciseHead=l.precise?null:new L0(C.focusNode,C.focusOffset)}suppressWidgetCursorChange(e,A){return this.hasComposition&&A.empty&&V3(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==A.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,A=e.state.selection.main,i=DQ(e.root),{anchorNode:n,anchorOffset:o}=e.observer.selectionRange;if(!i||!A.empty||!A.assoc||!i.modify)return;let a=this.lineAt(A.head,A.assoc);if(!a)return;let r=a.posAtStart;if(A.head==r||A.head==r+a.length)return;let s=this.coordsAt(A.head,-1),g=this.coordsAt(A.head,1);if(!s||!g||s.bottom>g.top)return;let l=this.domAtPos(A.head+A.assoc,A.assoc);i.collapse(l.node,l.offset),i.modify("move",A.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let C=e.observer.selectionRange;e.docView.posFromDOM(C.anchorNode,C.anchorOffset)!=A.from&&i.collapse(n,o)}posFromDOM(e,A){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let n=i.posAtStart;if(i.isComposite()){let o;if(e==i.dom)o=i.dom.childNodes[A];else{let a=YC(e)==0?0:A==0?-1:1;for(;;){let r=e.parentNode;if(r==i.dom)break;a==0&&r.firstChild!=r.lastChild&&(e==r.firstChild?a=-1:a=1),e=r}a<0?o=e:o=e.nextSibling}if(o==i.dom.firstChild)return n;for(;o&&!Ha.get(o);)o=o.nextSibling;if(!o)return n+i.length;for(let a=0,r=n;;a++){let s=i.children[a];if(s.dom==o)return r;r+=s.length+s.breakAfter}}else return i.isText()?e==i.dom?n+A:n+(A?i.length:0):n}domAtPos(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.domPosFor(e,A):i.domIn(n,A)}inlineDOMNearPos(e,A){let i,n=-1,o=!1,a,r=-1,s=!1;return this.tile.blockTiles((g,l)=>{if(g.isWidget()){if(g.flags&32&&l>=e)return!0;g.flags&16&&(o=!0)}else{let C=l+g.length;if(l<=e&&(i=g,n=e-l,o=C=e&&!a&&(a=g,r=e-l,s=l>e),l>e&&a)return!0}}),!i&&!a?this.domAtPos(e,A):(o&&a?i=null:s&&i&&(a=null),i&&A<0||!a?i.domIn(n,A):a.domIn(r,A))}coordsAt(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.widget instanceof X3?null:i.coordsInWidget(n,A,!0):i.coordsIn(n,A)}lineAt(e,A){let{tile:i}=this.tile.resolveBlock(e,A);return i.isLine()?i:null}coordsForChar(e){let{tile:A,offset:i}=this.tile.resolveBlock(e,1);if(!A.isLine())return null;function n(o,a){if(o.isComposite())for(let r of o.children){if(r.length>=a){let s=n(r,a);if(s)return s}if(a-=r.length,a<0)break}else if(o.isText()&&aMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,s=this.view.textDirection==mo.LTR,g=0,l=(C,I,d)=>{for(let B=0;Bn);B++){let E=C.children[B],Q=I+E.length,f=E.dom.getBoundingClientRect(),{height:b}=f;if(d&&!B&&(g+=f.top-d.top),E instanceof bI)Q>i&&l(E,I,f);else if(I>=i&&(g>0&&A.push(-g),A.push(b+g),g=0,a)){let S=E.dom.lastChild,M=S?oD(S):[];if(M.length){let D=M[M.length-1],F=s?D.right-f.left:f.right-D.left;F>r&&(r=F,this.minWidth=o,this.minWidthFrom=I,this.minWidthTo=Q)}}d&&B==C.children.length-1&&(g+=d.bottom-f.bottom),I=Q+E.breakAfter}};return l(this.tile,0,null),A}textDirectionAt(e){let{tile:A}=this.tile.resolveBlock(e,1);return getComputedStyle(A.dom).direction=="rtl"?mo.RTL:mo.LTR}measureTextSize(){let e=this.tile.blockTiles(a=>{if(a.isLine()&&a.children.length&&a.length<=20){let r=0,s;for(let g of a.children){if(!g.isText()||/[^ -~]/.test(g.text))return;let l=oD(g.dom);if(l.length!=1)return;r+=l[0].width,s=l[0].height}if(r)return{lineHeight:a.dom.getBoundingClientRect().height,charWidth:r/a.length,textHeight:s}}});if(e)return e;let A=document.createElement("div"),i,n,o;return A.className="cm-line",A.style.width="99999px",A.style.position="absolute",A.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(A);let a=oD(A.firstChild)[0];i=A.getBoundingClientRect().height,n=a&&a.width?a.width/27:7,o=a&&a.height?a.height:i,A.remove()}),{lineHeight:i,charWidth:n,textHeight:o}}computeBlockGapDeco(){let e=[],A=this.view.viewState;for(let i=0,n=0;;n++){let o=n==A.viewports.length?null:A.viewports[n],a=o?o.from-1:this.view.state.doc.length;if(a>i){let r=(A.lineBlockAt(a).bottom-A.lineBlockAt(i).top)/this.view.scaleY;e.push(yt.replace({widget:new X3(r),block:!0,inclusive:!0,isBlockGap:!0}).range(i,a))}if(!o)break;i=o.to+1}return yt.set(e)}updateDeco(){let e=1,A=this.view.state.facet(kD).map(o=>(this.dynamicDecorationMap[e++]=typeof o=="function")?o(this.view):o),i=!1,n=this.view.state.facet(cF).map((o,a)=>{let r=typeof o=="function";return r&&(i=!0),r?o(this.view):o});for(n.length&&(this.dynamicDecorationMap[e++]=i,A.push(to.join(n))),this.decorations=[this.editContextFormatting,...A,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof o=="function"?o(this.view):o)}scrollIntoView(e){if(e.isSnapshot){let g=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=g.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let g of this.view.state.facet(x$))try{if(g(this.view,e.range,e))return!0}catch(l){Sr(this.view.state,l,"scroll handler")}let{range:A}=e,i=this.coordsAt(A.head,A.empty?A.assoc:A.head>A.anchor?-1:1),n;if(!i)return;!A.empty&&(n=this.coordsAt(A.anchor,A.anchor>A.head?-1:1))&&(i={left:Math.min(i.left,n.left),top:Math.min(i.top,n.top),right:Math.max(i.right,n.right),bottom:Math.max(i.bottom,n.bottom)});let o=CF(this.view),a={left:i.left-o.left,top:i.top-o.top,right:i.right+o.right,bottom:i.bottom+o.bottom},{offsetWidth:r,offsetHeight:s}=this.view.scrollDOM;ZyA(this.view.scrollDOM,a,A.headi.isWidget()||i.children.some(A);return A(this.tile.resolveBlock(e,1).tile)}destroy(){kN(this.tile)}};function kN(t,e){let A=e?.get(t);if(A!=1){A==null&&t.destroy();for(let i of t.children)kN(i,e)}}function QvA(t){return t.node.nodeType==1&&t.node.firstChild&&(t.offset==0||t.node.childNodes[t.offset-1].contentEditable=="false")&&(t.offset==t.node.childNodes.length||t.node.childNodes[t.offset].contentEditable=="false")}function G$(t,e){let A=t.observer.selectionRange;if(!A.focusNode)return null;let i=Q$(A.focusNode,A.focusOffset),n=h$(A.focusNode,A.focusOffset),o=i||n;if(n&&i&&n.node!=i.node){let r=Ha.get(n.node);if(!r||r.isText()&&r.text!=n.node.nodeValue)o=n;else if(t.docView.lastCompositionAfterCursor){let s=Ha.get(i.node);!s||s.isText()&&s.text!=i.node.nodeValue||(o=n)}}if(t.docView.lastCompositionAfterCursor=o!=i,!o)return null;let a=e-o.offset;return{from:a,to:a+o.node.nodeValue.length,node:o.node}}function hvA(t,e,A){let i=G$(t,A);if(!i)return null;let{node:n,from:o,to:a}=i,r=n.nodeValue;if(/[\n\r]/.test(r)||t.state.doc.sliceString(i.from,i.to)!=r)return null;let s=e.invertedDesc;return{range:new Sc(s.mapPos(o),s.mapPos(a),o,a),text:n}}function uvA(t,e){return t.nodeType!=1?0:(e&&t.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(A=!0)}),A}var X3=class extends fg{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function yvA(t,e,A=1){let i=t.charCategorizer(e),n=t.doc.lineAt(e),o=e-n.from;if(n.length==0)return de.cursor(e);o==0?A=1:o==n.length&&(A=-1);let a=o,r=o;A<0?a=Ta(n.text,o,!1):r=Ta(n.text,o);let s=i(n.text.slice(a,r));for(;a>0;){let g=Ta(n.text,a,!1);if(i(n.text.slice(g,a))!=s)break;a=g}for(;rt.defaultLineHeight*1.5){let r=t.viewState.heightOracle.textHeight,s=Math.floor((n-A.top-(t.defaultLineHeight-r)*.5)/r);o+=s*t.viewState.heightOracle.lineLength}let a=t.state.sliceDoc(A.from,A.to);return A.from+q5(a,o,t.state.tabSize)}function xN(t,e,A){let i=t.lineBlockAt(e);if(Array.isArray(i.type)){let n;for(let o of i.type){if(o.from>e)break;if(!(o.toe)return o;(!n||o.type==Xr.Text&&(n.type!=o.type||(A<0?o.frome)))&&(n=o)}}return n||i}return i}function bvA(t,e,A,i){let n=xN(t,e.head,e.assoc||-1),o=!i||n.type!=Xr.Text||!(t.lineWrapping||n.widgetLineBreaks)?null:t.coordsAtPos(e.assoc<0&&e.head>n.from?e.head-1:e.head);if(o){let a=t.dom.getBoundingClientRect(),r=t.textDirectionAt(n.from),s=t.posAtCoords({x:A==(r==mo.LTR)?a.right-1:a.left+1,y:(o.top+o.bottom)/2});if(s!=null)return de.cursor(s,A?-1:1)}return de.cursor(A?n.to:n.from,A?-1:1)}function LX(t,e,A,i){let n=t.state.doc.lineAt(e.head),o=t.bidiSpans(n),a=t.textDirectionAt(n.from);for(let r=e,s=null;;){let g=svA(n,o,a,r,A),l=w$;if(!g){if(n.number==(A?t.state.doc.lines:1))return r;l=` -`,n=t.state.doc.line(n.number+(A?1:-1)),o=t.bidiSpans(n),g=t.visualLineSide(n,!A)}if(s){if(!s(l))return r}else{if(!i)return g;s=i(l)}r=g}}function MvA(t,e,A){let i=t.state.charCategorizer(e),n=i(A);return o=>{let a=i(o);return n==Lo.Space&&(n=a),n==a}}function kvA(t,e,A,i){let n=e.head,o=A?1:-1;if(n==(A?t.state.doc.length:0))return de.cursor(n,e.assoc);let a=e.goalColumn,r,s=t.contentDOM.getBoundingClientRect(),g=t.coordsAtPos(n,e.assoc||-1),l=t.documentTop;if(g)a==null&&(a=g.left-s.left),r=o<0?g.top:g.bottom;else{let B=t.viewState.lineBlockAt(n);a==null&&(a=Math.min(s.right-s.left,t.defaultCharacterWidth*(n-B.from))),r=(o<0?B.top:B.bottom)+l}let C=s.left+a,I=i??t.viewState.heightOracle.textHeight>>1,d=RN(t,{x:C,y:r+I*o},!1,o);return de.cursor(d.pos,d.assoc,void 0,a)}function $3(t,e,A){for(;;){let i=0;for(let n of t)n.between(e-1,e+1,(o,a,r)=>{if(e>o&&en(t)),A.from,e.head>A.from?-1:1);return i==A.from?A:de.cursor(i,it.viewState.docHeight)return new Rl(t.state.doc.length,-1);if(g=t.elementAtHeight(s),i==null)break;if(g.type==Xr.Text){let I=t.docView.coordsAt(i<0?g.from:g.to,i);if(I&&(i<0?I.top<=s+o:I.bottom>=s+o))break}let C=t.viewState.heightOracle.textHeight/2;s=i>0?g.bottom+C:g.top-C}if(t.viewport.from>=g.to||t.viewport.to<=g.from){if(A)return null;if(g.type==Xr.Text){let C=vvA(t,n,g,a,r);return new Rl(C,C==g.from?1:-1)}}if(g.type!=Xr.Text)return s<(g.top+g.bottom)/2?new Rl(g.from,1):new Rl(g.to,-1);let l=t.docView.lineAt(g.from,2);return(!l||l.length!=g.length)&&(l=t.docView.lineAt(g.from,-2)),U$(t,l,g.from,a,r)}function U$(t,e,A,i,n){let o=-1,a=null,r=1e9,s=1e9,g=n,l=n,C=(I,d)=>{for(let B=0;Bi?E.left-i:E.rightn?E.top-n:E.bottom=g&&(g=Math.min(E.top,g),l=Math.max(E.bottom,l),f=0),(o<0||(f-s||Q-r)<0)&&(o>=0&&s&&r=g+2?s=0:(o=d,r=Q,s=f,a=E))}};if(e.isText()){for(let d=0;d(a.left+a.right)/2==(GX(t,o+A)==mo.LTR)?new Rl(A+Ta(e.text,o),-1):new Rl(A+o,1)}else{if(!e.length)return new Rl(A,1);for(let E=0;E(a.left+a.right)/2==(GX(t,o+A)==mo.LTR)?new Rl(d+I.length,-1):new Rl(d,1)}}function GX(t,e){let A=t.state.doc.lineAt(e);return t.bidiSpans(A)[kc.find(t.bidiSpans(A),e-A.from,-1,1)].dir}var O3="\uFFFF",NN=class{constructor(e,A){this.points=e,this.view=A,this.text="",this.lineSeparator=A.state.facet(er.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=O3}readRange(e,A){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let o=this.text.length;this.readNode(n);let a=Ha.get(n),r=n.nextSibling;if(r==A){a?.breakAfter&&!r&&i!=this.view.contentDOM&&this.lineBreak();break}let s=Ha.get(r);(a&&s?a.breakAfter:(a?a.breakAfter:CD(n))||CD(r)&&(n.nodeName!="BR"||a?.isWidget())&&this.text.length>o)&&!xvA(r,A)&&this.lineBreak(),n=r}return this.findPointBefore(i,A),this}readTextNode(e){let A=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,A.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let o=-1,a=1,r;if(this.lineSeparator?(o=A.indexOf(this.lineSeparator,i),a=this.lineSeparator.length):(r=n.exec(A))&&(o=r.index,a=r[0].length),this.append(A.slice(i,o<0?A.length:o)),o<0)break;if(this.lineBreak(),a>1)for(let s of this.points)s.node==e&&s.pos>this.text.length&&(s.pos-=a-1);i=o+a}}readNode(e){let A=Ha.get(e),i=A&&A.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let n=i.iter();!n.next().done;)n.lineBreak?this.lineBreak():this.append(n.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,A){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==A&&(i.pos=this.text.length)}findPointInside(e,A){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(SvA(e,i.node,i.offset)?A:0))}};function SvA(t,e,A){for(;;){if(!e||A-1;let{impreciseHead:o,impreciseAnchor:a}=e.docView;if(e.state.readOnly&&A>-1)this.newSel=null;else if(A>-1&&(this.bounds=J$(e.docView.tile,A,i,0))){let r=o||a?[]:NvA(e),s=new NN(r,e);s.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=s.text,this.newSel=FvA(r,this.bounds.from)}else{let r=e.observer.selectionRange,s=o&&o.node==r.focusNode&&o.offset==r.focusOffset||!QN(e.contentDOM,r.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(r.focusNode,r.focusOffset),g=a&&a.node==r.anchorNode&&a.offset==r.anchorOffset||!QN(e.contentDOM,r.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(r.anchorNode,r.anchorOffset),l=e.viewport;if((lt.ios||lt.chrome)&&e.state.selection.main.empty&&s!=g&&(l.from>0||l.to-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(de.range(g,s)):this.newSel=de.single(g,s)}}};function J$(t,e,A,i){if(t.isComposite()){let n=-1,o=-1,a=-1,r=-1;for(let s=0,g=i,l=i;sA)return J$(C,e,A,g);if(I>=e&&n==-1&&(n=s,o=g),g>A&&C.dom.parentNode==t.dom){a=s,r=l;break}l=I,g=I+C.breakAfter}return{from:o,to:r<0?i+t.length:r,startDOM:(n?t.children[n-1].dom.nextSibling:null)||t.dom.firstChild,endDOM:a=0?t.children[a].dom:null}}else return t.isText()?{from:i,to:i+t.length,startDOM:t.dom,endDOM:t.dom.nextSibling}:null}function Y$(t,e){let A,{newSel:i}=e,n=t.state.selection.main,o=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:a,to:r}=e.bounds,s=n.from,g=null;(o===8||lt.android&&e.text.length=n.from&&A.to<=n.to&&(A.from!=n.from||A.to!=n.to)&&n.to-n.from-(A.to-A.from)<=4?A={from:n.from,to:n.to,insert:t.state.doc.slice(n.from,A.from).append(A.insert).append(t.state.doc.slice(A.to,n.to))}:t.state.doc.lineAt(n.from).toDate.now()-50?A={from:n.from,to:n.to,insert:t.state.toText(t.inputState.insertingText)}:lt.chrome&&A&&A.from==A.to&&A.from==n.head&&A.insert.toString()==` - `&&t.lineWrapping&&(i&&(i=de.single(i.main.anchor-1,i.main.head-1)),A={from:n.from,to:n.to,insert:bn.of([" "])}),A)return IF(t,A,i,o);if(i&&!hD(i,n)){let a=!1,r="select";return t.inputState.lastSelectionTime>Date.now()-50&&(t.inputState.lastSelectionOrigin=="select"&&(a=!0),r=t.inputState.lastSelectionOrigin,r=="select.pointer"&&(i=K$(t.state.facet(gf).map(s=>s(t)),i))),t.dispatch({selection:i,scrollIntoView:a,userEvent:r}),!0}else return!1}function IF(t,e,A,i=-1){if(lt.ios&&t.inputState.flushIOSKey(e))return!0;let n=t.state.selection.main;if(lt.android&&(e.to==n.to&&(e.from==n.from||e.from==n.from-1&&t.state.sliceDoc(e.from,n.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&wQ(t.contentDOM,"Enter",13)||(e.from==n.from-1&&e.to==n.to&&e.insert.length==0||i==8&&e.insert.lengthn.head)&&wQ(t.contentDOM,"Backspace",8)||e.from==n.from&&e.to==n.to+1&&e.insert.length==0&&wQ(t.contentDOM,"Delete",46)))return!0;let o=e.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a,r=()=>a||(a=RvA(t,e,A));return t.state.facet(M$).some(s=>s(t,e.from,e.to,o,r))||t.dispatch(r()),!0}function RvA(t,e,A){let i,n=t.state,o=n.selection.main,a=-1;if(e.from==e.to&&e.fromo.to){let s=e.fromC(t)),g,s);e.from==l&&(a=l)}if(a>-1)i={changes:e,selection:de.cursor(e.from+e.insert.length,-1)};else if(e.from>=o.from&&e.to<=o.to&&e.to-e.from>=(o.to-o.from)/3&&(!A||A.main.empty&&A.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let s=o.frome.to?n.sliceDoc(e.to,o.to):"";i=n.replaceSelection(t.state.toText(s+e.insert.sliceString(0,void 0,t.state.lineBreak)+g))}else{let s=n.changes(e),g=A&&A.main.to<=s.newLength?A.main:void 0;if(n.selection.ranges.length>1&&(t.inputState.composing>=0||t.inputState.compositionPendingChange)&&e.to<=o.to+10&&e.to>=o.to-10){let l=t.state.sliceDoc(e.from,e.to),C,I=A&&G$(t,A.main.head);if(I){let B=e.insert.length-(e.to-e.from);C={from:I.from,to:I.to-B}}else C=t.state.doc.lineAt(o.head);let d=o.to-e.to;i=n.changeByRange(B=>{if(B.from==o.from&&B.to==o.to)return{changes:s,range:g||B.map(s)};let E=B.to-d,Q=E-l.length;if(t.state.sliceDoc(Q,E)!=l||E>=C.from&&Q<=C.to)return{range:B};let f=n.changes({from:Q,to:E,insert:e.insert}),b=B.to-o.to;return{changes:f,range:g?de.range(Math.max(0,g.anchor+b),Math.max(0,g.head+b)):B.map(f)}})}else i={changes:s,selection:g&&n.selection.replaceRange(g)}}let r="input.type";return(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,r+=".compose",t.inputState.compositionFirstChange&&(r+=".start",t.inputState.compositionFirstChange=!1)),n.update(i,{userEvent:r,scrollIntoView:!0})}function T$(t,e,A,i){let n=Math.min(t.length,e.length),o=0;for(;o0&&r>0&&t.charCodeAt(a-1)==e.charCodeAt(r-1);)a--,r--;if(i=="end"){let s=Math.max(0,o-Math.min(a,r));A-=a+s-o}if(a=a?o-A:0;o-=s,r=o+(r-a),a=o}else if(r=r?o-A:0;o-=s,a=o+(a-r),r=o}return{from:o,toA:a,toB:r}}function NvA(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}=t.observer.selectionRange;return A&&(e.push(new QD(A,i)),(n!=A||o!=i)&&e.push(new QD(n,o))),e}function FvA(t,e){if(t.length==0)return null;let A=t[0].pos,i=t.length==2?t[1].pos:A;return A>-1&&i>-1?de.single(A+e,i+e):null}function hD(t,e){return e.head==t.main.head&&e.anchor==t.main.anchor}var _N=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,lt.safari&&e.contentDOM.addEventListener("input",()=>null),lt.gecko&&qvA(e.contentDOM.ownerDocument)}handleEvent(e){!YvA(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,A){let i=this.handlers[e];if(i){for(let n of i.observers)n(this.view,A);for(let n of i.handlers){if(A.defaultPrevented)break;if(n(this.view,A)){A.preventDefault();break}}}}ensureHandlers(e){let A=_vA(e),i=this.handlers,n=this.view.contentDOM;for(let o in A)if(o!="scroll"){let a=!A[o].handlers.length,r=i[o];r&&a!=!r.handlers.length&&(n.removeEventListener(o,this.handleEvent),r=null),r||n.addEventListener(o,this.handleEvent,{passive:a})}for(let o in i)o!="scroll"&&!A[o]&&n.removeEventListener(o,this.handleEvent);this.handlers=A}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&z$.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),lt.android&<.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let A;return lt.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((A=H$.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||LvA.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=A||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let A=this.pendingIOSKey;return!A||A.key=="Enter"&&e&&e.from0?!0:lt.safari&&!lt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function KX(t,e){return(A,i)=>{try{return e.call(t,i,A)}catch(n){Sr(A.state,n)}}}function _vA(t){let e=Object.create(null);function A(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of t){let n=i.spec,o=n&&n.plugin.domEventHandlers,a=n&&n.plugin.domEventObservers;if(o)for(let r in o){let s=o[r];s&&A(r).handlers.push(KX(i.value,s))}if(a)for(let r in a){let s=a[r];s&&A(r).observers.push(KX(i.value,s))}}for(let i in xc)A(i).handlers.push(xc[i]);for(let i in Nl)A(i).observers.push(Nl[i]);return e}var H$=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],LvA="dthko",z$=[16,17,18,20,91,92,224,225],Z5=6;function X5(t){return Math.max(0,t)*.7+8}function GvA(t,e){return Math.max(Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))}var LN=class{constructor(e,A,i,n){this.view=e,this.startEvent=A,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=A,this.scrollParents=XyA(e.contentDOM),this.atoms=e.state.facet(gf).map(a=>a(e));let o=e.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=A.shiftKey,this.multiple=e.state.facet(er.allowMultipleSelections)&&KvA(e,A),this.dragging=JvA(e,A)&&j$(A)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&GvA(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let A=0,i=0,n=0,o=0,a=this.view.win.innerWidth,r=this.view.win.innerHeight;this.scrollParents.x&&({left:n,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:o,bottom:r}=this.scrollParents.y.getBoundingClientRect());let s=CF(this.view);e.clientX-s.left<=n+Z5?A=-X5(n-e.clientX):e.clientX+s.right>=a-Z5&&(A=X5(e.clientX-a)),e.clientY-s.top<=o+Z5?i=-X5(o-e.clientY):e.clientY+s.bottom>=r-Z5&&(i=X5(e.clientY-r)),this.setScrollSpeed(A,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,A){this.scrollSpeed={x:e,y:A},e||A?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:A}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),A&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=A,A=0),(e||A)&&this.view.win.scrollBy(e,A),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:A}=this,i=K$(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(A.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(A=>A.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function KvA(t,e){let A=t.state.facet(D$);return A.length?A[0](e):lt.mac?e.metaKey:e.ctrlKey}function UvA(t,e){let A=t.state.facet(y$);return A.length?A[0](e):lt.mac?!e.altKey:!e.ctrlKey}function JvA(t,e){let{main:A}=t.state.selection;if(A.empty)return!1;let i=DQ(t.root);if(!i||i.rangeCount==0)return!0;let n=i.getRangeAt(0).getClientRects();for(let o=0;o=e.clientX&&a.top<=e.clientY&&a.bottom>=e.clientY)return!0}return!1}function YvA(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let A=e.target,i;A!=t.contentDOM;A=A.parentNode)if(!A||A.nodeType==11||(i=Ha.get(A))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var xc=Object.create(null),Nl=Object.create(null),O$=lt.ie&<.ie_version<15||lt.ios&<.webkit_version<604;function TvA(t){let e=t.dom.parentNode;if(!e)return;let A=e.appendChild(document.createElement("textarea"));A.style.cssText="position: fixed; left: -10000px; top: 10px",A.focus(),setTimeout(()=>{t.focus(),A.remove(),P$(t,A.value)},50)}function SD(t,e,A){for(let i of t.facet(e))A=i(A,t);return A}function P$(t,e){e=SD(t.state,gF,e);let{state:A}=t,i,n=1,o=A.toText(e),a=o.lines==A.selection.ranges.length;if(GN!=null&&A.selection.ranges.every(s=>s.empty)&&GN==o.toString()){let s=-1;i=A.changeByRange(g=>{let l=A.doc.lineAt(g.from);if(l.from==s)return{range:g};s=l.from;let C=A.toText((a?o.line(n++).text:e)+A.lineBreak);return{changes:{from:l.from,insert:C},range:de.cursor(g.from+C.length)}})}else a?i=A.changeByRange(s=>{let g=o.line(n++);return{changes:{from:s.from,to:s.to,insert:g.text},range:de.cursor(s.from+g.length)}}):i=A.replaceSelection(o);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Nl.scroll=t=>{t.inputState.lastScrollTop=t.scrollDOM.scrollTop,t.inputState.lastScrollLeft=t.scrollDOM.scrollLeft};xc.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),e.keyCode==27&&t.inputState.tabFocusMode!=0&&(t.inputState.tabFocusMode=Date.now()+2e3),!1);Nl.touchstart=(t,e)=>{t.inputState.lastTouchTime=Date.now(),t.inputState.setSelectionOrigin("select.pointer")};Nl.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")};xc.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let A=null;for(let i of t.state.facet(v$))if(A=i(t,e),A)break;if(!A&&e.button==0&&(A=zvA(t,e)),A){let i=!t.hasFocus;t.inputState.startMouseSelection(new LN(t,e,A,i)),i&&t.observer.ignore(()=>{B$(t.contentDOM);let o=t.root.activeElement;o&&!o.contains(t.contentDOM)&&o.blur()});let n=t.inputState.mouseSelection;if(n)return n.start(e),n.dragging===!1}else t.inputState.setSelectionOrigin("select.pointer");return!1};function UX(t,e,A,i){if(i==1)return de.cursor(e,A);if(i==2)return yvA(t.state,e,A);{let n=t.docView.lineAt(e,A),o=t.state.doc.lineAt(n?n.posAtEnd:e),a=n?n.posAtStart:o.from,r=n?n.posAtEnd:o.to;return rDate.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(YX+1)%3:1}function zvA(t,e){let A=t.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=j$(e),n=t.state.selection;return{update(o){o.docChanged&&(A.pos=o.changes.mapPos(A.pos),n=n.map(o.changes))},get(o,a,r){let s=t.posAndSideAtCoords({x:o.clientX,y:o.clientY},!1),g,l=UX(t,s.pos,s.assoc,i);if(A.pos!=s.pos&&!a){let C=UX(t,A.pos,A.assoc,i),I=Math.min(C.from,l.from),d=Math.max(C.to,l.to);l=I1&&(g=OvA(n,s.pos))?g:r?n.addRange(l):de.create([l])}}}function OvA(t,e){for(let A=0;A=e)return de.create(t.ranges.slice(0,A).concat(t.ranges.slice(A+1)),t.mainIndex==A?0:t.mainIndex-(t.mainIndex>A?1:0))}return null}xc.dragstart=(t,e)=>{let{selection:{main:A}}=t.state;if(e.target.draggable){let n=t.docView.tile.nearest(e.target);if(n&&n.isWidget()){let o=n.posAtStart,a=o+n.length;(o>=A.to||a<=A.from)&&(A=de.range(o,a))}}let{inputState:i}=t;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=A,e.dataTransfer&&(e.dataTransfer.setData("Text",SD(t.state,lF,t.state.sliceDoc(A.from,A.to))),e.dataTransfer.effectAllowed="copyMove"),!1};xc.dragend=t=>(t.inputState.draggedContent=null,!1);function HX(t,e,A,i){if(A=SD(t.state,gF,A),!A)return;let n=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:o}=t.inputState,a=i&&o&&UvA(t,e)?{from:o.from,to:o.to}:null,r={from:n,insert:A},s=t.state.changes(a?[a,r]:r);t.focus(),t.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},userEvent:a?"move.drop":"input.drop"}),t.inputState.draggedContent=null}xc.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let A=e.dataTransfer.files;if(A&&A.length){let i=Array(A.length),n=0,o=()=>{++n==A.length&&HX(t,e,i.filter(a=>a!=null).join(t.state.lineBreak),!1)};for(let a=0;a{/[\x00-\x08\x0e-\x1f]{2}/.test(r.result)||(i[a]=r.result),o()},r.readAsText(A[a])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return HX(t,e,i,!0),!0}return!1};xc.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let A=O$?null:e.clipboardData;return A?(P$(t,A.getData("text/plain")||A.getData("text/uri-list")),!0):(TvA(t),!1)};function PvA(t,e){let A=t.dom.parentNode;if(!A)return;let i=A.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),t.focus()},50)}function jvA(t){let e=[],A=[],i=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),A.push(n));if(!e.length){let n=-1;for(let{from:o}of t.selection.ranges){let a=t.doc.lineAt(o);a.number>n&&(e.push(a.text),A.push({from:a.from,to:Math.min(t.doc.length,a.to+1)})),n=a.number}i=!0}return{text:SD(t,lF,e.join(t.lineBreak)),ranges:A,linewise:i}}var GN=null;xc.copy=xc.cut=(t,e)=>{let A=DQ(t.root);if(A&&!q3(t.contentDOM,A))return!1;let{text:i,ranges:n,linewise:o}=jvA(t.state);if(!i&&!o)return!1;GN=o?i:null,e.type=="cut"&&!t.state.readOnly&&t.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let a=O$?null:e.clipboardData;return a?(a.clearData(),a.setData("text/plain",i),!0):(PvA(t,i),!1)};var q$=hg.define();function V$(t,e){let A=[];for(let i of t.facet(k$)){let n=i(t,e);n&&A.push(n)}return A.length?t.update({effects:A,annotations:q$.of(!0)}):null}function W$(t){setTimeout(()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let A=V$(t.state,e);A?t.dispatch(A):t.update([])}},10)}Nl.focus=t=>{t.inputState.lastFocusTime=Date.now(),!t.scrollDOM.scrollTop&&(t.inputState.lastScrollTop||t.inputState.lastScrollLeft)&&(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),W$(t)};Nl.blur=t=>{t.observer.clearSelectionRange(),W$(t)};Nl.compositionstart=Nl.compositionupdate=t=>{t.observer.editContext||(t.inputState.compositionFirstChange==null&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0))};Nl.compositionend=t=>{t.observer.editContext||(t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,lt.chrome&<.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then(()=>t.observer.flush()):setTimeout(()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])},50))};Nl.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()};xc.beforeinput=(t,e)=>{var A,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(t.inputState.insertingText=e.data,t.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&t.observer.editContext){let o=(A=e.dataTransfer)===null||A===void 0?void 0:A.getData("text/plain"),a=e.getTargetRanges();if(o&&a.length){let r=a[0],s=t.posAtDOM(r.startContainer,r.startOffset),g=t.posAtDOM(r.endContainer,r.endOffset);return IF(t,{from:s,to:g,insert:t.state.toText(o)},null),!0}}let n;if(lt.chrome&<.android&&(n=H$.find(o=>o.inputType==e.inputType))&&(t.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let o=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var a;(((a=window.visualViewport)===null||a===void 0?void 0:a.height)||0)>o+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())},100)}return lt.ios&&e.inputType=="deleteContentForward"&&t.observer.flushSoon(),lt.safari&&e.inputType=="insertText"&&t.inputState.composing>=0&&setTimeout(()=>Nl.compositionend(t,e),20),!1};var zX=new Set;function qvA(t){zX.has(t)||(zX.add(t),t.addEventListener("copy",()=>{}),t.addEventListener("cut",()=>{}))}var OX=["pre-wrap","normal","pre-line","break-spaces"],kQ=!1;function PX(){kQ=!1}var KN=class{constructor(e){this.lineWrapping=e,this.doc=bn.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,A){let i=this.doc.lineAt(A).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((A-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return OX.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let A=!1;for(let i=0;i-1,s=Math.abs(A-this.lineHeight)>.3||this.lineWrapping!=r||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=r,this.lineHeight=A,this.charWidth=i,this.textHeight=n,this.lineLength=o,s){this.heightSamples={};for(let g=0;g0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>aD&&(kQ=!0),this.height=e)}replace(e,A,i){return t.of(i)}decomposeLeft(e,A){A.push(this)}decomposeRight(e,A){A.push(this)}applyChanges(e,A,i,n){let o=this,a=i.doc;for(let r=n.length-1;r>=0;r--){let{fromA:s,toA:g,fromB:l,toB:C}=n[r],I=o.lineAt(s,oa.ByPosNoHeight,i.setDoc(A),0,0),d=I.to>=g?I:o.lineAt(g,oa.ByPosNoHeight,i,0,0);for(C+=d.to-g,g=d.to;r>0&&I.from<=n[r-1].toA;)s=n[r-1].fromA,l=n[r-1].fromB,r--,so*2){let r=e[A-1];r.break?e.splice(--A,1,r.left,null,r.right):e.splice(--A,1,r.left,r.right),i+=1+r.break,n-=r.size}else if(o>n*2){let r=e[i];r.break?e.splice(i,1,r.left,null,r.right):e.splice(i,1,r.left,r.right),i+=2+r.break,o-=r.size}else break;else if(n=o&&a(this.lineAt(0,oa.ByPos,i,n,o))}setMeasuredHeight(e){let A=e.heights[e.index++];A<0?(this.spaceAbove=-A,A=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(A)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more&&this.setMeasuredHeight(n),this.outdated=!1,this}toString(){return`block(${this.length})`}},xl=class t extends fD{constructor(e,A,i){super(e,A,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,A){return new Mc(A,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,A,i){let n=i[0];return i.length==1&&(n instanceof t||n instanceof MI&&n.flags&4)&&Math.abs(this.length-n.length)<10?(n instanceof MI?n=new t(n.length,this.height,this.spaceAbove):n.height=this.height,this.outdated||(n.outdated=!1),n):Pg.of(i)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more?this.setMeasuredHeight(n):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},MI=class t extends Pg{constructor(e){super(e,0)}heightMetrics(e,A){let i=e.doc.lineAt(A).number,n=e.doc.lineAt(A+this.length).number,o=n-i+1,a,r=0;if(e.lineWrapping){let s=Math.min(this.height,e.lineHeight*o);a=s/o,this.length>o+1&&(r=(this.height-s)/(this.length-o-1))}else a=this.height/o;return{firstLine:i,lastLine:n,perLine:a,perChar:r}}blockAt(e,A,i,n){let{firstLine:o,lastLine:a,perLine:r,perChar:s}=this.heightMetrics(A,n);if(A.lineWrapping){let g=n+(e0){let o=i[i.length-1];o instanceof t?i[i.length-1]=new t(o.length+n):i.push(null,new t(n-1))}if(e>0){let o=i[0];o instanceof t?i[0]=new t(e+o.length):i.unshift(new t(e-1),null)}return Pg.of(i)}decomposeLeft(e,A){A.push(new t(e-1),null)}decomposeRight(e,A){A.push(null,new t(this.length-e-1))}updateHeight(e,A=0,i=!1,n){let o=A+this.length;if(n&&n.from<=A+this.length&&n.more){let a=[],r=Math.max(A,n.from),s=-1;for(n.from>A&&a.push(new t(n.from-A-1).updateHeight(e,A));r<=o&&n.more;){let l=e.doc.lineAt(r).length;a.length&&a.push(null);let C=n.heights[n.index++],I=0;C<0&&(I=-C,C=n.heights[n.index++]),s==-1?s=C:Math.abs(C-s)>=aD&&(s=-2);let d=new xl(l,C,I);d.outdated=!1,a.push(d),r+=l+1}r<=o&&a.push(null,new t(o-r).updateHeight(e,r));let g=Pg.of(a);return(s<0||Math.abs(g.height-this.height)>=aD||Math.abs(s-this.heightMetrics(e,A).perLine)>=aD)&&(kQ=!0),uD(this,g)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(A,A+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},JN=class extends Pg{constructor(e,A,i){super(e.length+A+i.length,e.height+i.height,A|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,A,i,n){let o=i+this.left.height;return er))return g;let l=A==oa.ByPosNoHeight?oa.ByPosNoHeight:oa.ByPos;return s?g.join(this.right.lineAt(r,l,i,a,r)):this.left.lineAt(r,l,i,n,o).join(g)}forEachLine(e,A,i,n,o,a){let r=n+this.left.height,s=o+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,A,i,r,s,a);else{let g=this.lineAt(s,oa.ByPos,i,n,o);e=e&&g.from<=A&&a(g),A>g.to&&this.right.forEachLine(g.to+1,A,i,r,s,a)}}replace(e,A,i){let n=this.left.length+this.break;if(Athis.left.length)return this.balanced(this.left,this.right.replace(e-n,A-n,i));let o=[];e>0&&this.decomposeLeft(e,o);let a=o.length;for(let r of i)o.push(r);if(e>0&&jX(o,a-1),A=i&&A.push(null)),e>i&&this.right.decomposeLeft(e-i,A)}decomposeRight(e,A){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,A);e2*A.size||A.size>2*e.size?Pg.of(this.break?[e,null,A]:[e,A]):(this.left=uD(this.left,e),this.right=uD(this.right,A),this.setHeight(e.height+A.height),this.outdated=e.outdated||A.outdated,this.size=e.size+A.size,this.length=e.length+this.break+A.length,this)}updateHeight(e,A=0,i=!1,n){let{left:o,right:a}=this,r=A+o.length+this.break,s=null;return n&&n.from<=A+o.length&&n.more?s=o=o.updateHeight(e,A,i,n):o.updateHeight(e,A,i),n&&n.from<=r+a.length&&n.more?s=a=a.updateHeight(e,r,i,n):a.updateHeight(e,r,i),s?this.balanced(o,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function jX(t,e){let A,i;t[e]==null&&(A=t[e-1])instanceof MI&&(i=t[e+1])instanceof MI&&t.splice(e-1,3,new MI(A.length+1+i.length))}var WvA=5,YN=class t{constructor(e,A){this.pos=e,this.oracle=A,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,A){if(this.lineStart>-1){let i=Math.min(A,this.lineEnd),n=this.nodes[this.nodes.length-1];n instanceof xl?n.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new xl(i-this.pos,-1,0)),this.writtenTo=i,A>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=A}point(e,A,i){if(e=WvA)&&this.addLineDeco(n,o,a)}else A>e&&this.span(e,A);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:A}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=A,this.writtenToe&&this.nodes.push(new xl(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,A){let i=new MI(A-e);return this.oracle.doc.lineAt(e).to==A&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof xl)return e;let A=new xl(0,-1,0);return this.nodes.push(A),A}addBlock(e){this.enterLine();let A=e.deco;A&&A.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,A&&A.endSide>0&&(this.covering=e)}addLineDeco(e,A,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=A,this.writtenTo=this.pos=this.pos+i}finish(e){let A=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(A instanceof xl)&&!this.isCovered?this.nodes.push(new xl(0,-1,0)):(this.writtenTol.clientHeight||l.scrollWidth>l.clientWidth)&&C.overflow!="visible"){let I=l.getBoundingClientRect();o=Math.max(o,I.left),a=Math.min(a,I.right),r=Math.max(r,I.top),s=Math.min(g==t.parentNode?n.innerHeight:s,I.bottom)}g=C.position=="absolute"||C.position=="fixed"?l.offsetParent:l.parentNode}else if(g.nodeType==11)g=g.host;else break;return{left:o-A.left,right:Math.max(o,a)-A.left,top:r-(A.top+e),bottom:Math.max(r,s)-(A.top+e)}}function $vA(t){let e=t.getBoundingClientRect(),A=t.ownerDocument.defaultView||window;return e.left0&&e.top0}function A7A(t,e){let A=t.getBoundingClientRect();return{left:0,right:A.right-A.left,top:e,bottom:A.bottom-(A.top+e)}}var Af=class{constructor(e,A,i,n){this.from=e,this.to=A,this.size=i,this.displaySize=n}static same(e,A){if(e.length!=A.length)return!1;for(let i=0;itypeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new KN(A),this.stateDeco=VX(e),this.heightMap=Pg.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle.setDoc(e.doc),[new Sc(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=yt.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:A}=this.state.selection;for(let i=0;i<=1;i++){let n=i?A.head:A.anchor;if(!e.some(({from:o,to:a})=>n>=o&&n<=a)){let{from:o,to:a}=this.lineBlockAt(n);e.push(new uQ(o,a))}}return this.viewports=e.sort((i,n)=>i.from-n.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?qX:new zN(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(P3(e,this.scaler))})}update(e,A=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=VX(this.state);let n=e.changedRanges,o=Sc.extendWithRanges(n,ZvA(i,this.stateDeco,e?e.changes:Vr.empty(this.state.doc.length))),a=this.heightMap.height,r=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);PX(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),o),(this.heightMap.height!=a||kQ)&&(e.flags|=2),r?(this.scrollAnchorPos=e.changes.mapPos(r.from,-1),this.scrollAnchorHeight=r.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=a);let s=o.length?this.mapViewport(this.viewport,e.changes):this.viewport;(A&&(A.range.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,A));let g=s.from!=this.viewport.from||s.to!=this.viewport.to;this.viewport=s,e.flags|=this.updateForViewport(),(g||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),A&&(this.scrollTarget=A),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(S$)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let A=e.contentDOM,i=window.getComputedStyle(A),n=this.heightOracle,o=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?mo.RTL:mo.LTR;let a=this.heightOracle.mustRefreshForWrapping(o)||this.mustMeasureContent,r=A.getBoundingClientRect(),s=a||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let g=0,l=0;if(r.width&&r.height){let{scaleX:M,scaleY:D}=d$(A,r);(M>.005&&Math.abs(this.scaleX-M)>.005||D>.005&&Math.abs(this.scaleY-D)>.005)&&(this.scaleX=M,this.scaleY=D,g|=16,a=s=!0)}let C=(parseInt(i.paddingTop)||0)*this.scaleY,I=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=C||this.paddingBottom!=I)&&(this.paddingTop=C,this.paddingBottom=I,g|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(n.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,g|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=E$(e.scrollDOM);let B=(this.printing?A7A:XvA)(A,this.paddingTop),E=B.top-this.pixelViewport.top,Q=B.bottom-this.pixelViewport.bottom;this.pixelViewport=B;let f=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(f!=this.inView&&(this.inView=f,f&&(s=!0)),!this.inView&&!this.scrollTarget&&!$vA(e.dom))return 0;let b=r.width;if((this.contentDOMWidth!=b||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=r.width,this.editorHeight=e.scrollDOM.clientHeight,g|=16),s){let M=e.docView.measureVisibleLineHeights(this.viewport);if(n.mustRefreshForHeights(M)&&(a=!0),a||n.lineWrapping&&Math.abs(b-this.contentDOMWidth)>n.charWidth){let{lineHeight:D,charWidth:F,textHeight:_}=e.docView.measureTextSize();a=D>0&&n.refresh(o,D,F,_,Math.max(5,b/F),M),a&&(e.docView.minWidth=0,g|=16)}E>0&&Q>0?l=Math.max(E,Q):E<0&&Q<0&&(l=Math.min(E,Q)),PX();for(let D of this.viewports){let F=D.from==this.viewport.from?M:e.docView.measureVisibleLineHeights(D);this.heightMap=(a?Pg.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle,[new Sc(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(n,0,a,new UN(D.from,F))}kQ&&(g|=2)}let S=!this.viewportIsAppropriate(this.viewport,l)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return S&&(g&2&&(g|=this.updateScaler()),this.viewport=this.getViewport(l,this.scrollTarget),g|=this.updateForViewport()),(g&2||S)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(a?[]:this.lineGaps,e)),g|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),g}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,A){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,o=this.heightOracle,{visibleTop:a,visibleBottom:r}=this,s=new uQ(n.lineAt(a-i*1e3,oa.ByHeight,o,0,0).from,n.lineAt(r+(1-i)*1e3,oa.ByHeight,o,0,0).to);if(A){let{head:g}=A.range;if(gs.to){let l=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),C=n.lineAt(g,oa.ByPos,o,0,0),I;A.y=="center"?I=(C.top+C.bottom)/2-l/2:A.y=="start"||A.y=="nearest"&&g=r+Math.max(10,Math.min(i,250)))&&n>a-2*1e3&&o>1,a=n<<1;if(this.defaultTextDirection!=mo.LTR&&!i)return[];let r=[],s=(l,C,I,d)=>{if(C-ll&&ff.from>=I.from&&f.to<=I.to&&Math.abs(f.from-l)f.fromb));if(!Q){if(CS.from<=C&&S.to>=C)){let S=A.moveToLineBoundary(de.cursor(C),!1,!0).head;S>l&&(C=S)}let f=this.gapSize(I,l,C,d),b=i||f<2e6?f:2e6;Q=new Af(l,C,f,b)}r.push(Q)},g=l=>{if(l.length2e6)for(let F of e)F.from>=l.from&&F.froml.from&&s(l.from,d,l,C),BA.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let A=this.stateDeco;this.lineGaps.length&&(A=A.concat(this.lineGapDeco));let i=[];to.spans(A,this.viewport.from,this.viewport.to,{span(o,a){i.push({from:o,to:a})},point(){}},20);let n=0;if(i.length!=this.visibleRanges.length)n=12;else for(let o=0;o=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(A=>A.from<=e&&A.to>=e)||P3(this.heightMap.lineAt(e,oa.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(A=>A.top<=e&&A.bottom>=e)||P3(this.heightMap.lineAt(this.scaler.fromDOM(e),oa.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let A=this.lineBlockAtHeight(e+8);return A.from>=this.viewport.from||this.viewportLines[0].top-e>200?A:this.viewportLines[0]}elementAtHeight(e){return P3(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},uQ=class{constructor(e,A){this.from=e,this.to=A}};function e7A(t,e,A){let i=[],n=t,o=0;return to.spans(A,t,e,{span(){},point(a,r){a>n&&(i.push({from:n,to:a}),o+=a-n),n=r}},20),n=1)return e[e.length-1].to;let i=Math.floor(t*A);for(let n=0;;n++){let{from:o,to:a}=e[n],r=a-o;if(i<=r)return o+i;i-=r}}function AD(t,e){let A=0;for(let{from:i,to:n}of t.ranges){if(e<=n){A+=e-i;break}A+=n-i}return A/t.total}function t7A(t,e){for(let A of t)if(e(A))return A}var qX={toDOM(t){return t},fromDOM(t){return t},scale:1,eq(t){return t==this}};function VX(t){let e=t.facet(kD).filter(i=>typeof i!="function"),A=t.facet(cF).filter(i=>typeof i!="function");return A.length&&e.push(to.join(A)),e}var zN=class t{constructor(e,A,i){let n=0,o=0,a=0;this.viewports=i.map(({from:r,to:s})=>{let g=A.lineAt(r,oa.ByPos,e,0,0).top,l=A.lineAt(s,oa.ByPos,e,0,0).bottom;return n+=l-g,{from:r,to:s,top:g,bottom:l,domTop:0,domBottom:0}}),this.scale=(7e6-n)/(A.height-n);for(let r of this.viewports)r.domTop=a+(r.top-o)*this.scale,a=r.domBottom=r.domTop+(r.bottom-r.top),o=r.bottom}toDOM(e){for(let A=0,i=0,n=0;;A++){let o=AA.from==e.viewports[i].from&&A.to==e.viewports[i].to):!1}};function P3(t,e){if(e.scale==1)return t;let A=e.toDOM(t.top),i=e.toDOM(t.bottom);return new Mc(t.from,t.length,A,i-A,Array.isArray(t._content)?t._content.map(n=>P3(n,e)):t._content)}var eD=We.define({combine:t=>t.join(" ")}),rN=We.define({combine:t=>t.indexOf(!0)>-1}),ON=Sl.newName(),Z$=Sl.newName(),X$=Sl.newName(),$$={"&light":"."+Z$,"&dark":"."+X$};function PN(t,e,A){return new Sl(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,n=>{if(n=="&")return t;if(!A||!A[n])throw new RangeError(`Unsupported selector: ${n}`);return A[n]}):t+" "+i}})}var i7A=PN("."+ON,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},$$),n7A={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},sN=lt.ie&<.ie_version<=11,jN=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new hN,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(A=>{for(let i of A)this.queue.push(i);(lt.ie&<.ie_version<=11||lt.ios&&e.composing)&&A.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&<.android&&e.constructor.EDIT_CONTEXT!==!1&&!(lt.chrome&<.chrome_version<126)&&(this.editContext=new qN(e),e.state.facet(JC)&&(e.contentDOM.editContext=this.editContext.editContext)),sN&&(this.onCharData=A=>{this.queue.push({target:A.target,type:"characterData",oldValue:A.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var A;((A=this.view.docView)===null||A===void 0?void 0:A.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),A.length>0&&A[A.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(A=>{A.length>0&&A[A.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((A,i)=>A!=e[i]))){this.gapIntersection.disconnect();for(let A of e)this.gapIntersection.observe(A);this.gaps=e}}onSelectionChange(e){let A=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(JC)?i.root.activeElement!=this.dom:!q3(this.dom,n))return;let o=n.anchorNode&&i.docView.tile.nearest(n.anchorNode);if(o&&o.isWidget()&&o.widget.ignoreEvent(e)){A||(this.selectionChanged=!1);return}(lt.ie&<.ie_version<=11||lt.android&<.chrome)&&!i.state.selection.main.empty&&n.focusNode&&V3(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,A=DQ(e.root);if(!A)return!1;let i=lt.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&o7A(this.view,A)||A;if(!i||this.selectionRange.eq(i))return!1;let n=q3(this.dom,i);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let o=this.delayedAndroidKey;o&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=o.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&o.force&&wQ(this.dom,o.key,o.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(n)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:A,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let A=-1,i=-1,n=!1;for(let o of e){let a=this.readMutation(o);a&&(a.typeOver&&(n=!0),A==-1?{from:A,to:i}=a:(A=Math.min(a.from,A),i=Math.max(a.to,i)))}return{from:A,to:i,typeOver:n}}readChange(){let{from:e,to:A,typeOver:i}=this.processRecords(),n=this.selectionChanged&&q3(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new FN(this.view,e,A,i);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let A=this.readChange();if(!A)return this.view.requestMeasure(),!1;let i=this.view.state,n=Y$(this.view,A);return this.view.state==i&&(A.domChanged||A.newSel&&!hD(this.view.state.selection,A.newSel.main))&&this.view.update([]),n}readMutation(e){let A=this.view.docView.tile.nearest(e.target);if(!A||A.isWidget())return null;if(A.markDirty(e.type=="attributes"),e.type=="childList"){let i=WX(A,e.previousSibling||e.target.previousSibling,-1),n=WX(A,e.nextSibling||e.target.nextSibling,1);return{from:i?A.posAfter(i):A.posAtStart,to:n?A.posBefore(n):A.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:A.posAtStart,to:A.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(JC)!=e.state.facet(JC)&&(e.view.contentDOM.editContext=e.state.facet(JC)?this.editContext.editContext:null))}destroy(){var e,A,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(A=this.gapIntersection)===null||A===void 0||A.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let n of this.scrollTargets)n.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function WX(t,e,A){for(;e;){let i=Ha.get(e);if(i&&i.parent==t)return i;let n=e.parentNode;e=n!=t.dom?n:A>0?e.nextSibling:e.previousSibling}return null}function ZX(t,e){let A=e.startContainer,i=e.startOffset,n=e.endContainer,o=e.endOffset,a=t.docView.domAtPos(t.state.selection.main.anchor,1);return V3(a.node,a.offset,n,o)&&([A,i,n,o]=[n,o,A,i]),{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}}function o7A(t,e){if(e.getComposedRanges){let n=e.getComposedRanges(t.root)[0];if(n)return ZX(t,n)}let A=null;function i(n){n.preventDefault(),n.stopImmediatePropagation(),A=n.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",i,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",i,!0),A?ZX(t,A):null}var qN=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let A=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let n=e.state.selection.main,{anchor:o,head:a}=n,r=this.toEditorPos(i.updateRangeStart),s=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:r,drifted:!1});let g=s-r>i.text.length;r==this.from&&othis.to&&(s=o);let l=T$(e.state.sliceDoc(r,s),i.text,(g?n.from:n.to)-r,g?"end":null);if(!l){let I=de.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));hD(I,n)||e.dispatch({selection:I,userEvent:"select"});return}let C={from:l.from+r,to:l.toA+r,insert:bn.of(i.text.slice(l.from,l.toB).split(` -`))};if((lt.mac||lt.android)&&C.from==a-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(C={from:r,to:s,insert:bn.of([i.text.replace("."," ")])}),this.pendingContextChange=C,!e.state.readOnly){let I=this.to-this.from+(C.to-C.from+C.insert.length);IF(e,C,de.single(this.toEditorPos(i.selectionStart,I),this.toEditorPos(i.selectionEnd,I)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),C.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(A.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(A.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let n=[],o=null;for(let a=this.toEditorPos(i.rangeStart),r=this.toEditorPos(i.rangeEnd);a{let n=[];for(let o of i.getTextFormats()){let a=o.underlineStyle,r=o.underlineThickness;if(!/none/i.test(a)&&!/none/i.test(r)){let s=this.toEditorPos(o.rangeStart),g=this.toEditorPos(o.rangeEnd);if(s{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)A.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let n=DQ(i.root);n&&n.rangeCount&&this.editContext.updateSelectionBounds(n.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let A=0,i=!1,n=this.pendingContextChange;return e.changes.iterChanges((o,a,r,s,g)=>{if(i)return;let l=g.length-(a-o);if(n&&a>=n.to)if(n.from==o&&n.to==a&&n.insert.eq(g)){n=this.pendingContextChange=null,A+=l,this.to+=l;return}else n=null,this.revertPending(e.state);if(o+=A,a+=A,a<=this.from)this.from+=l,this.to+=l;else if(othis.to||this.to-this.from+g.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(o),this.toContextPos(a),g.toString()),this.to+=l}A+=l}),n&&!i&&this.revertPending(e.state),!i}update(e){let A=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(n=>!n.isUserEvent("input.type")&&n.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||A)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:A}=e.selection.main;this.from=Math.max(0,A-1e4),this.to=Math.min(e.doc.length,A+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let A=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(A.from),this.toContextPos(A.from+A.insert.length),e.doc.sliceString(A.from,A.to))}setSelection(e){let{main:A}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,A.anchor))),n=this.toContextPos(A.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=n)&&this.editContext.updateSelection(i,n)}rangeIsValid(e){let{head:A}=e.selection.main;return!(this.from>0&&A-this.from<500||this.to1e4*3)}toEditorPos(e,A=this.to-this.from){e=Math.min(e,A);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let A=this.composing;return A&&A.drifted?A.contextBase+(e-A.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},ii=(()=>{class t{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(A={}){var i;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),A.parent&&A.parent.appendChild(this.dom);let{dispatch:n}=A;this.dispatchTransactions=A.dispatchTransactions||n&&(o=>o.forEach(a=>n(a,this)))||(o=>this.update(o)),this.dispatch=this.dispatch.bind(this),this._root=A.root||$yA(A.parent)||document,this.viewState=new mD(A.state||er.create(A)),A.scrollTo&&A.scrollTo.is(W5)&&(this.viewState.scrollTarget=A.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(hQ).map(o=>new Z3(o));for(let o of this.plugins)o.update(this);this.observer=new jN(this),this.inputState=new _N(this),this.inputState.ensureHandlers(this.plugins),this.docView=new ED(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((i=document.fonts)===null||i===void 0)&&i.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...A){let i=A.length==1&&A[0]instanceof N0?A:A.length==1&&Array.isArray(A[0])?A[0]:[this.state.update(...A)];this.dispatchTransactions(i,this)}update(A){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let i=!1,n=!1,o,a=this.state;for(let d of A){if(d.startState!=a)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");a=d.state}if(this.destroyed){this.viewState.state=a;return}let r=this.hasFocus,s=0,g=null;A.some(d=>d.annotation(q$))?(this.inputState.notifiedFocused=r,s=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,g=V$(a,r),g||(s=1));let l=this.observer.delayedAndroidKey,C=null;if(l?(this.observer.clearDelayedAndroidKey(),C=this.observer.readChange(),(C&&!this.state.doc.eq(a.doc)||!this.state.selection.eq(a.selection))&&(C=null)):this.observer.clear(),a.facet(er.phrases)!=this.state.facet(er.phrases))return this.setState(a);o=dD.create(this,a,A),o.flags|=s;let I=this.viewState.scrollTarget;try{this.updateState=2;for(let d of A){if(I&&(I=I.map(d.changes)),d.scrollIntoView){let{main:B}=d.state.selection;I=new W3(B.empty?B:de.cursor(B.head,B.head>B.anchor?-1:1))}for(let B of d.effects)B.is(W5)&&(I=B.value.clip(this.state))}this.viewState.update(o,I),this.bidiCache=pD.update(this.bidiCache,o.changes),o.empty||(this.updatePlugins(o),this.inputState.update(o)),i=this.docView.update(o),this.state.facet(z3)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(A),this.docView.updateSelection(i,A.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(o.startState.facet(eD)!=o.state.facet(eD)&&(this.viewState.mustMeasureContent=!0),(i||n||I||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!o.empty)for(let d of this.state.facet(iN))try{d(o)}catch(B){Sr(this.state,B,"update listener")}(g||C)&&Promise.resolve().then(()=>{g&&this.state==g.startState&&this.dispatch(g),C&&!Y$(this,C)&&l.force&&wQ(this.contentDOM,l.key,l.keyCode)})}setState(A){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=A;return}this.updateState=2;let i=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new mD(A),this.plugins=A.facet(hQ).map(n=>new Z3(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new ED(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}i&&this.focus(),this.requestMeasure()}updatePlugins(A){let i=A.startState.facet(hQ),n=A.state.facet(hQ);if(i!=n){let o=[];for(let a of n){let r=i.indexOf(a);if(r<0)o.push(new Z3(a));else{let s=this.plugins[r];s.mustUpdate=A,o.push(s)}}for(let a of this.plugins)a.mustUpdate!=A&&a.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let o of this.plugins)o.mustUpdate=A;for(let o=0;o-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,A&&this.observer.forceFlush();let i=null,n=this.scrollDOM,o=n.scrollTop*this.scaleY,{scrollAnchorPos:a,scrollAnchorHeight:r}=this.viewState;Math.abs(o-this.viewState.scrollTop)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let s=0;;s++){if(r<0)if(E$(n))a=-1,r=this.viewState.heightMap.height;else{let B=this.viewState.scrollAnchorAt(o);a=B.from,r=B.top}this.updateState=1;let g=this.viewState.measure(this);if(!g&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(s>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let l=[];g&4||([this.measureRequests,l]=[l,this.measureRequests]);let C=l.map(B=>{try{return B.read(this)}catch(E){return Sr(this.state,E),XX}}),I=dD.create(this,this.state,[]),d=!1;I.flags|=g,i?i.flags|=g:i=I,this.updateState=2,I.empty||(this.updatePlugins(I),this.inputState.update(I),this.updateAttrs(),d=this.docView.update(I),d&&this.docViewUpdate());for(let B=0;B1||E<-1){o=o+E,n.scrollTop=o/this.scaleY,r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(i&&!i.empty)for(let s of this.state.facet(iN))s(i)}get themeClasses(){return ON+" "+(this.state.facet(rN)?X$:Z$)+" "+this.state.facet(eD)}updateAttrs(){let A=$X(this,xX,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),i={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(JC)?"true":"false",class:"cm-content",style:`${lt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(i["aria-readonly"]="true"),$X(this,pN,i);let n=this.observer.ignore(()=>{let o=bX(this.contentDOM,this.contentAttrs,i),a=bX(this.dom,this.editorAttrs,A);return o||a});return this.editorAttrs=A,this.contentAttrs=i,n}showAnnouncements(A){let i=!0;for(let n of A)for(let o of n.effects)if(o.is(t.announce)){i&&(this.announceDOM.textContent=""),i=!1;let a=this.announceDOM.appendChild(document.createElement("div"));a.textContent=o.value}}mountStyles(){this.styleModules=this.state.facet(z3);let A=this.state.facet(t.cspNonce);Sl.mount(this.root,this.styleModules.concat(i7A).reverse(),A?{nonce:A}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(A){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),A){if(this.measureRequests.indexOf(A)>-1)return;if(A.key!=null){for(let i=0;in.plugin==A)||null),i&&i.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(A){return this.readMeasured(),this.viewState.elementAtHeight(A)}lineBlockAtHeight(A){return this.readMeasured(),this.viewState.lineBlockAtHeight(A)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(A){return this.viewState.lineBlockAt(A)}get contentHeight(){return this.viewState.contentHeight}moveByChar(A,i,n){return aN(this,A,LX(this,A,i,n))}moveByGroup(A,i){return aN(this,A,LX(this,A,i,n=>MvA(this,A.head,n)))}visualLineSide(A,i){let n=this.bidiSpans(A),o=this.textDirectionAt(A.from),a=n[i?n.length-1:0];return de.cursor(a.side(i,o)+A.from,a.forward(!i,o)?1:-1)}moveToLineBoundary(A,i,n=!0){return bvA(this,A,i,n)}moveVertically(A,i,n){return aN(this,A,kvA(this,A,i,n))}domAtPos(A,i=1){return this.docView.domAtPos(A,i)}posAtDOM(A,i=0){return this.docView.posFromDOM(A,i)}posAtCoords(A,i=!0){this.readMeasured();let n=RN(this,A,i);return n&&n.pos}posAndSideAtCoords(A,i=!0){return this.readMeasured(),RN(this,A,i)}coordsAtPos(A,i=1){this.readMeasured();let n=this.docView.coordsAt(A,i);if(!n||n.left==n.right)return n;let o=this.state.doc.lineAt(A),a=this.bidiSpans(o),r=a[kc.find(a,A-o.from,-1,i)];return ID(n,r.dir==mo.LTR==i>0)}coordsForChar(A){return this.readMeasured(),this.docView.coordsForChar(A)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(A){return!this.state.facet(SX)||Athis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(A))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(A){if(A.length>a7A)return p$(A.length);let i=this.textDirectionAt(A.from),n;for(let a of this.bidiCache)if(a.from==A.from&&a.dir==i&&(a.fresh||m$(a.isolates,n=RX(this,A))))return a.order;n||(n=RX(this,A));let o=rvA(A.text,i,n);return this.bidiCache.push(new pD(A.from,A.to,i,n,!0,o)),o}get hasFocus(){var A;return(this.dom.ownerDocument.hasFocus()||lt.safari&&((A=this.inputState)===null||A===void 0?void 0:A.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{B$(this.contentDOM),this.docView.updateSelection()})}setRoot(A){this._root!=A&&(this._root=A,this.observer.setWindow((A.nodeType==9?A:A.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let A of this.plugins)A.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(A,i={}){return W5.of(new W3(typeof A=="number"?de.cursor(A):A,i.y,i.x,i.yMargin,i.xMargin))}scrollSnapshot(){let{scrollTop:A,scrollLeft:i}=this.scrollDOM,n=this.viewState.scrollAnchorAt(A);return W5.of(new W3(de.cursor(n.from),"start","start",n.top-A,i,!0))}setTabFocusMode(A){A==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof A=="boolean"?this.inputState.tabFocusMode=A?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+A)}static domEventHandlers(A){return Go.define(()=>({}),{eventHandlers:A})}static domEventObservers(A){return Go.define(()=>({}),{eventObservers:A})}static theme(A,i){let n=Sl.newName(),o=[eD.of(n),z3.of(PN(`.${n}`,A))];return i&&i.dark&&o.push(rN.of(!0)),o}static baseTheme(A){return bc.lowest(z3.of(PN("."+ON,A,$$)))}static findFromDOM(A){var i;let n=A.querySelector(".cm-content"),o=n&&Ha.get(n)||Ha.get(A);return((i=o?.root)===null||i===void 0?void 0:i.view)||null}}return t.styleModule=z3,t.inputHandler=M$,t.clipboardInputFilter=gF,t.clipboardOutputFilter=lF,t.scrollHandler=x$,t.focusChangeEffect=k$,t.perLineTextDirection=SX,t.exceptionSink=b$,t.updateListener=iN,t.editable=JC,t.mouseSelectionStyle=v$,t.dragMovesSelection=y$,t.clickAddsSelectionRange=D$,t.decorations=kD,t.blockWrappers=N$,t.outerDecorations=cF,t.atomicRanges=gf,t.bidiIsolatedRanges=F$,t.scrollMargins=_$,t.darkTheme=rN,t.cspNonce=We.define({combine:e=>e.length?e[0]:""}),t.contentAttributes=pN,t.editorAttributes=xX,t.lineWrapping=t.contentAttributes.of({class:"cm-lineWrapping"}),t.announce=Hi.define(),t})(),a7A=4096,XX={},pD=class t{constructor(e,A,i,n,o,a){this.from=e,this.to=A,this.dir=i,this.isolates=n,this.fresh=o,this.order=a}static update(e,A){if(A.empty&&!e.some(o=>o.fresh))return e;let i=[],n=e.length?e[e.length-1].dir:mo.LTR;for(let o=Math.max(0,e.length-10);o=0;n--){let o=i[n],a=typeof o=="function"?o(t):o;a&&aF(a,A)}return A}var r7A=lt.mac?"mac":lt.windows?"win":lt.linux?"linux":"key";function s7A(t,e){let A=t.split(/-(?!$)/),i=A[A.length-1];i=="Space"&&(i=" ");let n,o,a,r;for(let s=0;si.concat(n),[]))),A}function eAA(t,e,A){return tAA(AAA(t.state),e,t,A)}var vI=null,l7A=4e3;function c7A(t,e=r7A){let A=Object.create(null),i=Object.create(null),n=(a,r)=>{let s=i[a];if(s==null)i[a]=r;else if(s!=r)throw new Error("Key binding "+a+" is used both as a regular binding and as a multi-stroke prefix")},o=(a,r,s,g,l)=>{var C,I;let d=A[a]||(A[a]=Object.create(null)),B=r.split(/ (?!$)/).map(f=>s7A(f,e));for(let f=1;f{let M=vI={view:S,prefix:b,scope:a};return setTimeout(()=>{vI==M&&(vI=null)},l7A),!0}]})}let E=B.join(" ");n(E,!1);let Q=d[E]||(d[E]={preventDefault:!1,stopPropagation:!1,run:((I=(C=d._any)===null||C===void 0?void 0:C.run)===null||I===void 0?void 0:I.slice())||[]});s&&Q.run.push(s),g&&(Q.preventDefault=!0),l&&(Q.stopPropagation=!0)};for(let a of t){let r=a.scope?a.scope.split(" "):["editor"];if(a.any)for(let g of r){let l=A[g]||(A[g]=Object.create(null));l._any||(l._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:C}=a;for(let I in l)l[I].run.push(d=>C(d,VN))}let s=a[e]||a.key;if(s)for(let g of r)o(g,s,a.run,a.preventDefault,a.stopPropagation),a.shift&&o(g,"Shift-"+s,a.shift,a.preventDefault,a.stopPropagation)}return A}var VN=null;function tAA(t,e,A,i){VN=e;let n=pX(e),o=Zr(n,0),a=Og(o)==n.length&&n!=" ",r="",s=!1,g=!1,l=!1;vI&&vI.view==A&&vI.scope==i&&(r=vI.prefix+" ",z$.indexOf(e.keyCode)<0&&(g=!0,vI=null));let C=new Set,I=Q=>{if(Q){for(let f of Q.run)if(!C.has(f)&&(C.add(f),f(A)))return Q.stopPropagation&&(l=!0),!0;Q.preventDefault&&(Q.stopPropagation&&(l=!0),g=!0)}return!1},d=t[i],B,E;return d&&(I(d[r+tD(n,e,!a)])?s=!0:a&&(e.altKey||e.metaKey||e.ctrlKey)&&!(lt.windows&&e.ctrlKey&&e.altKey)&&!(lt.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(B=UC[e.keyCode])&&B!=n?(I(d[r+tD(B,e,!0)])||e.shiftKey&&(E=QQ[e.keyCode])!=n&&E!=B&&I(d[r+tD(E,e,!1)]))&&(s=!0):a&&e.shiftKey&&I(d[r+tD(n,e,!0)])&&(s=!0),!s&&I(d._any)&&(s=!0)),g&&(s=!0),s&&l&&e.stopPropagation(),VN=null,s}var rf=class t{constructor(e,A,i,n,o){this.className=e,this.left=A,this.top=i,this.width=n,this.height=o}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,A){return A.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,A,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let o=iAA(e);return[new t(A,n.left-o.left,n.top-o.top,null,n.bottom-n.top)]}else return C7A(e,A,i)}};function iAA(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==mo.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function e$(t,e,A,i){let n=t.coordsAtPos(e,A*2);if(!n)return i;let o=t.dom.getBoundingClientRect(),a=(n.top+n.bottom)/2,r=t.posAtCoords({x:o.left+1,y:a}),s=t.posAtCoords({x:o.right-1,y:a});return r==null||s==null?i:{from:Math.max(i.from,Math.min(r,s)),to:Math.min(i.to,Math.max(r,s))}}function C7A(t,e,A){if(A.to<=t.viewport.from||A.from>=t.viewport.to)return[];let i=Math.max(A.from,t.viewport.from),n=Math.min(A.to,t.viewport.to),o=t.textDirection==mo.LTR,a=t.contentDOM,r=a.getBoundingClientRect(),s=iAA(t),g=a.querySelector(".cm-line"),l=g&&window.getComputedStyle(g),C=r.left+(l?parseInt(l.paddingLeft)+Math.min(0,parseInt(l.textIndent)):0),I=r.right-(l?parseInt(l.paddingRight):0),d=xN(t,i,1),B=xN(t,n,-1),E=d.type==Xr.Text?d:null,Q=B.type==Xr.Text?B:null;if(E&&(t.lineWrapping||d.widgetLineBreaks)&&(E=e$(t,i,1,E)),Q&&(t.lineWrapping||B.widgetLineBreaks)&&(Q=e$(t,n,-1,Q)),E&&Q&&E.from==Q.from&&E.to==Q.to)return b(S(A.from,A.to,E));{let D=E?S(A.from,null,E):M(d,!1),F=Q?S(null,A.to,Q):M(B,!0),_=[];return(E||d).to<(Q||B).from-(E&&Q?1:0)||d.widgetLineBreaks>1&&D.bottom+t.defaultLineHeight/2O&&P.from=iA)break;hA>aA&&AA(Math.max(sA,aA),D==null&&sA<=O,Math.min(hA,iA),F==null&&hA>=DA,oA.dir)}if(aA=BA.to+1,aA>=iA)break}return j.length==0&&AA(O,D==null,DA,F==null,t.textDirection),{top:U,bottom:J,horizontal:j}}function M(D,F){let _=r.top+(F?D.top:D.bottom);return{top:_,bottom:_,horizontal:[]}}}function I7A(t,e){return t.constructor==e.constructor&&t.eq(e)}var WN=class{constructor(e,A){this.view=e,this.layer=A,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),A.above&&this.dom.classList.add("cm-layer-above"),A.class&&this.dom.classList.add(A.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),A.mount&&A.mount(this.dom,e)}update(e){e.startState.facet(rD)!=e.state.facet(rD)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let A=0,i=e.facet(rD);for(;A!I7A(A,this.drawn[i]))){let A=this.dom.firstChild,i=0;for(let n of e)n.update&&A&&n.constructor&&this.drawn[i].constructor&&n.update(A,this.drawn[i])?(A=A.nextSibling,i++):this.dom.insertBefore(n.draw(),A);for(;A;){let n=A.nextSibling;A.remove(),A=n}this.drawn=e,lt.safari&<.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},rD=We.define();function nAA(t){return[Go.define(e=>new WN(e,t)),rD.of(t)]}var sf=We.define({combine(t){return kr(t,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,A)=>Math.min(e,A),drawRangeCursor:(e,A)=>e||A})}});function oAA(t={}){return[sf.of(t),d7A,B7A,E7A,S$.of(!0)]}function aAA(t){return t.startState.facet(sf)!=t.state.facet(sf)}var d7A=nAA({above:!0,markers(t){let{state:e}=t,A=e.facet(sf),i=[];for(let n of e.selection.ranges){let o=n==e.selection.main;if(n.empty||A.drawRangeCursor){let a=o?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",r=n.empty?n:de.cursor(n.head,n.head>n.anchor?-1:1);for(let s of rf.forRange(t,a,r))i.push(s)}}return i},update(t,e){t.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let A=aAA(t);return A&&t$(t.state,e),t.docChanged||t.selectionSet||A},mount(t,e){t$(e.state,t)},class:"cm-cursorLayer"});function t$(t,e){e.style.animationDuration=t.facet(sf).cursorBlinkRate+"ms"}var B7A=nAA({above:!1,markers(t){return t.state.selection.ranges.map(e=>e.empty?[]:rf.forRange(t,"cm-selectionBackground",e)).reduce((e,A)=>e.concat(A))},update(t,e){return t.docChanged||t.selectionSet||t.viewportChanged||aAA(t)},class:"cm-selectionLayer"}),E7A=bc.highest(ii.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),rAA=Hi.define({map(t,e){return t==null?null:e.mapPos(t)}}),j3=va.define({create(){return null},update(t,e){return t!=null&&(t=e.changes.mapPos(t)),e.effects.reduce((A,i)=>i.is(rAA)?i.value:A,t)}}),Q7A=Go.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let A=t.state.field(j3);A==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(j3)!=A||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(j3),A=e!=null&&t.coordsAtPos(e);if(!A)return null;let i=t.scrollDOM.getBoundingClientRect();return{left:A.left-i.left+t.scrollDOM.scrollLeft*t.scaleX,top:A.top-i.top+t.scrollDOM.scrollTop*t.scaleY,height:A.bottom-A.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:A}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/A+"px",this.cursor.style.height=t.height/A+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(j3)!=t&&this.view.dispatch({effects:rAA.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){(t.target==this.view.contentDOM||!this.view.contentDOM.contains(t.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function sAA(){return[j3,Q7A]}function i$(t,e,A,i,n){e.lastIndex=0;for(let o=t.iterRange(A,i),a=A,r;!o.next().done;a+=o.value.length)if(!o.lineBreak)for(;r=e.exec(o.value);)n(a+r.index,r)}function h7A(t,e){let A=t.visibleRanges;if(A.length==1&&A[0].from==t.viewport.from&&A[0].to==t.viewport.to)return A;let i=[];for(let{from:n,to:o}of A)n=Math.max(t.state.doc.lineAt(n).from,n-e),o=Math.min(t.state.doc.lineAt(o).to,o+e),i.length&&i[i.length-1].to>=n?i[i.length-1].to=o:i.push({from:n,to:o});return i}var ZN=class{constructor(e){let{regexp:A,decoration:i,decorate:n,boundary:o,maxLength:a=1e3}=e;if(!A.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=A,n)this.addMatch=(r,s,g,l)=>n(l,g,g+r[0].length,r,s);else if(typeof i=="function")this.addMatch=(r,s,g,l)=>{let C=i(r,s,g);C&&l(g,g+r[0].length,C)};else if(i)this.addMatch=(r,s,g,l)=>l(g,g+r[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=o,this.maxLength=a}createDeco(e){let A=new Wr,i=A.add.bind(A);for(let{from:n,to:o}of h7A(e,this.maxLength))i$(e.state.doc,this.regexp,n,o,(a,r)=>this.addMatch(r,e,a,i));return A.finish()}updateDeco(e,A){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges((o,a,r,s)=>{s>=e.view.viewport.from&&r<=e.view.viewport.to&&(i=Math.min(r,i),n=Math.max(s,n))}),e.viewportMoved||n-i>1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,A.map(e.changes),i,n):A}updateRange(e,A,i,n){for(let o of e.visibleRanges){let a=Math.max(o.from,i),r=Math.min(o.to,n);if(r>=a){let s=e.state.doc.lineAt(a),g=s.tos.from;a--)if(this.boundary.test(s.text[a-1-s.from])){l=a;break}for(;rI.push(f.range(E,Q));if(s==g)for(this.regexp.lastIndex=l-s.from;(d=this.regexp.exec(s.text))&&d.indexthis.addMatch(Q,e,E,B));A=A.update({filterFrom:l,filterTo:C,filter:(E,Q)=>EC,add:I})}}return A}},XN=/x/.unicode!=null?"gu":"g",u7A=new RegExp(`[\0-\b --\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,XN),f7A={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},gN=null;function m7A(){var t;if(gN==null&&typeof document<"u"&&document.body){let e=document.body.style;gN=((t=e.tabSize)!==null&&t!==void 0?t:e.MozTabSize)!=null}return gN||!1}var sD=We.define({combine(t){let e=kr(t,{render:null,specialChars:u7A,addSpecialChars:null});return(e.replaceTabs=!m7A())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,XN)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,XN)),e}});function gAA(t={}){return[sD.of(t),p7A()]}var n$=null;function p7A(){return n$||(n$=Go.fromClass(class{constructor(t){this.view=t,this.decorations=yt.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(sD)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new ZN({regexp:t.specialChars,decoration:(e,A,i)=>{let{doc:n}=A.state,o=Zr(e[0],0);if(o==9){let a=n.lineAt(i),r=A.state.tabSize,s=KC(a.text,r,i-a.from);return yt.replace({widget:new AF((r-s%r)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[o]||(this.decorationCache[o]=yt.replace({widget:new $N(t,o)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(sD);t.startState.facet(sD)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))}var w7A="\u2022";function D7A(t){return t>=32?w7A:t==10?"\u2424":String.fromCharCode(9216+t)}var $N=class extends fg{constructor(e,A){super(),this.options=e,this.code=A}eq(e){return e.code==this.code}toDOM(e){let A=D7A(this.code),i=e.state.phrase("Control character")+" "+(f7A[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,A);if(n)return n;let o=document.createElement("span");return o.textContent=A,o.title=i,o.setAttribute("aria-label",i),o.className="cm-specialChar",o}ignoreEvent(){return!1}},AF=class extends fg{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function lAA(){return v7A}var y7A=yt.line({class:"cm-activeLine"}),v7A=Go.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,A=[];for(let i of t.state.selection.ranges){let n=t.lineBlockAt(i.head);n.from>e&&(A.push(y7A.range(n.from)),e=n.from)}return yt.set(A)}},{decorations:t=>t.decorations});var eF=2e3;function b7A(t,e,A){let i=Math.min(e.line,A.line),n=Math.max(e.line,A.line),o=[];if(e.off>eF||A.off>eF||e.col<0||A.col<0){let a=Math.min(e.off,A.off),r=Math.max(e.off,A.off);for(let s=i;s<=n;s++){let g=t.doc.line(s);g.length<=r&&o.push(de.range(g.from+a,g.to+r))}}else{let a=Math.min(e.col,A.col),r=Math.max(e.col,A.col);for(let s=i;s<=n;s++){let g=t.doc.line(s),l=q5(g.text,a,t.tabSize,!0);if(l<0)o.push(de.cursor(g.to));else{let C=q5(g.text,r,t.tabSize);o.push(de.range(g.from+l,g.from+C))}}}return o}function M7A(t,e){let A=t.coordsAtPos(t.viewport.from);return A?Math.round(Math.abs((A.left-e)/t.defaultCharacterWidth)):-1}function o$(t,e){let A=t.posAtCoords({x:e.clientX,y:e.clientY},!1),i=t.state.doc.lineAt(A),n=A-i.from,o=n>eF?-1:n==i.length?M7A(t,e.clientX):KC(i.text,t.state.tabSize,A-i.from);return{line:i.number,col:o,off:n}}function k7A(t,e){let A=o$(t,e),i=t.state.selection;return A?{update(n){if(n.docChanged){let o=n.changes.mapPos(n.startState.doc.line(A.line).from),a=n.state.doc.lineAt(o);A={line:a.number,col:A.col,off:Math.min(A.off,a.length)},i=i.map(n.changes)}},get(n,o,a){let r=o$(t,n);if(!r)return i;let s=b7A(t.state,A,r);return s.length?a?de.create(s.concat(i.ranges)):de.create(s):i}}:null}function cAA(t){let e=t?.eventFilter||(A=>A.altKey&&A.button==0);return ii.mouseSelectionStyle.of((A,i)=>e(i)?k7A(A,i):null)}var S7A={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},x7A={style:"cursor: crosshair"};function CAA(t={}){let[e,A]=S7A[t.key||"Alt"],i=Go.fromClass(class{constructor(n){this.view=n,this.isDown=!1}set(n){this.isDown!=n&&(this.isDown=n,this.view.update([]))}},{eventObservers:{keydown(n){this.set(n.keyCode==e||A(n))},keyup(n){(n.keyCode==e||!A(n))&&this.set(!1)},mousemove(n){this.set(A(n))}}});return[i,ii.contentAttributes.of(n=>{var o;return!((o=n.plugin(i))===null||o===void 0)&&o.isDown?x7A:null})]}var iD="-10000px",wD=class{constructor(e,A,i,n){this.facet=A,this.createTooltipView=i,this.removeTooltipView=n,this.input=e.state.facet(A),this.tooltips=this.input.filter(a=>a);let o=null;this.tooltipViews=this.tooltips.map(a=>o=i(a,o))}update(e,A){var i;let n=e.state.facet(this.facet),o=n.filter(s=>s);if(n===this.input){for(let s of this.tooltipViews)s.update&&s.update(e);return!1}let a=[],r=A?[]:null;for(let s=0;sA[g]=s),A.length=r.length),this.input=n,this.tooltips=o,this.tooltipViews=a,!0}};function R7A(t){let e=t.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var lN=We.define({combine:t=>{var e,A,i;return{position:lt.ios?"absolute":((e=t.find(n=>n.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((A=t.find(n=>n.parent))===null||A===void 0?void 0:A.parent)||null,tooltipSpace:((i=t.find(n=>n.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||R7A}}}),a$=new WeakMap,dF=Go.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(lN);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new wD(t,xQ,(A,i)=>this.createTooltip(A,i),A=>{this.resizeObserver&&this.resizeObserver.unobserve(A.dom),A.dom.remove()}),this.above=this.manager.tooltips.map(A=>!!A.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(A=>{Date.now()>this.lastTransaction-50&&A.length>0&&A[A.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let A=e||t.geometryChanged,i=t.state.facet(lN);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let n of this.manager.tooltipViews)n.dom.style.position=this.position;A=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let n of this.manager.tooltipViews)this.container.appendChild(n.dom);A=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);A&&this.maybeMeasure()}createTooltip(t,e){let A=t.create(this.view),i=e?e.dom:null;if(A.dom.classList.add("cm-tooltip"),t.arrow&&!A.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let n=document.createElement("div");n.className="cm-tooltip-arrow",A.dom.appendChild(n)}return A.dom.style.position=this.position,A.dom.style.top=iD,A.dom.style.left="0px",this.container.insertBefore(A.dom,i),A.mount&&A.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(A.dom),A}destroy(){var t,e,A;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(t=i.destroy)===null||t===void 0||t.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(A=this.intersectionObserver)===null||A===void 0||A.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=1,e=1,A=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:o}=this.manager.tooltipViews[0];if(lt.safari){let a=o.getBoundingClientRect();A=Math.abs(a.top+1e4)>1||Math.abs(a.left)>1}else A=!!o.offsetParent&&o.offsetParent!=this.container.ownerDocument.body}if(A||this.position=="absolute")if(this.parent){let o=this.parent.getBoundingClientRect();o.width&&o.height&&(t=o.width/this.parent.offsetWidth,e=o.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),n=CF(this.view);return{visible:{left:i.left+n.left,top:i.top+n.top,right:i.right-n.right,bottom:i.bottom-n.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((o,a)=>{let r=this.manager.tooltipViews[a];return r.getCoords?r.getCoords(o.pos):this.view.coordsAtPos(o.pos)}),size:this.manager.tooltipViews.map(({dom:o})=>o.getBoundingClientRect()),space:this.view.state.facet(lN).tooltipSpace(this.view),scaleX:t,scaleY:e,makeAbsolute:A}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let r of this.manager.tooltipViews)r.dom.style.position="absolute"}let{visible:A,space:i,scaleX:n,scaleY:o}=t,a=[];for(let r=0;r=Math.min(A.bottom,i.bottom)||C.rightMath.min(A.right,i.right)+.1)){l.style.top=iD;continue}let d=s.arrow?g.dom.querySelector(".cm-tooltip-arrow"):null,B=d?7:0,E=I.right-I.left,Q=(e=a$.get(g))!==null&&e!==void 0?e:I.bottom-I.top,f=g.offset||F7A,b=this.view.textDirection==mo.LTR,S=I.width>i.right-i.left?b?i.left:i.right-I.width:b?Math.max(i.left,Math.min(C.left-(d?14:0)+f.x,i.right-E)):Math.min(Math.max(i.left,C.left-E+(d?14:0)-f.x),i.right-E),M=this.above[r];!s.strictSide&&(M?C.top-Q-B-f.yi.bottom)&&M==i.bottom-C.bottom>C.top-i.top&&(M=this.above[r]=!M);let D=(M?C.top-i.top:i.bottom-C.bottom)-B;if(DS&&U.topF&&(F=M?U.top-Q-2-B:U.bottom+B+2);if(this.position=="absolute"?(l.style.top=(F-t.parent.top)/o+"px",r$(l,(S-t.parent.left)/n)):(l.style.top=F/o+"px",r$(l,S/n)),d){let U=C.left+(b?f.x:-f.x)-(S+14-7);d.style.left=U/n+"px"}g.overlap!==!0&&a.push({left:S,top:F,right:_,bottom:F+Q}),l.classList.toggle("cm-tooltip-above",M),l.classList.toggle("cm-tooltip-below",!M),g.positioned&&g.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=iD}},{eventObservers:{scroll(){this.maybeMeasure()}}});function r$(t,e){let A=parseInt(t.style.left,10);(isNaN(A)||Math.abs(e-A)>1)&&(t.style.left=e+"px")}var N7A=ii.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),F7A={x:0,y:0},xQ=We.define({enables:[dF,N7A]}),DD=We.define({combine:t=>t.reduce((e,A)=>e.concat(A),[])}),yD=class t{static create(e){return new t(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new wD(e,DD,(A,i)=>this.createHostedView(A,i),A=>A.dom.remove())}createHostedView(e,A){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,A?A.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let A of this.manager.tooltipViews)A.mount&&A.mount(e);this.mounted=!0}positioned(e){for(let A of this.manager.tooltipViews)A.positioned&&A.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let A of this.manager.tooltipViews)(e=A.destroy)===null||e===void 0||e.call(A)}passProp(e){let A;for(let i of this.manager.tooltipViews){let n=i[e];if(n!==void 0){if(A===void 0)A=n;else if(A!==n)return}}return A}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},_7A=xQ.compute([DD],t=>{let e=t.facet(DD);return e.length===0?null:{pos:Math.min(...e.map(A=>A.pos)),end:Math.max(...e.map(A=>{var i;return(i=A.end)!==null&&i!==void 0?i:A.pos})),create:yD.create,above:e[0].above,arrow:e.some(A=>A.arrow)}}),tF=class{constructor(e,A,i,n,o){this.view=e,this.source=A,this.field=i,this.setHover=n,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;er.bottom||A.xr.right+e.defaultCharacterWidth)return;let s=e.bidiSpans(e.state.doc.lineAt(n)).find(l=>l.from<=n&&l.to>=n),g=s&&s.dir==mo.RTL?-1:1;o=A.x{this.pending==r&&(this.pending=null,s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])}))},s=>Sr(e.state,s,"hover tooltip"))}else a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])})}get tooltip(){let e=this.view.plugin(dF),A=e?e.manager.tooltips.findIndex(i=>i.create==yD.create):-1;return A>-1?e.manager.tooltipViews[A]:null}mousemove(e){var A,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:n,tooltip:o}=this;if(n.length&&o&&!L7A(o.dom,e)||this.pending){let{pos:a}=n[0]||this.pending,r=(i=(A=n[0])===null||A===void 0?void 0:A.end)!==null&&i!==void 0?i:a;(a==r?this.view.posAtCoords(this.lastMove)!=a:!G7A(this.view,a,r,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:A}=this;if(A.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let A=i=>{e.removeEventListener("mouseleave",A),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",A)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},nD=4;function L7A(t,e){let{left:A,right:i,top:n,bottom:o}=t.getBoundingClientRect(),a;if(a=t.querySelector(".cm-tooltip-arrow")){let r=a.getBoundingClientRect();n=Math.min(r.top,n),o=Math.max(r.bottom,o)}return e.clientX>=A-nD&&e.clientX<=i+nD&&e.clientY>=n-nD&&e.clientY<=o+nD}function G7A(t,e,A,i,n,o){let a=t.scrollDOM.getBoundingClientRect(),r=t.documentTop+t.documentPadding.top+t.contentHeight;if(a.left>i||a.rightn||Math.min(a.bottom,r)=e&&s<=A}function IAA(t,e={}){let A=Hi.define(),i=va.define({create(){return[]},update(n,o){if(n.length&&(e.hideOnChange&&(o.docChanged||o.selection)?n=[]:e.hideOn&&(n=n.filter(a=>!e.hideOn(o,a))),o.docChanged)){let a=[];for(let r of n){let s=o.changes.mapPos(r.pos,-1,qr.TrackDel);if(s!=null){let g=Object.assign(Object.create(null),r);g.pos=s,g.end!=null&&(g.end=o.changes.mapPos(g.end)),a.push(g)}}n=a}for(let a of o.effects)a.is(A)&&(n=a.value),a.is(K7A)&&(n=[]);return n},provide:n=>DD.from(n)});return{active:i,extension:[i,Go.define(n=>new tF(n,t,i,A,e.hoverTime||300)),_7A]}}function BF(t,e){let A=t.plugin(dF);if(!A)return null;let i=A.manager.tooltips.indexOf(e);return i<0?null:A.manager.tooltipViews[i]}var K7A=Hi.define();var s$=We.define({combine(t){let e,A;for(let i of t)e=e||i.topContainer,A=A||i.bottomContainer;return{topContainer:e,bottomContainer:A}}});function lf(t,e){let A=t.plugin(dAA),i=A?A.specs.indexOf(e):-1;return i>-1?A.panels[i]:null}var dAA=Go.fromClass(class{constructor(t){this.input=t.state.facet(Dd),this.specs=this.input.filter(A=>A),this.panels=this.specs.map(A=>A(t));let e=t.state.facet(s$);this.top=new fQ(t,!0,e.topContainer),this.bottom=new fQ(t,!1,e.bottomContainer),this.top.sync(this.panels.filter(A=>A.top)),this.bottom.sync(this.panels.filter(A=>!A.top));for(let A of this.panels)A.dom.classList.add("cm-panel"),A.mount&&A.mount()}update(t){let e=t.state.facet(s$);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new fQ(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new fQ(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let A=t.state.facet(Dd);if(A!=this.input){let i=A.filter(s=>s),n=[],o=[],a=[],r=[];for(let s of i){let g=this.specs.indexOf(s),l;g<0?(l=s(t.view),r.push(l)):(l=this.panels[g],l.update&&l.update(t)),n.push(l),(l.top?o:a).push(l)}this.specs=i,this.panels=n,this.top.sync(o),this.bottom.sync(a);for(let s of r)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}else for(let i of this.panels)i.update&&i.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);return A&&{top:A.top.scrollMargin(),bottom:A.bottom.scrollMargin()}})}),fQ=class{constructor(e,A,i){this.view=e,this.top=A,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let A of this.panels)A.destroy&&e.indexOf(A)<0&&A.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let A=this.container||this.view.dom;A.insertBefore(this.dom,this.top?A.firstChild:null)}let e=this.dom.firstChild;for(let A of this.panels)if(A.dom.parentNode==this.dom){for(;e!=A.dom;)e=g$(e);e=e.nextSibling}else this.dom.insertBefore(A.dom,e);for(;e;)e=g$(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function g$(t){let e=t.nextSibling;return t.remove(),e}var Dd=We.define({enables:dAA});function BAA(t,e){let A,i=new Promise(a=>A=a),n=a=>U7A(a,e,A);t.state.field(cN,!1)?t.dispatch({effects:EAA.of(n)}):t.dispatch({effects:Hi.appendConfig.of(cN.init(()=>[n]))});let o=QAA.of(n);return{close:o,result:i.then(a=>((t.win.queueMicrotask||(s=>t.win.setTimeout(s,10)))(()=>{t.state.field(cN).indexOf(n)>-1&&t.dispatch({effects:o})}),a))}}var cN=va.define({create(){return[]},update(t,e){for(let A of e.effects)A.is(EAA)?t=[A.value].concat(t):A.is(QAA)&&(t=t.filter(i=>i!=A.value));return t},provide:t=>Dd.computeN([t],e=>e.field(t))}),EAA=Hi.define(),QAA=Hi.define();function U7A(t,e,A){let i=e.content?e.content(t,()=>a(null)):null;if(!i){if(i=io("form"),e.input){let r=io("input",e.input);/^(text|password|number|email|tel|url)$/.test(r.type)&&r.classList.add("cm-textfield"),r.name||(r.name="input"),i.appendChild(io("label",(e.label||"")+": ",r))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(io("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let n=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let r=0;r{g.keyCode==27?(g.preventDefault(),a(null)):g.keyCode==13&&(g.preventDefault(),a(s))}),s.addEventListener("submit",g=>{g.preventDefault(),a(s)})}let o=io("div",i,io("button",{onclick:()=>a(null),"aria-label":t.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(o.className=e.class),o.classList.add("cm-dialog");function a(r){o.contains(o.ownerDocument.activeElement)&&t.focus(),A(r)}return{dom:o,top:e.top,mount:()=>{if(e.focus){let r;typeof e.focus=="string"?r=i.querySelector(e.focus):r=i.querySelector("input")||i.querySelector("button"),r&&"select"in r?r.select():r&&"focus"in r&&r.focus()}}}}var mg=class extends kl{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};mg.prototype.elementClass="";mg.prototype.toDOM=void 0;mg.prototype.mapMode=qr.TrackBefore;mg.prototype.startSide=mg.prototype.endSide=-1;mg.prototype.point=!0;var gD=We.define(),J7A=We.define(),Y7A={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>to.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},ef=We.define();function xD(t){return[hAA(),ef.of(cA(cA({},Y7A),t))]}var iF=We.define({combine:t=>t.some(e=>e)});function hAA(t){let e=[T7A];return t&&t.fixed===!1&&e.push(iF.of(!0)),e}var T7A=Go.fromClass(class{constructor(t){this.view=t,this.domAfter=null,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet(ef).map(e=>new vD(t,e)),this.fixed=!t.state.facet(iF);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(t){if(this.updateGutters(t)){let e=this.prevViewport,A=t.view.viewport,i=Math.min(e.to,A.to)-Math.max(e.from,A.from);this.syncGutters(i<(A.to-A.from)*.8)}if(t.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(iF)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let A=to.iter(this.view.state.facet(gD),this.view.viewport.from),i=[],n=this.gutters.map(o=>new oF(o,this.view.viewport,-this.view.documentPadding.top));for(let o of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(o.type)){let a=!0;for(let r of o.type)if(r.type==Xr.Text&&a){nF(A,i,r.from);for(let s of n)s.line(this.view,r,i);a=!1}else if(r.widget)for(let s of n)s.widget(this.view,r)}else if(o.type==Xr.Text){nF(A,i,o.from);for(let a of n)a.line(this.view,o,i)}else if(o.widget)for(let a of n)a.widget(this.view,o);for(let o of n)o.finish();t&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(t){let e=t.startState.facet(ef),A=t.state.facet(ef),i=t.docChanged||t.heightChanged||t.viewportChanged||!to.eq(t.startState.facet(gD),t.state.facet(gD),t.view.viewport.from,t.view.viewport.to);if(e==A)for(let n of this.gutters)n.update(t)&&(i=!0);else{i=!0;let n=[];for(let o of A){let a=e.indexOf(o);a<0?n.push(new vD(this.view,o)):(this.gutters[a].update(t),n.push(this.gutters[a]))}for(let o of this.gutters)o.dom.remove(),n.indexOf(o)<0&&o.destroy();for(let o of n)o.config.side=="after"?this.getDOMAfter().appendChild(o.dom):this.dom.appendChild(o.dom);this.gutters=n}return i}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);if(!A||A.gutters.length==0||!A.fixed)return null;let i=A.dom.offsetWidth*e.scaleX,n=A.domAfter?A.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==mo.LTR?{left:i,right:n}:{right:i,left:n}})});function l$(t){return Array.isArray(t)?t:[t]}function nF(t,e,A){for(;t.value&&t.from<=A;)t.from==A&&e.push(t.value),t.next()}var oF=class{constructor(e,A,i){this.gutter=e,this.height=i,this.i=0,this.cursor=to.iter(e.markers,A.from)}addElement(e,A,i){let{gutter:n}=this,o=(A.top-this.height)/e.scaleY,a=A.height/e.scaleY;if(this.i==n.elements.length){let r=new bD(e,a,o,i);n.elements.push(r),n.dom.appendChild(r.dom)}else n.elements[this.i].update(e,a,o,i);this.height=A.bottom,this.i++}line(e,A,i){let n=[];nF(this.cursor,n,A.from),i.length&&(n=n.concat(i));let o=this.gutter.config.lineMarker(e,A,n);o&&n.unshift(o);let a=this.gutter;n.length==0&&!a.config.renderEmptyElements||this.addElement(e,A,n)}widget(e,A){let i=this.gutter.config.widgetMarker(e,A.widget,A),n=i?[i]:null;for(let o of e.state.facet(J7A)){let a=o(e,A.widget,A);a&&(n||(n=[])).push(a)}n&&this.addElement(e,A,n)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let A=e.elements.pop();e.dom.removeChild(A.dom),A.destroy()}}},vD=class{constructor(e,A){this.view=e,this.config=A,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in A.domEventHandlers)this.dom.addEventListener(i,n=>{let o=n.target,a;if(o!=this.dom&&this.dom.contains(o)){for(;o.parentNode!=this.dom;)o=o.parentNode;let s=o.getBoundingClientRect();a=(s.top+s.bottom)/2}else a=n.clientY;let r=e.lineBlockAtHeight(a-e.documentTop);A.domEventHandlers[i](e,r,n)&&n.preventDefault()});this.markers=l$(A.markers(e)),A.initialSpacer&&(this.spacer=new bD(e,0,0,[A.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let A=this.markers;if(this.markers=l$(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}let i=e.view.viewport;return!to.eq(this.markers,A,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},bD=class{constructor(e,A,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,A,i,n)}update(e,A,i,n){this.height!=A&&(this.height=A,this.dom.style.height=A+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),H7A(this.markers,n)||this.setMarkers(e,n)}setMarkers(e,A){let i="cm-gutterElement",n=this.dom.firstChild;for(let o=0,a=0;;){let r=a,s=oo(r,s,g)||a(r,s,g):a}return i}})}}),tf=class extends mg{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function CN(t,e){return t.state.facet(mQ).formatNumber(e,t.state)}var P7A=ef.compute([mQ],t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(z7A)},lineMarker(e,A,i){return i.some(n=>n.toDOM)?null:new tf(CN(e,e.state.doc.lineAt(A.from).number))},widgetMarker:(e,A,i)=>{for(let n of e.state.facet(O7A)){let o=n(e,A,i);if(o)return o}return null},lineMarkerChange:e=>e.startState.facet(mQ)!=e.state.facet(mQ),initialSpacer(e){return new tf(CN(e,c$(e.state.doc.lines)))},updateSpacer(e,A){let i=CN(A.view,c$(A.view.state.doc.lines));return i==e.number?e:new tf(i)},domEventHandlers:t.facet(mQ).domEventHandlers,side:"before"}));function uAA(t={}){return[mQ.of(t),hAA(),P7A]}function c$(t){let e=9;for(;e{let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.head).from;n>A&&(A=n,e.push(j7A.range(n)))}return to.of(e)});function fAA(){return q7A}var V7A=0,cf=class{constructor(e,A){this.from=e,this.to=A}},vi=class{constructor(e={}){this.id=V7A++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ps.match(e)),A=>{let i=e(A);return i===void 0?null:[this,i]}}};vi.closedBy=new vi({deserialize:t=>t.split(" ")});vi.openedBy=new vi({deserialize:t=>t.split(" ")});vi.group=new vi({deserialize:t=>t.split(" ")});vi.isolate=new vi({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}});vi.contextHash=new vi({perNode:!0});vi.lookAhead=new vi({perNode:!0});vi.mounted=new vi({perNode:!0});var yd=class{constructor(e,A,i,n=!1){this.tree=e,this.overlay=A,this.parser=i,this.bracketed=n}static get(e){return e&&e.props&&e.props[vi.mounted.id]}},W7A=Object.create(null),ps=class t{constructor(e,A,i,n=0){this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){let A=e.props&&e.props.length?Object.create(null):W7A,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let A=this.prop(vi.group);return A?A.indexOf(e)>-1:!1}return this.id==e}static match(e){let A=Object.create(null);for(let i in e)for(let n of i.split(" "))A[n]=e[i];return i=>{for(let n=i.prop(vi.group),o=-1;o<(n?n.length:0);o++){let a=A[o<0?i.name:n[o]];if(a)return a}}}};ps.none=new ps("",Object.create(null),0,8);var Cf=class t{constructor(e){this.types=e;for(let A=0;A0;for(let s=this.cursor(a|Ra.IncludeAnonymous);;){let g=!1;if(s.from<=o&&s.to>=n&&(!r&&s.type.isAnonymous||A(s)!==!1)){if(s.firstChild())continue;g=!0}for(;g&&i&&(r||!s.type.isAnonymous)&&i(s),!s.nextSibling();){if(!s.parent())return;g=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let A in this.props)e.push([+A,this.props[A]]);return e}balance(e={}){return this.children.length<=8?this:pF(ps.none,this.children,this.positions,0,this.children.length,0,this.length,(A,i,n)=>new t(this.type,A,i,n,this.propValues),e.makeTree||((A,i,n)=>new t(ps.none,A,i,n)))}static build(e){return X7A(e)}};za.empty=new za(ps.none,[],[],0);var EF=class t{constructor(e,A){this.buffer=e,this.index=A}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new t(this.buffer,this.index)}},SI=class t{constructor(e,A,i){this.buffer=e,this.length=A,this.set=i}get type(){return ps.none}toString(){let e=[];for(let A=0;A0));s=a[s+3]);return r}slice(e,A,i){let n=this.buffer,o=new Uint16Array(A-e),a=0;for(let r=e,s=0;r=e&&Ae;case 1:return A<=e&&i>e;case 2:return i>e;case 4:return!0}}function If(t,e,A,i){for(var n;t.from==t.to||(A<1?t.from>=e:t.from>e)||(A>-1?t.to<=e:t.to0?s.length:-1;e!=l;e+=A){let C=s[e],I=g[e]+r.from;if(!(!(o&Ra.EnterBracketed&&C instanceof za&&((a=yd.get(C))===null||a===void 0?void 0:a.overlay)===null&&(I>=i||I+C.length<=i))&&!DAA(n,i,I,I+C.length))){if(C instanceof SI){if(o&Ra.ExcludeBuffers)continue;let d=C.findChild(0,C.buffer.length,A,i-I,n);if(d>-1)return new df(new hF(r,C,e,I),null,d)}else if(o&Ra.IncludeAnonymous||!C.type.isAnonymous||mF(C)){let d;if(!(o&Ra.IgnoreMounts)&&(d=yd.get(C))&&!d.overlay)return new t(d.tree,I,e,r);let B=new t(C,I,e,r);return o&Ra.IncludeAnonymous||!B.type.isAnonymous?B:B.nextChild(A<0?C.children.length-1:0,A,i,n,o)}}}if(o&Ra.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+A:e=A<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,A,i=0){let n;if(!(i&Ra.IgnoreOverlays)&&(n=yd.get(this._tree))&&n.overlay){let o=e-this.from,a=i&Ra.EnterBracketed&&n.bracketed;for(let{from:r,to:s}of n.overlay)if((A>0||a?r<=o:r=o:s>o))return new t(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,A,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function pAA(t,e,A,i){let n=t.cursor(),o=[];if(!n.firstChild())return o;if(A!=null){for(let a=!1;!a;)if(a=n.type.is(A),!n.nextSibling())return o}for(;;){if(i!=null&&n.type.is(i))return o;if(n.type.is(e)&&o.push(n.node),!n.nextSibling())return i==null?o:[]}}function QF(t,e,A=e.length-1){for(let i=t;A>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[A]&&e[A]!=i.name)return!1;A--}}return!0}var hF=class{constructor(e,A,i,n){this.parent=e,this.buffer=A,this.index=i,this.start=n}},df=class t extends FD{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,A,i){super(),this.context=e,this._parent=A,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,A,i){let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.context.start,i);return o<0?null:new t(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,A,i=0){if(i&Ra.ExcludeBuffers)return null;let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],A>0?1:-1,e-this.context.start,A);return o<0?null:new t(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,A=e.buffer[this.index+3];return A<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new t(this.context,this._parent,A):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,A=this._parent?this._parent.index+4:0;return this.index==A?this.externalSibling(-1):new t(this.context,this._parent,e.findChild(A,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],A=[],{buffer:i}=this.context,n=this.index+4,o=i.buffer[this.index+3];if(o>n){let a=i.buffer[this.index+1];e.push(i.slice(n,o,a)),A.push(0)}return new za(this.type,e,A,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function yAA(t){if(!t.length)return null;let e=0,A=t[0];for(let o=1;oA.from||a.to=e){let r=new G0(a.tree,a.overlay[0].from+o.from,-1,o);(n||(n=[i])).push(If(r,e,A,!1))}}return n?yAA(n):i}var Bf=class{get name(){return this.type.name}constructor(e,A=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=A&~Ra.EnterBracketed,e instanceof G0)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,A){this.index=e;let{start:i,buffer:n}=this.buffer;return this.type=A||n.set.types[n.buffer[e]],this.from=i+n.buffer[e+1],this.to=i+n.buffer[e+2],!0}yield(e){return e?e instanceof G0?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,A,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,A,i,this.mode));let{buffer:n}=this.buffer,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.buffer.start,i);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,A,i=this.mode){return this.buffer?i&Ra.ExcludeBuffers?!1:this.enterChild(1,e,A):this.yield(this._tree.enter(e,A,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ra.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ra.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:A}=this.buffer,i=this.stack.length-1;if(e<0){let n=i<0?0:this.stack[i]+4;if(this.index!=n)return this.yieldBuf(A.findChild(n,this.index,-1,0,4))}else{let n=A.buffer[this.index+3];if(n<(i<0?A.buffer.length:A.buffer[this.stack[i]+3]))return this.yieldBuf(n)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let A,i,{buffer:n}=this;if(n){if(e>0){if(this.index-1)for(let o=A+e,a=e<0?-1:i._tree.children.length;o!=a;o+=e){let r=i._tree.children[o];if(this.mode&Ra.IncludeAnonymous||r instanceof SI||!r.type.isAnonymous||mF(r))return!1}return!0}move(e,A){if(A&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,A=0){for(;(this.from==this.to||(A<1?this.from>=e:this.from>e)||(A>-1?this.to<=e:this.to=0;){for(let a=e;a;a=a._parent)if(a.index==n){if(n==this.index)return a;A=a,i=o+1;break A}n=this.stack[--o]}for(let n=i;n=0;o--){if(o<0)return QF(this._tree,e,n);let a=i[A.buffer[this.stack[o]]];if(!a.isAnonymous){if(e[n]&&e[n]!=a.name)return!1;n--}}return!0}};function mF(t){return t.children.some(e=>e instanceof SI||!e.type.isAnonymous||mF(e))}function X7A(t){var e;let{buffer:A,nodeSet:i,maxBufferLength:n=1024,reused:o=[],minRepeatType:a=i.types.length}=t,r=Array.isArray(A)?new EF(A,A.length):A,s=i.types,g=0,l=0;function C(D,F,_,U,J,j){let{id:AA,start:O,end:DA,size:P}=r,aA=l,iA=g;if(P<0)if(r.next(),P==-1){let YA=o[AA];_.push(YA),U.push(O-D);return}else if(P==-3){g=AA;return}else if(P==-4){l=AA;return}else throw new RangeError(`Unrecognized record size: ${P}`);let BA=s[AA],oA,sA,hA=O-D;if(DA-O<=n&&(sA=Q(r.pos-F,J))){let YA=new Uint16Array(sA.size-sA.skip),ee=r.pos-sA.size,UA=YA.length;for(;r.pos>ee;)UA=f(sA.start,YA,UA);oA=new SI(YA,DA-sA.start,i),hA=sA.start-D}else{let YA=r.pos-P;r.next();let ee=[],UA=[],mA=AA>=a?AA:-1,KA=0,Pe=DA;for(;r.pos>YA;)mA>=0&&r.id==mA&&r.size>=0?(r.end<=Pe-n&&(B(ee,UA,O,KA,r.end,Pe,mA,aA,iA),KA=ee.length,Pe=r.end),r.next()):j>2500?I(O,YA,ee,UA):C(O,YA,ee,UA,mA,j+1);if(mA>=0&&KA>0&&KA-1&&KA>0){let Je=d(BA,iA);oA=pF(BA,ee,UA,0,ee.length,0,DA-O,Je,Je)}else oA=E(BA,ee,UA,DA-O,aA-DA,iA)}_.push(oA),U.push(hA)}function I(D,F,_,U){let J=[],j=0,AA=-1;for(;r.pos>F;){let{id:O,start:DA,end:P,size:aA}=r;if(aA>4)r.next();else{if(AA>-1&&DA=0;P-=3)O[aA++]=J[P],O[aA++]=J[P+1]-DA,O[aA++]=J[P+2]-DA,O[aA++]=aA;_.push(new SI(O,J[2]-DA,i)),U.push(DA-D)}}function d(D,F){return(_,U,J)=>{let j=0,AA=_.length-1,O,DA;if(AA>=0&&(O=_[AA])instanceof za){if(!AA&&O.type==D&&O.length==J)return O;(DA=O.prop(vi.lookAhead))&&(j=U[AA]+O.length+DA)}return E(D,_,U,J,j,F)}}function B(D,F,_,U,J,j,AA,O,DA){let P=[],aA=[];for(;D.length>U;)P.push(D.pop()),aA.push(F.pop()+_-J);D.push(E(i.types[AA],P,aA,j-J,O-j,DA)),F.push(J-_)}function E(D,F,_,U,J,j,AA){if(j){let O=[vi.contextHash,j];AA=AA?[O].concat(AA):[O]}if(J>25){let O=[vi.lookAhead,J];AA=AA?[O].concat(AA):[O]}return new za(D,F,_,U,AA)}function Q(D,F){let _=r.fork(),U=0,J=0,j=0,AA=_.end-n,O={size:0,start:0,skip:0};A:for(let DA=_.pos-D;_.pos>DA;){let P=_.size;if(_.id==F&&P>=0){O.size=U,O.start=J,O.skip=j,j+=4,U+=4,_.next();continue}let aA=_.pos-P;if(P<0||aA=a?4:0,BA=_.start;for(_.next();_.pos>aA;){if(_.size<0)if(_.size==-3||_.size==-4)iA+=4;else break A;else _.id>=a&&(iA+=4);_.next()}J=BA,U+=P,j+=iA}return(F<0||U==D)&&(O.size=U,O.start=J,O.skip=j),O.size>4?O:void 0}function f(D,F,_){let{id:U,start:J,end:j,size:AA}=r;if(r.next(),AA>=0&&U4){let DA=r.pos-(AA-4);for(;r.pos>DA;)_=f(D,F,_)}F[--_]=O,F[--_]=j-D,F[--_]=J-D,F[--_]=U}else AA==-3?g=U:AA==-4&&(l=U);return _}let b=[],S=[];for(;r.pos>0;)C(t.start||0,t.bufferStart||0,b,S,-1,0);let M=(e=t.length)!==null&&e!==void 0?e:b.length?S[0]+b[0].length:0;return new za(s[t.topID],b.reverse(),S.reverse(),M)}var wAA=new WeakMap;function ND(t,e){if(!t.isAnonymous||e instanceof SI||e.type!=t)return 1;let A=wAA.get(e);if(A==null){A=1;for(let i of e.children){if(i.type!=t||!(i instanceof za)){A=1;break}A+=ND(t,i)}wAA.set(e,A)}return A}function pF(t,e,A,i,n,o,a,r,s){let g=0;for(let B=i;B=l)break;F+=_}if(S==M+1){if(F>l){let _=B[M];d(_.children,_.positions,0,_.children.length,E[M]+b);continue}C.push(B[M])}else{let _=E[S-1]+B[S-1].length-D;C.push(pF(t,B,E,M,S,D,_,null,s))}I.push(D+b-o)}}return d(e,A,i,n,0),(r||s)(C,I,a)}var vd=class t{constructor(e,A,i,n,o=!1,a=!1){this.from=e,this.to=A,this.tree=i,this.offset=n,this.open=(o?1:0)|(a?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,A=[],i=!1){let n=[new t(0,e.length,e,0,!1,i)];for(let o of A)o.to>e.length&&n.push(o);return n}static applyChanges(e,A,i=128){if(!A.length)return e;let n=[],o=1,a=e.length?e[0]:null;for(let r=0,s=0,g=0;;r++){let l=r=i)for(;a&&a.from=I.from||C<=I.to||g){let d=Math.max(I.from,s)-g,B=Math.min(I.to,C)-g;I=d>=B?null:new t(d,B,I.tree,I.offset+g,r>0,!!l)}if(I&&n.push(I),a.to>C)break;a=onew cf(n.from,n.to)):[new cf(0,0)]:[new cf(0,e.length)],this.createParse(e,A||[],i)}parse(e,A,i){let n=this.startParse(e,A,i);for(;;){let o=n.advance();if(o)return o}}},fF=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,A){return this.string.slice(e,A)}};var z8e=new vi({perNode:!0});var $7A=0,Rc=class t{constructor(e,A,i,n){this.name=e,this.set=A,this.base=i,this.modified=n,this.id=$7A++}toString(){let{name:e}=this;for(let A of this.modified)A.name&&(e=`${A.name}(${e})`);return e}static define(e,A){let i=typeof e=="string"?e:"?";if(e instanceof t&&(A=e),A?.base)throw new Error("Can not derive from a modified tag");let n=new t(i,[],null,[]);if(n.set.push(n),A)for(let o of A.set)n.set.push(o);return n}static defineModifier(e){let A=new KD(e);return i=>i.modified.indexOf(A)>-1?i:KD.get(i.base||i,i.modified.concat(A).sort((n,o)=>n.id-o.id))}},AbA=0,KD=class t{constructor(e){this.name=e,this.instances=[],this.id=AbA++}static get(e,A){if(!A.length)return e;let i=A[0].instances.find(r=>r.base==e&&ebA(A,r.modified));if(i)return i;let n=[],o=new Rc(e.name,n,e,A);for(let r of A)r.instances.push(o);let a=tbA(A);for(let r of e.set)if(!r.modified.length)for(let s of a)n.push(t.get(r,s));return o}};function ebA(t,e){return t.length==e.length&&t.every((A,i)=>A==e[i])}function tbA(t){let e=[[]];for(let A=0;Ai.length-A.length)}function UD(t){let e=Object.create(null);for(let A in t){let i=t[A];Array.isArray(i)||(i=[i]);for(let n of A.split(" "))if(n){let o=[],a=2,r=n;for(let C=0;;){if(r=="..."&&C>0&&C+3==n.length){a=1;break}let I=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(r);if(!I)throw new RangeError("Invalid path: "+n);if(o.push(I[0]=="*"?"":I[0][0]=='"'?JSON.parse(I[0]):I[0]),C+=I[0].length,C==n.length)break;let d=n[C++];if(C==n.length&&d=="!"){a=0;break}if(d!="/")throw new RangeError("Invalid path: "+n);r=n.slice(C)}let s=o.length-1,g=o[s];if(!g)throw new RangeError("Invalid path: "+n);let l=new Md(i,a,s>0?o.slice(0,s):null);e[g]=l.sort(e[g])}}return MAA.add(e)}var MAA=new vi({combine(t,e){let A,i,n;for(;t||e;){if(!t||e&&t.depth>=e.depth?(n=e,e=e.next):(n=t,t=t.next),A&&A.mode==n.mode&&!n.context&&!A.context)continue;let o=new Md(n.tags,n.mode,n.context);A?A.next=o:i=o,A=o}return i}}),Md=class{constructor(e,A,i,n){this.tags=e,this.mode=A,this.context=i,this.next=n}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let a=n;for(let r of o)for(let s of r.set){let g=A[s.id];if(g){a=a?a+" "+g:g;break}}return a},scope:i}}function ibA(t,e){let A=null;for(let i of t){let n=i.style(e);n&&(A=A?A+" "+n:n)}return A}function kAA(t,e,A,i=0,n=t.length){let o=new DF(i,Array.isArray(e)?e:[e],A);o.highlightRange(t.cursor(),i,n,"",o.highlighters),o.flush(n)}var DF=class{constructor(e,A,i){this.at=e,this.highlighters=A,this.span=i,this.class=""}startSpan(e,A){A!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=A)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,A,i,n,o){let{type:a,from:r,to:s}=e;if(r>=i||s<=A)return;a.isTop&&(o=this.highlighters.filter(d=>!d.scope||d.scope(a)));let g=n,l=nbA(e)||Md.empty,C=ibA(o,l.tags);if(C&&(g&&(g+=" "),g+=C,l.mode==1&&(n+=(n?" ":"")+C)),this.startSpan(Math.max(A,r),g),l.opaque)return;let I=e.tree&&e.tree.prop(vi.mounted);if(I&&I.overlay){let d=e.node.enter(I.overlay[0].from+r,1),B=this.highlighters.filter(Q=>!Q.scope||Q.scope(I.tree.type)),E=e.firstChild();for(let Q=0,f=r;;Q++){let b=Q=S||!e.nextSibling())););if(!b||S>i)break;f=b.to+r,f>A&&(this.highlightRange(d.cursor(),Math.max(A,b.from+r),Math.min(i,f),"",B),this.startSpan(Math.min(i,f),g))}E&&e.parent()}else if(e.firstChild()){I&&(n="");do if(!(e.to<=A)){if(e.from>=i)break;this.highlightRange(e,A,i,n,o),this.startSpan(Math.min(i,e.to),g)}while(e.nextSibling());e.parent()}}};function nbA(t){let e=t.type.prop(MAA);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}var Ve=Rc.define,_D=Ve(),xI=Ve(),vAA=Ve(xI),bAA=Ve(xI),RI=Ve(),LD=Ve(RI),wF=Ve(RI),J0=Ve(),bd=Ve(J0),K0=Ve(),U0=Ve(),yF=Ve(),Ef=Ve(yF),GD=Ve(),Re={comment:_D,lineComment:Ve(_D),blockComment:Ve(_D),docComment:Ve(_D),name:xI,variableName:Ve(xI),typeName:vAA,tagName:Ve(vAA),propertyName:bAA,attributeName:Ve(bAA),className:Ve(xI),labelName:Ve(xI),namespace:Ve(xI),macroName:Ve(xI),literal:RI,string:LD,docString:Ve(LD),character:Ve(LD),attributeValue:Ve(LD),number:wF,integer:Ve(wF),float:Ve(wF),bool:Ve(RI),regexp:Ve(RI),escape:Ve(RI),color:Ve(RI),url:Ve(RI),keyword:K0,self:Ve(K0),null:Ve(K0),atom:Ve(K0),unit:Ve(K0),modifier:Ve(K0),operatorKeyword:Ve(K0),controlKeyword:Ve(K0),definitionKeyword:Ve(K0),moduleKeyword:Ve(K0),operator:U0,derefOperator:Ve(U0),arithmeticOperator:Ve(U0),logicOperator:Ve(U0),bitwiseOperator:Ve(U0),compareOperator:Ve(U0),updateOperator:Ve(U0),definitionOperator:Ve(U0),typeOperator:Ve(U0),controlOperator:Ve(U0),punctuation:yF,separator:Ve(yF),bracket:Ef,angleBracket:Ve(Ef),squareBracket:Ve(Ef),paren:Ve(Ef),brace:Ve(Ef),content:J0,heading:bd,heading1:Ve(bd),heading2:Ve(bd),heading3:Ve(bd),heading4:Ve(bd),heading5:Ve(bd),heading6:Ve(bd),contentSeparator:Ve(J0),list:Ve(J0),quote:Ve(J0),emphasis:Ve(J0),strong:Ve(J0),link:Ve(J0),monospace:Ve(J0),strikethrough:Ve(J0),inserted:Ve(),deleted:Ve(),changed:Ve(),invalid:Ve(),meta:GD,documentMeta:Ve(GD),annotation:Ve(GD),processingInstruction:Ve(GD),definition:Rc.defineModifier("definition"),constant:Rc.defineModifier("constant"),function:Rc.defineModifier("function"),standard:Rc.defineModifier("standard"),local:Rc.defineModifier("local"),special:Rc.defineModifier("special")};for(let t in Re){let e=Re[t];e instanceof Rc&&(e.name=t)}var j8e=vF([{tag:Re.link,class:"tok-link"},{tag:Re.heading,class:"tok-heading"},{tag:Re.emphasis,class:"tok-emphasis"},{tag:Re.strong,class:"tok-strong"},{tag:Re.keyword,class:"tok-keyword"},{tag:Re.atom,class:"tok-atom"},{tag:Re.bool,class:"tok-bool"},{tag:Re.url,class:"tok-url"},{tag:Re.labelName,class:"tok-labelName"},{tag:Re.inserted,class:"tok-inserted"},{tag:Re.deleted,class:"tok-deleted"},{tag:Re.literal,class:"tok-literal"},{tag:Re.string,class:"tok-string"},{tag:Re.number,class:"tok-number"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],class:"tok-string2"},{tag:Re.variableName,class:"tok-variableName"},{tag:Re.local(Re.variableName),class:"tok-variableName tok-local"},{tag:Re.definition(Re.variableName),class:"tok-variableName tok-definition"},{tag:Re.special(Re.variableName),class:"tok-variableName2"},{tag:Re.definition(Re.propertyName),class:"tok-propertyName tok-definition"},{tag:Re.typeName,class:"tok-typeName"},{tag:Re.namespace,class:"tok-namespace"},{tag:Re.className,class:"tok-className"},{tag:Re.macroName,class:"tok-macroName"},{tag:Re.propertyName,class:"tok-propertyName"},{tag:Re.operator,class:"tok-operator"},{tag:Re.comment,class:"tok-comment"},{tag:Re.meta,class:"tok-meta"},{tag:Re.invalid,class:"tok-invalid"},{tag:Re.punctuation,class:"tok-punctuation"}]);var bF,NQ=new vi;function obA(t){return We.define({combine:t?e=>e.concat(t):void 0})}var abA=new vi,Nc=(()=>{class t{constructor(A,i,n=[],o=""){this.data=A,this.name=o,er.prototype.hasOwnProperty("tree")||Object.defineProperty(er.prototype,"tree",{get(){return xr(this)}}),this.parser=i,this.extension=[NI.of(this),er.languageData.of((a,r,s)=>{let g=SAA(a,r,s),l=g.type.prop(NQ);if(!l)return[];let C=a.facet(l),I=g.type.prop(abA);if(I){let d=g.resolve(r-g.from,s);for(let B of I)if(B.test(d,a)){let E=a.facet(B.facet);return B.type=="replace"?E:E.concat(C)}}return C})].concat(n)}isActiveAt(A,i,n=-1){return SAA(A,i,n).type.prop(NQ)==this.data}findRegions(A){let i=A.facet(NI);if(i?.data==this.data)return[{from:0,to:A.doc.length}];if(!i||!i.allowsNesting)return[];let n=[],o=(a,r)=>{if(a.prop(NQ)==this.data){n.push({from:r,to:r+a.length});return}let s=a.prop(vi.mounted);if(s){if(s.tree.prop(NQ)==this.data){if(s.overlay)for(let g of s.overlay)n.push({from:g.from+r,to:g.to+r});else n.push({from:r,to:r+a.length});return}else if(s.overlay){let g=n.length;if(o(s.tree,s.overlay[0].from+r),n.length>g)return}}for(let g=0;gi.isTop?A:void 0)]}),e.name)}configure(e,A){return new t(this.data,this.parser.configure(e),A||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function xr(t){let e=t.field(Nc.state,!1);return e?e.tree:za.empty}function UF(t,e,A=50){var i;let n=(i=t.field(Nc.state,!1))===null||i===void 0?void 0:i.context;if(!n)return null;let o=n.viewport;n.updateViewport({from:0,to:e});let a=n.isDone(e)||n.work(A,e)?n.tree:null;return n.updateViewport(o),a}var xF=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,A){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,A):this.string.slice(e-i,A-i)}},Qf=null,RF=class t{constructor(e,A,i=[],n,o,a,r,s){this.parser=e,this.state=A,this.fragments=i,this.tree=n,this.treeLen=o,this.viewport=a,this.skipped=r,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(e,A,i){return new t(e,A,[],za.empty,0,i,[],null)}startParse(){return this.parser.startParse(new xF(this.state.doc),this.fragments)}work(e,A){return A!=null&&A>=this.state.doc.length&&(A=void 0),this.tree!=za.empty&&this.isDone(A??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let n=Date.now()+e;e=()=>Date.now()>n}for(this.parse||(this.parse=this.startParse()),A!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>A)&&A=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(A=this.parse.advance()););}),this.treeLen=e,this.tree=A,this.fragments=this.withoutTempSkipped(vd.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let A=Qf;Qf=this;try{return e()}finally{Qf=A}}withoutTempSkipped(e){for(let A;A=this.tempSkipped.pop();)e=xAA(e,A.from,A.to);return e}changes(e,A){let{fragments:i,tree:n,treeLen:o,viewport:a,skipped:r}=this;if(this.takeTree(),!e.empty){let s=[];if(e.iterChangedRanges((g,l,C,I)=>s.push({fromA:g,toA:l,fromB:C,toB:I})),i=vd.applyChanges(i,s),n=za.empty,o=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){r=[];for(let g of this.skipped){let l=e.mapPos(g.from,1),C=e.mapPos(g.to,-1);le.from&&(this.fragments=xAA(this.fragments,n,o),this.skipped.splice(i--,1))}return this.skipped.length>=A?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,A){this.skipped.push({from:e,to:A})}static getSkippingParser(e){return new class extends RQ{createParse(A,i,n){let o=n[0].from,a=n[n.length-1].to;return{parsedPos:o,advance(){let s=Qf;if(s){for(let g of n)s.tempSkipped.push(g);e&&(s.scheduleOn=s.scheduleOn?Promise.all([s.scheduleOn,e]):e)}return this.parsedPos=a,new za(ps.none,[],[],a-o)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let A=this.fragments;return this.treeLen>=e&&A.length&&A[0].from==0&&A[0].to>=e}static get(){return Qf}};function xAA(t,e,A){return vd.applyChanges(t,[{fromA:e,toA:A,fromB:e,toB:A}])}var uf=class t{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let A=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),A.viewport.to);return A.work(20,i)||A.takeTree(),new t(A)}static init(e){let A=Math.min(3e3,e.doc.length),i=RF.create(e.facet(NI).parser,e,{from:0,to:A});return i.work(20,A)||i.takeTree(),new t(i)}};Nc.state=va.define({create:uf.init,update(t,e){for(let A of e.effects)if(A.is(Nc.setState))return A.value;return e.startState.facet(NI)!=e.state.facet(NI)?uf.init(e.state):t.apply(e)}});var GAA=t=>{let e=setTimeout(()=>t(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(GAA=t=>{let e=-1,A=setTimeout(()=>{e=requestIdleCallback(t,{timeout:400})},100);return()=>e<0?clearTimeout(A):cancelIdleCallback(e)});var MF=typeof navigator<"u"&&(!((bF=navigator.scheduling)===null||bF===void 0)&&bF.isInputPending)?()=>navigator.scheduling.isInputPending():null,rbA=Go.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let A=this.view.state.field(Nc.state).context;(A.updateViewport(e.view.viewport)||this.view.viewport.to>A.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(A)}scheduleWork(){if(this.working)return;let{state:e}=this.view,A=e.field(Nc.state);(A.tree!=A.context.tree||!A.context.isDone(e.doc.length))&&(this.working=GAA(this.work))}work(e){this.working=null;let A=Date.now();if(this.chunkEndn+1e3,s=o.context.work(()=>MF&&MF()||Date.now()>a,n+(r?0:1e5));this.chunkBudget-=Date.now()-A,(s||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:Nc.setState.of(new uf(o.context))})),this.chunkBudget>0&&!(s&&!r)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(A=>Sr(this.view.state,A)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),NI=We.define({combine(t){return t.length?t[0]:null},enables:t=>[Nc.state,rbA,ii.contentAttributes.compute([t],e=>{let A=e.facet(t);return A&&A.name?{"data-language":A.name}:{}})]}),YD=class{constructor(e,A=[]){this.language=e,this.support=A,this.extension=[e,A]}};var sbA=We.define(),xd=We.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some(A=>A!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function _c(t){let e=t.facet(xd);return e.charCodeAt(0)==9?t.tabSize*e.length:e.length}function LQ(t,e){let A="",i=t.tabSize,n=t.facet(xd)[0];if(n==" "){for(;e>=i;)A+=" ",e-=i;n=" "}for(let o=0;o=e?gbA(t,A,e):null}var kd=class{constructor(e,A={}){this.state=e,this.options=A,this.unit=_c(e)}lineAt(e,A=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:o}=this.options;return n!=null&&n>=i.from&&n<=i.to?o&&n==e?{text:"",from:e}:(A<0?n-1&&(o+=a-this.countColumn(i,i.search(/\S|$/))),o}countColumn(e,A=e.length){return KC(e,this.state.tabSize,A)}lineIndent(e,A=1){let{text:i,from:n}=this.lineAt(e,A),o=this.options.overrideIndentation;if(o){let a=o(n);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},JF=new vi;function gbA(t,e,A){let i=e.resolveStack(A),n=e.resolveInner(A,-1).resolve(A,0).enterUnfinishedNodesBefore(A);if(n!=i.node){let o=[];for(let a=n;a&&!(a.fromi.node.to||a.from==i.node.from&&a.type==i.node.type);a=a.parent)o.push(a);for(let a=o.length-1;a>=0;a--)i={node:o[a],next:i}}return KAA(i,t,A)}function KAA(t,e,A){for(let i=t;i;i=i.next){let n=cbA(i.node);if(n)return n(NF.create(e,A,i))}return 0}function lbA(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}function cbA(t){let e=t.type.prop(JF);if(e)return e;let A=t.firstChild,i;if(A&&(i=A.type.prop(vi.closedBy))){let n=t.lastChild,o=n&&i.indexOf(n.name)>-1;return a=>BbA(a,!0,1,void 0,o&&!lbA(a)?n.from:void 0)}return t.parent==null?CbA:null}function CbA(){return 0}var NF=class t extends kd{constructor(e,A,i){super(e.state,e.options),this.base=e,this.pos=A,this.context=i}get node(){return this.context.node}static create(e,A,i){return new t(e,A,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let A=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(A.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(IbA(i,e))break;A=this.state.doc.lineAt(i.from)}return this.lineIndent(A.from)}continue(){return KAA(this.context.next,this.base,this.pos)}};function IbA(t,e){for(let A=e;A;A=A.parent)if(t==A)return!0;return!1}function dbA(t){let e=t.node,A=e.childAfter(e.from),i=e.lastChild;if(!A)return null;let n=t.options.simulateBreak,o=t.state.doc.lineAt(A.from),a=n==null||n<=o.from?o.to:Math.min(o.to,n);for(let r=A.to;;){let s=e.childAfter(r);if(!s||s==i)return null;if(!s.type.isSkipped){if(s.from>=a)return null;let g=/^ */.exec(o.text.slice(A.to-o.from))[0].length;return{from:A.from,to:A.to+g}}r=s.to}}function BbA(t,e,A,i,n){let o=t.textAfter,a=o.match(/^\s*/)[0].length,r=i&&o.slice(a,a+i.length)==i||n==t.pos+a,s=e?dbA(t):null;return s?r?t.column(s.from):t.column(s.to):t.baseIndent+(r?0:t.unit*A)}function YF({except:t,units:e=1}={}){return A=>{let i=t&&t.test(A.textAfter);return A.baseIndent+(i?0:e*A.unit)}}var EbA=200;function UAA(){return er.transactionFilter.of(t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let A=t.newDoc,{head:i}=t.newSelection.main,n=A.lineAt(i);if(i>n.from+EbA)return t;let o=A.sliceString(n.from,i);if(!e.some(g=>g.test(o)))return t;let{state:a}=t,r=-1,s=[];for(let{head:g}of a.selection.ranges){let l=a.doc.lineAt(g);if(l.from==r)continue;r=l.from;let C=HD(a,l.from);if(C==null)continue;let I=/^\s*/.exec(l.text)[0],d=LQ(a,C);I!=d&&s.push({from:l.from,to:l.from+I.length,insert:d})}return s.length?[t,{changes:s,sequential:!0}]:t})}var TF=We.define(),ff=new vi;function JAA(t){let e=t.firstChild,A=t.lastChild;return e&&e.toA)continue;if(o&&r.from=e&&g.to>A&&(o=g)}}return o}function hbA(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function FQ(t,e,A){for(let i of t.facet(TF)){let n=i(t,e,A);if(n)return n}return QbA(t,e,A)}function YAA(t,e){let A=e.mapPos(t.from,1),i=e.mapPos(t.to,-1);return A>=i?void 0:{from:A,to:i}}var GQ=Hi.define({map:YAA}),mf=Hi.define({map:YAA});function TAA(t){let e=[];for(let{head:A}of t.state.selection.ranges)e.some(i=>i.from<=A&&i.to>=A)||e.push(t.lineBlockAt(A));return e}var Sd=va.define({create(){return yt.none},update(t,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((A,i)=>t=RAA(t,A,i)),t=t.map(e.changes);for(let A of e.effects)if(A.is(GQ)&&!ubA(t,A.value.from,A.value.to)){let{preparePlaceholder:i}=e.state.facet(OF),n=i?yt.replace({widget:new FF(i(e.state,A.value))}):NAA;t=t.update({add:[n.range(A.value.from,A.value.to)]})}else A.is(mf)&&(t=t.update({filter:(i,n)=>A.value.from!=i||A.value.to!=n,filterFrom:A.value.from,filterTo:A.value.to}));return e.selection&&(t=RAA(t,e.selection.main.head)),t},provide:t=>ii.decorations.from(t),toJSON(t,e){let A=[];return t.between(0,e.doc.length,(i,n)=>{A.push(i,n)}),A},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let A=0;A{ne&&(i=!0)}),i?t.update({filterFrom:e,filterTo:A,filter:(n,o)=>n>=A||o<=e}):t}function TD(t,e,A){var i;let n=null;return(i=t.field(Sd,!1))===null||i===void 0||i.between(e,A,(o,a)=>{(!n||n.from>o)&&(n={from:o,to:a})}),n}function ubA(t,e,A){let i=!1;return t.between(e,e,(n,o)=>{n==e&&o==A&&(i=!0)}),i}function HAA(t,e){return t.field(Sd,!1)?e:e.concat(Hi.appendConfig.of(PAA()))}var fbA=t=>{for(let e of TAA(t)){let A=FQ(t.state,e.from,e.to);if(A)return t.dispatch({effects:HAA(t.state,[GQ.of(A),zAA(t,A)])}),!0}return!1},HF=t=>{if(!t.state.field(Sd,!1))return!1;let e=[];for(let A of TAA(t)){let i=TD(t.state,A.from,A.to);i&&e.push(mf.of(i),zAA(t,i,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function zAA(t,e,A=!0){let i=t.state.doc.lineAt(e.from).number,n=t.state.doc.lineAt(e.to).number;return ii.announce.of(`${t.state.phrase(A?"Folded lines":"Unfolded lines")} ${i} ${t.state.phrase("to")} ${n}.`)}var mbA=t=>{let{state:e}=t,A=[];for(let i=0;i{let e=t.state.field(Sd,!1);if(!e||!e.size)return!1;let A=[];return e.between(0,t.state.doc.length,(i,n)=>{A.push(mf.of({from:i,to:n}))}),t.dispatch({effects:A}),!0};var OAA=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:fbA},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:HF},{key:"Ctrl-Alt-[",run:mbA},{key:"Ctrl-Alt-]",run:zF}],pbA={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},OF=We.define({combine(t){return kr(t,pbA)}});function PAA(t){let e=[Sd,DbA];return t&&e.push(OF.of(t)),e}function jAA(t,e){let{state:A}=t,i=A.facet(OF),n=a=>{let r=t.lineBlockAt(t.posAtDOM(a.target)),s=TD(t.state,r.from,r.to);s&&t.dispatch({effects:mf.of(s)}),a.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(t,n,e);let o=document.createElement("span");return o.textContent=i.placeholderText,o.setAttribute("aria-label",A.phrase("folded code")),o.title=A.phrase("unfold"),o.className="cm-foldPlaceholder",o.onclick=n,o}var NAA=yt.replace({widget:new class extends fg{toDOM(t){return jAA(t,null)}}}),FF=class extends fg{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return jAA(e,this.value)}},wbA={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},hf=class extends mg{constructor(e,A){super(),this.config=e,this.open=A}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let A=document.createElement("span");return A.textContent=this.open?this.config.openText:this.config.closedText,A.title=e.state.phrase(this.open?"Fold line":"Unfold line"),A}};function qAA(t={}){let e=cA(cA({},wbA),t),A=new hf(e,!0),i=new hf(e,!1),n=Go.fromClass(class{constructor(a){this.from=a.viewport.from,this.markers=this.buildMarkers(a)}update(a){(a.docChanged||a.viewportChanged||a.startState.facet(NI)!=a.state.facet(NI)||a.startState.field(Sd,!1)!=a.state.field(Sd,!1)||xr(a.startState)!=xr(a.state)||e.foldingChanged(a))&&(this.markers=this.buildMarkers(a.view))}buildMarkers(a){let r=new Wr;for(let s of a.viewportLineBlocks){let g=TD(a.state,s.from,s.to)?i:FQ(a.state,s.from,s.to)?A:null;g&&r.add(s.from,s.from,g)}return r.finish()}}),{domEventHandlers:o}=e;return[n,xD({class:"cm-foldGutter",markers(a){var r;return((r=a.plugin(n))===null||r===void 0?void 0:r.markers)||to.empty},initialSpacer(){return new hf(e,!1)},domEventHandlers:Ge(cA({},o),{click:(a,r,s)=>{if(o.click&&o.click(a,r,s))return!0;let g=TD(a.state,r.from,r.to);if(g)return a.dispatch({effects:mf.of(g)}),!0;let l=FQ(a.state,r.from,r.to);return l?(a.dispatch({effects:GQ.of(l)}),!0):!1}})}),PAA()]}var DbA=ii.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),_Q=class t{constructor(e,A){this.specs=e;let i;function n(r){let s=Sl.newName();return(i||(i=Object.create(null)))["."+s]=r,s}let o=typeof A.all=="string"?A.all:A.all?n(A.all):void 0,a=A.scope;this.scope=a instanceof Nc?r=>r.prop(NQ)==a.data:a?r=>r==a:void 0,this.style=vF(e.map(r=>({tag:r.tag,class:r.class||n(Object.assign({},r,{tag:null}))})),{all:o}).style,this.module=i?new Sl(i):null,this.themeType=A.themeType}static define(e,A){return new t(e,A||{})}},_F=We.define(),VAA=We.define({combine(t){return t.length?[t[0]]:null}});function kF(t){let e=t.facet(_F);return e.length?e:t.facet(VAA)}function PF(t,e){let A=[ybA],i;return t instanceof _Q&&(t.module&&A.push(ii.styleModule.of(t.module)),i=t.themeType),e?.fallback?A.push(VAA.of(t)):i?A.push(_F.computeN([ii.darkTheme],n=>n.facet(ii.darkTheme)==(i=="dark")?[t]:[])):A.push(_F.of(t)),A}var LF=class{constructor(e){this.markCache=Object.create(null),this.tree=xr(e.state),this.decorations=this.buildDeco(e,kF(e.state)),this.decoratedTo=e.viewport.to}update(e){let A=xr(e.state),i=kF(e.state),n=i!=kF(e.startState),{viewport:o}=e.view,a=e.changes.mapPos(this.decoratedTo,1);A.length=o.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(A!=this.tree||e.viewportChanged||n)&&(this.tree=A,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=o.to)}buildDeco(e,A){if(!A||!this.tree.length)return yt.none;let i=new Wr;for(let{from:n,to:o}of e.visibleRanges)kAA(this.tree,A,(a,r,s)=>{i.add(a,r,this.markCache[s]||(this.markCache[s]=yt.mark({class:s})))},n,o);return i.finish()}},ybA=bc.high(Go.fromClass(LF,{decorations:t=>t.decorations})),WAA=_Q.define([{tag:Re.meta,color:"#404740"},{tag:Re.link,textDecoration:"underline"},{tag:Re.heading,textDecoration:"underline",fontWeight:"bold"},{tag:Re.emphasis,fontStyle:"italic"},{tag:Re.strong,fontWeight:"bold"},{tag:Re.strikethrough,textDecoration:"line-through"},{tag:Re.keyword,color:"#708"},{tag:[Re.atom,Re.bool,Re.url,Re.contentSeparator,Re.labelName],color:"#219"},{tag:[Re.literal,Re.inserted],color:"#164"},{tag:[Re.string,Re.deleted],color:"#a11"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],color:"#e40"},{tag:Re.definition(Re.variableName),color:"#00f"},{tag:Re.local(Re.variableName),color:"#30a"},{tag:[Re.typeName,Re.namespace],color:"#085"},{tag:Re.className,color:"#167"},{tag:[Re.special(Re.variableName),Re.macroName],color:"#256"},{tag:Re.definition(Re.propertyName),color:"#00c"},{tag:Re.comment,color:"#940"},{tag:Re.invalid,color:"#f00"}]),vbA=ii.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ZAA=1e4,XAA="()[]{}",$AA=We.define({combine(t){return kr(t,{afterCursor:!0,brackets:XAA,maxScanDistance:ZAA,renderMatch:kbA})}}),bbA=yt.mark({class:"cm-matchingBracket"}),MbA=yt.mark({class:"cm-nonmatchingBracket"});function kbA(t){let e=[],A=t.matched?bbA:MbA;return e.push(A.range(t.start.from,t.start.to)),t.end&&e.push(A.range(t.end.from,t.end.to)),e}var SbA=va.define({create(){return yt.none},update(t,e){if(!e.docChanged&&!e.selection)return t;let A=[],i=e.state.facet($AA);for(let n of e.state.selection.ranges){if(!n.empty)continue;let o=Fc(e.state,n.head,-1,i)||n.head>0&&Fc(e.state,n.head-1,1,i)||i.afterCursor&&(Fc(e.state,n.head,1,i)||n.headii.decorations.from(t)}),xbA=[SbA,vbA];function AeA(t={}){return[$AA.of(t),xbA]}var RbA=new vi;function GF(t,e,A){let i=t.prop(e<0?vi.openedBy:vi.closedBy);if(i)return i;if(t.name.length==1){let n=A.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[A[n+e]]}return null}function KF(t){let e=t.type.prop(RbA);return e?e(t.node):t}function Fc(t,e,A,i={}){let n=i.maxScanDistance||ZAA,o=i.brackets||XAA,a=xr(t),r=a.resolveInner(e,A);for(let s=r;s;s=s.parent){let g=GF(s.type,A,o);if(g&&s.from0?e>=l.from&&el.from&&e<=l.to))return NbA(t,e,A,s,l,g,o)}}return FbA(t,e,A,a,r.type,n,o)}function NbA(t,e,A,i,n,o,a){let r=i.parent,s={from:n.from,to:n.to},g=0,l=r?.cursor();if(l&&(A<0?l.childBefore(i.from):l.childAfter(i.to)))do if(A<0?l.to<=i.from:l.from>=i.to){if(g==0&&o.indexOf(l.type.name)>-1&&l.from0)return null;let g={from:A<0?e-1:e,to:A>0?e+1:e},l=t.doc.iterRange(e,A>0?t.doc.length:0),C=0;for(let I=0;!l.next().done&&I<=o;){let d=l.value;A<0&&(I+=d.length);let B=e+I*A;for(let E=A>0?0:d.length-1,Q=A>0?d.length:-1;E!=Q;E+=A){let f=a.indexOf(d[E]);if(!(f<0||i.resolveInner(B+E,1).type!=n))if(f%2==0==A>0)C++;else{if(C==1)return{start:g,end:{from:B+E,to:B+E+1},matched:f>>1==s>>1};C--}}A>0&&(I+=d.length)}return l.done?{start:g,matched:!1}:null}var _bA=Object.create(null),FAA=[ps.none];var _AA=[],LAA=Object.create(null),LbA=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])LbA[t]=GbA(_bA,e);function SF(t,e){_AA.indexOf(t)>-1||(_AA.push(t),console.warn(e))}function GbA(t,e){let A=[];for(let r of e.split(" ")){let s=[];for(let g of r.split(".")){let l=t[g]||Re[g];l?typeof l=="function"?s.length?s=s.map(l):SF(g,`Modifier ${g} used at start of tag`):s.length?SF(g,`Tag ${g} used as modifier`):s=Array.isArray(l)?l:[l]:SF(g,`Unknown highlighting tag ${g}`)}for(let g of s)A.push(g)}if(!A.length)return 0;let i=e.replace(/ /g,"_"),n=i+" "+A.map(r=>r.id),o=LAA[n];if(o)return o.id;let a=LAA[n]=ps.define({id:FAA.length,name:i,props:[UD({[i]:A})]});return FAA.push(a),a.id}var ewe={rtl:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:mo.RTL}),ltr:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:mo.LTR}),auto:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var KbA=t=>{let{state:e}=t,A=e.doc.lineAt(e.selection.main.from),i=WF(t.state,A.from);return i.line?UbA(t):i.block?YbA(t):!1};function VF(t,e){return({state:A,dispatch:i})=>{if(A.readOnly)return!1;let n=t(e,A);return n?(i(A.update(n)),!0):!1}}var UbA=VF(zbA,0);var JbA=VF(geA,0);var YbA=VF((t,e)=>geA(t,e,HbA(e)),0);function WF(t,e){let A=t.languageDataAt("commentTokens",e,1);return A.length?A[0]:{}}var pf=50;function TbA(t,{open:e,close:A},i,n){let o=t.sliceDoc(i-pf,i),a=t.sliceDoc(n,n+pf),r=/\s*$/.exec(o)[0].length,s=/^\s*/.exec(a)[0].length,g=o.length-r;if(o.slice(g-e.length,g)==e&&a.slice(s,s+A.length)==A)return{open:{pos:i-r,margin:r&&1},close:{pos:n+s,margin:s&&1}};let l,C;n-i<=2*pf?l=C=t.sliceDoc(i,n):(l=t.sliceDoc(i,i+pf),C=t.sliceDoc(n-pf,n));let I=/^\s*/.exec(l)[0].length,d=/\s*$/.exec(C)[0].length,B=C.length-d-A.length;return l.slice(I,I+e.length)==e&&C.slice(B,B+A.length)==A?{open:{pos:i+I+e.length,margin:/\s/.test(l.charAt(I+e.length))?1:0},close:{pos:n-d-A.length,margin:/\s/.test(C.charAt(B-1))?1:0}}:null}function HbA(t){let e=[];for(let A of t.selection.ranges){let i=t.doc.lineAt(A.from),n=A.to<=i.to?i:t.doc.lineAt(A.to);n.from>i.from&&n.from==A.to&&(n=A.to==i.to+1?i:t.doc.lineAt(A.to-1));let o=e.length-1;o>=0&&e[o].to>i.from?e[o].to=n.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:n.to})}return e}function geA(t,e,A=e.selection.ranges){let i=A.map(o=>WF(e,o.from).block);if(!i.every(o=>o))return null;let n=A.map((o,a)=>TbA(e,i[a],o.from,o.to));if(t!=2&&!n.every(o=>o))return{changes:e.changes(A.map((o,a)=>n[a]?[]:[{from:o.from,insert:i[a].open+" "},{from:o.to,insert:" "+i[a].close}]))};if(t!=1&&n.some(o=>o)){let o=[];for(let a=0,r;an&&(o==a||a>C.from)){n=C.from;let I=/^\s*/.exec(C.text)[0].length,d=I==C.length,B=C.text.slice(I,I+g.length)==g?I:-1;Io.comment<0&&(!o.empty||o.single))){let o=[];for(let{line:r,token:s,indent:g,empty:l,single:C}of i)(C||!l)&&o.push({from:r.from+g,insert:s+" "});let a=e.changes(o);return{changes:a,selection:e.selection.map(a,1)}}else if(t!=1&&i.some(o=>o.comment>=0)){let o=[];for(let{line:a,comment:r,token:s}of i)if(r>=0){let g=a.from+r,l=g+s.length;a.text[l-a.from]==" "&&l++,o.push({from:g,to:l})}return{changes:o}}return null}function KQ(t,e){return de.create(t.ranges.map(e),t.mainIndex)}function Lc(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Gc({state:t,dispatch:e},A){let i=KQ(t.selection,A);return i.eq(t.selection,!0)?!1:(e(Lc(t,i)),!0)}function OD(t,e){return de.cursor(e?t.to:t.from)}function leA(t,e){return Gc(t,A=>A.empty?t.moveByChar(A,e):OD(A,e))}function ws(t){return t.textDirectionAt(t.state.selection.main.head)==mo.LTR}var ceA=t=>leA(t,!ws(t)),CeA=t=>leA(t,ws(t));function IeA(t,e){return Gc(t,A=>A.empty?t.moveByGroup(A,e):OD(A,e))}var ObA=t=>IeA(t,!ws(t)),PbA=t=>IeA(t,ws(t));var cwe=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function jbA(t,e,A){if(e.type.prop(A))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function PD(t,e,A){let i=xr(t).resolveInner(e.head),n=A?vi.closedBy:vi.openedBy;for(let s=e.head;;){let g=A?i.childAfter(s):i.childBefore(s);if(!g)break;jbA(t,g,n)?i=g:s=A?g.to:g.from}let o=i.type.prop(n),a,r;return o&&(a=A?Fc(t,i.from,1):Fc(t,i.to,-1))&&a.matched?r=A?a.end.to:a.end.from:r=A?i.to:i.from,de.cursor(r,A?-1:1)}var qbA=t=>Gc(t,e=>PD(t.state,e,!ws(t))),VbA=t=>Gc(t,e=>PD(t.state,e,ws(t)));function deA(t,e){return Gc(t,A=>{if(!A.empty)return OD(A,e);let i=t.moveVertically(A,e);return i.head!=A.head?i:t.moveToLineBoundary(A,e)})}var BeA=t=>deA(t,!1),EeA=t=>deA(t,!0);function QeA(t){let e=t.scrollDOM.clientHeighta.empty?t.moveVertically(a,e,A.height):OD(a,e));if(n.eq(i.selection))return!1;let o;if(A.selfScroll){let a=t.coordsAtPos(i.selection.main.head),r=t.scrollDOM.getBoundingClientRect(),s=r.top+A.marginTop,g=r.bottom-A.marginBottom;a&&a.top>s&&a.bottomheA(t,!1),jF=t=>heA(t,!0);function FI(t,e,A){let i=t.lineBlockAt(e.head),n=t.moveToLineBoundary(e,A);if(n.head==e.head&&n.head!=(A?i.to:i.from)&&(n=t.moveToLineBoundary(e,A,!1)),!A&&n.head==i.from&&i.length){let o=/^\s*/.exec(t.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;o&&e.head!=i.from+o&&(n=de.cursor(i.from+o))}return n}var WbA=t=>Gc(t,e=>FI(t,e,!0)),ZbA=t=>Gc(t,e=>FI(t,e,!1)),XbA=t=>Gc(t,e=>FI(t,e,!ws(t))),$bA=t=>Gc(t,e=>FI(t,e,ws(t))),A9A=t=>Gc(t,e=>de.cursor(t.lineBlockAt(e.head).from,1)),e9A=t=>Gc(t,e=>de.cursor(t.lineBlockAt(e.head).to,-1));function t9A(t,e,A){let i=!1,n=KQ(t.selection,o=>{let a=Fc(t,o.head,-1)||Fc(t,o.head,1)||o.head>0&&Fc(t,o.head-1,1)||o.headt9A(t,e,!1);function Fl(t,e){let A=KQ(t.state.selection,i=>{let n=e(i);return de.range(i.anchor,n.head,n.goalColumn,n.bidiLevel||void 0)});return A.eq(t.state.selection)?!1:(t.dispatch(Lc(t.state,A)),!0)}function ueA(t,e){return Fl(t,A=>t.moveByChar(A,e))}var feA=t=>ueA(t,!ws(t)),meA=t=>ueA(t,ws(t));function peA(t,e){return Fl(t,A=>t.moveByGroup(A,e))}var n9A=t=>peA(t,!ws(t)),o9A=t=>peA(t,ws(t));var a9A=t=>Fl(t,e=>PD(t.state,e,!ws(t))),r9A=t=>Fl(t,e=>PD(t.state,e,ws(t)));function weA(t,e){return Fl(t,A=>t.moveVertically(A,e))}var DeA=t=>weA(t,!1),yeA=t=>weA(t,!0);function veA(t,e){return Fl(t,A=>t.moveVertically(A,e,QeA(t).height))}var teA=t=>veA(t,!1),ieA=t=>veA(t,!0),s9A=t=>Fl(t,e=>FI(t,e,!0)),g9A=t=>Fl(t,e=>FI(t,e,!1)),l9A=t=>Fl(t,e=>FI(t,e,!ws(t))),c9A=t=>Fl(t,e=>FI(t,e,ws(t))),C9A=t=>Fl(t,e=>de.cursor(t.lineBlockAt(e.head).from)),I9A=t=>Fl(t,e=>de.cursor(t.lineBlockAt(e.head).to)),neA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:0})),!0),oeA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.doc.length})),!0),aeA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.selection.main.anchor,head:0})),!0),reA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),d9A=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),B9A=({state:t,dispatch:e})=>{let A=jD(t).map(({from:i,to:n})=>de.range(i,Math.min(n+1,t.doc.length)));return e(t.update({selection:de.create(A),userEvent:"select"})),!0},E9A=({state:t,dispatch:e})=>{let A=KQ(t.selection,i=>{let n=xr(t),o=n.resolveStack(i.from,1);if(i.empty){let a=n.resolveStack(i.from,-1);a.node.from>=o.node.from&&a.node.to<=o.node.to&&(o=a)}for(let a=o;a;a=a.next){let{node:r}=a;if((r.from=i.to||r.to>i.to&&r.from<=i.from)&&a.next)return de.range(r.to,r.from)}return i});return A.eq(t.selection)?!1:(e(Lc(t,A)),!0)};function beA(t,e){let{state:A}=t,i=A.selection,n=A.selection.ranges.slice();for(let o of A.selection.ranges){let a=A.doc.lineAt(o.head);if(e?a.to0)for(let r=o;;){let s=t.moveVertically(r,e);if(s.heada.to){n.some(g=>g.head==s.head)||n.push(s);break}else{if(s.head==r.head)break;r=s}}}return n.length==i.ranges.length?!1:(t.dispatch(Lc(A,de.create(n,n.length-1))),!0)}var Q9A=t=>beA(t,!1),h9A=t=>beA(t,!0),u9A=({state:t,dispatch:e})=>{let A=t.selection,i=null;return A.ranges.length>1?i=de.create([A.main]):A.main.empty||(i=de.create([de.cursor(A.main.head)])),i?(e(Lc(t,i)),!0):!1};function wf(t,e){if(t.state.readOnly)return!1;let A="delete.selection",{state:i}=t,n=i.changeByRange(o=>{let{from:a,to:r}=o;if(a==r){let s=e(o);sa&&(A="delete.forward",s=zD(t,s,!0)),a=Math.min(a,s),r=Math.max(r,s)}else a=zD(t,a,!1),r=zD(t,r,!0);return a==r?{range:o}:{changes:{from:a,to:r},range:de.cursor(a,an(t)))i.between(e,e,(n,o)=>{ne&&(e=A?o:n)});return e}var MeA=(t,e,A)=>wf(t,i=>{let n=i.from,{state:o}=t,a=o.doc.lineAt(n),r,s;if(A&&!e&&n>a.from&&nMeA(t,!1,!0);var keA=t=>MeA(t,!0,!1),SeA=(t,e)=>wf(t,A=>{let i=A.head,{state:n}=t,o=n.doc.lineAt(i),a=n.charCategorizer(i);for(let r=null;;){if(i==(e?o.to:o.from)){i==A.head&&o.number!=(e?n.doc.lines:1)&&(i+=e?1:-1);break}let s=Ta(o.text,i-o.from,e)+o.from,g=o.text.slice(Math.min(i,s)-o.from,Math.max(i,s)-o.from),l=a(g);if(r!=null&&l!=r)break;(g!=" "||i!=A.head)&&(r=l),i=s}return i}),xeA=t=>SeA(t,!1),f9A=t=>SeA(t,!0);var m9A=t=>wf(t,e=>{let A=t.lineBlockAt(e.head).to;return e.headwf(t,e=>{let A=t.moveToLineBoundary(e,!1).head;return e.head>A?A:Math.max(0,e.head-1)}),w9A=t=>wf(t,e=>{let A=t.moveToLineBoundary(e,!0).head;return e.head{if(t.readOnly)return!1;let A=t.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:bn.of(["",""])},range:de.cursor(i.from)}));return e(t.update(A,{scrollIntoView:!0,userEvent:"input"})),!0},y9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=t.changeByRange(i=>{if(!i.empty||i.from==0||i.from==t.doc.length)return{range:i};let n=i.from,o=t.doc.lineAt(n),a=n==o.from?n-1:Ta(o.text,n-o.from,!1)+o.from,r=n==o.to?n+1:Ta(o.text,n-o.from,!0)+o.from;return{changes:{from:a,to:r,insert:t.doc.slice(n,r).append(t.doc.slice(a,n))},range:de.cursor(r)}});return A.changes.empty?!1:(e(t.update(A,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function jD(t){let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.from),o=t.doc.lineAt(i.to);if(!i.empty&&i.to==o.from&&(o=t.doc.lineAt(i.to-1)),A>=n.number){let a=e[e.length-1];a.to=o.to,a.ranges.push(i)}else e.push({from:n.from,to:o.to,ranges:[i]});A=o.number+1}return e}function ReA(t,e,A){if(t.readOnly)return!1;let i=[],n=[];for(let o of jD(t)){if(A?o.to==t.doc.length:o.from==0)continue;let a=t.doc.lineAt(A?o.to+1:o.from-1),r=a.length+1;if(A){i.push({from:o.to,to:a.to},{from:o.from,insert:a.text+t.lineBreak});for(let s of o.ranges)n.push(de.range(Math.min(t.doc.length,s.anchor+r),Math.min(t.doc.length,s.head+r)))}else{i.push({from:a.from,to:o.from},{from:o.to,insert:t.lineBreak+a.text});for(let s of o.ranges)n.push(de.range(s.anchor-r,s.head-r))}}return i.length?(e(t.update({changes:i,scrollIntoView:!0,selection:de.create(n,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}var v9A=({state:t,dispatch:e})=>ReA(t,e,!1),b9A=({state:t,dispatch:e})=>ReA(t,e,!0);function NeA(t,e,A){if(t.readOnly)return!1;let i=[];for(let o of jD(t))A?i.push({from:o.from,insert:t.doc.slice(o.from,o.to)+t.lineBreak}):i.push({from:o.to,insert:t.lineBreak+t.doc.slice(o.from,o.to)});let n=t.changes(i);return e(t.update({changes:n,selection:t.selection.map(n,A?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var M9A=({state:t,dispatch:e})=>NeA(t,e,!1),k9A=({state:t,dispatch:e})=>NeA(t,e,!0),S9A=t=>{if(t.state.readOnly)return!1;let{state:e}=t,A=e.changes(jD(e).map(({from:n,to:o})=>(n>0?n--:o{let o;if(t.lineWrapping){let a=t.lineBlockAt(n.head),r=t.coordsAtPos(n.head,n.assoc||1);r&&(o=a.bottom+t.documentTop-r.bottom+t.defaultLineHeight/2)}return t.moveVertically(n,!0,o)}).map(A);return t.dispatch({changes:A,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function x9A(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let A=xr(t).resolveInner(e),i=A.childBefore(e),n=A.childAfter(e),o;return i&&n&&i.to<=e&&n.from>=e&&(o=i.type.prop(vi.closedBy))&&o.indexOf(n.name)>-1&&t.doc.lineAt(i.to).from==t.doc.lineAt(n.from).from&&!/\S/.test(t.sliceDoc(i.to,n.from))?{from:i.to,to:n.from}:null}var seA=FeA(!1),R9A=FeA(!0);function FeA(t){return({state:e,dispatch:A})=>{if(e.readOnly)return!1;let i=e.changeByRange(n=>{let{from:o,to:a}=n,r=e.doc.lineAt(o),s=!t&&o==a&&x9A(e,o);t&&(o=a=(a<=r.to?r:e.doc.lineAt(a)).to);let g=new kd(e,{simulateBreak:o,simulateDoubleBreak:!!s}),l=HD(g,o);for(l==null&&(l=KC(/^\s*/.exec(e.doc.lineAt(o).text)[0],e.tabSize));ar.from&&o{let n=[];for(let a=i.from;a<=i.to;){let r=t.doc.lineAt(a);r.number>A&&(i.empty||i.to>r.from)&&(e(r,n,i),A=r.number),a=r.to+1}let o=t.changes(n);return{changes:n,range:de.range(o.mapPos(i.anchor,1),o.mapPos(i.head,1))}})}var N9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=Object.create(null),i=new kd(t,{overrideIndentation:o=>{let a=A[o];return a??-1}}),n=ZF(t,(o,a,r)=>{let s=HD(i,o.from);if(s==null)return;/\S/.test(o.text)||(s=0);let g=/^\s*/.exec(o.text)[0],l=LQ(t,s);(g!=l||r.fromt.readOnly?!1:(e(t.update(ZF(t,(A,i)=>{i.push({from:A.from,insert:t.facet(xd)})}),{userEvent:"input.indent"})),!0),LeA=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(ZF(t,(A,i)=>{let n=/^\s*/.exec(A.text)[0];if(!n)return;let o=KC(n,t.tabSize),a=0,r=LQ(t,Math.max(0,o-_c(t)));for(;a(t.setTabFocusMode(),!0);var _9A=[{key:"Ctrl-b",run:ceA,shift:feA,preventDefault:!0},{key:"Ctrl-f",run:CeA,shift:meA},{key:"Ctrl-p",run:BeA,shift:DeA},{key:"Ctrl-n",run:EeA,shift:yeA},{key:"Ctrl-a",run:A9A,shift:C9A},{key:"Ctrl-e",run:e9A,shift:I9A},{key:"Ctrl-d",run:keA},{key:"Ctrl-h",run:qF},{key:"Ctrl-k",run:m9A},{key:"Ctrl-Alt-h",run:xeA},{key:"Ctrl-o",run:D9A},{key:"Ctrl-t",run:y9A},{key:"Ctrl-v",run:jF}],L9A=[{key:"ArrowLeft",run:ceA,shift:feA,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:ObA,shift:n9A,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:XbA,shift:l9A,preventDefault:!0},{key:"ArrowRight",run:CeA,shift:meA,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:PbA,shift:o9A,preventDefault:!0},{mac:"Cmd-ArrowRight",run:$bA,shift:c9A,preventDefault:!0},{key:"ArrowUp",run:BeA,shift:DeA,preventDefault:!0},{mac:"Cmd-ArrowUp",run:neA,shift:aeA},{mac:"Ctrl-ArrowUp",run:eeA,shift:teA},{key:"ArrowDown",run:EeA,shift:yeA,preventDefault:!0},{mac:"Cmd-ArrowDown",run:oeA,shift:reA},{mac:"Ctrl-ArrowDown",run:jF,shift:ieA},{key:"PageUp",run:eeA,shift:teA},{key:"PageDown",run:jF,shift:ieA},{key:"Home",run:ZbA,shift:g9A,preventDefault:!0},{key:"Mod-Home",run:neA,shift:aeA},{key:"End",run:WbA,shift:s9A,preventDefault:!0},{key:"Mod-End",run:oeA,shift:reA},{key:"Enter",run:seA,shift:seA},{key:"Mod-a",run:d9A},{key:"Backspace",run:qF,shift:qF,preventDefault:!0},{key:"Delete",run:keA,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:xeA,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:f9A,preventDefault:!0},{mac:"Mod-Backspace",run:p9A,preventDefault:!0},{mac:"Mod-Delete",run:w9A,preventDefault:!0}].concat(_9A.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),GeA=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:qbA,shift:a9A},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:VbA,shift:r9A},{key:"Alt-ArrowUp",run:v9A},{key:"Shift-Alt-ArrowUp",run:M9A},{key:"Alt-ArrowDown",run:b9A},{key:"Shift-Alt-ArrowDown",run:k9A},{key:"Mod-Alt-ArrowUp",run:Q9A},{key:"Mod-Alt-ArrowDown",run:h9A},{key:"Escape",run:u9A},{key:"Mod-Enter",run:R9A},{key:"Alt-l",mac:"Ctrl-l",run:B9A},{key:"Mod-i",run:E9A,preventDefault:!0},{key:"Mod-[",run:LeA},{key:"Mod-]",run:_eA},{key:"Mod-Alt-\\",run:N9A},{key:"Shift-Mod-k",run:S9A},{key:"Shift-Mod-\\",run:i9A},{key:"Mod-/",run:KbA},{key:"Alt-A",run:JbA},{key:"Ctrl-m",mac:"Shift-Alt-m",run:F9A}].concat(L9A),KeA={key:"Tab",run:_eA,shift:LeA};var WD=class{constructor(e,A,i){this.from=e,this.to=A,this.diagnostic=i}},Rd=class t{constructor(e,A,i){this.diagnostics=e,this.panel=A,this.selected=i}static init(e,A,i){let n=i.facet(Y0).markerFilter;n&&(e=n(e,i));let o=e.slice().sort((d,B)=>d.from-B.from||d.to-B.to),a=new Wr,r=[],s=0,g=i.doc.iter(),l=0,C=i.doc.length;for(let d=0;;){let B=d==o.length?null:o[d];if(!B&&!r.length)break;let E,Q;if(r.length)E=s,Q=r.reduce((S,M)=>Math.min(S,M.to),B&&B.from>E?B.from:1e8);else{if(E=B.from,E>C)break;Q=B.to,r.push(B),d++}for(;dS.from||S.to==E))r.push(S),d++,Q=Math.min(S.to,Q);else{Q=Math.min(S.from,Q);break}}Q=Math.min(Q,C);let f=!1;if(r.some(S=>S.from==E&&(S.to==Q||Q==C))&&(f=E==Q,!f&&Q-E<10)){let S=E-(l+g.value.length);S>0&&(g.next(S),l=E);for(let M=E;;){if(M>=Q){f=!0;break}if(!g.lineBreak&&l+g.value.length>M)break;M=l+g.value.length,l+=g.value.length,g.next()}}let b=VeA(r);if(f)a.add(E,E,yt.widget({widget:new XF(b),diagnostics:r.slice()}));else{let S=r.reduce((M,D)=>D.markClass?M+" "+D.markClass:M,"");a.add(E,Q,yt.mark({class:"cm-lintRange cm-lintRange-"+b+S,diagnostics:r.slice(),inclusiveEnd:r.some(M=>M.to>Q)}))}if(s=Q,s==C)break;for(let S=0;S{if(!(e&&a.diagnostics.indexOf(e)<0))if(!i)i=new WD(n,o,e||a.diagnostics[0]);else{if(a.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new WD(i.from,o,i.diagnostic)}}),i}function YeA(t,e){let A=e.pos,i=e.end||A,n=t.state.facet(Y0).hideOn(t,A,i);if(n!=null)return n;let o=t.startState.doc.lineAt(e.pos);return!!(t.effects.some(a=>a.is($D))||t.changes.touchesRange(o.from,Math.max(o.to,i)))}function TeA(t,e){return t.field(jg,!1)?e:e.concat(Hi.appendConfig.of(ZeA))}function G9A(t,e){return{effects:TeA(t,[$D.of(e)])}}var $D=Hi.define(),A_=Hi.define(),HeA=Hi.define(),jg=va.define({create(){return new Rd(yt.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let A=t.diagnostics.map(e.changes),i=null,n=t.panel;if(t.selected){let o=e.changes.mapPos(t.selected.from,1);i=UQ(A,t.selected.diagnostic,o)||UQ(A,null,o)}!A.size&&n&&e.state.facet(Y0).autoPanel&&(n=null),t=new Rd(A,n,i)}for(let A of e.effects)if(A.is($D)){let i=e.state.facet(Y0).autoPanel?A.value.length?Df.open:null:t.panel;t=Rd.init(A.value,i,e.state)}else A.is(A_)?t=new Rd(t.diagnostics,A.value?Df.open:null,t.selected):A.is(HeA)&&(t=new Rd(t.diagnostics,t.panel,A.value));return t},provide:t=>[Dd.from(t,e=>e.panel),ii.decorations.from(t,e=>e.diagnostics)]});var K9A=yt.mark({class:"cm-lintRange cm-lintRange-active"});function U9A(t,e,A){let{diagnostics:i}=t.state.field(jg),n,o=-1,a=-1;i.between(e-(A<0?1:0),e+(A>0?1:0),(s,g,{spec:l})=>{if(e>=s&&e<=g&&(s==g||(e>s||A>0)&&(eqeA(t,A,!1)))}var J9A=t=>{let e=t.state.field(jg,!1);(!e||!e.panel)&&t.dispatch({effects:TeA(t.state,[A_.of(!0)])});let A=lf(t,Df.open);return A&&A.dom.querySelector(".cm-panel-lint ul").focus(),!0},UeA=t=>{let e=t.state.field(jg,!1);return!e||!e.panel?!1:(t.dispatch({effects:A_.of(!1)}),!0)},Y9A=t=>{let e=t.state.field(jg,!1);if(!e)return!1;let A=t.state.selection.main,i=e.diagnostics.iter(A.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==A.from&&i.to==A.to)?!1:(t.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var OeA=[{key:"Mod-Shift-m",run:J9A,preventDefault:!0},{key:"F8",run:Y9A}],T9A=Go.fromClass(class{constructor(t){this.view=t,this.timeout=-1,this.set=!0;let{delay:e}=t.state.facet(Y0);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let t=Date.now();if(tPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(G9A(this.view.state,i.reduce((n,o)=>n.concat(o))))},i=>{Sr(this.view.state,i)})}}update(t){let e=t.state.facet(Y0);(t.docChanged||e!=t.startState.facet(Y0)||e.needsRefresh&&e.needsRefresh(t))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function H9A(t,e,A){let i=[],n=-1;for(let o of t)o.then(a=>{i.push(a),clearTimeout(n),i.length==t.length?e(i):n=setTimeout(()=>e(i),200)},A)}var Y0=We.define({combine(t){return cA({sources:t.map(e=>e.source).filter(e=>e!=null)},kr(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:JeA,tooltipFilter:JeA,needsRefresh:(e,A)=>e?A?i=>e(i)||A(i):e:A,hideOn:(e,A)=>e?A?(i,n,o)=>e(i,n,o)||A(i,n,o):e:A,autoPanel:(e,A)=>e||A}))}});function JeA(t,e){return t?e?(A,i)=>e(t(A,i),i):t:e}function PeA(t,e={}){return[Y0.of({source:t,config:e}),T9A,ZeA]}function jeA(t){let e=[];if(t)A:for(let{name:A}of t){for(let i=0;io.toLowerCase()==n.toLowerCase())){e.push(n);continue A}}e.push("")}return e}function qeA(t,e,A){var i;let n=A?jeA(e.actions):[];return io("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},io("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((o,a)=>{let r=!1,s=d=>{if(d.preventDefault(),r)return;r=!0;let B=UQ(t.state.field(jg).diagnostics,e);B&&o.apply(t,B.from,B.to)},{name:g}=o,l=n[a]?g.indexOf(n[a]):-1,C=l<0?g:[g.slice(0,l),io("u",g.slice(l,l+1)),g.slice(l+1)],I=o.markClass?" "+o.markClass:"";return io("button",{type:"button",class:"cm-diagnosticAction"+I,onclick:s,onmousedown:s,"aria-label":` Action: ${g}${l<0?"":` (access key "${n[a]})"`}.`},C)}),e.source&&io("div",{class:"cm-diagnosticSource"},e.source))}var XF=class extends fg{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return io("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},ZD=class{constructor(e,A){this.diagnostic=A,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=qeA(e,A,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},Df=class t{constructor(e){this.view=e,this.items=[];let A=n=>{if(n.keyCode==27)UeA(this.view),this.view.focus();else if(n.keyCode==38||n.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(n.keyCode==40||n.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(n.keyCode==36)this.moveSelection(0);else if(n.keyCode==35)this.moveSelection(this.items.length-1);else if(n.keyCode==13)this.view.focus();else if(n.keyCode>=65&&n.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:o}=this.items[this.selectedIndex],a=jeA(o.actions);for(let r=0;r{for(let o=0;oUeA(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(jg).selected;if(!e)return-1;for(let A=0;A{for(let l of g.diagnostics){if(a.has(l))continue;a.add(l);let C=-1,I;for(let d=i;di&&(this.items.splice(i,C-i),n=!0)),A&&I.diagnostic==A.diagnostic?I.dom.hasAttribute("aria-selected")||(I.dom.setAttribute("aria-selected","true"),o=I):I.dom.hasAttribute("aria-selected")&&I.dom.removeAttribute("aria-selected"),i++}});i({sel:o.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:r,panel:s})=>{let g=s.height/this.list.offsetHeight;r.tops.bottom&&(this.list.scrollTop+=(r.bottom-s.bottom)/g)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function A(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)A();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)A()}moveSelection(e){if(this.selectedIndex<0)return;let A=this.view.state.field(jg),i=UQ(A.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:HeA.of(i)})}static open(e){return new t(e)}};function VD(t,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(t)}')`}function qD(t){return VD(``,'width="6" height="3"')}var z9A=ii.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:qD("#d11")},".cm-lintRange-warning":{backgroundImage:qD("orange")},".cm-lintRange-info":{backgroundImage:qD("#999")},".cm-lintRange-hint":{backgroundImage:qD("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function O9A(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function VeA(t){let e="hint",A=1;for(let i of t){let n=O9A(i.severity);n>A&&(A=n,e=i.severity)}return e}var XD=class extends mg{constructor(e){super(),this.diagnostics=e,this.severity=VeA(e)}toDOM(e){let A=document.createElement("div");A.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,n=e.state.facet(Ay).tooltipFilter;return n&&(i=n(i,e.state)),i.length&&(A.onmouseover=()=>j9A(e,A,i)),A}};function P9A(t,e){let A=i=>{let n=e.getBoundingClientRect();if(!(i.clientX>n.left-10&&i.clientXn.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,P9A(t,e)}let{hoverTime:n}=t.state.facet(Ay),o=setTimeout(i,n);e.onmouseout=()=>{clearTimeout(o),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(o),o=setTimeout(i,n)}}function q9A(t,e){let A=Object.create(null);for(let n of e){let o=t.lineAt(n.from);(A[o.from]||(A[o.from]=[])).push(n)}let i=[];for(let n in A)i.push(new XD(A[n]).range(+n));return to.of(i,!0)}var V9A=xD({class:"cm-gutter-lint",markers:t=>t.state.field($F),widgetMarker:(t,e,A)=>{let i=[];return t.state.field($F).between(A.from,A.to,(n,o,a)=>{n>A.from&&ni.is(e_)?i.value:A,t)},provide:t=>xQ.from(t)}),W9A=ii.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:VD('')},".cm-lint-marker-warning":{content:VD('')},".cm-lint-marker-error":{content:VD('')}}),ZeA=[jg,ii.decorations.compute([jg],t=>{let{selected:e,panel:A}=t.field(jg);return!e||!A||e.from==e.to?yt.none:yt.set([K9A.range(e.from,e.to)])}),IAA(U9A,{hideOn:YeA}),z9A],Ay=We.define({combine(t){return kr(t,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function XeA(t={}){return[Ay.of(t),$F,V9A,W9A,WeA]}var i_=class t{constructor(e,A,i,n,o,a,r,s,g,l=0,C){this.p=e,this.stack=A,this.state=i,this.reducePos=n,this.pos=o,this.score=a,this.buffer=r,this.bufferBase=s,this.curContext=g,this.lookAhead=l,this.parent=C}toString(){return`[${this.stack.filter((e,A)=>A%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,A,i=0){let n=e.parser.context;return new t(e,[],A,i,i,0,[],0,n?new ey(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,A){this.stack.push(this.state,A,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var A;let i=e>>19,n=e&65535,{parser:o}=this.p,a=this.reducePos=2e3&&!(!((A=this.p.parser.nodeSet.types[n])===null||A===void 0)&&A.isAnonymous)&&(g==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=l):this.p.lastBigReductionSizes;)this.stack.pop();this.reduceContext(n,g)}storeNode(e,A,i,n=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&a.buffer[r-4]==0&&a.buffer[r-1]>-1){if(A==i)return;if(a.buffer[r-2]>=A){a.buffer[r-2]=i;return}}}if(!o||this.pos==i)this.buffer.push(e,A,i,n);else{let a=this.buffer.length;if(a>0&&(this.buffer[a-4]!=0||this.buffer[a-1]<0)){let r=!1;for(let s=a;s>0&&this.buffer[s-2]>i;s-=4)if(this.buffer[s-1]>=0){r=!0;break}if(r)for(;a>0&&this.buffer[a-2]>i;)this.buffer[a]=this.buffer[a-4],this.buffer[a+1]=this.buffer[a-3],this.buffer[a+2]=this.buffer[a-2],this.buffer[a+3]=this.buffer[a-1],a-=4,n>4&&(n-=4)}this.buffer[a]=e,this.buffer[a+1]=A,this.buffer[a+2]=i,this.buffer[a+3]=n}}shift(e,A,i,n){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let o=e,{parser:a}=this.p;this.pos=n,!a.stateFlag(o,1)&&(n>i||A<=a.maxNode)&&(this.reducePos=n),this.pushState(o,Math.min(i,this.reducePos)),this.shiftContext(A,i),A<=a.maxNode&&this.buffer.push(A,i,n,4)}else this.pos=n,this.shiftContext(A,i),A<=this.p.parser.maxNode&&this.buffer.push(A,i,n,4)}apply(e,A,i,n){e&65536?this.reduce(e):this.shift(e,A,i,n)}useNode(e,A){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let n=this.pos;this.reducePos=this.pos=n+e.length,this.pushState(A,n),this.buffer.push(i,n,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,A=e.buffer.length;for(;A>0&&e.buffer[A-2]>e.reducePos;)A-=4;let i=e.buffer.slice(A),n=e.bufferBase+A;for(;e&&n==e.bufferBase;)e=e.parent;return new t(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,A){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,A,4),this.storeNode(0,this.pos,A,i?8:4),this.pos=this.reducePos=A,this.score-=190}canShift(e){for(let A=new n_(this);;){let i=this.p.parser.stateSlot(A.state,4)||this.p.parser.hasAction(A.state,e);if(i==0)return!1;if((i&65536)==0)return!0;A.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let A=this.p.parser.nextStates(this.state);if(A.length>8||this.stack.length>=120){let n=[];for(let o=0,a;os&1&&r==a)||n.push(A[o],a)}A=n}let i=[];for(let n=0;n>19,n=A&65535,o=this.stack.length-i*3;if(o<0||e.getGoto(this.stack[o],n,!1)<0){let a=this.findForcedReduction();if(a==null)return!1;A=a}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(A),!0}findForcedReduction(){let{parser:e}=this.p,A=[],i=(n,o)=>{if(!A.includes(n))return A.push(n),e.allActions(n,a=>{if(!(a&393216))if(a&65536){let r=(a>>19)-o;if(r>1){let s=a&65535,g=this.stack.length-r*3;if(g>=0&&e.getGoto(this.stack[g],s,!1)>=0)return r<<19|65536|s}}else{let r=i(a,o+1);if(r!=null)return r}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let A=0;A0&&this.emitLookAhead()}},ey=class{constructor(e,A){this.tracker=e,this.context=A,this.hash=e.strict?e.hash(A):0}},n_=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let A=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let n=this.start.p.parser.getGoto(this.stack[this.base-3],A,!0);this.state=n}},o_=class t{constructor(e,A,i){this.stack=e,this.pos=A,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,A=e.bufferBase+e.buffer.length){return new t(e,A,A-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new t(this.stack,this.pos,this.index)}};function yf(t,e=Uint16Array){if(typeof t!="string")return t;let A=null;for(let i=0,n=0;i=92&&a--,a>=34&&a--;let s=a-32;if(s>=46&&(s-=46,r=!0),o+=s,r)break;o*=46}A?A[n++]=o:A=new e(o)}return A}var JQ=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},$eA=new JQ,a_=class{constructor(e,A){this.input=e,this.ranges=A,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=$eA,this.rangeIndex=0,this.pos=this.chunkPos=A[0].from,this.range=A[0],this.end=A[A.length-1].to,this.readNext()}resolveOffset(e,A){let i=this.range,n=this.rangeIndex,o=this.pos+e;for(;oi.to:o>=i.to;){if(n==this.ranges.length-1)return null;let a=this.ranges[++n];o+=a.from-i.to,i=a}return o}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,A.from);return this.end}peek(e){let A=this.chunkOff+e,i,n;if(A>=0&&A=this.chunk2Pos&&ir.to&&(this.chunk2=this.chunk2.slice(0,r.to-i)),n=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),n}acceptToken(e,A=0){let i=A?this.resolveOffset(A,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,A){if(A?(this.token=A,A.start=e,A.lookAhead=e+1,A.value=A.extended=-1):this.token=$eA,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&A<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,A-this.chunkPos);if(e>=this.chunk2Pos&&A<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,A-this.chunk2Pos);if(e>=this.range.from&&A<=this.range.to)return this.input.read(e,A);let i="";for(let n of this.ranges){if(n.from>=A)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,A)))}return i}},_I=class{constructor(e,A){this.data=e,this.id=A}token(e,A){let{parser:i}=A.p;ntA(this.data,e,A,this.id,i.data,i.tokenPrecTable)}};_I.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;var r_=class{constructor(e,A,i){this.precTable=A,this.elseToken=i,this.data=typeof e=="string"?yf(e):e}token(e,A){let i=e.pos,n=0;for(;;){let o=e.next<0,a=e.resolveOffset(1,1);if(ntA(this.data,e,A,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(o||n++,a==null)break;e.reset(a,e.token)}n&&(e.reset(i,e.token),e.acceptToken(this.elseToken,n))}};r_.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;function ntA(t,e,A,i,n,o){let a=0,r=1<0){let B=t[d];if(s.allows(B)&&(e.token.value==-1||e.token.value==B||X9A(B,e.token.value,n,o))){e.acceptToken(B);break}}let l=e.next,C=0,I=t[a+2];if(e.next<0&&I>C&&t[g+I*3-3]==65535){a=t[g+I*3-1];continue A}for(;C>1,B=g+d+(d<<1),E=t[B],Q=t[B+1]||65536;if(l=Q)C=d+1;else{a=t[B+2],e.advance();continue A}}break}}function AtA(t,e,A){for(let i=e,n;(n=t[i])!=65535;i++)if(n==A)return i-e;return-1}function X9A(t,e,A,i){let n=AtA(A,i,e);return n<0||AtA(A,i,t)e)&&!i.type.isError)return A<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(t.length,Math.max(i.from+1,e+25));if(A<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return A<0?0:t.length}}var s_=class{constructor(e,A){this.fragments=e,this.nodeSet=A,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?etA(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?etA(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=a,null;if(o instanceof za){if(a==e){if(a=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(a),this.index.push(0))}else this.index[A]++,this.nextStart=a+o.length}}},g_=class{constructor(e,A){this.stream=A,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new JQ)}getActions(e){let A=0,i=null,{parser:n}=e.p,{tokenizers:o}=n,a=n.stateSlot(e.state,3),r=e.curContext?e.curContext.hash:0,s=0;for(let g=0;gC.end+25&&(s=Math.max(C.lookAhead,s)),C.value!=0)){let I=A;if(C.extended>-1&&(A=this.addActions(e,C.extended,C.end,A)),A=this.addActions(e,C.value,C.end,A),!l.extend&&(i=C,A>I))break}}for(;this.actions.length>A;)this.actions.pop();return s&&e.setLookAhead(s),!i&&e.pos==this.stream.end&&(i=new JQ,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,A=this.addActions(e,i.value,i.end,A)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let A=new JQ,{pos:i,p:n}=e;return A.start=i,A.end=Math.min(i+1,n.stream.end),A.value=i==n.stream.end?n.parser.eofTerm:0,A}updateCachedToken(e,A,i){let n=this.stream.clipPos(i.pos);if(A.token(this.stream.reset(n,e),i),e.value>-1){let{parser:o}=i.p;for(let a=0;a=0&&i.p.parser.dialect.allows(r>>1)){(r&1)==0?e.value=r>>1:e.extended=r>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,A,i,n){for(let o=0;oe.bufferLength*4?new s_(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,A=this.minStackPos,i=this.stacks=[],n,o;if(this.bigReductionCount>300&&e.length==1){let[a]=e;for(;a.forceReduce()&&a.stack.length&&a.stack[a.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;aA)i.push(r);else{if(this.advanceStack(r,i,e))continue;{n||(n=[],o=[]),n.push(r);let s=this.tokens.getMainToken(r);o.push(s.value,s.end)}}break}}if(!i.length){let a=n&&$9A(n);if(a)return qg&&console.log("Finish with "+this.stackID(a)),this.stackToTree(a);if(this.parser.strict)throw qg&&n&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+A);this.recovering||(this.recovering=5)}if(this.recovering&&n){let a=this.stoppedAt!=null&&n[0].pos>this.stoppedAt?n[0]:this.runRecovery(n,o,i);if(a)return qg&&console.log("Force-finish "+this.stackID(a)),this.stackToTree(a.forceAll())}if(this.recovering){let a=this.recovering==1?1:this.recovering*3;if(i.length>a)for(i.sort((r,s)=>s.score-r.score);i.length>a;)i.pop();i.some(r=>r.reducePos>A)&&this.recovering--}else if(i.length>1){A:for(let a=0;a500&&g.buffer.length>500)if((r.score-g.score||r.buffer.length-g.buffer.length)>0)i.splice(s--,1);else{i.splice(a--,1);continue A}}}i.length>12&&(i.sort((a,r)=>r.score-a.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let a=1;a ":"";if(this.stoppedAt!=null&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let g=e.curContext&&e.curContext.tracker.strict,l=g?e.curContext.hash:0;for(let C=this.fragments.nodeAt(n);C;){let I=this.parser.nodeSet.types[C.type.id]==C.type?o.getGoto(e.state,C.type.id):-1;if(I>-1&&C.length&&(!g||(C.prop(vi.contextHash)||0)==l))return e.useNode(C,I),qg&&console.log(a+this.stackID(e)+` (via reuse of ${o.getName(C.type.id)})`),!0;if(!(C instanceof za)||C.children.length==0||C.positions[0]>0)break;let d=C.children[0];if(d instanceof za&&C.positions[0]==0)C=d;else break}}let r=o.stateSlot(e.state,4);if(r>0)return e.reduce(r),qg&&console.log(a+this.stackID(e)+` (via always-reduce ${o.getName(r&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let s=this.tokens.getActions(e);for(let g=0;gn?A.push(B):i.push(B)}return!1}advanceFully(e,A){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return ttA(e,A),!0}}runRecovery(e,A,i){let n=null,o=!1;for(let a=0;a ":"";if(r.deadEnd&&(o||(o=!0,r.restart(),qg&&console.log(l+this.stackID(r)+" (restarted)"),this.advanceFully(r,i))))continue;let C=r.split(),I=l;for(let d=0;d<10&&C.forceReduce()&&(qg&&console.log(I+this.stackID(C)+" (via force-reduce)"),!this.advanceFully(C,i));d++)qg&&(I=this.stackID(C)+" -> ");for(let d of r.recoverByInsert(s))qg&&console.log(l+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>r.pos?(g==r.pos&&(g++,s=0),r.recoverByDelete(s,g),qg&&console.log(l+this.stackID(r)+` (via recover-delete ${this.parser.getName(s)})`),ttA(r,i)):(!n||n.scoree.topRules[r][1]),n=[];for(let r=0;r=0)o(l,s,r[g++]);else{let C=r[g+-l];for(let I=-l;I>0;I--)o(r[g++],s,C);g++}}}this.nodeSet=new Cf(A.map((r,s)=>ps.define({name:s>=this.minRepeatTerm?void 0:r,id:s,props:n[s],top:i.indexOf(s)>-1,error:s==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let a=yf(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let r=0;rtypeof r=="number"?new _I(a,r):r),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,A,i){let n=new l_(this,e,A,i);for(let o of this.wrappers)n=o(n,e,A,i);return n}getGoto(e,A,i=!1){let n=this.goto;if(A>=n[0])return-1;for(let o=n[A+1];;){let a=n[o++],r=a&1,s=n[o++];if(r&&i)return s;for(let g=o+(a>>1);o0}validAction(e,A){return!!this.allActions(e,i=>i==A?!0:null)}allActions(e,A){let i=this.stateSlot(e,4),n=i?A(i):void 0;for(let o=this.stateSlot(e,1);n==null;o+=3){if(this.data[o]==65535)if(this.data[o+1]==1)o=TC(this.data,o+2);else break;n=A(TC(this.data,o+1))}return n}nextStates(e){let A=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=TC(this.data,i+2);else break;if((this.data[i+2]&1)==0){let n=this.data[i+1];A.some((o,a)=>a&1&&o==n)||A.push(this.data[i],n)}}return A}configure(e){let A=Object.assign(Object.create(t.prototype),this);if(e.props&&(A.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);A.top=i}return e.tokenizers&&(A.tokenizers=this.tokenizers.map(i=>{let n=e.tokenizers.find(o=>o.from==i);return n?n.to:i})),e.specializers&&(A.specializers=this.specializers.slice(),A.specializerSpecs=this.specializerSpecs.map((i,n)=>{let o=e.specializers.find(r=>r.from==i.external);if(!o)return i;let a=Object.assign(Object.assign({},i),{external:o.to});return A.specializers[n]=itA(a),a})),e.contextTracker&&(A.context=e.contextTracker),e.dialect&&(A.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(A.strict=e.strict),e.wrap&&(A.wrappers=A.wrappers.concat(e.wrap)),e.bufferLength!=null&&(A.bufferLength=e.bufferLength),A}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let A=this.dynamicPrecedences;return A==null?0:A[e]||0}parseDialect(e){let A=Object.keys(this.dialects),i=A.map(()=>!1);if(e)for(let o of e.split(" ")){let a=A.indexOf(o);a>=0&&(i[a]=!0)}let n=null;for(let o=0;oi)&&A.p.parser.stateFlag(A.state,2)&&(!e||e.scoret.external(A,i)<<1|e}return t.get}var AMA=UD({String:Re.string,Number:Re.number,"True False":Re.bool,PropertyName:Re.propertyName,Null:Re.null,", :":Re.separator,"[ ]":Re.squareBracket,"{ }":Re.brace}),otA=ty.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[AMA],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var eMA=JD.define({name:"json",parser:otA.configure({props:[JF.add({Object:YF({except:/^\s*\}/}),Array:YF({except:/^\s*\]/})}),ff.add({"Object Array":JAA})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function atA(){return new YD(eMA)}var rtA=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t,GI=class{constructor(e,A,i=0,n=e.length,o,a){this.test=a,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=o?r=>o(rtA(r)):rtA,this.query=this.normalize(A)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Zr(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let A=H3(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Og(e);let n=this.normalize(A);if(n.length)for(let o=0,a=i;;o++){let r=n.charCodeAt(o),s=this.match(r,a,this.bufferPos+this.bufferStart);if(o==n.length-1){if(s)return this.value=s,this;break}a==i&&othis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let A=this.matchPos<=this.to&&this.re.exec(this.curLine);if(A){let i=this.curLineStart+A.index,n=i+A[0].length;if(this.matchPos=sy(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||n.to<=A){let r=new t(A,e.sliceString(A,i));return C_.set(e,r),r}if(n.from==A&&n.to==i)return n;let{text:o,from:a}=n;return a>A&&(o=e.sliceString(A,a)+o,a=A),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,A=this.re.exec(this.flat.text);if(A&&!A[0]&&A.index==e&&(this.re.lastIndex=e+1,A=this.re.exec(this.flat.text)),A){let i=this.flat.from+A.index,n=i+A[0].length;if((this.flat.to>=this.to||A.index+A[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this.matchPos=sy(this.text,n+(i==n?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ay.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(oy.prototype[Symbol.iterator]=ry.prototype[Symbol.iterator]=function(){return this});function tMA(t){try{return new RegExp(t,h_),!0}catch{return!1}}function sy(t,e){if(e>=t.length)return e;let A=t.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var iMA=t=>{let{state:e}=t,A=String(e.doc.lineAt(t.state.selection.main.head).number),{close:i,result:n}=BAA(t,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:A},focus:!0,submitLabel:e.phrase("go")});return n.then(o=>{let a=o&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(o.elements.line.value);if(!a){t.dispatch({effects:i});return}let r=e.doc.lineAt(e.selection.main.head),[,s,g,l,C]=a,I=l?+l.slice(1):0,d=g?+g:r.number;if(g&&C){let Q=d/100;s&&(Q=Q*(s=="-"?-1:1)+r.number/e.doc.lines),d=Math.round(e.doc.lines*Q)}else g&&s&&(d=d*(s=="-"?-1:1)+r.number);let B=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),E=de.cursor(B.from+Math.max(0,Math.min(I,B.length)));t.dispatch({effects:[i,ii.scrollIntoView(E.from,{y:"center"})],selection:E})}),!0},nMA={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},ctA=We.define({combine(t){return kr(t,nMA,{highlightWordAroundCursor:(e,A)=>e||A,minSelectionLength:Math.min,maxMatches:Math.min})}});function CtA(t){let e=[gMA,sMA];return t&&e.push(ctA.of(t)),e}var oMA=yt.mark({class:"cm-selectionMatch"}),aMA=yt.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function stA(t,e,A,i){return(A==0||t(e.sliceDoc(A-1,A))!=Lo.Word)&&(i==e.doc.length||t(e.sliceDoc(i,i+1))!=Lo.Word)}function rMA(t,e,A,i){return t(e.sliceDoc(A,A+1))==Lo.Word&&t(e.sliceDoc(i-1,i))==Lo.Word}var sMA=Go.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(ctA),{state:A}=t,i=A.selection;if(i.ranges.length>1)return yt.none;let n=i.main,o,a=null;if(n.empty){if(!e.highlightWordAroundCursor)return yt.none;let s=A.wordAt(n.head);if(!s)return yt.none;a=A.charCategorizer(n.head),o=A.sliceDoc(s.from,s.to)}else{let s=n.to-n.from;if(s200)return yt.none;if(e.wholeWords){if(o=A.sliceDoc(n.from,n.to),a=A.charCategorizer(n.head),!(stA(a,A,n.from,n.to)&&rMA(a,A,n.from,n.to)))return yt.none}else if(o=A.sliceDoc(n.from,n.to),!o)return yt.none}let r=[];for(let s of t.visibleRanges){let g=new GI(A.doc,o,s.from,s.to);for(;!g.next().done;){let{from:l,to:C}=g.value;if((!a||stA(a,A,l,C))&&(n.empty&&l<=n.from&&C>=n.to?r.push(aMA.range(l,C)):(l>=n.to||C<=n.from)&&r.push(oMA.range(l,C)),r.length>e.maxMatches))return yt.none}}return yt.set(r)}},{decorations:t=>t.decorations}),gMA=ii.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),lMA=({state:t,dispatch:e})=>{let{selection:A}=t,i=de.create(A.ranges.map(n=>t.wordAt(n.head)||de.cursor(n.head)),A.mainIndex);return i.eq(A)?!1:(e(t.update({selection:i})),!0)};function cMA(t,e){let{main:A,ranges:i}=t.selection,n=t.wordAt(A.head),o=n&&n.from==A.from&&n.to==A.to;for(let a=!1,r=new GI(t.doc,e,i[i.length-1].to);;)if(r.next(),r.done){if(a)return null;r=new GI(t.doc,e,0,Math.max(0,i[i.length-1].from-1)),a=!0}else{if(a&&i.some(s=>s.from==r.value.from))continue;if(o){let s=t.wordAt(r.value.from);if(!s||s.from!=r.value.from||s.to!=r.value.to)continue}return r.value}}var CMA=({state:t,dispatch:e})=>{let{ranges:A}=t.selection;if(A.some(o=>o.from===o.to))return lMA({state:t,dispatch:e});let i=t.sliceDoc(A[0].from,A[0].to);if(t.selection.ranges.some(o=>t.sliceDoc(o.from,o.to)!=i))return!1;let n=cMA(t,i);return n?(e(t.update({selection:t.selection.addRange(de.range(n.from,n.to),!1),effects:ii.scrollIntoView(n.to)})),!0):!1},Nd=We.define({combine(t){return kr(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new E_(e),scrollToMatch:e=>ii.scrollIntoView(e)})}});function ItA(t){return t?[Nd.of(t),Q_]:Q_}var gy=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||tMA(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(A,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new d_(this):new I_(this)}getCursor(e,A=0,i){let n=e.doc?e:er.create({doc:e});return i==null&&(i=n.doc.length),this.regexp?TQ(this,n,A,i):YQ(this,n,A,i)}},ly=class{constructor(e){this.spec=e}};function IMA(t,e,A){return(i,n,o,a)=>{if(A&&!A(i,n,o,a))return!1;let r=i>=a&&n<=a+o.length?o.slice(i-a,n-a):e.doc.sliceString(i,n);return t(r,e,i,n)}}function YQ(t,e,A,i){let n;return t.wholeWord&&(n=dMA(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(n=IMA(t.test,e,n)),new GI(e.doc,t.unquoted,A,i,t.caseSensitive?void 0:o=>o.toLowerCase(),n)}function dMA(t,e){return(A,i,n,o)=>((o>A||o+n.length=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=YQ(this.spec,e,Math.max(0,A-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}};function BMA(t,e,A){return(i,n,o)=>(!A||A(i,n,o))&&t(o[0],e,i,n)}function TQ(t,e,A,i){let n;return t.wholeWord&&(n=EMA(e.charCategorizer(e.selection.main.head))),t.test&&(n=BMA(t.test,e,n)),new oy(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:n},A,i)}function cy(t,e){return t.slice(Ta(t,e,!1),e)}function Cy(t,e){return t.slice(e,Ta(t,e))}function EMA(t){return(e,A,i)=>!i[0].length||(t(cy(i.input,i.index))!=Lo.Word||t(Cy(i.input,i.index))!=Lo.Word)&&(t(Cy(i.input,i.index+i[0].length))!=Lo.Word||t(cy(i.input,i.index+i[0].length))!=Lo.Word)}var d_=class extends ly{nextMatch(e,A,i){let n=TQ(this.spec,e,i,e.doc.length).next();return n.done&&(n=TQ(this.spec,e,0,A).next()),n.done?null:n.value}prevMatchInRange(e,A,i){for(let n=1;;n++){let o=Math.max(A,i-n*1e4),a=TQ(this.spec,e,o,i),r=null;for(;!a.next().done;)r=a.value;if(r&&(o==A||r.from>o+10))return r;if(o==A)return null}}prevMatch(e,A,i){return this.prevMatchInRange(e,0,A)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(A,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let n=i.length;n>0;n--){let o=+i.slice(0,n);if(o>0&&o=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=TQ(this.spec,e,Math.max(0,A-250),Math.min(i+250,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}},bf=Hi.define(),u_=Hi.define(),LI=va.define({create(t){return new vf(B_(t).create(),null)},update(t,e){for(let A of e.effects)A.is(bf)?t=new vf(A.value.create(),t.panel):A.is(u_)&&(t=new vf(t.query,A.value?f_:null));return t},provide:t=>Dd.from(t,e=>e.panel)});var vf=class{constructor(e,A){this.query=e,this.panel=A}},QMA=yt.mark({class:"cm-searchMatch"}),hMA=yt.mark({class:"cm-searchMatch cm-searchMatch-selected"}),uMA=Go.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(LI))}update(t){let e=t.state.field(LI);(e!=t.startState.field(LI)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return yt.none;let{view:A}=this,i=new Wr;for(let n=0,o=A.visibleRanges,a=o.length;no[n+1].from-500;)s=o[++n].to;t.highlight(A.state,r,s,(g,l)=>{let C=A.state.selection.ranges.some(I=>I.from==g&&I.to==l);i.add(g,l,C?hMA:QMA)})}return i.finish()}},{decorations:t=>t.decorations});function Mf(t){return e=>{let A=e.state.field(LI,!1);return A&&A.query.spec.valid?t(e,A):By(e)}}var Iy=Mf((t,{query:e})=>{let{to:A}=t.state.selection.main,i=e.nextMatch(t.state,A,A);if(!i)return!1;let n=de.single(i.from,i.to),o=t.state.facet(Nd);return t.dispatch({selection:n,effects:[m_(t,i),o.scrollToMatch(n.main,t)],userEvent:"select.search"}),BtA(t),!0}),dy=Mf((t,{query:e})=>{let{state:A}=t,{from:i}=A.selection.main,n=e.prevMatch(A,i,i);if(!n)return!1;let o=de.single(n.from,n.to),a=t.state.facet(Nd);return t.dispatch({selection:o,effects:[m_(t,n),a.scrollToMatch(o.main,t)],userEvent:"select.search"}),BtA(t),!0}),fMA=Mf((t,{query:e})=>{let A=e.matchAll(t.state,1e3);return!A||!A.length?!1:(t.dispatch({selection:de.create(A.map(i=>de.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),mMA=({state:t,dispatch:e})=>{let A=t.selection;if(A.ranges.length>1||A.main.empty)return!1;let{from:i,to:n}=A.main,o=[],a=0;for(let r=new GI(t.doc,t.sliceDoc(i,n));!r.next().done;){if(o.length>1e3)return!1;r.value.from==i&&(a=o.length),o.push(de.range(r.value.from,r.value.to))}return e(t.update({selection:de.create(o,a),userEvent:"select.search.matches"})),!0},gtA=Mf((t,{query:e})=>{let{state:A}=t,{from:i,to:n}=A.selection.main;if(A.readOnly)return!1;let o=e.nextMatch(A,i,i);if(!o)return!1;let a=o,r=[],s,g,l=[];a.from==i&&a.to==n&&(g=A.toText(e.getReplacement(a)),r.push({from:a.from,to:a.to,insert:g}),a=e.nextMatch(A,a.from,a.to),l.push(ii.announce.of(A.phrase("replaced match on line $",A.doc.lineAt(i).number)+".")));let C=t.state.changes(r);return a&&(s=de.single(a.from,a.to).map(C),l.push(m_(t,a)),l.push(A.facet(Nd).scrollToMatch(s.main,t))),t.dispatch({changes:C,selection:s,effects:l,userEvent:"input.replace"}),!0}),pMA=Mf((t,{query:e})=>{if(t.state.readOnly)return!1;let A=e.matchAll(t.state,1e9).map(n=>{let{from:o,to:a}=n;return{from:o,to:a,insert:e.getReplacement(n)}});if(!A.length)return!1;let i=t.state.phrase("replaced $ matches",A.length)+".";return t.dispatch({changes:A,effects:ii.announce.of(i),userEvent:"input.replace.all"}),!0});function f_(t){return t.state.facet(Nd).createPanel(t)}function B_(t,e){var A,i,n,o,a;let r=t.selection.main,s=r.empty||r.to>r.from+100?"":t.sliceDoc(r.from,r.to);if(e&&!s)return e;let g=t.facet(Nd);return new gy({search:((A=e?.literal)!==null&&A!==void 0?A:g.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:g.caseSensitive,literal:(n=e?.literal)!==null&&n!==void 0?n:g.literal,regexp:(o=e?.regexp)!==null&&o!==void 0?o:g.regexp,wholeWord:(a=e?.wholeWord)!==null&&a!==void 0?a:g.wholeWord})}function dtA(t){let e=lf(t,f_);return e&&e.dom.querySelector("[main-field]")}function BtA(t){let e=dtA(t);e&&e==t.root.activeElement&&e.select()}var By=t=>{let e=t.state.field(LI,!1);if(e&&e.panel){let A=dtA(t);if(A&&A!=t.root.activeElement){let i=B_(t.state,e.query.spec);i.valid&&t.dispatch({effects:bf.of(i)}),A.focus(),A.select()}}else t.dispatch({effects:[u_.of(!0),e?bf.of(B_(t.state,e.query.spec)):Hi.appendConfig.of(Q_)]});return!0},Ey=t=>{let e=t.state.field(LI,!1);if(!e||!e.panel)return!1;let A=lf(t,f_);return A&&A.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:u_.of(!1)}),!0},EtA=[{key:"Mod-f",run:By,scope:"editor search-panel"},{key:"F3",run:Iy,shift:dy,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:Iy,shift:dy,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Ey,scope:"editor search-panel"},{key:"Mod-Shift-l",run:mMA},{key:"Mod-Alt-g",run:iMA},{key:"Mod-d",run:CMA,preventDefault:!0}],E_=class{constructor(e){this.view=e;let A=this.query=e.state.field(LI).query.spec;this.commit=this.commit.bind(this),this.searchField=io("input",{value:A.search,placeholder:Vg(e,"Find"),"aria-label":Vg(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=io("input",{value:A.replace,placeholder:Vg(e,"Replace"),"aria-label":Vg(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=io("input",{type:"checkbox",name:"case",form:"",checked:A.caseSensitive,onchange:this.commit}),this.reField=io("input",{type:"checkbox",name:"re",form:"",checked:A.regexp,onchange:this.commit}),this.wordField=io("input",{type:"checkbox",name:"word",form:"",checked:A.wholeWord,onchange:this.commit});function i(n,o,a){return io("button",{class:"cm-button",name:n,onclick:o,type:"button"},a)}this.dom=io("div",{onkeydown:n=>this.keydown(n),class:"cm-search"},[this.searchField,i("next",()=>Iy(e),[Vg(e,"next")]),i("prev",()=>dy(e),[Vg(e,"previous")]),i("select",()=>fMA(e),[Vg(e,"all")]),io("label",null,[this.caseField,Vg(e,"match case")]),io("label",null,[this.reField,Vg(e,"regexp")]),io("label",null,[this.wordField,Vg(e,"by word")]),...e.state.readOnly?[]:[io("br"),this.replaceField,i("replace",()=>gtA(e),[Vg(e,"replace")]),i("replaceAll",()=>pMA(e),[Vg(e,"replace all")])],io("button",{name:"close",onclick:()=>Ey(e),"aria-label":Vg(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new gy({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:bf.of(e)}))}keydown(e){eAA(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?dy:Iy)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),gtA(this.view))}update(e){for(let A of e.transactions)for(let i of A.effects)i.is(bf)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Nd).top}};function Vg(t,e){return t.state.phrase(e)}var iy=30,ny=/[\s\.,:;?!]/;function m_(t,{from:e,to:A}){let i=t.state.doc.lineAt(e),n=t.state.doc.lineAt(A).to,o=Math.max(i.from,e-iy),a=Math.min(n,A+iy),r=t.state.sliceDoc(o,a);if(o!=i.from){for(let s=0;sr.length-iy;s--)if(!ny.test(r[s-1])&&ny.test(r[s])){r=r.slice(0,s);break}}return ii.announce.of(`${t.state.phrase("current match")}. ${r} ${t.state.phrase("on line")} ${i.number}.`)}var wMA=ii.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Q_=[LI,bc.low(uMA),wMA];var hy=class{constructor(e,A,i,n){this.state=e,this.pos=A,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let A=xr(this.state).resolveInner(this.pos,-1);for(;A&&e.indexOf(A.name)<0;)A=A.parent;return A?{from:A.from,to:this.pos,text:this.state.sliceDoc(A.from,this.pos),type:A.type}:null}matchBefore(e){let A=this.state.doc.lineAt(this.pos),i=Math.max(A.from,this.pos-250),n=A.text.slice(i-A.from,this.pos-A.from),o=n.search(DtA(e,!1));return o<0?null:{from:i+o,to:this.pos,text:n.slice(o)}}get aborted(){return this.abortListeners==null}addEventListener(e,A,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(A),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function QtA(t){let e=Object.keys(t).join(""),A=/\w/.test(e);return A&&(e=e.replace(/\w/g,"")),`[${A?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function DMA(t){let e=Object.create(null),A=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let o=1;otypeof n=="string"?{label:n}:n),[A,i]=e.every(n=>/^\w+$/.test(n.label))?[/\w*$/,/\w+$/]:DMA(e);return n=>{let o=n.matchBefore(i);return o||n.explicit?{from:o?o.from:n.pos,options:e,validFor:A}:null}}var uy=class{constructor(e,A,i,n){this.completion=e,this.source=A,this.match=i,this.score=n}};function _d(t){return t.selection.main.from}function DtA(t,e){var A;let{source:i}=t,n=e&&i[0]!="^",o=i[i.length-1]!="$";return!n&&!o?t:new RegExp(`${n?"^":""}(?:${i})${o?"$":""}`,(A=t.flags)!==null&&A!==void 0?A:t.ignoreCase?"i":"")}var ytA=hg.define();function vMA(t,e,A,i){let{main:n}=t.selection,o=A-n.from,a=i-n.from;return Ge(cA({},t.changeByRange(r=>{if(r!=n&&A!=i&&t.sliceDoc(r.from+o,r.from+a)!=t.sliceDoc(A,i))return{range:r};let s=t.toText(e);return{changes:{from:r.from+o,to:i==n.from?r.to:r.from+a,insert:s},range:de.cursor(r.from+o+s.length)}})),{scrollIntoView:!0,userEvent:"input.complete"})}var htA=new WeakMap;function bMA(t){if(!Array.isArray(t))return t;let e=htA.get(t);return e||htA.set(t,e=yMA(t)),e}var fy=Hi.define(),kf=Hi.define(),y_=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let A=0;A=48&&D<=57||D>=97&&D<=122?2:D>=65&&D<=90?1:0:(F=H3(D))!=F.toLowerCase()?1:F!=F.toUpperCase()?2:0;(!b||_==1&&Q||M==0&&_!=0)&&(A[C]==D||i[C]==D&&(I=!0)?a[C++]=b:a.length&&(f=!1)),M=_,b+=Og(D)}return C==s&&a[0]==0&&f?this.result(-100+(I?-200:0),a,e):d==s&&B==0?this.ret(-200-e.length+(E==e.length?0:-100),[0,E]):r>-1?this.ret(-700-e.length,[r,r+this.pattern.length]):d==s?this.ret(-900-e.length,[B,E]):C==s?this.result(-100+(I?-200:0)+-700+(f?0:-1100),a,e):A.length==2?null:this.result((n[0]?-700:0)+-200+-1100,n,e)}result(e,A,i){let n=[],o=0;for(let a of A){let r=a+(this.astral?Og(Zr(i,a)):1);o&&n[o-1]==a?n[o-1]=r:(n[o++]=a,n[o++]=r)}return this.ret(e-i.length,n)}},v_=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:MMA,filterStrict:!1,compareCompletions:(e,A)=>(e.sortText||e.label).localeCompare(A.sortText||A.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,A)=>e&&A,closeOnBlur:(e,A)=>e&&A,icons:(e,A)=>e&&A,tooltipClass:(e,A)=>i=>utA(e(i),A(i)),optionClass:(e,A)=>i=>utA(e(i),A(i)),addToOptions:(e,A)=>e.concat(A),filterStrict:(e,A)=>e||A})}});function utA(t,e){return t?e?t+" "+e:t:e}function MMA(t,e,A,i,n,o){let a=t.textDirection==mo.RTL,r=a,s=!1,g="top",l,C,I=e.left-n.left,d=n.right-e.right,B=i.right-i.left,E=i.bottom-i.top;if(r&&I=E||b>e.top?l=A.bottom-e.top:(g="bottom",l=e.bottom-A.top)}let Q=(e.bottom-e.top)/o.offsetHeight,f=(e.right-e.left)/o.offsetWidth;return{style:`${g}: ${l/Q}px; max-width: ${C/f}px`,class:"cm-completionInfo-"+(s?a?"left-narrow":"right-narrow":r?"left":"right")}}function kMA(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(A){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),A.type&&i.classList.add(...A.type.split(/\s+/g).map(n=>"cm-completionIcon-"+n)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(A,i,n,o){let a=document.createElement("span");a.className="cm-completionLabel";let r=A.displayLabel||A.label,s=0;for(let g=0;gs&&a.appendChild(document.createTextNode(r.slice(s,l)));let I=a.appendChild(document.createElement("span"));I.appendChild(document.createTextNode(r.slice(l,C))),I.className="cm-completionMatchedText",s=C}return sA.position-i.position).map(A=>A.render)}function p_(t,e,A){if(t<=A)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let n=Math.floor(e/A);return{from:n*A,to:(n+1)*A}}let i=Math.floor((t-e)/A);return{from:t-(i+1)*A,to:t-i*A}}var b_=class{constructor(e,A,i){this.view=e,this.stateField=A,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:s=>this.placeInfo(s),key:this},this.space=null,this.currentClass="";let n=e.state.field(A),{options:o,selected:a}=n.open,r=e.state.facet(Rr);this.optionContent=kMA(r),this.optionClass=r.optionClass,this.tooltipClass=r.tooltipClass,this.range=p_(o.length,a,r.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",s=>{let{options:g}=e.state.field(A).open;for(let l=s.target,C;l&&l!=this.dom;l=l.parentNode)if(l.nodeName=="LI"&&(C=/-(\d+)$/.exec(l.id))&&+C[1]{let g=e.state.field(this.stateField,!1);g&&g.tooltip&&e.state.facet(Rr).closeOnBlur&&s.relatedTarget!=e.contentDOM&&e.dispatch({effects:kf.of(null)})}),this.showOptions(o,n.id)}mount(){this.updateSel()}showOptions(e,A){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,A,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var A;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:o,selected:a,disabled:r}=i.open;(!n.open||n.open.options!=o)&&(this.range=p_(o.length,a,e.state.facet(Rr).maxRenderedOptions),this.showOptions(o,i.id)),this.updateSel(),r!=((A=n.open)===null||A===void 0?void 0:A.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!r)}}updateTooltipClass(e){let A=this.tooltipClass(e);if(A!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of A.split(" "))i&&this.dom.classList.add(i);this.currentClass=A}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),A=e.open;(A.selected>-1&&A.selected=this.range.to)&&(this.range=p_(A.options.length,A.selected,this.view.state.facet(Rr).maxRenderedOptions),this.showOptions(A.options,e.id));let i=this.updateSelectedOption(A.selected);if(i){this.destroyInfo();let{completion:n}=A.options[A.selected],{info:o}=n;if(!o)return;let a=typeof o=="string"?document.createTextNode(o):o(n);if(!a)return;"then"in a?a.then(r=>{r&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(r,n)}).catch(r=>Sr(this.view.state,r,"completion info")):(this.addInfoPane(a,n),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,A){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:n,destroy:o}=e;i.appendChild(n),this.infoDestroy=o||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let A=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)i.nodeName!="LI"||!i.id?n--:n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),A=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return A&&xMA(this.list,A),A}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let A=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),o=this.space;if(!o){let a=this.dom.ownerDocument.documentElement;o={left:0,top:0,right:a.clientWidth,bottom:a.clientHeight}}return n.top>Math.min(o.bottom,A.bottom)-10||n.bottom{a.target==n&&a.preventDefault()});let o=null;for(let a=i.from;ai.from||i.from==0))if(o=I,typeof g!="string"&&g.header)n.appendChild(g.header(g));else{let d=n.appendChild(document.createElement("completion-section"));d.textContent=I}}let l=n.appendChild(document.createElement("li"));l.id=A+"-"+a,l.setAttribute("role","option");let C=this.optionClass(r);C&&(l.className=C);for(let I of this.optionContent){let d=I(r,this.view.state,this.view,s);d&&l.appendChild(d)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew b_(A,t,e)}function xMA(t,e){let A=t.getBoundingClientRect(),i=e.getBoundingClientRect(),n=A.height/t.offsetHeight;i.topA.bottom&&(t.scrollTop+=(i.bottom-A.bottom)/n)}function ftA(t){return(t.boost||0)*100+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}function RMA(t,e){let A=[],i=null,n=null,o=l=>{A.push(l);let{section:C}=l.completion;if(C){i||(i=[]);let I=typeof C=="string"?C:C.name;i.some(d=>d.name==I)||i.push(typeof C=="string"?{name:I}:C)}},a=e.facet(Rr);for(let l of t)if(l.hasResult()){let C=l.result.getMatch;if(l.result.filter===!1)for(let I of l.result.options)o(new uy(I,l.source,C?C(I):[],1e9-A.length));else{let I=e.sliceDoc(l.from,l.to),d,B=a.filterStrict?new v_(I):new y_(I);for(let E of l.result.options)if(d=B.match(E.label)){let Q=E.displayLabel?C?C(E,d.matched):[]:d.matched,f=d.score+(E.boost||0);if(o(new uy(E,l.source,Q,f)),typeof E.section=="object"&&E.section.rank==="dynamic"){let{name:b}=E.section;n||(n=Object.create(null)),n[b]=Math.max(f,n[b]||-1e9)}}}}if(i){let l=Object.create(null),C=0,I=(d,B)=>(d.rank==="dynamic"&&B.rank==="dynamic"?n[B.name]-n[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof B.rank=="number"?B.rank:1e9)||(d.nameI.score-C.score||g(C.completion,I.completion))){let C=l.completion;!s||s.label!=C.label||s.detail!=C.detail||s.type!=null&&C.type!=null&&s.type!=C.type||s.apply!=C.apply||s.boost!=C.boost?r.push(l):ftA(l.completion)>ftA(s)&&(r[r.length-1]=l),s=l.completion}return r}var M_=class t{constructor(e,A,i,n,o,a){this.options=e,this.attrs=A,this.tooltip=i,this.timestamp=n,this.selected=o,this.disabled=a}setSelected(e,A){return e==this.selected||e>=this.options.length?this:new t(this.options,mtA(A,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,A,i,n,o,a){if(n&&!a&&e.some(g=>g.isPending))return n.setDisabled();let r=RMA(e,A);if(!r.length)return n&&e.some(g=>g.isPending)?n.setDisabled():null;let s=A.facet(Rr).selectOnOpen?0:-1;if(n&&n.selected!=s&&n.selected!=-1){let g=n.options[n.selected].completion;for(let l=0;ll.hasResult()?Math.min(g,l.from):g,1e8),create:KMA,above:o.aboveCursor},n?n.timestamp:Date.now(),s,!1)}map(e){return new t(this.options,this.attrs,Ge(cA({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new t(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},k_=class t{constructor(e,A,i){this.active=e,this.id=A,this.open=i}static start(){return new t(LMA,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:A}=e,i=A.facet(Rr),o=(i.override||A.languageDataAt("autocomplete",_d(A)).map(bMA)).map(s=>(this.active.find(l=>l.source==s)||new HC(s,this.active.some(l=>l.state!=0)?1:0)).update(e,i));o.length==this.active.length&&o.every((s,g)=>s==this.active[g])&&(o=this.active);let a=this.open,r=e.effects.some(s=>s.is(x_));a&&e.docChanged&&(a=a.map(e.changes)),e.selection||o.some(s=>s.hasResult()&&e.changes.touchesRange(s.from,s.to))||!NMA(o,this.active)||r?a=M_.build(o,A,this.id,a,i,r):a&&a.disabled&&!o.some(s=>s.isPending)&&(a=null),!a&&o.every(s=>!s.isPending)&&o.some(s=>s.hasResult())&&(o=o.map(s=>s.hasResult()?new HC(s.source,0):s));for(let s of e.effects)s.is(btA)&&(a=a&&a.setSelected(s.value,this.id));return o==this.active&&a==this.open?this:new t(o,this.id,a)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?FMA:_MA}};function NMA(t,e){if(t==e)return!0;for(let A=0,i=0;;){for(;A-1&&(A["aria-activedescendant"]=t+"-"+e),A}var LMA=[];function vtA(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(ytA);if(i&&e.activateOnCompletion(i))return 12}let A=t.isUserEvent("input.type");return A&&e.activateOnTyping?5:A?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}var HC=class t{constructor(e,A,i=!1){this.source=e,this.state=A,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,A){let i=vtA(e,A),n=this;(i&8||i&16&&this.touches(e))&&(n=new t(n.source,0)),i&4&&n.state==0&&(n=new t(this.source,1)),n=n.updateFor(e,i);for(let o of e.effects)if(o.is(fy))n=new t(n.source,1,o.value);else if(o.is(kf))n=new t(n.source,0);else if(o.is(x_))for(let a of o.value)a.source==n.source&&(n=a);return n}updateFor(e,A){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(_d(e.state))}},my=class t extends HC{constructor(e,A,i,n,o,a){super(e,3,A),this.limit=i,this.result=n,this.from=o,this.to=a}hasResult(){return!0}updateFor(e,A){var i;if(!(A&3))return this.map(e.changes);let n=this.result;n.map&&!e.changes.empty&&(n=n.map(n,e.changes));let o=e.changes.mapPos(this.from),a=e.changes.mapPos(this.to,1),r=_d(e.state);if(r>a||!n||A&2&&(_d(e.startState)==this.from||rA.map(e))}}),btA=Hi.define(),pg=va.define({create(){return k_.start()},update(t,e){return t.update(e)},provide:t=>[xQ.from(t,e=>e.tooltip),ii.contentAttributes.from(t,e=>e.attrs)]});function R_(t,e){let A=e.completion.apply||e.completion.label,i=t.state.field(pg).active.find(n=>n.source==e.source);return i instanceof my?(typeof A=="string"?t.dispatch(Ge(cA({},vMA(t.state,A,i.from,i.to)),{annotations:ytA.of(e.completion)})):A(t,e.completion,i.from,i.to),!0):!1}var KMA=SMA(pg,R_);function Qy(t,e="option"){return A=>{let i=A.state.field(pg,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+n*(t?1:-1):t?0:a-1;return r<0?r=e=="page"?0:a-1:r>=a&&(r=e=="page"?a-1:0),A.dispatch({effects:btA.of(r)}),!0}}var UMA=t=>{let e=t.state.field(pg,!1);return t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampt.state.field(pg,!1)?(t.dispatch({effects:fy.of(!0)}),!0):!1,JMA=t=>{let e=t.state.field(pg,!1);return!e||!e.active.some(A=>A.state!=0)?!1:(t.dispatch({effects:kf.of(null)}),!0)},S_=class{constructor(e,A){this.active=e,this.context=A,this.time=Date.now(),this.updates=[],this.done=void 0}},YMA=50,TMA=1e3,HMA=Go.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(pg).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(pg),A=t.state.facet(Rr);if(!t.selectionSet&&!t.docChanged&&t.startState.field(pg)==e)return;let i=t.transactions.some(o=>{let a=vtA(o,A);return a&8||(o.selection||o.docChanged)&&!(a&3)});for(let o=0;oYMA&&Date.now()-a.time>TMA){for(let r of a.context.abortListeners)try{r()}catch(s){Sr(this.view.state,s)}a.context.abortListeners=null,this.running.splice(o--,1)}else a.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(o=>o.effects.some(a=>a.is(fy)))&&(this.pendingStart=!0);let n=this.pendingStart?50:A.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(o=>o.isPending&&!this.running.some(a=>a.active.source==o.source))?setTimeout(()=>this.startUpdate(),n):-1,this.composing!=0)for(let o of t.transactions)o.isUserEvent("input.type")?this.composing=2:this.composing==2&&o.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(pg);for(let A of e.active)A.isPending&&!this.running.some(i=>i.active.source==A.source)&&this.startQuery(A);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}startQuery(t){let{state:e}=this.view,A=_d(e),i=new hy(e,A,t.explicit,this.view),n=new S_(t,i);this.running.push(n),Promise.resolve(t.source(i)).then(o=>{n.context.aborted||(n.done=o||null,this.scheduleAccept())},o=>{this.view.dispatch({effects:kf.of(null)}),Sr(this.view.state,o)})}scheduleAccept(){this.running.every(t=>t.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],A=this.view.state.facet(Rr),i=this.view.state.field(pg);for(let n=0;nr.source==o.active.source);if(a&&a.isPending)if(o.done==null){let r=new HC(o.active.source,0);for(let s of o.updates)r=r.update(s,A);r.isPending||e.push(r)}else this.startQuery(a)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:x_.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(pg,!1);if(e&&e.tooltip&&this.view.state.facet(Rr).closeOnBlur){let A=e.open&&BF(this.view,e.open.tooltip);(!A||!A.dom.contains(t.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:kf.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:fy.of(!1)}),20),this.composing=0}}}),zMA=typeof navigator=="object"&&/Win/.test(navigator.platform),OMA=bc.highest(ii.domEventHandlers({keydown(t,e){let A=e.state.field(pg,!1);if(!A||!A.open||A.open.disabled||A.open.selected<0||t.key.length>1||t.ctrlKey&&!(zMA&&t.altKey)||t.metaKey)return!1;let i=A.open.options[A.open.selected],n=A.active.find(a=>a.source==i.source),o=i.completion.commitCharacters||n.result.commitCharacters;return o&&o.indexOf(t.key)>-1&&R_(e,i),!1}})),PMA=ii.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});var Sf={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Fd=Hi.define({map(t,e){let A=e.mapPos(t,-1,qr.TrackAfter);return A??void 0}}),N_=new class extends kl{};N_.startSide=1;N_.endSide=-1;var MtA=va.define({create(){return to.empty},update(t,e){if(t=t.map(e.changes),e.selection){let A=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:i=>i>=A.from&&i<=A.to})}for(let A of e.effects)A.is(Fd)&&(t=t.update({add:[N_.range(A.value,A.value+1)]}));return t}});function ktA(){return[qMA,MtA]}var D_="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function StA(t){for(let e=0;e{if((jMA?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let n=t.state.selection.main;if(i.length>2||i.length==2&&Og(Zr(i,0))==1||e!=n.from||A!=n.to)return!1;let o=WMA(t.state,i);return o?(t.dispatch(o),!0):!1}),VMA=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=xtA(t,t.selection.main.head).brackets||Sf.brackets,n=null,o=t.changeByRange(a=>{if(a.empty){let r=ZMA(t.doc,a.head);for(let s of i)if(s==r&&py(t.doc,a.head)==StA(Zr(s,0)))return{changes:{from:a.head-s.length,to:a.head+s.length},range:de.cursor(a.head-s.length)}}return{range:n=a}});return n||e(t.update(o,{scrollIntoView:!0,userEvent:"delete.backward"})),!n},RtA=[{key:"Backspace",run:VMA}];function WMA(t,e){let A=xtA(t,t.selection.main.head),i=A.brackets||Sf.brackets;for(let n of i){let o=StA(Zr(n,0));if(e==n)return o==n?AkA(t,n,i.indexOf(n+n+n)>-1,A):XMA(t,n,o,A.before||Sf.before);if(e==o&&NtA(t,t.selection.main.from))return $MA(t,n,o)}return null}function NtA(t,e){let A=!1;return t.field(MtA).between(0,t.doc.length,i=>{i==e&&(A=!0)}),A}function py(t,e){let A=t.sliceString(e,e+2);return A.slice(0,Og(Zr(A,0)))}function ZMA(t,e){let A=t.sliceString(e-2,e);return Og(Zr(A,0))==A.length?A:A.slice(1)}function XMA(t,e,A,i){let n=null,o=t.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:A,from:a.to}],effects:Fd.of(a.to+e.length),range:de.range(a.anchor+e.length,a.head+e.length)};let r=py(t.doc,a.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+A,from:a.head},effects:Fd.of(a.head+e.length),range:de.cursor(a.head+e.length)}:{range:n=a}});return n?null:t.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function $MA(t,e,A){let i=null,n=t.changeByRange(o=>o.empty&&py(t.doc,o.head)==A?{changes:{from:o.head,to:o.head+A.length,insert:A},range:de.cursor(o.head+A.length)}:i={range:o});return i?null:t.update(n,{scrollIntoView:!0,userEvent:"input.type"})}function AkA(t,e,A,i){let n=i.stringPrefixes||Sf.stringPrefixes,o=null,a=t.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:e,from:r.to}],effects:Fd.of(r.to+e.length),range:de.range(r.anchor+e.length,r.head+e.length)};let s=r.head,g=py(t.doc,s),l;if(g==e){if(ptA(t,s))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(NtA(t,s)){let I=A&&t.sliceDoc(s,s+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:s,to:s+I.length,insert:I},range:de.cursor(s+I.length)}}}else{if(A&&t.sliceDoc(s-2*e.length,s)==e+e&&(l=wtA(t,s-2*e.length,n))>-1&&ptA(t,l))return{changes:{insert:e+e+e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(t.charCategorizer(s)(g)!=Lo.Word&&wtA(t,s,n)>-1&&!ekA(t,s,e,n))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)}}return{range:o=r}});return o?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function ptA(t,e){let A=xr(t).resolveInner(e+1);return A.parent&&A.from==e}function ekA(t,e,A,i){let n=xr(t).resolveInner(e,-1),o=i.reduce((a,r)=>Math.max(a,r.length),0);for(let a=0;a<5;a++){let r=t.sliceDoc(n.from,Math.min(n.to,n.from+A.length+o)),s=r.indexOf(A);if(!s||s>-1&&i.indexOf(r.slice(0,s))>-1){let l=n.firstChild;for(;l&&l.from==n.from&&l.to-l.from>A.length+s;){if(t.sliceDoc(l.to-A.length,l.to)==A)return!1;l=l.firstChild}return!0}let g=n.to==e&&n.parent;if(!g)break;n=g}return!1}function wtA(t,e,A){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=Lo.Word)return e;for(let n of A){let o=e-n.length;if(t.sliceDoc(o,e)==n&&i(t.sliceDoc(o-1,o))!=Lo.Word)return o}return-1}function FtA(t={}){return[OMA,pg,Rr.of(t),HMA,tkA,PMA]}var F_=[{key:"Ctrl-Space",run:w_},{mac:"Alt-`",run:w_},{mac:"Alt-i",run:w_},{key:"Escape",run:JMA},{key:"ArrowDown",run:Qy(!0)},{key:"ArrowUp",run:Qy(!1)},{key:"PageDown",run:Qy(!0,"page")},{key:"PageUp",run:Qy(!1,"page")},{key:"Enter",run:UMA}],tkA=bc.highest(SQ.computeN([Rr],t=>t.facet(Rr).defaultKeymap?[F_]:[]));function ikA(t,e=t.state){let A=new Set;for(let{from:i,to:n}of t.visibleRanges){let o=i;for(;o<=n;){let a=e.doc.lineAt(o);A.has(a)||A.add(a),o=a.to+1}}return A}function __(t){let e=t.selection.main.head;return t.doc.lineAt(e)}function _tA(t,e){let A=0;A:for(let i=0;i=o.level&&this.markerType!=="codeOnly"?this.set(e,0,n.level):n.empty&&n.level===0&&o.level!==0?this.set(e,0,0):o.level>n.level?this.set(e,0,n.level+1):this.set(e,0,o.level)}let A=_tA(e.text,this.state.tabSize),i=Math.floor(A/this.unitWidth);return this.set(e,A,i)}closestNonEmpty(e,A){let i=e.number+A;for(;A===-1?i>=1:i<=this.state.doc.lines;){if(this.has(i)){let a=this.get(i);if(!a.empty)return a}let o=this.state.doc.line(i);if(o.text.trim().length){let a=_tA(o.text,this.state.tabSize),r=Math.floor(a/this.unitWidth);return this.set(o,a,r)}i+=A}let n=this.state.doc.line(A===-1?1:this.state.doc.lines);return this.set(n,0,0)}findAndSetActiveLines(){let e=__(this.state);if(!this.has(e))return;let A=this.get(e);if(this.has(A.line.number+1)){let o=this.get(A.line.number+1);o.level>A.level&&(A=o)}if(this.has(A.line.number-1)){let o=this.get(A.line.number-1);o.level>A.level&&(A=o)}if(A.level===0)return;A.active=A.level;let i,n;for(i=A.line.number;i>1;i--){if(!this.has(i-1))continue;let o=this.get(i-1);if(o.level0&&s.push(wy("--indent-marker-bg-color",i,e,r,g)),s.push(wy("--indent-marker-active-bg-color",n,e,a-1,1)),a!==o&&s.push(wy("--indent-marker-bg-color",i,e,a,o-a))}else s.push(wy("--indent-marker-bg-color",i,e,r,o-r));return s.join(",")}var G_=class{constructor(e){this.view=e,this.unitWidth=_c(e.state),this.currentLineNumber=__(e.state).number,this.generate(e.state)}update(e){let A=_c(e.state),i=A!==this.unitWidth;i&&(this.unitWidth=A);let n=__(e.state).number,o=n!==this.currentLineNumber;this.currentLineNumber=n;let a=e.state.facet(Dy).highlightActiveBlock&&o;(e.docChanged||e.viewportChanged||i||a)&&this.generate(e.state)}generate(e){let A=new Wr,i=ikA(this.view,e),{hideFirstIndent:n,markerType:o,thickness:a,activeThickness:r}=e.facet(Dy),s=new L_(i,e,this.unitWidth,o);for(let g of i){let l=s.get(g.number);if(!l?.level)continue;let C=okA(l,this.unitWidth,n,a,r);A.add(g.from,g.from,yt.line({class:"cm-indent-markers",attributes:{style:`--indent-markers: ${C}`}}))}this.decorations=A.finish()}};function LtA(t={}){return[Dy.of(t),nkA(t.colors),Go.fromClass(G_,{decorations:e=>e.decorations})]}var akA=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"],rkA=["mainAxis","crossAxis","limiter"];function AnA(t,e){if(t==null)return{};var A,i,n=(function(a,r){if(a==null)return{};var s={};for(var g in a)if({}.hasOwnProperty.call(a,g)){if(r.indexOf(g)!==-1)continue;s[g]=a[g]}return s})(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i{};function EkA(t){return t()}function CL(t){for(var e=0;e{t=A,e=i}),resolve:t,reject:e}}var QkA=1<<24,vh=16,uv=32,anA=64,jL=128,zc=512,As=1024,Oc=2048,r2=4096,j0=8192,bh=16384,qL=32768,Vd=65536,hkA=1<<17,rnA=1<<18,snA=1<<19,PC=1<<25,Xy=32768,IL=1<<21,XI=1<<23,q0=Symbol("$state"),gnA=Symbol("legacy props"),ukA=Symbol(""),Ah=new class extends Error{constructor(){super(...arguments),H0(this,"name","StaleReactionError"),H0(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function om(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function lnA(t){return t===this.v}function cnA(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function CnA(t){return!cnA(t,this.v)}var co=null;function Ih(t){co=t}function r1(t){return InA().get(t)}function St(t){co={p:co,i:!1,c:null,e:null,s:t,x:null,l:yh&&!(arguments.length>1&&arguments[1]!==void 0&&arguments[1])?{s:null,u:null,$:[]}:null}}function xt(t){var e=co,A=e.e;if(A!==null)for(var i of(e.e=null,A))SnA(i);return t!==void 0&&(e.x=t),e.i=!0,co=e.p,t??{}}function Mh(){return!yh||co!==null&&co.l===null}function InA(t){var e,A;return co===null&&om(),(A=(e=co).c)!==null&&A!==void 0?A:e.c=new Map((function(i){for(var n=i.p;n!==null;){var o=n.c;if(o!==null)return o;n=n.p}return null})(co)||void 0)}var Hd=[];function dnA(){var t=Hd;Hd=[],CL(t)}function Wd(t){if(Hd.length===0&&!Tf){var e=Hd;queueMicrotask(()=>{e===Hd&&dnA()})}Hd.push(t)}function fkA(){for(;Hd.length>0;)dnA()}function BnA(t){var e=jn;if(e===null)return Pn.f|=XI,t;if((e.f&qL)===0){if((e.f&jL)===0)throw t;e.b.error(t)}else dh(t,e)}function dh(t,e){for(;e!==null;){if((e.f&jL)!==0)try{return void e.b.error(t)}catch(A){t=A}e=e.parent}throw t}var zy=new Set,Uo=null,Yf=null,Jl=null,Ul=[],fv=null,dL=!1,Tf=!1,$y=new WeakMap,yy=new WeakMap,Ud=new WeakMap,Jd=new WeakMap,vy=new WeakMap,Oy=new WeakMap,Py=new WeakMap,Zg=new WeakSet,Zd=class t{constructor(){enA(this,Zg),H0(this,"committed",!1),H0(this,"current",new Map),H0(this,"previous",new Map),po(this,$y,new Set),po(this,yy,new Set),po(this,Ud,0),po(this,Jd,0),po(this,vy,null),po(this,Oy,[]),po(this,Py,[]),H0(this,"skipped_effects",new Set),H0(this,"is_fork",!1)}is_deferred(){return this.is_fork||we(Jd,this)>0}process(e){Ul=[],Yf=null,this.apply();var A,i={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var n of e)ir(Zg,this,EnA).call(this,n,i);this.is_fork||ir(Zg,this,mkA).call(this),this.is_deferred()?(ir(Zg,this,ah).call(this,i.effects),ir(Zg,this,ah).call(this,i.render_effects),ir(Zg,this,ah).call(this,i.block_effects)):(Yf=this,Uo=null,TtA(i.render_effects),TtA(i.effects),Yf=null,(A=we(vy,this))===null||A===void 0||A.resolve()),Jl=null}capture(e,A){var i;this.previous.has(e)||this.previous.set(e,A),(e.f&XI)===0&&(this.current.set(e,e.v),(i=Jl)===null||i===void 0||i.set(e,e.v))}activate(){Uo=this,this.apply()}deactivate(){Uo===this&&(Uo=null,Jl=null)}flush(){if(this.activate(),Ul.length>0){if(hnA(),Uo!==null&&Uo!==this)return}else we(Ud,this)===0&&this.process([]);this.deactivate()}discard(){for(var e of we(yy,this))e(this);we(yy,this).clear()}increment(e){Cn(Ud,this,we(Ud,this)+1),e&&Cn(Jd,this,we(Jd,this)+1)}decrement(e){Cn(Ud,this,we(Ud,this)-1),e&&Cn(Jd,this,we(Jd,this)-1),this.revive()}revive(){for(var e of we(Oy,this))ts(e,Oc),Xd(e);for(var A of we(Py,this))ts(A,r2),Xd(A);Cn(Oy,this,[]),Cn(Py,this,[]),this.flush()}oncommit(e){we($y,this).add(e)}ondiscard(e){we(yy,this).add(e)}settled(){var e;return((e=we(vy,this))!==null&&e!==void 0?e:Cn(vy,this,onA())).promise}static ensure(){if(Uo===null){var e=Uo=new t;zy.add(Uo),Tf||t.enqueue(()=>{Uo===e&&e.flush()})}return Uo}static enqueue(e){Wd(e)}apply(){}};function EnA(t,e){t.f^=As;for(var A=t.first;A!==null;){var i,n=A.f,o=!!(96&n),a=o&&(n&As)!==0||(n&j0)!==0||this.skipped_effects.has(A);if((A.f&jL)!==0&&(i=A.b)!==null&&i!==void 0&&i.is_pending()&&(e={parent:e,effect:A,effects:[],render_effects:[],block_effects:[]}),!a&&A.fn!==null){o?A.f^=As:4&n?e.effects.push(A):xh(A)&&((A.f&vh)!==0&&e.block_effects.push(A),Qh(A));var r=A.first;if(r!==null){A=r;continue}}var s=A.parent;for(A=A.next;A===null&&s!==null;)s===e.effect&&(ir(Zg,this,ah).call(this,e.effects),ir(Zg,this,ah).call(this,e.render_effects),ir(Zg,this,ah).call(this,e.block_effects),e=e.parent),A=s.next,s=s.parent}}function ah(t){for(var e of t)((e.f&Oc)!==0?we(Oy,this):we(Py,this)).push(e),ir(Zg,this,QnA).call(this,e.deps),ts(e,As)}function QnA(t){if(t!==null)for(var e of t)2&e.f&&(e.f&Xy)!==0&&(e.f^=Xy,ir(Zg,this,QnA).call(this,e.deps))}function mkA(){if(we(Jd,this)===0){for(var t of we($y,this))t();we($y,this).clear()}we(Ud,this)===0&&ir(Zg,this,pkA).call(this)}function pkA(){if(zy.size>1){this.previous.clear();var t=Jl,e=!0,A={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var i of zy)if(i!==this){var n=[];for(var[o,a]of this.current){if(i.current.has(o)){if(!e||a===i.current.get(o))continue;i.current.set(o,a)}n.push(o)}if(n.length!==0){var r=[...i.current.keys()].filter(d=>!this.current.has(d));if(r.length>0){var s=Ul;Ul=[];var g=new Set,l=new Map;for(var C of n)unA(C,r,g,l);if(Ul.length>0){for(var I of(Uo=i,i.apply(),Ul))ir(Zg,i,EnA).call(i,I,A);i.deactivate()}Ul=s}}}else e=!1;Uo=null,Jl=t}this.committed=!0,zy.delete(this)}function Mo(t){var e=Tf;Tf=!0;try{for(;;){var A;if(fkA(),Ul.length===0&&((A=Uo)===null||A===void 0||A.flush(),Ul.length===0))return void(fv=null);hnA()}}finally{Tf=e}}function hnA(){var t=Od;dL=!0;try{var e=0;for(Av(!0);Ul.length>0;){var A=Zd.ensure();e++>1e3&&wkA(),A.process(Ul),$I.clear()}}finally{dL=!1,Av(t),fv=null}}function wkA(){try{(function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")})()}catch(t){dh(t,fv)}}var qC=null;function TtA(t){var e=t.length;if(e!==0){for(var A=0;A0)){for(var o of($I.clear(),qC))if(!(24576&o.f)){for(var a=[o],r=o.parent;r!==null;)qC.has(r)&&(qC.delete(r),a.push(r)),r=r.parent;for(var s=a.length-1;s>=0;s--){var g=a[s];24576&g.f||Qh(g)}}qC.clear()}}qC=null}}function unA(t,e,A,i){if(!A.has(t)&&(A.add(t),t.reactions!==null))for(var n of t.reactions){var o=n.f;2&o?unA(n,e,A,i):4194320&o&&(o&Oc)===0&&fnA(n,e,i)&&(ts(n,Oc),Xd(n))}}function fnA(t,e,A){var i=A.get(t);if(i!==void 0)return i;if(t.deps!==null)for(var n of t.deps){if(e.includes(n))return!0;if(2&n.f&&fnA(n,e,A))return A.set(n,!0),!0}return A.set(t,!1),!1}function Xd(t){for(var e=fv=t;e.parent!==null;){var A=(e=e.parent).f;if(dL&&e===jn&&(A&vh)!==0&&(A&rnA)===0)return;if(96&A){if((A&As)===0)return;e.f^=As}}Ul.push(e)}var HI=new WeakMap,qI=new WeakMap,DkA=new WeakMap,Yd=new WeakMap,J_=new WeakMap,jI=new WeakMap,zI=new WeakMap,ZC=new WeakMap,KI=new WeakMap,zd=new WeakMap,rh=new WeakMap,HQ=new WeakMap,sh=new WeakMap,Rf=new WeakMap,zQ=new WeakMap,HtA=new WeakMap,JI=new WeakSet,BL=class{constructor(e,A,i){var n,o,a,r;enA(this,JI),H0(this,"parent",void 0),po(this,HI,!1),po(this,qI,void 0),po(this,DkA,null),po(this,Yd,void 0),po(this,J_,void 0),po(this,jI,void 0),po(this,zI,null),po(this,ZC,null),po(this,KI,null),po(this,zd,null),po(this,rh,null),po(this,HQ,0),po(this,sh,0),po(this,Rf,!1),po(this,zQ,null),po(this,HtA,(n=()=>(Cn(zQ,this,s2(we(HQ,this))),()=>{Cn(zQ,this,null)}),a=0,r=s2(0),()=>{zf()&&(c(r),kh(()=>(a===0&&(o=EA(()=>n(()=>Hf(r)))),a+=1,()=>{Wd(()=>{var s;(a-=1)==0&&((s=o)===null||s===void 0||s(),o=void 0,Hf(r))})})))})),Cn(qI,this,e),Cn(Yd,this,A),Cn(J_,this,i),this.parent=jn.b,Cn(HI,this,!!we(Yd,this).pending),Cn(jI,this,Sh(()=>{jn.b=this;var s=ir(JI,this,ykA).call(this);try{Cn(zI,this,V0(()=>i(s)))}catch(g){this.error(g)}return we(sh,this)>0?ir(JI,this,OtA).call(this):Cn(HI,this,!1),()=>{var g;(g=we(rh,this))===null||g===void 0||g.remove()}},589952))}is_pending(){return we(HI,this)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!we(Yd,this).pending}update_pending_count(e){ir(JI,this,mnA).call(this,e),Cn(HQ,this,we(HQ,this)+e),we(zQ,this)&&Bh(we(zQ,this),we(HQ,this))}get_effect_pending(){return we(HtA,this).call(this),c(we(zQ,this))}error(e){var A=we(Yd,this).onerror,i=we(Yd,this).failed;if(we(Rf,this)||!A&&!i)throw e;we(zI,this)&&(es(we(zI,this)),Cn(zI,this,null)),we(ZC,this)&&(es(we(ZC,this)),Cn(ZC,this,null)),we(KI,this)&&(es(we(KI,this)),Cn(KI,this,null));var n=!1,o=!1,a=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,o&&(function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")})(),Zd.ensure(),Cn(HQ,this,0),we(KI,this)!==null&&Eh(we(KI,this),()=>{Cn(KI,this,null)}),Cn(HI,this,this.has_pending_snippet()),Cn(zI,this,ir(JI,this,ztA).call(this,()=>(Cn(Rf,this,!1),V0(()=>we(J_,this).call(this,we(qI,this)))))),we(sh,this)>0?ir(JI,this,OtA).call(this):Cn(HI,this,!1))},r=Pn;try{bg(null),o=!0,A?.(e,a),o=!1}catch(s){dh(s,we(jI,this)&&we(jI,this).parent)}finally{bg(r)}i&&Wd(()=>{Cn(KI,this,ir(JI,this,ztA).call(this,()=>{Zd.ensure(),Cn(Rf,this,!0);try{return V0(()=>{i(we(qI,this),()=>e,()=>a)})}catch(s){return dh(s,we(jI,this).parent),null}finally{Cn(Rf,this,!1)}}))})}};function ykA(){var t=we(qI,this);return we(HI,this)&&(Cn(rh,this,A1()),we(qI,this).before(we(rh,this)),t=we(rh,this)),t}function ztA(t){var e=jn,A=Pn,i=co;Tl(we(jI,this)),bg(we(jI,this)),Ih(we(jI,this).ctx);try{return t()}catch(n){return BnA(n),null}finally{Tl(e),bg(A),Ih(i)}}function OtA(){var t=we(Yd,this).pending;we(zI,this)!==null&&(Cn(zd,this,document.createDocumentFragment()),we(zd,this).append(we(rh,this)),KnA(we(zI,this),we(zd,this))),we(ZC,this)===null&&Cn(ZC,this,V0(()=>t(we(qI,this))))}function mnA(t){var e;this.has_pending_snippet()?(Cn(sh,this,we(sh,this)+t),we(sh,this)===0&&(Cn(HI,this,!1),we(ZC,this)&&Eh(we(ZC,this),()=>{Cn(ZC,this,null)}),we(zd,this)&&(we(qI,this).before(we(zd,this)),Cn(zd,this,null)))):this.parent&&ir(JI,e=this.parent,mnA).call(e,t)}function pnA(t,e,A,i){var n=Mh()?am:tt;if(A.length!==0||t.length!==0){var o=Uo,a=jn,r=(function(){var g=jn,l=Pn,C=co,I=Uo;return function(){var d=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];Tl(g),bg(l),Ih(C),d&&I?.activate()}})();t.length>0?Promise.all(t).then(()=>{r();try{return s()}finally{o?.deactivate(),by()}}):s()}else i(e.map(n));function s(){Promise.all(A.map(g=>(function(l){var C=jn;C===null&&(function(){throw new Error("https://svelte.dev/e/async_derived_orphan")})();var I=C.b,d=void 0,B=s2($r),E=!Pn,Q=new Map;return(function(f){jc(4718592,f,!0)})(()=>{var f=onA();d=f.promise;try{Promise.resolve(l()).then(f.resolve,f.reject).then(()=>{b===Uo&&b.committed&&b.deactivate(),by()})}catch(F){f.reject(F),by()}var b=Uo;if(E){var S,M=!I.is_pending();I.update_pending_count(1),b.increment(M),(S=Q.get(b))===null||S===void 0||S.reject(Ah),Q.delete(b),Q.set(b,f)}var D=function(F){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(b.activate(),_)_!==Ah&&(B.f|=XI,Bh(B,_));else for(var[U,J]of((B.f&XI)!==0&&(B.f^=XI),Bh(B,F),Q)){if(Q.delete(U),U===b)break;J.reject(Ah)}E&&(I.update_pending_count(-1),b.decrement(M))};f.promise.then(D,F=>D(null,F||"unknown"))}),pv(()=>{for(var f of Q.values())f.reject(Ah)}),new Promise(f=>{function b(S){function M(){S===d?f(B):b(d)}S.then(M,M)}b(d)})})(g))).then(g=>{r();try{i([...e.map(n),...g])}catch(l){(a.f&bh)===0&&dh(l,a)}o?.deactivate(),by()}).catch(g=>{dh(g,a)})}}function by(){Tl(null),bg(null),Ih(null)}function am(t){var e=Pn!==null&&2&Pn.f?Pn:null;return jn!==null&&(jn.f|=snA),{ctx:co,deps:null,effects:null,equals:lnA,f:2050,fn:t,reactions:null,rv:0,v:$r,wv:0,parent:e??jn,ac:null}}function Dg(t){var e=am(t);return UnA(e),e}function tt(t){var e=am(t);return e.equals=CnA,e}function wnA(t){var e=t.effects;if(e!==null){t.effects=null;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],n=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],o=s2(t);return i||(o.equals=CnA),yh&&n&&co!==null&&co.l!==null&&((A=(e=co.l).s)!==null&&A!==void 0?A:e.s=[]).push(o),o}function $g(t,e){return R(t,EA(()=>c(t))),e}function R(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return Pn===null||O0&&(Pn.f&hkA)===0||!Mh()||!(4325394&Pn.f)||(A=n2)!==null&&A!==void 0&&A.includes(t)||(function(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")})(),Bh(t,i?eh(e):e)}function Bh(t,e){if(!t.equals(e)){var A=t.v;oB?$I.set(t,e):$I.set(t,A),t.v=e;var i=Zd.ensure();i.capture(t,A),2&t.f&&((t.f&Oc)!==0&&VL(t),ts(t,(t.f&zc)!==0?As:r2)),t.wv=YnA(),MnA(t,Oc),!Mh()||jn===null||(jn.f&As)===0||96&jn.f||(_l===null?(function(n){_l=n})([t]):_l.push(t)),!i.is_fork&&Y_.size>0&&!PtA&&(function(){PtA=!1;var n=Od;Av(!0);var o=Array.from(Y_);try{for(var a of o)(a.f&As)!==0&&ts(a,r2),xh(a)&&Qh(a)}finally{Av(n)}Y_.clear()})()}return e}function jtA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=c(t),i=e===1?A++:A--;return R(t,A),i}function Hf(t){R(t,t.v+1)}function MnA(t,e){var A=t.reactions;if(A!==null)for(var i=Mh(),n=A.length,o=0;o{if(Pd===o)return r();var s=Pn,g=Pd;bg(null),ZtA(o);var l=r();return bg(s),ZtA(g),l};return i&&A.set("length",jC(t.length)),new Proxy(t,{defineProperty(r,s,g){"value"in g&&g.configurable!==!1&&g.enumerable!==!1&&g.writable!==!1||(function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")})();var l=A.get(s);return l===void 0?l=a(()=>{var C=jC(g.value);return A.set(s,C),C}):R(l,g.value,!0),!0},deleteProperty(r,s){var g=A.get(s);if(g===void 0){if(s in r){var l=a(()=>jC($r));A.set(s,l),Hf(n)}}else R(g,$r),Hf(n);return!0},get(r,s,g){var l;if(s===q0)return t;var C=A.get(s),I=s in r;if(C===void 0&&(!I||(l=t2(r,s))!==null&&l!==void 0&&l.writable)&&(C=a(()=>jC(eh(I?r[s]:$r))),A.set(s,C)),C!==void 0){var d=c(C);return d===$r?void 0:d}return Reflect.get(r,s,g)},getOwnPropertyDescriptor(r,s){var g=Reflect.getOwnPropertyDescriptor(r,s);if(g&&"value"in g){var l=A.get(s);l&&(g.value=c(l))}else if(g===void 0){var C=A.get(s),I=C?.v;if(C!==void 0&&I!==$r)return{enumerable:!0,configurable:!0,value:I,writable:!0}}return g},has(r,s){var g;if(s===q0)return!0;var l=A.get(s),C=l!==void 0&&l.v!==$r||Reflect.has(r,s);return(l!==void 0||jn!==null&&(!C||(g=t2(r,s))!==null&&g!==void 0&&g.writable))&&(l===void 0&&(l=a(()=>jC(C?eh(r[s]):$r)),A.set(s,l)),c(l)===$r)?!1:C},set(r,s,g,l){var C,I=A.get(s),d=s in r;if(i&&s==="length")for(var B=g;BjC($r)),A.set(B+"",E))}I===void 0?(!d||(C=t2(r,s))!==null&&C!==void 0&&C.writable)&&(R(I=a(()=>jC(void 0)),eh(g)),A.set(s,I)):(d=I.v!==$r,R(I,a(()=>eh(g))));var Q=Reflect.getOwnPropertyDescriptor(r,s);if(Q!=null&&Q.set&&Q.set.call(l,g),!d){if(i&&typeof s=="string"){var f=A.get("length"),b=Number(s);Number.isInteger(b)&&b>=f.v&&R(f,b+1)}Hf(n)}return!0},ownKeys(r){c(n);var s=Reflect.ownKeys(r).filter(C=>{var I=A.get(C);return I===void 0||I.v!==$r});for(var[g,l]of A)l.v===$r||g in r||s.push(g);return s},setPrototypeOf(){(function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")})()}})}function qtA(t){try{if(t!==null&&typeof t=="object"&&q0 in t)return t[q0]}catch{}return t}function vkA(t,e){return Object.is(qtA(t),qtA(e))}function A1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return document.createTextNode(t)}function Al(t){return vnA.call(t)}function rm(t){return bnA.call(t)}function CA(t,e){return Al(t)}function At(t){var e=Al(t);return e instanceof Comment&&e.data===""?rm(e):e}function bA(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=t;e--;)A=rm(A);return A}var VtA=!1;function mv(t){var e=Pn,A=jn;bg(null),Tl(null);try{return t()}finally{bg(e),Tl(A)}}function bkA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:A;t.addEventListener(e,()=>mv(A));var n=t.__on_r;t.__on_r=n?()=>{n(),i(!0)}:()=>i(!0),VtA||(VtA=!0,document.addEventListener("reset",o=>{Promise.resolve().then(()=>{if(!o.defaultPrevented)for(var a of o.target.elements){var r;(r=a.__on_r)===null||r===void 0||r.call(a)}})},{capture:!0}))}function knA(t){jn===null&&(Pn===null&&(function(){throw new Error("https://svelte.dev/e/effect_orphan")})(),(function(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")})()),oB&&(function(){throw new Error("https://svelte.dev/e/effect_in_teardown")})()}function jc(t,e,A){var i=jn;i!==null&&(i.f&j0)!==0&&(t|=j0);var n={ctx:co,deps:null,nodes:null,f:t|Oc|zc,first:null,fn:e,last:null,next:null,parent:i,b:i&&i.b,prev:null,teardown:null,wv:0,ac:null};if(A)try{Qh(n),n.f|=qL}catch(s){throw es(n),s}else e!==null&&Xd(n);var o=n;if(A&&o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&(o.f&snA)===0&&(o=o.first,(t&vh)!==0&&(t&Vd)!==0&&o!==null&&(o.f|=Vd)),o!==null&&(o.parent=i,i!==null&&(function(s,g){var l=g.last;l===null?g.last=g.first=s:(l.next=s,s.prev=l,g.last=s)})(o,i),Pn!==null&&2&Pn.f&&(t&anA)===0)){var a,r=Pn;((a=r.effects)!==null&&a!==void 0?a:r.effects=[]).push(o)}return n}function zf(){return Pn!==null&&!O0}function pv(t){var e=jc(8,null,!1);return ts(e,As),e.teardown=t,e}function EL(t){knA();var e=jn.f;if(!(!Pn&&(e&uv)!==0&&(e&qL)===0))return SnA(t);var A,i=co;((A=i.e)!==null&&A!==void 0?A:i.e=[]).push(t)}function SnA(t){return jc(1048580,t,!1)}function Nr(t){return jc(4,t,!1)}function RA(t,e){var A={effect:null,ran:!1,deps:t};co.l.$.push(A),A.effect=kh(()=>{t(),A.ran||(A.ran=!0,EA(e))})}function kn(){var t=co;kh(()=>{for(var e of t.l.$){e.deps();var A=e.effect;(A.f&As)!==0&&ts(A,r2),xh(A)&&Qh(A),e.ran=!1}})}function kh(t){return jc(8|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function ve(t){pnA(arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],e=>{jc(8,()=>t(...e.map(c)),!0)})}function Sh(t){return jc(vh|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function xnA(t){return jc(QkA|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function V0(t){return jc(524320,t,!0)}function RnA(t){var e=t.teardown;if(e!==null){var A=oB,i=Pn;WtA(!0),bg(null);try{e.call(null)}finally{WtA(A),bg(i)}}}function NnA(t){var e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],A=t.first;t.first=t.last=null;for(var i,n=function(){var o=A.ac;o!==null&&mv(()=>{o.abort(Ah)}),i=A.next,(A.f&anA)!==0?A.parent=null:es(A,e),A=i};A!==null;)n()}function es(t){var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=!1;!e&&(t.f&rnA)===0||t.nodes===null||t.nodes.end===null||(FnA(t.nodes.start,t.nodes.end),A=!0),NnA(t,e&&!A),ev(t,0),ts(t,bh);var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)n.stop();RnA(t);var o=t.parent;o!==null&&o.first!==null&&_nA(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=null}function FnA(t,e){for(;t!==null;){var A=t===e?null:rm(t);t.remove(),t=A}}function _nA(t){var e=t.parent,A=t.prev,i=t.next;A!==null&&(A.next=i),i!==null&&(i.prev=A),e!==null&&(e.first===t&&(e.first=i),e.last===t&&(e.last=A))}function Eh(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];LnA(t,i,!0);var n=()=>{A&&es(t),e&&e()},o=i.length;if(o>0){var a=()=>--o||n();for(var r of i)r.out(a)}else n()}function LnA(t,e,A){if((t.f&j0)===0){t.f^=j0;var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)(n.is_global||A)&&e.push(n);for(var o=t.first;o!==null;){var a=o.next;LnA(o,e,((o.f&Vd)!==0||(o.f&uv)!==0&&(t.f&vh)!==0)&&A),o=a}}}function QL(t){GnA(t,!0)}function GnA(t,e){if((t.f&j0)!==0){t.f^=j0,(t.f&As)===0&&(ts(t,Oc),Xd(t));for(var A=t.first;A!==null;){var i=A.next;GnA(A,((A.f&Vd)!==0||(A.f&uv)!==0)&&e),A=i}var n=t.nodes&&t.nodes.t;if(n!==null)for(var o of n)(o.is_global||e)&&o.in()}}function KnA(t,e){if(t.nodes)for(var A=t.nodes.start,i=t.nodes.end;A!==null;){var n=A===i?null:rm(A);e.append(A),A=n}}var MkA=null;var Od=!1;function Av(t){Od=t}var oB=!1;function WtA(t){oB=t}var Pn=null,O0=!1;function bg(t){Pn=t}var jn=null;function Tl(t){jn=t}var n2=null;function UnA(t){Pn!==null&&(n2===null?n2=[t]:n2.push(t))}var Hs=null,Wg=0,_l=null,JnA=1,Of=0,Pd=Of;function ZtA(t){Pd=t}function YnA(){return++JnA}function xh(t){var e=t.f;if((e&Oc)!==0)return!0;if(2&e&&(t.f&=-32769),(e&r2)!==0){var A=t.deps;if(A!==null)for(var i=A.length,n=0;nt.wv)return!0}(e&zc)!==0&&Jl===null&&ts(t,As)}return!1}function TnA(t,e){var A,i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],n=t.reactions;if(n!==null&&((A=n2)===null||A===void 0||!A.includes(t)))for(var o=0;o{t.ac.abort(Ah)}),t.ac=null);try{t.f|=IL;var l=(0,t.fn)(),C=t.deps;if(Hs!==null){var I;if(ev(t,Wg),C!==null&&Wg>0)for(C.length=Wg+Hs.length,I=0;I1&&arguments[1]!==void 0?arguments[1]:new Set;if(!(typeof t!="object"||t===null||t instanceof EventTarget||e.has(t))){for(var A in e.add(t),t instanceof Date&&t.getTime(),t)try{hL(t[A],e)}catch{}var i=PL(t);if(i!==Object.prototype&&i!==Array.prototype&&i!==Map.prototype&&i!==Set.prototype&&i!==Date.prototype){var n=nnA(i);for(var o in n){var a=n[o].get;if(a)try{a.call(t)}catch{}}}}}var qnA=new Set,uL=new Set;function VnA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};function n(o){if(i.capture||Gf.call(e,o),!o.cancelBubble)return mv(()=>A?.call(this,o))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?Wd(()=>{e.addEventListener(t,n,i)}):e.addEventListener(t,n,i),n}function ue(t,e,A,i,n){var o={capture:i,passive:n},a=VnA(t,e,A,o);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&pv(()=>{e.removeEventListener(t,a,o)})}function sm(t){for(var e=0;ea||i});var C=Pn,I=jn;bg(null),Tl(null);try{for(var d,B=[];a!==null;){var E=a.assignedSlot||a.parentNode||a.host||null;try{var Q=a["__"+n];Q==null||a.disabled&&t.target!==a||Q.call(a,t)}catch(S){d?B.push(S):d=S}if(t.cancelBubble||E===A||E===null)break;a=E}if(d){var f=function(S){queueMicrotask(()=>{throw S})};for(var b of B)f(b);throw d}}finally{t.__root=A,delete t.currentTarget,bg(C),Tl(I)}}}function WL(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("",""),e.content}function $d(t,e){var A=jn;A.nodes===null&&(A.nodes={start:t,end:e,a:null,t:null})}function FA(t,e){var A,i=!!(1&e),n=!!(2&e),o=!t.startsWith("");return()=>{A===void 0&&(A=WL(o?t:""+t),i||(A=Al(A)));var a=n||ynA?document.importNode(A,!0):A.cloneNode(!0);return i?$d(Al(a),a.lastChild):$d(a,a),a}}function s1(t,e){return(function(A,i){var n,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"svg",a=!A.startsWith(""),r=!!(1&i),s="<".concat(o,">").concat(a?A:""+A,"");return()=>{if(!n){var g=Al(WL(s));if(r)for(n=document.createDocumentFragment();Al(g);)n.appendChild(Al(g));else n=Al(g)}var l=n.cloneNode(!0);return r?$d(Al(l),l.lastChild):$d(l,l),l}})(t,e,"svg")}function ur(){var t=A1((arguments.length>0&&arguments[0]!==void 0?arguments[0]:"")+"");return $d(t,t),t}function bi(){var t=document.createDocumentFragment(),e=document.createComment(""),A=A1();return t.append(e,A),$d(e,A),t}function lA(t,e){t!==null&&t.before(e)}var xkA=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"],RkA={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"},NkA=["touchstart","touchmove"];function FkA(t){return NkA.includes(t)}function Rt(t,e){var A,i=e==null?"":typeof e=="object"?e+"":e;i!==((A=t.__t)!==null&&A!==void 0?A:t.__t=t.nodeValue)&&(t.__t=i,t.nodeValue=i+"")}function _kA(t,e){return(function(A,i){var{target:n,anchor:o,props:a={},events:r,context:s,intro:g=!0}=i;(function(){if(i2===void 0){i2=window,ynA=/Firefox/.test(navigator.userAgent);var B=Element.prototype,E=Node.prototype,Q=Text.prototype;vnA=t2(E,"firstChild").get,bnA=t2(E,"nextSibling").get,YtA(B)&&(B.__click=void 0,B.__className=void 0,B.__attributes=null,B.__style=void 0,B.__e=void 0),YtA(Q)&&(Q.__t=void 0)}})();var l=new Set,C=B=>{for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};return new Promise(f=>{Q.outro?Eh(E,()=>{es(E),f(void 0)}):(es(E),f(void 0))})}})(()=>{var B=o??n.appendChild(A1());return(function(E,Q,f){new BL(E,Q,f)})(B,{pending:()=>{}},E=>{s&&(St({}),co.c=s),r&&(a.$$events=r),I=A(E,a)||{},s&&xt()}),()=>{for(var E of l){n.removeEventListener(E,Gf);var Q=OQ.get(E);--Q===0?(document.removeEventListener(E,Gf),OQ.delete(E)):OQ.set(E,Q)}var f;uL.delete(C),B!==o&&((f=B.parentNode)===null||f===void 0||f.removeChild(B))}});return fL.set(I,d),I})(t,e)}var OQ=new Map,fL=new WeakMap,PQ,zC=new WeakMap,Ld=new WeakMap,OC=new WeakMap,Nf=new WeakMap,T_=new WeakMap,XtA=new WeakMap,LkA=new WeakMap,hh=class{constructor(e){var A=this,i=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];H0(this,"anchor",void 0),po(this,zC,new Map),po(this,Ld,new Map),po(this,OC,new Map),po(this,Nf,new Set),po(this,T_,!0),po(this,XtA,()=>{var n=Uo;if(we(zC,this).has(n)){var o=we(zC,this).get(n),a=we(Ld,this).get(o);if(a)QL(a),we(Nf,this).delete(o);else{var r=we(OC,this).get(o);r&&(we(Ld,this).set(o,r.effect),we(OC,this).delete(o),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),a=r.effect)}for(var[s,g]of we(zC,this)){if(we(zC,this).delete(s),s===n)break;var l=we(OC,this).get(g);l&&(es(l.effect),we(OC,this).delete(g))}var C=function(B,E){if(B===o||we(Nf,A).has(B))return 1;var Q=()=>{if(Array.from(we(zC,A).values()).includes(B)){var f=document.createDocumentFragment();KnA(E,f),f.append(A1()),we(OC,A).set(B,{effect:E,fragment:f})}else es(E);we(Nf,A).delete(B),we(Ld,A).delete(B)};we(T_,A)||!a?(we(Nf,A).add(B),Eh(E,Q,!1)):Q()};for(var[I,d]of we(Ld,this))C(I,d)}}),po(this,LkA,n=>{we(zC,this).delete(n);var o=Array.from(we(zC,this).values());for(var[a,r]of we(OC,this))o.includes(a)||(es(r.effect),we(OC,this).delete(a))}),this.anchor=e,Cn(T_,this,i)}ensure(e,A){var i=Uo;!A||we(Ld,this).has(e)||we(OC,this).has(e)||we(Ld,this).set(e,V0(()=>A(this.anchor))),we(zC,this).set(i,e),we(XtA,this).call(this)}};function is(t){co===null&&om(),yh&&co.l!==null?WnA(co).m.push(t):EL(()=>{var e=EA(t);if(typeof e=="function")return e})}function Hl(t){co===null&&om(),is(()=>()=>EA(t))}function GkA(){var t=co;return t===null&&om(),(e,A,i)=>{var n,o=(n=t.s.$$events)===null||n===void 0?void 0:n[e];if(o){var a=nm(o)?o.slice():[o],r=(function(g,l){var{bubbles:C=!1,cancelable:I=!1}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new CustomEvent(g,{detail:l,bubbles:C,cancelable:I})})(e,A,i);for(var s of a)s.call(t.x,r);return!r.defaultPrevented}return!0}}function KkA(t){co===null&&om(),co.l===null&&(function(){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")})(),WnA(co).b.push(t)}function WnA(t){var e,A=t.l;return(e=A.u)!==null&&e!==void 0?e:A.u={a:[],b:[],m:[]}}function TA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=new hh(t);function n(o,a){i.ensure(o,a)}Sh(()=>{var o=!1;e(function(a){o=!0,n(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a)}),o||n(!1,null)},A?Vd:0)}function ZnA(t,e,A){var i=new hh(t),n=!Mh();Sh(()=>{var o=e();n&&o!==null&&typeof o=="object"&&(o={}),i.ensure(o,A)})}function Na(t,e){return e}function H_(t){for(var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=0;A5&&arguments[5]!==void 0?arguments[5]:null,a=t,r=new Map;!(4&e)||(a=t.appendChild(A1()));var s,g=null,l=tt(()=>{var E=A();return nm(E)?E:E==null?[]:Hy(E)}),C=!0;function I(){B.fallback=g,(function(E,Q,f,b,S){var M,D,F,_,U,J=!!(8&b),j=Q.length,AA=E.items,O=E.effect.first,DA=null,P=[],aA=[];if(J)for(U=0;U0){var HA=4&b&&j===0?f:null;if(J){for(U=0;U{if(be){if(be.pending.delete(ut),be.done.add(ut),be.pending.size===0){var Me=QA.outrogroups;H_(Hy(be.done)),Me.delete(be),Me.size===0&&(QA.outrogroups=null)}}else pA-=1},!1)},ht=0;ht{if(D!==void 0)for(_ of D){var QA;(QA=_.nodes)===null||QA===void 0||(QA=QA.a)===null||QA===void 0||QA.apply()}})})(B,s,a,e,i),g!==null&&(s.length===0?(g.f&PC)===0?QL(g):(g.f^=PC,Ff(g,null,a)):Eh(g,()=>{g=null}))}var d=Sh(()=>{for(var E=(s=c(l)).length,Q=new Set,f=0;fo(a)):(g=V0(()=>o(PQ??(PQ=A1())))).f|=PC),C||I(),c(l)}),B={effect:d,items:r,outrogroups:null,fallback:g};C=!1}function UkA(t,e,A,i,n,o,a,r){var s=1&a?16&a?s2(A):IA(A,!1,!1):null,g=2&a?s2(n):null;return{v:s,i:g,e:V0(()=>(o(e,s??A,g??n,r),()=>{t.delete(i)}))}}function Ff(t,e,A){if(t.nodes)for(var i=t.nodes.start,n=t.nodes.end,o=e&&(e.f&PC)===0?e.nodes.start:A;i!==null;){var a=rm(i);if(o.before(i),i===n)return;i=a}}function UI(t,e,A){e===null?t.effect.first=A:e.next=A,A===null?t.effect.last=e:A.prev=e}function XnA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=arguments.length>3&&arguments[3]!==void 0&&arguments[3],n=t,o="";ve(()=>{var a,r=jn;if(o!==(o=(a=e())!==null&&a!==void 0?a:"")&&(r.nodes!==null&&(FnA(r.nodes.start,r.nodes.end),r.nodes=null),o!=="")){var s=o+"";A?s="".concat(s,""):i&&(s="".concat(s,""));var g=WL(s);if((A||i)&&(g=Al(g)),$d(Al(g),g.lastChild),A||i)for(;Al(g);)n.before(Al(g));else n.before(g)}})}function Ea(t,e,A,i,n){var o,a=(o=e.$$slots)===null||o===void 0?void 0:o[A],r=!1;a===!0&&(a=e[A==="default"?"children":A],r=!0),a===void 0?n!==null&&n(t):a(t,r?()=>i:i)}function $nA(t,e,A){var i=new hh(t);Sh(()=>{var n,o=(n=e())!==null&&n!==void 0?n:null;i.ensure(o,o&&(a=>A(a,o)))},Vd)}function vs(t,e,A){Nr(()=>{var i=EA(()=>e(t,A?.())||{});if(A&&i!=null&&i.update){var n=!1,o={};kh(()=>{var a=A();G(a),n&&cnA(o,a)&&(o=a,i.update(a))}),n=!0}if(i!=null&&i.destroy)return()=>i.destroy()})}function JkA(t,e){var A,i=void 0;xnA(()=>{i!==(i=e())&&(A&&(es(A),A=null),i&&(A=V0(()=>{Nr(()=>i(t))})))})}function AoA(t){var e,A,i="";if(typeof t=="string"||typeof t=="number")i+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e1&&arguments[1]!==void 0&&arguments[1]?" !important;":";",A="";for(var i in t){var n=t[i];n!=null&&n!==""&&(A+=" "+i+": "+n+e)}return A}function z_(t){return t[0]!=="-"||t[1]!=="-"?t.toLowerCase():t}function $t(t,e,A,i,n,o){var a=t.__className;if(a!==A||a===void 0){var r=(function(l,C,I){var d=l==null?"":""+l;if(C&&(d=d?d+" "+C:C),I){for(var B in I)if(I[B])d=d?d+" "+B:B;else if(d.length)for(var E=B.length,Q=0;(Q=d.indexOf(B,Q))>=0;){var f=Q+E;Q!==0&&!$tA.includes(d[Q-1])||f!==d.length&&!$tA.includes(d[f])?Q=f:d=(Q===0?"":d.substring(0,Q))+d.substring(f+1)}}return d===""?null:d})(A,i,o);r==null?t.removeAttribute("class"):e?t.className=r:t.setAttribute("class",r),t.__className=A}else if(o&&n!==o)for(var s in o){var g=!!o[s];n!=null&&g===!!n[s]||t.classList.toggle(s,g)}return o}function O_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;for(var n in A){var o=A[n];e[n]!==o&&(A[n]==null?t.style.removeProperty(n):t.style.setProperty(n,o,i))}}function Yl(t,e,A,i){if(t.__style!==e){var n=(function(o,a){if(a){var r,s,g="";if(Array.isArray(a)?(r=a[0],s=a[1]):r=a,o){o=String(o).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var l=!1,C=0,I=!1,d=[];r&&d.push(...Object.keys(r).map(z_)),s&&d.push(...Object.keys(s).map(z_));for(var B=0,E=-1,Q=o.length,f=0;f2&&arguments[2]!==void 0&&arguments[2];if(t.multiple){if(e==null)return;if(!nm(e))return void console.warn("https://svelte.dev/e/select_multiple_invalid_value");for(var i of t.options)i.selected=e.includes(eiA(i))}else{for(i of t.options)if(vkA(eiA(i),e))return void(i.selected=!0);A&&e===void 0||(t.selectedIndex=-1)}}function YkA(t){var e=new MutationObserver(()=>{mL(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),pv(()=>{e.disconnect()})}function eiA(t){return"__value"in t?t.__value:t.value}var XQ=Symbol("class"),_f=Symbol("style"),eoA=Symbol("is custom element"),toA=Symbol("is html");function AB(t,e){var A=ZL(t);A.value!==(A.value=e??void 0)&&(t.value!==e||e===0&&t.nodeName==="PROGRESS")&&(t.value=e??"")}function Mn(t,e,A,i){var n=ZL(t);n[e]!==(n[e]=A)&&(e==="loading"&&(t[ukA]=A),A==null?t.removeAttribute(e):typeof A!="string"&&ioA(t).includes(e)?t[e]=A:t.setAttribute(e,A))}function TkA(t,e,A,i){var n,o=ZL(t),a=o[eoA],r=!o[toA],s=e||{},g=t.tagName==="OPTION";for(var l in e)l in A||(A[l]=null);A.class?A.class=n1(A.class):(i||A[XQ])&&(A.class=null),A[_f]&&((n=A.style)!==null&&n!==void 0||(A.style=null));var C,I,d,B,E,Q,f=ioA(t),b=function(M){var D=A[M];if(g&&M==="value"&&D==null)return t.value=t.__value="",s[M]=D,0;if(M==="class")return C=t.namespaceURI==="http://www.w3.org/1999/xhtml",$t(t,C,D,i,e?.[XQ],A[XQ]),s[M]=D,s[XQ]=A[XQ],0;if(M==="style")return Yl(t,D,e?.[_f],A[_f]),s[M]=D,s[_f]=A[_f],0;if(D===(I=s[M])&&(D!==void 0||!t.hasAttribute(M))||(s[M]=D,(d=M[0]+M[1])==="$$"))return 0;if(d==="on"){var F={},_="$$"+M,U=M.slice(2);if(B=(function(P){return xkA.includes(P)})(U),(function(P){return P.endsWith("capture")&&P!=="gotpointercapture"&&P!=="lostpointercapture"})(U)&&(U=U.slice(0,-7),F.capture=!0),!B&&I){if(D!=null)return 0;t.removeEventListener(U,s[_],F),s[_]=null}if(D!=null)if(B)t["__".concat(U)]=D,sm([U]);else{let P=function(aA){s[M].call(this,aA)};var DA=P;s[_]=VnA(U,t,P,F)}else B&&(t["__".concat(U)]=void 0)}else if(M==="style")Mn(t,M,D);else if(M==="autofocus")(function(P,aA){if(aA){var iA=document.body;P.autofocus=!0,Wd(()=>{document.activeElement===iA&&P.focus()})}})(t,!!D);else if(a||M!=="__value"&&(M!=="value"||D==null))if(M==="selected"&&g)(function(P,aA){aA?P.hasAttribute("selected")||P.setAttribute("selected",""):P.removeAttribute("selected")})(t,D);else if(E=M,r||(E=(function(P){var aA;return P=P.toLowerCase(),(aA=RkA[P])!==null&&aA!==void 0?aA:P})(E)),Q=E==="defaultValue"||E==="defaultChecked",D!=null||a||Q)Q||f.includes(E)&&(a||typeof D!="string")?(t[E]=D,E in o&&(o[E]=$r)):typeof D!="function"&&Mn(t,E,D);else if(o[M]=null,E==="value"||E==="checked"){var J=t,j=e===void 0;if(E==="value"){var AA=J.defaultValue;J.removeAttribute(E),J.defaultValue=AA,J.value=J.__value=j?AA:null}else{var O=J.defaultChecked;J.removeAttribute(E),J.defaultChecked=O,J.checked=!!j&&O}}else t.removeAttribute(M);else t.value=t.__value=D};for(var S in A)b(S);return s}function jy(t,e){var A=arguments.length>5?arguments[5]:void 0,i=arguments.length>6&&arguments[6]!==void 0&&arguments[6],n=arguments.length>7&&arguments[7]!==void 0&&arguments[7];pnA(arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],o=>{var a=void 0,r={},s=t.nodeName==="SELECT",g=!1;if(xnA(()=>{var C=e(...o.map(c)),I=TkA(t,a,C,A,i,n);for(var d of(g&&s&&"value"in C&&mL(t,C.value),Object.getOwnPropertySymbols(r)))C[d]||es(r[d]);for(var B of Object.getOwnPropertySymbols(C)){var E=C[B];B.description!=="@attach"||a&&E===a[B]||(r[B]&&es(r[B]),r[B]=V0(()=>JkA(t,()=>E))),I[B]=E}a=I}),s){var l=t;Nr(()=>{mL(l,a.value,!0),YkA(l)})}g=!0})}function ZL(t){var e;return(e=t.__attributes)!==null&&e!==void 0?e:t.__attributes={[eoA]:t.nodeName.includes("-"),[toA]:t.namespaceURI==="http://www.w3.org/1999/xhtml"}}var tiA=new Map;function ioA(t){var e,A=t.getAttribute("is")||t.nodeName,i=tiA.get(A);if(i)return i;tiA.set(A,i=[]);for(var n=t,o=Element.prototype;o!==n;){for(var a in e=nnA(n))e[a].set&&i.push(a);n=PL(n)}return i}function tv(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,i=new WeakSet;bkA(t,"input",(function(){var n=Tt(function*(o){var a=o?t.defaultValue:t.value;if(a=P_(t)?j_(a):a,A(a),Uo!==null&&i.add(Uo),yield znA(),a!==(a=e())){var r=t.selectionStart,s=t.selectionEnd,g=t.value.length;if(t.value=a??"",s!==null){var l=t.value.length;r===s&&s===g&&l>g?(t.selectionStart=l,t.selectionEnd=l):(t.selectionStart=r,t.selectionEnd=Math.min(s,l))}}});return function(o){return n.apply(this,arguments)}})()),EA(e)==null&&t.value&&(A(P_(t)?j_(t.value):t.value),Uo!==null&&i.add(Uo)),kh(()=>{var n=e();if(t===document.activeElement){var o=Yf??Uo;if(i.has(o))return}P_(t)&&n===j_(t.value)||(t.type!=="date"||n||t.value)&&n!==t.value&&(t.value=n??"")})}function P_(t){var e=t.type;return e==="number"||e==="range"}function j_(t){return t===""?null:+t}function Ot(t,e,A){var i=t2(t,e);i&&i.set&&(t[e]=A,pv(()=>{t[e]=null}))}function iiA(t,e){return t===e||t?.[q0]===e}function Jo(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,A=arguments.length>2?arguments[2]:void 0;return Nr(()=>{var i,n;return kh(()=>{i=n,n=[],EA(()=>{t!==A(...n)&&(e(t,...n),i&&iiA(A(...i),t)&&e(null,...i))})}),()=>{Wd(()=>{n&&iiA(A(...n),t)&&e(null,...n)})}}),t}function VC(t){return function(){for(var e=arguments.length,A=new Array(e),i=0;i0&&arguments[0]!==void 0&&arguments[0],e=co,A=e.l.u;if(A){var i,n=()=>G(e.s);if(t){var o=0,a={},r=am(()=>{var s=!1,g=e.s;for(var l in g)g[l]!==a[l]&&(a[l]=g[l],s=!0);return s&&o++,o});n=()=>c(r)}A.b.length&&(i=()=>{niA(e,n),CL(A.b)},knA(),jc(1048584,i,!0)),EL(()=>{var s=EA(()=>A.m.map(EkA));return()=>{for(var g of s)typeof g=="function"&&g()}}),A.a.length&&EL(()=>{niA(e,n),CL(A.a)})}}function niA(t,e){if(t.l.s)for(var A of t.l.s)c(A);e()}function wv(t){var e=s2(0);return function(){return arguments.length===1?(R(e,c(e)+1),arguments[0]):(c(e),t())}}function Kf(t,e){var A,i=(A=t.$$events)===null||A===void 0?void 0:A[e.type],n=nm(i)?i.slice():i==null?[]:[i];for(var o of n)o.call(this,e)}var My=!1,HkA={get(t,e){if(!t.exclude.includes(e))return c(t.version),e in t.special?t.special[e]():t.props[e]},set(t,e,A){if(!(e in t.special)){var i=jn;try{Tl(t.parent_effect),t.special[e]=N({get[e](){return t.props[e]}},e,4)}finally{Tl(i)}}return t.special[e](A),jtA(t.version),!0},getOwnPropertyDescriptor(t,e){if(!t.exclude.includes(e))return e in t.props?{enumerable:!0,configurable:!0,value:t.props[e]}:void 0},deleteProperty:(t,e)=>(t.exclude.includes(e)||(t.exclude.push(e),jtA(t.version)),!0),has:(t,e)=>!t.exclude.includes(e)&&e in t.props,ownKeys:t=>Reflect.ownKeys(t.props).filter(e=>!t.exclude.includes(e))};function ky(t,e){return new Proxy({props:t,exclude:e,special:{},version:s2(0),parent_effect:jn},HkA)}var zkA={get(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(xf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i)return i[e]}},set(t,e,A){for(var i=t.props.length;i--;){var n=t.props[i];xf(n)&&(n=n());var o=t2(n,e);if(o&&o.set)return o.set(A),!0}return!1},getOwnPropertyDescriptor(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(xf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i){var n=t2(i,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(t,e){if(e===q0||e===gnA)return!1;for(var A of t.props)if(xf(A)&&(A=A()),A!=null&&e in A)return!0;return!1},ownKeys(t){var e=[];for(var A of t.props)if(xf(A)&&(A=A()),A){for(var i in A)e.includes(i)||e.push(i);for(var n of Object.getOwnPropertySymbols(A))e.includes(n)||e.push(n)}return e}};function e1(){for(var t=arguments.length,e=new Array(t),A=0;A(l&&(l=!1,g=s?EA(i):i),g);if(r){var I,d,B=q0 in t||gnA in t;n=(I=(d=t2(t,e))===null||d===void 0?void 0:d.set)!==null&&I!==void 0?I:B&&e in t?D=>t[e]=D:void 0}var E,Q=!1;if(r?[o,Q]=(function(D){var F=My;try{return My=!1,[D(),My]}finally{My=F}})(()=>t[e]):o=t[e],o===void 0&&i!==void 0&&(o=C(),n&&(a&&(function(){throw new Error("https://svelte.dev/e/props_invalid_value")})(),n(o))),E=a?()=>{var D=t[e];return D===void 0?C():(l=!0,D)}:()=>{var D=t[e];return D!==void 0&&(g=void 0),D===void 0?g:D},a&&!(4&A))return E;if(n){var f=t.$$legacy;return function(D,F){return arguments.length>0?(a&&F&&!f&&!Q||n(F?E():D),D):E()}}var b=!1,S=(1&A?am:tt)(()=>(b=!1,E()));r&&c(S);var M=jn;return function(D,F){if(arguments.length>0){var _=F?c(S):a&&r?eh(D):D;return R(S,_),b=!0,g!==void 0&&(g=_),D}return oB&&b||(M.f&bh)!==0?S.v:c(S)}}function Cr(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:(function(i){var n=(function(o){try{if(typeof window<"u"&&window.localStorage!==void 0)return window.localStorage[o]}catch{}})("debug");return n!=null&&n.endsWith("*")?i.startsWith(n.slice(0,-1)):i===n})(t);if(!e)return OkA;var A=(function(i){for(var n=0,o=0;o9466848e5&&isFinite(t)&&Math.floor(t)===t&&!isNaN(new Date(t).valueOf());if(typeof t=="bigint")return pL(Number(t));try{var e=t&&t.valueOf();if(e!==t)return pL(e)}catch{return!1}return!1}function noA(t){(Sy=Sy||window.document.createElement("div")).style.color="",Sy.style.color=t;var e=Sy.style.color;return e!==""?e.replace(/\s+/g,"").toLowerCase():void 0}var Sy=void 0;function VkA(t){return typeof t=="string"&&t.length<99&&!!noA(t)}function $L(t,e){if(typeof t=="number"||typeof t=="string"||typeof t=="boolean"||t===void 0)return typeof t;if(typeof t=="bigint")return"number";if(t===null)return"null";if(Array.isArray(t))return"array";if(pn(t))return"object";var A=e.stringify(t);return A&&XL(A)?"number":A==="true"||A==="false"?"boolean":A==="null"?"null":"unknown"}var WkA=/^https?:\/\/\S+$/;function Dv(t){return typeof t=="string"&&WkA.test(t)}function Rh(t,e){if(t==="")return"";var A=t.trim();return A==="null"?null:A==="true"||A!=="false"&&(XL(A)?e.parse(A):t)}var ZkA=[];function aiA(t,e){if(t.length!==e.length)return!1;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],A={};if(!Array.isArray(t))throw new TypeError("Array expected");function i(a,r){(!Array.isArray(a)&&!pn(a)||e&&r.length>0)&&(A[wt(r)]=!0),pn(a)&&Object.keys(a).forEach(s=>{i(a[s],r.concat(s))})}for(var n=Math.min(t.length,1e4),o=0;oe?t.slice(0,e):t}function riA(t){return ye({},t)}function siA(t){return Object.values(t)}function giA(t,e,A,i){var n=t.slice(0),o=n.splice(e,A);return n.splice.apply(n,[e+i,0,...o]),n}function XkA(t,e,A){return t.slice(0,e).concat(A).concat(t.slice(e))}function gm(t,e){try{return e.parse(t)}catch{return e.parse(ml(t))}}function aoA(t,e){try{return gm(t,e)}catch{return}}function lm(t,e){t=t.replace(soA,"");try{return e(t)}catch{}try{return e("{"+t+"}")}catch{}try{return e("["+t+"]")}catch{}throw new Error("Failed to parse partial JSON")}function roA(t){t=t.replace(soA,"");try{return ml(t)}catch{}try{var e=ml("["+t+"]");return e.substring(1,e.length-1)}catch{}try{var A=ml("{"+t+"}");return A.substring(1,A.length-1)}catch{}throw new Error("Failed to repair partial JSON")}var soA=/,\s*$/;function uh(t,e){var A=ciA.exec(e);if(A){var i=Fr(A[2]),n=(function(d,B){for(var E=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:d.length,f=0,b=E;b"line ".concat(n+1," column ").concat(o+1))}}var a=tSA.exec(e),r=a?Fr(a[1]):void 0,s=r!==void 0?r-1:void 0,g=iSA.exec(e),l=g?Fr(g[1]):void 0,C=l!==void 0?l-1:void 0,I=s!==void 0&&C!==void 0?(function(d,B,E){for(var Q=d.indexOf(` -`),f=1;f1&&arguments[1]!==void 0?arguments[1]:void 0,A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:JSON;return Pf(t)?t:{text:A.stringify(t.json,null,e)}}function liA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JSON;return jf(t)?t:{json:e.parse(t.text)}}function DL(t,e,A){return $kA(t,e,A).text}function ASA(t,e){return eSA(t,e)>e}function eSA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1/0;if(Pf(t))return t.text.length;var A=t.json,i=0;return(function n(o){if(Array.isArray(o)){if((i+=o.length-1+2)>e)return;for(var a=0;ae)return}else if(pn(o)){var r=Object.keys(o);i+=2+r.length+(r.length-1);for(var s=0;sloA(IoA(String(t))),unescapeValue:t=>doA(coA(t))},aSA={escapeValue:t=>IoA(String(t)),unescapeValue:t=>doA(t)},rSA={escapeValue:t=>loA(String(t)),unescapeValue:t=>coA(t)},sSA={escapeValue:t=>String(t),unescapeValue:t=>t};function loA(t){return t.replace(/[^\x20-\x7F]/g,e=>{var A;return e==="\b"||e==="\f"||e===` -`||e==="\r"||e===" "?e:"\\u"+("000"+((A=e.codePointAt(0))===null||A===void 0?void 0:A.toString(16))).slice(-4)})}function coA(t){return t.replace(/\\u[a-fA-F0-9]{4}/g,e=>{try{var A=JSON.parse('"'+e+'"');return CoA[A]||A}catch{return e}})}var CoA={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},gSA={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":` -`,"\\r":"\r","\\t":" "};function IoA(t){return t.replace(/["\b\f\n\r\t\\]/g,e=>CoA[e]||e)}function doA(t){return t.replace(/\\["bfnrt\\]/g,e=>gSA[e]||e)}function fh(t){return typeof t!="string"?String(t):t.endsWith(` -`)?t+` -`:t}function BoA(t,e){return Nh(t,A=>A.nodeName.toUpperCase()===e.toUpperCase())}function VI(t,e,A){return Nh(t,i=>(function(n,o,a){return typeof n.getAttribute=="function"&&n.getAttribute(o)===a})(i,e,A))}function Nh(t,e){return!!eG(t,e)}function eG(t,e){for(var A=t;A&&!e(A);)A=A.parentNode;return A}function cm(t){var e,A;return(e=t==null||(A=t.ownerDocument)===null||A===void 0?void 0:A.defaultView)!==null&&e!==void 0?e:void 0}function tG(t){var e=cm(t),A=e?.document.activeElement;return!!A&&Nh(A,i=>i===t)}function EoA(t,e){return eG(t,A=>A.nodeName===e)}function W_(t){return VI(t,"data-type","selectable-key")?no.key:VI(t,"data-type","selectable-value")?no.value:VI(t,"data-type","insert-selection-area-inside")?no.inside:VI(t,"data-type","insert-selection-area-after")?no.after:no.multi}function qy(t){return encodeURIComponent(wt(t))}function QoA(t){var e,A=eG(t,n=>!(n==null||!n.hasAttribute)&&n.hasAttribute("data-path")),i=(e=A?.getAttribute("data-path"))!==null&&e!==void 0?e:void 0;return i?Qs(decodeURIComponent(i)):void 0}function lSA(t){var{allElements:e,currentElement:A,direction:i,hasPrio:n=()=>!0,margin:o=10}=t,a=wS(e.filter(function(f){var b=f.getBoundingClientRect();return b.width>0&&b.height>0}),s),r=s(A);function s(f){var b=f.getBoundingClientRect();return{x:b.left+b.width/2,y:b.top+b.height/2,rect:b,element:f}}function g(f,b){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,M=f.x-b.x,D=(f.y-b.y)*S;return Math.sqrt(M*M+D*D)}var l=f=>g(f,r);if(i==="Left"||i==="Right"){var C=i==="Left"?a.filter(f=>{return b=r,f.rect.left+o{return b=r,f.rect.right>b.rect.right+o;var b}),I=C.filter(f=>{return b=f,S=r,Math.abs(b.y-S.y)g(f,r,10));return d?.element}if(i==="Up"||i==="Down"){var B=i==="Up"?a.filter(f=>{return b=r,f.y+o{return b=r,f.y>b.y+o;var b}),E=B.filter(f=>n(f.element)),Q=VE(E,l)||VE(B,l);return Q?.element}}function iG(){var t,e,A,i;return typeof navigator<"u"&&(t=(e=(A=navigator)===null||A===void 0||(A=A.platform)===null||A===void 0?void 0:A.toUpperCase().includes("MAC"))!==null&&e!==void 0?e:(i=navigator)===null||i===void 0||(i=i.userAgentData)===null||i===void 0||(i=i.platform)===null||i===void 0?void 0:i.toUpperCase().includes("MAC"))!==null&&t!==void 0&&t}function g2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"+",A=[];nG(t,arguments.length>2&&arguments[2]!==void 0?arguments[2]:iG)&&A.push("Ctrl"),t.altKey&&A.push("Alt"),t.shiftKey&&A.push("Shift");var i=t.key.length===1?t.key.toUpperCase():t.key;return i in cSA||A.push(i),A.join(e)}function nG(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iG;return t.ctrlKey||t.metaKey&&e()}var cSA={Ctrl:!0,Command:!0,Control:!0,Alt:!0,Option:!0,Shift:!0};function qt(t,e){e===void 0&&(e={});var A=e.insertAt;if(t&&typeof document<"u"){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",A==="top"&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}}qt(`.jse-absolute-popup.svelte-enkkpn { - position: relative; - left: 0; - top: 0; - width: 0; - height: 0; - z-index: 1001; -} -.jse-absolute-popup.svelte-enkkpn .jse-hidden-input:where(.svelte-enkkpn) { - position: fixed; - left: 0; - top: 0; - width: 0; - height: 0; - padding: 0; - margin: 0; - border: none; - outline: none; - overflow: hidden; -} -.jse-absolute-popup.svelte-enkkpn .jse-absolute-popup-content:where(.svelte-enkkpn) { - position: absolute; -}`);var CSA=FA('
      '),ISA=FA('
      ');function dSA(t,e){St(e,!1);var A=N(e,"popup",8),i=N(e,"closeAbsolutePopup",8),n=IA(),o=IA();function a(C){A().options&&A().options.closeOnOuterClick&&!Nh(C.target,I=>I===c(n))&&i()(A().id)}function r(C){g2(C)==="Escape"&&(C.preventDefault(),C.stopPropagation(),i()(A().id))}is(function(){c(o)&&c(o).focus()}),Ai();var s=ISA();ue("mousedown",i2,function(C){a(C)},!0),ue("keydown",i2,r,!0),ue("wheel",i2,function(C){a(C)},!0);var g=CA(s),l=C=>{var I=CSA(),d=CA(I);Jo(d,B=>R(o,B),()=>c(o)),$nA(bA(d,2),()=>A().component,(B,E)=>{E(B,e1(()=>A().props))}),ve(B=>Yl(I,B),[()=>(c(n),G(A()),EA(()=>(function(B,E){var Q=B.getBoundingClientRect(),{left:f,top:b,positionAbove:S,positionLeft:M}=(function(){if(E.anchor){var{anchor:D,width:F=0,height:_=0,offsetTop:U=0,offsetLeft:J=0,position:j}=E,{left:AA,top:O,bottom:DA,right:P}=D.getBoundingClientRect(),aA=j==="top"||O+_>window.innerHeight&&O>_,iA=j==="left"||AA+F>window.innerWidth&&AA>F;return{left:iA?P-J:AA+J,top:aA?O-U:DA+U,positionAbove:aA,positionLeft:iA}}if(typeof E.left=="number"&&typeof E.top=="number"){var{left:BA,top:oA,width:sA=0,height:hA=0}=E;return{left:BA,top:oA,positionAbove:oA+hA>window.innerHeight&&oA>hA,positionLeft:BA+sA>window.innerWidth&&BA>sA}}throw new Error('Invalid config: pass either "left" and "top", or pass "anchor"')})();return(S?"bottom: ".concat(Q.top-b,"px;"):"top: ".concat(b-Q.top,"px;"))+(M?"right: ".concat(Q.left-f,"px;"):"left: ".concat(f-Q.left,"px;"))})(c(n),A().options)))]),lA(C,I)};TA(g,C=>{c(n)&&C(l)}),Jo(s,C=>R(n,C),()=>c(n)),ue("mousedown",s,function(C){C.stopPropagation()}),ue("keydown",s,r),lA(t,s),xt()}var BSA=FA(" ",1);function yL(t,e){St(e,!1);var A=Cr("jsoneditor:AbsolutePopup"),i=IA([],!0);function n(r){var s=c(i).findIndex(l=>l.id===r);if(s!==-1){var g=c(i)[s];g.options.onClose&&g.options.onClose(),R(i,c(i).filter(l=>l.id!==r))}}(function(r,s){InA().set(r,s)})("absolute-popup",{openAbsolutePopup:function(r,s,g){A("open...",s,g);var l={id:th(),component:r,props:s||{},options:g||{}};return R(i,[...c(i),l]),l.id},closeAbsolutePopup:n}),RA(()=>c(i),()=>{A("popups",c(i))}),kn(),Ai(!0);var o=BSA(),a=At(o);Qa(a,1,()=>c(i),Na,(r,s)=>{dSA(r,{get popup(){return c(s)},closeAbsolutePopup:n})}),Ea(bA(a,2),e,"default",{},null),lA(t,o),xt()}function Cm(t,e){for(var A=new Set(e),i=t.replace(/ \(copy( \d+)?\)$/,""),n=t,o=1;A.has(n);){var a="copy"+(o>1?" "+o:"");n="".concat(i," (").concat(a,")"),o++}return n}function XC(t,e){var A=e-3;return t.length>e?t.substring(0,A)+"...":t}function ESA(t){if(t==="")return"";var e=t.toLowerCase();if(e==="null")return null;if(e==="true")return!0;if(e==="false")return!1;if(e!=="undefined"){var A=Number(t),i=parseFloat(t);return isNaN(A)||isNaN(i)?t:A}}var QSA={id:"jsonquery",name:"JSONQuery",description:` -

      - Enter a JSON Query function to filter, sort, or transform the data. - You can use functions like get, filter, - sort, pick, groupBy, uniq, etcetera. - Example query: filter(.age >= 18) -

      -`,createQuery:function(t,e){var{filter:A,sort:i,projection:n}=e,o=[];A&&A.path&&A.relation&&A.value&&o.push(["filter",[(a=A.relation,RS("1 ".concat(a," 1"))[0]),xy(A.path),ESA(A.value)]]);var a;return i&&i.path&&i.direction&&o.push(["sort",xy(i.path),i.direction==="desc"?"desc":"asc"]),n&&n.paths&&(n.paths.length>1?o.push(["pick",...n.paths.map(xy)]):o.push(["map",xy(n.paths[0])])),jq(["pipe",...o])},executeQuery:function(t,e,A){var i=goA(A,JSON)?t:(function(n){var o=A.stringify(n);return o!==void 0?JSON.parse(o):void 0})(t);return e.trim()!==""?qq(i,e):i}};function xy(t){return["get",...t]}var hSA=s1("");function uSA(t,e){St(e,!1);var A=870711,i=IA(""),n=N(e,"data",8);function o(r){if(!r||!r.raw)return"";var s=r.raw,g={};return s=s.replace(/\s(?:xml:)?id=["']?([^"')\s]+)/g,(l,C)=>{var I="fa-".concat((A+=1).toString(16));return g[C]=I,' id="'.concat(I,'"')}),s=s.replace(/#(?:([^'")\s]+)|xpointer\(id\((['"]?)([^')]+)\2\)\))/g,(l,C,I,d)=>{var B=C||d;return B&&g[B]?"#".concat(g[B]):l}),s}RA(()=>G(n()),()=>{R(i,o(n()))}),kn();var a=hSA();XnA(CA(a),()=>c(i),!0),lA(t,a),xt()}qt(` - .fa-icon.svelte-v67cny { - display: inline-block; - fill: currentColor; - } - .fa-flip-horizontal.svelte-v67cny { - transform: scale(-1, 1); - } - .fa-flip-vertical.svelte-v67cny { - transform: scale(1, -1); - } - .fa-spin.svelte-v67cny { - animation: svelte-v67cny-fa-spin 1s 0s infinite linear; - } - .fa-inverse.svelte-v67cny { - color: #fff; - } - .fa-pulse.svelte-v67cny { - animation: svelte-v67cny-fa-spin 1s infinite steps(8); - } - @keyframes svelte-v67cny-fa-spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } - } -`);var fSA=s1(""),mSA=s1(""),pSA=s1(""),wSA=s1("",1);function Vi(t,e){var A=ky(e,["children","$$slots","$$events","$$legacy"]),i=ky(A,["class","data","scale","spin","inverse","pulse","flip","label","style"]);St(e,!1);var n=N(e,"class",8,""),o=N(e,"data",8),a=IA(),r=N(e,"scale",8,1),s=N(e,"spin",8,!1),g=N(e,"inverse",8,!1),l=N(e,"pulse",8,!1),C=N(e,"flip",8,void 0),I=N(e,"label",8,""),d=N(e,"style",8,""),B=IA(10),E=IA(10),Q=IA(),f=IA();function b(){var M=1;return r()!==void 0&&(M=Number(r())),isNaN(M)||M<=0?(console.warn('Invalid prop: prop "scale" should be a number over 0.'),1):1*M}function S(){return c(a)?Math.max(c(a).width,c(a).height)/16:1}RA(()=>(G(o()),G(d()),G(r())),()=>{R(a,(function(M){var D;if(M){if(!("definition"in M)){if("iconName"in M&&"icon"in M){M.iconName;var[F,_,,,U]=M.icon;D={width:F,height:_,paths:(Array.isArray(U)?U:[U]).map(J=>({d:J}))}}else D=M[Object.keys(M)[0]];return D}console.error("`import faIconName from '@fortawesome/package-name/faIconName` not supported - Please use `import { faIconName } from '@fortawesome/package-name/faIconName'` instead")}})(o())),d(),r(),R(B,c(a)?c(a).width/S()*b():0),R(E,c(a)?c(a).height/S()*b():0),R(Q,(function(){var M="";d()!==null&&(M+=d());var D=b();return D===1?M.length===0?"":M:(M===""||M.endsWith(";")||(M+="; "),"".concat(M,"font-size: ").concat(D,"em"))})()),R(f,c(a)?"0 0 ".concat(c(a).width," ").concat(c(a).height):"0 0 ".concat(c(B)," ").concat(c(E)))}),kn(),Ai(),(function(M,D){var F=ky(D,["children","$$slots","$$events","$$legacy"]),_=ky(F,["class","width","height","box","spin","inverse","pulse","flip","style","label"]),U=N(D,"class",8,""),J=N(D,"width",8),j=N(D,"height",8),AA=N(D,"box",8,"0 0 0 0"),O=N(D,"spin",8,!1),DA=N(D,"inverse",8,!1),P=N(D,"pulse",8,!1),aA=N(D,"flip",8,"none"),iA=N(D,"style",8,""),BA=N(D,"label",8,""),oA=fSA();jy(oA,()=>{var sA;return ye(ye({version:"1.1",class:"fa-icon ".concat((sA=U())!==null&&sA!==void 0?sA:""),width:J(),height:j(),"aria-label":BA(),role:BA()?"img":"presentation",viewBox:AA(),style:iA()},_),{},{[XQ]:{"fa-spin":O(),"fa-pulse":P(),"fa-inverse":DA(),"fa-flip-horizontal":aA()==="horizontal","fa-flip-vertical":aA()==="vertical"}})},void 0,void 0,void 0,"svelte-v67cny"),Ea(CA(oA),D,"default",{},null),lA(M,oA)})(t,e1({get label(){return I()},get width(){return c(B)},get height(){return c(E)},get box(){return c(f)},get style(){return c(Q)},get spin(){return s()},get flip(){return C()},get inverse(){return g()},get pulse(){return l()},get class(){return n()}},()=>i,{children:(M,D)=>{var F=bi();Ea(At(F),e,"default",{},_=>{var U=wSA(),J=At(U);Qa(J,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.paths)||[]})),Na,(DA,P)=>{var aA=mSA();jy(aA,()=>ye({},c(P))),lA(DA,aA)});var j=bA(J);Qa(j,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.polygons)||[]})),Na,(DA,P)=>{var aA=pSA();jy(aA,()=>ye({},c(P))),lA(DA,aA)});var AA=bA(j),O=DA=>{uSA(DA,{get data(){return c(a)},set data(P){R(a,P)},$$legacy:!0})};TA(AA,DA=>{c(a),EA(()=>{var P;return(P=c(a))===null||P===void 0?void 0:P.raw})&&DA(O)}),lA(_,U)}),lA(M,F)},$$slots:{default:!0}})),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-boolean-toggle.svelte-eli4ob { - padding: 0; - margin: 1px 0 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-value-color-boolean, #ff8c00); -} - -.jse-boolean-toggle.svelte-eli4ob:not(.jse-readonly) { - cursor: pointer; -}`);var DSA=FA('
      ');function ySA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"readOnly",9),o=N(e,"onPatch",9),a=N(e,"focus",9);Ai(!0);var r,s=DSA(),g=CA(s),l=tt(()=>i()===!0?NS:FS);Vi(g,{get data(){return c(l)}}),ve(()=>{Mn(s,"aria-checked",i()===!0),r=$t(s,1,"jse-boolean-toggle svelte-eli4ob",null,r,{"jse-readonly":n()}),Mn(s,"title",n()?"Boolean value ".concat(i()):"Click to toggle this boolean value")}),ue("mousedown",s,function(C){C.stopPropagation(),n()||(o()([{op:"replace",path:wt(A()),value:!i()}]),a()())}),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup, -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::before, -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::after { - background: var(--jse-color-picker-background, var(--jse-panel-background, #ebebeb)); - line-height: normal; -} -.jse-color-picker-popup.svelte-v77py2 .picker_slider, -.jse-color-picker-popup.svelte-v77py2 .picker_sl, -.jse-color-picker-popup.svelte-v77py2 .picker_editor input, -.jse-color-picker-popup.svelte-v77py2 .picker_sample, -.jse-color-picker-popup.svelte-v77py2 .picker_done button { - box-shadow: var(--jse-color-picker-border-box-shadow, #cbcbcb 0 0 0 1px); -} -.jse-color-picker-popup.svelte-v77py2 .picker_editor input { - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); -} -.jse-color-picker-popup.svelte-v77py2 .picker_done button { - background: var(--jse-button-background, #e0e0e0); - color: var(--jse-button-color, var(--jse-text-color, #4d4d4d)); -} -.jse-color-picker-popup.svelte-v77py2 .picker_done button:hover { - background: var(--jse-button-background-highlight, #e7e7e7); -}`);var vSA=FA('
      ');function bSA(t,e){St(e,!1);var A=N(e,"color",8),i=N(e,"onChange",8),n=N(e,"showOnTop",8),o=IA(),a=()=>{};is(Tt(function*(){var s,g=new((s=yield import("./chunk-GLGRLUIJ.js"))===null||s===void 0?void 0:s.default)({parent:c(o),color:A(),popup:n()?"top":"bottom",onDone(l){var C=l.rgba[3]===1?l.hex.substring(0,7):l.hex;i()(C)}});g.show(),a=()=>{g.destroy()}})),Hl(()=>{a()}),Ai();var r=vSA();Jo(r,s=>R(o,s),()=>c(o)),lA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-color-picker-button.svelte-13mgyo6 { - font-size: var(--jse-font-size-mono, 14px); - width: var(--jse-color-picker-button-size, 1em); - height: var(--jse-color-picker-button-size, 1em); - box-sizing: border-box; - padding: 0; - margin: 2px 0 0 calc(0.5 * var(--jse-padding, 10px)); - display: inline-flex; - vertical-align: top; - border: 1px solid var(--jse-text-color, #4d4d4d); - border-radius: 2px; - background: inherit; - outline: none; -} - -.jse-color-picker-button.svelte-13mgyo6:not(.jse-readonly) { - cursor: pointer; -}`);var MSA=FA('');function kSA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),{openAbsolutePopup:n}=r1("absolute-popup"),o=N(e,"path",9),a=N(e,"value",9),r=N(e,"readOnly",9),s=N(e,"onPatch",9),g=N(e,"focus",9);function l(B){s()([{op:"replace",path:wt(o()),value:B}]),C()}function C(){g()()}RA(()=>G(a()),()=>{R(A,noA(a()))}),RA(()=>(G(r()),G(a())),()=>{R(i,r()?"Color ".concat(a()):"Click to open a color picker")}),kn(),Ai(!0);var I,d=MSA();ve(()=>{var B;I=$t(d,1,"jse-color-picker-button svelte-13mgyo6",null,I,{"jse-readonly":r()}),Yl(d,"background: ".concat((B=c(A))!==null&&B!==void 0?B:"")),Mn(d,"title",c(i)),Mn(d,"aria-label",c(i))}),ue("click",d,function(B){var E,Q;if(!r()){var f=B.target,b=f.getBoundingClientRect().top,S=((E=(Q=cm(f))===null||Q===void 0?void 0:Q.innerHeight)!==null&&E!==void 0?E:0)-b<300&&b>300,M={color:a(),onChange:l,showOnTop:S};n(bSA,M,{anchor:f,closeOnOuterClick:!0,onClose:C,offsetTop:18,offsetLeft:-8,height:300})}}),lA(t,d),xt()}var Z_=1e3,qf=100,Ry=100,nv=2e4,gh=[{start:0,end:qf}],SSA=1048576,xSA=1048576,X_=10485760,$_="Insert or paste contents, enter [ insert a new array, enter { to insert a new object, or start typing to insert a new value",oG="Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)",Gd="hover-insert-inside",Ny="hover-insert-after",IiA="hover-collection",AL="valid",diA="repairable",$C=336,A2=260,Uf=100,BiA={[Kl.asc]:"ascending",[Kl.desc]:"descending"};function hoA(t){for(var e=bS(t,r=>r.start),A=[e[0]],i=0;i0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"array",expanded:t,visibleSections:gh,items:[]}}function sG(){var{expanded:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"object",expanded:t,properties:{}}}var gG={createObjectDocumentState:sG,createArrayDocumentState:rG,createValueDocumentState:function(){return{type:"value"}}};function foA(t,e,A,i){var{createObjectDocumentState:n,createArrayDocumentState:o,createValueDocumentState:a}=i;return(function r(s,g,l){if(Array.isArray(s)){var C=lr(g)?g:o();if(l.length===0)return C;var I=Fr(l[0]),d=r(s[I],C.items[I],l.slice(1));return Or(C,["items",l[0]],d)}if(pn(s)){var B=wg(g)?g:n();if(l.length===0)return B;var E=l[0],Q=r(s[E],B.properties[E],l.slice(1));return Or(B,["properties",E],Q)}return aG(g)?g:a()})(t,e,A)}function Xg(t,e){return Vf(t,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],(A,i)=>{if(A!==void 0&&i!==void 0)return Array.isArray(A)?lr(i)?i:rG({expanded:!!eB(i)&&i.expanded}):pn(A)?wg(i)?i:sG({expanded:!!eB(i)&&i.expanded}):aG(i)?i:void 0},()=>!0)}function Vf(t,e,A,i,n){var o=i(t,e,A);if(Array.isArray(t)&&lr(o)&&n(o)){var a=[];return lG(t,o.visibleSections,s=>{var g=A.concat(String(s)),l=Vf(t[s],o.items[s],g,i,n);l!==void 0&&(a[s]=l)}),aiA(a,o.items)?o:ye(ye({},o),{},{items:a})}if(pn(t)&&wg(o)&&n(o)){var r={};return Object.keys(t).forEach(s=>{var g=A.concat(s),l=Vf(t[s],o.properties[s],g,i,n);l!==void 0&&(r[s]=l)}),aiA(Object.values(r),Object.values(o.properties))?o:ye(ye({},o),{},{properties:r})}return o}function lG(t,e,A){e.forEach(i=>{var{start:n,end:o}=i;ooA(n,Math.min(t.length,o),A)})}function Wf(t,e){for(var A=t,i=[],n=0;n{var C=eB(l)&&!l.expanded?ye(ye({},l),{},{expanded:!0}):l;return lr(C)?(function(I,d){if((function(Q,f){return Q.some(b=>f>=b.start&&f(function(g,l,C,I){return Vf(g,l,C,(d,B,E)=>Array.isArray(d)&&I(E)?lr(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):rG({expanded:!0}):pn(d)&&I(E)?wg(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):sG({expanded:!0}):B,d=>eB(d)&&d.expanded)})(r,s,[],i))}function piA(t,e,A,i){return mh(t,e,A,(n,o)=>i?(function(a,r,s){return Vf(a,r,s,(g,l)=>wiA(l),()=>!0)})(n,o,A):wiA(o))}function wiA(t){return lr(t)&&t.expanded?ye(ye({},t),{},{expanded:!1,visibleSections:gh}):wg(t)&&t.expanded?ye(ye({},t),{},{expanded:!1}):t}function moA(t,e,A){var i={json:t,documentState:e},n=A.reduce((o,a)=>({json:lg(o.json,[a]),documentState:LSA(o.json,o.documentState,a)}),i);return{json:n.json,documentState:Xg(n.json,n.documentState)}}function LSA(t,e,A){if($k(A))return DiA(t,e,A,void 0);if(AS(A))return yiA(t,e,A);if(gw(A)){var i=cg(t,A.path),n=P0(t,e,i);return n?yv(t,e,i,{type:"value",enforceString:n}):e}return lw(A)||Z2(A)?(function(o,a,r){if(Z2(r)&&r.from===r.path)return a;var s=a,g=cg(o,r.from),l=T0(o,s,g);return Z2(r)&&(s=yiA(o,s,{path:r.from})),s=DiA(o,s,{path:r.path},l),s})(t,e,A):e}function T0(t,e,A){try{return je(e,Wf(t,A))}catch{return}}function cG(t,e,A,i,n){var o=foA(t,e,A,n);return j4(o,Wf(t,A),a=>{var r=je(t,A);return i(r,a)})}function yv(t,e,A,i){return(function(n,o,a,r,s){var g=foA(n,o,a,s);return Or(g,Wf(n,a),r)})(t,e,A,i,gG)}function mh(t,e,A,i){return cG(t,e,A,i,gG)}function DiA(t,e,A,i){var n=cg(t,A.path),o=e;return o=mh(t,o,Ki(n),(a,r)=>{if(!lr(r))return r;var s=Fr(mi(n)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:s{if(!lr(r))return r;var s=Fr(mi(i)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:g.slice(0,s).concat(g.slice(s+1)),visibleSections:poA(l,s,-1)})}):(function(a,r,s){var g=Wf(a,s);return br(r,g)?Ad(r,Wf(a,s)):r})(t,e,i)}function poA(t,e,A){return(function(i){for(var n=i.slice(0),o=1;o({start:i.start>e?i.start+A:i.start,end:i.end>e?i.end+A:i.end})))}function P0(t,e,A){var i,n=je(t,A),o=T0(t,e,A),a=aG(o)?o.enforceString:void 0;return typeof a=="boolean"?a:typeof(i=n)=="string"&&typeof Rh(i,JSON)!="string"}function Im(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=t.indexOf(e);return i!==-1?A?t.slice(i):t.slice(i+1):[]}function CG(t,e){var A=[];return(function i(n,o,a){A.push(a),qo(n)&&lr(o)&&o.expanded&&lG(n,o.visibleSections,r=>{i(n[r],o.items[r],a.concat(String(r)))}),ia(n)&&wg(o)&&o.expanded&&Object.keys(n).forEach(r=>{i(n[r],o.properties[r],a.concat(r))})})(t,e,[]),A}function woA(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];return(function n(o,a){i.push({path:a,type:Uc.value});var r=T0(t,e,a);if(o&&eB(r)&&r.expanded){if(A&&i.push({path:a,type:Uc.inside}),qo(o)){var s=lr(r)?r.visibleSections:gh;lG(o,s,g=>{var l=a.concat(String(g));n(o[g],l),A&&i.push({path:l,type:Uc.after})})}ia(o)&&Object.keys(o).forEach(g=>{var l=a.concat(g);i.push({path:l,type:Uc.key}),n(o[g],l),A&&i.push({path:l,type:Uc.after})})}})(t,[]),i}function eL(t,e,A){var i=CG(t,e),n=i.map(wt).indexOf(wt(A));if(n!==-1&&n3&&arguments[3]!==void 0?arguments[3]:10240;return Kc(t,e,A,ASA({json:je(t,A)},i)?Jf:IG)}function tL(t,e,A){var i=T0(t,e,A);return eB(i)&&i.expanded?e:tB(t,e,A)}function Jf(t){return t.length===0||t.length===1&&t[0]==="0"}function kL(t){return t.length===0}function IG(){return!0}function Vy(){return!1}function yg(t){return t&&t.type===no.after||!1}function tr(t){return t&&t.type===no.inside||!1}function cr(t){return t&&t.type===no.key||!1}function In(t){return t&&t.type===no.value||!1}function lo(t){return t&&t.type===no.multi||!1}function vv(t){return lo(t)&&Qi(t.focusPath,t.anchorPath)}function Zf(t){return lo(t)||yg(t)||tr(t)||cr(t)||In(t)}function iL(t){return t&&t.type===no.text||!1}function o1(t,e){var A=[];return(function(i,n,o){if(n){var a=jd(n),r=ct(n);if(Qi(a,r))return o(a);if(i!==void 0){var s=yoA(a,r);if(a.length===s.length||r.length===s.length)return o(s);var g=Ds(a,r),l=e2(i,g),C=i1(i,g),I=a2(i,g,l),d=a2(i,g,C);if(!(I===-1||d===-1)){var B=je(i,s);if(ia(B)){for(var E=Object.keys(B),Q=I;Q<=d;Q++){var f=o(s.concat(E[Q]));if(f!==void 0)return f}return}if(qo(B)){for(var b=I;b<=d;b++){var S=o(s.concat(String(b)));if(S!==void 0)return S}return}throw new Error("Failed to create selection")}}}})(t,e,i=>{A.push(i)}),A}function DoA(t){return tr(t)?t.path:Ki(ct(t))}function e2(t,e){if(!lo(e))return e.path;var A=a2(t,e,e.anchorPath);return a2(t,e,e.focusPath)A?e.focusPath:e.anchorPath}function viA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(A){var n=i?ct(A):e2(t,A),o=(function(s,g,l){var C=CG(s,g),I=C.map(wt),d=wt(l),B=I.indexOf(d);if(B!==-1&&B>0)return C[B-1]})(t,e,n);if(i)return tr(A)||yg(A)?o!==void 0?Ds(n,n):void 0:o!==void 0?Ds(jd(A),o):void 0;if(yg(A)||tr(A))return Ui(n);if(cr(A)){if(o===void 0||o.length===0)return;var a=Ki(o),r=je(t,a);return Array.isArray(r)||qi(o)?Ui(o):l2(o)}return In(A),o!==void 0?Ui(o):void 0}}function biA(t,e,A,i){if(!A)return{caret:void 0,previous:void 0,next:void 0};var n=woA(t,e,i),o=n.findIndex(a=>Qi(a.path,ct(A))&&String(a.type)===String(A.type));return{caret:o!==-1?n[o]:void 0,previous:o!==-1&&o>0?n[o-1]:void 0,next:o!==-1&&oA[i].length;)i++;var n=A[i];return n===void 0||n.length===0||Array.isArray(je(t,Ki(n)))?Ui(n):l2(n)}function ph(t,e){if(e.length===1){var A=Dl(e);if(A.op==="replace")return Ui(cg(t,A.path))}if(!qi(e)&&e.every(a=>a.op==="move")){var i=Dl(e),n=e.slice(1);if((lw(i)||Z2(i))&&i.from!==i.path&&n.every(a=>(lw(a)||Z2(a))&&a.from===a.path))return l2(cg(t,i.path))}var o=e.filter(a=>a.op!=="test"&&a.op!=="remove"&&(a.op!=="move"||a.from!==a.path)&&typeof a.path=="string").map(a=>cg(t,a.path));if(!qi(o))return{type:no.multi,anchorPath:Dl(o),focusPath:mi(o)}}function yoA(t,e){for(var A=0;AA.length&&e.length>A.length;return{type:no.multi,anchorPath:i?A.concat(t[A.length]):A,focusPath:i?A.concat(e[A.length]):A}}function voA(t,e,A,i){if(cr(e))return String(mi(e.path));if(In(e)){var n=je(t,e.path);return typeof n=="string"?n:i.stringify(n,null,A)}if(lo(e)){if(qi(e.focusPath))return i.stringify(t,null,A);var o=DoA(e),a=je(t,o);if(Array.isArray(a)){if(vv(e)){var r=je(t,e.focusPath);return i.stringify(r,null,A)}return o1(t,e).map(s=>{var g=je(t,s);return"".concat(i.stringify(g,null,A),",")}).join(` -`)}return o1(t,e).map(s=>{var g=mi(s),l=je(t,s);return"".concat(i.stringify(g),": ").concat(i.stringify(l,null,A),",")}).join(` -`)}}function gr(t){return(cr(t)||In(t))&&t.edit===!0}function ih(t){return cr(t)||In(t)||lo(t)}function Fy(t){return cr(t)||In(t)||vv(t)}function SL(t){switch(t.type){case Uc.key:return l2(t.path);case Uc.value:return Ui(t.path);case Uc.after:return o2(t.path);case Uc.inside:return c2(t.path)}}function kiA(t,e){switch(t){case no.key:return l2(e);case no.value:return Ui(e);case no.after:return o2(e);case no.inside:return c2(e);case no.multi:case no.text:return Ds(e,e)}}function _y(t,e,A){if(e)return Xf(t,e,A)||W0(lo(e)?Ki(e.focusPath):e.path,A)?e:void 0}function Xf(t,e,A){if(t===void 0||!e)return!1;if(cr(e)||tr(e)||yg(e))return Qi(e.path,A);if(In(e))return W0(A,e.path);if(lo(e)){var i=e2(t,e),n=i1(t,e),o=Ki(e.focusPath);if(!W0(A,o)||A.length<=o.length)return!1;var a=a2(t,e,i),r=a2(t,e,n),s=a2(t,e,A);return s!==-1&&s>=a&&s<=r}return!1}function a2(t,e,A){var i=Ki(e.focusPath);if(!W0(A,i)||A.length<=i.length)return-1;var n=A[i.length],o=je(t,i);if(ia(o))return Object.keys(o).indexOf(n);if(qo(o)){var a=Fr(n);if(a');function MoA(t,e){St(e,!1);var A=Cr("jsoneditor:EditableDiv"),i=N(e,"value",9),n=N(e,"initialValue",9),o=N(e,"shortText",9,!1),a=N(e,"label",9),r=N(e,"onChange",9),s=N(e,"onCancel",9),g=N(e,"onFind",9),l=N(e,"onPaste",9,ya),C=N(e,"onValueClass",9,()=>""),I=IA(void 0,!0),d=IA(void 0,!0),B=!1;function E(){return c(I)?(function(b){return b.replace(/\n$/,"")})(c(I).innerText):""}function Q(b){c(I)&&$g(I,c(I).innerText=fh(b))}is(()=>{A("onMount",{value:i(),initialValue:n()}),Q(n()!==void 0?n():i()),c(I)&&(function(b){if(b.firstChild!=null){var S=document.createRange(),M=window.getSelection();S.setStart(b,1),S.collapse(!0),M?.removeAllRanges(),M?.addRange(S)}else b.focus()})(c(I))}),Hl(()=>{var b=E();A("onDestroy",{closed:B,value:i(),newValue:b}),B||b===i()||r()(b,t1.no)}),RA(()=>(G(C()),G(i())),()=>{R(d,C()(i()))}),kn(),Ai(!0);var f=GSA();Jo(f,b=>R(I,b),()=>c(I)),ve(b=>{Mn(f,"aria-label",a()),$t(f,1,b,"svelte-1r0oryi")},[()=>n1((G(Pc),c(d),G(o()),EA(()=>Pc("jse-editable-div",c(d),{"jse-short-text":o()}))))]),ue("input",f,function(){var b=E();b===""&&Q(""),R(d,C()(b))}),ue("keydown",f,function(b){b.stopPropagation();var S=g2(b);if(S==="Escape"&&(b.preventDefault(),B=!0,s()()),S==="Enter"||S==="Tab"){b.preventDefault(),B=!0;var M=E();r()(M,t1.nextInside)}S==="Ctrl+F"&&(b.preventDefault(),g()(!1)),S==="Ctrl+H"&&(b.preventDefault(),g()(!0))}),ue("paste",f,function(b){if(b.stopPropagation(),l()&&b.clipboardData){var S=b.clipboardData.getData("text/plain");l()(S)}}),ue("blur",f,function(){var b=document.hasFocus(),S=E();A("handleBlur",{hasFocus:b,closed:B,value:i(),newValue:S}),document.hasFocus()&&!B&&(B=!0,S!==i()&&r()(S,t1.self))}),lA(t,f),xt()}function KSA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"selection",9),o=N(e,"mode",9),a=N(e,"parser",9),r=N(e,"normalization",9),s=N(e,"enforceString",9),g=N(e,"onPatch",9),l=N(e,"onPasteJson",9),C=N(e,"onSelect",9),I=N(e,"onFind",9),d=N(e,"focus",9),B=N(e,"findNextInside",9);function E(S){return s()?S:Rh(S,a())}function Q(){C()(Ui(A())),d()()}Ai(!0);var f=tt(()=>(G(r()),G(i()),EA(()=>r().escapeValue(i())))),b=tt(()=>(G(gr),G(n()),EA(()=>gr(n())?n().initialValue:void 0)));MoA(t,{get value(){return c(f)},get initialValue(){return c(b)},label:"Edit value",onChange:function(S,M){g()([{op:"replace",path:wt(A()),value:E(r().unescapeValue(S))}],(D,F,_)=>{if(!_||Qi(A(),ct(_)))return{state:F,selection:M===t1.nextInside?B()(A()):Ui(A())}}),d()()},onCancel:Q,onPaste:function(S){try{var M=a().parse(S);aa(M)&&l()({path:A(),contents:M,onPasteAsJson:()=>{Q();var D=[{op:"replace",path:wt(A()),value:M}];g()(D,(F,_)=>({state:tB(F,_,A())}))}})}catch{}},get onFind(){return I()},onValueClass:function(S){return boA(E(r().unescapeValue(S)),o(),a())}}),xt()}function nh(t,e,A){var i=Ki(e),n=je(t,i);if(qo(n)){var o=Fr(mi(e));return A.map((g,l)=>({op:"add",path:wt(i.concat(String(o+l))),value:g.value}))}if(ia(n)){var a=mi(e),r=Object.keys(n),s=a!==void 0?Im(r,a,!0):[];return[...A.map(g=>{var l=Cm(g.key,r);return{op:"add",path:wt(i.concat(l)),value:g.value}}),...s.map(g=>a1(i,g))]}throw new Error("Cannot create insert operations: parent must be an Object or Array")}function xL(t,e,A){var i=je(t,e);if(Array.isArray(i)){var n=i.length;return A.map((o,a)=>({op:"add",path:wt(e.concat(String(n+a))),value:o.value}))}return A.map(o=>{var a=Cm(o.key,Object.keys(i));return{op:"add",path:wt(e.concat(a)),value:o.value}})}function dm(t,e,A,i){var n=e.filter(r=>r!==A),o=Cm(i,n),a=Im(e,A,!1);return[{op:"move",from:wt(t.concat(A)),path:wt(t.concat(o))},...a.map(r=>a1(t,r))]}function koA(t,e){var A=mi(e);if(qi(A))throw new Error("Cannot duplicate root object");var i=Ki(A),n=mi(A),o=je(t,i);if(qo(o)){var a=mi(e),r=a?Fr(mi(a))+1:0;return[...e.map((l,C)=>({op:"copy",from:wt(l),path:wt(i.concat(String(C+r)))}))]}if(ia(o)){var s=Object.keys(o),g=n!==void 0?Im(s,n,!1):[];return[...e.map(l=>{var C=Cm(mi(l),s);return{op:"copy",from:wt(l),path:wt(i.concat(C))}}),...g.map(l=>a1(i,l))]}throw new Error("Cannot create duplicate operations: parent must be an Object or Array")}function SoA(t,e){if(In(e))return[{op:"move",from:wt(e.path),path:""}];if(!lo(e))throw new Error("Cannot create extract operations: parent must be an Object or Array");var A=Ki(e.focusPath),i=je(t,A);if(qo(i)){var n=o1(t,e).map(a=>{var r=Fr(mi(a));return i[r]});return[{op:"replace",path:"",value:n}]}if(ia(i)){var o={};return o1(t,e).forEach(a=>{var r=String(mi(a));o[r]=i[r]}),[{op:"replace",path:"",value:o}]}throw new Error("Cannot extract: unsupported type of selection "+JSON.stringify(e))}function xoA(t,e,A,i){if(cr(e)){var n=aoA(A,i),o=Ki(e.path),a=je(t,o);return dm(o,Object.keys(a),mi(e.path),typeof n=="string"?n:A)}if(In(e)||lo(e)&&qi(e.focusPath))try{return[{op:"replace",path:wt(ct(e)),value:lm(A,F=>gm(F,i))}]}catch{return[{op:"replace",path:wt(ct(e)),value:A}]}if(lo(e)){var r=nL(A,i);return(function(F,_,U){var J=Dl(_),j=Ki(J),AA=je(F,j);if(qo(AA)){var O=Dl(_),DA=O?Fr(mi(O)):0;return[...gv(_),...U.map((YA,ee)=>({op:"add",path:wt(j.concat(String(ee+DA))),value:YA.value}))]}if(ia(AA)){var P=mi(_),aA=Ki(P),iA=mi(P),BA=Object.keys(AA),oA=iA!==void 0?Im(BA,iA,!1):[],sA=new Set(_.map(YA=>mi(YA))),hA=BA.filter(YA=>!sA.has(YA));return[...gv(_),...U.map(YA=>{var ee=Cm(YA.key,hA);return{op:"add",path:wt(aA.concat(ee)),value:YA.value}}),...oA.map(YA=>a1(aA,YA))]}throw new Error("Cannot create replace operations: parent must be an Object or Array")})(t,o1(t,e),r)}if(yg(e)){var s=nL(A,i),g=e.path,l=Ki(g),C=je(t,l);if(qo(C)){var I=Fr(mi(g));return nh(t,l.concat(String(I+1)),s)}if(ia(C)){var d=String(mi(g)),B=Object.keys(C);if(qi(B)||mi(B)===d)return xL(t,l,s);var E=B.indexOf(d),Q=B[E+1];return nh(t,l.concat(Q),s)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}if(tr(e)){var f=nL(A,i),b=e.path,S=je(t,b);if(qo(S))return nh(t,b.concat("0"),f);if(ia(S)){var M=Object.keys(S);if(qi(M))return xL(t,b,f);var D=Dl(M);return nh(t,b.concat(D),f)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}throw new Error("Cannot insert: unsupported type of selection "+JSON.stringify(e))}function gv(t){return t.map(e=>({op:"remove",path:wt(e)})).reverse()}function a1(t,e){return{op:"move",from:wt(t.concat(e)),path:wt(t.concat(e))}}function nL(t,e){var A=/^\s*{/.test(t),i=/^\s*\[/.test(t),n=aoA(t,e),o=n!==void 0?n:lm(t,a=>gm(a,e));return A&&pn(o)||i&&Array.isArray(o)?[{key:"New item",value:o}]:Array.isArray(o)?o.map((a,r)=>({key:"New item "+r,value:a})):pn(o)?Object.keys(o).map(a=>({key:a,value:o[a]})):[{key:"New item",value:o}]}function RoA(t,e){if(cr(e)){var A=Ki(e.path),i=je(t,A),n=dm(A,Object.keys(i),mi(e.path),"");return{operations:n,newSelection:ph(t,n)}}if(In(e))return{operations:[{op:"replace",path:wt(e.path),value:""}],newSelection:e};if(lo(e)){var o=o1(t,e),a=gv(o),r=mi(o);if(qi(r))return{operations:[{op:"replace",path:"",value:""}],newSelection:Ui([])};var s=Ki(r),g=je(t,s);if(qo(g)){var l=Dl(o),C=Fr(mi(l));return{operations:a,newSelection:C===0?c2(s):o2(s.concat(String(C-1)))}}if(ia(g)){var I=Object.keys(g),d=Dl(o),B=mi(d),E=I.indexOf(B),Q=I[E-1];return{operations:a,newSelection:E===0?c2(s):o2(s.concat(Q))}}throw new Error("Cannot create remove operations: parent must be an Object or Array")}throw new Error("Cannot remove: unsupported type of selection "+JSON.stringify(e))}function NoA(t,e){var A=(function(i,n){if(qi(n)||!n.every(Z2))return n;var o=[];for(var a of n){var r=SiA(Qs(a.from)),s=SiA(Qs(a.path));if(!r||!s)return n;o.push({from:r,path:s,operation:a})}var g=o[0].path.parent,l=je(i,g);if(!ia(l)||!o.every(B=>(function(E,Q){return Qi(E.from.parent,Q)&&Qi(E.path.parent,Q)})(B,g)))return n;var C=(function(B,E){var Q=Object.keys(E),f=Q.slice();for(var b of B){var S=f.indexOf(b.from.key);S!==-1&&(f.splice(S,1),f.push(b.path.key))}for(var M=0;MB.operation,d=o.filter(B=>B.operation.from!==B.operation.path);return d.some(B=>B.path.key===C)?d.map(I):[a1(g,C),...d.map(I)]})(t,e);return cw(t,A,{before:(i,n,o)=>{if(AS(n)){var a=Qs(n.path);return{revertOperations:[...o,...oL(i,a)]}}if(Z2(n)){var r=Qs(n.from);return{revertOperations:n.from===n.path?[n,...oL(i,r)]:[...o,...oL(i,r)]}}return{document:i}}})}function SiA(t){return t.length>0?{parent:Ki(t),key:mi(t)}:void 0}function oL(t,e){var A=Ki(e),i=mi(e),n=je(t,A);return ia(n)?Im(Object.keys(n),i,!1).map(o=>a1(A,o)):[]}function xiA(t){var e=t.activeIndex0?0:-1,A=t.items[e],i=t.items.map((n,o)=>ye(ye({},n),{},{active:o===e}));return ye(ye({},t),{},{items:i,activeItem:A,activeIndex:e})}function RiA(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=t.toLowerCase(),o=(A=i?.maxResults)!==null&&A!==void 0?A:1/0,a=i?.columns,r=[],s=[];function g(Q){r.length>=o||r.push(Q)}function l(Q,f){if(qo(f)){var b=s.length;s.push("0");for(var S=0;S=o)return;s.pop()}else if(ia(f)){var M=Object.keys(f),D=s.length;for(var F of(s.push(""),M))if(s[D]=F,NiA(F,Q,s,Yc.key,g),l(Q,f[F]),r.length>=o)return;s.pop()}else NiA(String(f),Q,s,Yc.value,g)}if(t==="")return[];if(a){if(!Array.isArray(e))throw new Error("json must be an Array when option columns is defined");for(var C=0;CB.length+1;)s.pop();l(n,je(I,B))}if(r.length>=o)break}return r}return l(n,e),r}function NiA(t,e,A,i,n){var o=t.toLowerCase(),a=0,r=-1,s=-1;do(s=o.indexOf(e,r))!==-1&&(r=s+e.length,n({path:A.slice(0),field:i,fieldIndex:a,start:s,end:r}),a++);while(s!==-1)}function RL(t,e,A,i){return t.substring(0,A)+e+t.substring(i)}function FiA(t,e,A){var i=t;return pS(A,n=>{i=RL(i,e,n.start,n.end)}),i}function USA(t,e,A,i,n){var{field:o,path:a,start:r,end:s}=i;if(o===Yc.key){var g=Ki(a),l=je(t,g),C=mi(a),I=dm(g,Object.keys(l),C,RL(C,A,r,s));return{newSelection:ph(t,I),operations:I}}if(o===Yc.value){var d=je(t,a);if(d===void 0)throw new Error("Cannot replace: path not found ".concat(wt(a)));var B=typeof d=="string"?d:String(d),E=P0(t,e,a),Q=RL(B,A,r,s),f=[{op:"replace",path:wt(a),value:E?Q:Rh(Q,n)}];return{newSelection:ph(t,f),operations:f}}throw new Error("Cannot replace: unknown type of search result field ".concat(o))}function _iA(t){return t.path.concat(t.field,String(t.fieldIndex))}function LiA(t){var e=uoA(t)?t.searchResults.filter(A=>A.field===Yc.key):void 0;return e&&e.length>0?e:void 0}function GiA(t){var e=uoA(t)?t.searchResults.filter(A=>A.field===Yc.value):void 0;return e&&e.length>0?e:void 0}var JSA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function FoA(t,e){return e.reduce((A,i)=>(function(n,o,a,r){return cG(n,o,a,r,JSA)})(t,A,i.path,(n,o)=>ye(ye({},o),{},{searchResults:o.searchResults?o.searchResults.concat(i):[i]})),void 0)}function lv(t){var e,A=(e=t?.searchResults)!==null&&e!==void 0?e:[],i=wg(t)?Object.values(t.properties).flatMap(lv):lr(t)?t.items.flatMap(lv):[];return A.concat(i)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-highlight.svelte-19qyvy6 { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-highlight.jse-active.svelte-19qyvy6 { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -}`);var YSA=FA(" ");function _oA(t,e){St(e,!1);var A=IA(),i=N(e,"text",8),n=N(e,"searchResultItems",8);RA(()=>(G(i()),G(n())),()=>{R(A,(function(a,r){var s=[],g=0;for(var l of r){var C=a.slice(g,l.start);C!==""&&s.push({resultIndex:void 0,type:"normal",text:C,active:!1});var I=a.slice(l.start,l.end);s.push({resultIndex:l.resultIndex,type:"highlight",text:I,active:l.active}),g=l.end}var d=mi(r);return d&&d.endc(A),Na,(a,r)=>{var s=bi(),g=At(s),l=I=>{var d=ur();ve(()=>Rt(d,(c(r),EA(()=>c(r).text)))),lA(I,d)},C=I=>{var d,B=YSA(),E=CA(B);ve((Q,f)=>{d=$t(B,1,"jse-highlight svelte-19qyvy6",null,d,{"jse-active":c(r).active}),Mn(B,"data-search-result-index",Q),Rt(E,f)},[()=>(c(r),EA(()=>String(c(r).resultIndex))),()=>(G(fh),c(r),EA(()=>fh(c(r).text)))]),lA(I,B)};TA(g,I=>{c(r),EA(()=>c(r).type==="normal")?I(l):I(C,!1)}),lA(a,s)}),lA(t,o),xt()}function Wy(t){var e=1e3;if(t<900)return t.toFixed()+" B";var A=t/e;if(A<900)return A.toFixed(1)+" KB";var i=A/e;if(i<900)return i.toFixed(1)+" MB";var n=i/e;return n<900?n.toFixed(1)+" GB":(n/e).toFixed(1)+" TB"}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tag.svelte-ubve9r { - border: none; - font-size: 80%; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - border-radius: 2px; - cursor: pointer; - display: inline-block; - padding: 0 4px; - line-height: normal; - margin: 1px 0; -} -.jse-tag.svelte-ubve9r:hover { - opacity: 0.8; -} -.jse-tag.disabled.svelte-ubve9r { - opacity: 0.7; - cursor: inherit; -}`);var TSA=FA('');function Zy(t,e){St(e,!0);var A,i=Dg(()=>e.onclick?o=>{o.preventDefault(),o.stopPropagation(),e.onclick()}:void 0),n=TSA();n.__click=function(){for(var o,a=arguments.length,r=new Array(a),s=0;s2?r-2:0),g=2;g{var C,I=(C=a())!==null&&C!==void 0?C:null;l.ensure(I,I&&(d=>I(d,...s)))},Vd)})(CA(n),()=>{var o;return(o=e.children)!==null&&o!==void 0?o:BkA}),ve(()=>A=$t(n,1,"jse-tag svelte-ubve9r",null,A,{disabled:!e.onclick})),lA(t,n),xt()}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-value.jse-string.svelte-1saqp8c { - color: var(--jse-value-color-string, #008000); -} -.jse-value.jse-object.svelte-1saqp8c, .jse-value.jse-array.svelte-1saqp8c { - min-width: 16px; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-value.jse-number.svelte-1saqp8c { - color: var(--jse-value-color-number, #ee422e); -} -.jse-value.jse-boolean.svelte-1saqp8c { - color: var(--jse-value-color-boolean, #ff8c00); -} -.jse-value.jse-null.svelte-1saqp8c { - color: var(--jse-value-color-null, #004ed0); -} -.jse-value.jse-invalid.svelte-1saqp8c { - color: var(--jse-text-color, #4d4d4d); -} -.jse-value.jse-url.svelte-1saqp8c { - color: var(--jse-value-color-url, #008000); - text-decoration: underline; -} - -.jse-value.svelte-1saqp8c { - display: inline-block; - min-width: 2em; - padding: 0 5px; - box-sizing: border-box; - outline: none; - border-radius: 1px; - vertical-align: top; - word-break: normal; - overflow-wrap: anywhere; - white-space: pre-wrap; -} -.jse-value.jse-table-cell.svelte-1saqp8c { - overflow-wrap: normal; - white-space: nowrap; -} -.jse-value.jse-empty.svelte-1saqp8c { - min-width: 4em; - outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - -moz-outline-radius: 2px; -} -.jse-value.jse-empty.svelte-1saqp8c::after { - pointer-events: none; - color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - content: "value"; -}`);var HSA=FA('
      ');function zSA(t,e){St(e,!0);var A=jC(!0),i=Dg(()=>c(A)&&typeof e.value=="string"&&e.value.length>e.truncateTextSize&&(!e.searchResultItems||!e.searchResultItems.some(d=>d.active&&d.end>e.truncateTextSize))),n=Dg(()=>c(i)&&typeof e.value=="string"?e.value.substring(0,e.truncateTextSize).trim():e.value),o=Dg(()=>Dv(e.value));function a(){R(A,!1)}var r=HSA();r.__click=function(d){typeof e.value=="string"&&c(o)&&nG(d)&&(d.preventDefault(),d.stopPropagation(),window.open(e.value,"_blank"))},r.__dblclick=function(d){e.readOnly||(d.preventDefault(),e.onSelect(sv(e.path)))};var s=CA(r),g=d=>{var B=Dg(()=>e.normalization.escapeValue(c(n)));_oA(d,{get text(){return c(B)},get searchResultItems(){return e.searchResultItems}})},l=d=>{var B=ur();ve(E=>Rt(B,E),[()=>fh(e.normalization.escapeValue(c(n)))]),lA(d,B)};TA(s,d=>{e.searchResultItems?d(g):d(l,!1)});var C=bA(s,2),I=d=>{Zy(d,{onclick:a,children:(B,E)=>{var Q=ur();ve(f=>Rt(Q,"Show more (".concat(f??"",")")),[()=>Wy(e.value.length)]),lA(B,Q)},$$slots:{default:!0}})};TA(C,d=>{c(i)&&typeof e.value=="string"&&d(I)}),ve(d=>{$t(r,1,d,"svelte-1saqp8c"),Mn(r,"title",c(o)?"Ctrl+Click or Ctrl+Enter to open url in new window":void 0)},[()=>n1(boA(e.value,e.mode,e.parser))]),lA(t,r),xt()}sm(["click","dblclick"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tooltip.svelte-brt1mq { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - border-radius: 3px; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - white-space: nowrap; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -}`);var OSA=FA('
      ');function PSA(t,e){var A=N(e,"text",8),i=OSA(),n=CA(i);ve(()=>Rt(n,A())),lA(t,i)}function wh(t,e){var A,{text:i,openAbsolutePopup:n,closeAbsolutePopup:o}=e;function a(){A=n(PSA,{text:i},{position:"top",width:10*i.length,offsetTop:3,anchor:t,closeOnOuterClick:!0})}function r(){o(A)}return t.addEventListener("mouseenter",a),t.addEventListener("mouseleave",r),{destroy(){t.removeEventListener("mouseenter",a),t.removeEventListener("mouseleave",r)}}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-timestamp.svelte-1jcpman { - padding: 0; - margin: 0; - vertical-align: middle; - display: inline-flex; - color: var(--jse-value-color-number, #ee422e); -}`);var jSA=FA('
      ');function qSA(t,e){St(e,!1);var A=IA(void 0,!0),i=r1("absolute-popup"),n=N(e,"value",9);RA(()=>G(n()),()=>{R(A,"Time: ".concat(new Date(n()).toString()))}),kn(),Ai(!0);var o=jSA();Vi(CA(o),{get data(){return Vq}}),vs(o,(a,r)=>wh?.(a,r),()=>ye({text:c(A)},i)),lA(t,o),xt()}function VSA(t){var e=[];return!t.isEditing&&qkA(t.value)&&e.push({component:ySA,props:t}),!t.isEditing&&VkA(t.value)&&e.push({component:kSA,props:t}),t.isEditing&&e.push({component:KSA,props:t}),t.isEditing||e.push({component:zSA,props:t}),!t.isEditing&&pL(t.value)&&e.push({component:qSA,props:t}),e}function vg(t){return t.map((e,A)=>ZSA.test(e)?"["+e+"]":/[.[\]]/.test(e)||e===""?'["'+(function(i){return i.replace(/"/g,'\\"')})(e)+'"]':(A>0?".":"")+e).join("")}function WSA(t){for(var e=[],A=0;Ao==='"',!0)),n('"')):e.push(i(o=>o==="]")),n("]")):e.push(i(o=>o==="."||o==="["));function i(o){for(var a=arguments.length>1&&arguments[1]!==void 0&&arguments[1],r="";A({x:t,y:t}),AxA={left:"right",right:"left",bottom:"top",top:"bottom"},exA={start:"end",end:"start"};function KiA(t,e,A){return qd(t,cv(e,A))}function bv(t,e){return typeof t=="function"?t(e):t}function iB(t){return t.split("-")[0]}function Mv(t){return t.split("-")[1]}function LoA(t){return t==="x"?"y":"x"}function GoA(t){return t==="y"?"height":"width"}var txA=new Set(["top","bottom"]);function WI(t){return txA.has(iB(t))?"y":"x"}function KoA(t){return LoA(WI(t))}function NL(t){return t.replace(/start|end/g,e=>exA[e])}var UiA=["left","right"],JiA=["right","left"],ixA=["top","bottom"],nxA=["bottom","top"];function oxA(t,e,A,i){var n=Mv(t),o=(function(a,r,s){switch(a){case"top":case"bottom":return s?r?JiA:UiA:r?UiA:JiA;case"left":case"right":return r?ixA:nxA;default:return[]}})(iB(t),A==="start",i);return n&&(o=o.map(a=>a+"-"+n),e&&(o=o.concat(o.map(NL)))),o}function Gy(t){return t.replace(/left|right|bottom|top/g,e=>AxA[e])}function axA(t){return typeof t!="number"?(function(e){return ye({top:0,right:0,bottom:0,left:0},e)})(t):{top:t,right:t,bottom:t,left:t}}function Iv(t){var{x:e,y:A,width:i,height:n}=t;return{width:i,height:n,top:A,left:e,right:e+i,bottom:A+n,x:e,y:A}}function YiA(t,e,A){var i,{reference:n,floating:o}=t,a=WI(e),r=KoA(e),s=GoA(r),g=iB(e),l=a==="y",C=n.x+n.width/2-o.width/2,I=n.y+n.height/2-o.height/2,d=n[s]/2-o[s]/2;switch(g){case"top":i={x:C,y:n.y-o.height};break;case"bottom":i={x:C,y:n.y+n.height};break;case"right":i={x:n.x+n.width,y:I};break;case"left":i={x:n.x-o.width,y:I};break;default:i={x:n.x,y:n.y}}switch(Mv(e)){case"start":i[r]-=d*(A&&l?-1:1);break;case"end":i[r]+=d*(A&&l?-1:1)}return i}var rxA=(function(){var t=Tt(function*(e,A,i){for(var{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:r}=i,s=a.filter(Boolean),g=yield r.isRTL==null?void 0:r.isRTL(A),l=yield r.getElementRects({reference:e,floating:A,strategy:o}),{x:C,y:I}=YiA(l,n,g),d=n,B={},E=0,Q=0;Q"u")&&(t instanceof ShadowRoot||t instanceof el(t).ShadowRoot)}var gxA=new Set(["inline","contents"]);function $f(t){var{overflow:e,overflowX:A,overflowY:i,display:n}=Hc(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+A)&&!gxA.has(n)}var lxA=new Set(["table","td","th"]);function cxA(t){return lxA.has(Dh(t))}var CxA=[":popover-open",":modal"];function dv(t){return CxA.some(e=>{try{return t.matches(e)}catch{return!1}})}var IxA=["transform","translate","scale","rotate","perspective"],dxA=["transform","translate","scale","rotate","perspective","filter"],BxA=["paint","layout","strict","content"];function LL(t){var e=BG(),A=Tc(t)?Hc(t):t;return IxA.some(i=>!!A[i]&&A[i]!=="none")||!!A.containerType&&A.containerType!=="normal"||!e&&!!A.backdropFilter&&A.backdropFilter!=="none"||!e&&!!A.filter&&A.filter!=="none"||dxA.some(i=>(A.willChange||"").includes(i))||BxA.some(i=>(A.contain||"").includes(i))}function BG(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}var ExA=new Set(["html","body","#document"]);function lh(t){return ExA.has(Dh(t))}function Hc(t){return el(t).getComputedStyle(t)}function Sv(t){return Tc(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ZI(t){if(Dh(t)==="html")return t;var e=t.assignedSlot||t.parentNode||TiA(t)&&t.host||X0(t);return TiA(e)?e.host:e}function YoA(t){var e=ZI(t);return lh(e)?t.ownerDocument?t.ownerDocument.body:t.body:$0(e)&&$f(e)?e:YoA(e)}function Am(t,e,A){var i;e===void 0&&(e=[]),A===void 0&&(A=!0);var n=YoA(t),o=n===((i=t.ownerDocument)==null?void 0:i.body),a=el(n);if(o){var r=GL(a);return e.concat(a,a.visualViewport||[],$f(n)?n:[],r&&A?Am(r):[])}return e.concat(n,Am(n,[],A))}function GL(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function ToA(t){var e=Hc(t),A=parseFloat(e.width)||0,i=parseFloat(e.height)||0,n=$0(t),o=n?t.offsetWidth:A,a=n?t.offsetHeight:i,r=Cv(A)!==o||Cv(i)!==a;return r&&(A=o,i=a),{width:A,height:i,$:r}}function EG(t){return Tc(t)?t:t.contextElement}function ch(t){var e=EG(t);if(!$0(e))return Z0(1);var A=e.getBoundingClientRect(),{width:i,height:n,$:o}=ToA(e),a=(o?Cv(A.width):A.width)/i,r=(o?Cv(A.height):A.height)/n;return a&&Number.isFinite(a)||(a=1),r&&Number.isFinite(r)||(r=1),{x:a,y:r}}var QxA=Z0(0);function HoA(t){var e=el(t);return BG()&&e.visualViewport?{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}:QxA}function nB(t,e,A,i){e===void 0&&(e=!1),A===void 0&&(A=!1);var n=t.getBoundingClientRect(),o=EG(t),a=Z0(1);e&&(i?Tc(i)&&(a=ch(i)):a=ch(t));var r=(function(D,F,_){return F===void 0&&(F=!1),!(!_||F&&_!==el(D))&&F})(o,A,i)?HoA(o):Z0(0),s=(n.left+r.x)/a.x,g=(n.top+r.y)/a.y,l=n.width/a.x,C=n.height/a.y;if(o)for(var I=el(o),d=i&&Tc(i)?el(i):i,B=I,E=GL(B);E&&i&&d!==B;){var Q=ch(E),f=E.getBoundingClientRect(),b=Hc(E),S=f.left+(E.clientLeft+parseFloat(b.paddingLeft))*Q.x,M=f.top+(E.clientTop+parseFloat(b.paddingTop))*Q.y;s*=Q.x,g*=Q.y,l*=Q.x,C*=Q.y,s+=S,g+=M,E=GL(B=el(E))}return Iv({width:l,height:C,x:s,y:g})}function Bv(t,e){var A=Sv(t).scrollLeft;return e?e.left+A:nB(X0(t)).left+A}function zoA(t,e){var A=t.getBoundingClientRect();return{x:A.left+e.scrollLeft-Bv(t,A),y:A.top+e.scrollTop}}var hxA=new Set(["absolute","fixed"]);function HiA(t,e,A){var i;if(e==="viewport")i=(function(o,a){var r=el(o),s=X0(o),g=r.visualViewport,l=s.clientWidth,C=s.clientHeight,I=0,d=0;if(g){l=g.width,C=g.height;var B=BG();(!B||B&&a==="fixed")&&(I=g.offsetLeft,d=g.offsetTop)}var E=Bv(s);if(E<=0){var Q=s.ownerDocument,f=Q.body,b=getComputedStyle(f),S=Q.compatMode==="CSS1Compat"&&parseFloat(b.marginLeft)+parseFloat(b.marginRight)||0,M=Math.abs(s.clientWidth-f.clientWidth-S);M<=25&&(l-=M)}else E<=25&&(l+=E);return{width:l,height:C,x:I,y:d}})(t,A);else if(e==="document")i=(function(o){var a=X0(o),r=Sv(o),s=o.ownerDocument.body,g=qd(a.scrollWidth,a.clientWidth,s.scrollWidth,s.clientWidth),l=qd(a.scrollHeight,a.clientHeight,s.scrollHeight,s.clientHeight),C=-r.scrollLeft+Bv(o),I=-r.scrollTop;return Hc(s).direction==="rtl"&&(C+=qd(a.clientWidth,s.clientWidth)-g),{width:g,height:l,x:C,y:I}})(X0(t));else if(Tc(e))i=(function(o,a){var r=nB(o,!0,a==="fixed"),s=r.top+o.clientTop,g=r.left+o.clientLeft,l=$0(o)?ch(o):Z0(1);return{width:o.clientWidth*l.x,height:o.clientHeight*l.y,x:g*l.x,y:s*l.y}})(e,A);else{var n=HoA(t);i={x:e.x-n.x,y:e.y-n.y,width:e.width,height:e.height}}return Iv(i)}function OoA(t,e){var A=ZI(t);return!(A===e||!Tc(A)||lh(A))&&(Hc(A).position==="fixed"||OoA(A,e))}function uxA(t,e,A){var i=$0(e),n=X0(e),o=A==="fixed",a=nB(t,!0,o,e),r={scrollLeft:0,scrollTop:0},s=Z0(0);function g(){s.x=Bv(n)}if(i||!i&&!o)if((Dh(e)!=="body"||$f(n))&&(r=Sv(e)),i){var l=nB(e,!0,o,e);s.x=l.x+e.clientLeft,s.y=l.y+e.clientTop}else n&&g();o&&!i&&n&&g();var C=!n||i||o?Z0(0):zoA(n,r);return{x:a.left+r.scrollLeft-s.x-C.x,y:a.top+r.scrollTop-s.y-C.y,width:a.width,height:a.height}}function aL(t){return Hc(t).position==="static"}function ziA(t,e){if(!$0(t)||Hc(t).position==="fixed")return null;if(e)return e(t);var A=t.offsetParent;return X0(t)===A&&(A=A.ownerDocument.body),A}function OiA(t,e){var A=el(t);if(dv(t))return A;if(!$0(t)){for(var i=ZI(t);i&&!lh(i);){if(Tc(i)&&!aL(i))return i;i=ZI(i)}return A}for(var n=ziA(t,e);n&&cxA(n)&&aL(n);)n=ziA(n,e);return n&&lh(n)&&aL(n)&&!LL(n)?A:n||(function(o){for(var a=ZI(o);$0(a)&&!lh(a);){if(LL(a))return a;if(dv(a))return null;a=ZI(a)}return null})(t)||A}var fxA={convertOffsetParentRelativeRectToViewportRelativeRect:function(t){var{elements:e,rect:A,offsetParent:i,strategy:n}=t,o=n==="fixed",a=X0(i),r=!!e&&dv(e.floating);if(i===a||r&&o)return A;var s={scrollLeft:0,scrollTop:0},g=Z0(1),l=Z0(0),C=$0(i);if((C||!C&&!o)&&((Dh(i)!=="body"||$f(a))&&(s=Sv(i)),$0(i))){var I=nB(i);g=ch(i),l.x=I.x+i.clientLeft,l.y=I.y+i.clientTop}var d=!a||C||o?Z0(0):zoA(a,s);return{width:A.width*g.x,height:A.height*g.y,x:A.x*g.x-s.scrollLeft*g.x+l.x+d.x,y:A.y*g.y-s.scrollTop*g.y+l.y+d.y}},getDocumentElement:X0,getClippingRect:function(t){var{element:e,boundary:A,rootBoundary:i,strategy:n}=t,o=A==="clippingAncestors"?dv(e)?[]:(function(g,l){var C=l.get(g);if(C)return C;for(var I=Am(g,[],!1).filter(b=>Tc(b)&&Dh(b)!=="body"),d=null,B=Hc(g).position==="fixed",E=B?ZI(g):g;Tc(E)&&!lh(E);){var Q=Hc(E),f=LL(E);f||Q.position!=="fixed"||(d=null),(B?!f&&!d:!f&&Q.position==="static"&&d&&hxA.has(d.position)||$f(E)&&!f&&OoA(g,E))?I=I.filter(b=>b!==E):d=Q,E=ZI(E)}return l.set(g,I),I})(e,this._c):[].concat(A),a=[...o,i],r=a[0],s=a.reduce((g,l)=>{var C=HiA(e,l,n);return g.top=qd(C.top,g.top),g.right=cv(C.right,g.right),g.bottom=cv(C.bottom,g.bottom),g.left=qd(C.left,g.left),g},HiA(e,r,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:OiA,getElementRects:(function(){var t=Tt(function*(e){var A=this.getOffsetParent||OiA,i=this.getDimensions,n=yield i(e.floating);return{reference:uxA(e.reference,yield A(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}});return function(e){return t.apply(this,arguments)}})(),getClientRects:function(t){return Array.from(t.getClientRects())},getDimensions:function(t){var{width:e,height:A}=ToA(t);return{width:e,height:A}},getScale:ch,isElement:Tc,isRTL:function(t){return Hc(t).direction==="rtl"}};function PiA(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function mxA(t,e,A,i){i===void 0&&(i={});var{ancestorScroll:n=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:s=!1}=i,g=EG(t),l=n||o?[...g?Am(g):[],...Am(e)]:[];l.forEach(Q=>{n&&Q.addEventListener("scroll",A,{passive:!0}),o&&Q.addEventListener("resize",A)});var C,I=g&&r?(function(Q,f){var b,S=null,M=X0(Q);function D(){var F;clearTimeout(b),(F=S)==null||F.disconnect(),S=null}return(function F(_,U){_===void 0&&(_=!1),U===void 0&&(U=1),D();var J=Q.getBoundingClientRect(),{left:j,top:AA,width:O,height:DA}=J;if(_||f(),O&&DA){var P={rootMargin:-Ly(AA)+"px "+-Ly(M.clientWidth-(j+O))+"px "+-Ly(M.clientHeight-(AA+DA))+"px "+-Ly(j)+"px",threshold:qd(0,cv(1,U))||1},aA=!0;try{S=new IntersectionObserver(iA,ye(ye({},P),{},{root:M.ownerDocument}))}catch{S=new IntersectionObserver(iA,P)}S.observe(Q)}function iA(BA){var oA=BA[0].intersectionRatio;if(oA!==U){if(!aA)return F();oA?F(!1,oA):b=setTimeout(()=>{F(!1,1e-7)},1e3)}oA!==1||PiA(J,Q.getBoundingClientRect())||F(),aA=!1}})(!0),D})(g,A):null,d=-1,B=null;a&&(B=new ResizeObserver(Q=>{var[f]=Q;f&&f.target===g&&B&&(B.unobserve(e),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var b;(b=B)==null||b.observe(e)})),A()}),g&&!s&&B.observe(g),B.observe(e));var E=s?nB(t):null;return s&&(function Q(){var f=nB(t);E&&!PiA(E,f)&&A(),E=f,C=requestAnimationFrame(Q)})(),A(),()=>{var Q;l.forEach(f=>{n&&f.removeEventListener("scroll",A),o&&f.removeEventListener("resize",A)}),I?.(),(Q=B)==null||Q.disconnect(),B=null,s&&cancelAnimationFrame(C)}}var pxA=function(t){return t===void 0&&(t=0),{name:"offset",options:t,fn:e=>Tt(function*(){var A,i,{x:n,y:o,placement:a,middlewareData:r}=e,s=yield(function(g,l){return _L.apply(this,arguments)})(e,t);return a===((A=r.offset)==null?void 0:A.placement)&&(i=r.arrow)!=null&&i.alignmentOffset?{}:{x:n+s.x,y:o+s.y,data:ye(ye({},s),{},{placement:a})}})()}},wxA=function(t){return t===void 0&&(t={}),{name:"shift",options:t,fn:e=>Tt(function*(){var{x:A,y:i,placement:n}=e,o=bv(t,e),{mainAxis:a=!0,crossAxis:r=!1,limiter:s={fn:S=>{var{x:M,y:D}=S;return{x:M,y:D}}}}=o,g=AnA(o,rkA),l={x:A,y:i},C=yield UoA(e,g),I=WI(iB(n)),d=LoA(I),B=l[d],E=l[I];if(a){var Q=d==="y"?"bottom":"right";B=KiA(B+C[d==="y"?"top":"left"],B,B-C[Q])}if(r){var f=I==="y"?"bottom":"right";E=KiA(E+C[I==="y"?"top":"left"],E,E-C[f])}var b=s.fn(ye(ye({},e),{},{[d]:B,[I]:E}));return ye(ye({},b),{},{data:{x:b.x-A,y:b.y-i,enabled:{[d]:a,[I]:r}}})})()}},DxA=function(t){return t===void 0&&(t={}),{name:"flip",options:t,fn:e=>Tt(function*(){var A,i,{placement:n,middlewareData:o,rects:a,initialPlacement:r,platform:s,elements:g}=e,l=bv(t,e),{mainAxis:C=!0,crossAxis:I=!0,fallbackPlacements:d,fallbackStrategy:B="bestFit",fallbackAxisSideDirection:E="none",flipAlignment:Q=!0}=l,f=AnA(l,akA);if((A=o.arrow)!=null&&A.alignmentOffset)return{};var b=iB(n),S=WI(r),M=iB(r)===r,D=yield s.isRTL==null?void 0:s.isRTL(g.floating),F=d||(M||!Q?[Gy(r)]:(function(hA){var YA=Gy(hA);return[NL(hA),YA,NL(YA)]})(r)),_=E!=="none";!d&&_&&F.push(...oxA(r,Q,E,D));var U=[r,...F],J=yield UoA(e,f),j=[],AA=((i=o.flip)==null?void 0:i.overflows)||[];if(C&&j.push(J[b]),I){var O=(function(hA,YA,ee){ee===void 0&&(ee=!1);var UA=Mv(hA),mA=KoA(hA),KA=GoA(mA),Pe=mA==="x"?UA===(ee?"end":"start")?"right":"left":UA==="start"?"bottom":"top";return YA.reference[KA]>YA.floating[KA]&&(Pe=Gy(Pe)),[Pe,Gy(Pe)]})(n,a,D);j.push(J[O[0]],J[O[1]])}if(AA=[...AA,{placement:n,overflows:j}],!j.every(hA=>hA<=0)){var DA,P,aA=(((DA=o.flip)==null?void 0:DA.index)||0)+1,iA=U[aA];if(iA&&(!(I==="alignment"&&S!==WI(iA))||AA.every(hA=>WI(hA.placement)!==S||hA.overflows[0]>0)))return{data:{index:aA,overflows:AA},reset:{placement:iA}};var BA=(P=AA.filter(hA=>hA.overflows[0]<=0).sort((hA,YA)=>hA.overflows[1]-YA.overflows[1])[0])==null?void 0:P.placement;if(!BA)switch(B){case"bestFit":var oA,sA=(oA=AA.filter(hA=>{if(_){var YA=WI(hA.placement);return YA===S||YA==="y"}return!0}).map(hA=>[hA.placement,hA.overflows.filter(YA=>YA>0).reduce((YA,ee)=>YA+ee,0)]).sort((hA,YA)=>hA[1]-YA[1])[0])==null?void 0:oA[0];sA&&(BA=sA);break;case"initialPlacement":BA=r}if(n!==BA)return{reset:{placement:BA}}}return{}})()}};function yxA(t){var e,A,i={autoUpdate:!0},n=t,o=s=>ye(ye(ye({},i),t||{}),s||{}),a=s=>{e&&A&&(n=o(s),((g,l,C)=>{var I=new Map,d=ye({platform:fxA},C),B=ye(ye({},d.platform),{},{_c:I});return rxA(g,l,ye(ye({},d),{},{platform:B}))})(e,A,n).then(g=>{var l;Object.assign(A.style,{position:g.strategy,left:"".concat(g.x,"px"),top:"".concat(g.y,"px")}),!((l=n)===null||l===void 0)&&l.onComputed&&n.onComputed(g)}))},r=s=>{Hl(s.subscribe(g=>{e===void 0?(e=g,a()):(Object.assign(e,g),a())}))};return[s=>{if("subscribe"in s)return r(s),{};e=s,a()},(s,g)=>{var l;A=s,n=o(g),setTimeout(()=>a(g),0),a(g);var C=()=>{l&&(l(),l=void 0)},I=function(){var{autoUpdate:d}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:n||{};C(),d!==!1&&znA().then(()=>mxA(e,A,()=>a(n),d===!0?{}:d))};return l=I(),{update(d){a(d),l=I(d)},destroy(){C()}}},a]}function vxA(t){var{loadOptions:e,filterText:A,items:i,multiple:n,value:o,itemId:a,groupBy:r,filterSelectedItems:s,itemFilter:g,convertStringItemsToObjects:l,filterGroupedItems:C,label:I}=t;if(i&&e)return i;if(!i)return[];i&&i.length>0&&typeof i[0]!="object"&&(i=l(i));var d=i.filter(B=>{var E=g(B[I],A,B);return E&&n&&o!=null&&o.length&&(E=!o.some(Q=>!!s&&Q[a]===B[a])),E});return r&&(d=C(d)),d}function bxA(t){return PoA.apply(this,arguments)}function PoA(){return(PoA=Tt(function*(t){var{dispatch:e,loadOptions:A,convertStringItemsToObjects:i,filterText:n}=t,o=yield A(n).catch(a=>{console.warn("svelte-select loadOptions error :>> ",a),e("error",{type:"loadOptions",details:a})});if(o&&!o.cancelled)return o?(o&&o.length>0&&typeof o[0]!="object"&&(o=i(o)),e("loaded",{items:o})):o=[],{filteredItems:o,loading:!1,focused:!0,listOpen:!0}})).apply(this,arguments)}qt(` - svg.svelte-1kxu7be { - width: var(--chevron-icon-width, 20px); - height: var(--chevron-icon-width, 20px); - color: var(--chevron-icon-colour, currentColor); - } -`);var MxA=s1(``);qt(` - svg.svelte-1hraxrc { - width: var(--clear-icon-width, 20px); - height: var(--clear-icon-width, 20px); - color: var(--clear-icon-color, currentColor); - } -`);var kxA=s1(``);function rL(t){lA(t,kxA())}qt(` - .loading.svelte-y9fi5p { - width: var(--spinner-width, 20px); - height: var(--spinner-height, 20px); - color: var(--spinner-color, var(--icons-color)); - animation: svelte-y9fi5p-rotate 0.75s linear infinite; - transform-origin: center center; - transform: none; - } - - .circle_path.svelte-y9fi5p { - stroke-dasharray: 90; - stroke-linecap: round; - } - - @keyframes svelte-y9fi5p-rotate { - 100% { - transform: rotate(360deg); - } - } -`);var SxA=s1('');qt(` - .svelte-select.svelte-1ul7oo4 { - /* deprecating camelCase custom props in favour of kebab-case for v5 */ - --borderRadius: var(--border-radius); - --clearSelectColor: var(--clear-select-color); - --clearSelectWidth: var(--clear-select-width); - --disabledBackground: var(--disabled-background); - --disabledBorderColor: var(--disabled-border-color); - --disabledColor: var(--disabled-color); - --disabledPlaceholderColor: var(--disabled-placeholder-color); - --disabledPlaceholderOpacity: var(--disabled-placeholder-opacity); - --errorBackground: var(--error-background); - --errorBorder: var(--error-border); - --groupItemPaddingLeft: var(--group-item-padding-left); - --groupTitleColor: var(--group-title-color); - --groupTitleFontSize: var(--group-title-font-size); - --groupTitleFontWeight: var(--group-title-font-weight); - --groupTitlePadding: var(--group-title-padding); - --groupTitleTextTransform: var(--group-title-text-transform); - --groupTitleBorderColor: var(--group-title-border-color); - --groupTitleBorderWidth: var(--group-title-border-width); - --groupTitleBorderStyle: var(--group-title-border-style); - --indicatorColor: var(--chevron-color); - --indicatorHeight: var(--chevron-height); - --indicatorWidth: var(--chevron-width); - --inputColor: var(--input-color); - --inputLeft: var(--input-left); - --inputLetterSpacing: var(--input-letter-spacing); - --inputMargin: var(--input-margin); - --inputPadding: var(--input-padding); - --itemActiveBackground: var(--item-active-background); - --itemColor: var(--item-color); - --itemFirstBorderRadius: var(--item-first-border-radius); - --itemHoverBG: var(--item-hover-bg); - --itemHoverColor: var(--item-hover-color); - --itemIsActiveBG: var(--item-is-active-bg); - --itemIsActiveColor: var(--item-is-active-color); - --itemIsNotSelectableColor: var(--item-is-not-selectable-color); - --itemPadding: var(--item-padding); - --listBackground: var(--list-background); - --listBorder: var(--list-border); - --listBorderRadius: var(--list-border-radius); - --listEmptyColor: var(--list-empty-color); - --listEmptyPadding: var(--list-empty-padding); - --listEmptyTextAlign: var(--list-empty-text-align); - --listMaxHeight: var(--list-max-height); - --listPosition: var(--list-position); - --listShadow: var(--list-shadow); - --listZIndex: var(--list-z-index); - --multiItemBG: var(--multi-item-bg); - --multiItemBorderRadius: var(--multi-item-border-radius); - --multiItemDisabledHoverBg: var(--multi-item-disabled-hover-bg); - --multiItemDisabledHoverColor: var(--multi-item-disabled-hover-color); - --multiItemHeight: var(--multi-item-height); - --multiItemMargin: var(--multi-item-margin); - --multiItemPadding: var(--multi-item-padding); - --multiSelectInputMargin: var(--multi-select-input-margin); - --multiSelectInputPadding: var(--multi-select-input-padding); - --multiSelectPadding: var(--multi-select-padding); - --placeholderColor: var(--placeholder-color); - --placeholderOpacity: var(--placeholder-opacity); - --selectedItemPadding: var(--selected-item-padding); - --spinnerColor: var(--spinner-color); - --spinnerHeight: var(--spinner-height); - --spinnerWidth: var(--spinner-width); - - --internal-padding: 0 0 0 16px; - - border: var(--border, 1px solid #d8dbdf); - border-radius: var(--border-radius, 6px); - min-height: var(--height, 42px); - position: relative; - display: flex; - align-items: stretch; - padding: var(--padding, var(--internal-padding)); - background: var(--background, #fff); - margin: var(--margin, 0); - width: var(--width, 100%); - font-size: var(--font-size, 16px); - max-height: var(--max-height); - } - - .svelte-1ul7oo4 { - box-sizing: var(--box-sizing, border-box); - } - - .svelte-select.svelte-1ul7oo4:hover { - border: var(--border-hover, 1px solid #b2b8bf); - } - - .value-container.svelte-1ul7oo4 { - display: flex; - flex: 1 1 0%; - flex-wrap: wrap; - align-items: center; - gap: 5px 10px; - padding: var(--value-container-padding, 5px 0); - position: relative; - overflow: var(--value-container-overflow, hidden); - align-self: stretch; - } - - .prepend.svelte-1ul7oo4, - .indicators.svelte-1ul7oo4 { - display: flex; - flex-shrink: 0; - align-items: center; - } - - .indicators.svelte-1ul7oo4 { - position: var(--indicators-position); - top: var(--indicators-top); - right: var(--indicators-right); - bottom: var(--indicators-bottom); - } - - input.svelte-1ul7oo4 { - position: absolute; - cursor: default; - border: none; - color: var(--input-color, var(--item-color)); - padding: var(--input-padding, 0); - letter-spacing: var(--input-letter-spacing, inherit); - margin: var(--input-margin, 0); - min-width: 10px; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: transparent; - font-size: var(--font-size, 16px); - } - - .svelte-1ul7oo4:not(.multi) > .value-container:where(.svelte-1ul7oo4) > input:where(.svelte-1ul7oo4) { - width: 100%; - height: 100%; - } - - input.svelte-1ul7oo4::placeholder { - color: var(--placeholder-color, #78848f); - opacity: var(--placeholder-opacity, 1); - } - - input.svelte-1ul7oo4:focus { - outline: none; - } - - .svelte-select.focused.svelte-1ul7oo4 { - border: var(--border-focused, 1px solid #006fe8); - border-radius: var(--border-radius-focused, var(--border-radius, 6px)); - } - - .disabled.svelte-1ul7oo4 { - background: var(--disabled-background, #ebedef); - border-color: var(--disabled-border-color, #ebedef); - color: var(--disabled-color, #c1c6cc); - } - - .disabled.svelte-1ul7oo4 input:where(.svelte-1ul7oo4)::placeholder { - color: var(--disabled-placeholder-color, #c1c6cc); - opacity: var(--disabled-placeholder-opacity, 1); - } - - .selected-item.svelte-1ul7oo4 { - position: relative; - overflow: var(--selected-item-overflow, hidden); - padding: var(--selected-item-padding, 0 20px 0 0); - text-overflow: ellipsis; - white-space: nowrap; - color: var(--selected-item-color, inherit); - font-size: var(--font-size, 16px); - } - - .multi.svelte-1ul7oo4 .selected-item:where(.svelte-1ul7oo4) { - position: absolute; - line-height: var(--height, 42px); - height: var(--height, 42px); - } - - .selected-item.svelte-1ul7oo4:focus { - outline: none; - } - - .hide-selected-item.svelte-1ul7oo4 { - opacity: 0; - } - - .icon.svelte-1ul7oo4 { - display: flex; - align-items: center; - justify-content: center; - } - - .clear-select.svelte-1ul7oo4 { - all: unset; - display: flex; - align-items: center; - justify-content: center; - width: var(--clear-select-width, 40px); - height: var(--clear-select-height, 100%); - color: var(--clear-select-color, var(--icons-color)); - margin: var(--clear-select-margin, 0); - pointer-events: all; - flex-shrink: 0; - } - - .clear-select.svelte-1ul7oo4:focus { - outline: var(--clear-select-focus-outline, 1px solid #006fe8); - } - - .loading.svelte-1ul7oo4 { - width: var(--loading-width, 40px); - height: var(--loading-height); - color: var(--loading-color, var(--icons-color)); - margin: var(--loading--margin, 0); - flex-shrink: 0; - } - - .chevron.svelte-1ul7oo4 { - width: var(--chevron-width, 40px); - height: var(--chevron-height, 40px); - background: var(--chevron-background, transparent); - pointer-events: var(--chevron-pointer-events, none); - color: var(--chevron-color, var(--icons-color)); - border: var(--chevron-border, 0 0 0 1px solid #d8dbdf); - flex-shrink: 0; - } - - .multi.svelte-1ul7oo4 { - padding: var(--multi-select-padding, var(--internal-padding)); - } - - .multi.svelte-1ul7oo4 input:where(.svelte-1ul7oo4) { - padding: var(--multi-select-input-padding, 0); - position: relative; - margin: var(--multi-select-input-margin, 5px 0); - flex: 1 1 40px; - } - - .svelte-select.error.svelte-1ul7oo4 { - border: var(--error-border, 1px solid #ff2d55); - background: var(--error-background, #fff); - } - - .a11y-text.svelte-1ul7oo4 { - z-index: 9999; - border: 0px; - clip: rect(1px, 1px, 1px, 1px); - height: 1px; - width: 1px; - position: absolute; - overflow: hidden; - padding: 0px; - white-space: nowrap; - } - - .multi-item.svelte-1ul7oo4 { - background: var(--multi-item-bg, #ebedef); - margin: var(--multi-item-margin, 0); - outline: var(--multi-item-outline, 1px solid #ddd); - border-radius: var(--multi-item-border-radius, 4px); - height: var(--multi-item-height, 25px); - line-height: var(--multi-item-height, 25px); - display: flex; - cursor: default; - padding: var(--multi-item-padding, 0 5px); - overflow: hidden; - gap: var(--multi-item-gap, 4px); - outline-offset: -1px; - max-width: var(--multi-max-width, none); - color: var(--multi-item-color, var(--item-color)); - } - - .multi-item.disabled.svelte-1ul7oo4:hover { - background: var(--multi-item-disabled-hover-bg, #ebedef); - color: var(--multi-item-disabled-hover-color, #c1c6cc); - } - - .multi-item-text.svelte-1ul7oo4 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - .multi-item-clear.svelte-1ul7oo4 { - display: flex; - align-items: center; - justify-content: center; - --clear-icon-color: var(--multi-item-clear-icon-color, #000); - } - - .multi-item.active.svelte-1ul7oo4 { - outline: var(--multi-item-active-outline, 1px solid #006fe8); - } - - .svelte-select-list.svelte-1ul7oo4 { - box-shadow: var(--list-shadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24)); - border-radius: var(--list-border-radius, 4px); - max-height: var(--list-max-height, 252px); - overflow-y: auto; - background: var(--list-background, #fff); - position: var(--list-position, absolute); - z-index: var(--list-z-index, 2); - border: var(--list-border); - } - - .prefloat.svelte-1ul7oo4 { - opacity: 0; - pointer-events: none; - } - - .list-group-title.svelte-1ul7oo4 { - color: var(--group-title-color, #8f8f8f); - cursor: default; - font-size: var(--group-title-font-size, 16px); - font-weight: var(--group-title-font-weight, 600); - height: var(--height, 42px); - line-height: var(--height, 42px); - padding: var(--group-title-padding, 0 20px); - text-overflow: ellipsis; - overflow-x: hidden; - white-space: nowrap; - text-transform: var(--group-title-text-transform, uppercase); - border-width: var(--group-title-border-width, medium); - border-style: var(--group-title-border-style, none); - border-color: var(--group-title-border-color, color); - } - - .empty.svelte-1ul7oo4 { - text-align: var(--list-empty-text-align, center); - padding: var(--list-empty-padding, 20px 0); - color: var(--list-empty-color, #78848f); - } - - .item.svelte-1ul7oo4 { - cursor: default; - height: var(--item-height, var(--height, 42px)); - line-height: var(--item-line-height, var(--height, 42px)); - padding: var(--item-padding, 0 20px); - color: var(--item-color, inherit); - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - transition: var(--item-transition, all 0.2s); - align-items: center; - width: 100%; - } - - .item.group-item.svelte-1ul7oo4 { - padding-left: var(--group-item-padding-left, 40px); - } - - .item.svelte-1ul7oo4:active { - background: var(--item-active-background, #b9daff); - } - - .item.active.svelte-1ul7oo4 { - background: var(--item-is-active-bg, #007aff); - color: var(--item-is-active-color, #fff); - } - - .item.first.svelte-1ul7oo4 { - border-radius: var(--item-first-border-radius, 4px 4px 0 0); - } - - .item.hover.svelte-1ul7oo4:not(.active) { - background: var(--item-hover-bg, #e7f2ff); - color: var(--item-hover-color, inherit); - } - - .item.not-selectable.svelte-1ul7oo4, - .item.hover.item.not-selectable.svelte-1ul7oo4, - .item.active.item.not-selectable.svelte-1ul7oo4, - .item.not-selectable.svelte-1ul7oo4:active { - color: var(--item-is-not-selectable-color, #999); - background: transparent; - } - - .required.svelte-1ul7oo4 { - opacity: 0; - z-index: -1; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - } -`);var xxA=FA('
      '),RxA=FA('
      No options
      '),NxA=FA('
      '),FxA=FA(' ',1),_xA=FA('
      '),LxA=FA('
      '),GxA=FA("
      "),KxA=FA(''),UxA=FA(''),JxA=FA(''),YxA=FA(''),TxA=FA(''),HxA=FA('
      ');function Td(t,e){var A=(function(dA){var SA={};for(var ae in dA.children&&(SA.default=!0),dA.$$slots)SA[ae]=!0;return SA})(e);St(e,!1);var i,n=IA(),o=IA(),a=IA(),r=IA(),s=IA(),g=IA(),l=IA(),C=IA(),I=IA(),d=GkA(),B=N(e,"justValue",12,null),E=N(e,"filter",8,vxA),Q=N(e,"getItems",8,bxA),f=N(e,"id",8,null),b=N(e,"name",8,null),S=N(e,"container",12,void 0),M=N(e,"input",12,void 0),D=N(e,"multiple",8,!1),F=N(e,"multiFullItemClearable",8,!1),_=N(e,"disabled",8,!1),U=N(e,"focused",12,!1),J=N(e,"value",12,null),j=N(e,"filterText",12,""),AA=N(e,"placeholder",8,"Please select"),O=N(e,"placeholderAlwaysShow",8,!1),DA=N(e,"items",12,null),P=N(e,"label",8,"label"),aA=N(e,"itemFilter",8,(dA,SA,ae)=>"".concat(dA).toLowerCase().includes(SA.toLowerCase())),iA=N(e,"groupBy",8,void 0),BA=N(e,"groupFilter",8,dA=>dA),oA=N(e,"groupHeaderSelectable",8,!1),sA=N(e,"itemId",8,"value"),hA=N(e,"loadOptions",8,void 0),YA=N(e,"containerStyles",8,""),ee=N(e,"hasError",8,!1),UA=N(e,"filterSelectedItems",8,!0),mA=N(e,"required",8,!1),KA=N(e,"closeListOnChange",8,!0),Pe=N(e,"clearFilterTextOnBlur",8,!0),Je=N(e,"createGroupHeaderItem",8,(dA,SA)=>({value:dA,[P()]:dA})),HA=()=>c(l),uA=N(e,"searchable",8,!0),ZA=N(e,"inputStyles",8,""),QA=N(e,"clearable",8,!0),WA=N(e,"loading",12,!1),MA=N(e,"listOpen",12,!1),be=N(e,"debounce",8,function(dA){var SA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;clearTimeout(i),i=setTimeout(dA,SA)}),LA=N(e,"debounceWait",8,300),pA=N(e,"hideEmptyState",8,!1),Ft=N(e,"inputAttributes",24,()=>({})),ht=N(e,"listAutoWidth",8,!0),Ee=N(e,"showChevron",8,!1),Kt=N(e,"listOffset",8,5),Ye=N(e,"hoverItemIndex",12,0),ze=N(e,"floatingConfig",24,()=>({})),ut=N(e,"class",8,""),Me=IA(),ei=IA(),Y=IA(),z=IA(),nA=IA();function rA(dA){return dA.map((SA,ae)=>({index:ae,value:SA,label:"".concat(SA)}))}function NA(dA){var SA=[],ae={};dA.forEach(it=>{var st=iA()(it);SA.includes(st)||(SA.push(st),ae[st]=[],st&&ae[st].push(Object.assign(Je()(st,it),{id:st,groupHeader:!0,selectable:oA()}))),ae[st].push(Object.assign({groupItem:!!st},it))});var xe=[];return BA()(SA).forEach(it=>{ae[it]&&xe.push(...ae[it])}),xe}function Ie(){var dA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,SA=arguments.length>1?arguments[1]:void 0;Ye(dA<0?0:dA),!SA&&iA()&&c(l)[Ye()]&&!c(l)[Ye()].selectable&&ci(1)}function Qe(){var dA=!0;if(J()){var SA=[],ae=[];J().forEach(xe=>{SA.includes(xe[sA()])?dA=!1:(SA.push(xe[sA()]),ae.push(xe))}),dA||J(ae)}return dA}function xA(dA){var SA=dA?dA[sA()]:J()[sA()];return DA().find(ae=>ae[sA()]===SA)}function _A(dA){return Et.apply(this,arguments)}function Et(){return(Et=Tt(function*(dA){var SA=J()[dA];J().length===1?J(void 0):J(J().filter(ae=>ae!==SA)),d("clear",SA)})).apply(this,arguments)}function et(dA){if(U())switch(dA.stopPropagation(),dA.key){case"Escape":dA.preventDefault(),_e();break;case"Enter":if(dA.preventDefault(),MA()){if(c(l).length===0)break;var SA=c(l)[Ye()];if(J()&&!D()&&J()[sA()]===SA[sA()]){_e();break}L(c(l)[Ye()])}break;case"ArrowDown":dA.preventDefault(),MA()?ci(1):(MA(!0),R(Me,void 0));break;case"ArrowUp":dA.preventDefault(),MA()?ci(-1):(MA(!0),R(Me,void 0));break;case"Tab":if(MA()&&U()){if(c(l).length===0||J()&&J()[sA()]===c(l)[Ye()][sA()])return _e();dA.preventDefault(),L(c(l)[Ye()]),_e()}break;case"Backspace":if(!D()||j().length>0)return;if(D()&&J()&&J().length>0){if(_A(c(Me)!==void 0?c(Me):J().length-1),c(Me)===0||c(Me)===void 0)break;R(Me,J().length>c(Me)?c(Me)-1:void 0)}break;case"ArrowLeft":if(!J()||!D()||j().length>0)return;c(Me)===void 0?R(Me,J().length-1):J().length>c(Me)&&c(Me)!==0&&R(Me,c(Me)-1);break;case"ArrowRight":if(!J()||!D()||j().length>0||c(Me)===void 0)return;c(Me)===J().length-1?R(Me,void 0):c(Me)0?MA(!0):void MA(!MA())}function dn(){d("clear",J()),J(void 0),_e(),Te()}function _e(){Pe()&&j(""),MA(!1)}KkA(Tt(function*(){R(ei,J()),R(Y,j()),R(z,D())})),is(()=>{MA()&&U(!0),U()&&M()&&M().focus()});var Wi=N(e,"ariaValues",8,dA=>"Option ".concat(dA,", selected.")),ui=N(e,"ariaListOpen",8,(dA,SA)=>"You are currently focused on option ".concat(dA,". There are ").concat(SA," results available.")),Mi=N(e,"ariaFocused",8,()=>"Select is focused, type to refine list, press down to open the menu."),zi,vt=IA(null);function Zi(){clearTimeout(zi),zi=setTimeout(()=>{_t=!1},100)}Hl(()=>{var dA;(dA=c(vt))===null||dA===void 0||dA.remove()});var _t=!1;function L(dA){dA&&dA.selectable!==!1&&(function(SA){if(SA){j("");var ae=Object.assign({},SA);if(ae.groupHeader&&!ae.selectable)return;J(D()?J()?J().concat([ae]):[ae]:J(ae)),setTimeout(()=>{KA()&&_e(),R(Me,void 0),d("change",J()),d("select",SA)})}})(dA)}function Ct(dA){_t||Ye(dA)}function ci(dA){if(c(l).filter(ae=>!Object.hasOwn(ae,"selectable")||ae.selectable===!0).length===0)return Ye(0);dA>0&&Ye()===c(l).length-1?Ye(0):dA<0&&Ye()===0?Ye(c(l).length-1):Ye(Ye()+dA);var SA=c(l)[Ye()];SA&&SA.selectable===!1&&(dA!==1&&dA!==-1||ci(dA))}function Bn(dA,SA,ae){if(!D())return SA&&SA[ae]===dA[ae]}var En=Yo,qn=Yo;function Yo(dA){return{update(SA){SA.scroll&&(Zi(),dA.scrollIntoView({behavior:"auto",block:"nearest"}))}}}var Co=IA({strategy:"absolute",placement:"bottom-start",middleware:[pxA(Kt()),DxA(),wxA()],autoUpdate:!1}),[ko,Zo,wo]=yxA(c(Co)),ha=IA(!0);RA(()=>(G(DA()),G(J())),()=>{DA(),J()&&(function(){if(typeof J()=="string"){var dA=(DA()||[]).find(SA=>SA[sA()]===J());J(dA||{[sA()]:J(),label:J()})}else D()&&Array.isArray(J())&&J().length>0&&J(J().map(SA=>typeof SA=="string"?{value:SA,label:SA}:SA))})()}),RA(()=>(G(Ft()),G(uA())),()=>{!Ft()&&uA()||(R(nA,Object.assign({autocapitalize:"none",autocomplete:"off",autocorrect:"off",spellcheck:!1,tabindex:0,type:"text","aria-autocomplete":"list"},Ft())),f()&&$g(nA,c(nA).id=f()),uA()||$g(nA,c(nA).readonly=!0))}),RA(()=>G(D()),()=>{D()&&J()&&(Array.isArray(J())?J([...J()]):J([J()]))}),RA(()=>(c(z),G(D())),()=>{c(z)&&!D()&&J()&&J(null)}),RA(()=>(G(D()),G(J())),()=>{D()&&J()&&J().length>1&&Qe()}),RA(()=>G(J()),()=>{J()&&(D()?JSON.stringify(J())!==JSON.stringify(c(ei))&&Qe()&&d("input",J()):c(ei)&&JSON.stringify(J()[sA()])===JSON.stringify(c(ei)[sA()])||d("input",J()))}),RA(()=>(G(J()),G(D()),c(ei)),()=>{!J()&&D()&&c(ei)&&d("input",J())}),RA(()=>(G(U()),G(M())),()=>{!U()&&M()&&_e()}),RA(()=>(G(j()),c(Y)),()=>{j()!==c(Y)&&(hA()||j().length!==0)&&(hA()?be()(Tt(function*(){WA(!0);var dA=yield Q()({dispatch:d,loadOptions:hA(),convertStringItemsToObjects:rA,filterText:j()});dA?(WA(dA.loading),MA(MA()?dA.listOpen:j().length>0),U(MA()&&dA.focused),DA(iA()?NA(dA.filteredItems):dA.filteredItems)):(WA(!1),U(!0),MA(!0))}),LA()):(MA(!0),D()&&R(Me,void 0)))}),RA(()=>(G(E()),G(hA()),G(j()),G(DA()),G(D()),G(J()),G(sA()),G(iA()),G(P()),G(UA()),G(aA())),()=>{R(l,E()({loadOptions:hA(),filterText:j(),items:DA(),multiple:D(),value:J(),itemId:sA(),groupBy:iA(),label:P(),filterSelectedItems:UA(),itemFilter:aA(),convertStringItemsToObjects:rA,filterGroupedItems:NA}))}),RA(()=>(G(D()),G(MA()),G(J()),c(l)),()=>{!D()&&MA()&&J()&&c(l)&&Ie(c(l).findIndex(dA=>dA[sA()]===J()[sA()]),!0)}),RA(()=>(G(MA()),G(D())),()=>{MA()&&D()&&Ye(0)}),RA(()=>G(j()),()=>{j()&&Ye(0)}),RA(()=>G(Ye()),()=>{var dA;dA=Ye(),d("hoverItem",dA)}),RA(()=>(G(D()),G(J())),()=>{R(n,D()?J()&&J().length>0:J())}),RA(()=>(c(n),G(j())),()=>{R(o,c(n)&&j().length>0)}),RA(()=>(c(n),G(QA()),G(_()),G(WA())),()=>{R(a,c(n)&&QA()&&!_()&&!WA())}),RA(()=>(G(O()),G(D()),G(AA()),G(J())),()=>{var dA;R(r,O()&&D()||D()&&((dA=J())===null||dA===void 0?void 0:dA.length)===0?AA():J()?"":AA())}),RA(()=>(G(J()),G(D())),()=>{var dA,SA;R(s,J()?(dA=D(),SA=void 0,SA=dA&&J().length>0?J().map(ae=>ae[P()]).join(", "):J()[P()],Wi()(SA)):"")}),RA(()=>(c(l),G(Ye()),G(U()),G(MA())),()=>{R(g,(function(){if(!c(l)||c(l).length===0)return"";var dA=c(l)[Ye()];if(MA()&&dA){var SA=c(l)?c(l).length:0;return ui()(dA[P()],SA)}return Mi()()})((c(l),Ye(),U(),MA())))}),RA(()=>G(DA()),()=>{(function(dA){dA&&dA.length!==0&&!dA.some(SA=>typeof SA!="object")&&J()&&(D()?!J().some(SA=>!SA||!SA[sA()]):J()[sA()])&&(Array.isArray(J())?J(J().map(SA=>xA(SA)||SA)):J(xA()||J()))})(DA())}),RA(()=>(G(D()),G(J()),G(sA())),()=>{B((D(),J(),sA(),D()?J()?J().map(dA=>dA[sA()]):null:J()?J()[sA()]:J()))}),RA(()=>(G(D()),c(ei),G(J())),()=>{D()||!c(ei)||J()||d("input",J())}),RA(()=>(G(MA()),c(l),G(D()),G(J())),()=>{MA()&&c(l)&&!D()&&!J()&&Ie()}),RA(()=>c(l),()=>{(function(dA){MA()&&d("filter",dA)})(c(l))}),RA(()=>(G(S()),G(ze()),c(Co)),()=>{S()&&ze()&&wo(Object.assign(c(Co),ze()))}),RA(()=>c(vt),()=>{R(C,!!c(vt))}),RA(()=>(c(vt),G(MA())),()=>{(function(dA,SA){if(!dA||!SA)return R(ha,!0);setTimeout(()=>{R(ha,!1)},0)})(c(vt),MA())}),RA(()=>(G(MA()),G(S()),c(vt)),()=>{MA()&&S()&&c(vt)&&(function(){var{width:dA}=S().getBoundingClientRect();$g(vt,c(vt).style.width=ht()?dA+"px":"auto")})()}),RA(()=>G(Ye()),()=>{R(I,Ye())}),RA(()=>(G(M()),G(MA()),G(U())),()=>{M()&&MA()&&!U()&&Te()}),RA(()=>(G(S()),G(ze())),()=>{var dA;S()&&((dA=ze())===null||dA===void 0?void 0:dA.autoUpdate)===void 0&&$g(Co,c(Co).autoUpdate=!0)}),kn();var Xo={getFilteredItems:HA,handleClear:dn};Ai();var ra,Do=HxA();ue("click",i2,function(dA){var SA;MA()||U()||!S()||S().contains(dA.target)||(SA=c(vt))!==null&&SA!==void 0&&SA.contains(dA.target)||Le()}),ue("keydown",i2,et);var re=CA(Do),di=dA=>{var SA,ae=NxA(),xe=CA(ae),it=Vt=>{var Ni=bi();Ea(At(Ni),e,"list-prepend",{},null),lA(Vt,Ni)};TA(xe,Vt=>{EA(()=>A["list-prepend"])&&Vt(it)});var st=bA(xe,2),bt=Vt=>{var Ni=bi();Ea(At(Ni),e,"list",{get filteredItems(){return c(l)}},null),lA(Vt,Ni)},Kn=Vt=>{var Ni=bi(),ka=At(Ni),Lt=Fi=>{var Oi=bi();Qa(At(Oi),1,()=>c(l),Na,(Vn,hn,Mt)=>{var sa,Ho=xxA(),u=CA(Ho);Ea(CA(u),e,"item",{get item(){return c(hn)},index:Mt},y=>{var x=ur();ve(()=>Rt(x,(c(hn),G(P()),EA(()=>{var H;return(H=c(hn))===null||H===void 0?void 0:H[P()]})))),lA(y,x)}),vs(u,(y,x)=>En?.(y),()=>({scroll:Bn(c(hn),J(),sA()),listDom:c(C)})),vs(u,(y,x)=>qn?.(y),()=>({scroll:c(I)===Mt,listDom:c(C)})),ve(y=>sa=$t(u,1,"item svelte-1ul7oo4",null,sa,y),[()=>{var y,x;return{"list-group-title":c(hn).groupHeader,active:Bn(c(hn),J(),sA()),first:(x=Mt,x===0),hover:Ye()===Mt,"group-item":c(hn).groupItem,"not-selectable":((y=c(hn))===null||y===void 0?void 0:y.selectable)===!1}}]),ue("mouseover",Ho,()=>Ct(Mt)),ue("focus",Ho,()=>Ct(Mt)),ue("click",Ho,VC(()=>(function(y){var{item:x,i:H}=y;if(x?.selectable!==!1)return J()&&!D()&&J()[sA()]===x[sA()]?_e():void((function(k){return k.groupHeader&&k.selectable||k.selectable||!k.hasOwnProperty("selectable")})(x)&&(Ye(H),L(x)))})({item:c(hn),i:Mt}))),ue("keydown",Ho,YI(VC(function(y){Kf.call(this,e,y)}))),lA(Vn,Ho)}),lA(Fi,Oi)},gt=Fi=>{var Oi=bi(),Vn=At(Oi),hn=Mt=>{var sa=bi();Ea(At(sa),e,"empty",{},Ho=>{lA(Ho,RxA())}),lA(Mt,sa)};TA(Vn,Mt=>{pA()||Mt(hn)},!0),lA(Fi,Oi)};TA(ka,Fi=>{c(l),EA(()=>c(l).length>0)?Fi(Lt):Fi(gt,!1)},!0),lA(Vt,Ni)};TA(st,Vt=>{EA(()=>A.list)?Vt(bt):Vt(Kn,!1)});var Ri=bA(st,2),Ji=Vt=>{var Ni=bi();Ea(At(Ni),e,"list-append",{},null),lA(Vt,Ni)};TA(Ri,Vt=>{EA(()=>A["list-append"])&&Vt(Ji)}),vs(ae,Vt=>Zo?.(Vt)),Jo(ae,Vt=>R(vt,Vt),()=>c(vt)),Nr(()=>ue("scroll",ae,Zi)),Nr(()=>ue("pointerup",ae,YI(VC(function(Vt){Kf.call(this,e,Vt)})))),Nr(()=>ue("mousedown",ae,YI(VC(function(Vt){Kf.call(this,e,Vt)})))),ve(()=>SA=$t(ae,1,"svelte-select-list svelte-1ul7oo4",null,SA,{prefloat:c(ha)})),lA(dA,ae)};TA(re,dA=>{MA()&&dA(di)});var ln=bA(re,2),Qn=CA(ln),To=dA=>{var SA=FxA(),ae=At(SA),xe=CA(ae),it=CA(bA(ae,2));ve(()=>{Rt(xe,c(s)),Rt(it,c(g))}),lA(dA,SA)};TA(Qn,dA=>{U()&&dA(To)});var Ma=bA(ln,2);Ea(CA(Ma),e,"prepend",{},null);var wi=bA(Ma,2),Io=CA(wi),nr=dA=>{var SA=bi(),ae=At(SA),xe=st=>{var bt=bi();Qa(At(bt),1,J,Na,(Kn,Ri,Ji)=>{var Vt,Ni=LxA(),ka=CA(Ni);Ea(CA(ka),e,"selection",{get selection(){return c(Ri)},index:Ji},Fi=>{var Oi=ur();ve(()=>Rt(Oi,(c(Ri),G(P()),EA(()=>c(Ri)[P()])))),lA(Fi,Oi)});var Lt=bA(ka,2),gt=Fi=>{var Oi=_xA();Ea(CA(Oi),e,"multi-clear-icon",{},Vn=>{rL(Vn)}),ue("pointerup",Oi,YI(VC(()=>_A(Ji)))),lA(Fi,Oi)};TA(Lt,Fi=>{_()||F()||!rL||Fi(gt)}),ve(()=>Vt=$t(Ni,1,"multi-item svelte-1ul7oo4",null,Vt,{active:c(Me)===Ji,disabled:_()})),ue("click",Ni,YI(()=>F()?_A(Ji):{})),ue("keydown",Ni,YI(VC(function(Fi){Kf.call(this,e,Fi)}))),lA(Kn,Ni)}),lA(st,bt)},it=st=>{var bt,Kn=GxA();Ea(CA(Kn),e,"selection",{get selection(){return J()}},Ri=>{var Ji=ur();ve(()=>Rt(Ji,(G(J()),G(P()),EA(()=>J()[P()])))),lA(Ri,Ji)}),ve(()=>bt=$t(Kn,1,"selected-item svelte-1ul7oo4",null,bt,{"hide-selected-item":c(o)})),lA(st,Kn)};TA(ae,st=>{D()?st(xe):st(it,!1)}),lA(dA,SA)};TA(Io,dA=>{c(n)&&dA(nr)});var yo=bA(Io,2);jy(yo,()=>ye(ye({readOnly:!uA()},c(nA)),{},{placeholder:c(r),style:ZA(),disabled:_()}),void 0,void 0,void 0,"svelte-1ul7oo4",!0),Jo(yo,dA=>M(dA),()=>M());var Pa=bA(wi,2),Gn=CA(Pa),xi=dA=>{var SA=KxA();Ea(CA(SA),e,"loading-icon",{},ae=>{(function(xe){lA(xe,SxA())})(ae)}),lA(dA,SA)};TA(Gn,dA=>{WA()&&dA(xi)});var Pt=bA(Gn,2),Sn=dA=>{var SA=UxA();Ea(CA(SA),e,"clear-icon",{},ae=>{rL(ae)}),ue("click",SA,dn),lA(dA,SA)};TA(Pt,dA=>{c(a)&&dA(Sn)});var Bo=bA(Pt,2),So=dA=>{var SA=JxA();Ea(CA(SA),e,"chevron-icon",{get listOpen(){return MA()}},ae=>{(function(xe){lA(xe,MxA())})(ae)}),lA(dA,SA)};TA(Bo,dA=>{Ee()&&dA(So)});var vA=bA(Pa,2);Ea(vA,e,"input-hidden",{get value(){return J()}},dA=>{var SA=YxA();ve(ae=>{Mn(SA,"name",b()),AB(SA,ae)},[()=>(G(J()),EA(()=>J()?JSON.stringify(J()):null))]),lA(dA,SA)});var VA=bA(vA,2),me=dA=>{var SA=bi();Ea(At(SA),e,"required",{get value(){return J()}},ae=>{lA(ae,TxA())}),lA(dA,SA)};return TA(VA,dA=>{G(mA()),G(J()),EA(()=>mA()&&(!J()||J().length===0))&&dA(me)}),Nr(()=>ue("pointerup",Do,YI(gn))),Jo(Do,dA=>S(dA),()=>S()),vs(Do,dA=>ko?.(dA)),ve(()=>{var dA;ra=$t(Do,1,"svelte-select ".concat((dA=ut())!==null&&dA!==void 0?dA:""),"svelte-1ul7oo4",ra,{multi:D(),disabled:_(),focused:U(),"list-open":MA(),"show-chevron":Ee(),error:ee()}),Yl(Do,YA())}),ue("keydown",yo,et),ue("blur",yo,Le),ue("focus",yo,Te),tv(yo,j),lA(t,Do),Ot(e,"getFilteredItems",HA),Ot(e,"handleClear",dn),xt(Xo)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -table.jse-transform-wizard.svelte-9wqi8y { - border-collapse: collapse; - border-spacing: 0; - width: 100%; -} -table.jse-transform-wizard.svelte-9wqi8y input:where(.svelte-9wqi8y) { - font-family: inherit; - font-size: inherit; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) th:where(.svelte-9wqi8y) { - font-weight: normal; - text-align: left; - width: 60px; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) { - width: 100%; - display: flex; - flex-direction: row; - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .multi-item { - align-items: center; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .value-container { - gap: 0 !important; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-path { - flex: 4; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-relation { - flex: 1.5; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-path { - flex: 3; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-direction { - flex: 1; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-projection-paths { - flex: 1; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select input { - box-sizing: border-box; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y) { - flex: 4; - padding: 4px 8px; - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: var(--jse-input-radius, 3px); - outline: none; - background: var(--jse-input-background, var(--jse-background-color, #fff)); - color: inherit; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -}`);var zxA=FA('
      Filter
      Sort
      Pick
      ');function OxA(t,e){var A,i,n,o,a;St(e,!1);var r=IA(void 0,!0),s=IA(void 0,!0),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=IA(void 0,!0),d=Cr("jsoneditor:TransformWizard"),B=N(e,"json",9),E=N(e,"queryOptions",29,()=>({})),Q=N(e,"onChange",9),f=["==","!=","<","<=",">",">="].map(UA=>({value:UA,label:UA})),b=[{value:"asc",label:"ascending"},{value:"desc",label:"descending"}],S=IA((A=E())!==null&&A!==void 0&&(A=A.filter)!==null&&A!==void 0&&A.path?PI(E().filter.path):void 0,!0),M=IA((i=f.find(UA=>{var mA;return UA.value===((mA=E().filter)===null||mA===void 0?void 0:mA.relation)}))!==null&&i!==void 0?i:f[0],!0),D=IA(((n=E())===null||n===void 0||(n=n.filter)===null||n===void 0?void 0:n.value)||"",!0),F=IA((o=E())!==null&&o!==void 0&&(o=o.sort)!==null&&o!==void 0&&o.path?PI(E().sort.path):void 0,!0),_=IA((a=b.find(UA=>{var mA;return UA.value===((mA=E().sort)===null||mA===void 0?void 0:mA.direction)}))!==null&&a!==void 0?a:b[0],!0);RA(()=>G(B()),()=>{R(r,Array.isArray(B()))}),RA(()=>(c(r),G(B())),()=>{R(s,c(r)?wL(B()):[])}),RA(()=>(c(r),G(B())),()=>{R(g,c(r)?wL(B(),!0):[])}),RA(()=>(c(s),PI),()=>{R(l,c(s).map(PI))}),RA(()=>(c(g),PI),()=>{R(C,c(g)?c(g).map(PI):[])}),RA(()=>(G(E()),c(C),Qi),()=>{var UA;R(I,(UA=E())!==null&&UA!==void 0&&(UA=UA.projection)!==null&&UA!==void 0&&UA.paths&&c(C)?E().projection.paths.map(mA=>c(C).find(KA=>Qi(KA.value,mA))).filter(mA=>!!mA):void 0)}),RA(()=>c(S),()=>{var UA,mA,KA;mA=(UA=c(S))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.path,mA)||(d("changeFilterPath",mA),E(Or(E(),["filter","path"],mA,!0)),Q()(E()))}),RA(()=>c(M),()=>{var UA,mA,KA;mA=(UA=c(M))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.relation,mA)||(d("changeFilterRelation",mA),E(Or(E(),["filter","relation"],mA,!0)),Q()(E()))}),RA(()=>c(D),()=>{var UA,mA;UA=c(D),Qi((mA=E())===null||mA===void 0||(mA=mA.filter)===null||mA===void 0?void 0:mA.value,UA)||(d("changeFilterValue",UA),E(Or(E(),["filter","value"],UA,!0)),Q()(E()))}),RA(()=>c(F),()=>{var UA,mA,KA;mA=(UA=c(F))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.path,mA)||(d("changeSortPath",mA),E(Or(E(),["sort","path"],mA,!0)),Q()(E()))}),RA(()=>c(_),()=>{var UA,mA,KA;mA=(UA=c(_))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.direction,mA)||(d("changeSortDirection",mA),E(Or(E(),["sort","direction"],mA,!0)),Q()(E()))}),RA(()=>c(I),()=>{(function(UA){var mA;Qi((mA=E())===null||mA===void 0||(mA=mA.projection)===null||mA===void 0?void 0:mA.paths,UA)||(d("changeProjectionPaths",UA),E(Or(E(),["projection","paths"],UA,!0)),Q()(E()))})(c(I)?c(I).map(UA=>UA.value):void 0)}),kn(),Ai(!0);var U=zxA(),J=CA(U),j=CA(J),AA=bA(CA(j)),O=CA(AA),DA=CA(O);Td(DA,{class:"jse-filter-path",showChevron:!0,get items(){return c(l)},get value(){return c(S)},set value(UA){R(S,UA)},$$legacy:!0});var P=bA(DA,2);Td(P,{class:"jse-filter-relation",showChevron:!0,clearable:!1,get items(){return f},get value(){return c(M)},set value(UA){R(M,UA)},$$legacy:!0});var aA=bA(P,2),iA=bA(j),BA=bA(CA(iA)),oA=CA(BA),sA=CA(oA);Td(sA,{class:"jse-sort-path",showChevron:!0,get items(){return c(l)},get value(){return c(F)},set value(UA){R(F,UA)},$$legacy:!0}),Td(bA(sA,2),{class:"jse-sort-direction",showChevron:!0,clearable:!1,get items(){return b},get value(){return c(_)},set value(UA){R(_,UA)},$$legacy:!0});var hA=bA(iA),YA=bA(CA(hA)),ee=CA(YA);Td(CA(ee),{class:"jse-projection-paths",multiple:!0,showChevron:!0,get items(){return c(C)},get value(){return c(I)},set value(UA){R(I,UA)},$$legacy:!0}),tv(aA,()=>c(D),UA=>R(D,UA)),lA(t,U),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-select-query-language.svelte-jrd4q2 { - position: relative; - width: 32px; -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) { - position: absolute; - top: 0; - right: 0; - display: flex; - flex-direction: column; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - text-align: left; - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - white-space: nowrap; - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-context-menu-background, #656565); -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -}`);var PxA=FA(''),jxA=FA('
      ');function qxA(t,e){St(e,!1);var A=N(e,"queryLanguages",8),i=N(e,"queryLanguageId",12),n=N(e,"onChangeQueryLanguage",8);Ai();var o=jxA();Qa(CA(o),5,A,Na,(a,r)=>{var s,g=PxA(),l=CA(g),C=B=>{Vi(B,{get data(){return NS}})},I=B=>{Vi(B,{get data(){return FS}})};TA(l,B=>{c(r),G(i()),EA(()=>c(r).id===i())?B(C):B(I,!1)});var d=bA(l);ve(()=>{var B;s=$t(g,1,"jse-query-language svelte-jrd4q2",null,s,{selected:c(r).id===i()}),Mn(g,"title",(c(r),EA(()=>"Select ".concat(c(r).name," as query language")))),Rt(d," ".concat((c(r),(B=EA(()=>c(r).name))!==null&&B!==void 0?B:"")))}),ue("click",g,()=>{return B=c(r).id,i(B),void n()(B);var B}),lA(a,g)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-header.svelte-1k211ye { - display: flex; - background: var(--jse-theme-color, #3883fa); - color: var(--jse-menu-color, var(--jse-text-color-inverse, #fff)); -} -.jse-header.svelte-1k211ye .jse-title:where(.svelte-1k211ye) { - flex: 1; - padding: 5px; - vertical-align: middle; -} -.jse-header.svelte-1k211ye button:where(.svelte-1k211ye) { - border: none; - background: transparent; - min-width: 32px; - color: inherit; - cursor: pointer; -} -.jse-header.svelte-1k211ye button:where(.svelte-1k211ye):hover { - background: rgba(255, 255, 255, 0.1); -}`);var VxA=FA(''),WxA=FA('
      ');function Ev(t,e){St(e,!1);var A=N(e,"title",9,"Modal"),i=N(e,"fullScreenButton",9,!1),n=N(e,"fullscreen",13,!1),o=N(e,"onClose",9,void 0);Ai(!0);var a=WxA(),r=CA(a),s=CA(r),g=bA(r,2);Ea(g,e,"actions",{},null);var l=bA(g,2),C=d=>{var B=VxA(),E=CA(B),Q=tt(()=>n()?CV:rV);Vi(E,{get data(){return c(Q)}}),ue("click",B,()=>n(!n())),lA(d,B)};TA(l,d=>{i()&&d(C)});var I=bA(l,2);Vi(CA(I),{get data(){return c3}}),ve(()=>Rt(s,A())),ue("click",I,()=>{var d;return(d=o())===null||d===void 0?void 0:d()}),lA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-config.svelte-5gkegr { - border: none; - background: transparent; - min-width: 32px; - color: inherit; - cursor: pointer; -} -.jse-config.svelte-5gkegr:hover { - background: rgba(255, 255, 255, 0.1); -} -.jse-config.hide.svelte-5gkegr { - display: none; -}`);var ZxA=FA(''),sL=Cr("jsoneditor:AutoScrollHandler");function jiA(t){var e,A;function i(r){return r<20?200:r<50?400:1200}function n(){if(t){var r=.05*(e||0);t.scrollTop+=r}}function o(r){A&&r===e||(a(),sL("startAutoScroll",r),e=r,A=setInterval(n,50))}function a(){A&&(sL("stopAutoScroll"),clearInterval(A),A=void 0,e=void 0)}return sL("createAutoScrollHandler",t),{onDrag:function(r){if(t){var s=r.clientY,{top:g,bottom:l}=t.getBoundingClientRect();sl?o(i(s-l)):a()}},onDragEnd:function(){a()}}}var XxA=(t,e,A,i)=>(t/=i/2)<1?A/2*t*t+e:-A/2*(--t*(t-2)-1)+e,joA=()=>{var t,e,A,i,n,o,a,r,s,g,l,C,I;function d(Q){return Q.getBoundingClientRect().top-(t.getBoundingClientRect?t.getBoundingClientRect().top:0)+A}function B(Q){t.scrollTo?t.scrollTo(t.scrollLeft,Q):t.scrollTop=Q}function E(Q){g||(g=Q),B(o(l=Q-g,A,r,s)),I=!0,l1&&arguments[1]!==void 0?arguments[1]:{};switch(s=1e3,n=f.offset||0,C=f.callback,o=f.easing||XxA,a=f.a11y||!1,typeof f.container){case"object":t=f.container;break;case"string":t=document.querySelector(f.container);break;default:t=window.document.documentElement}switch(A=t.scrollTop,typeof Q){case"number":e=void 0,a=!1,i=A+Q;break;case"object":i=d(e=Q);break;case"string":e=document.querySelector(Q),i=d(e)}switch(r=i-A+n,typeof f.duration){case"number":s=f.duration;break;case"function":s=f.duration(r)}I?g=0:requestAnimationFrame(E)}};function oh(t,e){var A=Date.now(),i=t();return e(Date.now()-A),i}var $Q=Cr("validation"),$xA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function qiA(t,e,A,i){return cG(t,e,A,i,$xA)}function qoA(t,e,A,i){if($Q("validateJSON"),!e)return[];if(A!==i){var n=A.stringify(t);return e(n!==void 0?i.parse(n):void 0)}return e(t)}function ARA(t,e,A,i){if($Q("validateText"),t.length>104857600)return{validationErrors:[{path:[],message:"Validation turned off: the document is too large",severity:Jc.info}]};if(t.length!==0)try{var n=oh(()=>A.parse(t),s=>$Q("validate: parsed json in ".concat(s," ms")));if(!e)return;var o=A===i?n:oh(()=>i.parse(t),s=>$Q("validate: parsed json with the validationParser in ".concat(s," ms"))),a=oh(()=>e(o),s=>$Q("validate: validated json in ".concat(s," ms")));return qi(a)?void 0:{validationErrors:a}}catch(s){var r=oh(()=>(function(g,l){if(g.length>SSA)return!1;try{return l.parse(ml(g)),!0}catch{return!1}})(t,A),g=>$Q("validate: checked whether repairable in ".concat(g," ms")));return{parseError:uh(t,s.message||s.toString()),isRepairable:r}}}var Ky=Cr("jsoneditor:FocusTracker");function QG(t){var e,{onMount:A,onDestroy:i,getWindow:n,hasFocus:o,onFocus:a,onBlur:r}=t,s=!1;function g(){var C=o();C&&(clearTimeout(e),s||(Ky("focus"),a(),s=C))}function l(){s&&(clearTimeout(e),e=setTimeout(()=>{o()||(Ky("blur"),s=!1,r())}))}A(()=>{Ky("mount FocusTracker");var C=n();C&&(C.addEventListener("focusin",g,!0),C.addEventListener("focusout",l,!0))}),i(()=>{Ky("destroy FocusTracker");var C=n();C&&(C.removeEventListener("focusin",g,!0),C.removeEventListener("focusout",l,!0))})}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-message.svelte-cbvd26 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - padding: var(--jse-padding, 10px); - display: flex; - gap: var(--jse-padding, 10px); - flex-wrap: wrap; - align-items: stretch; -} -.jse-message.jse-success.svelte-cbvd26 { - background: var(--message-success-background, #9ac45d); - color: var(--jse-message-success-color, #fff); -} -.jse-message.svelte-cbvd26 .jse-text:where(.svelte-cbvd26) { - display: flex; - flex: 1; - min-width: 60%; - align-items: center; -} -.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26) { - cursor: pointer; -} -.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26):hover { - background-color: rgba(255, 255, 255, 0.1); -} -.jse-message.jse-error.svelte-cbvd26 { - background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); - color: var(--jse-message-error-color, #fff); -} -.jse-message.jse-warning.svelte-cbvd26 { - background: var(--jse-message-warning-background, #ffde5c); - color: var(--jse-message-warning-color, #4d4d4d); -} -.jse-message.jse-info.svelte-cbvd26 { - background: var(--jse-message-info-background, #4f91ff); - color: var(--jse-message-info-color, #fff); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) { - display: flex; - gap: var(--jse-padding, 10px); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-message-action-background, rgba(255, 255, 255, 0.2)); - color: inherit; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26):hover { - background: var(--jse-message-action-background-highlight, rgba(255, 255, 255, 0.3)); -}`);var eRA=FA(''),tRA=FA('
      ');function tl(t,e){St(e,!1);var A=N(e,"type",9,"success"),i=N(e,"icon",9,void 0),n=N(e,"message",9,void 0),o=N(e,"actions",25,()=>[]),a=N(e,"onClick",9,void 0),r=N(e,"onClose",9,void 0);r()&&Hl(r()),Ai(!0);var s,g=tRA(),l=CA(g),C=CA(l),I=CA(C),d=E=>{Vi(E,{get data(){return i()}})};TA(I,E=>{i()&&E(d)});var B=bA(I);Qa(bA(l,2),5,o,Na,(E,Q)=>{var f=eRA(),b=CA(f),S=D=>{Vi(D,{get data(){return c(Q),EA(()=>c(Q).icon)}})};TA(b,D=>{c(Q),EA(()=>c(Q).icon)&&D(S)});var M=bA(b);ve(()=>{var D;Mn(f,"title",(c(Q),EA(()=>c(Q).title))),f.disabled=(c(Q),EA(()=>c(Q).disabled)),Rt(M," ".concat((c(Q),(D=EA(()=>c(Q).text))!==null&&D!==void 0?D:"")))}),ue("click",f,()=>{c(Q).onClick&&c(Q).onClick()}),ue("mousedown",f,()=>{c(Q).onMouseDown&&c(Q).onMouseDown()}),lA(E,f)}),ve(()=>{var E,Q;$t(g,1,"jse-message jse-".concat((E=A())!==null&&E!==void 0?E:""),"svelte-cbvd26"),s=$t(l,1,"jse-text svelte-cbvd26",null,s,{"jse-clickable":!!a()}),Rt(B," ".concat((Q=n())!==null&&Q!==void 0?Q:""))}),ue("click",l,function(){a()&&a()()}),lA(t,g),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-validation-errors-overview.svelte-1342rh4 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - overflow: auto; - max-height: 25%; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) { - border-collapse: collapse; - width: 100%; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) { - cursor: pointer; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-error:where(.svelte-1342rh4) { - background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); - color: var(--jse-message-error-color, #fff); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4) { - background: var(--jse-message-warning-background, #ffde5c); - color: var(--jse-message-warning-color, #4d4d4d); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4):hover { - filter: brightness(105%); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-info:where(.svelte-1342rh4) { - background: var(--jse-message-info-background, #4f91ff); - color: var(--jse-message-info-color, #fff); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4):hover { - filter: brightness(110%); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) { - padding: 4px var(--jse-padding, 10px); - vertical-align: middle; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-icon:where(.svelte-1342rh4) { - width: 36px; - box-sizing: border-box; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) { - width: 36px; - box-sizing: border-box; - padding: 0; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 36px; - height: 26px; - cursor: pointer; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4):hover { - background-color: rgba(255, 255, 255, 0.2); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) div.jse-validation-errors-expand:where(.svelte-1342rh4) { - display: inline-block; - position: relative; - top: 3px; -}`);var iRA=FA(''),nRA=FA(' '),oRA=FA(' '),aRA=FA('
      '),rRA=FA('
      '),sRA=FA('
      ');function hG(t,e){St(e,!1);var A=IA(void 0,!0),i=N(e,"validationErrors",9),n=N(e,"selectError",9),o=IA(!0,!0);function a(){R(o,!1)}function r(){R(o,!0)}RA(()=>G(i()),()=>{R(A,i().length)}),kn(),Ai(!0);var s=bi(),g=At(s),l=C=>{var I=sRA(),d=CA(I),B=Q=>{var f=aRA(),b=CA(f),S=CA(b);Qa(S,1,()=>(G(iv),G(i()),G(Ry),EA(()=>iv(i(),Ry))),Na,(F,_,U)=>{var J=nRA(),j=CA(J);Vi(CA(j),{get data(){return BI}});var AA=bA(j),O=CA(AA),DA=bA(AA),P=CA(DA),aA=CA(bA(DA)),iA=BA=>{var oA=iRA();Vi(CA(oA),{get data(){return cV}}),ue("click",oA,VC(a)),lA(BA,oA)};TA(aA,BA=>{G(i()),EA(()=>U===0&&i().length>1)&&BA(iA)}),ve(BA=>{var oA;$t(J,1,"jse-validation-".concat((c(_),(oA=EA(()=>c(_).severity))!==null&&oA!==void 0?oA:"")),"svelte-1342rh4"),Rt(O,BA),Rt(P,(c(_),EA(()=>c(_).message)))},[()=>(G(vg),c(_),EA(()=>vg(c(_).path)))]),ue("click",J,()=>{setTimeout(()=>n()(c(_)))}),lA(F,J)});var M=bA(S),D=F=>{var _=oRA(),U=bA(CA(_),2),J=CA(U);ve(()=>Rt(J,"(and ".concat(c(A)-Ry," more errors)"))),lA(F,_)};TA(M,F=>{c(A)>Ry&&F(D)}),lA(Q,f)},E=Q=>{var f=rRA(),b=CA(f),S=CA(b),M=CA(S);Vi(CA(M),{get data(){return BI}});var D=CA(bA(M));Vi(CA(bA(D)),{get data(){return US}}),ve(F=>{var _;$t(S,1,"jse-validation-".concat(F??""),"svelte-1342rh4"),Rt(D,"".concat((_=c(A))!==null&&_!==void 0?_:""," validation errors "))},[()=>(G(i()),EA(()=>{return F=i(),[Jc.error,Jc.warning,Jc.info].find(_=>F.some(U=>U.severity===_));var F}))]),ue("click",S,r),lA(Q,f)};TA(d,Q=>{c(o)||c(A)===1?Q(B):Q(E,!1)}),lA(C,I)};TA(g,C=>{G(qi),G(i()),EA(()=>!qi(i()))&&C(l)}),lA(t,s),xt()}function Qv(t,e){if(t)return t.addEventListener("keydown",A),{destroy(){t.removeEventListener("keydown",A)}};function A(i){i.key==="Escape"&&(i.preventDefault(),i.stopPropagation(),e())}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -dialog.jse-modal.svelte-2aoco4 { - border-radius: 3px; - font-size: var(--jse-padding, 10px); - border: none; - padding: 0; - display: flex; - min-width: 0; - margin: auto; - overflow: visible; - transition: width 0.1s ease-in-out, height 0.1s ease-in-out; -} -dialog.jse-modal.jse-sort-modal.svelte-2aoco4 { - width: 400px; -} -dialog.jse-modal.jse-repair-modal.svelte-2aoco4 { - width: 600px; - height: 500px; -} -dialog.jse-modal.jse-jsoneditor-modal.svelte-2aoco4 { - width: 800px; - height: 600px; -} -dialog.jse-modal.jse-transform-modal.svelte-2aoco4 { - width: 1200px; - height: 800px; -} -dialog.jse-modal.jse-fullscreen.svelte-2aoco4 { - width: 100%; - height: 100%; -} -dialog.jse-modal.svelte-2aoco4::backdrop { - background: var(--jse-overlay-background, rgba(0, 0, 0, 0.3)); -} -dialog.jse-modal[open].svelte-2aoco4 { - animation: svelte-2aoco4-zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); -} -dialog.jse-modal[open].svelte-2aoco4::backdrop { - animation: svelte-2aoco4-fade 0.2s ease-out; -} -dialog.jse-modal.svelte-2aoco4 .jse-modal-inner:where(.svelte-2aoco4) { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - min-height: 0; - padding: 0; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - background: var(--jse-modal-background, #f5f5f5); - color: var(--jse-text-color, #4d4d4d); -} -@keyframes svelte-2aoco4-zoom { - from { - transform: scale(0.95); - } - to { - transform: scale(1); - } -} -@keyframes svelte-2aoco4-fade { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -dialog.jse-modal.svelte-2aoco4 .svelte-select { - --border: var(--jse-svelte-select-border, 1px solid #d8dbdf); - --item-is-active-bg: var(--jse-item-is-active-bg, #3883fa); - --border-radius: var(--jse-svelte-select-border-radius, 3px); - --background: var(--jse-svelte-select-background, #fff); - --padding: var(--jse-svelte-select-padding, 0 10px); - --multi-select-padding: var(--jse-svelte-select-multi-select-padding, 0 10px); - --font-size: var(--jse-svelte-select-font-size, var(--jse-font-size, 16px)); - --height: 36px; - --multi-item-height: 28px; - --multi-item-margin: 2px; - --multi-item-padding: 2px 8px; - --multi-item-border-radius: 6px; - --indicator-top: 8px; -}`);var gRA=FA('
      ');function em(t,e){St(e,!1);var A=N(e,"className",8,void 0),i=N(e,"fullscreen",8,!1),n=N(e,"onClose",8),o=IA();function a(){n()()}is(()=>c(o).showModal()),Hl(()=>c(o).close()),Ai();var r,s=gRA(),g=CA(s);Ea(CA(g),e,"default",{},null),Jo(s,l=>R(o,l),()=>c(o)),Nr(()=>ue("close",s,a)),Nr(()=>{return ue("pointerdown",s,(l=a,function(){for(var C=arguments.length,I=new Array(C),d=0;due("cancel",s,YI(function(l){Kf.call(this,e,l)}))),vs(s,(l,C)=>Qv?.(l,C),()=>a),ve(l=>r=$t(s,1,l,"svelte-2aoco4",r,{"jse-fullscreen":i()}),[()=>n1((G(Pc),G(A()),EA(()=>Pc("jse-modal",A()))))]),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-contents.svelte-10a6ob6 { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} - -.jse-shortcuts.svelte-10a6ob6 { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: calc(2 * var(--jse-padding, 10px)) 0; -} -.jse-shortcuts.svelte-10a6ob6 .jse-shortcut:where(.svelte-10a6ob6) .jse-key:where(.svelte-10a6ob6) { - font-size: 200%; - color: var(--jse-theme-color, #3883fa); -}`);var lRA=FA('
      Clipboard permission is disabled by your browser. You can use:
      for copy
      for cut
      for paste
      ',1);function VoA(t,e){St(e,!1);var A=N(e,"onClose",9),i=iG()?"\u2318":"Ctrl";Ai(!0),em(t,{get onClose(){return A()},className:"jse-copy-paste",children:(n,o)=>{var a=lRA(),r=At(a);Ev(r,{title:"Copying and pasting",get onClose(){return A()}});var s=bA(r,2),g=bA(CA(s),2),l=CA(g),C=CA(l),I=CA(C),d=bA(l,2),B=CA(d),E=CA(B),Q=CA(bA(d,2)),f=CA(Q),b=CA(bA(g,2));ve(()=>{Rt(I,"".concat(i,"+C")),Rt(E,"".concat(i,"+X")),Rt(f,"".concat(i,"+V"))}),ue("click",b,function(){for(var S,M=arguments.length,D=new Array(M),F=0;F'),CRA=FA('
      '),IRA=FA(''),dRA=FA('
      ');function xv(t,e){St(e,!1);var A=N(e,"items",25,()=>[]);Ai(!0);var i=dRA(),n=CA(i);Ea(n,e,"left",{},null);var o=bA(n,2);Qa(o,1,A,Na,(a,r)=>{var s=bi(),g=At(s),l=I=>{lA(I,cRA())},C=I=>{var d=bi(),B=At(d),E=f=>{lA(f,CRA())},Q=f=>{var b=bi(),S=At(b),M=F=>{var _=IRA(),U=CA(_),J=O=>{Vi(O,{get data(){return c(r),EA(()=>c(r).icon)}})};TA(U,O=>{c(r),EA(()=>c(r).icon)&&O(J)});var j=bA(U,2),AA=O=>{var DA=ur();ve(()=>Rt(DA,(c(r),EA(()=>c(r).text)))),lA(O,DA)};TA(j,O=>{c(r),EA(()=>c(r).text)&&O(AA)}),ve(()=>{var O;$t(_,1,"jse-button ".concat((c(r),(O=EA(()=>c(r).className))!==null&&O!==void 0?O:"")),"svelte-3erbu0"),Mn(_,"title",(c(r),EA(()=>c(r).title))),_.disabled=(c(r),EA(()=>c(r).disabled||!1))}),ue("click",_,function(){for(var O,DA=arguments.length,P=new Array(DA),aA=0;aA{var _=ur();ve(U=>Rt(_,U),[()=>(c(r),EA(()=>(function(U){return console.error("Unknown type of menu item",U),"???"})(c(r))))]),lA(F,_)};TA(S,F=>{G(WC),c(r),EA(()=>WC(c(r)))?F(M):F(D,!1)},!0),lA(f,b)};TA(B,f=>{G(bL),c(r),EA(()=>bL(c(r)))?f(E):f(Q,!1)},!0),lA(I,d)};TA(g,I=>{G(OI),c(r),EA(()=>OI(c(r)))?I(l):I(C,!1)}),lA(a,s)}),Ea(bA(o,2),e,"right",{},null),lA(t,i),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-json-repair-component.svelte-16jv58j { - flex: 1; - display: flex; - flex-direction: column; - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); -} -.jse-json-repair-component.svelte-16jv58j .jse-info:where(.svelte-16jv58j) { - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - vertical-align: center; -} -.jse-json-repair-component.svelte-16jv58j .jse-json-text:where(.svelte-16jv58j) { - flex: 1; - border: none; - padding: 2px; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - background: var(--jse-input-background, var(--jse-background-color, #fff)); - color: var(--jse-text-color, #4d4d4d); - resize: none; - outline: none; -}`);var BRA=FA('
      Repair invalid JSON, then click apply
      '),ERA=FA('
      ');function QRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=IA(void 0,!0),s=N(e,"text",13,""),g=N(e,"readOnly",9,!1),l=N(e,"onParse",9),C=N(e,"onRepair",9),I=N(e,"onChange",9,void 0),d=N(e,"onApply",9),B=N(e,"onCancel",9),E=Cr("jsoneditor:JSONRepair"),Q=IA(void 0,!0);function f(){if(c(Q)&&c(A)){var AA=c(A).position!==void 0?c(A).position:0;c(Q).setSelectionRange(AA,AA),c(Q).focus()}}function b(){d()(s())}function S(){try{s(C()(s())),I()&&I()(s())}catch{}}var M=IA(void 0,!0);RA(()=>G(s()),()=>{R(A,(function(AA){try{return void l()(AA)}catch(O){return uh(AA,O.message)}})(s()))}),RA(()=>G(s()),()=>{R(i,(function(AA){try{return C()(AA),!0}catch{return!1}})(s()))}),RA(()=>c(A),()=>{E("error",c(A))}),RA(()=>G(B()),()=>{R(M,[{type:"space"},{type:"button",icon:c3,title:"Cancel repair",className:"jse-cancel",onClick:B()}])}),RA(()=>TS,()=>{R(n,{icon:TS,text:"Show me",title:"Scroll to the error location",onClick:f})}),RA(()=>SC,()=>{R(o,{icon:SC,text:"Auto repair",title:"Automatically repair JSON",onClick:S})}),RA(()=>(c(i),c(n),c(o)),()=>{R(a,c(i)?[c(n),c(o)]:[c(n)])}),RA(()=>G(g()),()=>{R(r,[{icon:Zw,text:"Apply",title:"Apply fixed JSON",disabled:g(),onClick:b}])}),kn(),Ai(!0);var D=ERA(),F=CA(D);xv(F,{get items(){return c(M)},$$slots:{left:(AA,O)=>{lA(AA,BRA())}}});var _=bA(F,2),U=AA=>{var O=tt(()=>(c(A),EA(()=>"Cannot parse JSON: ".concat(c(A).message))));tl(AA,{type:"error",get icon(){return BI},get message(){return c(O)},get actions(){return c(a)}})},J=AA=>{tl(AA,{type:"success",message:"JSON is valid now and can be parsed.",get actions(){return c(r)}})};TA(_,AA=>{c(A)?AA(U):AA(J,!1)});var j=bA(_,2);Jo(j,AA=>R(Q,AA),()=>c(Q)),ve(()=>{j.readOnly=g(),AB(j,s())}),ue("input",j,function(AA){E("handleChange");var O=AA.target.value;s()!==O&&(s(O),I()&&I()(s()))}),lA(t,D),xt()}function WoA(t,e){St(e,!1);var A=N(e,"text",13),i=N(e,"onParse",9),n=N(e,"onRepair",9),o=N(e,"onApply",9),a=N(e,"onClose",9);function r(g){o()(g),a()()}function s(){a()()}Ai(!0),em(t,{get onClose(){return a()},className:"jse-repair-modal",children:(g,l)=>{QRA(g,{get onParse(){return i()},get onRepair(){return n()},onApply:r,onCancel:s,get text(){return A()},set text(C){A(C)},$$legacy:!0})},$$slots:{default:!0}}),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -div.jse-collapsed-items.svelte-1v6dhm4 { - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); - padding: calc(0.5 * var(--jse-padding, 10px)); - border: 8px solid transparent; - border-width: 8px 0; - background-color: var(--jse-contents-background-color, transparent); - background-image: linear-gradient(var(--jse-collapsed-items-background-color, #f5f5f5), var(--jse-collapsed-items-background-color, #f5f5f5)), linear-gradient(to bottom right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to bottom left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%); - background-repeat: repeat, repeat-x, repeat-x, repeat-x, repeat-x; - background-position: 0 0, 8px 0, 8px 0, 8px 100%, 8px 100%; - background-size: auto auto, 16px 16px, 16px 16px, 16px 16px, 16px 16px; - background-clip: padding-box, border-box, border-box, border-box, border-box; - background-origin: padding-box, border-box, border-box, border-box, border-box; - display: flex; -} -div.jse-collapsed-items.jse-selected.svelte-1v6dhm4 { - background-color: var(--jse-selection-background-color, #d3d3d3); - --jse-collapsed-items-background-color: var(--jse-collapsed-items-selected-background-color, #c2c2c2); -} -div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4), -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { - margin: 0 calc(0.5 * var(--jse-padding, 10px)); -} -div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4) { - display: inline; -} -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { - font-family: inherit; - font-size: inherit; - color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); - background: none; - border: none; - padding: 0; - text-decoration: underline; - cursor: pointer; -} -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):hover, div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):focus { - color: var(--jse-collapsed-items-link-color-highlight, #ee5341); -}`);var hRA=FA(''),uRA=FA('
      ');function fRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=N(e,"visibleSections",9),s=N(e,"sectionIndex",9),g=N(e,"total",9),l=N(e,"path",9),C=N(e,"selection",9),I=N(e,"onExpandSection",9),d=N(e,"context",9);RA(()=>(G(r()),G(s())),()=>{R(A,r()[s()])}),RA(()=>c(A),()=>{R(i,c(A).end)}),RA(()=>(G(r()),G(s()),G(g())),()=>{R(n,r()[s()+1]?r()[s()+1].start:g())}),RA(()=>(G(d()),G(C()),G(l()),c(i)),()=>{R(o,Xf(d().getJson(),C(),l().concat(String(c(i)))))}),RA(()=>(c(i),c(n)),()=>{R(a,(function(M,D){var F={start:M,end:Math.min(vL(M),D)},_=Math.max(ov((M+D)/2),M),U={start:_,end:Math.min(vL(_),D)},J=ov(D),j=J===D?J-qf:J,AA={start:Math.max(j,M),end:D},O=[F],DA=U.start>=F.end&&U.end<=AA.start;return DA&&O.push(U),AA.start>=(DA?U.end:F.end)&&O.push(AA),O})(c(i),c(n)))}),kn(),Ai(!0);var B,E,Q=uRA(),f=CA(Q),b=CA(f),S=CA(b);Qa(bA(b,2),1,()=>c(a),Na,(M,D)=>{var F=hRA(),_=CA(F);ve(()=>{var U,J;return Rt(_,"show ".concat((c(D),(U=EA(()=>c(D).start))!==null&&U!==void 0?U:""),"-").concat((c(D),(J=EA(()=>c(D).end))!==null&&J!==void 0?J:"")))}),ue("click",F,()=>I()(l(),c(D))),lA(M,F)}),ve(()=>{var M,D;B=$t(Q,1,"jse-collapsed-items svelte-1v6dhm4",null,B,{"jse-selected":c(o)}),E=Yl(Q,"",E,{"--level":(G(l()),EA(()=>l().length+2))}),Rt(S,"Items ".concat((M=c(i))!==null&&M!==void 0?M:"","-").concat((D=c(n))!==null&&D!==void 0?D:""))}),ue("mousemove",Q,function(M){M.stopPropagation()}),lA(t,Q),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-context-menu-pointer.svelte-10ijtzr { - position: absolute; - top: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); - right: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); - width: var(--jse-context-menu-pointer-size, calc(1em + 4px)); - height: var(--jse-context-menu-pointer-size, calc(1em + 4px)); - padding: 0; - margin: 0; - cursor: pointer; - background: transparent; - border-radius: 2px; - background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); - color: var(--jse-context-menu-pointer-color, var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff))); - border: none; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-context-menu-pointer.jse-root.svelte-10ijtzr { - top: 0; - right: calc(-2px - var(--jse-context-menu-pointer-size, calc(1em + 4px))); -} -.jse-context-menu-pointer.jse-insert.svelte-10ijtzr { - right: -1px; -} -.jse-context-menu-pointer.svelte-10ijtzr:hover { - background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); -} -.jse-context-menu-pointer.jse-selected.svelte-10ijtzr { - background: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); -} -.jse-context-menu-pointer.jse-selected.svelte-10ijtzr:hover { - background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); -}`);var mRA=FA('');function TI(t,e){St(e,!1);var A=N(e,"root",9,!1),i=N(e,"insert",9,!1),n=N(e,"selected",9),o=N(e,"onContextMenu",9);Ai(!0);var a,r=mRA();Vi(CA(r),{get data(){return M0}}),ve(()=>{a=$t(r,1,"jse-context-menu-pointer svelte-10ijtzr",null,a,{"jse-root":A(),"jse-insert":i(),"jse-selected":n()}),Mn(r,"title",oG)}),ue("click",r,function(s){for(var g=s.target;g&&g.nodeName!=="BUTTON";)g=g.parentNode;g&&o()({anchor:g,left:0,top:0,width:A2,height:$C,offsetTop:2,offsetLeft:0,showTip:!0})}),lA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-key.svelte-1n4cez4 { - display: inline-block; - min-width: 2em; - padding: 0 5px; - box-sizing: border-box; - outline: none; - border-radius: 1px; - vertical-align: top; - color: var(--jse-key-color, #1a1a1a); - word-break: normal; - overflow-wrap: normal; - white-space: pre-wrap; -} -.jse-key.jse-empty.svelte-1n4cez4 { - min-width: 3em; - outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - -moz-outline-radius: 2px; -} -.jse-key.jse-empty.svelte-1n4cez4::after { - pointer-events: none; - color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - content: "key"; -}`);var pRA=FA('
      '),wRA=FA(" ",1),DRA=FA('
      ');function ZoA(t,e){St(e,!0);var A=Dg(()=>In(e.selection)&&gr(e.selection)),i=Dg(()=>e.context.onRenderValue({path:e.path,value:e.value,mode:e.context.mode,truncateTextSize:e.context.truncateTextSize,readOnly:e.context.readOnly,enforceString:e.enforceString,isEditing:c(A),parser:e.context.parser,normalization:e.context.normalization,selection:e.selection,searchResultItems:e.searchResultItems,onPatch:e.context.onPatch,onPasteJson:e.context.onPasteJson,onSelect:e.context.onSelect,onFind:e.context.onFind,findNextInside:e.context.findNextInside,focus:e.context.focus})),n=bi();Qa(At(n),17,()=>c(i),Na,(o,a)=>{var r=bi(),s=At(r),g=C=>{var I=Dg(()=>c(a).action),d=DRA();vs(d,(B,E)=>{var Q;return(Q=c(I))===null||Q===void 0?void 0:Q(B,E)},()=>c(a).props),lA(C,d)},l=C=>{var I=Dg(()=>c(a).component),d=bi();$nA(At(d),()=>c(I),(B,E)=>{E(B,e1(()=>c(a).props))}),lA(C,d)};TA(s,C=>{_SA(c(a))?C(g):C(l,!1)}),lA(o,r)}),lA(t,n),xt()}var yRA={selecting:!1,selectionAnchor:void 0,selectionAnchorType:void 0,selectionFocus:void 0,dragging:!1};function gL(t){var{json:e,selection:A,deltaY:i,items:n}=t;if(!A)return{operations:void 0,updatedSelection:void 0,offset:0};var o=i<0?(function(l){for(var{json:C,items:I,selection:d,deltaY:B}=l,E=e2(C,d),Q=I.findIndex(F=>Qi(F.path,E)),f=()=>{var F;return(F=I[b-1])===null||F===void 0?void 0:F.height},b=Q,S=0;f()!==void 0&&Math.abs(B)>S+f()/2;)S+=f(),b-=1;var M=I[b].path,D=b-Q;return b!==Q&&I[b]!==void 0?{beforePath:M,offset:D}:void 0})({json:e,selection:A,deltaY:i,items:n}):(function(l){for(var C,{json:I,items:d,selection:B,deltaY:E}=l,Q=i1(I,B),f=d.findIndex(j=>Qi(j.path,Q)),b=0,S=f,M=()=>{var j;return(j=d[S+1])===null||j===void 0?void 0:j.height};M()!==void 0&&Math.abs(E)>b+M()/2;)b+=M(),S+=1;var D=Ki(Q),F=je(I,D),_=Array.isArray(F)?S:S+1,U=(C=d[_])===null||C===void 0?void 0:C.path,J=S-f;return U?{beforePath:U,offset:J}:{append:!0,offset:J}})({json:e,selection:A,deltaY:i,items:n});if(!o||o.offset===0)return{operations:void 0,updatedSelection:void 0,offset:0};var a=(function(l,C,I){if(!C)return[];var d="beforePath"in I?I.beforePath:void 0,B="append"in I?I.append:void 0,E=Ki(ct(C)),Q=je(l,E);if(!(B||d&&W0(d,E)&&d.length>E.length))return[];var f=e2(l,C),b=i1(l,C),S=mi(f),M=mi(b),D=d?d[E.length]:void 0;if(!ia(Q)){if(qo(Q)){var F=Fr(S),_=Fr(M),U=D!==void 0?Fr(D):Q.length;return kS(_-F+1,U({op:"move",from:wt(E.concat(String(F+DA))),path:wt(E.concat(String(U+DA)))}):()=>({op:"move",from:wt(E.concat(String(F))),path:wt(E.concat(String(U)))}))}throw new Error("Cannot create move operations: parent must be an Object or Array")}var J=Object.keys(Q),j=J.indexOf(S),AA=J.indexOf(M),O=B?J.length:D!==void 0?J.indexOf(D):-1;return j!==-1&&AA!==-1&&O!==-1?O>j?[...J.slice(j,AA+1),...J.slice(O,J.length)].map(DA=>a1(E,DA)):[...J.slice(O,j),...J.slice(AA+1,J.length)].map(DA=>a1(E,DA)):[]})(e,A,o),r=Ki(e2(e,A)),s=je(e,r);if(Array.isArray(s)){var g=(function(l){var C,I,{items:d,json:B,selection:E,offset:Q}=l,f=e2(B,E),b=i1(B,E),S=d.findIndex(_=>Qi(_.path,f)),M=d.findIndex(_=>Qi(_.path,b)),D=(C=d[S+Q])===null||C===void 0?void 0:C.path,F=(I=d[M+Q])===null||I===void 0?void 0:I.path;return Ds(D,F)})({items:n,json:e,selection:A,offset:o.offset});return{operations:a,updatedSelection:g,offset:o.offset}}return{operations:a,updatedSelection:void 0,offset:o.offset}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-validation-error.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-error-color, #ee5341); -} - -button.jse-validation-info.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-info-color, #4f91ff); -} - -button.jse-validation-warning.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-warning-color, #fdc539); -}`);var vRA=FA('');function Ch(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"validationError",8),o=N(e,"onExpand",8);RA(()=>G(n()),()=>{R(A,FSA(n())&&n().isChildError?"Contains invalid data":n().message)}),kn(),Ai();var a=vRA();Vi(CA(a),{get data(){return BI}}),Nr(()=>ue("click",a,function(){for(var r,s=arguments.length,g=new Array(s),l=0;lwh?.(r,s),()=>ye({text:c(A)},i)),ve(()=>{var r;return $t(a,1,"jse-validation-".concat((G(n()),(r=EA(()=>n().severity))!==null&&r!==void 0?r:"")),"svelte-q6a061")}),lA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-expand.svelte-1qi6rc1 { - width: var(--jse-indent-size, calc(1em + 4px)); - padding: 0; - margin: 0; - border: none; - cursor: pointer; - background: transparent; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); - font-size: var(--jse-font-size-mono, 14px); - height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-expand.svelte-1qi6rc1:hover { - opacity: 0.8; -} - -.jse-meta.svelte-1qi6rc1, -.jse-separator.svelte-1qi6rc1, -.jse-index.svelte-1qi6rc1, -.jse-bracket.svelte-1qi6rc1 { - vertical-align: top; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} - -.jse-index.svelte-1qi6rc1 { - padding: 0 calc(0.5 * var(--jse-padding, 10px)); -} - -.jse-bracket.svelte-1qi6rc1 { - padding: 0 2px; -} -.jse-bracket.jse-expanded.svelte-1qi6rc1 { - padding-right: var(--jse-padding, 10px); -} - -.jse-identifier.svelte-1qi6rc1 { - vertical-align: top; - position: relative; -} - -.jse-json-node.svelte-1qi6rc1 { - position: relative; - color: var(--jse-text-color, #4d4d4d); -} -.jse-json-node.jse-root.svelte-1qi6rc1 { - min-height: 100%; - padding-bottom: 2px; - box-sizing: border-box; -} -.jse-json-node.jse-root.svelte-1qi6rc1 > .jse-contents-outer:where(.svelte-1qi6rc1) > .jse-contents:where(.svelte-1qi6rc1) { - padding-left: 0; -} -.jse-json-node.svelte-1qi6rc1 .jse-props:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-items:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-header-outer:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-footer-outer:where(.svelte-1qi6rc1) { - display: flex; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) .jse-meta:where(.svelte-1qi6rc1) > .jse-meta-inner:where(.svelte-1qi6rc1) { - display: flex; - justify-content: center; -} -.jse-json-node.svelte-1qi6rc1 .jse-contents-outer:where(.svelte-1qi6rc1) { - display: flex; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { - display: flex; - flex-direction: row; - align-items: flex-start; -} -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { - padding-left: var(--jse-indent-size, calc(1em + 4px)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) .jse-value-outer:where(.svelte-1qi6rc1) { - display: inline-flex; -} -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - display: inline-flex; - padding-left: calc(var(--jse-indent-size, calc(1em + 4px)) + 5px); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - background: var(--jse-contents-background-color, transparent); -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area:where(.svelte-1qi6rc1) { - padding: 0 calc(0.5 * var(--jse-padding, 10px)); - flex: 1; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-inside:where(.svelte-1qi6rc1) { - display: inline-flex; - align-items: center; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-after:where(.svelte-1qi6rc1) { - display: flex; - align-items: flex-end; -} -.jse-json-node.svelte-1qi6rc1 .jse-context-menu-pointer-anchor:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area:where(.svelte-1qi6rc1) { - display: flex; - position: relative; - z-index: 1; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); - max-width: 250px; - min-width: 100px; - height: 0; - margin-right: calc(0.5 * var(--jse-padding, 10px)); - outline: 1px solid; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-hovered:where(.svelte-1qi6rc1) { - outline-color: var(--jse-context-menu-pointer-hover-background, #b2b2b2); -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-meta { - background: none; -} -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { - background: inherit; - cursor: inherit; -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer.jse-selected-key:where(.svelte-1qi6rc1) { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer .jse-key-outer:hover { - background: inherit; - cursor: inherit; -} -.jse-json-node.jse-readonly.svelte-1qi6rc1 { - --jse-contents-selected-cursor: pointer; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-selected:where(.svelte-1qi6rc1) { - outline-color: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); -}`);var Ko=wv(()=>yRA),bRA=FA('
      :
      '),MRA=FA('
      [
       ',1),kRA=FA('
      [
      ]
      ',1),SRA=FA('
      '),xRA=FA('
      '),RRA=FA('
      '),NRA=FA('
      '),FRA=FA('
      '),_RA=FA(" ",1),LRA=FA('
      '),GRA=FA('
      ',1),KRA=FA('
      ',1),URA=FA('
      :
      '),JRA=FA('
      {
      '),YRA=FA('
      {
      }
      ',1),TRA=FA('
      '),HRA=FA('
      '),zRA=FA('
      '),ORA=FA('
      '),PRA=FA('
      '),jRA=FA('
      '),qRA=FA('
      ',1),VRA=FA('
      ',1),WRA=FA('
      :
      '),ZRA=FA('
      '),XRA=FA('
      '),$RA=FA('
      '),ANA=FA('
      '),eNA=FA('
      ');function KL(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"pointer",9),o=N(e,"value",9),a=N(e,"state",9),r=N(e,"validationErrors",9),s=N(e,"searchResults",9),g=N(e,"selection",9),l=N(e,"context",9),C=N(e,"onDragSelectionStart",9),I=Cr("jsoneditor:JSONNode"),d=IA(void 0,!0),B=void 0,E=IA(void 0,!0),Q=IA(void 0,!0),f=IA(void 0,!0),b=IA(void 0,!0),S=IA(void 0,!0),M=IA(void 0,!0),D=IA(void 0,!0);function F(HA){HA.stopPropagation();var uA=nG(HA);l().onExpand(c(Q),!c(f),uA)}function _(){l().onExpand(c(Q),!0)}function U(HA,uA){var ZA=dm(c(Q),Object.keys(o()),HA,uA);return l().onPatch(ZA),mi(Qs(ZA[0].path))}function J(HA){l().onDrag(HA)}function j(HA){Ko().selecting&&(Ko(Ko().selecting=!1),HA.stopPropagation()),l().onDragEnd(),document.removeEventListener("mousemove",J,!0),document.removeEventListener("mouseup",j)}function AA(){var HA;return((HA=l().findElement([]))===null||HA===void 0||(HA=HA.getBoundingClientRect())===null||HA===void 0?void 0:HA.top)||0}function O(HA,uA){var ZA=AA()-HA.initialContentTop;return uA.clientY-HA.initialClientY-ZA}function DA(HA){if(!l().readOnly&&g()){var uA=Ki(ct(g()));if(Qi(c(Q),uA)){var ZA=(function(LA,pA){var Ft=[];function ht(z){var nA=c(Q).concat(z),rA=l().findElement(nA);rA!==void 0&&Ft.push({path:nA,height:rA.clientHeight})}if(Array.isArray(o())){var Ee=l().getJson();if(Ee===void 0)return;var Kt=e2(Ee,LA),Ye=i1(Ee,LA),ze=parseInt(mi(Kt),10),ut=parseInt(mi(Ye),10),Me=pA.find(z=>ze>=z.start&&ut<=z.end);if(!Me)return;var{start:ei,end:Y}=Me;ooA(ei,Math.min(o().length,Y),z=>ht(String(z)))}else Object.keys(o()).forEach(ht);return Ft})(g(),c(S)||gh);if(I("dragSelectionStart",{selection:g(),items:ZA}),ZA){var QA=l().getJson();if(QA!==void 0){var WA=e2(QA,g()),MA=ZA.findIndex(LA=>Qi(LA.path,WA)),{offset:be}=gL({json:QA,selection:l().getSelection(),deltaY:0,items:ZA});R(E,{initialTarget:HA.target,initialClientY:HA.clientY,initialContentTop:AA(),selectionStartIndex:MA,selectionItemsCount:o1(QA,g()).length,items:ZA,offset:be,didMoveItems:!1}),Ko(Ko().dragging=!0),document.addEventListener("mousemove",P,!0),document.addEventListener("mouseup",aA)}}else I("Cannot drag the current selection (probably spread over multiple sections)")}else C()(HA)}}function P(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var ZA=O(c(E),HA),{offset:QA}=gL({json:uA,selection:l().getSelection(),deltaY:ZA,items:c(E).items});QA!==c(E).offset&&(I("drag selection",QA,ZA),R(E,ye(ye({},c(E)),{},{offset:QA,didMoveItems:!0})))}}function aA(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var ZA=O(c(E),HA),{operations:QA,updatedSelection:WA}=gL({json:uA,selection:l().getSelection(),deltaY:ZA,items:c(E).items});if(QA)l().onPatch(QA,(LA,pA)=>({state:pA,selection:WA??g()}));else if(HA.target===c(E).initialTarget&&!c(E).didMoveItems){var MA=W_(HA.target),be=QoA(HA.target);be&&l().onSelect(kiA(MA,be))}R(E,void 0),Ko(Ko().dragging=!1),document.removeEventListener("mousemove",P,!0),document.removeEventListener("mouseup",aA)}}function iA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(c2(c(Q))))}function BA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(o2(c(Q))))}function oA(HA){l().onSelect(c2(c(Q))),Mo(),l().onContextMenu(HA)}function sA(HA){l().onSelect(o2(c(Q))),Mo(),l().onContextMenu(HA)}RA(()=>G(n()),()=>{R(Q,Qs(n()))}),RA(()=>G(n()),()=>{R(A,encodeURIComponent(n()))}),RA(()=>G(a()),()=>{R(f,!!eB(a())&&a().expanded)}),RA(()=>(G(o()),G(a())),()=>{R(b,P0(o(),a(),[]))}),RA(()=>G(a()),()=>{R(S,lr(a())?a().visibleSections:void 0)}),RA(()=>G(r()),()=>{var HA;R(M,(HA=r())===null||HA===void 0?void 0:HA.validationError)}),RA(()=>(G(l()),G(g()),c(Q)),()=>{R(D,Xf(l().getJson(),g(),c(Q)))}),RA(()=>c(Q),()=>{R(i,c(Q).length===0)}),kn(),Ai(!0);var hA,YA,ee=eNA(),UA=CA(ee),mA=HA=>{var uA=KRA(),ZA=At(uA),QA=CA(ZA),WA=CA(QA),MA=CA(WA),be=xA=>{Vi(xA,{get data(){return M0}})},LA=xA=>{Vi(xA,{get data(){return WE}})};TA(MA,xA=>{c(f)?xA(be):xA(LA,!1)});var pA=bA(WA,2);Ea(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=xA=>{lA(xA,bRA())};TA(Ft,xA=>{c(i)||xA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Ye=CA(Kt),ze=xA=>{var _A=MRA();Zy(bA(At(_A),2),{children:(Et,et)=>{var Te=ur();ve(()=>{var Le,si;return Rt(Te,"".concat((G(o()),(Le=EA(()=>o().length))!==null&&Le!==void 0?Le:""),` - `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),lA(Et,Te)},$$slots:{default:!0}}),lA(xA,_A)},ut=xA=>{var _A=kRA();Zy(bA(At(_A),2),{onclick:_,children:(Et,et)=>{var Te=ur();ve(()=>{var Le,si;return Rt(Te,"".concat((G(o()),(Le=EA(()=>o().length))!==null&&Le!==void 0?Le:""),` - `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),lA(Et,Te)},$$slots:{default:!0}}),lA(xA,_A)};TA(Ye,xA=>{c(f)?xA(ze):xA(ut,!1)});var Me=bA(Ee,2),ei=xA=>{var _A=SRA();TI(CA(_A),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(xA,_A)};TA(Me,xA=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&xA(ei)});var Y=bA(QA,2),z=xA=>{Ch(xA,{get validationError(){return c(M)},onExpand:_})};TA(Y,xA=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&xA(z)});var nA=bA(Y,2),rA=xA=>{var _A=xRA();ue("click",_A,iA),lA(xA,_A)},NA=xA=>{var _A=RRA();ue("click",_A,BA),lA(xA,_A)};TA(nA,xA=>{c(f)?xA(rA):xA(NA,!1)});var Ie=bA(ZA,2),Qe=xA=>{var _A=GRA(),Et=At(_A),et=CA(Et),Te=dn=>{var _e,Wi,ui=NRA(),Mi=CA(ui),zi=tt(()=>(c(D),G(tr),G(g()),EA(()=>c(D)&&tr(g()))));TI(Mi,{insert:!0,get selected(){return c(zi)},onContextMenu:oA}),ve(vt=>{_e=$t(ui,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,_e,vt),Mn(ui,"title",$_),Wi=Yl(ui,"",Wi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&tr(g())})]),lA(dn,ui)};TA(et,dn=>{G(l()),c(d),G(Gd),c(D),G(tr),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&tr(g())))&&dn(Te)}),Qa(bA(et,2),1,()=>c(S)||gh,Na,(dn,_e,Wi)=>{var ui=_RA(),Mi=At(ui);Qa(Mi,1,()=>(G(o()),c(_e),c(E),EA(()=>(function(Zi,_t,L){var Ct=_t.start,ci=Math.min(_t.end,Zi.length),Bn=qw(Ct,ci);return L&&L.offset!==0?giA(Bn,L.selectionStartIndex,L.selectionItemsCount,L.offset).map((En,qn)=>({index:En,gutterIndex:qn})):Bn.map(En=>({index:En,gutterIndex:En}))})(o(),c(_e),c(E)))),Zi=>Zi.index,(Zi,_t)=>{var L=tt(()=>(G(lr),G(r()),c(_t),EA(()=>lr(r())?r().items[c(_t).index]:void 0))),Ct=tt(()=>(G(_y),G(l()),G(g()),c(Q),c(_t),EA(()=>_y(l().getJson(),g(),c(Q).concat(String(c(_t).index)))))),ci=bi(),Bn=At(ci),En=tt(()=>(G(V4),G(n()),c(_t),EA(()=>V4(n(),c(_t).index)))),qn=tt(()=>(G(lr),G(a()),c(_t),EA(()=>lr(a())?a().items[c(_t).index]:void 0))),Yo=tt(()=>(G(lr),G(s()),c(_t),EA(()=>lr(s())?s().items[c(_t).index]:void 0)));KL(Bn,{get value(){return G(o()),c(_t),EA(()=>o()[c(_t).index])},get pointer(){return c(En)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(Yo)},get selection(){return c(Ct)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Co,ko)=>{var Zo=FRA(),wo=CA(Zo),ha=CA(wo);ve(()=>Rt(ha,(c(_t),EA(()=>c(_t).gutterIndex)))),lA(Co,Zo)}}}),lA(Zi,ci)});var zi=bA(Mi,2),vt=Zi=>{var _t=tt(()=>c(S)||gh);fRA(Zi,{get visibleSections(){return c(_t)},sectionIndex:Wi,get total(){return G(o()),EA(()=>o().length)},get path(){return c(Q)},get onExpandSection(){return G(l()),EA(()=>l().onExpandSection)},get selection(){return g()},get context(){return l()}})};TA(zi,Zi=>{c(_e),G(o()),EA(()=>c(_e).end{var _e=LRA();ue("click",_e,BA),lA(dn,_e)};TA(si,dn=>{c(i)||dn(gn)}),lA(xA,_A)};TA(Ie,xA=>{c(f)&&xA(Qe)}),ue("click",WA,F),lA(HA,uA)},KA=HA=>{var uA=bi(),ZA=At(uA),QA=MA=>{var be=VRA(),LA=At(be),pA=CA(LA),Ft=CA(pA),ht=CA(Ft),Ee=Le=>{Vi(Le,{get data(){return M0}})},Kt=Le=>{Vi(Le,{get data(){return WE}})};TA(ht,Le=>{c(f)?Le(Ee):Le(Kt,!1)});var Ye=bA(Ft,2);Ea(Ye,e,"identifier",{},null);var ze=bA(Ye,2),ut=Le=>{lA(Le,URA())};TA(ze,Le=>{c(i)||Le(ut)});var Me=bA(ze,2),ei=CA(Me),Y=CA(ei),z=Le=>{lA(Le,JRA())},nA=Le=>{var si=YRA();Zy(bA(At(si),2),{onclick:_,children:(gn,dn)=>{var _e=ur();ve((Wi,ui)=>Rt(_e,"".concat(Wi??"",` - `).concat(ui??"")),[()=>(G(o()),EA(()=>Object.keys(o()).length)),()=>(G(o()),EA(()=>Object.keys(o()).length===1?"prop":"props"))]),lA(gn,_e)},$$slots:{default:!0}}),lA(Le,si)};TA(Y,Le=>{c(f)?Le(z):Le(nA,!1)});var rA=bA(Me,2),NA=Le=>{var si=TRA();TI(CA(si),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(Le,si)};TA(rA,Le=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&Le(NA)});var Ie=bA(pA,2),Qe=Le=>{Ch(Le,{get validationError(){return c(M)},onExpand:_})};TA(Ie,Le=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&Le(Qe)});var xA=bA(Ie,2),_A=Le=>{var si=HRA();ue("click",si,iA),lA(Le,si)},Et=Le=>{var si=bi(),gn=At(si),dn=_e=>{var Wi=zRA();ue("click",Wi,BA),lA(_e,Wi)};TA(gn,_e=>{c(i)||_e(dn)},!0),lA(Le,si)};TA(xA,Le=>{c(f)?Le(_A):Le(Et,!1)});var et=bA(LA,2),Te=Le=>{var si=qRA(),gn=At(si),dn=CA(gn),_e=zi=>{var vt,Zi,_t=ORA(),L=CA(_t),Ct=tt(()=>(c(D),G(tr),G(g()),EA(()=>c(D)&&tr(g()))));TI(L,{insert:!0,get selected(){return c(Ct)},onContextMenu:oA}),ve(ci=>{vt=$t(_t,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,vt,ci),Mn(_t,"title",$_),Zi=Yl(_t,"",Zi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&tr(g())})]),lA(zi,_t)};TA(dn,zi=>{G(l()),c(d),G(Gd),c(D),G(tr),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&tr(g())))&&zi(_e)}),Qa(bA(dn,2),1,()=>(G(o()),c(E),EA(()=>(function(zi,vt){var Zi=Object.keys(zi);return vt&&vt.offset!==0?giA(Zi,vt.selectionStartIndex,vt.selectionItemsCount,vt.offset):Zi})(o(),c(E)))),Na,(zi,vt)=>{var Zi=tt(()=>(G(V4),G(n()),c(vt),EA(()=>V4(n(),c(vt))))),_t=tt(()=>(G(wg),G(s()),c(vt),EA(()=>wg(s())?s().properties[c(vt)]:void 0))),L=tt(()=>(G(wg),G(r()),c(vt),EA(()=>wg(r())?r().properties[c(vt)]:void 0))),Ct=tt(()=>(c(Q),c(vt),EA(()=>c(Q).concat(c(vt))))),ci=tt(()=>(G(_y),G(l()),G(g()),G(c(Ct)),EA(()=>_y(l().getJson(),g(),c(Ct))))),Bn=bi(),En=At(Bn),qn=tt(()=>(G(wg),G(a()),c(vt),EA(()=>wg(a())?a().properties[c(vt)]:void 0)));KL(En,{get value(){return G(o()),c(vt),EA(()=>o()[c(vt)])},get pointer(){return c(Zi)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(_t)},get selection(){return c(ci)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Yo,Co)=>{var ko,Zo=PRA(),wo=CA(Zo),ha=tt(()=>(G(LiA),G(c(_t)),EA(()=>LiA(c(_t)))));(function(Xo,ra){St(ra,!1);var Do=IA(void 0,!0),re=IA(void 0,!0),di=N(ra,"pointer",9),ln=N(ra,"key",9),Qn=N(ra,"selection",9),To=N(ra,"searchResultItems",9),Ma=N(ra,"onUpdateKey",9),wi=N(ra,"context",9),Io=IA(void 0,!0);function nr(vA){c(re)||wi().readOnly||(vA.preventDefault(),wi().onSelect(dG(c(Io))))}function yo(vA,VA){var me=Ma()(ln(),wi().normalization.unescapeValue(vA)),dA=Ki(c(Io)).concat(me);wi().onSelect(VA===t1.nextInside?Ui(dA):l2(dA)),VA!==t1.self&&wi().focus()}function Pa(){wi().onSelect(l2(c(Io))),wi().focus()}RA(()=>G(di()),()=>{R(Io,Qs(di()))}),RA(()=>(G(Qn()),c(Io)),()=>{R(Do,cr(Qn())&&Qi(Qn().path,c(Io)))}),RA(()=>(c(Do),G(Qn())),()=>{R(re,c(Do)&&gr(Qn()))}),kn(),Ai(!0);var Gn=wRA(),xi=At(Gn),Pt=vA=>{var VA=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln())))),me=tt(()=>(G(gr),G(Qn()),EA(()=>gr(Qn())?Qn().initialValue:void 0)));MoA(vA,{get value(){return c(VA)},get initialValue(){return c(me)},label:"Edit key",shortText:!0,onChange:yo,onCancel:Pa,get onFind(){return G(wi()),EA(()=>wi().onFind)}})},Sn=vA=>{var VA,me=pRA(),dA=CA(me),SA=xe=>{var it=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln()))));_oA(xe,{get text(){return c(it)},get searchResultItems(){return To()}})},ae=xe=>{var it=ur();ve(st=>Rt(it,st),[()=>(G(fh),G(wi()),G(ln()),EA(()=>fh(wi().normalization.escapeValue(ln()))))]),lA(xe,it)};TA(dA,xe=>{To()?xe(SA):xe(ae,!1)}),ve(()=>VA=$t(me,1,"jse-key svelte-1n4cez4",null,VA,{"jse-empty":ln()===""})),ue("dblclick",me,nr),lA(vA,me)};TA(xi,vA=>{G(wi()),c(re),EA(()=>!wi().readOnly&&c(re))?vA(Pt):vA(Sn,!1)});var Bo=bA(xi,2),So=vA=>{TI(vA,{selected:!0,get onContextMenu(){return G(wi()),EA(()=>wi().onContextMenu)}})};TA(Bo,vA=>{G(wi()),c(Do),c(re),EA(()=>!wi().readOnly&&c(Do)&&!c(re))&&vA(So)}),lA(Xo,Gn),xt()})(wo,{get pointer(){return c(Zi)},get key(){return c(vt)},get selection(){return c(ci)},get searchResultItems(){return c(ha)},get context(){return l()},onUpdateKey:U}),ve(Xo=>ko=$t(Zo,1,"jse-key-outer svelte-1qi6rc1",null,ko,Xo),[()=>({"jse-selected-key":cr(c(ci))&&Qi(c(ci).path,c(Ct))})]),lA(Yo,Zo)}}}),lA(zi,Bn)});var Wi=bA(gn,2),ui=bA(CA(Wi),2),Mi=zi=>{var vt=jRA();ue("click",vt,BA),lA(zi,vt)};TA(ui,zi=>{c(i)||zi(Mi)}),lA(Le,si)};TA(et,Le=>{c(f)&&Le(Te)}),ue("click",Ft,F),lA(MA,be)},WA=MA=>{var be=$RA(),LA=CA(be),pA=CA(LA);Ea(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=rA=>{lA(rA,WRA())};TA(Ft,rA=>{c(i)||rA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Ye=tt(()=>c(D)?g():void 0),ze=tt(()=>(G(GiA),G(s()),EA(()=>GiA(s()))));ZoA(Kt,{get path(){return c(Q)},get value(){return o()},get enforceString(){return c(b)},get selection(){return c(Ye)},get searchResultItems(){return c(ze)},get context(){return l()}});var ut=bA(Ee,2),Me=rA=>{var NA=ZRA();TI(CA(NA),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(rA,NA)};TA(ut,rA=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&rA(Me)});var ei=bA(LA,2),Y=rA=>{Ch(rA,{get validationError(){return c(M)},onExpand:_})};TA(ei,rA=>{c(M)&&rA(Y)});var z=bA(ei,2),nA=rA=>{var NA=XRA();ue("click",NA,BA),lA(rA,NA)};TA(z,rA=>{c(i)||rA(nA)}),lA(MA,be)};TA(ZA,MA=>{G(pn),G(o()),EA(()=>pn(o()))?MA(QA):MA(WA,!1)},!0),lA(HA,uA)};TA(UA,HA=>{G(o()),EA(()=>Array.isArray(o()))?HA(mA):HA(KA,!1)});var Pe=bA(UA,2),Je=HA=>{var uA,ZA=ANA(),QA=CA(ZA),WA=tt(()=>(c(D),G(yg),G(g()),EA(()=>c(D)&&yg(g()))));TI(QA,{insert:!0,get selected(){return c(WA)},onContextMenu:sA}),ve(MA=>{uA=$t(ZA,1,"jse-insert-area jse-after svelte-1qi6rc1",null,uA,MA),Mn(ZA,"title",$_)},[()=>({"jse-hovered":c(d)===Ny,"jse-selected":c(D)&&yg(g())})]),lA(HA,ZA)};TA(Pe,HA=>{G(l()),c(d),G(Ny),c(D),G(yg),G(g()),EA(()=>!l().readOnly&&(c(d)===Ny||c(D)&&yg(g())))&&HA(Je)}),ve((HA,uA)=>{hA=$t(ee,1,HA,"svelte-1qi6rc1",hA,uA),Mn(ee,"data-path",c(A)),Mn(ee,"aria-selected",c(D)),YA=Yl(ee,"",YA,{"--level":(c(Q),EA(()=>c(Q).length))})},[()=>n1((G(Pc),c(f),G(l()),c(Q),G(o()),EA(()=>Pc("jse-json-node",{"jse-expanded":c(f)},l().onClassName(c(Q),o()))))),()=>({"jse-root":c(i),"jse-selected":c(D)&&lo(g()),"jse-selected-value":c(D)&&In(g()),"jse-readonly":l().readOnly,"jse-hovered":c(d)===IiA})]),ue("mousedown",ee,function(HA){if((HA.buttons===1||HA.buttons===2)&&!((uA=HA.target).nodeName==="DIV"&&uA.contentEditable==="true"||HA.buttons===1&&BoA(HA.target,"BUTTON"))){var uA;HA.stopPropagation(),HA.preventDefault(),l().focus(),document.addEventListener("mousemove",J,!0),document.addEventListener("mouseup",j);var ZA=W_(HA.target),QA=l().getJson(),WA=l().getDocumentState();if(!g()||ZA===no.after||ZA===no.inside||g().type!==ZA&&g().type!==no.multi||!Xf(QA,g(),c(Q)))if(Ko(Ko().selecting=!0),Ko(Ko().selectionAnchor=c(Q)),Ko(Ko().selectionAnchorType=ZA),Ko(Ko().selectionFocus=c(Q)),HA.shiftKey){var MA=l().getSelection();MA&&l().onSelect(Ds(jd(MA),c(Q)))}else if(ZA===no.multi)if(c(i)&&HA.target.hasAttribute("data-path")){var be=mi(woA(o(),WA));l().onSelect(SL(be))}else l().onSelect(Ds(c(Q),c(Q)));else QA!==void 0&&l().onSelect(kiA(ZA,c(Q)));else HA.button===0&&C()(HA)}}),ue("mousemove",ee,function(HA){if(Ko().selecting){HA.preventDefault(),HA.stopPropagation(),Ko().selectionFocus===void 0&&window.getSelection&&window.getSelection().empty();var uA=W_(HA.target);Qi(c(Q),Ko().selectionFocus)&&uA===Ko().selectionAnchorType||(Ko(Ko().selectionFocus=c(Q)),Ko(Ko().selectionAnchorType=uA),l().onSelect(Ds(Ko().selectionAnchor||Ko().selectionFocus,Ko().selectionFocus)))}}),ue("mouseover",ee,function(HA){Ko().selecting||Ko().dragging||(HA.stopPropagation(),VI(HA.target,"data-type","selectable-value")?R(d,IiA):VI(HA.target,"data-type","selectable-key")?R(d,void 0):VI(HA.target,"data-type","insert-selection-area-inside")?R(d,Gd):VI(HA.target,"data-type","insert-selection-area-after")&&R(d,Ny),clearTimeout(B))}),ue("mouseout",ee,function(HA){HA.stopPropagation(),B=window.setTimeout(()=>R(d,void 0))}),lA(t,ee),xt()}var XoA={prefix:"fas",iconName:"jsoneditor-expand",icon:[512,512,[],"","M 0,448 V 512 h 512 v -64 z M 0,0 V 64 H 512 V 0 Z M 256,96 128,224 h 256 z M 256,416 384,288 H 128 Z"]},$oA={prefix:"fas",iconName:"jsoneditor-collapse",icon:[512,512,[],"","m 0,224 v 64 h 512 v -64 z M 256,192 384,64 H 128 Z M 256,320 128,448 h 256 z"]},ViA={prefix:"fas",iconName:"jsoneditor-format",icon:[512,512,[],"","M 0,32 v 64 h 416 v -64 z M 160,160 v 64 h 352 v -64 z M 160,288 v 64 h 288 v -64 z M 0,416 v 64 h 320 v -64 z"]},tNA={prefix:"fas",iconName:"jsoneditor-compact",icon:[512,512,[],"","M 0,32 v 64 h 512 v -64 z M 0,160 v 64 h 512 v -64 z M 0,288 v 64 h 352 v -64 z"]};qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-welcome.svelte-1lhnan { - flex: 1; - overflow: auto; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - display: flex; - flex-direction: column; - align-items: center; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-welcome.svelte-1lhnan:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-welcome.svelte-1lhnan .jse-space.jse-before:where(.svelte-1lhnan) { - flex: 1; -} -.jse-welcome.svelte-1lhnan .jse-space.jse-after:where(.svelte-1lhnan) { - flex: 2; -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) { - display: flex; - flex-direction: column; - max-width: 300px; - margin: 2em var(--jse-padding, 10px); - gap: var(--jse-padding, 10px); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) .jse-welcome-info:where(.svelte-1lhnan) { - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -}`);var iNA=FA('
      You can paste clipboard data using Ctrl+V, or use the following options:
      ',1),nNA=FA('
      Empty document
      ');function UL(t,e){var A=typeof t=="string"?t.toLowerCase():t,i=typeof e=="string"?e.toLowerCase():e;return(0,inA.default)(A,i)}function AaA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,n=je(t,e);if(qo(n)){if(A===void 0)throw new Error("Cannot sort: no property selected by which to sort the array");return(function(o){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,g=(function(C,I){var d={boolean:0,number:1,string:2,undefined:4},B=3;return function(E,Q){var f=je(E,C),b=je(Q,C);if(typeof f!=typeof b){var S,M,D=(S=d[typeof f])!==null&&S!==void 0?S:B,F=(M=d[typeof b])!==null&&M!==void 0?M:B;return D>F?I:Db?I:f1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=je(o,a),g=Object.keys(s).slice();g.sort((C,I)=>r*UL(C,I));var l={};return g.forEach(C=>l[C]=s[C]),[{op:"replace",path:wt(a),value:l}]})(t,e,i);throw new Error("Cannot sort: no array or object")}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-dropdown.svelte-1k47orx { - position: absolute; - top: 100%; - left: 0; - z-index: 3; - background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); - color: var(--jse-navigation-bar-dropdown-color, #656565); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - display: flex; - flex-direction: column; - max-height: 300px; - overflow: auto; - min-width: 80px; -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx) { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - border: none; - background: transparent; - color: inherit; - cursor: pointer; - outline: none; - text-align: left; - white-space: nowrap; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)) 36px; -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):focus, .jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):hover { - background: var(--jse-navigation-bar-background-highlight, #e5e5e5); -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item.jse-selected:where(.svelte-1k47orx) { - background: var(--jse-navigation-bar-dropdown-color, #656565); - color: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); -}`);var oNA=FA(''),aNA=FA(''),rNA=FA('
      ');function sNA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"selectedItem",9),n=N(e,"onSelect",9);Ai(!0);var o=rNA(),a=CA(o);Qa(a,1,()=>(G(iv),G(A()),EA(()=>iv(A(),100))),g=>g,(g,l)=>{var C,I=oNA(),d=CA(I);ve((B,E)=>{C=$t(I,1,"jse-navigation-bar-dropdown-item svelte-1k47orx",null,C,{"jse-selected":c(l)===i()}),Mn(I,"title",B),Rt(d,E)},[()=>(c(l),EA(()=>c(l).toString())),()=>(G(XC),c(l),EA(()=>XC(c(l).toString(),30)))]),ue("click",I,VC(()=>n()(c(l)))),lA(g,I)});var r=bA(a,2),s=g=>{var l=aNA();Mn(l,"title","Limited to 100 items"),lA(g,l)};TA(r,g=>{G(A()),EA(()=>A().length>100)&&g(s)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-item.svelte-13sijxb { - position: relative; - display: flex; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb) { - font-family: inherit; - font-size: inherit; - padding: calc(0.5 * var(--jse-padding, 10px)) 2px; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - outline: none; - min-width: 2em; - white-space: nowrap; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):focus, .jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):hover { - background: var(--jse-panel-button-background-highlight, #e0e0e0); - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow:where(.svelte-13sijxb) { - padding: 2px var(--jse-padding, 10px) 0; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow.jse-open:where(.svelte-13sijxb) { - background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); - color: var(--jse-navigation-bar-dropdown-color, #656565); -} -.jse-navigation-bar-item.svelte-13sijxb:last-child { - padding-right: var(--jse-padding, 10px); -}`);var gNA=FA(''),lNA=FA('
      ');function WiA(t,e){St(e,!1);var A,i=IA(void 0,!0),n=IA(void 0,!0),{openAbsolutePopup:o,closeAbsolutePopup:a}=r1("absolute-popup"),r=N(e,"path",9),s=N(e,"index",9),g=N(e,"onSelect",9),l=N(e,"getItems",9),C=IA(void 0,!0),I=IA(!1,!0);function d(S){a(A),g()(c(i).concat(S))}RA(()=>(G(r()),G(s())),()=>{R(i,r().slice(0,s()))}),RA(()=>(G(r()),G(s())),()=>{R(n,r()[s()])}),kn(),Ai(!0);var B,E=lNA(),Q=CA(E);Vi(CA(Q),{get data(){return US}});var f=bA(Q,2),b=S=>{var M=gNA(),D=CA(M);ve(()=>Rt(D,c(n))),ue("click",M,()=>d(c(n))),lA(S,M)};TA(f,S=>{c(n)!==void 0&&S(b)}),Jo(E,S=>R(C,S),()=>c(C)),ve(()=>B=$t(Q,1,"jse-navigation-bar-button jse-navigation-bar-arrow svelte-13sijxb",null,B,{"jse-open":c(I)})),ue("click",Q,function(){if(c(C)){R(I,!0);var S={items:l()(c(i)),selectedItem:c(n),onSelect:d};A=o(sNA,S,{anchor:c(C),closeOnOuterClick:!0,onClose:()=>{R(I,!1)}})}}),lA(t,E),xt()}function uG(t){var e,A;if(navigator.clipboard)return navigator.clipboard.writeText(t);if((e=(A=document).queryCommandSupported)!==null&&e!==void 0&&e.call(A,"copy")){var i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch(n){console.error(n)}finally{document.body.removeChild(i)}return Promise.resolve()}return console.error("Copy failed."),Promise.resolve()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-path-editor.svelte-uyexy4 { - flex: 1; - display: flex; - border: var(--jse-edit-outline, 2px solid #656565); - background: var(--jse-background-color, #fff); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { - flex: 1; - font-family: inherit; - font-size: inherit; - padding: 0 5px 1px; - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); - border: none; - outline: none; -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button:where(.svelte-uyexy4) { - border: none; - background: var(--jse-background-color, #fff); - cursor: pointer; - font-family: inherit; - font-size: 80%; - color: inherit; -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-copy.copied:where(.svelte-uyexy4) { - color: var(--message-success-background, #9ac45d); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-validation-error:where(.svelte-uyexy4) { - color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.error.svelte-uyexy4 { - border-color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.error.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { - color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 .jse-copied-text:where(.svelte-uyexy4) { - background: var(--message-success-background, #9ac45d); - color: var(--jse-message-success-color, #fff); - position: relative; - margin: 2px; - padding: 0 5px; - border-radius: 3px; -}`);var cNA=FA(''),CNA=FA('
      Copied!
      '),INA=FA('
      ');function dNA(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"path",8),o=N(e,"pathParser",8),a=N(e,"onChange",8),r=N(e,"onClose",8),s=N(e,"onError",8),g=N(e,"pathExists",8),l=IA(),C=IA(),I=IA(!1),d=void 0,B=IA(!1);function E(){c(l).focus()}function Q(j){try{var AA=o().parse(j);return(function(O){if(!g()(O))throw new Error("Path does not exist in current document")})(AA),{path:AA,error:void 0}}catch(O){return{path:void 0,error:O}}}is(()=>{E()}),Hl(()=>{clearTimeout(d)}),RA(()=>(G(o()),G(n())),()=>{R(C,o().stringify(n()))}),RA(()=>(c(I),c(C)),()=>{R(A,c(I)?Q(c(C)).error:void 0)}),kn(),Ai();var f,b=INA(),S=CA(b);Jo(S,j=>R(l,j),()=>c(l));var M=bA(S,2),D=j=>{var AA=cNA();Vi(CA(AA),{get data(){return BI}}),vs(AA,(O,DA)=>wh?.(O,DA),()=>ye({text:String(c(A)||"")},i)),lA(j,AA)};TA(M,j=>{c(A)&&j(D)});var F=bA(M,2),_=j=>{lA(j,CNA())};TA(F,j=>{c(B)&&j(_)});var U,J=bA(F,2);Vi(CA(J),{get data(){return xC}}),ve(()=>{f=$t(b,1,"jse-navigation-bar-path-editor svelte-uyexy4",null,f,{error:c(A)}),AB(S,c(C)),U=$t(J,1,"jse-navigation-bar-copy svelte-uyexy4",null,U,{copied:c(B)})}),ue("keydown",S,VC(function(j){var AA=g2(j);if(AA==="Escape"&&(j.preventDefault(),r()()),AA==="Enter"){j.preventDefault(),R(I,!0);var O=Q(c(C));O.path!==void 0?a()(O.path):s()(O.error)}})),ue("input",S,function(j){R(C,j.currentTarget.value)}),ue("click",J,function(){uG(c(C)),R(B,!0),d=window.setTimeout(()=>R(B,!1),1e3),E()}),lA(t,b),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar.svelte-hjhal6 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-button-color, inherit); - padding: 0; - margin: 0; - display: flex; - overflow: auto; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - color: var(--jse-panel-color-readonly, #b2b2b2); - background: transparent; - border: none; - display: flex; - cursor: pointer; - outline: none; - align-items: center; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.flex:where(.svelte-hjhal6) { - flex: 1; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):focus, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):hover, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.editing:where(.svelte-hjhal6) { - background: var(--jse-panel-button-background-highlight, #e0e0e0); - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - transition: color 0.2s ease-in, background 0.2s ease-in; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) .jse-navigation-bar-space:where(.svelte-hjhal6) { - flex: 1; - text-align: left; -}`);var BNA=FA(" ",1),ENA=FA('
      ');function QNA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=Cr("jsoneditor:NavigationBar"),o=N(e,"json",9),a=N(e,"selection",9),r=N(e,"onSelect",9),s=N(e,"onError",9),g=N(e,"pathParser",9),l=IA(void 0,!0),C=IA(!1,!0);function I(AA){n("get items for path",AA);var O=je(o(),AA);if(Array.isArray(O))return qw(0,O.length).map(String);if(pn(O)){var DA=Object.keys(O).slice(0);return DA.sort(UL),DA}return[]}function d(AA){return br(o(),AA)}function B(AA){n("select path",JSON.stringify(AA)),r()(Ds(AA,AA))}function E(){R(C,!1)}function Q(AA){E(),B(AA)}RA(()=>(G(a()),ct),()=>{R(A,a()?ct(a()):[])}),RA(()=>(G(o()),c(A)),()=>{R(i,aa(je(o(),c(A))))}),RA(()=>c(A),()=>{c(A),setTimeout(()=>{if(c(l)&&c(l).scrollTo){var AA=c(l).scrollWidth-c(l).clientWidth;AA>0&&(n("scrollTo ",AA),c(l).scrollTo({left:AA,behavior:"smooth"}))}})}),kn(),Ai(!0);var f=ENA(),b=CA(f),S=AA=>{var O=BNA(),DA=At(O);Qa(DA,1,()=>c(A),Na,(iA,BA,oA)=>{WiA(iA,{getItems:I,get path(){return c(A)},index:oA,onSelect:B})});var P=bA(DA,2),aA=iA=>{WiA(iA,{getItems:I,get path(){return c(A)},get index(){return c(A),EA(()=>c(A).length)},onSelect:B})};TA(P,iA=>{c(i)&&iA(aA)}),lA(AA,O)},M=AA=>{dNA(AA,{get path(){return c(A)},onClose:E,onChange:Q,get onError(){return s()},pathExists:d,get pathParser(){return g()}})};TA(b,AA=>{c(C)?AA(M,!1):AA(S)});var D,F=bA(b,2),_=CA(F),U=CA(_),J=bA(_,2),j=tt(()=>c(C)?gV:nV);Vi(J,{get data(){return c(j)}}),Jo(f,AA=>R(l,AA),()=>c(l)),ve(AA=>{D=$t(F,1,"jse-navigation-bar-edit svelte-hjhal6",null,D,{flex:!c(C),editing:c(C)}),Mn(F,"title",c(C)?"Cancel editing the selected path":"Edit the selected path"),Rt(U,AA)},[()=>(G(aa),G(o()),c(C),EA(()=>aa(o())||c(C)?"\xA0":"Navigation bar"))]),ue("click",F,function(){R(C,!c(C))}),lA(t,f),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-search-box.svelte-1x1x8q0 { - border: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-radius: 3px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - display: inline-block; - width: 400px; - max-width: 100%; - overflow: auto; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) { - display: flex; - align-items: stretch; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0), -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { - font-family: inherit; - font-size: inherit; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { - display: block; - text-align: center; - border: none; - padding: 0 5px; - margin: 0; - cursor: pointer; - color: var(--jse-panel-button-color, inherit); - background: var(--jse-panel-button-background, transparent); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0):hover { - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { - color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: 3px; - background: var(--jse-input-background, var(--jse-background-color, #fff)); - height: 28px; - padding: 0 5px; - margin: 0; - flex: 1; - width: 0; - min-width: 50px; - outline: none; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-replace-toggle:where(.svelte-1x1x8q0) { - padding: var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)); - min-width: 20px; - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - flex-direction: column; - padding: calc(0.5 * var(--jse-padding, 10px)); - gap: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - align-items: center; - position: relative; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-icon:where(.svelte-1x1x8q0) { - color: inherit; - cursor: inherit; - background: inherit; - width: 32px; - text-align: center; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) label.jse-search-input-label:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count:where(.svelte-1x1x8q0) { - color: inherit; - font-size: 80%; - visibility: hidden; - padding: 0 5px; - min-width: 36px; - text-align: center; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count.jse-visible:where(.svelte-1x1x8q0) { - visibility: visible; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - padding-left: 32px; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { - width: auto; -}`);var hNA=FA(''),uNA=FA('
      '),fNA=FA('');function eaA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=Cr("jsoneditor:SearchBox"),a=N(e,"json",9),r=N(e,"documentState",9),s=N(e,"parser",9),g=N(e,"showSearch",9),l=N(e,"showReplace",13),C=N(e,"readOnly",9),I=N(e,"columns",9),d=N(e,"onSearch",9),B=N(e,"onFocus",9),E=N(e,"onPatch",9),Q=N(e,"onClose",9),f=IA("",!0),b="",S=IA("",!0),M=IA(!1,!0),D=IA(void 0,!0),F=qE(function(MA){return KA.apply(this,arguments)},300),_=qE(function(MA){return Pe.apply(this,arguments)},300);function U(){l(!l()&&!C())}function J(MA){MA.stopPropagation();var be=g2(MA);be==="Enter"&&(MA.preventDefault(),c(f)!==b?F.flush():oA()),be==="Shift+Enter"&&(MA.preventDefault(),hA()),be==="Ctrl+Enter"&&(MA.preventDefault(),l()?DA():oA()),be==="Ctrl+H"&&(MA.preventDefault(),U()),be==="Escape"&&(MA.preventDefault(),uA())}function j(MA){g2(MA)==="Enter"&&(MA.preventDefault(),MA.stopPropagation(),DA())}function AA(){return O.apply(this,arguments)}function O(){return(O=Tt(function*(){Mo(),yield F.flush()})).apply(this,arguments)}function DA(){return P.apply(this,arguments)}function P(){return(P=Tt(function*(){var MA;if(!C()){var be=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;if(o("handleReplace",{replaceText:c(S),activeItem:be}),c(D)&&be&&a()!==void 0){R(D,ye(ye({},xiA(c(D))),{},{activeIndex:c(i)}));var{operations:LA,newSelection:pA}=USA(a(),r(),c(S),be,s());E()(LA,(Ft,ht)=>({state:ht,selection:pA})),Mo(),yield _.flush(),yield ee()}}})).apply(this,arguments)}function aA(){return iA.apply(this,arguments)}function iA(){return(iA=Tt(function*(){if(!C()){o("handleReplaceAll",{text:c(f),replaceText:c(S)});var{operations:MA,newSelection:be}=(function(LA,pA,Ft,ht,Ee){for(var Kt=RiA(Ft,LA,{maxResults:1/0}),Ye=[],ze=0;zez.field!==nA.field?z.field===Yc.key?1:-1:nA.path.length-z.path.length);var ei,Y=[];return Ye.forEach(z=>{var{field:nA,path:rA,items:NA}=z;if(nA===Yc.key){var Ie=Ki(rA),Qe=je(LA,Ie),xA=mi(rA),_A=dm(Ie,Object.keys(Qe),xA,FiA(xA,ht,NA));Y=Y.concat(_A),ei=ph(LA,_A)}else{if(nA!==Yc.value)throw new Error("Cannot replace: unknown type of search result field ".concat(nA));var Et=je(LA,rA);if(Et===void 0)throw new Error("Cannot replace: path not found ".concat(wt(rA)));var et=typeof Et=="string"?Et:String(Et),Te=P0(LA,pA,rA),Le=FiA(et,ht,NA),si=[{op:"replace",path:wt(rA),value:Te?Le:Rh(Le,Ee)}];Y=Y.concat(si),ei=ph(LA,si)}}),{operations:Y,newSelection:ei}})(a(),r(),c(f),c(S),s());E()(MA,(LA,pA)=>({state:pA,selection:be})),yield ee()}})).apply(this,arguments)}function BA(MA){MA.select()}function oA(){return sA.apply(this,arguments)}function sA(){return(sA=Tt(function*(){R(D,c(D)?xiA(c(D)):void 0),yield ee()})).apply(this,arguments)}function hA(){return YA.apply(this,arguments)}function YA(){return YA=Tt(function*(){R(D,c(D)?(function(MA){var be=MA.activeIndex>0?MA.activeIndex-1:MA.items.length-1,LA=MA.items[be],pA=MA.items.map((Ft,ht)=>ye(ye({},Ft),{},{active:ht===be}));return ye(ye({},MA),{},{items:pA,activeItem:LA,activeIndex:be})})(c(D)):void 0),yield ee()}),YA.apply(this,arguments)}function ee(){return UA.apply(this,arguments)}function UA(){return(UA=Tt(function*(){var MA;o("handleFocus",c(D));var be=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;be&&a()!==void 0&&(yield B()(be.path,be.resultIndex))})).apply(this,arguments)}function mA(){return mA=Tt(function*(MA){yield Je(MA,c(f),a())}),mA.apply(this,arguments)}function KA(){return KA=Tt(function*(MA){yield Je(g(),MA,a()),yield ee()}),KA.apply(this,arguments)}function Pe(){return Pe=Tt(function*(MA){yield Je(g(),c(f),MA)}),Pe.apply(this,arguments)}function Je(MA,be,LA){return HA.apply(this,arguments)}function HA(){return HA=Tt(function*(MA,be,LA){return MA?(o("applySearch",{showSearch:MA,text:be}),be===""?(o("clearing search result"),c(D)!==void 0&&R(D,void 0),Promise.resolve()):(b=be,R(M,!0),new Promise(pA=>{setTimeout(()=>{var Ft=RiA(be,LA,{maxResults:Z_,columns:I()});R(D,(function(ht,Ee){var Kt=Ee!=null&&Ee.activeItem?_iA(Ee.activeItem):void 0,Ye=ht.findIndex(Me=>Qi(Kt,_iA(Me))),ze=Ye!==-1?Ye:Ee?.activeIndex!==void 0&&Ee?.activeIndex0?0:-1,ut=ht.map((Me,ei)=>ye(ye({resultIndex:ei},Me),{},{active:ei===ze}));return{items:ut,activeItem:ut[ze],activeIndex:ze}})(Ft,c(D))),R(M,!1),pA()})}))):(c(D)&&R(D,void 0),Promise.resolve())}),HA.apply(this,arguments)}function uA(){o("handleClose"),F.cancel(),_.cancel(),Je(!1,c(f),a()),Q()()}RA(()=>c(D),()=>{var MA;R(A,((MA=c(D))===null||MA===void 0||(MA=MA.items)===null||MA===void 0?void 0:MA.length)||0)}),RA(()=>c(D),()=>{var MA;R(i,((MA=c(D))===null||MA===void 0?void 0:MA.activeIndex)||0)}),RA(()=>(c(A),Z_),()=>{R(n,c(A)>=Z_?"".concat(999,"+"):String(c(A)))}),RA(()=>(G(d()),c(D)),()=>{d()(c(D))}),RA(()=>G(g()),()=>{(function(MA){mA.apply(this,arguments)})(g())}),RA(()=>c(f),()=>{F(c(f))}),RA(()=>G(a()),()=>{_(a())}),kn(),Ai(!0);var ZA=bi(),QA=At(ZA),WA=MA=>{var be=fNA(),LA=CA(be),pA=CA(LA),Ft=xA=>{var _A=hNA(),Et=CA(_A),et=tt(()=>l()?M0:WE);Vi(Et,{get data(){return c(et)}}),ue("click",_A,U),lA(xA,_A)};TA(pA,xA=>{C()||xA(Ft)});var ht=CA(bA(pA,2)),Ee=CA(ht),Kt=CA(Ee),Ye=xA=>{Vi(xA,{get data(){return iV},spin:!0})},ze=xA=>{Vi(xA,{get data(){return g3}})};TA(Kt,xA=>{c(M)?xA(Ye):xA(ze,!1)});var ut=bA(Ee,2),Me=CA(ut);Nr(()=>tv(Me,()=>c(f),xA=>R(f,xA))),vs(Me,xA=>BA?.(xA)),Nr(()=>ue("paste",Me,AA));var ei,Y=bA(ut,2),z=CA(Y),nA=bA(Y,2);Vi(CA(nA),{get data(){return lV}});var rA=bA(nA,2);Vi(CA(rA),{get data(){return tV}});var NA=bA(rA,2);Vi(CA(NA),{get data(){return c3}});var Ie=bA(ht,2),Qe=xA=>{var _A=uNA(),Et=CA(_A),et=bA(Et,2),Te=bA(et,2);tv(Et,()=>c(S),Le=>R(S,Le)),ue("keydown",Et,j),ue("click",et,DA),ue("click",Te,aA),lA(xA,_A)};TA(Ie,xA=>{l()&&!C()&&xA(Qe)}),ve(()=>{var xA;ei=$t(Y,1,"jse-search-count svelte-1x1x8q0",null,ei,{"jse-visible":c(f)!==""}),Rt(z,"".concat(c(i)!==-1&&c(i){g()&&MA(WA)}),lA(t,ZA),xt()}var tm=Symbol("path");function mNA(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1/0,i={};Array.isArray(t)&&(function(o,a,r){if(o.length1?(o.length-1)/(a-1):o.length,g=0;g{pn(o)?taA(o,i,e):i[tm]=!0});var n=[];return tm in i&&n.push([]),iaA(i,[],n,e),n}function taA(t,e,A){for(var i in t){var n=t[i],o=e[i]||(e[i]={});pn(n)&&A?taA(n,o,A):o[tm]===void 0&&(o[tm]=!0)}}function iaA(t,e,A,i){for(var n in t){var o=e.concat(n),a=t[n];a&&a[tm]===!0&&A.push(o),ia(a)&&i&&iaA(a,o,A,i)}}function pNA(t,e,A,i,n,o){for(var a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:80,r=qo(A)?A.length:0,s=(function(b,S){var M=Object.values(b);if(qi(M))return S;var D=(F,_)=>F+_;return M.reduce(D)/M.length})(i,n),g=t-a,l=e+2*a,C=b=>i[b]||n,I=0,d=o;d0&&(d-=C(--I));for(var B=I,E=0;EW0(i,o))}}function Kd(t,e){var{rowIndex:A,columnIndex:i}=t;return[String(A),...e[i]]}function wNA(t,e){var[A,i]=vS(t,a=>XL(a.path[0])),n=DS(A,DNA),o=yS(n,a=>{var r={row:[],columns:{}};return a.forEach(s=>{var g=(function(l,C){var I=Ll(l.path,C);return I.columnIndex!==-1?I.columnIndex:-1})(s,e);g!==-1?(r.columns[g]===void 0&&(r.columns[g]=[]),r.columns[g].push(s)):r.row.push(s)}),r});return{root:i,rows:o}}function VQ(t,e){if(e&&e.length!==0)return e.length===1?e[0]:{path:t,message:"Multiple validation issues: "+e.map(A=>vg(A.path)+" "+A.message).join(", "),severity:Jc.warning}}function DNA(t){return parseInt(t.path[0],10)}function yNA(t,e,A){var i=e.some(n=>(function(o,a,r){if(!o)return!1;if(a.op==="replace"){var s=Qs(a.path),{rowIndex:g,columnIndex:l}=Ll(s,r),C=r.findIndex(I=>Qi(I,o.path));if(g!==-1&&l!==-1&&l!==C)return!1}return!0})(t,n,A));return i?void 0:t}var ys=Cr("jsoneditor:actions");function naA(t){return JL.apply(this,arguments)}function JL(){return JL=Tt(function*(t){var{json:e,selection:A,indentation:i,readOnly:n,parser:o,onPatch:a}=t;if(!n&&e!==void 0&&A&&ih(A)){var r=voA(e,A,i,o);if(r!==void 0){ys("cut",{selection:A,clipboard:r,indentation:i}),yield uG(r);var{operations:s,newSelection:g}=RoA(e,A);a(s,(l,C)=>({state:C,selection:g}))}}}),JL.apply(this,arguments)}function oaA(t){return YL.apply(this,arguments)}function YL(){return YL=Tt(function*(t){var{json:e,selection:A,indentation:i,parser:n}=t,o=voA(e,A,i,n);o!==void 0&&(ys("copy",{clipboard:o,indentation:i}),yield uG(o))}),YL.apply(this,arguments)}function aaA(t){var{clipboardText:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onChangeText:r,onPasteMultilineText:s,openRepairModal:g}=t;if(!n)try{l(e)}catch{g(e,I=>{ys("repaired pasted text: ",I),l(I)})}function l(C){if(A!==void 0){var I=i||Ui([]),d=xoA(A,I,C,o),B=(function(E,Q,f){var b=arguments.length>3&&arguments[3]!==void 0?arguments[3]:xSA;if(E.length>b)return!1;var S=/\n/.test(E);if(!S)return!1;var M=Q.some(F=>F.op==="replace"&&Array.isArray(F.value)),D=Q.filter(F=>F.op==="add").length>1;if(!M&&!D)return!1;try{return lm(E,f.parse),!1}catch{return!0}})(e,d,o);ys("paste",{pastedText:C,operations:d,ensureSelection:I,pasteMultilineText:B}),a(d,(E,Q)=>{var f=Q;return d.filter(b=>($k(b)||gw(b))&&aa(b.value)).forEach(b=>{var S=cg(A,b.path);f=tB(E,f,S)}),{state:f}}),B&&s(C)}else ys("paste text",{pastedText:C}),r(e,(E,Q)=>{if(E)return{state:tB(E,Q,[])}})}}function raA(t){var{json:e,text:A,selection:i,keepSelection:n,readOnly:o,onChange:a,onPatch:r}=t;if(!o&&i){var s=e!==void 0&&(cr(i)||In(i))?Ds(i.path,i.path):i;if(qi(ct(i)))ys("remove root",{selection:i}),a&&a({text:"",json:void 0},e!==void 0?{text:void 0,json:e}:{text:A||"",json:e},{contentErrors:void 0,patchResult:void 0});else if(e!==void 0){var{operations:g,newSelection:l}=RoA(e,s);ys("remove",{operations:g,selection:i,newSelection:l}),r(g,(C,I)=>({state:I,selection:n?i:l}))}}}function hv(t){var{insertType:e,selectInside:A,initialValue:i,json:n,selection:o,readOnly:a,parser:r,onPatch:s,onReplaceJson:g}=t;if(!a){var l=(function(E,Q,f){if(f==="object")return{};if(f==="array")return[];if(f==="structure"&&E!==void 0){var b=Q?DoA(Q):[],S=je(E,b);if(Array.isArray(S)&&!qi(S)){var M=Dl(S);return aa(M)?fS(M,D=>Array.isArray(D)?[]:pn(D)?void 0:""):""}}return""})(n,o,e);if(n!==void 0){var C=r.stringify(l),I=xoA(n,o,C,r);ys("onInsert",{insertType:e,operations:I,newValue:l,data:C});var d=mi(I.filter(E=>E.op==="add"||E.op==="replace"));s(I,(E,Q,f)=>{if(d){var b=cg(E,d.path);if(aa(l))return{state:Kc(E,Q,b,IG),selection:A?c2(b):f};if(l===""){var S=qi(b)?void 0:je(E,Ki(b));return{state:Kc(E,Q,b,Vy),selection:pn(S)?dG(b,i):sv(b,i)}}}}),ys("after patch")}else{ys("onInsert",{insertType:e,newValue:l});var B=[];g(l,(E,Q)=>({state:tB(E,Q,B),selection:aa(l)?c2(B):sv(B)}))}}}function saA(t){return TL.apply(this,arguments)}function TL(){return TL=Tt(function*(t){var{char:e,selectInside:A,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s,onSelect:g}=t;o||(cr(n)?g(ye(ye({},n),{},{edit:!0,initialValue:e})):e==="{"?hv({insertType:"object",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):e==="["?hv({insertType:"array",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):In(n)&&i!==void 0?aa(je(i,n.path))||g(ye(ye({},n),{},{edit:!0,initialValue:e})):(ys("onInsertValueWithCharacter",{char:e}),yield(function(l){return HL.apply(this,arguments)})({char:e,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s})))}),TL.apply(this,arguments)}function HL(){return HL=Tt(function*(t){var{char:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r}=t;n||hv({insertType:"value",selectInside:!1,initialValue:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r})}),HL.apply(this,arguments)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-json-preview.svelte-25xmyd { - flex: 1; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); - overflow: auto; - white-space: pre-wrap; - padding: 2px; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -}`);var vNA=FA('
      ');function gaA(t,e){St(e,!1);var A=IA(),i=IA(),n=N(e,"text",8),o=N(e,"json",8),a=N(e,"indentation",8),r=N(e,"parser",8);RA(()=>(G(o()),G(n())),()=>{R(A,o()!==void 0?{json:o()}:{text:n()||""})}),RA(()=>(c(A),G(a()),G(r()),nv),()=>{R(i,XC(DL(c(A),a(),r()),nv))}),kn(),Ai();var s=vNA(),g=CA(s);ve(()=>Rt(g,c(i))),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-context-menu-button.svelte-16jz6ui { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: inherit; -} -button.jse-context-menu-button.svelte-16jz6ui:hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -button.jse-context-menu-button.svelte-16jz6ui:focus { - background: var(--jse-context-menu-background-highlight, #7a7a7a); - z-index: 1; -} -button.jse-context-menu-button.svelte-16jz6ui:disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -button.jse-context-menu-button.left.svelte-16jz6ui { - text-align: left; -} -button.jse-context-menu-button.svelte-16jz6ui svg { - width: 16px; -}`);var bNA=FA('');function lL(t,e){St(e,!1);var A=N(e,"item",8),i=N(e,"className",8,void 0),n=N(e,"onRequestClose",8);Ai();var o=bNA(),a=CA(o),r=l=>{Vi(l,{get data(){return G(A()),EA(()=>A().icon)}})};TA(a,l=>{G(A()),EA(()=>A().icon)&&l(r)});var s=bA(a,2),g=l=>{var C=ur();ve(()=>Rt(C,(G(A()),EA(()=>A().text)))),lA(l,C)};TA(s,l=>{G(A()),EA(()=>A().text)&&l(g)}),ve(l=>{$t(o,1,l,"svelte-16jz6ui"),Mn(o,"title",(G(A()),EA(()=>A().title))),o.disabled=(G(A()),EA(()=>A().disabled||!1))},[()=>n1((G(Pc),G(i()),G(A()),EA(()=>Pc("jse-context-menu-button",i(),A().className))))]),ue("click",o,l=>{n()(),A().onClick(l)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-dropdown-button.svelte-bov1j6 { - flex: 1; - line-height: normal; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - position: relative; - padding: 0; - display: flex; -} -.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) { - margin: 0; - padding: 0; -} -.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) li:where(.svelte-bov1j6) { - margin: 0; - padding: 0; - list-style-type: none; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 2em; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - border-radius: 0; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown.jse-visible:where(.svelte-bov1j6) { - background: var(--jse-context-menu-background, #656565); -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):focus { - z-index: 1; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) { - display: none; - position: absolute; - top: 100%; - left: 0; - z-index: 1; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items.jse-visible:where(.svelte-bov1j6) { - display: block; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 100%; - text-align: left; - padding: var(--jse-padding, 10px); - margin: 0; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -}`);var MNA=FA('
    • '),kNA=FA('
        ');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-context-menu-button.svelte-1y5l9l1 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: inherit; -} -button.jse-context-menu-button.svelte-1y5l9l1:hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -button.jse-context-menu-button.svelte-1y5l9l1:focus { - background: var(--jse-context-menu-background-highlight, #7a7a7a); - z-index: 1; -} -button.jse-context-menu-button.svelte-1y5l9l1:disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -button.jse-context-menu-button.left.svelte-1y5l9l1 { - text-align: left; -} -button.jse-context-menu-button.svelte-1y5l9l1 svg { - width: 16px; -}`);var SNA=FA('');function cL(t,e){St(e,!1);var A=IA(),i=N(e,"item",8),n=N(e,"className",8,void 0),o=N(e,"onRequestClose",8);RA(()=>(G(i()),G(o())),()=>{R(A,i().items.map(a=>ye(ye({},a),{},{onClick:r=>{o()(),a.onClick(r)}})))}),kn(),Ai(),(function(a,r){St(r,!1);var s=IA(void 0,!0),g=N(r,"items",25,()=>[]),l=N(r,"title",9,void 0),C=N(r,"width",9,"120px"),I=IA(!1,!0);function d(){R(I,!1)}function B(D){g2(D)==="Escape"&&(D.preventDefault(),R(I,!1))}is(()=>{document.addEventListener("click",d),document.addEventListener("keydown",B)}),Hl(()=>{document.removeEventListener("click",d),document.removeEventListener("keydown",B)}),RA(()=>G(g()),()=>{R(s,g().every(D=>D.disabled===!0))}),kn(),Ai(!0);var E=kNA(),Q=CA(E);Ea(Q,r,"defaultItem",{},null);var f,b=bA(Q,2);Vi(CA(b),{get data(){return M0}});var S,M=bA(b,2);Qa(CA(M),5,g,Na,(D,F)=>{var _=MNA(),U=CA(_),J=CA(U),j=O=>{Vi(O,{get data(){return c(F),EA(()=>c(F).icon)}})};TA(J,O=>{c(F),EA(()=>c(F).icon)&&O(j)});var AA=bA(J);ve(()=>{var O;Mn(U,"title",(c(F),EA(()=>c(F).title))),U.disabled=(c(F),EA(()=>c(F).disabled)),$t(U,1,n1((c(F),EA(()=>c(F).className))),"svelte-bov1j6"),Rt(AA," ".concat((c(F),(O=EA(()=>c(F).text))!==null&&O!==void 0?O:"")))}),ue("click",U,O=>c(F).onClick(O)),lA(D,_)}),ve(()=>{var D;Mn(E,"title",l()),f=$t(b,1,"jse-open-dropdown svelte-bov1j6",null,f,{"jse-visible":c(I)}),b.disabled=c(s),S=$t(M,1,"jse-dropdown-items svelte-bov1j6",null,S,{"jse-visible":c(I)}),Yl(M,"width: ".concat((D=C())!==null&&D!==void 0?D:"",";"))}),ue("click",b,function(){var D=c(I);setTimeout(()=>R(I,!D))}),ue("click",E,d),lA(a,E),xt()})(t,{get width(){return G(i()),EA(()=>i().width)},get items(){return c(A)},$$slots:{defaultItem:(a,r)=>{var s=SNA(),g=CA(s),l=I=>{Vi(I,{get data(){return G(i()),EA(()=>i().main.icon)}})};TA(g,I=>{G(i()),EA(()=>i().main.icon)&&I(l)});var C=bA(g);ve(I=>{var d;$t(s,1,I,"svelte-1y5l9l1"),Mn(s,"title",(G(i()),EA(()=>i().main.title))),s.disabled=(G(i()),EA(()=>i().main.disabled||!1)),Rt(C," ".concat((G(i()),(d=EA(()=>i().main.text))!==null&&d!==void 0?d:"")))},[()=>n1((G(Pc),G(n()),G(i()),EA(()=>Pc("jse-context-menu-button",n(),i().main.className))))]),ue("click",s,I=>{o()(),i().main.onClick(I)}),lA(a,s)}}}),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-contextmenu.svelte-1shjn02 { - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) { - display: flex; - flex-direction: row; - align-items: flex-start; - justify-content: stretch; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-label:where(.svelte-1shjn02) { - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: var(--jse-context-menu-color-disabled, #9d9d9d); - line-height: normal; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) { - flex: 1; - background: var(--jse-context-menu-tip-background, rgba(255, 255, 255, 0.2)); - color: var(--context-menu-tip-color, inherit); - margin: calc(0.5 * var(--jse-padding, 10px)); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - font-size: 80%; - line-height: 1.3em; - display: flex; - flex-direction: row; - align-items: flex-start; - gap: var(--jse-padding, 10px); - border-radius: 3px; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) div.jse-tip-icon:where(.svelte-1shjn02) { - padding-top: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02) { - flex: 1; - display: flex; - flex-direction: column; - align-items: stretch; -} -.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02):not(:last-child) { - border-right: 1px solid var(--jse-context-menu-separator-color, #7a7a7a); -} -.jse-contextmenu.svelte-1shjn02 .jse-separator:where(.svelte-1shjn02) { - width: 100%; - height: 1px; - background: var(--jse-context-menu-separator-color, #7a7a7a); -}`);var xNA=FA('
        '),RNA=FA('
        '),NNA=FA('
        '),FNA=FA('
        '),_NA=FA('
        '),LNA=FA('
        '),GNA=FA('
        '),KNA=FA('');function laA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"onRequestClose",9),n=N(e,"tip",9),o=IA(void 0,!0);is(()=>{var I=Array.from(c(o).querySelectorAll("button")).find(d=>!d.disabled);I&&I.focus()});var a={ArrowUp:"Up",ArrowDown:"Down",ArrowLeft:"Left",ArrowRight:"Right"};function r(I){return console.error("Unknown type of context menu item",I),"???"}Ai(!0);var s=KNA(),g=CA(s);Qa(g,1,A,Na,(I,d)=>{var B=bi(),E=At(B),Q=b=>{lL(b,{get item(){return c(d)},get onRequestClose(){return i()}})},f=b=>{var S=bi(),M=At(S),D=_=>{cL(_,{get item(){return c(d)},get onRequestClose(){return i()}})},F=_=>{var U=bi(),J=At(U),j=O=>{var DA=_NA();Qa(DA,5,()=>(c(d),EA(()=>c(d).items)),Na,(P,aA)=>{var iA=bi(),BA=At(iA),oA=hA=>{lL(hA,{get item(){return c(aA)},get onRequestClose(){return i()}})},sA=hA=>{var YA=bi(),ee=At(YA),UA=KA=>{cL(KA,{get item(){return c(aA)},get onRequestClose(){return i()}})},mA=KA=>{var Pe=bi(),Je=At(Pe),HA=ZA=>{var QA=NNA();Qa(QA,5,()=>(c(aA),EA(()=>c(aA).items)),Na,(WA,MA)=>{var be=bi(),LA=At(be),pA=ht=>{lL(ht,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},Ft=ht=>{var Ee=bi(),Kt=At(Ee),Ye=ut=>{cL(ut,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},ze=ut=>{var Me=bi(),ei=At(Me),Y=nA=>{lA(nA,xNA())},z=nA=>{var rA=bi(),NA=At(rA),Ie=xA=>{var _A=RNA(),Et=CA(_A);ve(()=>Rt(Et,(c(MA),EA(()=>c(MA).text)))),lA(xA,_A)},Qe=xA=>{var _A=ur();ve(Et=>Rt(_A,Et),[()=>(c(MA),EA(()=>r(c(MA))))]),lA(xA,_A)};TA(NA,xA=>{G(EiA),c(MA),EA(()=>EiA(c(MA)))?xA(Ie):xA(Qe,!1)},!0),lA(nA,rA)};TA(ei,nA=>{G(OI),c(MA),EA(()=>OI(c(MA)))?nA(Y):nA(z,!1)},!0),lA(ut,Me)};TA(Kt,ut=>{G(jQ),c(MA),EA(()=>jQ(c(MA)))?ut(Ye):ut(ze,!1)},!0),lA(ht,Ee)};TA(LA,ht=>{G(WC),c(MA),EA(()=>WC(c(MA)))?ht(pA):ht(Ft,!1)}),lA(WA,be)}),lA(ZA,QA)},uA=ZA=>{var QA=bi(),WA=At(QA),MA=LA=>{lA(LA,FNA())},be=LA=>{var pA=ur();ve(Ft=>Rt(pA,Ft),[()=>(c(aA),EA(()=>r(c(aA))))]),lA(LA,pA)};TA(WA,LA=>{G(OI),c(aA),EA(()=>OI(c(aA)))?LA(MA):LA(be,!1)},!0),lA(ZA,QA)};TA(Je,ZA=>{G(hiA),c(aA),EA(()=>hiA(c(aA)))?ZA(HA):ZA(uA,!1)},!0),lA(KA,Pe)};TA(ee,KA=>{G(jQ),c(aA),EA(()=>jQ(c(aA)))?KA(UA):KA(mA,!1)},!0),lA(hA,YA)};TA(BA,hA=>{G(WC),c(aA),EA(()=>WC(c(aA)))?hA(oA):hA(sA,!1)}),lA(P,iA)}),lA(O,DA)},AA=O=>{var DA=bi(),P=At(DA),aA=BA=>{lA(BA,LNA())},iA=BA=>{var oA=ur();ve(sA=>Rt(oA,sA),[()=>(c(d),EA(()=>r(c(d))))]),lA(BA,oA)};TA(P,BA=>{G(OI),c(d),EA(()=>OI(c(d)))?BA(aA):BA(iA,!1)},!0),lA(O,DA)};TA(J,O=>{G(QiA),c(d),EA(()=>QiA(c(d)))?O(j):O(AA,!1)},!0),lA(_,U)};TA(M,_=>{G(jQ),c(d),EA(()=>jQ(c(d)))?_(D):_(F,!1)},!0),lA(b,S)};TA(E,b=>{G(WC),c(d),EA(()=>WC(c(d)))?b(Q):b(f,!1)}),lA(I,B)});var l=bA(g,2),C=I=>{var d=GNA(),B=CA(d),E=CA(B);Vi(CA(E),{get data(){return Wq}});var Q=CA(bA(E,2));ve(()=>Rt(Q,n())),lA(I,d)};TA(l,I=>{n()&&I(C)}),Jo(s,I=>R(o,I),()=>c(o)),ue("keydown",s,function(I){var d=g2(I),B=a[d];if(B&&I.target){I.preventDefault();var E=lSA({allElements:Array.from(c(o).querySelectorAll("button:not([disabled])")),currentElement:I.target,direction:B,hasPrio:Q=>Q.getAttribute("data-type")!=="jse-open-dropdown"});E&&E.focus()}}),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-value.jse-string.svelte-1htmvf1 { - color: var(--jse-value-color-string, #008000); -} -.jse-value.jse-object.svelte-1htmvf1, .jse-value.jse-array.svelte-1htmvf1 { - min-width: 16px; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-value.jse-number.svelte-1htmvf1 { - color: var(--jse-value-color-number, #ee422e); -} -.jse-value.jse-boolean.svelte-1htmvf1 { - color: var(--jse-value-color-boolean, #ff8c00); -} -.jse-value.jse-null.svelte-1htmvf1 { - color: var(--jse-value-color-null, #004ed0); -} -.jse-value.jse-invalid.svelte-1htmvf1 { - color: var(--jse-text-color, #4d4d4d); -} -.jse-value.jse-url.svelte-1htmvf1 { - color: var(--jse-value-color-url, #008000); - text-decoration: underline; -} - -.jse-enum-value.svelte-1htmvf1 { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - border: none; - padding: 0; - font-family: inherit; - font-size: inherit; - cursor: pointer; - outline: none; -} -.jse-enum-value.jse-selected.svelte-1htmvf1 { - background: var(--jse-selection-background-color, #d3d3d3); - color: inherit; -} -.jse-enum-value.jse-value.svelte-1htmvf1:focus { - color: var(--jse-text-color, #4d4d4d); -}`);var s5e=FA(""),g5e=FA("");var Uy,Jy;function Yy(t,e){return Uy||(Jy=new WeakMap,Uy=new ResizeObserver(A=>{for(var i of A){var n=Jy.get(i.target);n&&n(i.target)}})),Jy.set(t,e),Uy.observe(t),{destroy:()=>{Jy.delete(t),Uy.unobserve(t)}}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tree-mode.svelte-10mlrw4 { - flex: 1; - display: flex; - flex-direction: column; - position: relative; - background: var(--jse-background-color, #fff); - min-width: 0; - min-height: 0; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-text-color, #4d4d4d); - line-height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-tree-mode.svelte-10mlrw4 .jse-hidden-input-label:where(.svelte-10mlrw4) .jse-hidden-input:where(.svelte-10mlrw4) { - position: fixed; - top: -10px; - left: -10px; - width: 1px; - height: 1px; - padding: 0; - border: 0; - outline: none; -} -.jse-tree-mode.no-main-menu.svelte-10mlrw4 { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-search-box-container:where(.svelte-10mlrw4) { - position: relative; - height: 0; - top: var(--jse-padding, 10px); - margin-right: calc(var(--jse-padding, 10px) + 20px); - margin-left: var(--jse-padding, 10px); - text-align: right; - z-index: 3; -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) { - flex: 1; - overflow: auto; - position: relative; - padding: 2px; - display: flex; - flex-direction: column; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading-space:where(.svelte-10mlrw4) { - flex: 1; -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading:where(.svelte-10mlrw4) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-search-box-background:where(.svelte-10mlrw4) { - border: 50px solid var(--jse-modal-background, #f5f5f5); - margin: -2px; - margin-bottom: 2px; - display: inline-block; -}`);var UNA=FA(" ",1),JNA=FA('
        '),YNA=FA('
        ',1),TNA=FA(' ',1),HNA=FA('
        loading...
        '),zNA=FA('
        ',1);function zL(t,e){St(e,!1);var A=IA(void 0,!0),i=Cr("jsoneditor:TreeMode"),n=typeof window>"u";i("isSSR:",n);var o=II(),a=II(),{openAbsolutePopup:r,closeAbsolutePopup:s}=r1("absolute-popup"),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=!1,d=joA(),B=N(e,"readOnly",9),E=N(e,"externalContent",9),Q=N(e,"externalSelection",9),f=N(e,"history",9),b=N(e,"truncateTextSize",9),S=N(e,"mainMenuBar",9),M=N(e,"navigationBar",9),D=N(e,"escapeControlCharacters",9),F=N(e,"escapeUnicodeCharacters",9),_=N(e,"parser",9),U=N(e,"parseMemoizeOne",9),J=N(e,"validator",9),j=N(e,"validationParser",9),AA=N(e,"pathParser",9),O=N(e,"indentation",9),DA=N(e,"onError",9),P=N(e,"onChange",9),aA=N(e,"onChangeMode",9),iA=N(e,"onSelect",9),BA=N(e,"onUndo",9),oA=N(e,"onRedo",9),sA=N(e,"onRenderValue",9),hA=N(e,"onRenderMenu",9),YA=N(e,"onRenderContextMenu",9),ee=N(e,"onClassName",9),UA=N(e,"onFocus",9),mA=N(e,"onBlur",9),KA=N(e,"onSortModal",9),Pe=N(e,"onTransformModal",9),Je=N(e,"onJSONEditorModal",9),HA=!1,uA=IA(!1,!0),ZA=IA(void 0,!0);QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(C)),hasFocus:()=>HA&&document.hasFocus()||tG(c(C)),onFocus:()=>{I=!0,UA()&&UA()()},onBlur:()=>{I=!1,mA()&&mA()()}});var QA=IA(void 0,!0),WA=IA(void 0,!0),MA=void 0,be=!1,LA=IA(ML({json:c(QA)}),!0),pA=IA(Zf(Q())?Q():void 0,!0);function Ft(q){R(pA,q)}is(()=>{if(c(pA)){var q=ct(c(pA));R(LA,Kc(c(QA),c(LA),q,Vy)),setTimeout(()=>So(q))}});var ht,Ee=IA(void 0,!0),Kt=IA(void 0,!0),Ye=IA(void 0,!0),ze=IA(void 0,!0),ut=IA(!1,!0),Me=IA(!1,!0);function ei(q){R(ze,(ht=q)?FoA(c(QA),ht.items):void 0)}function Y(q,fA){return z.apply(this,arguments)}function z(){return(z=Tt(function*(q,fA){R(LA,Kc(c(QA),c(LA),q,Vy));var PA=Bo(fA);yield xi(q,{element:PA})})).apply(this,arguments)}function nA(){R(ut,!1),R(Me,!1),Mt()}function rA(q){i("select validation error",q),R(pA,Ui(q.path)),xi(q.path)}function NA(q){var fA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:kL;i("expand"),R(LA,Kc(c(QA),c(LA),q,fA))}function Ie(q,fA){R(LA,piA(c(QA),c(LA),q,fA)),c(pA)&&(function(PA,Fe){return W0(ct(PA),Fe)&&(ct(PA).length>Fe.length||tr(PA))})(c(pA),q)&&R(pA,void 0)}var Qe=IA(!1,!0),xA=IA([],!0),_A=IA(void 0,!0),Et=ZE(qoA);function et(q,fA,PA,Fe){oh(()=>{var pe;try{pe=Et(q,fA,PA,Fe)}catch(De){pe=[{path:[],message:"Failed to validate: "+De.message,severity:Jc.warning}]}Qi(pe,c(xA))||(i("validationErrors changed:",pe),R(xA,pe),R(_A,(function(De,ot){var jt;return ot.forEach(ki=>{jt=qiA(De,jt,ki.path,(xn,Pi)=>ye(ye({},Pi),{},{validationError:ki}))}),ot.forEach(ki=>{for(var xn=ki.path;xn.length>0;)xn=Ki(xn),jt=qiA(De,jt,xn,(Pi,Eo)=>Eo.validationError?Eo:ye(ye({},Eo),{},{validationError:{isChildError:!0,path:xn,message:"Contains invalid data",severity:Jc.warning}}))}),jt})(q,c(xA))))},pe=>i("validationErrors updated in ".concat(pe," ms")))}function Te(){return i("validate"),MA?{parseError:MA,isRepairable:!1}:(et(c(QA),J(),_(),j()),qi(c(xA))?void 0:{validationErrors:c(xA)})}function Le(){return c(QA)}function si(){return c(LA)}function gn(){return c(pA)}function dn(q){i("applyExternalContent",{updatedContent:q}),jf(q)?(function(fA){if(fA!==void 0){var PA=!Qi(c(QA),fA);if(i("update external json",{isChanged:PA,currentlyText:c(QA)===void 0}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};R(QA,fA),R(LA,Xg(fA,c(LA))),_e(c(QA)),R(WA,void 0),R(Qe,!1),MA=void 0,Wi(c(QA)),ui(Fe)}}})(q.json):Pf(q)&&(function(fA){if(!(fA===void 0||jf(E()))){var PA=fA!==c(WA);if(i("update external text",{isChanged:PA}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};try{R(QA,U()(fA)),R(LA,Xg(c(QA),c(LA))),_e(c(QA)),R(WA,fA),R(Qe,!1),MA=void 0}catch(pe){try{R(QA,U()(ml(fA))),R(LA,Xg(c(QA),c(LA))),_e(c(QA)),R(WA,fA),R(Qe,!0),MA=void 0,Wi(c(QA))}catch{R(QA,void 0),R(LA,void 0),R(WA,E().text),R(Qe,!1),MA=c(WA)!==void 0&&c(WA)!==""?uh(c(WA),pe.message||String(pe)):void 0}}Wi(c(QA)),ui(Fe)}}})(q.text)}function _e(q){be||(be=!0,R(LA,tB(q,c(LA),[])))}function Wi(q){c(pA)&&(br(q,jd(c(pA)))&&br(q,ct(c(pA)))||(i("clearing selection: path does not exist anymore",c(pA)),R(pA,qQ(q,c(LA)))))}function ui(q){if(q.json!==void 0||q.text!==void 0){var fA=c(QA)!==void 0&&q.json!==void 0;f().add({type:"tree",undo:{patch:fA?[{op:"replace",path:"",value:q.json}]:void 0,json:q.json,text:q.text,documentState:q.documentState,textIsRepaired:q.textIsRepaired,selection:z0(q.selection),sortedColumn:void 0},redo:{patch:fA?[{op:"replace",path:"",value:c(QA)}]:void 0,json:c(QA),text:c(WA),documentState:c(LA),textIsRepaired:c(Qe),selection:z0(c(pA)),sortedColumn:void 0}})}}function Mi(q,fA){var PA;if(i("patch",q,fA),c(QA)===void 0)throw new Error("Cannot apply patch: no JSON");var Fe=c(QA),pe={json:void 0,text:c(WA),documentState:c(LA),selection:z0(c(pA)),textIsRepaired:c(Qe),sortedColumn:void 0},De=NoA(c(QA),q),ot=moA(c(QA),c(LA),q),jt=(PA=ph(c(QA),q))!==null&&PA!==void 0?PA:c(pA),ki=typeof fA=="function"?fA(ot.json,ot.documentState,jt):void 0;return R(QA,ki?.json!==void 0?ki.json:ot.json),R(LA,ki?.state!==void 0?ki.state:ot.documentState),R(pA,ki?.selection!==void 0?ki.selection:jt),R(WA,void 0),R(Qe,!1),R(Kt,void 0),R(Ye,void 0),MA=void 0,Wi(c(QA)),f().add({type:"tree",undo:ye({patch:De},pe),redo:{patch:q,json:void 0,text:c(WA),documentState:c(LA),selection:z0(c(pA)),sortedColumn:void 0,textIsRepaired:c(Qe)}}),{json:c(QA),previousJson:Fe,undo:De,redo:q}}function zi(){!B()&&c(pA)&&R(pA,dG(ct(c(pA))))}function vt(){if(!B()&&c(pA)){var q=ct(c(pA)),fA=je(c(QA),q);aa(fA)?(function(PA,Fe){i("openJSONEditorModal",{path:PA,value:Fe}),HA=!0,Je()({content:{json:Fe},path:PA,onPatch:c(y).onPatch,onClose:()=>{HA=!1,setTimeout(Mt)}})})(q,fA):R(pA,sv(q))}}function Zi(){if(!B()&&In(c(pA))){var q=ct(c(pA)),fA=wt(q),PA=je(c(QA),q),Fe=!P0(c(QA),c(LA),q),pe=Fe?String(PA):Rh(String(PA),_());i("handleToggleEnforceString",{enforceString:Fe,value:PA,updatedValue:pe}),VA([{op:"replace",path:fA,value:pe}],(De,ot)=>({state:yv(c(QA),ot,q,{type:"value",enforceString:Fe})}))}}function _t(){return c(Qe)&&c(QA)!==void 0&&me(c(QA)),c(QA)!==void 0?{json:c(QA)}:{text:c(WA)||""}}function L(){return Ct.apply(this,arguments)}function Ct(){return Ct=Tt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];yield naA({json:c(QA),selection:c(pA),indentation:q?O():void 0,readOnly:B(),parser:_(),onPatch:VA})}),Ct.apply(this,arguments)}function ci(){return Bn.apply(this,arguments)}function Bn(){return Bn=Tt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(QA)!==void 0&&(yield oaA({json:c(QA),selection:c(pA),indentation:q?O():void 0,parser:_()}))}),Bn.apply(this,arguments)}function En(q){var fA;q.preventDefault(),Co((fA=q.clipboardData)===null||fA===void 0?void 0:fA.getData("text/plain"))}function qn(){return Yo.apply(this,arguments)}function Yo(){return(Yo=Tt(function*(){try{Co(yield navigator.clipboard.readText())}catch(q){console.error(q),R(uA,!0)}})).apply(this,arguments)}function Co(q){q!==void 0&&aaA({clipboardText:q,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onChangeText:dA,onPasteMultilineText:Kn,openRepairModal:ko})}function ko(q,fA){R(ZA,{text:q,onParse:PA=>lm(PA,Fe=>gm(Fe,_())),onRepair:roA,onApply:fA,onClose:Mt})}function Zo(){raA({json:c(QA),text:c(WA),selection:c(pA),keepSelection:!1,readOnly:B(),onChange:P(),onPatch:VA})}function wo(){!B()&&c(QA)!==void 0&&c(pA)&&ih&&!qi(ct(c(pA)))&&(i("duplicate",{selection:c(pA)}),VA(koA(c(QA),o1(c(QA),c(pA)))))}function ha(){B()||!c(pA)||!lo(c(pA))&&!In(c(pA))||qi(ct(c(pA)))||(i("extract",{selection:c(pA)}),VA(SoA(c(QA),c(pA)),(q,fA)=>{if(aa(q))return{state:tL(q,fA,[])}}))}function Xo(q){hv({insertType:q,selectInside:!0,initialValue:void 0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me})}function ra(q){cr(c(pA))&&R(pA,Ui(c(pA).path)),c(pA)||R(pA,qQ(c(QA),c(LA))),Xo(q)}function Do(q){if(!B()&&c(pA))if(Fy(c(pA)))try{var fA=jd(c(pA)),PA=je(c(QA),fA),Fe=(function(De,ot,jt){if(ot==="array"){if(Array.isArray(De))return De;if(pn(De))return siA(De);if(typeof De=="string")try{var ki=jt.parse(De);if(Array.isArray(ki))return ki;if(pn(ki))return siA(ki)}catch{return[De]}return[De]}if(ot==="object"){if(Array.isArray(De))return riA(De);if(pn(De))return De;if(typeof De=="string")try{var xn=jt.parse(De);if(pn(xn))return xn;if(Array.isArray(xn))return riA(xn)}catch{return{value:De}}return{value:De}}if(ot==="value")return aa(De)?jt.stringify(De):De;throw new Error("Cannot convert ".concat($L(De,jt)," to ").concat(ot))})(PA,q,_());if(Fe===PA)return;var pe=[{op:"replace",path:wt(fA),value:Fe}];i("handleConvert",{selection:c(pA),path:fA,type:q,operations:pe}),VA(pe,(De,ot)=>({state:c(pA)?tB(De,ot,ct(c(pA))):c(LA)}))}catch(De){DA()(De)}else DA()(new Error("Cannot convert current selection to ".concat(q)))}function re(){if(c(pA)){var q=viA(c(QA),c(LA),c(pA),!1),fA=Ki(ct(c(pA)));q&&!qi(ct(q))&&Qi(fA,Ki(ct(q)))?R(pA,o2(ct(q))):R(pA,c2(fA)),i("insert before",{selection:c(pA),selectionBefore:q,parentPath:fA}),Mo(),Ji()}}function di(){if(c(pA)){var q=i1(c(QA),c(pA));i("insert after",q),R(pA,o2(q)),Mo(),Ji()}}function ln(q){return Qn.apply(this,arguments)}function Qn(){return(Qn=Tt(function*(q){yield saA({char:q,selectInside:!0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me,onSelect:Ft})})).apply(this,arguments)}function To(){if(!B()&&f().canUndo){var q=f().undo();if(av(q)){var fA={json:c(QA),text:c(WA)};R(QA,q.undo.patch?lg(c(QA),q.undo.patch):q.undo.json),R(LA,q.undo.documentState),R(pA,q.undo.selection),R(WA,q.undo.text),R(Qe,q.undo.textIsRepaired),MA=void 0,i("undo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.undo.patch,undo:q.redo.patch}:void 0),Mt(),c(pA)&&xi(ct(c(pA)),{scrollToWhenVisible:!1})}else BA()(q)}}function Ma(){if(!B()&&f().canRedo){var q=f().redo();if(av(q)){var fA={json:c(QA),text:c(WA)};R(QA,q.redo.patch?lg(c(QA),q.redo.patch):q.redo.json),R(LA,q.redo.documentState),R(pA,q.redo.selection),R(WA,q.redo.text),R(Qe,q.redo.textIsRepaired),MA=void 0,i("redo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.redo.patch,undo:q.undo.patch}:void 0),Mt(),c(pA)&&xi(ct(c(pA)),{scrollToWhenVisible:!1})}else oA()(q)}}function wi(q){var fA;B()||c(QA)===void 0||(HA=!0,KA()({id:o,json:c(QA),rootPath:q,onSort:(fA=Tt(function*(PA){var{operations:Fe}=PA;i("onSort",q,Fe),VA(Fe,(pe,De)=>({state:tL(pe,De,q),selection:Ui(q)}))}),function(PA){return fA.apply(this,arguments)}),onClose:()=>{HA=!1,setTimeout(Mt)}}))}function Io(){c(pA)&&wi(MiA(c(QA),c(pA)))}function nr(){wi([])}function yo(q){if(c(QA)!==void 0){var{id:fA,onTransform:PA,onClose:Fe}=q,pe=q.rootPath||[];HA=!0,Pe()({id:fA||a,json:c(QA),rootPath:pe,onTransform:De=>{PA?PA({operations:De,json:c(QA),transformedJson:lg(c(QA),De)}):(i("onTransform",pe,De),VA(De,(ot,jt)=>({state:tL(ot,jt,pe),selection:Ui(pe)})))},onClose:()=>{HA=!1,setTimeout(Mt),Fe&&Fe()}})}}function Pa(){c(pA)&&yo({rootPath:MiA(c(QA),c(pA))})}function Gn(){yo({rootPath:[]})}function xi(q){return Pt.apply(this,arguments)}function Pt(){return Pt=Tt(function*(q){var{scrollToWhenVisible:fA=!0,element:PA}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};R(LA,Kc(c(QA),c(LA),q,Vy));var Fe=PA??Sn(q);if(i("scrollTo",{path:q,elem:Fe,refContents:c(g)}),!Fe||!c(g))return Promise.resolve();var pe=c(g).getBoundingClientRect(),De=Fe.getBoundingClientRect();if(!fA&&De.bottom>pe.top&&De.top{d(Fe,{container:c(g),offset:ot,duration:300,callback:()=>jt()})})}),Pt.apply(this,arguments)}function Sn(q){var fA,PA;return Mo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('div[data-path="'.concat(qy(q),'"]')))!==null&&fA!==void 0?fA:void 0}function Bo(q){var fA,PA;return Mo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('span[data-search-result-index="'.concat(q,'"]')))!==null&&fA!==void 0?fA:void 0}function So(q){var fA=Sn(q);if(fA&&c(g)){var PA=c(g).getBoundingClientRect(),Fe=fA.getBoundingClientRect(),pe=aa(je(c(QA),q))?20:Fe.height;Fe.topPA.bottom-20&&d(fA,{container:c(g),offset:-(PA.height-pe-20),duration:0})}}function vA(q,fA){if(q.json!==void 0||q?.text!==void 0){if(c(WA)!==void 0){var PA,Fe={text:c(WA),json:void 0};(PA=P())===null||PA===void 0||PA(Fe,q,{contentErrors:Te(),patchResult:fA})}else if(c(QA)!==void 0){var pe,De={text:void 0,json:c(QA)};(pe=P())===null||pe===void 0||pe(De,q,{contentErrors:Te(),patchResult:fA})}}}function VA(q,fA){i("handlePatch",q,fA);var PA={json:c(QA),text:c(WA)},Fe=Mi(q,fA);return vA(PA,Fe),Fe}function me(q,fA){var PA={json:c(QA),text:c(WA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)},pe=Kc(c(QA),Xg(q,c(LA)),[],Jf),De=typeof fA=="function"?fA(q,pe,c(pA)):void 0;R(QA,De?.json!==void 0?De.json:q),R(LA,De?.state!==void 0?De.state:pe),R(pA,De?.selection!==void 0?De.selection:c(pA)),R(WA,void 0),R(Qe,!1),MA=void 0,Wi(c(QA)),ui(Fe),vA(PA,void 0)}function dA(q,fA){i("handleChangeText");var PA={json:c(QA),text:c(WA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};try{R(QA,U()(q)),R(LA,Kc(c(QA),Xg(c(QA),c(LA)),[],Jf)),R(WA,void 0),R(Qe,!1),MA=void 0}catch(De){try{R(QA,U()(ml(q))),R(LA,Kc(c(QA),Xg(c(QA),c(LA)),[],Jf)),R(WA,q),R(Qe,!0),MA=void 0}catch{R(QA,void 0),R(LA,ML({json:c(QA),expand:Jf})),R(WA,q),R(Qe,!1),MA=c(WA)!==""?uh(c(WA),De.message||String(De)):void 0}}if(typeof fA=="function"){var pe=fA(c(QA),c(LA),c(pA));R(QA,pe?.json!==void 0?pe.json:c(QA)),R(LA,pe?.state!==void 0?pe.state:c(LA)),R(pA,pe?.selection!==void 0?pe.selection:c(pA))}Wi(c(QA)),ui(Fe),vA(PA,void 0)}function SA(q,fA){var PA=arguments.length>2&&arguments[2]!==void 0&&arguments[2];i("handleExpand",{path:q,expanded:fA,recursive:PA}),fA?NA(q,PA?IG:kL):Ie(q,PA),Mt()}function ae(){SA([],!0,!0)}function xe(){SA([],!1,!0)}function it(q){i("openFind",{findAndReplace:q}),R(ut,!1),R(Me,!1),Mo(),R(ut,!0),R(Me,q)}function st(q,fA){i("handleExpandSection",q,fA),R(LA,(function(PA,Fe,pe,De){return mh(PA,Fe,pe,(ot,jt)=>{if(!lr(jt))return jt;var ki=hoA(jt.visibleSections.concat(De));return ye(ye({},jt),{},{visibleSections:ki})})})(c(QA),c(LA),q,fA))}function bt(q){i("pasted json as text",q),R(Kt,q)}function Kn(q){i("pasted multiline text",{pastedText:q}),R(Ye,q)}function Ri(q){var fA,{anchor:PA,left:Fe,top:pe,width:De,height:ot,offsetTop:jt,offsetLeft:ki,showTip:xn}=q,Pi=(function(Wn){var{json:Aa,documentState:un,selection:Gt,readOnly:Xi,onEditKey:Zt,onEditValue:mt,onToggleEnforceString:gi,onCut:ga,onCopy:Zn,onPaste:ea,onRemove:ua,onDuplicate:mr,onExtract:tC,onInsertBefore:xg,onInsert:Pl,onConvert:A0,onInsertAfter:jl,onSort:os,onTransform:pr}=Wn,Rg=Aa!==void 0,iC=!!Gt,Ng=!!Gt&&qi(ct(Gt)),Rn=Gt?je(Aa,ct(Gt)):void 0,Fa=Array.isArray(Rn)?"Edit array":pn(Rn)?"Edit object":"Edit value",_a=Rg&&(lo(Gt)||cr(Gt)||In(Gt)),Q1=Gt&&!Ng?je(Aa,Ki(ct(Gt))):void 0,QB=!Xi&&Rg&&rv(Gt)&&!Ng&&!Array.isArray(Q1),h1=!Xi&&Rg&&Gt!==void 0&&rv(Gt),tu=h1&&!aa(Rn),hB=!Xi&&_a,iu=_a,Lb=!Xi&&iC,Gb=!Xi&&Rg&&_a&&!Ng,Kb=!Xi&&Rg&&Gt!==void 0&&(lo(Gt)||In(Gt))&&!Ng,e0=_a,u1=e0?"Convert to:":"Insert:",La=!Xi&&(tr(Gt)&&Array.isArray(Rn)||yg(Gt)&&Array.isArray(Q1)),il=!Xi&&(e0?Fy(Gt)&&!pn(Rn):iC),nu=!Xi&&(e0?Fy(Gt)&&!Array.isArray(Rn):iC),ou=!Xi&&(e0?Fy(Gt)&&aa(Rn):iC),f1=Gt!==void 0&&P0(Aa,un,ct(Gt));function Lr(au){_a?au!=="structure"&&A0(au):Pl(au)}return[{type:"row",items:[{type:"button",onClick:()=>Zt(),icon:nd,text:"Edit key",title:"Edit the key (Double-click on the key)",disabled:!QB},{type:"dropdown-button",main:{type:"button",onClick:()=>mt(),icon:nd,text:Fa,title:"Edit the value (Double-click on the value)",disabled:!h1},width:"11em",items:[{type:"button",icon:nd,text:Fa,title:"Edit the value (Double-click on the value)",onClick:()=>mt(),disabled:!h1},{type:"button",icon:f1?KS:YS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>gi(),disabled:!tu}]}]},{type:"separator"},{type:"row",items:[{type:"dropdown-button",main:{type:"button",onClick:()=>ga(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!hB},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>ga(!0),disabled:!hB},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>ga(!1),disabled:!hB}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Zn(!0),icon:xC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!iu},width:"12em",items:[{type:"button",icon:xC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Zn(!0),disabled:!iu},{type:"button",icon:xC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Zn(!1),disabled:!iu}]},{type:"button",onClick:()=>ea(),icon:_S,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:!Lb}]},{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"button",onClick:()=>mr(),icon:GS,text:"Duplicate",title:"Duplicate selected contents (Ctrl+D)",disabled:!Gb},{type:"button",onClick:()=>tC(),icon:Xq,text:"Extract",title:"Extract selected contents",disabled:!Kb},{type:"button",onClick:()=>os(),icon:C3,text:"Sort",title:"Sort array or object contents",disabled:Xi||!_a},{type:"button",onClick:()=>pr(),icon:s3,text:"Transform",title:"Transform array or object contents (filter, sort, project)",disabled:Xi||!_a},{type:"button",onClick:()=>ua(),icon:Ww,text:"Remove",title:"Remove selected contents (Delete)",disabled:Xi||!_a}]},{type:"column",items:[{type:"label",text:u1},{type:"button",onClick:()=>Lr("structure"),icon:e0?I3:ad,text:"Structure",title:u1+" structure like the first item in the array",disabled:!La},{type:"button",onClick:()=>Lr("object"),icon:e0?I3:ad,text:"Object",title:u1+" object",disabled:!il},{type:"button",onClick:()=>Lr("array"),icon:e0?I3:ad,text:"Array",title:u1+" array",disabled:!nu},{type:"button",onClick:()=>Lr("value"),icon:e0?I3:ad,text:"Value",title:u1+" value",disabled:!ou}]}]},{type:"separator"},{type:"row",items:[{type:"button",onClick:()=>xg(),icon:oV,text:"Insert before",title:"Select area before current entry to insert or paste contents",disabled:Xi||!_a||Ng},{type:"button",onClick:()=>jl(),icon:$q,text:"Insert after",title:"Select area after current entry to insert or paste contents",disabled:Xi||!_a||Ng}]}]})({json:c(QA),documentState:c(LA),selection:c(pA),readOnly:B(),onEditKey:zi,onEditValue:vt,onToggleEnforceString:Zi,onCut:L,onCopy:ci,onPaste:qn,onRemove:Zo,onDuplicate:wo,onExtract:ha,onInsertBefore:re,onInsert:ra,onInsertAfter:di,onConvert:Do,onSort:Io,onTransform:Pa}),Eo=(fA=YA()(Pi))!==null&&fA!==void 0?fA:Pi;if(Eo!==!1){var Wt={left:Fe,top:pe,offsetTop:jt,offsetLeft:ki,width:De,height:ot,anchor:PA,closeOnOuterClick:!0,onClose:()=>{HA=!1,Mt()}};HA=!0;var $o=r(laA,{tip:xn?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:Eo,onRequestClose:()=>s($o)},Wt)}}function Ji(q){if(!gr(c(pA)))if(q&&(q.stopPropagation(),q.preventDefault()),q&&q.type==="contextmenu"&&q.target!==c(l))Ri({left:q.clientX,top:q.clientY,width:A2,height:$C,showTip:!1});else{var fA,PA=(fA=c(g))===null||fA===void 0?void 0:fA.querySelector(".jse-context-menu-pointer.jse-selected");if(PA)Ri({anchor:PA,offsetTop:2,width:A2,height:$C,showTip:!1});else{var Fe,pe=(Fe=c(g))===null||Fe===void 0?void 0:Fe.getBoundingClientRect();pe&&Ri({top:pe.top+2,left:pe.left+2,width:A2,height:$C,showTip:!1})}}}function Vt(q){Ri({anchor:EoA(q.target,"BUTTON"),offsetTop:0,width:A2,height:$C,showTip:!0})}function Ni(){return ka.apply(this,arguments)}function ka(){return(ka=Tt(function*(){if(i("apply pasted json",c(Kt)),c(Kt)){var{onPasteAsJson:q}=c(Kt);R(Kt,void 0),q(),setTimeout(Mt)}})).apply(this,arguments)}function Lt(){return gt.apply(this,arguments)}function gt(){return(gt=Tt(function*(){i("apply pasted multiline text",c(Ye)),c(Ye)&&(Co(JSON.stringify(c(Ye))),setTimeout(Mt))})).apply(this,arguments)}function Fi(){i("clear pasted json"),R(Kt,void 0),Mt()}function Oi(){i("clear pasted multiline text"),R(Ye,void 0),Mt()}function Vn(){aA()(ba.text)}function hn(q){R(pA,q),Mt(),xi(ct(q))}function Mt(){i("focus"),c(l)&&(c(l).focus(),c(l).select())}function sa(q){return(function(fA,PA,Fe){var pe=Ki(Fe),De=[mi(Fe)],ot=je(fA,pe),jt=ot?eL(ot,PA,De):void 0;return jt?Ui(pe.concat(jt)):o2(Fe)})(c(QA),c(LA),q)}function Ho(q){c(A)&&c(A).onDrag(q)}function u(){c(A)&&c(A).onDragEnd()}var y=IA(void 0,!0);RA(()=>c(pA),()=>{var q;q=c(pA),Qi(q,Q())||(i("onSelect",q),iA()(q))}),RA(()=>(G(D()),G(F())),()=>{R(Ee,AG({escapeControlCharacters:D(),escapeUnicodeCharacters:F()}))}),RA(()=>c(ut),()=>{(function(q){c(g)&&q&&c(g).scrollTop===0&&($g(g,c(g).style.overflowAnchor="none"),$g(g,c(g).scrollTop+=Uf),setTimeout(()=>{c(g)&&$g(g,c(g).style.overflowAnchor="")}))})(c(ut))}),RA(()=>G(E()),()=>{dn(E())}),RA(()=>G(Q()),()=>{(function(q){Qi(c(pA),q)||(i("applyExternalSelection",{selection:c(pA),externalSelection:q}),Zf(q)&&R(pA,q))})(Q())}),RA(()=>(c(QA),G(J()),G(_()),G(j())),()=>{et(c(QA),J(),_(),j())}),RA(()=>(c(g),jiA),()=>{R(A,c(g)?jiA(c(g)):void 0)}),RA(()=>(G(B()),G(b()),G(_()),c(Ee),G(sA()),G(ee())),()=>{R(y,{mode:ba.tree,readOnly:B(),truncateTextSize:b(),parser:_(),normalization:c(Ee),getJson:Le,getDocumentState:si,getSelection:gn,findElement:Sn,findNextInside:sa,focus:Mt,onPatch:VA,onInsert:Xo,onExpand:SA,onSelect:Ft,onFind:it,onExpandSection:st,onPasteJson:bt,onRenderValue:sA(),onContextMenu:Ri,onClassName:ee()||(()=>{}),onDrag:Ho,onDragEnd:u})}),RA(()=>c(y),()=>{i("context changed",c(y))}),kn();var x={expand:NA,collapse:Ie,validate:Te,getJson:Le,patch:Mi,acceptAutoRepair:_t,openTransformModal:yo,scrollTo:xi,findElement:Sn,findSearchResult:Bo,focus:Mt};Ai(!0);var H=zNA();ue("mousedown",i2,function(q){!Nh(q.target,fA=>fA===c(C))&&gr(c(pA))&&(i("click outside the editor, exit edit mode"),R(pA,z0(c(pA))),I&&c(l)&&(c(l).focus(),c(l).blur()),i("blur (outside editor)"),c(l)&&c(l).blur())});var k,T=At(H),eA=CA(T),gA=q=>{(function(fA,PA){St(PA,!1);var Fe=IA(void 0,!0),pe=IA(void 0,!0),De=IA(void 0,!0),ot=N(PA,"json",9),jt=N(PA,"selection",9),ki=N(PA,"readOnly",9),xn=N(PA,"showSearch",13,!1),Pi=N(PA,"history",9),Eo=N(PA,"onExpandAll",9),Wt=N(PA,"onCollapseAll",9),$o=N(PA,"onUndo",9),Wn=N(PA,"onRedo",9),Aa=N(PA,"onSort",9),un=N(PA,"onTransform",9),Gt=N(PA,"onContextMenu",9),Xi=N(PA,"onCopy",9),Zt=N(PA,"onRenderMenu",9);function mt(){xn(!xn())}var gi=IA(void 0,!0),ga=IA(void 0,!0),Zn=IA(void 0,!0),ea=IA(void 0,!0);RA(()=>G(ot()),()=>{R(Fe,ot()!==void 0)}),RA(()=>(c(Fe),G(jt()),In),()=>{R(pe,c(Fe)&&(lo(jt())||cr(jt())||In(jt())))}),RA(()=>(G(Eo()),G(ot())),()=>{R(gi,{type:"button",icon:XoA,title:"Expand all",className:"jse-expand-all",onClick:Eo(),disabled:!aa(ot())})}),RA(()=>(G(Wt()),G(ot())),()=>{R(ga,{type:"button",icon:$oA,title:"Collapse all",className:"jse-collapse-all",onClick:Wt(),disabled:!aa(ot())})}),RA(()=>G(ot()),()=>{R(Zn,{type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:mt,disabled:ot()===void 0})}),RA(()=>(G(ki()),c(gi),c(ga),G(Aa()),G(ot()),G(un()),c(Zn),G(Gt()),G($o()),G(Pi()),G(Wn()),G(Xi()),c(pe)),()=>{R(ea,ki()?[c(gi),c(ga),{type:"separator"},{type:"button",icon:xC,title:"Copy (Ctrl+C)",className:"jse-copy",onClick:Xi(),disabled:!c(pe)},{type:"separator"},c(Zn),{type:"space"}]:[c(gi),c(ga),{type:"separator"},{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Aa(),disabled:ki()||ot()===void 0},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:un(),disabled:ki()||ot()===void 0},c(Zn),{type:"button",icon:LS,title:oG,className:"jse-contextmenu",onClick:Gt()},{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:$o(),disabled:!Pi().canUndo},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Wn(),disabled:!Pi().canRedo},{type:"space"}])}),RA(()=>(G(Zt()),c(ea)),()=>{R(De,Zt()(c(ea))||c(ea))}),kn(),Ai(!0),xv(fA,{get items(){return c(De)}}),xt()})(q,{get json(){return c(QA)},get selection(){return c(pA)},get readOnly(){return B()},get history(){return f()},onExpandAll:ae,onCollapseAll:xe,onUndo:To,onRedo:Ma,onSort:nr,onTransform:Gn,onContextMenu:Vt,onCopy:ci,get onRenderMenu(){return hA()},get showSearch(){return c(ut)},set showSearch(fA){R(ut,fA)},$$legacy:!0})};TA(eA,q=>{S()&&q(gA)});var wA=bA(eA,2),Ae=q=>{QNA(q,{get json(){return c(QA)},get selection(){return c(pA)},onSelect:hn,get onError(){return DA()},get pathParser(){return AA()}})};TA(wA,q=>{M()&&q(Ae)});var oe=bA(wA,2),Be=q=>{var fA=TNA(),PA=At(fA),Fe=CA(PA);Fe.readOnly=!0,Jo(Fe,jt=>R(l,jt),()=>c(l));var pe=bA(PA,2),De=jt=>{var ki=bi(),xn=At(ki),Pi=Wt=>{(function($o,Wn){function Aa(gi){gi.stopPropagation(),Wn.onCreateObject()}function un(gi){gi.stopPropagation(),Wn.onCreateArray()}St(Wn,!0);var Gt=nNA();Gt.__click=()=>Wn.onClick();var Xi=bA(CA(Gt),2),Zt=bA(CA(Xi),2),mt=gi=>{var ga=iNA(),Zn=bA(At(ga),2);Mn(Zn,"title","Create an empty JSON object (press '{')"),Zn.__click=Aa;var ea=bA(Zn,2);Mn(ea,"title","Create an empty JSON array (press '[')"),ea.__click=un,lA(gi,ga)};TA(Zt,gi=>{Wn.readOnly||gi(mt)}),lA($o,Gt),xt()})(Wt,{get readOnly(){return B()},onCreateObject:()=>{Mt(),ln("{")},onCreateArray:()=>{Mt(),ln("[")},onClick:()=>{Mt()}})},Eo=Wt=>{var $o=UNA(),Wn=At($o),Aa=tt(()=>B()?[]:[{icon:l3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Vn}]);tl(Wn,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(Aa)}}),gaA(bA(Wn,2),{get text(){return c(WA)},get json(){return c(QA)},get indentation(){return O()},get parser(){return _()}}),lA(Wt,$o)};TA(xn,Wt=>{c(WA)===""||c(WA)===void 0?Wt(Pi):Wt(Eo,!1)}),lA(jt,ki)},ot=jt=>{var ki=YNA(),xn=At(ki);eaA(CA(xn),{get json(){return c(QA)},get documentState(){return c(LA)},get parser(){return _()},get showSearch(){return c(ut)},get showReplace(){return c(Me)},get readOnly(){return B()},columns:void 0,onSearch:ei,onFocus:Y,onPatch:VA,onClose:nA});var Pi=bA(xn,2);Mn(Pi,"data-jsoneditor-scrollable-contents",!0);var Eo=CA(Pi),Wt=Zt=>{lA(Zt,JNA())};TA(Eo,Zt=>{c(ut)&&Zt(Wt)}),KL(bA(Eo,2),{get value(){return c(QA)},pointer:"",get state(){return c(LA)},get validationErrors(){return c(_A)},get searchResults(){return c(ze)},get selection(){return c(pA)},get context(){return c(y)},get onDragSelectionStart(){return ya}}),Jo(Pi,Zt=>R(g,Zt),()=>c(g));var $o=bA(Pi,2),Wn=Zt=>{var mt=tt(()=>(c(Kt),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(Kt).contents)?"array":"object"," as text")))),gi=tt(()=>[{icon:SC,text:"Paste as JSON instead",title:"Replace the value with the pasted JSON",onMouseDown:Ni},{text:"Leave as is",title:"Keep the JSON embedded in the value",onClick:Fi}]);tl(Zt,{type:"info",get message(){return c(mt)},get actions(){return c(gi)}})};TA($o,Zt=>{c(Kt)&&Zt(Wn)});var Aa=bA($o,2),un=Zt=>{var mt=tt(()=>[{icon:SC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Lt},{text:"Leave as is",title:"Keep the pasted array",onClick:Oi}]);tl(Zt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(mt)}})};TA(Aa,Zt=>{c(Ye)&&Zt(un)});var Gt=bA(Aa,2),Xi=Zt=>{var mt=tt(()=>B()?[]:[{icon:Zw,text:"Ok",title:"Accept the repaired document",onClick:_t},{icon:l3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Vn}]);tl(Zt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(mt)},onClose:Mt})};TA(Gt,Zt=>{c(Qe)&&Zt(Xi)}),hG(bA(Gt,2),{get validationErrors(){return c(xA)},selectError:rA}),lA(jt,ki)};TA(pe,jt=>{c(QA)===void 0?jt(De):jt(ot,!1)}),ue("paste",Fe,En),lA(q,fA)},He=q=>{lA(q,HNA())};TA(oe,q=>{n?q(He,!1):q(Be)}),Jo(T,q=>R(C,q),()=>c(C));var ke=bA(T,2),Ne=q=>{VoA(q,{onClose:()=>R(uA,!1)})};TA(ke,q=>{c(uA)&&q(Ne)});var ni=bA(ke,2),Un=q=>{WoA(q,e1(()=>c(ZA),{onClose:()=>{var fA;(fA=c(ZA))===null||fA===void 0||fA.onClose(),R(ZA,void 0)}}))};return TA(ni,q=>{c(ZA)&&q(Un)}),ve(()=>k=$t(T,1,"jse-tree-mode svelte-10mlrw4",null,k,{"no-main-menu":!S()})),ue("keydown",T,function(q){var fA=g2(q),PA=q.shiftKey;if(i("keydown",{combo:fA,key:q.key}),fA==="Ctrl+X"&&(q.preventDefault(),L(!0)),fA==="Ctrl+Shift+X"&&(q.preventDefault(),L(!1)),fA==="Ctrl+C"&&(q.preventDefault(),ci(!0)),fA==="Ctrl+Shift+C"&&(q.preventDefault(),ci(!1)),fA==="Ctrl+D"&&(q.preventDefault(),wo()),fA!=="Delete"&&fA!=="Backspace"||(q.preventDefault(),Zo()),fA==="Insert"&&(q.preventDefault(),Xo("structure")),fA==="Ctrl+A"&&(q.preventDefault(),R(pA,Ui([]))),fA==="Ctrl+Q"&&Ji(q),fA==="ArrowUp"||fA==="Shift+ArrowUp"){q.preventDefault();var Fe=c(pA)?viA(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,Fe),So(ct(Fe))}if(fA==="ArrowDown"||fA==="Shift+ArrowDown"){q.preventDefault();var pe=c(pA)?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Wt){var Wn=$o?ct(Wt):i1(Pi,Wt),Aa=aa(je(Pi,Wn))?piA(Pi,Eo,Wn,!0):Eo,un=eL(Pi,Eo,Wn),Gt=eL(Pi,Aa,Wn);if($o)return tr(Wt)?un!==void 0?Ds(un,un):void 0:yg(Wt)?Gt!==void 0?Ds(Gt,Gt):void 0:Gt!==void 0?Ds(jd(Wt),Gt):void 0;if(yg(Wt))return Gt!==void 0?Ui(Gt):void 0;if(tr(Wt)||In(Wt))return un!==void 0?Ui(un):void 0;if(cr(Wt)){if(un===void 0||un.length===0)return;var Xi=Ki(un),Zt=je(Pi,Xi);return Array.isArray(Zt)?Ui(un):l2(un)}return lo(Wt)?Gt!==void 0?Ui(Gt):un!==void 0?Ui(un):void 0:void 0}})(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,pe),So(ct(pe))}if(fA==="ArrowLeft"||fA==="Shift+ArrowLeft"){q.preventDefault();var De=c(pA)?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:Aa,previous:un}=biA(Pi,Eo,Wt,Wn);if($o)return lo(Wt)?void 0:Ds(Wt.path,Wt.path);if(Aa&&un)return SL(un);var Gt=Ki(ct(Wt)),Xi=je(Pi,Gt);return In(Wt)&&Array.isArray(Xi)?Ds(Wt.path,Wt.path):lo(Wt)&&!Array.isArray(Xi)?l2(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,De),So(ct(De))}if(fA==="ArrowRight"||fA==="Shift+ArrowRight"){q.preventDefault();var ot=c(pA)&&c(QA)!==void 0?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:Aa,next:un}=biA(Pi,Eo,Wt,Wn);return $o?lo(Wt)?void 0:Ds(Wt.path,Wt.path):Aa&&un?SL(un):lo(Wt)?Ui(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,ot),So(ct(ot))}if(fA==="Enter"&&c(pA)){if(vv(c(pA))){var jt=c(pA).focusPath,ki=je(c(QA),Ki(jt));Array.isArray(ki)&&(q.preventDefault(),R(pA,Ui(jt)))}cr(c(pA))&&(q.preventDefault(),R(pA,ye(ye({},c(pA)),{},{edit:!0}))),In(c(pA))&&(q.preventDefault(),aa(je(c(QA),c(pA).path))?SA(c(pA).path,!0):R(pA,ye(ye({},c(pA)),{},{edit:!0})))}if(fA.replace(/^Shift\+/,"").length===1&&c(pA))return q.preventDefault(),void ln(q.key);if(fA==="Enter"&&(yg(c(pA))||tr(c(pA))))return q.preventDefault(),void ln("");if(fA==="Ctrl+Enter"&&In(c(pA))){var xn=je(c(QA),c(pA).path);Dv(xn)&&window.open(String(xn),"_blank")}fA==="Escape"&&c(pA)&&(q.preventDefault(),R(pA,void 0)),fA==="Ctrl+F"&&(q.preventDefault(),it(!1)),fA==="Ctrl+H"&&(q.preventDefault(),it(!0)),fA==="Ctrl+Z"&&(q.preventDefault(),To()),fA==="Ctrl+Shift+Z"&&(q.preventDefault(),Ma())}),ue("mousedown",T,function(q){i("handleMouseDown",q);var fA=q.target;BoA(fA,"BUTTON")||fA.isContentEditable||(Mt(),c(pA)||c(QA)!==void 0||c(WA)!==""&&c(WA)!==void 0||(i("createDefaultSelection"),R(pA,Ui([]))))}),ue("contextmenu",T,Ji),lA(t,H),Ot(e,"expand",NA),Ot(e,"collapse",Ie),Ot(e,"validate",Te),Ot(e,"getJson",Le),Ot(e,"patch",Mi),Ot(e,"acceptAutoRepair",_t),Ot(e,"openTransformModal",yo),Ot(e,"scrollTo",xi),Ot(e,"findElement",Sn),Ot(e,"findSearchResult",Bo),Ot(e,"focus",Mt),xt(x)}function caA(t){return typeof(e=t)!="object"||e===null?t:new Proxy(t,{get:(A,i,n)=>caA(Reflect.get(A,i,n)),set:()=>!1,deleteProperty:()=>!1});var e}var Ty=Cr("jsoneditor:History");function CaA(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.maxItems||1e3,A=[],i=0;function n(){return i0}function a(){return{canUndo:n(),canRedo:o(),items:()=>A.slice().reverse(),add:s,undo:l,redo:C,clear:g}}function r(){t.onChange&&t.onChange(a())}function s(I){Ty("add",I),A=[I].concat(A.slice(i)).slice(0,e),i=0,r()}function g(){Ty("clear"),A=[],i=0,r()}function l(){if(n()){var I=A[i];return i+=1,Ty("undo",I),r(),I}}function C(){if(o())return Ty("redo",A[i-=1]),r(),A[i]}return{get:a}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-transform-modal-inner.svelte-lta8xm { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - min-height: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) { - color: inherit; - flex: 1; - display: flex; - flex-direction: column; - padding: 0; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - gap: calc(2 * var(--jse-padding, 10px)); - min-height: 0; - box-sizing: border-box; - padding: 0 calc(2 * var(--jse-padding, 10px)) var(--jse-padding, 10px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p { - margin: var(--jse-padding, 10px) 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:first-child { - margin-top: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:last-child { - margin-bottom: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) code { - background: var(--jse-modal-code-background, rgba(0, 0, 0, 0.05)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .query-error:where(.svelte-lta8xm) { - color: var(--jse-error-color, #ee5341); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { - flex: 1; - outline: none; - resize: vertical; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - gap: calc(2 * var(--jse-padding, 10px)); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data.jse-hide:where(.svelte-lta8xm) { - flex: none; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents.jse-hide-original-data:where(.svelte-lta8xm) { - flex-direction: column; - gap: 0; - margin-bottom: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)) calc(2 * var(--jse-padding, 10px)); -} -@media screen and (max-width: 1200px) { - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { - flex-direction: column; - overflow: auto; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { - min-height: 150px; - flex: none; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-tree-mode { - height: 300px; - flex: none; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm), - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { - flex: unset; - } -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) { - font-weight: bold; - display: block; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) { - margin-top: calc(2 * var(--jse-padding, 10px)); - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) button:where(.svelte-lta8xm) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - font-weight: bold; - padding: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-tree-mode { - flex: 1; - background: var(--jse-input-background-readonly, transparent); - box-shadow: none; - box-sizing: border-box; - --jse-main-border: var(--jse-input-border, 1px solid #d8dbdf); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm), -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm) { - border: var(--jse-input-border, 1px solid #d8dbdf); - outline: none; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: inherit; - background: var(--jse-input-background, var(--jse-background-color, #fff)); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):focus, -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):read-only, -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):read-only { - background: var(--jse-input-background-readonly, transparent); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-preview.jse-error:where(.svelte-lta8xm) { - flex: 1; - background: var(--jse-input-background-readonly, transparent); - border: var(--jse-input-border, 1px solid #d8dbdf); - color: var(--jse-error-color, #ee5341); - padding: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-transform-modal-inner.svelte-lta8xm a { - color: var(--jse-a-color, #156fc5); -} -.jse-transform-modal-inner.svelte-lta8xm a:hover { - color: var(--jse-a-color-highlight, #0f508d); -}`);var Lf=wv(()=>XSA),WQ=wv(()=>$SA),ONA=FA('
        '),PNA=FA(" ",1),jNA=FA('
        '),qNA=FA('
        Language
        Path
        Query
        Preview
        ',1),VNA=FA('
        ');function WNA(t,e){var A,i,n;St(e,!1);var o=Cr("jsoneditor:TransformModal"),a=N(e,"id",25,()=>"transform-modal-"+th()),r=N(e,"json",9),s=N(e,"rootPath",25,()=>[]),g=N(e,"indentation",9),l=N(e,"truncateTextSize",9),C=N(e,"escapeControlCharacters",9),I=N(e,"escapeUnicodeCharacters",9),d=N(e,"parser",9),B=N(e,"parseMemoizeOne",9),E=N(e,"validationParser",9),Q=N(e,"pathParser",9),f=N(e,"queryLanguages",9),b=N(e,"queryLanguageId",13),S=N(e,"onChangeQueryLanguage",9),M=N(e,"onRenderValue",9),D=N(e,"onRenderMenu",9),F=N(e,"onRenderContextMenu",9),_=N(e,"onClassName",9),U=N(e,"onTransform",9),J=N(e,"onClose",9),j=IA(void 0,!0),AA=IA(CaA({onChange:LA=>R(AA,LA)}).get(),!0),O=IA(void 0,!0),DA=IA(void 0,!0),P=IA(!1,!0),aA="".concat(a(),":").concat(wt(s())),iA=(A=Lf()[aA])!==null&&A!==void 0?A:{},BA=IA(WQ().showWizard!==!1,!0),oA=IA(WQ().showOriginal!==!1,!0),sA=IA((i=iA.queryOptions)!==null&&i!==void 0?i:{},!0),hA=IA(b()===iA.queryLanguageId&&iA.query?iA.query:"",!0),YA=IA((n=iA.isManual)!==null&&n!==void 0&&n,!0),ee=IA(void 0,!0),UA=IA(void 0,!0),mA=IA({text:""},!0);function KA(LA){var pA;return(pA=f().find(Ft=>Ft.id===LA))!==null&&pA!==void 0?pA:f()[0]}function Pe(LA){try{R(sA,LA),R(hA,KA(b()).createQuery(c(O),LA)),R(ee,void 0),R(YA,!1),o("updateQueryByWizard",{queryOptions:c(sA),query:c(hA),isManual:c(YA)})}catch(pA){R(ee,String(pA))}}function Je(LA){R(hA,LA.target.value),R(YA,!0),o("handleChangeQuery",{query:c(hA),isManual:c(YA)})}c(YA)||Pe(c(sA)),is(()=>{var LA;(LA=c(j))===null||LA===void 0||LA.focus()});var HA=qE(function(LA,pA){if(LA===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");if(pA.trim()!=="")try{o("previewTransform",{query:pA});var Ft=KA(b()).executeQuery(LA,pA,d());R(mA,{json:Ft}),R(UA,void 0)}catch(ht){R(mA,{text:""}),R(UA,String(ht))}else R(mA,{json:LA})},300);function uA(){if(c(O)===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");try{o("handleTransform",{query:c(hA)});var LA=KA(b()).executeQuery(c(O),c(hA),d());U()([{op:"replace",path:wt(s()),value:LA}]),J()()}catch(pA){console.error(pA),R(mA,{text:""}),R(UA,String(pA))}}function ZA(){R(BA,!c(BA)),WQ(WQ().showWizard=c(BA))}function QA(){R(oA,!c(oA)),WQ(WQ().showOriginal=c(oA))}function WA(LA){LA.focus()}function MA(LA){o("handleChangeQueryLanguage",LA),b(LA),S()(LA),Pe(c(sA))}function be(){c(P)?R(P,!c(P)):J()()}RA(()=>(G(r()),G(s())),()=>{R(O,caA(je(r(),s())))}),RA(()=>c(O),()=>{R(DA,c(O)?{json:c(O)}:{text:""})}),RA(()=>(c(O),c(hA)),()=>{HA(c(O),c(hA))}),RA(()=>(Lf(),c(sA),c(hA),G(b()),c(YA)),()=>{Lf(Lf()[aA]={queryOptions:c(sA),query:c(hA),queryLanguageId:b(),isManual:c(YA)}),o("store state in memory",aA,Lf()[aA])}),kn(),Ai(!0),em(t,{get onClose(){return J()},className:"jse-transform-modal",get fullscreen(){return c(P)},children:(LA,pA)=>{var Ft=VNA();yL(CA(Ft),{children:(ht,Ee)=>{var Kt=qNA(),Ye=At(Kt);(function(L,Ct){St(Ct,!1);var ci,Bn=N(Ct,"queryLanguages",9),En=N(Ct,"queryLanguageId",9),qn=N(Ct,"fullscreen",13),Yo=N(Ct,"onChangeQueryLanguage",9),Co=N(Ct,"onClose",9),ko=IA(void 0,!0),{openAbsolutePopup:Zo,closeAbsolutePopup:wo}=r1("absolute-popup");function ha(){var Xo={queryLanguages:Bn(),queryLanguageId:En(),onChangeQueryLanguage:ra=>{wo(ci),Yo()(ra)}};ci=Zo(qxA,Xo,{offsetTop:-2,offsetLeft:0,anchor:c(ko),closeOnOuterClick:!0})}Ai(!0),Ev(L,{title:"Transform",fullScreenButton:!0,get onClose(){return Co()},get fullscreen(){return qn()},set fullscreen(Xo){qn(Xo)},$$slots:{actions:(Xo,ra)=>{var Do,re=ZxA();Vi(CA(re),{get data(){return aV}}),Jo(re,di=>R(ko,di),()=>c(ko)),ve(()=>Do=$t(re,1,"jse-config svelte-5gkegr",null,Do,{hide:Bn().length<=1})),ue("click",re,ha),lA(Xo,re)}},$$legacy:!0}),xt()})(Ye,{get queryLanguages(){return f()},get queryLanguageId(){return b()},onChangeQueryLanguage:MA,get onClose(){return J()},get fullscreen(){return c(P)},set fullscreen(L){R(P,L)},$$legacy:!0});var ze=CA(bA(Ye,2)),ut=CA(ze),Me=bA(CA(ut),2);XnA(CA(Me),()=>(G(b()),EA(()=>KA(b()).description)));var ei=bA(Me,4),Y=bA(ei,2),z=CA(Y),nA=CA(z),rA=CA(nA),NA=tt(()=>c(BA)?M0:WE);Vi(rA,{get data(){return c(NA)}});var Ie=bA(Y,2),Qe=L=>{var Ct=bi(),ci=At(Ct),Bn=qn=>{var Yo=PNA(),Co=At(Yo);OxA(Co,{get queryOptions(){return c(sA)},get json(){return c(O)},onChange:Pe});var ko=bA(Co,2),Zo=wo=>{var ha=ONA(),Xo=CA(ha);ve(()=>Rt(Xo,c(ee))),lA(wo,ha)};TA(ko,wo=>{c(ee)&&wo(Zo)}),lA(qn,Yo)},En=qn=>{lA(qn,ur("(Only available for arrays, not for objects)"))};TA(ci,qn=>{c(O),EA(()=>Array.isArray(c(O)))?qn(Bn):qn(En,!1)}),lA(L,Ct)};TA(Ie,L=>{c(BA)&&L(Qe)});var xA=bA(Ie,4);Jo(xA,L=>R(j,L),()=>c(j));var _A,Et,et=bA(ut,2),Te=CA(et),Le=CA(Te),si=CA(Le),gn=CA(si),dn=CA(gn),_e=tt(()=>c(oA)?M0:WE);Vi(dn,{get data(){return c(_e)}});var Wi=bA(Le,2),ui=L=>{zL(L,{get externalContent(){return c(DA)},externalSelection:void 0,get history(){return c(AA)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return ya},get onChangeMode(){return ya},get onSelect(){return ya},get onUndo(){return ya},get onRedo(){return ya},get onFocus(){return ya},get onBlur(){return ya},get onSortModal(){return ya},get onTransformModal(){return ya},get onJSONEditorModal(){return ya},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})};TA(Wi,L=>{c(oA)&&L(ui)});var Mi=bA(Te,2),zi=bA(CA(Mi),2),vt=L=>{zL(L,{get externalContent(){return c(mA)},externalSelection:void 0,get history(){return c(AA)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return ya},get onChangeMode(){return ya},get onSelect(){return ya},get onUndo(){return ya},get onRedo(){return ya},get onFocus(){return ya},get onBlur(){return ya},get onSortModal(){return ya},get onTransformModal(){return ya},get onJSONEditorModal(){return ya},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})},Zi=L=>{var Ct=jNA(),ci=CA(Ct);ve(()=>Rt(ci,c(UA))),lA(L,Ct)};TA(zi,L=>{c(UA)?L(Zi,!1):L(vt)});var _t=CA(bA(ze,2));Nr(()=>ue("click",_t,uA)),vs(_t,L=>WA?.(L)),ve(L=>{AB(ei,L),AB(xA,c(hA)),_A=$t(et,1,"jse-data-contents svelte-lta8xm",null,_A,{"jse-hide-original-data":!c(oA)}),Et=$t(Te,1,"jse-original-data svelte-lta8xm",null,Et,{"jse-hide":!c(oA)}),_t.disabled=!!c(UA)},[()=>(G(qi),G(s()),G(vg),EA(()=>qi(s())?"(document root)":vg(s())))]),ue("click",nA,ZA),ue("input",xA,Je),ue("click",gn,QA),lA(ht,Kt)},$$slots:{default:!0}}),vs(Ft,(ht,Ee)=>Qv?.(ht,Ee),()=>be),lA(LA,Ft)},$$slots:{default:!0}}),xt()}function Gl(){}var ZNA=0,hr=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.id=ZNA++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=im.match(e)),A=>{var i=e(A);return i===void 0?null:[this,i]}}};hr.closedBy=new hr({deserialize:t=>t.split(" ")}),hr.openedBy=new hr({deserialize:t=>t.split(" ")}),hr.group=new hr({deserialize:t=>t.split(" ")}),hr.isolate=new hr({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}}),hr.contextHash=new hr({perNode:!0}),hr.lookAhead=new hr({perNode:!0}),hr.mounted=new hr({perNode:!0});var XiA,XNA=Object.create(null),im=class t{constructor(e,A,i){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){var A=e.props&&e.props.length?Object.create(null):XNA,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(var o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;var A=this.prop(hr.group);return!!A&&A.indexOf(e)>-1}return this.id==e}static match(e){var A=Object.create(null);for(var i in e)for(var n of i.split(" "))A[n]=e[i];return o=>{for(var a=o.prop(hr.group),r=-1;r<(a?a.length:0);r++){var s=A[r<0?o.name:a[r]];if(s)return s}}}};im.none=new im("",Object.create(null),0,8),(function(t){t[t.ExcludeBuffers=1]="ExcludeBuffers",t[t.IncludeAnonymous=2]="IncludeAnonymous",t[t.IgnoreMounts=4]="IgnoreMounts",t[t.IgnoreOverlays=8]="IgnoreOverlays"})(XiA||(XiA={})),new hr({perNode:!0});qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-status-bar.svelte-1pmgv9j { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - margin: 0; - border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); - display: flex; - gap: var(--jse-padding, 10px); -} -.jse-status-bar.svelte-1pmgv9j:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-status-bar.svelte-1pmgv9j .jse-status-bar-info:where(.svelte-1pmgv9j) { - padding: 2px; -}`);var $NA=FA('
        '),AFA=FA('
        '),eFA=FA('
        '),tFA=FA('
        '),fG=_Q.define([{tag:Re.propertyName,color:"var(--internal-key-color)"},{tag:Re.number,color:"var(--internal-value-color-number)"},{tag:Re.bool,color:"var(--internal-value-color-boolean)"},{tag:Re.string,color:"var(--internal-value-color-string)"},{tag:Re.keyword,color:"var(--internal-value-color-null)"}]),iFA=PF(fG),nFA=fG.style;fG.style=t=>nFA(t||[]);var oFA=[Go.fromClass(class{constructor(t){this.view=t,this.indentUnit=_c(t.state),this.initialPaddingLeft=null,this.isChrome=window?.navigator.userAgent.includes("Chrome"),this.generate(t.state)}update(t){var e=_c(t.state);(e!==this.indentUnit||t.docChanged||t.viewportChanged)&&(this.indentUnit=e,this.generate(t.state))}generate(t){var e=new Wr;this.initialPaddingLeft?this.addStyleToBuilder(e,t,this.initialPaddingLeft):this.view.requestMeasure({read:A=>{var i=A.contentDOM.querySelector(".cm-line");i&&(this.initialPaddingLeft=window.getComputedStyle(i).getPropertyValue("padding-left"),this.addStyleToBuilder(e,A.state,this.initialPaddingLeft)),this.decorations=e.finish()}}),this.decorations=e.finish()}addStyleToBuilder(t,e,A){var i=this.getVisibleLines(e);for(var n of i){var{numColumns:o,containsTab:a}=this.numColumns(n.text,e.tabSize),r="calc(".concat(o+this.indentUnit,"ch + ").concat(A,")"),s=this.isChrome?"calc(-".concat(o+this.indentUnit,"ch - ").concat(a?1:0,"px)"):"-".concat(o+this.indentUnit,"ch");t.add(n.from,n.from,yt.line({attributes:{style:"padding-left: ".concat(r,"; text-indent: ").concat(s,";")}}))}}getVisibleLines(t){var e=new Set,A=null;for(var{from:i,to:n}of this.view.visibleRanges)for(var o=i;o<=n;){var a=t.doc.lineAt(o);A!==a&&(e.add(a),A=a),o=a.to+1}return e}numColumns(t,e){var A=0,i=!1;A:for(var n=0;nt.decorations})];qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-text-mode.svelte-k2b9e6 { - --internal-key-color: var(--jse-key-color, #1a1a1a); - --internal-value-color-number: var(--jse-value-color-number, #ee422e); - --internal-value-color-boolean: var(--jse-value-color-boolean, #ff8c00); - --internal-value-color-string: var(--jse-value-color-string, #008000); - --internal-value-color-null: var(--jse-value-color-null, #004ed0); - flex: 1; - box-sizing: border-box; - display: flex; - flex-direction: column; - background: var(--jse-background-color, #fff); -} -.jse-text-mode.no-main-menu.svelte-k2b9e6 { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) { - flex: 1; - display: flex; - position: relative; - flex-direction: column; - overflow: hidden; - min-width: 0; - min-height: 0; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-hidden:where(.svelte-k2b9e6) { - visibility: hidden; - position: absolute; - top: 0; - left: 0; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor { - flex: 1; - overflow: hidden; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-scroller { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - line-height: var(--jse-line-height, calc(1em + 4px)); - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-gutters { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - border-right: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLine, -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLineGutter { - background: var(--jse-active-line-background-color, rgba(0, 0, 0, 0.06)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionBackground { - background: var(--jse-selection-background-color, #d3d3d3); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch.cm-searchMatch-selected { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionMatch { - background-color: var(--jse-search-match-background-color, rgba(153, 255, 119, 0.5019607843)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-foldPlaceholder { - background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); - border: none; - padding: 0 var(--jse-padding, 10px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-tooltip { - font-size: var(--jse-font-size, 16px); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - color: var(--jse-tooltip-color, var(--jse-text-color, #4d4d4d)); - background: var(--jse-tooltip-background, var(--jse-modal-background, #f5f5f5)); - border: var(--jse-tooltip-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-diagnosticAction { - background: var(--jse-tooltip-action-button-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-tooltip-action-button-background, #4d4d4d); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-panels { - border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search input { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - color: var(--jse-input-color, var(--jse-text-color, #4d4d4d)); - border: var(--jse-input-border, 1px solid #d8dbdf); - background: var(--jse-input-background, var(--jse-background-color, #fff)); - margin-right: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - color: var(--jse-panel-button-color, inherit); - background: var(--jse-panel-button-background, transparent); - border: none; - cursor: pointer; - text-transform: capitalize; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - margin: 0; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button:hover { - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - padding-left: var(--jse-padding, 10px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label input { - margin-right: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button[name='close'] { - width: 32px; - height: 32px; - font-size: 24px; - line-height: 24px; - padding: 0; - right: 0; - top: -4px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-cursor-primary { - border-color: var(--jse-text-color, #4d4d4d); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading-space:where(.svelte-k2b9e6) { - flex: 1; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading:where(.svelte-k2b9e6) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-preview:where(.svelte-k2b9e6) { - flex: 1; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); - overflow: auto; - white-space: pre-wrap; - word-break: break-word; - padding: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 12px; - background: var(--jse-background-color, #fff); - border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-tip:where(.svelte-k2b9e6) { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-track:where(.svelte-k2b9e6) { - flex: 1; - height: 6px; - background: var(--jse-panel-background, #ebebeb); - border-radius: 3px; - overflow: hidden; - border: 1px solid var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-fill:where(.svelte-k2b9e6) { - height: 100%; - background: linear-gradient(90deg, var(--jse-theme-color, #3883fa), var(--jse-theme-color-highlight, #5f9dff)); - border-radius: 2px; - transition: width 0.1s ease; - min-width: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6) { - padding: 4px 12px; - font-size: 12px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - background: var(--jse-theme-color, #3883fa); - color: #fff; - border-radius: 3px; - cursor: pointer; - transition: background-color 0.2s ease; - flex-shrink: 0; - border: 1px solid var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6):hover { - background: var(--jse-theme-color-highlight, #5f9dff); - color: #fff; -}`);var aFA=FA('
        Collapsing
        '),rFA=FA('
        ',1),sFA=FA(" ",1),gFA=FA("
        ",1),lFA=FA('
        loading...
        '),cFA=FA("
        ");function CFA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"readOnly",9),o=N(e,"mainMenuBar",9),a=N(e,"statusBar",9),r=N(e,"askToFormat",9),s=N(e,"externalContent",9),g=N(e,"externalSelection",9),l=N(e,"history",9),C=N(e,"indentation",9),I=N(e,"tabSize",9),d=N(e,"escapeUnicodeCharacters",9),B=N(e,"parser",9),E=N(e,"validator",9),Q=N(e,"validationParser",9),f=N(e,"onChange",9),b=N(e,"onChangeMode",9),S=N(e,"onSelect",9),M=N(e,"onUndo",9),D=N(e,"onRedo",9),F=N(e,"onError",9),_=N(e,"onFocus",9),U=N(e,"onBlur",9),J=N(e,"onRenderMenu",9),j=N(e,"onSortModal",9),AA=N(e,"onTransformModal",9),O=Cr("jsoneditor:TextMode"),DA={key:"Mod-i",run:Qe,shift:xA,preventDefault:!0},P=typeof window>"u";O("isSSR:",P);var aA,iA=IA(void 0,!0),BA=IA(void 0,!0),oA=IA(void 0,!0),sA=IA(!1,!0),hA=IA(r(),!0),YA=IA([],!0),ee=IA(!1,!0),UA=IA(0,!0),mA=IA(0,!0),KA=null,Pe=new F0,Je=new F0,HA=new F0,uA=new F0,ZA=new F0,QA=s(),WA=IA(DL(QA,C(),B()),!0),MA=hg.define(),be=null;function LA(){if(!be||be.length===0)return!1;var vA=be[0].startState,VA=be[be.length-1].state,me=be.map(SA=>SA.changes).reduce((SA,ae)=>SA.compose(ae)),dA={type:"text",undo:{changes:me.invert(vA.doc).toJSON(),selection:ra(vA.selection)},redo:{changes:me.toJSON(),selection:ra(VA.selection)}};return O("add history item",dA),l().add(dA),be=null,!0}var pA=IA(d(),!0);is(Tt(function*(){if(!P)try{aA=(function(vA){var{target:VA,initialText:me,readOnly:dA,indentation:SA}=vA;O("Create CodeMirror editor",{readOnly:dA,indentation:SA});var ae=(function(it,st){return iL(it)?it.ranges.every(bt=>bt.anchor{R(oA,it.state),it.docChanged&&(it.transactions.some(st=>!!st.annotation(MA))||(be=[...be??[],it]),Zo()),it.selectionSet&&Xo()}),atA(),ItA({top:!0}),ii.lineWrapping,Je.of(er.readOnly.of(dA)),uA.of(er.tabSize.of(I())),HA.of(ko(SA)),ZA.of(ii.theme({},{dark:Zi()}))]});return aA=new ii({state:xe,parent:VA}),ae&&aA.dispatch(aA.state.update({selection:ae.main,scrollIntoView:!0})),aA})({target:c(iA),initialText:Do(c(WA),c(sA))?"":c(A).escapeValue(c(WA)),readOnly:n(),indentation:C()})}catch(vA){console.error(vA)}})),Hl(()=>{wo(),aA&&(O("Destroy CodeMirror editor"),aA.destroy()),ei()});var Ft=II(),ht=II();function Ee(){aA&&(O("focus"),aA.focus())}function Kt(vA,VA){if(aA)try{(function(){var me=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],dA=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],SA=aA.state,ae=SA.doc.length,xe=UF(SA,ae,1/0);if(xe){var it=[];if(me.length===0)it=ut(xe,SA,void 0,dA);else{var{from:st}=q_(c(A).escapeValue(c(WA)),me);st!==void 0&&st!==0&&(it=ut(xe,SA,st,dA))}it.length>0&&(function(bt){Me.apply(this,arguments)})(it)}})(vA,VA)}catch(me){F()(me)}}function Ye(){return TF.of((vA,VA,me)=>{var dA=UF(vA,vA.doc.length,1/0);if(!dA||dA.lengthme)){if(SA&&xe.from=VA&&st.to>me&&(SA=st)}}}return SA})}function ze(vA){var VA=vA.lastChild;return VA&&VA.to==vA.to&&VA.type.isError}function ut(vA,VA,me){var dA=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],SA=[],ae=new Set;return vA.iterate({enter(xe){if(me===void 0||xe.from>=me){var it=FQ(VA,xe.from,xe.to);if(it){var st="".concat(it.from,"-").concat(it.to);if(!ae.has(st))if(dA)SA.push({from:it.from,to:it.to}),ae.add(st);else{var bt=SA.some(Kn=>Kn.from<=it.from&&Kn.to>=it.to);bt||(SA.push({from:it.from,to:it.to}),ae.add(st))}}}}}),SA}function Me(){return Me=Tt(function*(vA){if(vA.length!==0){var VA=vA.length>5e3;VA&&(R(ee,!0),R(UA,0),R(mA,vA.length),KA=new AbortController);var me=dA=>new Promise(SA=>{var ae;VA&&(ae=KA)!==null&&ae!==void 0&&ae.signal.aborted?SA():requestAnimationFrame(()=>{var xe=Math.min(dA+100,vA.length),it=vA.slice(dA,xe);aA.dispatch({effects:it.map(st=>GQ.of({from:st.from,to:st.to}))}),VA&&R(UA,xe),xe1&&arguments[1]!==void 0?arguments[1]:kL;if(aA)try{if(vA&&vA.length>0){var{from:me}=q_(c(A).escapeValue(c(WA)),vA);me!==void 0&&(aA.dispatch({selection:{anchor:me,head:me}}),HF(aA))}else zF(aA);VA?.(vA)}catch(dA){F()(dA)}}function z(){Y([],()=>!0)}function nA(){Kt([],!0)}var rA=!1;function NA(vA){return Ie(vA,!1)}function Ie(vA,VA){O("handlePatch",vA,VA);var me=B().parse(c(WA)),dA=lg(me,vA),SA=cw(me,vA);return ci({text:B().stringify(dA,null,C())},VA,!1),{json:dA,previousJson:me,undo:SA,redo:vA}}function Qe(){if(O("format"),n())return!1;try{var vA=B().parse(c(WA));return ci({text:B().stringify(vA,null,C())},!0,!1),R(hA,r()),!0}catch(VA){F()(VA)}return!1}function xA(){if(O("compact"),n())return!1;try{var vA=B().parse(c(WA));return ci({text:B().stringify(vA)},!0,!1),R(hA,!1),!0}catch(VA){F()(VA)}return!1}function _A(){if(O("repair"),!n())try{ci({text:ml(c(WA))},!0,!1),R(re,AL),R(di,void 0)}catch(vA){F()(vA)}}function Et(){var vA;if(!n())try{var VA=B().parse(c(WA));rA=!0,j()({id:Ft,json:VA,rootPath:[],onSort:(vA=Tt(function*(me){var{operations:dA}=me;O("onSort",dA),Ie(dA,!0)}),function(me){return vA.apply(this,arguments)}),onClose:()=>{rA=!1,Ee()}})}catch(me){F()(me)}}function et(vA){var{id:VA,rootPath:me,onTransform:dA,onClose:SA}=vA;try{var ae=B().parse(c(WA));rA=!0,AA()({id:VA||ht,json:ae,rootPath:me||[],onTransform:xe=>{dA?dA({operations:xe,json:ae,transformedJson:lg(ae,xe)}):(O("onTransform",xe),Ie(xe,!0))},onClose:()=>{rA=!1,Ee(),SA&&SA()}})}catch(xe){F()(xe)}}function Te(){n()||et({rootPath:[]})}function Le(){aA&&(c(iA)&&c(iA).querySelector(".cm-search")?Ey(aA):By(aA))}function si(){if(n())return!1;wo();var vA=l().undo();return O("undo",vA),fiA(vA)?(aA.dispatch({annotations:MA.of("undo"),changes:Vr.fromJSON(vA.undo.changes),selection:de.fromJSON(vA.undo.selection),scrollIntoView:!0}),!0):(M()(vA),!1)}function gn(){if(n())return!1;wo();var vA=l().redo();return O("redo",vA),fiA(vA)?(aA.dispatch({annotations:MA.of("redo"),changes:Vr.fromJSON(vA.redo.changes),selection:de.fromJSON(vA.redo.selection),scrollIntoView:!0}),!0):(D()(vA),!1)}function dn(){R(sA,!0),ci(s(),!0,!0)}function _e(){b()(ba.tree)}function Wi(){Yo()}function ui(vA){O("select validation error",vA);var{from:VA,to:me}=_t(vA);VA!==void 0&&me!==void 0&&(Mi(VA,me),Ee())}function Mi(vA,VA){O("setSelection",{anchor:vA,head:VA}),aA&&aA.dispatch(aA.state.update({selection:{anchor:vA,head:VA},scrollIntoView:!0}))}function zi(vA,VA){if(VA.state.selection.ranges.length===1){var me=VA.state.selection.ranges[0],dA=c(WA).slice(me.from,me.to);if(dA==="{"||dA==="["){var SA=OL.default.parse(c(WA)),ae=Object.keys(SA.pointers).find(it=>{var st;return((st=SA.pointers[it].value)===null||st===void 0?void 0:st.pos)===me.from}),xe=SA.pointers[ae];ae&&xe&&xe.value&&xe.valueEnd&&(O("pointer found, selecting inner contents of path:",ae,xe),Mi(xe.value.pos+1,xe.valueEnd.pos-1))}}}function vt(){return PeA(ln,{delay:300})}function Zi(){return!!c(iA)&&getComputedStyle(c(iA)).getPropertyValue("--jse-theme").includes("dark")}function _t(vA){var{path:VA,message:me,severity:dA}=vA,{line:SA,column:ae,from:xe,to:it}=q_(c(A).escapeValue(c(WA)),VA);return{path:VA,line:SA,column:ae,from:xe,to:it,message:me,severity:dA,actions:[]}}function L(vA,VA){var{line:me,column:dA,position:SA,message:ae}=vA;return{path:[],line:me,column:dA,from:SA,to:SA,severity:Jc.error,message:ae,actions:VA&&!n()?[{name:"Auto repair",apply:()=>_A()}]:void 0}}function Ct(vA){return{from:vA.from||0,to:vA.to||0,message:vA.message||"",actions:vA.actions,severity:vA.severity}}function ci(vA,VA,me){var dA=DL(vA,C(),B()),SA=!Qi(vA,QA),ae=QA;O("setCodeMirrorContent",{isChanged:SA,emitChange:VA,forceUpdate:me}),aA&&(SA||me)&&(QA=vA,R(WA,dA),Do(c(WA),c(sA))||aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(WA))}}),LA(),SA&&VA&&ha(QA,ae))}function Bn(vA){return iL(vA)?de.fromJSON(vA):void 0}function En(){return qn.apply(this,arguments)}function qn(){return qn=Tt(function*(){O("refresh"),yield(function(){return Co.apply(this,arguments)})()}),qn.apply(this,arguments)}function Yo(){if(aA){var vA=aA?c(A).unescapeValue(aA.state.doc.toString()):"",VA=vA!==c(WA);if(O("onChangeCodeMirrorValue",{isChanged:VA}),VA){var me=QA;R(WA,vA),QA={text:c(WA)},LA(),ha(QA,me),Mo(),Xo()}}}function Co(){return(Co=Tt(function*(){if(Mo(),aA){var vA=Zi();return O("updateTheme",{dark:vA}),aA.dispatch({effects:[ZA.reconfigure(ii.theme({},{dark:vA}))]}),new Promise(VA=>setTimeout(VA))}return Promise.resolve()})).apply(this,arguments)}function ko(vA){var VA=xd.of(typeof vA=="number"?" ".repeat(vA):vA);return vA===" "?[VA]:[VA,oFA]}QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(BA)),hasFocus:()=>rA&&document.hasFocus()||tG(c(BA)),onFocus:_(),onBlur:()=>{wo(),U()()}});var Zo=qE(Yo,300);function wo(){Zo.flush()}function ha(vA,VA){f()&&f()(vA,VA,{contentErrors:Qn(),patchResult:void 0})}function Xo(){S()(ra(c(oA).selection))}function ra(vA){return ye({type:no.text},vA.toJSON())}function Do(vA,VA){return!!vA&&vA.length>X_&&!VA}var re=IA(AL,!0),di=IA(void 0,!0);function ln(){if(Do(c(WA),c(sA)))return[];var vA=Qn();if(uiA(vA)){var{parseError:VA,isRepairable:me}=vA;return[Ct(L(VA,me))]}return RSA(vA)?vA.validationErrors.map(_t).map(Ct):[]}function Qn(){O("validate:start"),wo();var vA=To(c(A).escapeValue(c(WA)),E(),B(),Q());return uiA(vA)?(R(re,vA.isRepairable?diA:"invalid"),R(di,vA.parseError),R(YA,[])):(R(re,AL),R(di,void 0),R(YA,vA?.validationErrors||[])),O("validate:end"),vA}var To=ZE(ARA);function Ma(){c(di)&&(function(vA){O("select parse error",vA);var VA=L(vA,!1);Mi(VA.from!=null?VA.from:0,VA.to!=null?VA.to:0),Ee()})(c(di))}var wi={icon:AV,text:"Show me",title:"Move to the parse error location",onClick:Ma};RA(()=>G(d()),()=>{R(A,AG({escapeControlCharacters:!1,escapeUnicodeCharacters:d()}))}),RA(()=>G(s()),()=>{ci(s(),!1,!1)}),RA(()=>G(g()),()=>{(function(vA){if(iL(vA)){var VA=Bn(vA);!aA||!VA||c(oA)&&c(oA).selection.eq(VA)||(O("applyExternalSelection",VA),aA.dispatch({selection:VA}))}})(g())}),RA(()=>G(E()),()=>{(function(vA){O("updateLinter",vA),aA&&aA.dispatch({effects:Pe.reconfigure(vt())})})(E())}),RA(()=>G(C()),()=>{(function(vA){aA&&(O("updateIndentation",vA),aA.dispatch({effects:HA.reconfigure(ko(vA))}))})(C())}),RA(()=>G(I()),()=>{(function(vA){aA&&(O("updateTabSize",vA),aA.dispatch({effects:uA.reconfigure(er.tabSize.of(vA))}))})(I())}),RA(()=>G(n()),()=>{(function(vA){aA&&(O("updateReadOnly",vA),aA.dispatch({effects:[Je.reconfigure(er.readOnly.of(vA))]}))})(n())}),RA(()=>(c(pA),G(d())),()=>{c(pA)!==d()&&(R(pA,d()),O("forceUpdateText",{escapeUnicodeCharacters:d()}),aA&&aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(WA))}}))}),RA(()=>(c(re),G(n()),SC),()=>{R(i,c(re)!==diA||n()?[wi]:[{icon:SC,text:"Auto repair",title:"Automatically repair JSON",onClick:_A},wi])}),kn();var Io={focus:Ee,collapse:Kt,expand:Y,patch:NA,handlePatch:Ie,openTransformModal:et,refresh:En,flush:wo,validate:Qn};Ai(!0);var nr,yo=cFA(),Pa=CA(yo),Gn=vA=>{var VA=tt(()=>(c(WA),EA(()=>c(WA).length===0))),me=tt(()=>!c(VA)),dA=tt(()=>!c(VA)),SA=tt(()=>!c(VA)),ae=tt(()=>!c(VA)),xe=tt(()=>!c(VA)),it=tt(()=>!c(VA));(function(st,bt){St(bt,!1);var Kn=IA(void 0,!0),Ri=N(bt,"readOnly",9,!1),Ji=N(bt,"onExpandAll",9),Vt=N(bt,"onCollapseAll",9),Ni=N(bt,"onFormat",9),ka=N(bt,"onCompact",9),Lt=N(bt,"onSort",9),gt=N(bt,"onTransform",9),Fi=N(bt,"onToggleSearch",9),Oi=N(bt,"onUndo",9),Vn=N(bt,"onRedo",9),hn=N(bt,"canExpandAll",9),Mt=N(bt,"canCollapseAll",9),sa=N(bt,"canUndo",9),Ho=N(bt,"canRedo",9),u=N(bt,"canFormat",9),y=N(bt,"canCompact",9),x=N(bt,"canSort",9),H=N(bt,"canTransform",9),k=N(bt,"onRenderMenu",9),T=IA(void 0,!0),eA=IA(void 0,!0),gA={type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:Fi()},wA=IA(void 0,!0);RA(()=>(G(Ji()),G(hn())),()=>{R(T,{type:"button",icon:XoA,title:"Expand all",className:"jse-expand-all",onClick:Ji(),disabled:!hn()})}),RA(()=>(G(Vt()),G(Mt())),()=>{R(eA,{type:"button",icon:$oA,title:"Collapse all",className:"jse-collapse-all",onClick:Vt(),disabled:!Mt()})}),RA(()=>(G(Ri()),c(T),c(eA),G(Ni()),G(u()),G(ka()),G(y()),G(Lt()),G(x()),G(gt()),G(H()),G(Oi()),G(sa()),G(Vn()),G(Ho())),()=>{R(wA,Ri()?[c(T),c(eA),{type:"separator"},gA,{type:"space"}]:[c(T),c(eA),{type:"separator"},{type:"button",icon:ViA,title:"Format JSON: add proper indentation and new lines (Ctrl+I)",className:"jse-format",onClick:Ni(),disabled:Ri()||!u()},{type:"button",icon:tNA,title:"Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)",className:"jse-compact",onClick:ka(),disabled:Ri()||!y()},{type:"separator"},{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Lt(),disabled:Ri()||!x()},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:gt(),disabled:Ri()||!H()},gA,{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Oi(),disabled:!sa()},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Vn(),disabled:!Ho()},{type:"space"}])}),RA(()=>(G(k()),c(wA)),()=>{R(Kn,k()(c(wA))||c(wA))}),kn(),Ai(!0),xv(st,{get items(){return c(Kn)}}),xt()})(vA,{get readOnly(){return n()},onExpandAll:z,onCollapseAll:nA,onFormat:Qe,onCompact:xA,onSort:Et,onTransform:Te,onToggleSearch:Le,onUndo:si,onRedo:gn,get canExpandAll(){return c(me)},get canCollapseAll(){return c(dA)},get canFormat(){return c(SA)},get canCompact(){return c(ae)},get canSort(){return c(xe)},get canTransform(){return c(it)},get canUndo(){return G(l()),EA(()=>l().canUndo)},get canRedo(){return G(l()),EA(()=>l().canRedo)},get onRenderMenu(){return J()}})};TA(Pa,vA=>{o()&&vA(Gn)});var xi=bA(Pa,2),Pt=vA=>{var VA=aFA(),me=bA(CA(VA),2),dA=CA(me),SA=bA(me,2);ve(()=>Yl(dA,"width: ".concat(c(mA)>0?c(UA)/c(mA)*100:0,"%"))),ue("click",SA,ei),lA(vA,VA)};TA(xi,vA=>{c(ee)&&vA(Pt)});var Sn=bA(xi,2),Bo=vA=>{var VA,me=tt(()=>(c(WA),c(sA),EA(()=>Do(c(WA),c(sA))))),dA=gFA(),SA=At(dA);Jo(SA,bt=>R(iA,bt),()=>c(iA));var ae=bA(SA,2),xe=bt=>{var Kn=rFA(),Ri=At(Kn),Ji=tt(()=>(G(Wy),G(X_),c(WA),EA(()=>"The JSON document is larger than ".concat(Wy(X_),", ")+"and may crash your browser when loading it in text mode. Actual size: ".concat(Wy(c(WA).length),"."))));tl(Ri,{get icon(){return BI},type:"error",get message(){return c(Ji)},actions:[{text:"Open anyway",title:"Open the document in text mode. This may freeze or crash your browser.",onClick:dn},{text:"Open in tree mode",title:"Open the document in tree mode. Tree mode can handle large documents.",onClick:_e},{text:"Cancel",title:"Cancel opening this large document.",onClick:Wi}],onClose:Ee});var Vt=CA(bA(Ri,2));ve(Ni=>Rt(Vt,Ni),[()=>(G(XC),c(WA),G(nv),EA(()=>XC(c(WA)||"",nv)))]),lA(bt,Kn)};TA(ae,bt=>{c(me)&&bt(xe)});var it=bA(ae,2),st=bt=>{var Kn=sFA(),Ri=At(Kn),Ji=gt=>{(function(Fi,Oi){St(Oi,!1);var Vn=N(Oi,"editorState",8),hn=IA(),Mt=IA(),sa=IA(),Ho=IA(),u=IA();RA(()=>G(Vn()),()=>{var wA;R(hn,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.main)===null||wA===void 0?void 0:wA.head)}),RA(()=>(c(hn),G(Vn())),()=>{var wA;R(Mt,c(hn)!==void 0?(wA=Vn())===null||wA===void 0||(wA=wA.doc)===null||wA===void 0?void 0:wA.lineAt(c(hn)):void 0)}),RA(()=>c(Mt),()=>{R(sa,c(Mt)!==void 0?c(Mt).number:void 0)}),RA(()=>(c(Mt),c(hn)),()=>{R(Ho,c(Mt)!==void 0&&c(hn)!==void 0?c(hn)-c(Mt).from+1:void 0)}),RA(()=>G(Vn()),()=>{var wA;R(u,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.ranges)===null||wA===void 0?void 0:wA.reduce((Ae,oe)=>Ae+oe.to-oe.from,0))}),kn(),Ai();var y=tFA(),x=CA(y),H=wA=>{var Ae=$NA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Line: ".concat((Be=c(sa))!==null&&Be!==void 0?Be:""))}),lA(wA,Ae)};TA(x,wA=>{c(sa)!==void 0&&wA(H)});var k=bA(x,2),T=wA=>{var Ae=AFA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Column: ".concat((Be=c(Ho))!==null&&Be!==void 0?Be:""))}),lA(wA,Ae)};TA(k,wA=>{c(Ho)!==void 0&&wA(T)});var eA=bA(k,2),gA=wA=>{var Ae=eFA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Selection: ".concat((Be=c(u))!==null&&Be!==void 0?Be:""," characters"))}),lA(wA,Ae)};TA(eA,wA=>{c(u)!==void 0&&c(u)>0&&wA(gA)}),lA(Fi,y),xt()})(gt,{get editorState(){return c(oA)}})};TA(Ri,gt=>{a()&>(Ji)});var Vt=bA(Ri,2),Ni=gt=>{tl(gt,{type:"error",get icon(){return BI},get message(){return c(di),EA(()=>c(di).message)},get actions(){return c(i)},onClick:Ma,onClose:Ee})};TA(Vt,gt=>{c(di)&>(Ni)});var ka=bA(Vt,2),Lt=gt=>{var Fi=tt(()=>[{icon:ViA,text:"Format",title:"Format JSON: add proper indentation and new lines (Ctrl+I)",onClick:Qe},{icon:c3,text:"No thanks",title:"Close this message",onClick:()=>R(hA,!1)}]);tl(gt,{type:"success",message:"Do you want to format the JSON?",get actions(){return c(Fi)},onClose:Ee})};TA(ka,gt=>{c(di),c(hA),G(CiA),c(WA),EA(()=>!c(di)&&c(hA)&&CiA(c(WA)))&>(Lt)}),hG(bA(ka,2),{get validationErrors(){return c(YA)},selectError:ui}),lA(bt,Kn)};TA(it,bt=>{c(me)||bt(st)}),ve(()=>VA=$t(SA,1,"jse-contents svelte-k2b9e6",null,VA,{"jse-hidden":c(me)})),lA(vA,dA)},So=vA=>{lA(vA,lFA())};return TA(Sn,vA=>{P?vA(So,!1):vA(Bo)}),Jo(yo,vA=>R(BA,vA),()=>c(BA)),ve(()=>nr=$t(yo,1,"jse-text-mode svelte-k2b9e6",null,nr,{"no-main-menu":!o()})),lA(t,yo),Ot(e,"focus",Ee),Ot(e,"collapse",Kt),Ot(e,"expand",Y),Ot(e,"patch",NA),Ot(e,"handlePatch",Ie),Ot(e,"openTransformModal",et),Ot(e,"refresh",En),Ot(e,"flush",wo),Ot(e,"validate",Qn),xt(Io)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-inline-value.svelte-1jv89ui { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - line-height: var(--jse-line-height, calc(1em + 4px)); - border: none; - padding: 0 calc(0.5 * var(--jse-padding, 10px)); - background: transparent; - color: inherit; - cursor: inherit; -} -.jse-inline-value.jse-highlight.svelte-1jv89ui { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-inline-value.jse-highlight.jse-active.svelte-1jv89ui { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -}`);var IFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-column-header.svelte-5pxwfq { - background: none; - border: none; - font-family: inherit; - font-size: inherit; - color: inherit; - display: flex; - gap: var(--jse-padding, 10px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); - width: 100%; -} -.jse-column-header.svelte-5pxwfq:hover { - background: var(--jse-table-header-background-highlight, #e8e8e8); -} -.jse-column-header.svelte-5pxwfq:not(.jse-column-header.jse-readonly) { - cursor: pointer; -} -.jse-column-header.svelte-5pxwfq span.jse-column-sort-icon:where(.svelte-5pxwfq) { - height: 1em; -}`);var dFA=FA(''),BFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-table-mode-welcome.svelte-1b9gnk8 { - flex: 1; - display: flex; - flex-direction: column; - overflow: auto; - align-items: center; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode-welcome.svelte-1b9gnk8:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-before:where(.svelte-1b9gnk8) { - flex: 1; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) { - display: flex; - flex-direction: column; - gap: var(--jse-padding, 10px); - max-width: 400px; - margin: 2em var(--jse-padding, 10px); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-arrays-info:where(.svelte-1b9gnk8) { - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) { - display: flex; - align-items: center; - gap: var(--jse-padding, 10px); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) { - flex: 1; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) .jse-nested-property-count:where(.svelte-1b9gnk8) { - opacity: 0.5; - white-space: nowrap; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8) { - text-align: left; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-after:where(.svelte-1b9gnk8) { - flex: 2; -}`);var EFA=FA(`An empty document cannot be opened in table mode. You can go to tree mode instead, or paste - a JSON Array using Ctrl+V.`,1),QFA=FA(''),hFA=FA('
        '),uFA=FA('
        ');function fFA(t,e){St(e,!0);var A=Dg(()=>e.json?(function(E){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,f=[];return(function b(S,M){ia(S)&&M.length{b(S[D],M.concat(D))}),qo(S)&&f.push(M)})(E,[]),f})(e.json).slice(0,99).filter(E=>E.length>0):[]),i=Dg(()=>!qi(c(A))),n=Dg(()=>e.json===void 0&&(e.text===""||e.text===void 0)),o=Dg(()=>c(i)?"Object with nested arrays":c(n)?"An empty document":ia(e.json)?"An object":qo(e.json)?"An empty array":"A ".concat($L(e.json,e.parser))),a=uFA();a.__click=()=>e.onClick();var r=bA(CA(a),2),s=CA(r),g=CA(s),l=bA(s,2),C=CA(l),I=E=>{lA(E,ur(`An object cannot be opened in table mode. You can open a nested array instead, or open the - document in tree mode.`))},d=E=>{var Q=bi(),f=At(Q),b=M=>{lA(M,EFA())},S=M=>{var D=ur();ve(()=>{var F;return Rt(D,"".concat((F=c(o))!==null&&F!==void 0?F:""," cannot be opened in table mode. You can open the document in tree mode instead."))}),lA(M,D)};TA(f,M=>{c(n)&&!e.readOnly?M(b):M(S,!1)},!0),lA(E,Q)};TA(C,E=>{c(i)?E(I):E(d,!1)});var B=bA(l,2);Qa(B,17,()=>c(A),Na,(E,Q)=>{var f=Dg(()=>(function(j){return je(e.json,j).length})(c(Q))),b=hFA(),S=CA(b),M=CA(S),D=CA(bA(M)),F=bA(S,2);F.__click=()=>e.openJSONEditorModal(c(Q));var _=CA(F),U=bA(F,2),J=j=>{var AA=QFA();AA.__click=()=>e.extractPath(c(Q)),lA(j,AA)};TA(U,j=>{e.readOnly||j(J)}),ve(j=>{var AA;Rt(M,'"'.concat(j??"",'" ')),Rt(D,"(".concat((AA=c(f))!==null&&AA!==void 0?AA:""," ").concat(c(f)!==1?"items":"item",")")),Rt(_,e.readOnly?"View":"Edit")},[()=>vg(c(Q))]),lA(E,b)}),bA(B,2).__click=()=>e.onChangeMode(ba.tree),ve(()=>Rt(g,c(o))),lA(t,a),xt()}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-column-header.svelte-1wgrwv3 { - background: none; - border: none; - font-family: inherit; - font-size: inherit; - color: inherit; - display: flex; - gap: var(--jse-padding, 10px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); - width: 100%; -} -.jse-column-header.svelte-1wgrwv3:hover { - background: var(--jse-table-header-background-highlight, #e8e8e8); -} -.jse-column-header.svelte-1wgrwv3:not(.jse-column-header.jse-readonly) { - cursor: pointer; -}`);var mFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-table-mode.svelte-1p86y3c { - flex: 1; - display: flex; - flex-direction: column; - position: relative; - background: var(--jse-background-color, #fff); - min-width: 0; - min-height: 0; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-text-color, #4d4d4d); - line-height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-table-mode.no-main-menu.svelte-1p86y3c { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-search-box-container:where(.svelte-1p86y3c) { - position: relative; - height: 0; - top: calc(var(--jse-line-height, calc(1em + 4px)) + 2 * var(--jse-padding, 10px)); - margin-right: calc(var(--jse-padding, 10px) + 20px); - margin-left: var(--jse-padding, 10px); - text-align: right; - z-index: 3; -} -.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) { - position: fixed; - right: 0; - top: 0; - width: 0; - height: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) .jse-hidden-input:where(.svelte-1p86y3c) { - width: 0; - height: 0; - padding: 0; - border: 0; - outline: none; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) { - flex: 1; - align-items: flex-start; - flex-direction: column; - display: flex; - overflow: auto; - overflow-anchor: none; - scrollbar-gutter: stable; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) { - border-collapse: collapse; - border-spacing: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-start-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c), -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { - margin: 0; - padding: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-search-box-background:where(.svelte-1p86y3c) { - background: var(--jse-table-header-background, #f5f5f5); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { - padding-bottom: var(--jse-padding, 10px); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c):hover { - background-color: var(--jse-table-row-odd-background, rgba(0, 0, 0, 0.05)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) { - padding: 0 var(--jse-padding, 10px) 0 0; - vertical-align: top; - white-space: nowrap; - height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c), .jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { - font-weight: normal; - text-align: left; - color: var(--jse-text-readonly, #8d8d8d); - background: var(--jse-table-header-background, #f5f5f5); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) { - padding: 0; - position: sticky; - top: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) .jse-table-root-error:where(.svelte-1p86y3c) { - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { - padding: 0 var(--jse-padding, 10px) 0 calc(0.5 * var(--jse-padding, 10px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c) { - display: inline-block; - cursor: var(--jse-contents-cursor, pointer); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c):hover { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer.jse-selected-value:where(.svelte-1p86y3c) { - background: var(--jse-selection-background-color, #d3d3d3); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-context-menu-anchor:where(.svelte-1p86y3c) { - display: inline-flex; - position: relative; - vertical-align: top; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) { - align-items: unset; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading-space:where(.svelte-1p86y3c) { - flex: 1; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading:where(.svelte-1p86y3c) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -}`);var pFA=FA('
        '),wFA=FA(''),DFA=FA(''),yFA=FA(' '),vFA=FA('
        '),bFA=FA('
        '),MFA=FA(''),kFA=FA(''),SFA=FA('
        ',1),xFA=FA(" ",1),RFA=FA(' ',1),NFA=FA('
        loading...
        '),FFA=FA('
        ',1);function _FA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=Cr("jsoneditor:TableMode"),{openAbsolutePopup:a,closeAbsolutePopup:r}=r1("absolute-popup"),s=joA(),g=II(),l=II(),C=typeof window>"u";o("isSSR:",C);var I=N(e,"readOnly",9),d=N(e,"externalContent",9),B=N(e,"externalSelection",9),E=N(e,"history",9),Q=N(e,"truncateTextSize",9),f=N(e,"mainMenuBar",9),b=N(e,"escapeControlCharacters",9),S=N(e,"escapeUnicodeCharacters",9),M=N(e,"flattenColumns",9),D=N(e,"parser",9),F=N(e,"parseMemoizeOne",9),_=N(e,"validator",9),U=N(e,"validationParser",9),J=N(e,"indentation",9),j=N(e,"onChange",9),AA=N(e,"onChangeMode",9),O=N(e,"onSelect",9),DA=N(e,"onUndo",9),P=N(e,"onRedo",9),aA=N(e,"onRenderValue",9),iA=N(e,"onRenderMenu",9),BA=N(e,"onRenderContextMenu",9),oA=N(e,"onFocus",9),sA=N(e,"onBlur",9),hA=N(e,"onSortModal",9),YA=N(e,"onTransformModal",9),ee=N(e,"onJSONEditorModal",9),UA=IA(void 0,!0),mA=IA(void 0,!0),KA=IA(void 0,!0),Pe=IA(void 0,!0),Je=IA(void 0,!0);QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(mA)),hasFocus:()=>Me&&document.hasFocus()||tG(c(mA)),onFocus:()=>{ei=!0,oA()&&oA()()},onBlur:()=>{ei=!1,sA()&&sA()()}});var HA,uA=IA(void 0,!0),ZA=IA(void 0,!0),QA=IA(void 0,!0),WA=IA(void 0,!0),MA=IA(void 0,!0),be=IA(void 0,!0),LA=IA(!1,!0),pA=IA(!1,!0);function Ft(k){R(be,(HA=k)?FoA(c(uA),HA.items):void 0)}function ht(k){return Ee.apply(this,arguments)}function Ee(){return(Ee=Tt(function*(k){R(_A,void 0),yield En(k)})).apply(this,arguments)}function Kt(){R(LA,!1),R(pA,!1),L()}var Ye=IA(1e4,!0),ze=IA([],!0),ut=IA(void 0,!0),Me=!1,ei=!1,Y=IA(!1,!0),z=IA({},!0),nA=IA(600,!0),rA=IA(0,!0),NA=18;function Ie(k){R(_A,k)}function Qe(k){c(_A)&&k!==void 0&&(br(k,jd(c(_A)))&&br(k,ct(c(_A)))||(o("clearing selection: path does not exist anymore",c(_A)),R(_A,void 0)))}var xA=IA(c(uA)!==void 0?ML({json:c(uA)}):void 0,!0),_A=IA(Zf(B())?B():void 0,!0),Et=IA(void 0,!0),et=IA(!1,!0);function Te(k){if(!I()){o("onSortByHeader",k);var T=k.sortDirection===Kl.desc?-1:1;Mi(AaA(c(uA),[],k.path,T),(eA,gA)=>({state:gA,sortedColumn:k}))}}is(()=>{c(_A)&&Yo(ct(c(_A)))});var Le=IA(void 0,!0);function si(k){if(k.json!==void 0||k.text!==void 0){var T=c(uA)!==void 0&&k.json!==void 0;E().add({type:"tree",undo:{patch:T?[{op:"replace",path:"",value:k.json}]:void 0,json:k.json,text:k.text,documentState:k.documentState,textIsRepaired:k.textIsRepaired,selection:z0(k.selection),sortedColumn:k.sortedColumn},redo:{patch:T?[{op:"replace",path:"",value:c(uA)}]:void 0,json:c(uA),text:c(ZA),documentState:c(xA),textIsRepaired:c(et),selection:z0(c(_A)),sortedColumn:c(Et)}})}}var gn=IA([],!0),dn=ZE(qoA);function _e(k,T,eA,gA){oh(()=>{var wA;try{wA=dn(k,T,eA,gA)}catch(Ae){wA=[{path:[],message:"Failed to validate: "+Ae.message,severity:Jc.warning}]}Qi(wA,c(gn))||(o("validationErrors changed:",wA),R(gn,wA))},wA=>o("validationErrors updated in ".concat(wA," ms")))}function Wi(){return o("validate"),c(QA)?{parseError:c(QA),isRepairable:!1}:(_e(c(uA),_(),D(),U()),qi(c(gn))?void 0:{validationErrors:c(gn)})}function ui(k,T){if(o("patch",k,T),c(uA)===void 0)throw new Error("Cannot apply patch: no JSON");var eA=c(uA),gA={json:void 0,text:c(ZA),documentState:c(xA),selection:z0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)},wA=NoA(c(uA),k),Ae=moA(c(uA),c(xA),k),oe=yNA(c(Et),k,c(ze)),Be=typeof T=="function"?T(Ae.json,Ae.documentState,c(_A)):void 0;return R(uA,Be?.json!==void 0?Be.json:Ae.json),R(xA,Be?.state!==void 0?Be.state:Ae.documentState),R(_A,Be?.selection!==void 0?Be.selection:c(_A)),R(Et,Be?.sortedColumn!==void 0?Be.sortedColumn:oe),R(ZA,void 0),R(et,!1),R(WA,void 0),R(MA,void 0),R(QA,void 0),E().add({type:"tree",undo:ye({patch:wA},gA),redo:{patch:k,json:void 0,text:void 0,documentState:c(xA),selection:z0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)}}),{json:c(uA),previousJson:eA,undo:wA,redo:k}}function Mi(k,T){o("handlePatch",k,T);var eA={json:c(uA),text:c(ZA)},gA=ui(k,T);return zi(eA,gA),gA}function zi(k,T){if((k.json!==void 0||k?.text!==void 0)&&j()){if(c(ZA)!==void 0){var eA={text:c(ZA),json:void 0};j()(eA,k,{contentErrors:Wi(),patchResult:T})}else if(c(uA)!==void 0){var gA={text:void 0,json:c(uA)};j()(gA,k,{contentErrors:Wi(),patchResult:T})}}}function vt(k){o("pasted json as text",k),R(WA,k)}function Zi(k){o("pasted multiline text",{pastedText:k}),R(MA,k)}function _t(k){var T=parseInt(k[0],10),eA=[String(T+1),...k.slice(1)];return br(c(uA),eA)?Ui(eA):Ui(k)}function L(){o("focus"),c(Pe)&&(c(Pe).focus(),c(Pe).select())}function Ct(k){R(rA,k.target.scrollTop)}function ci(){c(_A)||R(_A,(function(){if(qo(c(uA))&&!qi(c(uA))&&!qi(c(ze)))return Ui(["0",...c(ze)[0]])})())}function Bn(){if(c(et)&&c(uA)!==void 0){var k={json:c(uA),text:c(ZA)},T={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};R(ZA,void 0),R(et,!1),Qe(c(uA)),si(T),zi(k,void 0)}return{json:c(uA),text:c(ZA)}}function En(k){var{scrollToWhenVisible:T=!0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},eA=c(LA)?Uf:0,gA=ZiA(k,c(ze),z,NA),wA=gA-c(rA)+eA+NA,Ae=Co(k);if(o("scrollTo",{path:k,top:gA,scrollTop:c(rA),elem:Ae}),!c(KA))return Promise.resolve();var oe=c(KA).getBoundingClientRect();if(Ae&&!T){var Be=Ae.getBoundingClientRect();if(Be.bottom>oe.top&&Be.top{s(Ae,{container:c(KA),offset:He,duration:300,callback:()=>{qn(k),ke()}})}:ke=>{s(wA,{container:c(KA),offset:He,duration:300,callback:()=>{Mo(),qn(k),ke()}})})}function qn(k){var T=Co(k);if(T&&c(KA)){var eA=c(KA).getBoundingClientRect(),gA=T.getBoundingClientRect();if(gA.right>eA.right){var wA=gA.right-eA.right;$g(KA,c(KA).scrollLeft+=wA)}if(gA.leftHe){var ke=wA-He;$g(KA,c(KA).scrollTop+=ke)}if(gAW0(k.slice(1),Ae)),wA=gA?k.slice(0,1).concat(gA):k;return(T=(eA=c(KA))===null||eA===void 0?void 0:eA.querySelector('td[data-path="'.concat(qy(wA),'"]')))!==null&&T!==void 0?T:void 0}function ko(k){var T,{anchor:eA,left:gA,top:wA,width:Ae,height:oe,offsetTop:Be,offsetLeft:He,showTip:ke}=k,Ne=(function(fA){var{json:PA,documentState:Fe,selection:pe,readOnly:De,onEditValue:ot,onEditRow:jt,onToggleEnforceString:ki,onCut:xn,onCopy:Pi,onPaste:Eo,onRemove:Wt,onDuplicateRow:$o,onInsertBeforeRow:Wn,onInsertAfterRow:Aa,onRemoveRow:un}=fA,Gt=PA!==void 0,Xi=!!pe,Zt=PA!==void 0&&pe?je(PA,ct(pe)):void 0,mt=Gt&&(lo(pe)||cr(pe)||In(pe)),gi=!De&&Gt&&pe!==void 0&&rv(pe),ga=gi&&!aa(Zt),Zn=!De&&mt,ea=pe!==void 0&&P0(PA,Fe,ct(pe));return[{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"label",text:"Table cell:"},{type:"dropdown-button",main:{type:"button",onClick:()=>ot(),icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",disabled:!gi},width:"11em",items:[{type:"button",icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",onClick:()=>ot(),disabled:!gi},{type:"button",icon:ea?KS:YS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>ki(),disabled:!ga}]},{type:"dropdown-button",main:{type:"button",onClick:()=>xn(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!Zn},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>xn(!0),disabled:De||!mt},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>xn(!1),disabled:De||!mt}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Pi(!0),icon:xC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!mt},width:"12em",items:[{type:"button",icon:xC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Pi(!1),disabled:!mt},{type:"button",icon:xC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Pi(!1),disabled:!mt}]},{type:"button",onClick:()=>Eo(),icon:_S,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:De||!Xi},{type:"button",onClick:()=>Wt(),icon:Ww,text:"Remove",title:"Remove selected contents (Delete)",disabled:De||!mt}]},{type:"column",items:[{type:"label",text:"Table row:"},{type:"button",onClick:()=>jt(),icon:nd,text:"Edit row",title:"Edit the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>$o(),icon:GS,text:"Duplicate row",title:"Duplicate the current row (Ctrl+D)",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>Wn(),icon:ad,text:"Insert before",title:"Insert a row before the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>Aa(),icon:ad,text:"Insert after",title:"Insert a row after the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>un(),icon:Ww,text:"Remove row",title:"Remove current row",disabled:De||!Xi||!Gt}]}]}]})({json:c(uA),documentState:c(xA),selection:c(_A),readOnly:I(),onEditValue:ha,onEditRow:Xo,onToggleEnforceString:ra,onCut:nr,onCopy:Pa,onPaste:di,onRemove:xi,onDuplicateRow:Sn,onInsertBeforeRow:Bo,onInsertAfterRow:So,onRemoveRow:vA}),ni=(T=BA()(Ne))!==null&&T!==void 0?T:Ne;if(ni!==!1){var Un={left:gA,top:wA,offsetTop:Be,offsetLeft:He,width:Ae,height:oe,anchor:eA,closeOnOuterClick:!0,onClose:()=>{Me=!1,L()}};Me=!0;var q=a(laA,{tip:ke?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:ni,onRequestClose(){r(q),L()}},Un)}}function Zo(k){if(!gr(c(_A)))if(k&&(k.stopPropagation(),k.preventDefault()),k&&k.type==="contextmenu"&&k.target!==c(Pe))ko({left:k.clientX,top:k.clientY,width:A2,height:$C,showTip:!1});else{var T,eA=(T=c(KA))===null||T===void 0?void 0:T.querySelector(".jse-table-cell.jse-selected-value");if(eA)ko({anchor:eA,offsetTop:2,width:A2,height:$C,showTip:!1});else{var gA,wA=(gA=c(KA))===null||gA===void 0?void 0:gA.getBoundingClientRect();wA&&ko({top:wA.top+2,left:wA.left+2,width:A2,height:$C,showTip:!1})}}}function wo(k){ko({anchor:EoA(k.target,"BUTTON"),offsetTop:0,width:A2,height:$C,showTip:!0})}function ha(){if(!I()&&c(_A)){var k=ct(c(_A));aa(je(c(uA),k))?st(k):R(_A,Ui(k))}}function Xo(){!I()&&c(_A)&&st(ct(c(_A)).slice(0,1))}function ra(){if(!I()&&In(c(_A))){var k=c(_A).path,T=wt(k),eA=je(c(uA),k),gA=!P0(c(uA),c(xA),k),wA=gA?String(eA):Rh(String(eA),D());o("handleToggleEnforceString",{enforceString:gA,value:eA,updatedValue:wA}),Mi([{op:"replace",path:T,value:wA}],(Ae,oe)=>({state:yv(c(uA),oe,k,{type:"value",enforceString:gA})}))}}function Do(){return re.apply(this,arguments)}function re(){return(re=Tt(function*(){if(o("apply pasted json",c(WA)),c(WA)){var{onPasteAsJson:k}=c(WA);k(),setTimeout(L)}})).apply(this,arguments)}function di(){return ln.apply(this,arguments)}function ln(){return(ln=Tt(function*(){try{dA(yield navigator.clipboard.readText())}catch(k){console.error(k),R(Y,!0)}})).apply(this,arguments)}function Qn(){return To.apply(this,arguments)}function To(){return(To=Tt(function*(){o("apply pasted multiline text",c(MA)),c(MA)&&(dA(JSON.stringify(c(MA))),setTimeout(L))})).apply(this,arguments)}function Ma(){o("clear pasted json"),R(WA,void 0),L()}function wi(){o("clear pasted multiline text"),R(MA,void 0),L()}function Io(){AA()(ba.text)}function nr(k){return yo.apply(this,arguments)}function yo(){return(yo=Tt(function*(k){yield naA({json:c(uA),selection:c(_A),indentation:k?J():void 0,readOnly:I(),parser:D(),onPatch:Mi})})).apply(this,arguments)}function Pa(){return Gn.apply(this,arguments)}function Gn(){return Gn=Tt(function*(){var k=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(uA)!==void 0&&(yield oaA({json:c(uA),selection:c(_A),indentation:k?J():void 0,parser:D()}))}),Gn.apply(this,arguments)}function xi(){raA({json:c(uA),text:c(ZA),selection:c(_A),keepSelection:!0,readOnly:I(),onChange:j(),onPatch:Mi})}function Pt(k){I()||(o("extract",{path:k}),Mi(SoA(c(uA),Ui(k))))}function Sn(){(function(k){var{json:T,selection:eA,columns:gA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&eA&&ih(eA)){var{rowIndex:oe,columnIndex:Be}=Ll(ct(eA),gA);ys("duplicate row",{rowIndex:oe});var He=[String(oe)];Ae(koA(T,[He]),(ke,Ne)=>({state:Ne,selection:Ui(Kd({rowIndex:oe({state:Un,selection:Ui(Kd({rowIndex:He,columnIndex:Be},gA))}))}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:Mi})}function vA(){(function(k){var{json:T,selection:eA,columns:gA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&eA&&ih(eA)){var{rowIndex:oe,columnIndex:Be}=Ll(ct(eA),gA);ys("remove row",{rowIndex:oe}),Ae(gv([[String(oe)]]),(He,ke)=>{var Ne=oe0?oe-1:void 0,ni=Ne!==void 0?Ui(Kd({rowIndex:Ne,columnIndex:Be},gA)):void 0;return ys("remove row new selection",{rowIndex:oe,newRowIndex:Ne,newSelection:ni}),{state:ke,selection:ni}})}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:Mi})}function VA(){return(VA=Tt(function*(k){yield saA({char:k,selectInside:!1,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:Mi,onReplaceJson:SA,onSelect:Ie})})).apply(this,arguments)}function me(k){var T;k.preventDefault(),dA((T=k.clipboardData)===null||T===void 0?void 0:T.getData("text/plain"))}function dA(k){k!==void 0&&aaA({clipboardText:k,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:Mi,onChangeText:ae,onPasteMultilineText:Zi,openRepairModal:bt})}function SA(k,T){var eA={json:c(uA),text:c(ZA)},gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)},wA=Xg(k,c(xA)),Ae=typeof T=="function"?T(k,wA,c(_A)):void 0;R(uA,Ae?.json!==void 0?Ae.json:k),R(xA,Ae?.state!==void 0?Ae.state:wA),R(_A,Ae?.selection!==void 0?Ae.selection:c(_A)),R(Et,void 0),R(ZA,void 0),R(et,!1),R(QA,void 0),Qe(c(uA)),si(gA),zi(eA,void 0)}function ae(k,T){o("handleChangeText");var eA={json:c(uA),text:c(ZA)},gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};try{R(uA,F()(k)),R(xA,Xg(c(uA),c(xA))),R(ZA,void 0),R(et,!1),R(QA,void 0)}catch(Ae){try{R(uA,F()(ml(k))),R(xA,Xg(c(uA),c(xA))),R(ZA,k),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(ZA,k),R(et,!1),R(QA,c(ZA)!==""?uh(c(ZA),Ae.message||String(Ae)):void 0)}}if(typeof T=="function"){var wA=T(c(uA),c(xA),c(_A));R(uA,wA?.json!==void 0?wA.json:c(uA)),R(xA,wA?.state!==void 0?wA.state:c(xA)),R(_A,wA?.selection!==void 0?wA.selection:c(_A))}Qe(c(uA)),si(gA),zi(eA,void 0)}function xe(k){o("select validation error",k),R(_A,Ui(k.path)),En(k.path)}function it(k){if(c(uA)!==void 0){var{id:T,onTransform:eA,onClose:gA}=k,wA=k.rootPath||[];Me=!0,YA()({id:T||l,json:c(uA),rootPath:wA||[],onTransform:Ae=>{eA?eA({operations:Ae,json:c(uA),transformedJson:lg(c(uA),Ae)}):(o("onTransform",wA,Ae),Mi(Ae))},onClose:()=>{Me=!1,setTimeout(L),gA&&gA()}})}}function st(k){o("openJSONEditorModal",{path:k}),Me=!0,ee()({content:{json:je(c(uA),k)},path:k,onPatch:Mi,onClose:()=>{Me=!1,setTimeout(L)}})}function bt(k,T){R(Je,{text:k,onParse:eA=>lm(eA,gA=>gm(gA,D())),onRepair:roA,onApply:T,onClose:L})}function Kn(){(function(k){I()||c(uA)===void 0||(Me=!0,hA()({id:g,json:c(uA),rootPath:k,onSort:T=>{var{operations:eA,itemPath:gA,direction:wA}=T;o("onSort",eA,k,gA,wA),Mi(eA,(Ae,oe)=>({state:oe,sortedColumn:{path:gA,sortDirection:wA===-1?Kl.desc:Kl.asc}}))},onClose:()=>{Me=!1,setTimeout(L)}}))})([])}function Ri(){it({rootPath:[]})}function Ji(k){o("openFind",{findAndReplace:k}),R(LA,!1),R(pA,!1),Mo(),R(LA,!0),R(pA,k)}function Vt(){if(!I()&&E().canUndo){var k=E().undo();if(av(k)){var T={json:c(uA),text:c(ZA)};R(uA,k.undo.patch?lg(c(uA),k.undo.patch):k.undo.json),R(xA,k.undo.documentState),R(_A,k.undo.selection),R(Et,k.undo.sortedColumn),R(ZA,k.undo.text),R(et,k.undo.textIsRepaired),R(QA,void 0),o("undo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.undo.patch,undo:k.redo.patch}:void 0),L(),c(_A)&&En(ct(c(_A)),{scrollToWhenVisible:!1})}else DA()(k)}}function Ni(){if(!I()&&E().canRedo){var k=E().redo();if(av(k)){var T={json:c(uA),text:c(ZA)};R(uA,k.redo.patch?lg(c(uA),k.redo.patch):k.redo.json),R(xA,k.redo.documentState),R(_A,k.redo.selection),R(Et,k.redo.sortedColumn),R(ZA,k.redo.text),R(et,k.redo.textIsRepaired),R(QA,void 0),o("redo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.redo.patch,undo:k.undo.patch}:void 0),L(),c(_A)&&En(ct(c(_A)),{scrollToWhenVisible:!1})}else P()(k)}}function ka(k){R(nA,k.getBoundingClientRect().height)}RA(()=>(G(b()),G(S())),()=>{R(UA,AG({escapeControlCharacters:b(),escapeUnicodeCharacters:S()}))}),RA(()=>c(LA),()=>{(function(k){if(c(KA)){var T=k?Uf:-100;c(KA).scrollTo({top:$g(KA,c(KA).scrollTop+=T),left:c(KA).scrollLeft})}})(c(LA))}),RA(()=>G(d()),()=>{(function(k){var T={json:c(uA)},eA=Pf(k)?k.text!==c(ZA):!Qi(T.json,k.json);if(o("update external content",{isChanged:eA}),eA){var gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};if(Pf(k))try{R(uA,F()(k.text)),R(xA,Xg(c(uA),c(xA))),R(ZA,k.text),R(et,!1),R(QA,void 0)}catch(wA){try{R(uA,F()(ml(k.text))),R(xA,Xg(c(uA),c(xA))),R(ZA,k.text),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(ZA,k.text),R(et,!1),R(QA,c(ZA)!==""?uh(c(ZA),wA.message||String(wA)):void 0)}}else R(uA,k.json),R(xA,Xg(c(uA),c(xA))),R(ZA,void 0),R(et,!1),R(QA,void 0);Qe(c(uA)),R(Et,void 0),si(gA)}})(d())}),RA(()=>G(B()),()=>{(function(k){Qi(c(_A),k)||(o("applyExternalSelection",{selection:c(_A),externalSelection:k}),Zf(k)&&R(_A,k))})(B())}),RA(()=>(c(ze),c(uA),G(M()),c(Ye)),()=>{R(ze,qo(c(uA))?(function(k,T){var eA=new Set(T.map(wt)),gA=new Set(k.map(wt));for(var wA of eA)gA.has(wA)||eA.delete(wA);for(var Ae of gA)eA.has(Ae)||eA.add(Ae);return[...eA].map(Qs)})(mNA(c(uA),M(),c(Ye)),c(ze)):[])}),RA(()=>(c(uA),c(ze)),()=>{R(ut,!(!c(uA)||qi(c(ze))))}),RA(()=>(c(uA),c(Ye)),()=>{R(A,Array.isArray(c(uA))&&c(uA).length>c(Ye))}),RA(()=>(c(rA),c(nA),c(uA),c(LA),Uf),()=>{R(i,pNA(c(rA),c(nA),c(uA),z,NA,c(LA)?Uf:0))}),RA(()=>c(uA),()=>{c(uA),c(KA)&&c(KA).scrollTo({top:c(KA).scrollTop,left:c(KA).scrollLeft})}),RA(()=>c(_A),()=>{var k;k=c(_A),Qi(k,B())||(o("onSelect",k),O()(k))}),RA(()=>(G(I()),G(Q()),G(D()),c(UA),c(uA),c(xA),G(aA())),()=>{R(Le,{mode:ba.table,readOnly:I(),truncateTextSize:Q(),parser:D(),normalization:c(UA),getJson:()=>c(uA),getDocumentState:()=>c(xA),findElement:Co,findNextInside:_t,focus:L,onPatch:(k,T)=>Mi((function(eA,gA){return eA.flatMap(wA=>{if(gw(wA)){var Ae=Qs(wA.path);if(Ae.length>0){for(var oe=[wA],Be=Ki(Ae);Be.length>0&&!br(gA,Be);)oe.unshift({op:"add",path:wt(Be),value:{}}),Be=Ki(Be);return oe}}return wA})})(k,c(uA)),T),onSelect:Ie,onFind:Ji,onPasteJson:vt,onRenderValue:aA()})}),RA(()=>(c(uA),G(_()),G(D()),G(U())),()=>{_e(c(uA),_(),D(),U())}),RA(()=>(c(gn),c(ze)),()=>{R(n,wNA(c(gn),c(ze)))}),kn();var Lt={validate:Wi,patch:ui,focus:L,acceptAutoRepair:Bn,scrollTo:En,findElement:Co,openTransformModal:it};Ai(!0);var gt=FFA();ue("mousedown",i2,function(k){!Nh(k.target,T=>T===c(mA))&&gr(c(_A))&&(o("click outside the editor, exit edit mode"),R(_A,z0(c(_A))),ei&&c(Pe)&&(c(Pe).focus(),c(Pe).blur()),o("blur (outside editor)"),c(Pe)&&c(Pe).blur())});var Fi,Oi=At(gt),Vn=CA(Oi),hn=k=>{(function(T,eA){St(eA,!1);var gA=N(eA,"containsValidArray",9),wA=N(eA,"readOnly",9),Ae=N(eA,"showSearch",13,!1),oe=N(eA,"history",9),Be=N(eA,"onSort",9),He=N(eA,"onTransform",9),ke=N(eA,"onContextMenu",9),Ne=N(eA,"onUndo",9),ni=N(eA,"onRedo",9),Un=N(eA,"onRenderMenu",9);function q(){Ae(!Ae())}var fA=IA(void 0,!0),PA=IA(void 0,!0);RA(()=>(G(wA()),G(Be()),G(gA()),G(He()),G(ke()),G(Ne()),G(oe()),G(ni())),()=>{R(fA,wA()?[{type:"space"}]:[{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Be(),disabled:wA()||!gA()},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:He(),disabled:wA()||!gA()},{type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:q,disabled:!gA()},{type:"button",icon:LS,title:oG,className:"jse-contextmenu",onClick:ke()},{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Ne(),disabled:!oe().canUndo},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:ni(),disabled:!oe().canRedo},{type:"space"}])}),RA(()=>(G(Un()),c(fA)),()=>{R(PA,Un()(c(fA))||c(fA))}),kn(),Ai(!0),xv(T,{get items(){return c(PA)}}),xt()})(k,{get containsValidArray(){return c(ut)},get readOnly(){return I()},get history(){return E()},onSort:Kn,onTransform:Ri,onUndo:Vt,onRedo:Ni,onContextMenu:wo,get onRenderMenu(){return iA()},get showSearch(){return c(LA)},set showSearch(T){R(LA,T)},$$legacy:!0})};TA(Vn,k=>{f()&&k(hn)});var Mt=bA(Vn,2),sa=k=>{var T=RFA(),eA=At(T),gA=CA(eA);gA.readOnly=!0,Jo(gA,Be=>R(Pe,Be),()=>c(Pe));var wA=bA(eA,2),Ae=Be=>{var He=SFA(),ke=At(He);eaA(CA(ke),{get json(){return c(uA)},get documentState(){return c(xA)},get parser(){return D()},get showSearch(){return c(LA)},get showReplace(){return c(pA)},get readOnly(){return I()},get columns(){return c(ze)},onSearch:Ft,onFocus:ht,onPatch:Mi,onClose:Kt});var Ne=bA(ke,2),ni=CA(Ne),Un=CA(ni),q=CA(Un),fA=CA(q),PA=CA(fA),Fe=mt=>{var gi=tt(()=>(G(VQ),c(n),EA(()=>{var ua;return VQ([],(ua=c(n))===null||ua===void 0?void 0:ua.root)}))),ga=bi(),Zn=At(ga),ea=ua=>{var mr=pFA();Ch(CA(mr),{get validationError(){return c(gi)},get onExpand(){return Gl}}),lA(ua,mr)};TA(Zn,ua=>{c(gi)&&ua(ea)}),lA(mt,ga)};TA(PA,mt=>{G(qi),c(n),EA(()=>{var gi;return!qi((gi=c(n))===null||gi===void 0?void 0:gi.root)})&&mt(Fe)});var pe=bA(fA);Qa(pe,1,()=>c(ze),Na,(mt,gi)=>{var ga=wFA();(function(Zn,ea){St(ea,!1);var ua=IA(void 0,!0),mr=IA(void 0,!0),tC=IA(void 0,!0),xg=N(ea,"path",9),Pl=N(ea,"sortedColumn",9),A0=N(ea,"readOnly",9),jl=N(ea,"onSort",9);RA(()=>(G(xg()),vg),()=>{R(ua,qi(xg())?"values":vg(xg()))}),RA(()=>(G(Pl()),G(xg())),()=>{var Fa;R(mr,Pl()&&Qi(xg(),(Fa=Pl())===null||Fa===void 0?void 0:Fa.path)?Pl().sortDirection:void 0)}),RA(()=>(c(mr),BiA),()=>{R(tC,c(mr)?BiA[c(mr)]:void 0)}),kn(),Ai(!0);var os,pr=BFA(),Rg=CA(pr),iC=CA(Rg),Ng=bA(Rg,2),Rn=Fa=>{var _a=dFA(),Q1=CA(_a),QB=tt(()=>(c(mr),G(Kl),G(M0),G(JS),EA(()=>c(mr)===Kl.asc?M0:JS)));Vi(Q1,{get data(){return c(QB)}}),ve(()=>Mn(_a,"title","Currently sorted in ".concat(c(tC)," order"))),lA(Fa,_a)};TA(Ng,Fa=>{c(mr)!==void 0&&Fa(Rn)}),ve(Fa=>{os=$t(pr,1,"jse-column-header svelte-5pxwfq",null,os,{"jse-readonly":A0()}),Mn(pr,"title",A0()?c(ua):c(ua)+" (Click to sort the data by this column)"),Rt(iC,Fa)},[()=>(G(XC),c(ua),G(50),EA(()=>XC(c(ua),50)))]),ue("click",pr,function(){A0()||jl()({path:xg(),sortDirection:c(mr)===Kl.asc?Kl.desc:Kl.asc})}),lA(Zn,pr),xt()})(CA(ga),{get path(){return c(gi)},get sortedColumn(){return c(Et)},get readOnly(){return I()},onSort:Te}),lA(mt,ga)});var De=bA(pe),ot=mt=>{var gi=DFA(),ga=CA(gi),Zn=tt(()=>(c(uA),EA(()=>Array.isArray(c(uA))?c(uA).length:0)));(function(ea,ua){St(ua,!1);var mr=N(ua,"count",9),tC=N(ua,"maxSampleCount",9),xg=N(ua,"readOnly",9),Pl=N(ua,"onRefresh",9);Ai(!0);var A0,jl=mFA();Vi(CA(jl),{get data(){return Zq}}),ve(()=>{A0=$t(jl,1,"jse-column-header svelte-1wgrwv3",null,A0,{"jse-readonly":xg()}),Mn(jl,"title","The Columns are created by sampling ".concat(tC()," items out of ").concat(mr(),". ")+"If you're missing a column, click here to sample all of the items instead of a subset. This is slower.")}),ue("click",jl,()=>Pl()()),lA(ea,jl),xt()})(ga,{get count(){return c(Zn)},get maxSampleCount(){return c(Ye)},get readOnly(){return I()},onRefresh:()=>R(Ye,1/0)}),lA(mt,gi)};TA(De,mt=>{c(A)&&mt(ot)});var jt,ki,xn=bA(q),Pi=CA(xn),Eo=bA(xn);Qa(Eo,1,()=>(c(i),EA(()=>c(i).visibleItems)),Na,(mt,gi,ga)=>{var Zn=tt(()=>(c(i),EA(()=>c(i).startIndex+ga))),ea=tt(()=>(c(n),G(c(Zn)),EA(()=>c(n).rows[c(Zn)]))),ua=tt(()=>(G(VQ),G(c(Zn)),G(c(ea)),EA(()=>{var os;return VQ([String(c(Zn))],(os=c(ea))===null||os===void 0?void 0:os.row)}))),mr=tt(()=>(G(T0),c(uA),c(be),G(c(Zn)),EA(()=>T0(c(uA),c(be),[String(c(Zn))])))),tC=kFA(),xg=CA(tC);ZnA(xg,()=>c(Zn),os=>{var pr=yFA(),Rg=CA(pr),iC=bA(Rg),Ng=Rn=>{Ch(Rn,{get validationError(){return c(ua)},get onExpand(){return Gl}})};TA(iC,Rn=>{c(ua)&&Rn(Ng)}),vs(pr,(Rn,Fa)=>Yy?.(Rn,Fa),()=>Rn=>(function(Fa,_a){z[_a]=Fa.getBoundingClientRect().height})(Rn,c(Zn))),ve(()=>{var Rn;return Rt(Rg,"".concat((Rn=c(Zn))!==null&&Rn!==void 0?Rn:""," "))}),lA(os,pr)});var Pl=bA(xg);Qa(Pl,1,()=>c(ze),Na,(os,pr,Rg,iC)=>{var Ng,Rn=tt(()=>(G(c(Zn)),c(pr),EA(()=>[String(c(Zn))].concat(c(pr))))),Fa=tt(()=>(G(je),c(gi),c(pr),EA(()=>je(c(gi),c(pr))))),_a=tt(()=>(G(In),c(_A),G(W0),G(c(Rn)),EA(()=>In(c(_A))&&W0(c(_A).path,c(Rn))))),Q1=tt(()=>(G(c(ea)),EA(()=>{var La;return(La=c(ea))===null||La===void 0?void 0:La.columns[Rg]}))),QB=tt(()=>(G(VQ),G(c(Rn)),G(c(Q1)),EA(()=>VQ(c(Rn),c(Q1))))),h1=bFA(),tu=CA(h1),hB=CA(tu),iu=La=>{var il=tt(()=>(G(lv),G(T0),c(gi),G(c(mr)),c(pr),EA(()=>lv(T0(c(gi),c(mr),c(pr)))))),nu=tt(()=>(G(c(il)),EA(()=>!!c(il)&&c(il).some(f1=>f1.active)))),ou=tt(()=>(G(qi),G(c(il)),EA(()=>!qi(c(il)))));(function(f1,Lr){St(Lr,!1);var au=N(Lr,"path",9),$K=N(Lr,"value",9),AU=N(Lr,"parser",9),rcA=N(Lr,"isSelected",9),scA=N(Lr,"containsSearchResult",9),gcA=N(Lr,"containsActiveSearchResult",9),lcA=N(Lr,"onEdit",9);Ai(!0);var eU,Vm=IFA(),ccA=CA(Vm);ve(ru=>{eU=$t(Vm,1,"jse-inline-value svelte-1jv89ui",null,eU,{"jse-selected":rcA(),"jse-highlight":scA(),"jse-active":gcA()}),Rt(ccA,ru)},[()=>(G(XC),G(AU()),G($K()),G(50),EA(()=>{var ru;return XC((ru=AU().stringify($K()))!==null&&ru!==void 0?ru:"",50)}))]),ue("dblclick",Vm,()=>lcA()(au())),lA(f1,Vm),xt()})(La,{get path(){return c(Rn)},get value(){return c(Fa)},get parser(){return D()},get isSelected(){return c(_a)},get containsSearchResult(){return c(ou)},get containsActiveSearchResult(){return c(nu)},onEdit:st})},Lb=La=>{var il=tt(()=>(G(T0),c(uA),c(be),G(c(Rn)),EA(()=>{var Lr;return(Lr=T0(c(uA),c(be),c(Rn)))===null||Lr===void 0?void 0:Lr.searchResults}))),nu=tt(()=>c(Fa)!==void 0?c(Fa):""),ou=tt(()=>(G(P0),c(uA),c(xA),G(c(Rn)),EA(()=>P0(c(uA),c(xA),c(Rn))))),f1=tt(()=>c(_a)?c(_A):void 0);ZoA(La,{get path(){return c(Rn)},get value(){return c(nu)},get enforceString(){return c(ou)},get selection(){return c(f1)},get searchResultItems(){return c(il)},get context(){return c(Le)}})};TA(hB,La=>{G(aa),G(c(Fa)),EA(()=>aa(c(Fa)))?La(iu):La(Lb,!1)});var Gb=bA(hB),Kb=La=>{var il=vFA();TI(CA(il),{selected:!0,onContextMenu:ko}),lA(La,il)};TA(Gb,La=>{G(I()),G(c(_a)),G(gr),c(_A),EA(()=>!I()&&c(_a)&&!gr(c(_A)))&&La(Kb)});var e0=bA(tu,2),u1=La=>{Ch(La,{get validationError(){return c(QB)},get onExpand(){return Gl}})};TA(e0,La=>{c(QB)&&La(u1)}),ve(La=>{Mn(h1,"data-path",La),Ng=$t(tu,1,"jse-value-outer svelte-1p86y3c",null,Ng,{"jse-selected-value":c(_a)})},[()=>(G(qy),G(c(Rn)),EA(()=>qy(c(Rn))))]),lA(os,h1)});var A0=bA(Pl),jl=os=>{lA(os,MFA())};TA(A0,os=>{c(A)&&os(jl)}),lA(mt,tC)});var Wt,$o=CA(bA(Eo));Jo(Ne,mt=>R(KA,mt),()=>c(KA)),vs(Ne,(mt,gi)=>Yy?.(mt,gi),()=>ka),Nr(()=>ue("scroll",Ne,Ct));var Wn=bA(Ne,2),Aa=mt=>{var gi=tt(()=>(c(WA),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(WA).contents)?"array":"object"," as text")))),ga=tt(()=>[{icon:SC,text:"Paste as JSON instead",title:"Paste the text as JSON instead of a single value",onMouseDown:Do},{text:"Leave as is",title:"Keep the pasted content as a single value",onClick:Ma}]);tl(mt,{type:"info",get message(){return c(gi)},get actions(){return c(ga)}})};TA(Wn,mt=>{c(WA)&&mt(Aa)});var un=bA(Wn,2),Gt=mt=>{var gi=tt(()=>[{icon:SC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Qn},{text:"Leave as is",title:"Keep the pasted array",onClick:wi}]);tl(mt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(gi)}})};TA(un,mt=>{c(MA)&&mt(Gt)});var Xi=bA(un,2),Zt=mt=>{var gi=tt(()=>I()?[]:[{icon:Zw,text:"Ok",title:"Accept the repaired document",onClick:Bn},{icon:l3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Io}]);tl(mt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(gi)},onClose:L})};TA(Xi,mt=>{c(et)&&mt(Zt)}),hG(bA(Xi,2),{get validationErrors(){return c(gn)},selectError:xe}),ve(()=>{jt=$t(xn,1,"jse-table-invisible-start-section svelte-1p86y3c",null,jt,{"jse-search-box-background":c(LA)}),Mn(Pi,"colspan",(c(ze),EA(()=>c(ze).length))),ki=Yl(Pi,"",ki,{height:(c(i),EA(()=>c(i).startHeight+"px"))}),Mn($o,"colspan",(c(ze),EA(()=>c(ze).length))),Wt=Yl($o,"",Wt,{height:(c(i),EA(()=>c(i).endHeight+"px"))})}),lA(Be,He)},oe=Be=>{var He=bi(),ke=At(He),Ne=Un=>{var q=xFA(),fA=At(q),PA=tt(()=>I()?[]:[{icon:l3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Io}]);tl(fA,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(PA)}}),gaA(bA(fA,2),{get text(){return c(ZA)},get json(){return c(uA)},get indentation(){return J()},get parser(){return D()}}),lA(Un,q)},ni=Un=>{fFA(Un,{get text(){return c(ZA)},get json(){return c(uA)},get readOnly(){return I()},get parser(){return D()},openJSONEditorModal:st,extractPath:Pt,get onChangeMode(){return AA()},onClick:()=>{L()}})};TA(ke,Un=>{c(QA)&&c(ZA)!==void 0&&c(ZA)!==""?Un(Ne):Un(ni,!1)},!0),lA(Be,He)};TA(wA,Be=>{c(ut)?Be(Ae):Be(oe,!1)}),ue("paste",gA,me),lA(k,T)},Ho=k=>{lA(k,NFA())};TA(Mt,k=>{C?k(Ho,!1):k(sa)}),Jo(Oi,k=>R(mA,k),()=>c(mA));var u=bA(Oi,2),y=k=>{VoA(k,{onClose:()=>R(Y,!1)})};TA(u,k=>{c(Y)&&k(y)});var x=bA(u,2),H=k=>{WoA(k,e1(()=>c(Je),{onClose:()=>{var T;(T=c(Je))===null||T===void 0||T.onClose(),R(Je,void 0)}}))};return TA(x,k=>{c(Je)&&k(H)}),ve(()=>Fi=$t(Oi,1,"jse-table-mode svelte-1p86y3c",null,Fi,{"no-main-menu":!f()})),ue("mousedown",Oi,function(k){if(k.buttons===1||k.buttons===2){var T=k.target;T.isContentEditable||L();var eA=QoA(T);if(eA){if(gr(c(_A))&&Xf(c(uA),c(_A),eA))return;R(_A,Ui(eA)),k.preventDefault()}}}),ue("keydown",Oi,function(k){var T=g2(k);if(o("keydown",{combo:T,key:k.key}),T==="Ctrl+X"&&(k.preventDefault(),nr(!0)),T==="Ctrl+Shift+X"&&(k.preventDefault(),nr(!1)),T==="Ctrl+C"&&(k.preventDefault(),Pa(!0)),T==="Ctrl+Shift+C"&&(k.preventDefault(),Pa(!1)),T==="Ctrl+D"&&(k.preventDefault(),Sn()),T!=="Delete"&&T!=="Backspace"||(k.preventDefault(),xi()),T==="Insert"&&k.preventDefault(),T==="Ctrl+A"&&k.preventDefault(),T==="Ctrl+Q"&&Zo(k),T==="ArrowLeft"&&(k.preventDefault(),ci(),c(_A))){var eA=(function(He,ke){var{rowIndex:Ne,columnIndex:ni}=Ll(ct(ke),He);return ni>0?Ui(Kd({rowIndex:Ne,columnIndex:ni-1},He)):ke})(c(ze),c(_A));R(_A,eA),Yo(ct(eA))}if(T==="ArrowRight"&&(k.preventDefault(),ci(),c(_A))){var gA=(function(He,ke){var{rowIndex:Ne,columnIndex:ni}=Ll(ct(ke),He);return ni0?Ui(Kd({rowIndex:Ne-1,columnIndex:ni},He)):ke})(c(ze),c(_A));R(_A,wA),Yo(ct(wA))}if(T==="ArrowDown"&&(k.preventDefault(),ci(),c(_A))){var Ae=(function(He,ke,Ne){var{rowIndex:ni,columnIndex:Un}=Ll(ct(Ne),ke);return niR(UA,z)}).get()),mA=IA(s());function KA(z){if(miA(z)){R(mA,z.undo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA-1]:void 0;ee("handleUndo",{index:rA,item:z,items:nA,prevItem:NA}),NA&&i(NA.redo.selection),_()(c(mA))}}function Pe(z){if(miA(z)){R(mA,z.redo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA+1]:void 0;ee("handleRedo",{index:rA,item:z,items:nA,nextItem:NA}),NA&&i(NA.undo.selection),_()(c(mA))}}var Je=IA(),HA={type:"separator"},uA=IA(),ZA=IA();function QA(z){if(c(sA))return c(sA).patch(z);if(c(hA))return c(hA).patch(z);if(c(YA))return c(YA).patch(z);throw new Error('Method patch is not available in mode "'.concat(c(mA),'"'))}function WA(z,nA){if(c(sA))return c(sA).expand(z,nA);if(c(YA))return c(YA).expand(z,nA);throw new Error('Method expand is not available in mode "'.concat(c(mA),'"'))}function MA(z,nA){if(c(sA))return c(sA).collapse(z,nA);if(c(YA))return c(YA).collapse(z,nA);throw new Error('Method collapse is not available in mode "'.concat(c(mA),'"'))}function be(z){if(c(YA))c(YA).openTransformModal(z);else if(c(sA))c(sA).openTransformModal(z);else{if(!c(hA))throw new Error('Method transform is not available in mode "'.concat(c(mA),'"'));c(hA).openTransformModal(z)}}function LA(){if(c(YA))return c(YA).validate();if(c(sA))return c(sA).validate();if(c(hA))return c(hA).validate();throw new Error('Method validate is not available in mode "'.concat(c(mA),'"'))}function pA(){return c(sA)?c(sA).acceptAutoRepair():A()}function Ft(z){if(c(sA))return c(sA).scrollTo(z);if(c(hA))return c(hA).scrollTo(z);throw new Error('Method scrollTo is not available in mode "'.concat(c(mA),'"'))}function ht(z){if(c(sA))return c(sA).findElement(z);if(c(hA))return c(hA).findElement(z);throw new Error('Method findElement is not available in mode "'.concat(c(mA),'"'))}function Ee(){c(YA)?c(YA).focus():c(sA)?c(sA).focus():c(hA)&&c(hA).focus()}function Kt(){return Ye.apply(this,arguments)}function Ye(){return(Ye=Tt(function*(){c(YA)&&(yield c(YA).refresh())})).apply(this,arguments)}RA(()=>G(s()),()=>{(function(z){if(z!==c(mA)){var nA={type:"mode",undo:{mode:c(mA),selection:void 0},redo:{mode:z,selection:void 0}};c(mA)==="text"&&c(YA)&&c(YA).flush(),ee("add history item",nA),c(UA).add(nA),R(mA,z)}})(s())}),RA(()=>(c(mA),G(_())),()=>{R(Je,[{type:"button",text:"text",title:"Switch to text mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-first"+(c(mA)===ba.text?" jse-selected":""),onClick:()=>_()(ba.text)},{type:"button",text:"tree",title:"Switch to tree mode (current mode: ".concat(c(mA),")"),className:"jse-group-button "+(c(mA)===ba.tree?" jse-selected":""),onClick:()=>_()(ba.tree)},{type:"button",text:"table",title:"Switch to table mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-last"+(c(mA)===ba.table?" jse-selected":""),onClick:()=>_()(ba.table)}])}),RA(()=>(c(Je),G(AA()),c(mA),G(D()),G(n())),()=>{R(uA,z=>{var nA=bL(z[0])?c(Je).concat(z):c(Je).concat(HA,z),rA=n3(nA);return AA()(nA,{mode:c(mA),modal:D(),readOnly:n()})||rA})}),RA(()=>(G(O()),c(mA),G(D()),G(n()),G(i())),()=>{R(ZA,z=>{var nA,rA=n3(z);return(nA=O()(z,{mode:c(mA),modal:D(),readOnly:n(),selection:i()}))!==null&&nA!==void 0?nA:!n()&&rA})}),kn();var ze={patch:QA,expand:WA,collapse:MA,transform:be,validate:LA,acceptAutoRepair:pA,scrollTo:Ft,findElement:ht,focus:Ee,refresh:Kt};Ai();var ut=bi(),Me=At(ut),ei=z=>{Jo(CFA(z,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get tabSize(){return a()},get mainMenuBar(){return g()},get statusBar(){return C()},get askToFormat(){return I()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get validator(){return b()},get validationParser(){return S()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onError(){return DA()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},$$legacy:!0}),nA=>R(YA,nA),()=>c(YA))},Y=z=>{var nA=bi(),rA=At(nA),NA=Qe=>{Jo(_FA(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get flattenColumns(){return E()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get indentation(){return o()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(ZA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(hA,xA),()=>c(hA))},Ie=Qe=>{Jo(zL(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get navigationBar(){return l()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get pathParser(){return M()},get onError(){return DA()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onClassName(){return j()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(ZA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(sA,xA),()=>c(sA))};TA(rA,Qe=>{c(mA),G(ba),EA(()=>c(mA)===ba.table)?Qe(NA):Qe(Ie,!1)},!0),lA(z,nA)};return TA(Me,z=>{c(mA),G(ba),EA(()=>c(mA)===ba.text||String(c(mA))==="code")?z(ei):z(Y,!1)}),lA(t,ut),Ot(e,"patch",QA),Ot(e,"expand",WA),Ot(e,"collapse",MA),Ot(e,"transform",be),Ot(e,"validate",LA),Ot(e,"acceptAutoRepair",pA),Ot(e,"scrollTo",Ft),Ot(e,"findElement",ht),Ot(e,"focus",Ee),Ot(e,"refresh",Kt),xt(ze)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-wrapper.svelte-t4zsk3 { - flex: 1; - display: flex; - min-width: 0; - min-height: 0; - flex-direction: column; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) { - font-weight: bold; - display: block; - box-sizing: border-box; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) .jse-label-inner:where(.svelte-t4zsk3) { - margin-top: calc(2 * var(--jse-padding, 10px)); - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); - box-sizing: border-box; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-modal-inline-editor:where(.svelte-t4zsk3) { - flex: 1; - min-height: 150px; - min-width: 0; - max-width: 100%; - display: flex; - --jse-theme-color: var(--jse-modal-editor-theme-color, #707070); - --jse-theme-color-highlight: var(--jse-modal-editor-theme-color-highlight, #646464); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) { - gap: var(--jse-padding, 10px); - align-items: center; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) .jse-error:where(.svelte-t4zsk3) { - flex: 1; - color: var(--jse-error-color, #ee5341); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-secondary-background, #d3d3d3); - color: var(--jse-button-secondary-color, var(--jse-text-color, #4d4d4d)); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):hover { - background: var(--jse-button-secondary-background-highlight, #e1e1e1); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):disabled { - background: var(--jse-button-secondary-background-disabled, #9d9d9d); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3) { - border: var(--jse-input-border, 1px solid #d8dbdf); - outline: none; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: inherit; - background: var(--jse-input-background, var(--jse-background-color, #fff)); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):read-only { - background: var(--jse-input-background-readonly, transparent); -}`);var LFA=FA('
        '),GFA=FA(''),KFA=FA(''),UFA=FA(''),JFA=FA('
        Path
        Contents
        ',1),YFA=FA('
        '),TFA={};qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-contents.svelte-lwzlls { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) { - width: 100%; - border-collapse: collapse; - border-spacing: 0; -} -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) th:where(.svelte-lwzlls), -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) td:where(.svelte-lwzlls) { - text-align: left; - vertical-align: middle; - font-weight: normal; - padding-bottom: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-lwzlls input.jse-path:where(.svelte-lwzlls) { - width: 100%; - box-sizing: border-box; - padding: 5px 10px; - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: var(--jse-input-radius, 3px); - font-family: inherit; - font-size: inherit; - background: inherit; - background: var(--jse-input-background-readonly, transparent); - color: inherit; - outline: none; -} -.jse-modal-contents.svelte-lwzlls .svelte-select input { - box-sizing: border-box; -} -.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) { - height: 200px; -} -.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) .jse-error:where(.svelte-lwzlls) { - color: var(--jse-error-color, #ee5341); -}`);var ZQ=wv(()=>TFA),HFA=FA('Property'),zFA=FA('
        '),OFA=FA('
        Path
        Direction
        ',1);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-main.svelte-1l55585 { - width: 100%; - height: 100%; - min-width: 0; - min-height: 150px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - position: relative; - display: flex; - flex-direction: row; -} -.jse-main.svelte-1l55585:not(.jse-focus) { - --jse-selection-background-color: var(--jse-selection-background-inactive-color, #e8e8e8); - --jse-context-menu-pointer-background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); -}`);var PFA=FA('
        ',1);function jFA(t,e){St(e,!1);var A=IA(void 0,!0),i=Cr("jsoneditor:JSONEditor"),n={text:""},o=void 0,a=!1,r=ba.tree,s=!0,g=!0,l=!0,C=!0,I=!1,d=!1,B=!0,E=JSON,Q=void 0,f=JSON,b={parse:WSA,stringify:vg},S=[QSA],M=S[0].id,D=Gl,F=void 0,_=void 0,U=VSA,J=Gl,j=Gl,AA=Gl,O=Gl,DA=re=>{console.error(re),alert(re.toString())},P=Gl,aA=Gl,iA=N(e,"content",13,n),BA=N(e,"selection",13,o),oA=N(e,"readOnly",13,a),sA=N(e,"indentation",13,2),hA=N(e,"tabSize",13,4),YA=N(e,"truncateTextSize",13,1e3),ee=N(e,"mode",13,r),UA=N(e,"mainMenuBar",13,s),mA=N(e,"navigationBar",13,g),KA=N(e,"statusBar",13,l),Pe=N(e,"askToFormat",13,C),Je=N(e,"escapeControlCharacters",13,I),HA=N(e,"escapeUnicodeCharacters",13,d),uA=N(e,"flattenColumns",13,B),ZA=N(e,"parser",13,E),QA=N(e,"validator",13,Q),WA=N(e,"validationParser",13,f),MA=N(e,"pathParser",13,b),be=N(e,"queryLanguages",13,S),LA=N(e,"queryLanguageId",13,M),pA=N(e,"onChangeQueryLanguage",13,D),Ft=N(e,"onChange",13,F),ht=N(e,"onSelect",13,_),Ee=N(e,"onRenderValue",13,U),Kt=N(e,"onClassName",13,J),Ye=N(e,"onRenderMenu",13,j),ze=N(e,"onRenderContextMenu",13,AA),ut=N(e,"onChangeMode",13,O),Me=N(e,"onError",13,DA),ei=N(e,"onFocus",13,P),Y=N(e,"onBlur",13,aA),z=IA(th(),!0),nA=IA(!1,!0),rA=IA(void 0,!0),NA=IA(void 0,!0),Ie=IA(void 0,!0),Qe=IA(void 0,!0),xA=IA(ZA(),!0);function _A(){return iA()}function Et(re){i("set");var di=V_(re);if(di)throw new Error(di);R(z,th()),iA(re),Mo()}function et(re){i("update");var di=V_(re);if(di)throw new Error(di);iA(re),Mo()}function Te(re){var di=c(rA).patch(re);return Mo(),di}function Le(re){BA(re),Mo()}function si(re,di){c(rA).expand(re,di),Mo()}function gn(re){var di=arguments.length>1&&arguments[1]!==void 0&&arguments[1];c(rA).collapse(re,di),Mo()}function dn(){var re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};c(rA).transform(re),Mo()}function _e(){return c(rA).validate()}function Wi(){var re=c(rA).acceptAutoRepair();return Mo(),re}function ui(re){return Mi.apply(this,arguments)}function Mi(){return(Mi=Tt(function*(re){yield c(rA).scrollTo(re)})).apply(this,arguments)}function zi(re){return c(rA).findElement(re)}function vt(){c(rA).focus(),Mo()}function Zi(){return _t.apply(this,arguments)}function _t(){return(_t=Tt(function*(){yield c(rA).refresh()})).apply(this,arguments)}function L(re){var di,ln,Qn,To,Ma,wi,Io,nr,yo,Pa,Gn,xi,Pt,Sn,Bo,So,vA,VA,me,dA,SA,ae,xe,it,st,bt,Kn,Ri,Ji,Vt,Ni,ka=Object.keys(re);for(var Lt of ka)switch(Lt){case"content":iA((di=re[Lt])!==null&&di!==void 0?di:n);break;case"selection":BA((ln=re[Lt])!==null&&ln!==void 0?ln:o);break;case"readOnly":oA((Qn=re[Lt])!==null&&Qn!==void 0?Qn:a);break;case"indentation":sA((To=re[Lt])!==null&&To!==void 0?To:2);break;case"tabSize":hA((Ma=re[Lt])!==null&&Ma!==void 0?Ma:4);break;case"truncateTextSize":YA((wi=re[Lt])!==null&&wi!==void 0?wi:1e3);break;case"mode":ee((Io=re[Lt])!==null&&Io!==void 0?Io:r);break;case"mainMenuBar":UA((nr=re[Lt])!==null&&nr!==void 0?nr:s);break;case"navigationBar":mA((yo=re[Lt])!==null&&yo!==void 0?yo:g);break;case"statusBar":KA((Pa=re[Lt])!==null&&Pa!==void 0?Pa:l);break;case"askToFormat":Pe((Gn=re[Lt])!==null&&Gn!==void 0?Gn:C);break;case"escapeControlCharacters":Je((xi=re[Lt])!==null&&xi!==void 0?xi:I);break;case"escapeUnicodeCharacters":HA((Pt=re[Lt])!==null&&Pt!==void 0?Pt:d);break;case"flattenColumns":uA((Sn=re[Lt])!==null&&Sn!==void 0?Sn:B);break;case"parser":ZA((Bo=re[Lt])!==null&&Bo!==void 0?Bo:E);break;case"validator":QA((So=re[Lt])!==null&&So!==void 0?So:Q);break;case"validationParser":WA((vA=re[Lt])!==null&&vA!==void 0?vA:f);break;case"pathParser":MA((VA=re[Lt])!==null&&VA!==void 0?VA:b);break;case"queryLanguages":be((me=re[Lt])!==null&&me!==void 0?me:S);break;case"queryLanguageId":LA((dA=re[Lt])!==null&&dA!==void 0?dA:M);break;case"onChangeQueryLanguage":pA((SA=re[Lt])!==null&&SA!==void 0?SA:D);break;case"onChange":Ft((ae=re[Lt])!==null&&ae!==void 0?ae:F);break;case"onRenderValue":Ee((xe=re[Lt])!==null&&xe!==void 0?xe:U);break;case"onClassName":Kt((it=re[Lt])!==null&&it!==void 0?it:J);break;case"onRenderMenu":Ye((st=re[Lt])!==null&&st!==void 0?st:j);break;case"onRenderContextMenu":ze((bt=re[Lt])!==null&&bt!==void 0?bt:AA);break;case"onChangeMode":ut((Kn=re[Lt])!==null&&Kn!==void 0?Kn:O);break;case"onSelect":ht((Ri=re[Lt])!==null&&Ri!==void 0?Ri:_);break;case"onError":Me((Ji=re[Lt])!==null&&Ji!==void 0?Ji:DA);break;case"onFocus":ei((Vt=re[Lt])!==null&&Vt!==void 0?Vt:P);break;case"onBlur":Y((Ni=re[Lt])!==null&&Ni!==void 0?Ni:aA);break;default:gt(Lt)}function gt(Fi){i('Unknown property "'.concat(Fi,'"'))}be().some(Fi=>Fi.id===LA())||LA(be()[0].id),Mo()}function Ct(){return ci.apply(this,arguments)}function ci(){return(ci=Tt(function*(){throw new Error("class method destroy() is deprecated. It is replaced with a method destroy() in the vanilla library.")})).apply(this,arguments)}function Bn(re,di,ln){iA(re),Ft()&&Ft()(re,di,ln)}function En(re){BA(re),ht()&&ht()(n3(re))}function qn(){R(nA,!0),ei()&&ei()()}function Yo(){R(nA,!1),Y()&&Y()()}function Co(re){return ko.apply(this,arguments)}function ko(){return(ko=Tt(function*(re){ee()!==re&&(ee(re),Mo(),vt(),ut()(re))})).apply(this,arguments)}function Zo(re){i("handleChangeQueryLanguage",re),LA(re),pA()(re)}function wo(re){var{id:di,json:ln,rootPath:Qn,onTransform:To,onClose:Ma}=re;oA()||R(Qe,{id:di,json:ln,rootPath:Qn,indentation:sA(),truncateTextSize:YA(),escapeControlCharacters:Je(),escapeUnicodeCharacters:HA(),parser:ZA(),parseMemoizeOne:c(A),validationParser:WA(),pathParser:MA(),queryLanguages:be(),queryLanguageId:LA(),onChangeQueryLanguage:Zo,onRenderValue:Ee(),onRenderMenu:wi=>Ye()(wi,{mode:ee(),modal:!0,readOnly:oA()}),onRenderContextMenu:wi=>ze()(wi,{mode:ee(),modal:!0,readOnly:oA(),selection:BA()}),onClassName:Kt(),onTransform:To,onClose:Ma})}function ha(re){oA()||R(Ie,re)}function Xo(re){var{content:di,path:ln,onPatch:Qn,onClose:To}=re;i("onJSONEditorModal",{content:di,path:ln}),R(NA,{content:di,path:ln,onPatch:Qn,readOnly:oA(),indentation:sA(),tabSize:hA(),truncateTextSize:YA(),mainMenuBar:UA(),navigationBar:mA(),statusBar:KA(),askToFormat:Pe(),escapeControlCharacters:Je(),escapeUnicodeCharacters:HA(),flattenColumns:uA(),parser:ZA(),validator:void 0,validationParser:WA(),pathParser:MA(),onRenderValue:Ee(),onClassName:Kt(),onRenderMenu:Ye(),onRenderContextMenu:ze(),onSortModal:ha,onTransformModal:wo,onClose:To})}function ra(re){re.stopPropagation()}RA(()=>(G(ZA()),c(xA),G(iA()),th),()=>{if(!goA(ZA(),c(xA))){if(i("parser changed, recreate editor"),jf(iA())){var re=c(xA).stringify(iA().json);iA({json:re!==void 0?ZA().parse(re):void 0})}R(xA,ZA()),R(z,th())}}),RA(()=>G(iA()),()=>{var re=V_(iA());re&&console.error("Error: "+re)}),RA(()=>G(BA()),()=>{BA()===null&&console.warn("selection is invalid: it is null but should be undefined")}),RA(()=>G(ZA()),()=>{R(A,ZE(ZA().parse))}),RA(()=>G(ee()),()=>{i("mode changed to",ee())}),kn();var Do={get:_A,set:Et,update:et,patch:Te,select:Le,expand:si,collapse:gn,transform:dn,validate:_e,acceptAutoRepair:Wi,scrollTo:ui,findElement:zi,focus:vt,refresh:Zi,updateProps:L,destroy:Ct};return Ai(!0),yL(t,{children:(re,di)=>{var ln,Qn=PFA(),To=At(Qn);ZnA(CA(To),()=>c(z),Gn=>{Jo($iA(Gn,{get externalMode(){return ee()},get content(){return iA()},get selection(){return BA()},get readOnly(){return oA()},get indentation(){return sA()},get tabSize(){return hA()},get truncateTextSize(){return YA()},get statusBar(){return KA()},get askToFormat(){return Pe()},get mainMenuBar(){return UA()},get navigationBar(){return mA()},get escapeControlCharacters(){return Je()},get escapeUnicodeCharacters(){return HA()},get flattenColumns(){return uA()},get parser(){return ZA()},get parseMemoizeOne(){return c(A)},get validator(){return QA()},get validationParser(){return WA()},get pathParser(){return MA()},insideModal:!1,get onError(){return Me()},onChange:Bn,onChangeMode:Co,onSelect:En,get onRenderValue(){return Ee()},get onClassName(){return Kt()},onFocus:qn,onBlur:Yo,get onRenderMenu(){return Ye()},get onRenderContextMenu(){return ze()},onSortModal:ha,onTransformModal:wo,onJSONEditorModal:Xo,$$legacy:!0}),xi=>R(rA,xi),()=>c(rA))});var Ma=bA(To,2),wi=Gn=>{(function(xi,Pt){var Sn,Bo;St(Pt,!1);var So=IA(void 0,!0),vA=IA(void 0,!0),VA=IA(void 0,!0),me=IA(void 0,!0),dA=Cr("jsoneditor:SortModal"),SA=N(Pt,"id",9),ae=N(Pt,"json",9),xe=N(Pt,"rootPath",9),it=N(Pt,"onSort",9),st=N(Pt,"onClose",9),bt={value:1,label:"ascending"},Kn=[bt,{value:-1,label:"descending"}],Ri="".concat(SA(),":").concat(wt(xe())),Ji=IA((Sn=ZQ()[Ri])===null||Sn===void 0?void 0:Sn.selectedProperty,!0),Vt=IA(((Bo=ZQ()[Ri])===null||Bo===void 0?void 0:Bo.selectedDirection)||bt,!0),Ni=IA(void 0,!0);function ka(){try{var gt,Fi,Oi;R(Ni,void 0);var Vn=((gt=c(Ji))===null||gt===void 0?void 0:gt.value)||((Fi=c(me))===null||Fi===void 0||(Fi=Fi[0])===null||Fi===void 0?void 0:Fi.value)||[],hn=(Oi=c(Vt))===null||Oi===void 0?void 0:Oi.value,Mt=AaA(ae(),xe(),Vn,hn);it()!==void 0&&xe()!==void 0&&it()({operations:Mt,rootPath:xe(),itemPath:Vn,direction:hn}),st()()}catch(sa){R(Ni,String(sa))}}function Lt(gt){gt.focus()}RA(()=>(G(ae()),G(xe())),()=>{R(So,je(ae(),xe()))}),RA(()=>c(So),()=>{R(vA,Array.isArray(c(So)))}),RA(()=>(c(vA),c(So)),()=>{R(VA,c(vA)?wL(c(So)):void 0)}),RA(()=>(c(VA),PI),()=>{R(me,c(VA)?c(VA).map(PI):void 0)}),RA(()=>(ZQ(),c(Ji),c(Vt)),()=>{ZQ(ZQ()[Ri]={selectedProperty:c(Ji),selectedDirection:c(Vt)}),dA("store state in memory",Ri,ZQ()[Ri])}),kn(),Ai(!0),em(xi,{get onClose(){return st()},className:"jse-sort-modal",children:(gt,Fi)=>{var Oi=OFA(),Vn=At(Oi),hn=tt(()=>c(vA)?"Sort array items":"Sort object keys");Ev(Vn,{get title(){return c(hn)},get onClose(){return st()}});var Mt=CA(bA(Vn,2)),sa=bA(CA(Mt)),Ho=CA(sa),u=bA(CA(Ho)),y=CA(u),x=bA(Ho),H=oe=>{var Be=HFA(),He=bA(CA(Be));Td(CA(He),{showChevron:!0,get items(){return c(me)},get value(){return c(Ji)},set value(ke){R(Ji,ke)},$$legacy:!0}),lA(oe,Be)};TA(x,oe=>{c(vA),c(me),EA(()=>{var Be;return c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1})&&oe(H)});var k=bA(x),T=bA(CA(k));Td(CA(T),{showChevron:!0,clearable:!1,get items(){return Kn},get value(){return c(Vt)},set value(oe){R(Vt,oe)},$$legacy:!0});var eA=bA(Mt,2),gA=CA(eA),wA=oe=>{var Be=zFA(),He=CA(Be);ve(()=>Rt(He,c(Ni))),lA(oe,Be)};TA(gA,oe=>{c(Ni)&&oe(wA)});var Ae=CA(bA(eA,2));Nr(()=>ue("click",Ae,ka)),vs(Ae,oe=>Lt?.(oe)),ve(oe=>{AB(y,oe),Ae.disabled=(c(vA),c(me),c(Ji),EA(()=>{var Be;return!!(c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1)&&!c(Ji)}))},[()=>(G(xe()),G(qi),G(vg),EA(()=>xe()&&!qi(xe())?vg(xe()):"(document root)"))]),lA(gt,Oi)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(Ie),{onClose:()=>{var xi;(xi=c(Ie))===null||xi===void 0||xi.onClose(),R(Ie,void 0)}}))};TA(Ma,Gn=>{c(Ie)&&Gn(wi)});var Io=bA(Ma,2),nr=Gn=>{WNA(Gn,e1(()=>c(Qe),{onClose:()=>{var xi;(xi=c(Qe))===null||xi===void 0||xi.onClose(),R(Qe,void 0)}}))};TA(Io,Gn=>{c(Qe)&&Gn(nr)});var yo=bA(Io,2),Pa=Gn=>{(function(xi,Pt){St(Pt,!1);var Sn=IA(void 0,!0),Bo=IA(void 0,!0),So=IA(void 0,!0),vA=IA(void 0,!0),VA=Cr("jsoneditor:JSONEditorModal"),me=N(Pt,"content",9),dA=N(Pt,"path",9),SA=N(Pt,"onPatch",9),ae=N(Pt,"readOnly",9),xe=N(Pt,"indentation",9),it=N(Pt,"tabSize",9),st=N(Pt,"truncateTextSize",9),bt=N(Pt,"mainMenuBar",9),Kn=N(Pt,"navigationBar",9),Ri=N(Pt,"statusBar",9),Ji=N(Pt,"askToFormat",9),Vt=N(Pt,"escapeControlCharacters",9),Ni=N(Pt,"escapeUnicodeCharacters",9),ka=N(Pt,"flattenColumns",9),Lt=N(Pt,"parser",9),gt=N(Pt,"validator",9),Fi=N(Pt,"validationParser",9),Oi=N(Pt,"pathParser",9),Vn=N(Pt,"onRenderValue",9),hn=N(Pt,"onClassName",9),Mt=N(Pt,"onRenderMenu",9),sa=N(Pt,"onRenderContextMenu",9),Ho=N(Pt,"onSortModal",9),u=N(Pt,"onTransformModal",9),y=N(Pt,"onClose",9),x=IA(void 0,!0),H=IA(void 0,!0),k={mode:gA(me()),content:me(),selection:void 0,relativePath:dA()},T=IA([k],!0),eA=IA(void 0,!0);function gA(fA){return jf(fA)&&qo(fA.json)?ba.table:ba.tree}function wA(){var fA,PA=(fA=mi(c(T)))===null||fA===void 0?void 0:fA.selection;Zf(PA)&&c(x).scrollTo(ct(PA))}function Ae(){if(VA("handleApply"),!ae())try{R(eA,void 0);var fA=c(Sn).relativePath,PA=c(Sn).content,Fe=[{op:"replace",path:wt(fA),value:liA(PA,Lt()).json}];if(c(T).length>1){var pe=liA(c(T)[c(T).length-2].content,Lt()).json,De={json:lg(pe,Fe)},ot=ye(ye({},c(T)[c(T).length-2]||k),{},{content:De});R(T,[...c(T).slice(0,c(T).length-2),ot]),Mo(),wA()}else SA()(Fe),y()()}catch(jt){R(eA,String(jt))}}function oe(){if(VA("handleClose"),c(H))R(H,!1);else if(c(T).length>1){var fA;R(T,Ki(c(T))),Mo(),(fA=c(x))===null||fA===void 0||fA.focus(),wA(),R(eA,void 0)}else y()()}function Be(fA){VA("handleChange",fA),Ne(PA=>ye(ye({},PA),{},{content:fA}))}function He(fA){VA("handleChangeSelection",fA),Ne(PA=>ye(ye({},PA),{},{selection:fA}))}function ke(fA){VA("handleChangeMode",fA),Ne(PA=>ye(ye({},PA),{},{mode:fA}))}function Ne(fA){var PA=fA(mi(c(T)));R(T,[...Ki(c(T)),PA])}function ni(fA){R(eA,fA.toString()),console.error(fA)}function Un(fA){var PA,{content:Fe,path:pe}=fA;VA("handleJSONEditorModal",{content:Fe,path:pe});var De={mode:gA(Fe),content:Fe,selection:void 0,relativePath:pe};R(T,[...c(T),De]),Mo(),(PA=c(x))===null||PA===void 0||PA.focus()}function q(fA){fA.focus()}is(()=>{var fA;(fA=c(x))===null||fA===void 0||fA.focus()}),RA(()=>c(T),()=>{R(Sn,mi(c(T))||k)}),RA(()=>c(T),()=>{R(Bo,c(T).flatMap(fA=>fA.relativePath))}),RA(()=>(c(Bo),vg),()=>{R(So,qi(c(Bo))?"(document root)":vg(c(Bo)))}),RA(()=>G(Lt()),()=>{R(vA,ZE(Lt().parse))}),kn(),Ai(!0),em(xi,{onClose:oe,className:"jse-jsoneditor-modal",get fullscreen(){return c(H)},children:(fA,PA)=>{var Fe=YFA();yL(CA(Fe),{children:(pe,De)=>{var ot=JFA(),jt=At(ot),ki=tt(()=>(c(T),EA(()=>c(T).length>1?" (".concat(c(T).length,")"):"")));Ev(jt,{get title(){var Zt;return"Edit nested content ".concat((Zt=c(ki))!==null&&Zt!==void 0?Zt:"")},fullScreenButton:!0,onClose:oe,get fullscreen(){return c(H)},set fullscreen(Zt){R(H,Zt)},$$legacy:!0});var xn=bA(jt,2),Pi=bA(CA(xn),2),Eo=bA(Pi,4);Jo($iA(CA(Eo),{get externalMode(){return c(Sn),EA(()=>c(Sn).mode)},get content(){return c(Sn),EA(()=>c(Sn).content)},get selection(){return c(Sn),EA(()=>c(Sn).selection)},get readOnly(){return ae()},get indentation(){return xe()},get tabSize(){return it()},get truncateTextSize(){return st()},get statusBar(){return Ri()},get askToFormat(){return Ji()},get mainMenuBar(){return bt()},get navigationBar(){return Kn()},get escapeControlCharacters(){return Vt()},get escapeUnicodeCharacters(){return Ni()},get flattenColumns(){return ka()},get parser(){return Lt()},get parseMemoizeOne(){return c(vA)},get validator(){return gt()},get validationParser(){return Fi()},get pathParser(){return Oi()},insideModal:!0,onError:ni,onChange:Be,onChangeMode:ke,onSelect:He,get onRenderValue(){return Vn()},get onClassName(){return hn()},get onFocus(){return Gl},get onBlur(){return Gl},get onRenderMenu(){return Mt()},get onRenderContextMenu(){return sa()},get onSortModal(){return Ho()},get onTransformModal(){return u()},onJSONEditorModal:Un,$$legacy:!0}),Zt=>R(x,Zt),()=>c(x));var Wt=CA(bA(Eo,2)),$o=Zt=>{var mt=LFA(),gi=CA(mt);ve(()=>Rt(gi,c(eA))),lA(Zt,mt)};TA(Wt,Zt=>{c(eA)&&Zt($o)});var Wn=bA(Wt,2),Aa=Zt=>{var mt=GFA();Vi(CA(mt),{get data(){return eV}}),ue("click",mt,oe),lA(Zt,mt)};TA(Wn,Zt=>{c(T),EA(()=>c(T).length>1)&&Zt(Aa)});var un=bA(Wn,2),Gt=Zt=>{var mt=KFA();Nr(()=>ue("click",mt,Ae)),vs(mt,gi=>q?.(gi)),lA(Zt,mt)},Xi=Zt=>{var mt=UFA();ue("click",mt,oe),lA(Zt,mt)};TA(un,Zt=>{ae()?Zt(Xi,!1):Zt(Gt)}),ve(()=>AB(Pi,c(So))),lA(pe,ot)},$$slots:{default:!0}}),lA(fA,Fe)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(NA),{onClose:()=>{var xi;(xi=c(NA))===null||xi===void 0||xi.onClose(),R(NA,void 0)}}))};TA(yo,Gn=>{c(NA)&&Gn(Pa)}),ve(()=>ln=$t(To,1,"jse-main svelte-1l55585",null,ln,{"jse-focus":c(nA)})),ue("keydown",To,ra),lA(re,Qn)},$$slots:{default:!0}}),Ot(e,"get",_A),Ot(e,"set",Et),Ot(e,"update",et),Ot(e,"patch",Te),Ot(e,"select",Le),Ot(e,"expand",si),Ot(e,"collapse",gn),Ot(e,"transform",dn),Ot(e,"validate",_e),Ot(e,"acceptAutoRepair",Wi),Ot(e,"scrollTo",ui),Ot(e,"findElement",zi),Ot(e,"focus",vt),Ot(e,"refresh",Zi),Ot(e,"updateProps",L),Ot(e,"destroy",Ct),xt(Do)}function IaA(t){var{target:e,props:A}=t,i=_kA(jFA,{target:e,props:A});return i.destroy=Tt(function*(){return(function(n,o){var a=fL.get(n);return a?(fL.delete(n),a(o)):Promise.resolve()})(i)}),Mo(),i}var qc=class t{constructor(e){this.el=e}jsonString;editor=null;ngAfterViewInit(){let e={text:this.jsonString};setTimeout(()=>{this.editor=IaA({target:document.getElementById("json-editor"),props:{content:e,mode:ba.text,mainMenuBar:!1,statusBar:!1}})})}getJsonString(){return this.editor?.get().text}static \u0275fac=function(A){return new(A||t)(at(ge))};static \u0275cmp=kA({type:t,selectors:[["app-json-editor"]],inputs:{jsonString:"jsonString"},decls:1,vars:0,consts:[["id","json-editor",1,"json-editor-container","jse-theme-dark"]],template:function(A,i){A&1&&Di(0,"div",0)},styles:[".jse-theme-dark[_ngcontent-%COMP%]{--jse-theme: dark;--jse-theme-color: #2f6dd0;--jse-theme-color-highlight: #467cd2;--jse-background-color: #1e1e1e;--jse-text-color: #d4d4d4;--jse-text-color-inverse: #4d4d4d;--jse-main-border: 1px solid #4f4f4f;--jse-menu-color: #fff;--jse-modal-background: #2f2f2f;--jse-modal-overlay-background: rgba(0, 0, 0, .5);--jse-modal-code-background: #2f2f2f;--jse-tooltip-color: var(--jse-text-color);--jse-tooltip-background: #4b4b4b;--jse-tooltip-border: 1px solid #737373;--jse-tooltip-action-button-color: inherit;--jse-tooltip-action-button-background: #737373;--jse-panel-background: #333333;--jse-panel-background-border: 1px solid #464646;--jse-panel-color: var(--jse-text-color);--jse-panel-color-readonly: #737373;--jse-panel-border: 1px solid #3c3c3c;--jse-panel-button-color-highlight: #e5e5e5;--jse-panel-button-background-highlight: #464646;--jse-navigation-bar-background: #656565;--jse-navigation-bar-background-highlight: #7e7e7e;--jse-navigation-bar-dropdown-color: var(--jse-text-color);--jse-context-menu-background: #4b4b4b;--jse-context-menu-background-highlight: #595959;--jse-context-menu-separator-color: #595959;--jse-context-menu-color: var(--jse-text-color);--jse-context-menu-pointer-background: #737373;--jse-context-menu-pointer-background-highlight: #818181;--jse-context-menu-pointer-color: var(--jse-context-menu-color);--jse-key-color: #9cdcfe;--jse-value-color: var(--jse-text-color);--jse-value-color-number: #b5cea8;--jse-value-color-boolean: #569cd6;--jse-value-color-null: #569cd6;--jse-value-color-string: #ce9178;--jse-value-color-url: #ce9178;--jse-delimiter-color: #949494;--jse-edit-outline: 2px solid var(--jse-text-color);--jse-selection-background-color: #464646;--jse-selection-background-inactive-color: #333333;--jse-hover-background-color: #343434;--jse-active-line-background-color: rgba(255, 255, 255, .06);--jse-search-match-background-color: #343434;--jse-collapsed-items-background-color: #333333;--jse-collapsed-items-selected-background-color: #565656;--jse-collapsed-items-link-color: #b2b2b2;--jse-collapsed-items-link-color-highlight: #ec8477;--jse-search-match-color: #724c27;--jse-search-match-outline: 1px solid #966535;--jse-search-match-active-color: #9f6c39;--jse-search-match-active-outline: 1px solid #bb7f43;--jse-tag-background: #444444;--jse-tag-color: #bdbdbd;--jse-table-header-background: #333333;--jse-table-header-background-highlight: #424242;--jse-table-row-odd-background: rgba(255, 255, 255, .1);--jse-input-background: #3d3d3d;--jse-input-border: var(--jse-main-border);--jse-button-background: #808080;--jse-button-background-highlight: #7a7a7a;--jse-button-color: #e0e0e0;--jse-button-secondary-background: #494949;--jse-button-secondary-background-highlight: #5d5d5d;--jse-button-secondary-background-disabled: #9d9d9d;--jse-button-secondary-color: var(--jse-text-color);--jse-a-color: #55abff;--jse-a-color-highlight: #4387c9;--jse-svelte-select-background: #3d3d3d;--jse-svelte-select-border: 1px solid #4f4f4f;--list-background: #3d3d3d;--item-hover-bg: #505050;--multi-item-bg: #5b5b5b;--input-color: #d4d4d4;--multi-clear-bg: #8a8a8a;--multi-item-clear-icon-color: #d4d4d4;--multi-item-outline: 1px solid #696969;--list-shadow: 0 2px 8px 0 rgba(0, 0, 0, .4);--jse-color-picker-background: #656565;--jse-color-picker-border-box-shadow: #8c8c8c 0 0 0 1px}.json-editor-container[_ngcontent-%COMP%]{height:100%} .jse-message.jse-error{display:none} .cm-gutters.cm-gutters-before{display:none} .jse-text-mode{border-radius:10px} .jse-contents{border-radius:10px;border-bottom:1px solid #4f4f4f}"]})};var qFA=(t,e)=>e.name;function VFA(t,e){if(t&1&&K(0),t&2){let A=v();Se(" Configure ",A.selectedBuiltInTool," ")}}function WFA(t,e){if(t&1&&K(0),t&2){let A=v();Se(" ",A.isEditMode?"Edit Built-in Tool":"Add Built-in Tool"," ")}}function ZFA(t,e){if(t&1){let A=JA();m(0,"div",8),tA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.onToolSelected(n))}),m(1,"mat-icon",9),K(2),w(),m(3,"span",10),K(4),w()()}if(t&2){let A=e.$implicit,i=v(3);ne("selected",i.selectedBuiltInTool===A),p(2),qA(i.getToolIcon(A)),p(2),qA(A)}}function XFA(t,e){if(t&1&&(m(0,"div",4)(1,"h3",5),K(2),w(),m(3,"div",6),Ut(4,ZFA,5,4,"div",7,Li),w()()),t&2){let A=e.$implicit;p(2),qA(A.name),p(2),Jt(A.tools)}}function $FA(t,e){if(t&1&&(m(0,"div",1),Ut(1,XFA,6,1,"div",4,qFA),w()),t&2){let A=v();p(),Jt(A.toolCategories)}}function A_A(t,e){if(t&1&&(m(0,"div",2)(1,"h3",11),K(2,"Configure Tool Arguments"),w(),GA(3,"app-json-editor",12),w()),t&2){let A=v();p(3),$("jsonString",A.toolArgsString)}}function e_A(t,e){if(t&1){let A=JA();m(0,"button",14),tA("click",function(){Z(A);let n=v(2);return X(n.backToToolSelection())}),K(1,"Back"),w()}}function t_A(t,e){if(t&1){let A=JA();V(0,e_A,2,0,"button",13),m(1,"button",14),tA("click",function(){Z(A);let n=v();return X(n.saveArgs())}),K(2),w()}if(t&2){let A=v();W(A.isEditMode?-1:0),p(2),qA(A.isEditMode?"Save":"Create")}}function i_A(t,e){if(t&1){let A=JA();m(0,"button",14),tA("click",function(){Z(A);let n=v();return X(n.cancel())}),K(1,"Cancel"),w(),m(2,"button",15),tA("click",function(){Z(A);let n=v();return X(n.addTool())}),K(3),w()}if(t&2){let A=v();p(3),Se(" ",A.isEditMode?"Save":"Create"," ")}}var aB=class t{constructor(e,A){this.data=e;this.dialogRef=A}jsonEditorComponent;selectedBuiltInTool="google_search";toolCategories=[{name:"Search Tools",tools:["google_search","EnterpriseWebSearchTool","VertexAiSearchTool"]},{name:"Context Tools",tools:["FilesRetrieval","load_memory","preload_memory","url_context","VertexAiRagRetrieval"]},{name:"Agent Function Tools",tools:["exit_loop","get_user_choice","load_artifacts","LongRunningFunctionTool"]}];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);isEditMode=!1;showArgsEditor=!1;toolArgs={};toolArgsString="";ngOnInit(){if(this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName){this.selectedBuiltInTool=this.data.toolName;let e=this.builtInToolArgs.get(this.data.toolName);if(e&&e.length>0){if(this.data.toolArgs)this.toolArgs=cA({},this.data.toolArgs),delete this.toolArgs.skip_summarization;else{this.toolArgs={};for(let A of e)this.toolArgs[A]=""}this.toolArgsString=JSON.stringify(this.toolArgs,null,2),this.showArgsEditor=!0}}}onToolSelected(e){this.selectedBuiltInTool=e;let A=this.builtInToolArgs.get(e);A&&A.length>0&&(this.initializeToolArgs(e,A),this.showArgsEditor=!0)}initializeToolArgs(e,A){this.toolArgs={};for(let i of A)this.toolArgs[i]="";this.toolArgsString=JSON.stringify(this.toolArgs,null,2)}backToToolSelection(){this.showArgsEditor=!1,this.toolArgs={},this.toolArgsString=""}saveArgs(){if(this.jsonEditorComponent)try{this.toolArgsString=this.jsonEditorComponent.getJsonString(),this.toolArgs=JSON.parse(this.toolArgsString)}catch(e){alert("Invalid JSON: "+e);return}this.addTool()}addTool(){let e={toolType:"Built-in tool",name:this.selectedBuiltInTool,isEditMode:this.isEditMode};Object.keys(this.toolArgs).length>0&&(e.args=this.toolArgs),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}getToolIcon(e){return ME(e,"Built-in tool")}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-built-in-tool-dialog"]],viewQuery:function(A,i){if(A&1&&ai(qc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},decls:9,vars:3,consts:[["mat-dialog-title","",1,"dialog-title"],[1,"tool-categories-container"],[1,"args-editor-container"],["align","end"],[1,"tool-category"],[1,"category-title"],[1,"tool-list"],[1,"tool-item",3,"selected"],[1,"tool-item",3,"click"],[1,"tool-icon"],[1,"tool-name"],[1,"args-editor-title"],[3,"jsonString"],["mat-button",""],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),V(1,VFA,1,1)(2,WFA,1,1),w(),m(3,"mat-dialog-content"),V(4,$FA,3,0,"div",1)(5,A_A,4,1,"div",2),w(),m(6,"mat-dialog-actions",3),V(7,t_A,3,2)(8,i_A,4,1),w()),A&2&&(p(),W(i.showArgsEditor?1:2),p(3),W(i.showArgsEditor?5:4),p(3),W(i.showArgsEditor?7:8))},dependencies:[ma,Nn,Da,rr,Fn,Ua,fn,qc],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.tool-categories-container[_ngcontent-%COMP%]{padding:16px 0}.tool-category[_ngcontent-%COMP%]{margin-bottom:24px}.tool-category[_ngcontent-%COMP%]:last-child{margin-bottom:0}.category-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 12px;padding-left:8px}.tool-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:var(--builder-tool-item-background-color);border:1px solid var(--builder-tool-item-border-color);min-width:0}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)}.tool-item.selected[_ngcontent-%COMP%]{background-color:#8ab4f833;border:1px solid #8ab4f8}.tool-item[_ngcontent-%COMP%] .tool-icon[_ngcontent-%COMP%]{color:#8ab4f8;margin-right:12px;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%]{font-family:Google Sans;font-size:14px;color:var(--mdc-dialog-supporting-text-color)!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.args-editor-container[_ngcontent-%COMP%]{padding:16px 0}.args-editor-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 16px}"]})};function n_A(t,e){if(t&1){let A=JA();js(0),m(1,"div",6)(2,"div",7),tA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getToolInfo())==null?null:n.docLink,Ka)}}function o_A(t,e){t&1&&(m(0,"mat-hint",19),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}function a_A(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-label"),K(2),w(),m(3,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.inputValue,n)||(o.inputValue=n),X(n)}),tA("keydown",function(n){Z(A);let o=v();return X(o.onKeyDown(n))}),w(),pt(4,o_A,2,0,"mat-hint",18),w()}if(t&2){let A=v();p(2),qA(A.data.inputLabel||"Input"),p(),Qo("ngModel",A.inputValue),$("placeholder",A.data.inputPlaceholder||"Enter value"),p(),$("ngIf",!A.isInputValid())}}var Vc=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.inputValue=A.inputValue||""}inputValue="";isToolInfoExpanded=!1;isInputValid(){let e=this.inputValue.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}onCancel(){this.dialogRef.close()}onConfirm(){if(this.data.showInput){let e=this.inputValue.trim();if(!this.isInputValid())return;this.dialogRef.close(e)}else this.dialogRef.close("confirm")}onKeyDown(e){e.key==="Enter"&&this.data.showInput&&this.onConfirm()}getToolInfo(){if(this.data.toolType)return fc.getToolDetailedInfo(this.data.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-confirmation-dialog"]],decls:12,vars:6,consts:[["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%","margin-top","16px"],["align","end"],["mat-button","",3,"click"],["mat-button","","color","primary","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","cdkFocusInitial","",3,"ngModelChange","keydown","ngModel","placeholder"],["style","font-size: 11px; color: #666;",4,"ngIf"],[2,"font-size","11px","color","#666"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),pt(3,n_A,23,6,"ng-container",1),m(4,"p"),K(5),w(),V(6,a_A,5,4,"mat-form-field",2),w(),m(7,"mat-dialog-actions",3)(8,"button",4),tA("click",function(){return i.onCancel()}),K(9,"Cancel"),w(),m(10,"button",5),tA("click",function(){return i.onConfirm()}),K(11),w()()),A&2&&(p(),qA(i.data.title),p(2),$("ngIf",i.data.showToolInfo&&i.getToolInfo()),p(2),qA(i.data.message),p(),W(i.data.showInput?6:-1),p(4),$("disabled",i.data.showInput&&!i.isInputValid()),p(),Se(" ",i.data.confirmButtonText||"Confirm"," "))},dependencies:[ma,rl,Ns,fn,Wa,Fn,Da,rr,Ua,Yr,No,Gg,R1,gl,wa,Nn,uo,fo,Sa],styles:["mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px;color:var(--mdc-dialog-supporting-text-color)}mat-dialog-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-form-field{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--mdc-dialog-supporting-text-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-input-element{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important}[_nghost-%COMP%] .mat-mdc-input-element::placeholder{color:var(--builder-text-muted-color)!important;opacity:0!important}[_nghost-%COMP%] .mat-mdc-input-element:focus::placeholder{opacity:.6!important}[_nghost-%COMP%] .mat-mdc-form-field-hint{color:var(--builder-text-muted-color)!important}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mdc-dialog-supporting-text-color)!important;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};var r_A=["mat-menu-item",""],s_A=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],g_A=["mat-icon, [matMenuItemIcon]","*"];function l_A(t,e){t&1&&(Qt(),m(0,"svg",2),GA(1,"polygon",3),w())}var c_A=["*"];function C_A(t,e){if(t&1){let A=JA();li(0,"div",0),p2("click",function(){Z(A);let n=v();return X(n.closed.emit("click"))})("animationstart",function(n){Z(A);let o=v();return X(o._onAnimationStart(n.animationName))})("animationend",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))})("animationcancel",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))}),li(1,"div",1),Ke(2),Ei()()}if(t&2){let A=v();Po(A._classList),ne("mat-menu-panel-animations-disabled",A._animationsDisabled)("mat-menu-panel-exit-animation",A._panelAnimationState==="void")("mat-menu-panel-animating",A._isAnimating()),vo("id",A.panelId),ie("aria-label",A.ariaLabel||null)("aria-labelledby",A.ariaLabelledby||null)("aria-describedby",A.ariaDescribedby||null)}}var pG=new yA("MAT_MENU_PANEL"),C2=(()=>{class t{_elementRef=h(ge);_document=h(Xt);_focusMonitor=h(ar);_parentMenu=h(pG,{optional:!0});_changeDetectorRef=h(Dt);role="menuitem";disabled=!1;disableRipple=!1;_hovered=new XA;_focused=new XA;_highlighted=!1;_triggersSubmenu=!1;constructor(){h(Xn).load(dr),this._parentMenu?.addItem?.(this)}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._getHostElement(),A,i):this._getHostElement().focus(i),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(A){this.disabled&&(A.preventDefault(),A.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){let A=this._elementRef.nativeElement.cloneNode(!0),i=A.querySelectorAll("mat-icon, .material-icons");for(let n=0;n({overlapTrigger:!1,xPosition:"after",yPosition:"below",backdropClass:"cdk-overlay-transparent-backdrop"})}),mG="_mat-menu-enter",Rv="_mat-menu-exit",AC=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_injector=h(ft);_keyManager;_xPosition;_yPosition;_firstItemFocusRef;_exitFallbackTimeout;_animationsDisabled=ji();_allItems;_directDescendantItems=new ol;_classList={};_panelAnimationState="void";_animationDone=new XA;_isAnimating=jA(!1);parentMenu;direction;overlayPanelClass;backdropClass;ariaLabel;ariaLabelledby;ariaDescribedby;get xPosition(){return this._xPosition}set xPosition(A){this._xPosition=A,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(A){this._yPosition=A,this.setPositionClasses()}templateRef;items;lazyContent;overlapTrigger=!1;hasBackdrop;set panelClass(A){let i=this._previousPanelClass,n=cA({},this._classList);i&&i.length&&i.split(" ").forEach(o=>{n[o]=!1}),this._previousPanelClass=A,A&&A.length&&(A.split(" ").forEach(o=>{n[o]=!0}),this._elementRef.nativeElement.className=""),this._classList=n}_previousPanelClass;get classList(){return this.panelClass}set classList(A){this.panelClass=A}closed=new $A;close=this.closed;panelId=h(an).getId("mat-menu-panel-");constructor(){let A=h(d_A);this.overlayPanelClass=A.overlayPanelClass||"",this._xPosition=A.xPosition,this._yPosition=A.yPosition,this.backdropClass=A.backdropClass,this.overlapTrigger=A.overlapTrigger,this.hasBackdrop=A.hasBackdrop}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new s0(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),Si(A=>fi(...A.map(i=>i._focused)))).subscribe(A=>this._keyManager.updateActiveItem(A)),this._directDescendantItems.changes.subscribe(A=>{let i=this._keyManager;if(this._panelAnimationState==="enter"&&i.activeItem?._hasFocus()){let n=A.toArray(),o=Math.max(0,Math.min(n.length-1,i.activeItemIndex||0));n[o]&&!n[o].disabled?i.setActiveItem(o):i.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusRef?.destroy(),clearTimeout(this._exitFallbackTimeout)}_hovered(){return this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),Si(i=>fi(...i.map(n=>n._hovered))))}addItem(A){}removeItem(A){}_handleKeydown(A){let i=A.keyCode,n=this._keyManager;switch(i){case 27:pa(A)||(A.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&this.direction==="ltr"&&this.closed.emit("keydown");break;case 39:this.parentMenu&&this.direction==="rtl"&&this.closed.emit("keydown");break;default:(i===38||i===40)&&n.setFocusOrigin("keyboard"),n.onKeydown(A);return}}focusFirstItem(A="program"){this._firstItemFocusRef?.destroy(),this._firstItemFocusRef=Yn(()=>{let i=this._resolvePanel();if(!i||!i.contains(document.activeElement)){let n=this._keyManager;n.setFocusOrigin(A).setFirstItemActive(),!n.activeItem&&i&&i.focus()}},{injector:this._injector})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(A){}setPositionClasses(A=this.xPosition,i=this.yPosition){this._classList=Ge(cA({},this._classList),{"mat-menu-before":A==="before","mat-menu-after":A==="after","mat-menu-above":i==="above","mat-menu-below":i==="below"}),this._changeDetectorRef.markForCheck()}_onAnimationDone(A){let i=A===Rv;(i||A===mG)&&(i&&(clearTimeout(this._exitFallbackTimeout),this._exitFallbackTimeout=void 0),this._animationDone.next(i?"void":"enter"),this._isAnimating.set(!1))}_onAnimationStart(A){(A===mG||A===Rv)&&this._isAnimating.set(!0)}_setIsOpen(A){if(this._panelAnimationState=A?"enter":"void",A){if(this._keyManager.activeItemIndex===0){let i=this._resolvePanel();i&&(i.scrollTop=0)}}else this._animationsDisabled||(this._exitFallbackTimeout=setTimeout(()=>this._onAnimationDone(Rv),200));this._animationsDisabled&&setTimeout(()=>{this._onAnimationDone(A?mG:Rv)}),this._changeDetectorRef.markForCheck()}_updateDirectDescendants(){this._allItems.changes.pipe(cn(this._allItems)).subscribe(A=>{this._directDescendantItems.reset(A.filter(i=>i._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}_resolvePanel(){let A=null;return this._directDescendantItems.length&&(A=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-menu"]],contentQueries:function(i,n,o){if(i&1&&fa(o,I_A,5)(o,C2,5)(o,C2,4),i&2){let a;ce(a=Ce())&&(n.lazyContent=a.first),ce(a=Ce())&&(n._allItems=a),ce(a=Ce())&&(n.items=a)}},viewQuery:function(i,n){if(i&1&&ai(Tn,5),i&2){let o;ce(o=Ce())&&(n.templateRef=o.first)}},hostVars:3,hostBindings:function(i,n){i&2&&ie("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},inputs:{backdropClass:"backdropClass",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:[2,"overlapTrigger","overlapTrigger",he],hasBackdrop:[2,"hasBackdrop","hasBackdrop",A=>A==null?null:he(A)],panelClass:[0,"class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"},exportAs:["matMenu"],features:[dt([{provide:pG,useExisting:t}])],ngContentSelectors:c_A,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel",3,"click","animationstart","animationend","animationcancel","id"],[1,"mat-mdc-menu-content"]],template:function(i,n){i&1&&(Yt(),gp(0,C_A,3,12,"ng-template"))},styles:[`mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}@keyframes _mat-menu-enter{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:none}}@keyframes _mat-menu-exit{from{opacity:1}to{opacity:0}}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;box-sizing:border-box;outline:0;animation:_mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));box-shadow:var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));will-change:transform,opacity}.mat-mdc-menu-panel.mat-menu-panel-exit-animation{animation:_mat-menu-exit 100ms 25ms linear forwards}.mat-mdc-menu-panel.mat-menu-panel-animations-disabled{animation:none}.mat-mdc-menu-panel.mat-menu-panel-animating{pointer-events:none}.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{border-top-color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none} -`],encapsulation:2,changeDetection:0})}return t})(),B_A=new yA("mat-menu-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}});var Fh=new WeakMap,E_A=(()=>{class t{_canHaveBackdrop;_element=h(ge);_viewContainerRef=h(Oo);_menuItemInstance=h(C2,{optional:!0,self:!0});_dir=h(Ro,{optional:!0});_focusMonitor=h(ar);_ngZone=h(Oe);_injector=h(ft);_scrollStrategy=h(B_A);_changeDetectorRef=h(Dt);_animationsDisabled=ji();_portal;_overlayRef=null;_menuOpen=!1;_closingActionsSubscription=Jn.EMPTY;_menuCloseSubscription=Jn.EMPTY;_pendingRemoval;_parentMaterialMenu;_parentInnerPadding;_openedBy=void 0;get _menu(){return this._menuInternal}set _menu(A){A!==this._menuInternal&&(this._menuInternal=A,this._menuCloseSubscription.unsubscribe(),A&&(this._parentMaterialMenu,this._menuCloseSubscription=A.close.subscribe(i=>{this._destroyMenu(i),(i==="click"||i==="tab")&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(i)})),this._menuItemInstance?._setTriggersSubmenu(this._triggersSubmenu()))}_menuInternal=null;constructor(A){this._canHaveBackdrop=A;let i=h(pG,{optional:!0});this._parentMaterialMenu=i instanceof AC?i:void 0}ngOnDestroy(){this._menu&&this._ownsMenu(this._menu)&&Fh.delete(this._menu),this._pendingRemoval?.unsubscribe(),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null)}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this._menu)}_closeMenu(){this._menu?.close.emit()}_openMenu(A){if(this._triggerIsAriaDisabled())return;let i=this._menu;if(this._menuOpen||!i)return;this._pendingRemoval?.unsubscribe();let n=Fh.get(i);Fh.set(i,this),n&&n!==this&&n._closeMenu();let o=this._createOverlay(i),a=o.getConfig(),r=a.positionStrategy;this._setPosition(i,r),this._canHaveBackdrop?a.hasBackdrop=i.hasBackdrop==null?!this._triggersSubmenu():i.hasBackdrop:a.hasBackdrop=!1,o.hasAttached()||(o.attach(this._getPortal(i)),i.lazyContent?.attach(this.menuData)),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this._closeMenu()),i.parentMenu=this._triggersSubmenu()?this._parentMaterialMenu:void 0,i.direction=this.dir,A&&i.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0),i instanceof AC&&(i._setIsOpen(!0),i._directDescendantItems.changes.pipe(Bt(i.close)).subscribe(()=>{r.withLockedPosition(!1).reapplyLastPosition(),r.withLockedPosition(!0)}))}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}_destroyMenu(A){let i=this._overlayRef,n=this._menu;!i||!this.menuOpen||(this._closingActionsSubscription.unsubscribe(),this._pendingRemoval?.unsubscribe(),n instanceof AC&&this._ownsMenu(n)?(this._pendingRemoval=n._animationDone.pipe(oo(1)).subscribe(()=>{i.detach(),Fh.has(n)||n.lazyContent?.detach()}),n._setIsOpen(!1)):(i.detach(),n?.lazyContent?.detach()),n&&this._ownsMenu(n)&&Fh.delete(n),this.restoreFocus&&(A==="keydown"||!this._openedBy||!this._triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,this._setIsMenuOpen(!1))}_setIsMenuOpen(A){A!==this._menuOpen&&(this._menuOpen=A,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this._triggersSubmenu()&&this._menuItemInstance._setHighlighted(A),this._changeDetectorRef.markForCheck())}_createOverlay(A){if(!this._overlayRef){let i=this._getOverlayConfig(A);this._subscribeToPositions(A,i.positionStrategy),this._overlayRef=lc(this._injector,i),this._overlayRef.keydownEvents().subscribe(n=>{this._menu instanceof AC&&this._menu._handleKeydown(n)})}return this._overlayRef}_getOverlayConfig(A){return new sc({positionStrategy:q1(this._injector,this._getOverlayOrigin()).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:A.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:A.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir||"ltr",disableAnimations:this._animationsDisabled})}_subscribeToPositions(A,i){A.setPositionClasses&&i.positionChanges.subscribe(n=>{this._ngZone.run(()=>{let o=n.connectionPair.overlayX==="start"?"after":"before",a=n.connectionPair.overlayY==="top"?"below":"above";A.setPositionClasses(o,a)})})}_setPosition(A,i){let[n,o]=A.xPosition==="before"?["end","start"]:["start","end"],[a,r]=A.yPosition==="above"?["bottom","top"]:["top","bottom"],[s,g]=[a,r],[l,C]=[n,o],I=0;if(this._triggersSubmenu()){if(C=n=A.xPosition==="before"?"start":"end",o=l=n==="end"?"start":"end",this._parentMaterialMenu){if(this._parentInnerPadding==null){let d=this._parentMaterialMenu.items.first;this._parentInnerPadding=d?d._getHostElement().offsetTop:0}I=a==="bottom"?this._parentInnerPadding:-this._parentInnerPadding}}else A.overlapTrigger||(s=a==="top"?"bottom":"top",g=r==="top"?"bottom":"top");i.withPositions([{originX:n,originY:s,overlayX:l,overlayY:a,offsetY:I},{originX:o,originY:s,overlayX:C,overlayY:a,offsetY:I},{originX:n,originY:g,overlayX:l,overlayY:r,offsetY:-I},{originX:o,originY:g,overlayX:C,overlayY:r,offsetY:-I}])}_menuClosingActions(){let A=this._getOutsideClickStream(this._overlayRef),i=this._overlayRef.detachments(),n=this._parentMaterialMenu?this._parentMaterialMenu.closed:se(),o=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(Ze(a=>this._menuOpen&&a!==this._menuItemInstance)):se();return fi(A,n,o,i)}_getPortal(A){return(!this._portal||this._portal.templateRef!==A.templateRef)&&(this._portal=new Is(A.templateRef,this._viewContainerRef)),this._portal}_ownsMenu(A){return Fh.get(A)===this}_triggerIsAriaDisabled(){return he(this._element.nativeElement.getAttribute("aria-disabled"))}static \u0275fac=function(i){ap()};static \u0275dir=OA({type:t})}return t})(),_h=(()=>{class t extends E_A{_cleanupTouchstart;_hoverSubscription=Jn.EMPTY;get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(A){this.menu=A}get menu(){return this._menu}set menu(A){this._menu=A}menuData;restoreFocus=!0;menuOpened=new $A;onMenuOpen=this.menuOpened;menuClosed=new $A;onMenuClose=this.menuClosed;constructor(){super(!0);let A=h(_i);this._cleanupTouchstart=A.listen(this._element.nativeElement,"touchstart",i=>{M1(i)||(this._openedBy="touch")},{passive:!0})}triggersSubmenu(){return super._triggersSubmenu()}toggleMenu(){return this.menuOpen?this.closeMenu():this.openMenu()}openMenu(){this._openMenu(!0)}closeMenu(){this._closeMenu()}updatePosition(){this._overlayRef?.updatePosition()}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTouchstart(),this._hoverSubscription.unsubscribe()}_getOverlayOrigin(){return this._element}_getOutsideClickStream(A){return A.backdropClick()}_handleMousedown(A){b1(A)||(this._openedBy=A.button===0?"mouse":void 0,this.triggersSubmenu()&&A.preventDefault())}_handleKeydown(A){let i=A.keyCode;(i===13||i===32)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(i===39&&this.dir==="ltr"||i===37&&this.dir==="rtl")&&(this._openedBy="keyboard",this.openMenu())}_handleClick(A){this.triggersSubmenu()?(A.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().subscribe(A=>{A===this._menuItemInstance&&!A.disabled&&this._parentMaterialMenu?._panelAnimationState!=="void"&&(this._openedBy="mouse",this._openMenu(!1))}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],hostVars:3,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._handleClick(a)})("mousedown",function(a){return n._handleMousedown(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("aria-haspopup",n.menu?"menu":null)("aria-expanded",n.menuOpen)("aria-controls",n.menuOpen?n.menu==null?null:n.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:[0,"mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:[0,"matMenuTriggerFor","menu"],menuData:[0,"matMenuTriggerData","menuData"],restoreFocus:[0,"matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"},exportAs:["matMenuTrigger"],features:[It]})}return t})();var daA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Cl,Gi,C0]})}return t})();var QaA=["*",[["mat-chip-avatar"],["","matChipAvatar",""]],[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],haA=["*","mat-chip-avatar, [matChipAvatar]","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function h_A(t,e){t&1&&(m(0,"span",3),Ke(1,1),w())}function u_A(t,e){t&1&&(m(0,"span",6),Ke(1,2),w())}function f_A(t,e){t&1&&(m(0,"span",3),Ke(1,1),m(2,"span",7),Qt(),m(3,"svg",8),GA(4,"path",9),w()()())}function m_A(t,e){t&1&&(m(0,"span",6),Ke(1,2),w())}var p_A=`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} -`;var uaA=["*"],w_A=`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} -`,vG=new yA("mat-chips-default-options",{providedIn:"root",factory:()=>({separatorKeyCodes:[13]})}),wG=new yA("MatChipAvatar"),BaA=new yA("MatChipTrailingIcon"),EaA=new yA("MatChipEdit"),DG=new yA("MatChipRemove"),bG=new yA("MatChip"),faA=(()=>{class t{_elementRef=h(ge);_parentChip=h(bG);_isPrimary=!0;_isLeading=!1;get disabled(){return this._disabled||this._parentChip?.disabled||!1}set disabled(A){this._disabled=A}_disabled=!1;tabIndex=-1;_allowFocusWhenDisabled=!1;_getDisabledAttribute(){return this.disabled&&!this._allowFocusWhenDisabled?"":null}constructor(){h(Xn).load(dr),this._elementRef.nativeElement.nodeName==="BUTTON"&&this._elementRef.nativeElement.setAttribute("type","button")}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matChipContent",""]],hostAttrs:[1,"mat-mdc-chip-action","mdc-evolution-chip__action","mdc-evolution-chip__action--presentational"],hostVars:8,hostBindings:function(i,n){i&2&&(ie("disabled",n._getDisabledAttribute())("aria-disabled",n.disabled),ne("mdc-evolution-chip__action--primary",n._isPrimary)("mdc-evolution-chip__action--secondary",!n._isPrimary)("mdc-evolution-chip__action--trailing",!n._isPrimary&&!n._isLeading))},inputs:{disabled:[2,"disabled","disabled",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?-1:en(A)],_allowFocusWhenDisabled:"_allowFocusWhenDisabled"}})}return t})(),MG=(()=>{class t extends faA{_getTabindex(){return this.disabled&&!this._allowFocusWhenDisabled?null:this.tabIndex.toString()}_handleClick(A){!this.disabled&&this._isPrimary&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&this._isPrimary&&!this._parentChip._isEditing&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipAction",""]],hostVars:3,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._handleClick(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(ie("tabindex",n._getTabindex()),ne("mdc-evolution-chip__action--presentational",!1))},features:[It]})}return t})(),maA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-chip-avatar"],["","matChipAvatar",""]],hostAttrs:["role","img",1,"mat-mdc-chip-avatar","mdc-evolution-chip__icon","mdc-evolution-chip__icon--primary"],features:[dt([{provide:wG,useExisting:t}])]})}return t})();var paA=(()=>{class t extends MG{_isPrimary=!1;_handleClick(A){this.disabled||(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipRemove",""]],hostAttrs:["role","button",1,"mat-mdc-chip-remove","mat-mdc-chip-trailing-icon","mat-focus-indicator","mdc-evolution-chip__icon","mdc-evolution-chip__icon--trailing"],hostVars:1,hostBindings:function(i,n){i&2&&ie("aria-hidden",null)},features:[dt([{provide:DG,useExisting:t}]),It]})}return t})(),Bm=(()=>{class t{_changeDetectorRef=h(Dt);_elementRef=h(ge);_tagName=h(SU);_ngZone=h(Oe);_focusMonitor=h(ar);_globalRippleOptions=h(S2,{optional:!0});_document=h(Xt);_onFocus=new XA;_onBlur=new XA;_isBasicChip=!1;role=null;_hasFocusInternal=!1;_pendingFocus=!1;_actionChanges;_animationsDisabled=ji();_allLeadingIcons;_allTrailingIcons;_allEditIcons;_allRemoveIcons;_hasFocus(){return this._hasFocusInternal}id=h(an).getId("mat-mdc-chip-");ariaLabel=null;ariaDescription=null;_chipListDisabled=!1;_hadFocusOnRemove=!1;_textElement;get value(){return this._value!==void 0?this._value:this._textElement.textContent.trim()}set value(A){this._value=A}_value;color;removable=!0;highlighted=!1;disableRipple=!1;get disabled(){return this._disabled||this._chipListDisabled}set disabled(A){this._disabled=A}_disabled=!1;removed=new $A;destroyed=new $A;basicChipAttrName="mat-basic-chip";leadingIcon;editIcon;trailingIcon;removeIcon;primaryAction;_rippleLoader=h(Yp);_injector=h(ft);constructor(){let A=h(Xn);A.load(dr),A.load(M2),this._monitorFocus(),this._rippleLoader?.configureRipple(this._elementRef.nativeElement,{className:"mat-mdc-chip-ripple",disabled:this._isRippleDisabled()})}ngOnInit(){this._isBasicChip=this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName)||this._tagName.toLowerCase()===this.basicChipAttrName}ngAfterViewInit(){this._textElement=this._elementRef.nativeElement.querySelector(".mat-mdc-chip-action-label"),this._pendingFocus&&(this._pendingFocus=!1,this.focus())}ngAfterContentInit(){this._actionChanges=fi(this._allLeadingIcons.changes,this._allTrailingIcons.changes,this._allEditIcons.changes,this._allRemoveIcons.changes).subscribe(()=>this._changeDetectorRef.markForCheck())}ngDoCheck(){this._rippleLoader.setDisabled(this._elementRef.nativeElement,this._isRippleDisabled())}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement),this._actionChanges?.unsubscribe(),this.destroyed.emit({chip:this}),this.destroyed.complete()}remove(){this.removable&&(this._hadFocusOnRemove=this._hasFocus(),this.removed.emit({chip:this}))}_isRippleDisabled(){return this.disabled||this.disableRipple||this._animationsDisabled||this._isBasicChip||!this._hasInteractiveActions()||!!this._globalRippleOptions?.disabled}_hasTrailingIcon(){return!!(this.trailingIcon||this.removeIcon)}_handleKeydown(A){(A.keyCode===8&&!A.repeat||A.keyCode===46)&&(A.preventDefault(),this.remove())}focus(){this.disabled||(this.primaryAction?this.primaryAction.focus():this._pendingFocus=!0)}_getSourceAction(A){return this._getActions().find(i=>{let n=i._elementRef.nativeElement;return n===A||n.contains(A)})}_getActions(){let A=[];return this.editIcon&&A.push(this.editIcon),this.primaryAction&&A.push(this.primaryAction),this.removeIcon&&A.push(this.removeIcon),A}_handlePrimaryActionInteraction(){}_hasInteractiveActions(){return this._getActions().length>0}_edit(A){}_monitorFocus(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{let i=A!==null;i!==this._hasFocusInternal&&(this._hasFocusInternal=i,i?this._onFocus.next({chip:this}):(this._changeDetectorRef.markForCheck(),setTimeout(()=>this._ngZone.run(()=>this._onBlur.next({chip:this})))))})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip"],["","mat-basic-chip",""],["mat-chip"],["","mat-chip",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,wG,5)(o,EaA,5)(o,BaA,5)(o,DG,5)(o,wG,5)(o,BaA,5)(o,EaA,5)(o,DG,5),i&2){let a;ce(a=Ce())&&(n.leadingIcon=a.first),ce(a=Ce())&&(n.editIcon=a.first),ce(a=Ce())&&(n.trailingIcon=a.first),ce(a=Ce())&&(n.removeIcon=a.first),ce(a=Ce())&&(n._allLeadingIcons=a),ce(a=Ce())&&(n._allTrailingIcons=a),ce(a=Ce())&&(n._allEditIcons=a),ce(a=Ce())&&(n._allRemoveIcons=a)}},viewQuery:function(i,n){if(i&1&&ai(MG,5),i&2){let o;ce(o=Ce())&&(n.primaryAction=o.first)}},hostAttrs:[1,"mat-mdc-chip"],hostVars:31,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("role",n.role)("aria-label",n.ariaLabel),Po("mat-"+(n.color||"primary")),ne("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",n.leadingIcon)("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-basic-chip",n._isBasicChip)("mat-mdc-standard-chip",!n._isBasicChip)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon())("_mat-animation-noopable",n._animationsDisabled))},inputs:{role:"role",id:"id",ariaLabel:[0,"aria-label","ariaLabel"],ariaDescription:[0,"aria-description","ariaDescription"],value:"value",color:"color",removable:[2,"removable","removable",he],highlighted:[2,"highlighted","highlighted",he],disableRipple:[2,"disableRipple","disableRipple",he],disabled:[2,"disabled","disabled",he]},outputs:{removed:"removed",destroyed:"destroyed"},exportAs:["matChip"],features:[dt([{provide:bG,useExisting:t}])],ngContentSelectors:haA,decls:8,vars:2,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipContent",""],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"]],template:function(i,n){i&1&&(Yt(QaA),GA(0,"span",0),m(1,"span",1)(2,"span",2),V(3,h_A,2,0,"span",3),m(4,"span",4),Ke(5),GA(6,"span",5),w()()(),V(7,u_A,2,0,"span",6)),i&2&&(p(3),W(n.leadingIcon?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[faA],styles:[`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} -`],encapsulation:2,changeDetection:0})}return t})();var kG=(()=>{class t extends Bm{_defaultOptions=h(vG,{optional:!0});chipListSelectable=!0;_chipListMultiple=!1;_chipListHideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get selectable(){return this._selectable&&this.chipListSelectable}set selectable(A){this._selectable=A,this._changeDetectorRef.markForCheck()}_selectable=!0;get selected(){return this._selected}set selected(A){this._setSelectedState(A,!1,!0)}_selected=!1;get ariaSelected(){return this.selectable?this.selected.toString():null}basicChipAttrName="mat-basic-chip-option";selectionChange=new $A;ngOnInit(){super.ngOnInit(),this.role="presentation"}select(){this._setSelectedState(!0,!1,!0)}deselect(){this._setSelectedState(!1,!1,!0)}selectViaInteraction(){this._setSelectedState(!0,!0,!0)}toggleSelected(A=!1){return this._setSelectedState(!this.selected,A,!0),this.selected}_handlePrimaryActionInteraction(){this.disabled||(this.focus(),this.selectable&&this.toggleSelected(!0))}_hasLeadingGraphic(){return this.leadingIcon?!0:!this._chipListHideSingleSelectionIndicator||this._chipListMultiple}_setSelectedState(A,i,n){A!==this.selected&&(this._selected=A,n&&this.selectionChange.emit({source:this,isUserInput:i,selected:this.selected}),this._changeDetectorRef.markForCheck())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip-option"],["","mat-basic-chip-option",""],["mat-chip-option"],["","mat-chip-option",""]],hostAttrs:[1,"mat-mdc-chip","mat-mdc-chip-option"],hostVars:37,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-description",null)("role",n.role),ne("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--filter",!n._isBasicChip)("mdc-evolution-chip--selectable",!n._isBasicChip)("mat-mdc-chip-selected",n.selected)("mat-mdc-chip-multiple",n._chipListMultiple)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-chip-with-avatar",n.leadingIcon)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--selected",n.selected)("mdc-evolution-chip--selecting",!n._animationsDisabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-primary-graphic",n._hasLeadingGraphic())("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon()))},inputs:{selectable:[2,"selectable","selectable",he],selected:[2,"selected","selected",he]},outputs:{selectionChange:"selectionChange"},features:[dt([{provide:Bm,useExisting:t},{provide:bG,useExisting:t}]),It],ngContentSelectors:haA,decls:8,vars:6,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipAction","","role","option",3,"_allowFocusWhenDisabled"],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"],[1,"mdc-evolution-chip__checkmark"],["viewBox","-2 -3 30 30","focusable","false","aria-hidden","true",1,"mdc-evolution-chip__checkmark-svg"],["fill","none","stroke","currentColor","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-evolution-chip__checkmark-path"]],template:function(i,n){i&1&&(Yt(QaA),GA(0,"span",0),m(1,"span",1)(2,"button",2),V(3,f_A,5,0,"span",3),m(4,"span",4),Ke(5),GA(6,"span",5),w()()(),V(7,m_A,2,0,"span",6)),i&2&&(p(2),$("_allowFocusWhenDisabled",!0),ie("aria-description",n.ariaDescription)("aria-label",n.ariaLabel)("aria-selected",n.ariaSelected),p(),W(n._hasLeadingGraphic()?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[MG],styles:[p_A],encapsulation:2,changeDetection:0})}return t})();var SG=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_dir=h(Ro,{optional:!0});_lastDestroyedFocusedChipIndex=null;_keyManager;_destroyed=new XA;_defaultRole="presentation";get chipFocusChanges(){return this._getChipStream(A=>A._onFocus)}get chipDestroyedChanges(){return this._getChipStream(A=>A.destroyed)}get chipRemovedChanges(){return this._getChipStream(A=>A.removed)}get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._syncChipsState()}_disabled=!1;get empty(){return!this._chips||this._chips.length===0}get role(){return this._explicitRole?this._explicitRole:this.empty?null:this._defaultRole}tabIndex=0;set role(A){this._explicitRole=A}_explicitRole=null;get focused(){return this._hasFocusedChip()}_chips;_chipActions=new ol;constructor(){}ngAfterViewInit(){this._setUpFocusManagement(),this._trackChipSetChanges(),this._trackDestroyedFocusedChip()}ngOnDestroy(){this._keyManager?.destroy(),this._chipActions.destroy(),this._destroyed.next(),this._destroyed.complete()}_hasFocusedChip(){return this._chips&&this._chips.some(A=>A._hasFocus())}_syncChipsState(){this._chips?.forEach(A=>{A._chipListDisabled=this._disabled,A._changeDetectorRef.markForCheck()})}focus(){}_handleKeydown(A){this._originatesFromChip(A)&&this._keyManager.onKeydown(A)}_isValidIndex(A){return A>=0&&Athis._elementRef.nativeElement.tabIndex=A))}_getChipStream(A){return this._chips.changes.pipe(cn(null),Si(()=>fi(...this._chips.map(A))))}_originatesFromChip(A){let i=A.target;for(;i&&i!==this._elementRef.nativeElement;){if(i.classList.contains("mat-mdc-chip"))return!0;i=i.parentElement}return!1}_setUpFocusManagement(){this._chips.changes.pipe(cn(this._chips)).subscribe(A=>{let i=[];A.forEach(n=>n._getActions().forEach(o=>i.push(o))),this._chipActions.reset(i),this._chipActions.notifyOnChanges()}),this._keyManager=new s0(this._chipActions).withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr").withHomeAndEnd().skipPredicate(A=>this._skipPredicate(A)),this.chipFocusChanges.pipe(Bt(this._destroyed)).subscribe(({chip:A})=>{let i=A._getSourceAction(document.activeElement);i&&this._keyManager.updateActiveItem(i)}),this._dir?.change.pipe(Bt(this._destroyed)).subscribe(A=>this._keyManager.withHorizontalOrientation(A))}_skipPredicate(A){return A.disabled}_trackChipSetChanges(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.disabled&&Promise.resolve().then(()=>this._syncChipsState()),this._redirectDestroyedChipFocus()})}_trackDestroyedFocusedChip(){this.chipDestroyedChanges.pipe(Bt(this._destroyed)).subscribe(A=>{let n=this._chips.toArray().indexOf(A.chip),o=A.chip._hasFocus(),a=A.chip._hadFocusOnRemove&&this._keyManager.activeItem&&A.chip._getActions().includes(this._keyManager.activeItem),r=o||a;this._isValidIndex(n)&&r&&(this._lastDestroyedFocusedChipIndex=n)})}_redirectDestroyedChipFocus(){if(this._lastDestroyedFocusedChipIndex!=null){if(this._chips.length){let A=Math.min(this._lastDestroyedFocusedChipIndex,this._chips.length-1),i=this._chips.toArray()[A];i.disabled?this._chips.length===1?this.focus():this._keyManager.setPreviousItemActive():i.focus()}else this.focus();this._lastDestroyedFocusedChipIndex=null}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-chip-set"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Bm,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mat-mdc-chip-set","mdc-evolution-chip-set"],hostVars:1,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("role",n.role)},inputs:{disabled:[2,"disabled","disabled",he],role:"role",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:uaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Yt(),li(0,"div",0),Ke(1),Ei())},styles:[`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} -`],encapsulation:2,changeDetection:0})}return t})(),yG=class{source;value;constructor(e,A){this.source=e,this.value=A}},D_A={provide:Lg,useExisting:wr(()=>xG),multi:!0},xG=(()=>{class t extends SG{_onTouched=()=>{};_onChange=()=>{};_defaultRole="listbox";_defaultOptions=h(vG,{optional:!0});get multiple(){return this._multiple}set multiple(A){this._multiple=A,this._syncListboxProperties()}_multiple=!1;get selected(){let A=this._chips.toArray().filter(i=>i.selected);return this.multiple?A:A[0]}ariaOrientation="horizontal";get selectable(){return this._selectable}set selectable(A){this._selectable=A,this._syncListboxProperties()}_selectable=!0;compareWith=(A,i)=>A===i;required=!1;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncListboxProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get chipSelectionChanges(){return this._getChipStream(A=>A.selectionChange)}get chipBlurChanges(){return this._getChipStream(A=>A._onBlur)}get value(){return this._value}set value(A){this._chips&&this._chips.length&&this._setSelectionByValue(A,!1),this._value=A}_value;change=new $A;_chips=void 0;ngAfterContentInit(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.value!==void 0&&Promise.resolve().then(()=>{this._setSelectionByValue(this.value,!1)}),this._syncListboxProperties()}),this.chipBlurChanges.pipe(Bt(this._destroyed)).subscribe(()=>this._blur()),this.chipSelectionChanges.pipe(Bt(this._destroyed)).subscribe(A=>{this.multiple||this._chips.forEach(i=>{i!==A.source&&i._setSelectedState(!1,!1,!1)}),A.isUserInput&&this._propagateChanges()})}focus(){if(this.disabled)return;let A=this._getFirstSelectedChip();A&&!A.disabled?A.focus():this._chips.length>0?this._keyManager.setFirstItemActive():this._elementRef.nativeElement.focus()}writeValue(A){A!=null?this.value=A:this.value=void 0}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}_setSelectionByValue(A,i=!0){this._clearSelection(),Array.isArray(A)?A.forEach(n=>this._selectValue(n,i)):this._selectValue(A,i)}_blur(){this.disabled||setTimeout(()=>{this.focused||this._markAsTouched()})}_keydown(A){A.keyCode===9&&super._allowFocusEscape()}_markAsTouched(){this._onTouched(),this._changeDetectorRef.markForCheck()}_propagateChanges(){let A=null;Array.isArray(this.selected)?A=this.selected.map(i=>i.value):A=this.selected?this.selected.value:void 0,this._value=A,this.change.emit(new yG(this,A)),this._onChange(A),this._changeDetectorRef.markForCheck()}_clearSelection(A){this._chips.forEach(i=>{i!==A&&i.deselect()})}_selectValue(A,i){let n=this._chips.find(o=>o.value!=null&&this.compareWith(o.value,A));return n&&(i?n.selectViaInteraction():n.select()),n}_syncListboxProperties(){this._chips&&Promise.resolve().then(()=>{this._chips.forEach(A=>{A._chipListMultiple=this.multiple,A.chipListSelectable=this._selectable,A._chipListHideSingleSelectionIndicator=this.hideSingleSelectionIndicator,A._changeDetectorRef.markForCheck()})})}_getFirstSelectedChip(){return Array.isArray(this.selected)?this.selected.length?this.selected[0]:void 0:this.selected}_skipPredicate(A){return!1}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-chip-listbox"]],contentQueries:function(i,n,o){if(i&1&&fa(o,kG,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mdc-evolution-chip-set","mat-mdc-chip-listbox"],hostVars:10,hostBindings:function(i,n){i&1&&tA("focus",function(){return n.focus()})("blur",function(){return n._blur()})("keydown",function(a){return n._keydown(a)}),i&2&&(vo("tabIndex",n.disabled||n.empty?-1:n.tabIndex),ie("role",n.role)("aria-required",n.role?n.required:null)("aria-disabled",n.disabled.toString())("aria-multiselectable",n.multiple)("aria-orientation",n.ariaOrientation),ne("mat-mdc-chip-list-disabled",n.disabled)("mat-mdc-chip-list-required",n.required))},inputs:{multiple:[2,"multiple","multiple",he],ariaOrientation:[0,"aria-orientation","ariaOrientation"],selectable:[2,"selectable","selectable",he],compareWith:"compareWith",required:[2,"required","required",he],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],value:"value"},outputs:{change:"change"},features:[dt([D_A]),It],ngContentSelectors:uaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Yt(),li(0,"div",0),Ke(1),Ei())},styles:[w_A],encapsulation:2,changeDetection:0})}return t})();var Nv=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[UB,{provide:vG,useValue:{separatorKeyCodes:[13]}}],imports:[x2,Gi]})}return t})();var Fv=new yA("ThemeService");var Lh=class t{themeService=h(Fv);get currentTheme(){return this.themeService.currentTheme()}get themeIcon(){return this.currentTheme==="light"?"dark_mode":"light_mode"}get themeTooltip(){return this.currentTheme==="light"?"Switch to dark mode":"Switch to light mode"}toggleTheme(){this.themeService.toggleTheme()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-theme-toggle"]],decls:3,vars:2,consts:[["mat-icon-button","","aria-label","Toggle theme",1,"theme-toggle-button",3,"click","matTooltip"]],template:function(A,i){A&1&&(m(0,"button",0),tA("click",function(){return i.toggleTheme()}),m(1,"mat-icon"),K(2),w()()),A&2&&($("matTooltip",i.themeTooltip),p(2),qA(i.themeIcon))},dependencies:[Il,Fn,Ns,Wa,U2,xa],styles:[".theme-toggle-button[_ngcontent-%COMP%]{color:var(--side-panel-mat-icon-color)}.theme-toggle-button[_ngcontent-%COMP%]:hover{opacity:.8}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);color:var(--builder-text-tertiary-color);border-radius:50%;transition:all .2s ease;margin-right:0!important}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color);color:var(--builder-text-primary-color);opacity:1}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}"]})};var DaA=(t,e)=>e.name;function y_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;Se(" AgentTool: ",A.name," ")}}function v_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;Se(" ",A.name," ")}}function b_A(t,e){t&1&&(m(0,"mat-icon",28),K(1,"chevron_right"),w())}function M_A(t,e){if(t&1){let A=JA();m(0,"div",27),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgentFromBreadcrumb(n))}),V(1,y_A,1,1)(2,v_A,1,1),w(),V(3,b_A,2,0,"mat-icon",28)}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);ne("current-agent",(n.currentSelectedAgent==null?null:n.currentSelectedAgent.name)===A.name),p(),W(i===0&&n.isInAgentToolContext()?1:2),p(2),W(i0?0:-1)}}function J_A(t,e){if(t&1){let A=JA();m(0,"div",15)(1,"div",16)(2,"div"),K(3," Tools "),w(),m(4,"div")(5,"button",40,2)(7,"mat-icon"),K(8,"add"),w()(),m(9,"mat-menu",null,3)(11,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addTool("Function tool"))}),m(12,"span"),K(13,"Function tool"),w()(),m(14,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addTool("Built-in tool"))}),m(15,"span"),K(16,"Built-in tool"),w()(),m(17,"button",23),tA("click",function(){Z(A);let n=v();return X(n.createAgentTool())}),m(18,"span"),K(19,"Agent tool"),w()()()()(),V(20,U_A,1,1),ri(21,"async"),w()}if(t&2){let A,i=An(10),n=v();p(5),$("matMenuTriggerFor",i),p(6),$("matTooltip",n.toolMenuTooltips("Function tool")),p(3),$("matTooltip",n.toolMenuTooltips("Built-in tool")),p(3),$("matTooltip",n.toolMenuTooltips("Agent tool")),p(3),W((A=Ci(21,5,n.toolsMap$))?20:-1,A)}}function Y_A(t,e){if(t&1){let A=JA();m(0,"mat-chip",43),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgent(n))}),m(1,"mat-icon",44),K(2),w(),m(3,"span",45),K(4),w(),m(5,"button",48),tA("click",function(n){let o=Z(A).$implicit;return v(2).deleteSubAgent(o.name),X(n.stopPropagation())}),m(6,"mat-icon"),K(7,"cancel"),w()()()}if(t&2){let A=e.$implicit,i=v(2);p(2),qA(i.getAgentIcon(A.agent_class)),p(2),qA(A.name)}}function T_A(t,e){if(t&1&&(m(0,"div",20)(1,"mat-chip-set",47),Ut(2,Y_A,8,2,"mat-chip",42,DaA),w()()),t&2){let A=v();p(2),Jt(A.agentConfig.sub_agents)}}function H_A(t,e){if(t&1){let A=JA();GA(0,"mat-divider"),m(1,"div",22),K(2,"Model (LLM) Interaction"),w(),m(3,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("before_model"))}),m(4,"span"),K(5,"Before Model"),w()(),m(6,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("after_model"))}),m(7,"span"),K(8,"After Model"),w()(),GA(9,"mat-divider"),m(10,"div",22),K(11,"Tool Execution"),w(),m(12,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("before_tool"))}),m(13,"span"),K(14,"Before Tool"),w()(),m(15,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("after_tool"))}),m(16,"span"),K(17,"After Tool"),w()()}if(t&2){let A=v();p(3),$("matTooltip",A.callbackMenuTooltips("before_model")),p(3),$("matTooltip",A.callbackMenuTooltips("after_model")),p(6),$("matTooltip",A.callbackMenuTooltips("before_tool")),p(3),$("matTooltip",A.callbackMenuTooltips("after_tool"))}}function z_A(t,e){if(t&1){let A=JA();m(0,"div",52),tA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.editCallback(n))}),m(1,"mat-chip",53)(2,"span",54)(3,"span",55),K(4),w(),m(5,"span",56),K(6),w()()(),m(7,"button",57),tA("click",function(n){let o=Z(A).$implicit,a=v(3);return a.deleteCallback(a.agentConfig.name,o),X(n.stopPropagation())}),m(8,"mat-icon"),K(9,"remove"),w()()()}if(t&2){let A=e.$implicit;p(4),qA(A.type),p(2),qA(A.name)}}function O_A(t,e){if(t&1&&(m(0,"div",49)(1,"mat-chip-set",50),Ut(2,z_A,10,2,"div",51,Li),w()()),t&2){let A=v(),i=v();p(2),Jt(A.get(i.agentConfig.name))}}function P_A(t,e){if(t&1&&V(0,O_A,4,0,"div",49),t&2){let A=e,i=v();W(i.agentConfig&&A.get(i.agentConfig.name)&&A.get(i.agentConfig.name).length>0?0:-1)}}var _v=class t{CALLBACKS_TAB_INDEX=3;jsonEditorComponent;appNameInput="";exitBuilderMode=new $A;closePanel=new $A;featureFlagService=h(vr);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();toolArgsString=jA("");editingToolArgs=jA(!1);editingTool=null;selectedTabIndex=0;agentConfig={isRoot:!1,name:"",agent_class:"",model:"",instruction:"",sub_agents:[],tools:[],callbacks:[]};hierarchyPath=[];currentSelectedAgent=void 0;isRootAgentEditable=!0;models=["gemini-2.5-flash","gemini-2.5-pro"];agentTypes=["LlmAgent","LoopAgent","ParallelAgent","SequentialAgent"];agentBuilderService=h(Q0);dialog=h(Gs);agentService=h(sg);snackBar=h(J2);router=h(Cs);cdr=h(Dt);selectedTool=void 0;toolAgentName="";toolTypes=["Custom tool","Function tool","Built-in tool","Agent Tool"];editingCallback=null;selectedCallback=void 0;callbackTypes=["before_agent","before_model","before_tool","after_tool","after_model","after_agent"];builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);header="Select an agent or tool to edit";toolsMap$;callbacksMap$;getJsonStringForEditor(e){if(!e)return"{}";let A=cA({},e);return delete A.skip_summarization,JSON.stringify(A,null,2)}constructor(){this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.callbacksMap$=this.agentBuilderService.getAgentCallbacksMap(),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.agentConfig=e,this.currentSelectedAgent=e,e&&(this.editingTool=null,this.editingCallback=null,this.header="Agent configuration",this.updateBreadcrumb(e)),this.cdr.markForCheck()}),this.agentBuilderService.getSelectedTool().subscribe(e=>{this.selectedTool=e,!(e&&e.toolType==="Agent Tool")&&(e?(this.editingTool=e,this.editingToolArgs.set(!1),setTimeout(()=>{let A=e.toolType=="Function tool"?"Function tool":e.name;if(e.toolType=="Function tool"&&!e.name&&(e.name="Function tool"),e.toolType==="Custom tool")e.args||(e.args={}),this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0);else{let i=this.builtInToolArgs.get(A);if(i){e.args||(e.args={});for(let n of i)e.args&&(e.args[n]="")}this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0)}this.cdr.markForCheck()}),this.selectedTabIndex=2):this.editingTool=null,this.cdr.markForCheck())}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e,e?(this.selectCallback(e),this.selectedTabIndex=this.CALLBACKS_TAB_INDEX):this.editingCallback=null,this.cdr.markForCheck()}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{this.agentConfig&&e&&this.agentConfig.name===e.agentName&&(this.agentConfig=Ge(cA({},this.agentConfig),{callbacks:e.callbacks}),this.cdr.markForCheck())}),this.agentBuilderService.getSideTabChangeRequest().subscribe(e=>{e==="tools"?this.selectedTabIndex=2:e==="config"&&(this.selectedTabIndex=0)})}getObjectKeys(e){return e?Object.keys(e).filter(A=>A!=="skip_summarization"):[]}getCallbacksByType(){let e=new Map;return this.callbackTypes.forEach(A=>{e.set(A,[])}),this.agentConfig?.callbacks&&this.agentConfig.callbacks.forEach(A=>{let i=e.get(A.type);i&&i.push(A)}),e}updateBreadcrumb(e){this.hierarchyPath=this.buildHierarchyPath(e)}buildHierarchyPath(e){let A=[],i=this.findContextualRoot(e);return i?e.name===i.name?[i]:this.findPathToAgent(i,e,[i])||[e]:[e]}isInAgentToolContext(){return!this.hierarchyPath||this.hierarchyPath.length===0?!1:this.hierarchyPath[0]?.isAgentTool===!0}findContextualRoot(e){if(e.isAgentTool)return e;let A=this.agentBuilderService.getNodes();for(let n of A)if(n.isAgentTool&&this.findPathToAgent(n,e,[n]))return n;let i=this.agentBuilderService.getRootNode();if(i&&this.findPathToAgent(i,e,[i]))return i;if(e.isRoot)return e;for(let n of A)if(n.isRoot&&this.findPathToAgent(n,e,[n]))return n;return i}findPathToAgent(e,A,i){if(e.name===A.name)return i;for(let n of e.sub_agents){let o=[...i,n],a=this.findPathToAgent(n,A,o);if(a)return a}return null}selectAgentFromBreadcrumb(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectAgent(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectTool(e){if(e.toolType==="Agent Tool"){let A=e.name;this.agentBuilderService.requestNewTab(A);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){this.editTool(e);return}this.agentBuilderService.setSelectedTool(e)}editTool(e){if(!this.agentConfig)return;let A;e.toolType==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),A.afterClosed().subscribe(i=>{if(i&&i.isEditMode){let n=this.agentConfig.tools?.findIndex(o=>o.name===e.name);n!==void 0&&n!==-1&&this.agentConfig.tools&&(this.agentConfig.tools[n].name=i.name,i.args&&(this.agentConfig.tools[n].args=i.args),this.agentBuilderService.setAgentTools(this.agentConfig.name,this.agentConfig.tools))}})}addTool(e){if(this.agentConfig){let A;e==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e}}),A.afterClosed().subscribe(i=>{if(i){let n={toolType:i.toolType,name:i.name};this.agentBuilderService.addTool(this.agentConfig.name,n),this.agentBuilderService.setSelectedTool(n)}})}}addCallback(e){if(this.agentConfig){let A=this.agentConfig?.callbacks?.map(n=>n.name)??[];this.dialog.open(P4,{width:"500px",data:{callbackType:e,existingCallbackNames:A}}).afterClosed().subscribe(n=>{if(n){let o={name:n.name,type:n.type};this.agentBuilderService.addCallback(this.agentConfig.name,o)}})}}editCallback(e){if(!this.agentConfig)return;let A=this.agentConfig.callbacks?.map(n=>n.name)??[];this.dialog.open(P4,{width:"500px",data:{callbackType:e.type,existingCallbackNames:A,isEditMode:!0,callback:e,availableCallbackTypes:this.callbackTypes}}).afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=this.agentBuilderService.updateCallback(this.agentConfig.name,e.name,Ge(cA({},e),{name:n.name,type:n.type}));o.success?this.cdr.markForCheck():console.error("Failed to update callback:",o.error)}})}deleteCallback(e,A){this.dialog.open(Vc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success?this.cdr.markForCheck():console.error("Failed to delete callback:",o.error)}})}addSubAgent(e){e&&this.agentBuilderService.setAddSubAgentSubject(e)}deleteSubAgent(e){this.agentBuilderService.setDeleteSubAgentSubject(e)}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(Vc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{if(a==="confirm")if(A.toolType==="Agent Tool"){let r=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,r)}else this.agentBuilderService.deleteTool(e,A)})}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}backToToolList(){this.editingTool=null,this.agentBuilderService.setSelectedTool(void 0)}editToolArgs(){this.editingToolArgs.set(!0)}cancelEditToolArgs(e){this.editingToolArgs.set(!1),this.toolArgsString.set(this.getJsonStringForEditor(e?.args))}saveToolArgs(e){if(this.jsonEditorComponent&&e)try{let A=JSON.parse(this.jsonEditorComponent.getJsonString()),i=e.args?e.args.skip_summarization:!1;e.args=A,e.args.skip_summarization=i,this.toolArgsString.set(JSON.stringify(e.args,null,2)),this.editingToolArgs.set(!1)}catch(A){console.error("Error parsing tool arguments JSON",A)}}onToolTypeSelectionChange(e){e?.toolType==="Built-in tool"?(e.name="google_search",this.onBuiltInToolSelectionChange(e)):e?.toolType==="Custom tool"?(e.args={},this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0)):e&&(e.name="",e.args={skip_summarization:!1},this.toolArgsString.set("{}"),this.editingToolArgs.set(!1))}onBuiltInToolSelectionChange(e){e&&(this.editingToolArgs.set(!1),setTimeout(()=>{e.args={skip_summarization:!1};let A=this.builtInToolArgs.get(e.name);if(A)for(let i of A)e.args&&(e.args[i]="");this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0),this.cdr.markForCheck()}))}selectCallback(e){this.editingCallback=e}backToCallbackList(){this.editingCallback=null}onCallbackTypeChange(e){}createAgentTool(){this.dialog.open(Vc,{width:"750px",height:"450px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name",showToolInfo:!0,toolType:"Agent tool"}}).afterClosed().subscribe(A=>{if(A&&typeof A=="string"){let i=this.agentConfig?.name||"root_agent";this.agentBuilderService.requestNewTab(A,i)}})}saveChanges(){if(!this.agentBuilderService.getRootNode()){this.snackBar.open("Please create an agent first.","OK");return}this.appNameInput?this.saveAgent(this.appNameInput):this.agentService.getApp().subscribe(A=>{A?this.saveAgent(A):this.snackBar.open("No agent selected. Please select an agent first.","OK")})}cancelChanges(){this.agentService.agentChangeCancel(this.appNameInput).subscribe(e=>{}),this.exitBuilderMode.emit()}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this.snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o&&this.agentService.agentBuild(i).subscribe(a=>{a?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this.snackBar.open("Something went wrong, please try again","OK")})})}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}addSubAgentWithType(e){if(!this.agentConfig?.name)return;let A=this.agentConfig.agent_class!=="LlmAgent";this.agentBuilderService.setAddSubAgentSubject(this.agentConfig.name,e,A)}callbackMenuTooltips(e){return fc.getCallbackMenuTooltips(e)}toolMenuTooltips(e){return fc.getToolMenuTooltips(e)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-tabs"]],viewQuery:function(A,i){if(A&1&&ai(qc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},inputs:{appNameInput:"appNameInput"},outputs:{exitBuilderMode:"exitBuilderMode",closePanel:"closePanel"},decls:77,vars:12,consts:[["subAgentMenu","matMenu"],["callbacksMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["toolsMenu","matMenu"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[2,"display","flex","align-items","center","gap","8px","margin-right","15px"],["matTooltip","Collapse panel",1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer",3,"click"],[1,"builder-tabs-container"],[1,"builder-tab-content"],[1,"agent-breadcrumb-container"],[1,"content-wrapper"],[1,"builder-panel-wrapper"],[1,"panel-title"],[1,"config-form"],["mat-icon-button","","type","button","aria-label","Add sub agent",1,"panel-action-button",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],[1,"tools-chips-container"],["mat-icon-button","","type","button","aria-label","Add callback",1,"panel-action-button",3,"matMenuTriggerFor"],[1,"menu-header"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[1,"action-buttons"],["mat-raised-button","","color","secondary",1,"save-button",3,"click"],["mat-button","",1,"cancel-button",3,"click"],[1,"breadcrumb-chip",3,"click"],[1,"breadcrumb-arrow"],[1,"form-row"],[1,"agent-name-field"],["matInput","",3,"ngModelChange","ngModel","disabled"],[1,"agent-type-field"],["disabled","",3,"ngModelChange","ngModel"],[3,"value"],[3,"ngModel"],[3,"ngModelChange","ngModel"],["matInput","","rows","5",3,"ngModelChange","ngModel"],["matInput","","rows","3",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","aria-label","Add tool",1,"panel-action-button",3,"matMenuTriggerFor"],["aria-label","Tools"],[1,"tool-chip"],[1,"tool-chip",3,"click"],["matChipAvatar","",1,"tool-icon"],[1,"tool-chip-name"],["matChipRemove","","aria-label","Remove tool",3,"click"],["aria-label","Sub Agents"],["matChipRemove","","aria-label","Remove sub agent",3,"click"],[1,"tools-chips-container","callbacks-list"],["aria-label","Callbacks"],[1,"callback-row"],[1,"callback-row",3,"click"],[1,"callback-chip"],[1,"chip-content"],[1,"chip-type"],[1,"chip-name"],["mat-icon-button","","aria-label","Remove callback",1,"callback-remove",3,"click"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",4)(1,"div",5)(2,"div",6)(3,"div",7),GA(4,"img",8),K(5," Agent Development Kit "),w(),m(6,"div",9),GA(7,"app-theme-toggle"),m(8,"span",10),tA("click",function(){return Z(n),X(i.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),m(10,"div",11)(11,"div",12),V(12,k_A,3,0,"div",13),m(13,"div",14)(14,"div",15)(15,"div",16),K(16," Configuration "),w(),m(17,"div"),V(18,L_A,16,7,"div",17),w()(),V(19,J_A,22,7,"div",15),m(20,"div",15)(21,"div",16)(22,"div"),K(23," Sub Agents "),w(),m(24,"div")(25,"button",18)(26,"mat-icon"),K(27,"add"),w()(),m(28,"mat-menu",null,0)(30,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("LlmAgent"))}),m(31,"mat-icon"),K(32,"psychology"),w(),m(33,"span"),K(34,"LLM Agent"),w()(),m(35,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("SequentialAgent"))}),m(36,"mat-icon"),K(37,"more_horiz"),w(),m(38,"span"),K(39,"Sequential Agent"),w()(),m(40,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("LoopAgent"))}),m(41,"mat-icon"),K(42,"sync"),w(),m(43,"span"),K(44,"Loop Agent"),w()(),m(45,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("ParallelAgent"))}),m(46,"mat-icon"),K(47,"density_medium"),w(),m(48,"span"),K(49,"Parallel Agent"),w()()()()(),V(50,T_A,4,0,"div",20),w(),m(51,"div",15)(52,"div",16)(53,"div"),K(54," Callbacks "),w(),m(55,"div")(56,"button",21)(57,"mat-icon"),K(58,"add"),w()(),m(59,"mat-menu",null,1)(61,"div",22),K(62,"Agent Lifecycle"),w(),m(63,"button",23),tA("click",function(){return Z(n),X(i.addCallback("before_agent"))}),m(64,"span"),K(65,"Before Agent"),w()(),m(66,"button",23),tA("click",function(){return Z(n),X(i.addCallback("after_agent"))}),m(67,"span"),K(68,"After Agent"),w()(),V(69,H_A,18,4),w()()(),V(70,P_A,1,1),ri(71,"async"),w()(),m(72,"div",24)(73,"button",25),tA("click",function(){return Z(n),X(i.saveChanges())}),K(74," Save "),w(),m(75,"button",26),tA("click",function(){return Z(n),X(i.cancelChanges())}),K(76," Cancel "),w()()()()}if(A&2){let n,o=An(29),a=An(60);p(12),W(i.hierarchyPath.length>0?12:-1),p(6),W(i.agentConfig?18:-1),p(),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?19:-1),p(6),$("matMenuTriggerFor",o),p(25),W(i.agentConfig&&i.agentConfig.sub_agents&&i.agentConfig.sub_agents.length>0?50:-1),p(6),$("matMenuTriggerFor",a),p(7),$("matTooltip",i.callbackMenuTooltips("before_agent")),p(3),$("matTooltip",i.callbackMenuTooltips("after_agent")),p(3),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?69:-1),p(),W((n=Ci(71,10,i.callbacksMap$))?70:-1,n)}},dependencies:[ma,Nn,uo,a9,fo,g9,Sa,fn,bE,KO,No,Fn,wa,Wa,Gg,Hr,Bl,xa,AC,_h,C2,Nv,Bm,maA,paA,SG,fz,r8,Lh,ls],styles:[".builder-tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:40px;height:calc(95vh - 20px);display:flex;flex-direction:column}.agent-breadcrumb-container[_ngcontent-%COMP%]{padding:2px 20px 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--builder-border-color)}.breadcrumb-chip[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-text-muted-color);font-family:Google Sans;font-size:16px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;display:inline-block;-webkit-user-select:none;user-select:none}.breadcrumb-chip[_ngcontent-%COMP%]:hover{color:var(--builder-text-link-color)}.breadcrumb-chip.current-agent[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-weight:500}.breadcrumb-arrow[_ngcontent-%COMP%]{color:var(--builder-breadcrumb-separator-color);font-size:16px;width:16px;height:16px}.builder-tab-content[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);display:flex;flex-direction:column;flex:1;overflow:hidden}.builder-tab-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:8px 0;font-size:14px;line-height:1.5}.builder-tab-content[_ngcontent-%COMP%]{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-focus-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-hover-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--builder-text-secondary-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--builder-text-secondary-color)}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:none!important}.components-section[_ngcontent-%COMP%]{margin-bottom:32px}.components-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;margin:0 0 16px;text-transform:uppercase;letter-spacing:.5px}.config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;margin-top:20px}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{display:flex;gap:16px;align-items:flex-start}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-name-field[_ngcontent-%COMP%]{flex:1}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-type-field[_ngcontent-%COMP%]{width:32%}.config-form[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.config-form[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-bottom:8px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%]{margin-top:16px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500}.config-form[_ngcontent-%COMP%] .tool-args-header[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.json-editor-wrapper[_ngcontent-%COMP%]{height:300px;max-height:300px}.tab-content-container[_ngcontent-%COMP%]{margin-top:20px;overflow-y:auto}.agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px}.sub-agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px;margin-left:16px}.tree-view[_ngcontent-%COMP%] mat-tree[_ngcontent-%COMP%]{background-color:inherit!important}.tree-view[_ngcontent-%COMP%] expand-button[_ngcontent-%COMP%]{background-color:transparent;border:0}.node-item[_ngcontent-%COMP%]{display:flex;align-items:center}.node-icon[_ngcontent-%COMP%]{margin-right:14px}.node-name[_ngcontent-%COMP%]{margin-top:2px;display:flex;align-items:center}.no-tools-message[_ngcontent-%COMP%]{display:block;color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;margin-bottom:16px;text-align:center}.tools-list[_ngcontent-%COMP%]{list-style:none;padding:0}.tool-name[_ngcontent-%COMP%]{cursor:pointer;padding:11px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.tool-name[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.tool-name[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color)}.tool-name[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.tool-list-item-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px} .tools-chips-container .mat-mdc-chip-set{width:100%} .tools-chips-container.callbacks-list .mat-mdc-chip-set{display:flex;flex-direction:column;gap:8px;width:100%} .tools-chips-container .mat-mdc-chip.tool-chip{background-color:var(--builder-tool-chip-background-color);color:var(--builder-text-primary-color);font-family:Google Sans,sans-serif;font-size:14px;font-weight:500;cursor:pointer;margin:4px} .tools-chips-container .mat-mdc-chip.tool-chip:hover{background-color:var(--builder-tool-chip-hover-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-action-label{display:flex;align-items:center;gap:6px} .tools-chips-container .mat-mdc-chip.tool-chip .tool-chip-name{display:inline-flex;align-items:center} .tools-chips-container .mat-mdc-chip.tool-chip .tool-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove{opacity:1;color:var(--builder-text-secondary-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove mat-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove:hover{color:var(--builder-text-primary-color)} .tools-chips-container .mat-mdc-chip.callback-chip{background:var(--builder-callback-chip-background-color);background-color:var(--builder-callback-chip-background-color);color:var(--builder-callback-chip-text-color);font-family:Google Sans,sans-serif;font-size:14px;display:flex;flex-direction:row;align-items:center;gap:12px;width:auto;height:40px;border-radius:8px;border:none;box-shadow:none;outline:none;--mdc-chip-outline-width: 0;--mdc-chip-outline-color: transparent;--mdc-chip-elevated-container-color: var(--builder-callback-chip-background-color);--mdc-chip-flat-container-color: var(--builder-callback-chip-background-color);flex:1 1 auto;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip:before, .tools-chips-container .mat-mdc-chip.callback-chip:after, .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-focus-overlay{border:none;box-shadow:none} .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-action-label{display:flex;flex:1;align-items:center;width:100%;gap:12px} .tools-chips-container .mat-mdc-chip.callback-chip .chip-content{display:flex;flex-direction:row;align-items:center;gap:12px;flex:1;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip .chip-type{color:var(--builder-callback-chip-type-color);font-size:13px;font-weight:500;white-space:nowrap} .tools-chips-container .mat-mdc-chip.callback-chip .chip-name{color:var(--builder-callback-chip-name-color);font-size:15px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.tools-chips-container[_ngcontent-%COMP%]{margin-top:12px;padding:0 4px}.tools-chips-container.callbacks-list[_ngcontent-%COMP%]{padding-right:0;padding-left:0}.callback-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;cursor:pointer}.callback-remove[_ngcontent-%COMP%]{color:var(--builder-icon-color);cursor:pointer;width:32px;height:32px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0}.callback-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center;transform:translateY(.5px)}.back-button[_ngcontent-%COMP%]{margin-bottom:16px}.add-tool-button[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--builder-add-button-background-color) 0%,var(--builder-add-button-background-color) 100%),var(--builder-panel-background-color);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.add-tool-button-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.add-tool-button-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--builder-add-button-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.agent-tool-section[_ngcontent-%COMP%]{margin-top:16px;padding:16px;border:1px solid var(--builder-border-color);border-radius:8px;background-color:var(--builder-secondary-background-color)}.agent-tool-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:16px;font-weight:500;margin:0 0 8px}.agent-tool-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 16px;line-height:1.5}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.no-callbacks-message[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;text-align:center}.callback-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px}.callback-section[_ngcontent-%COMP%]{margin-top:16px}.callback-section[_ngcontent-%COMP%] .callback-section-label[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500;text-transform:none}.callback-groups-wrapper[_ngcontent-%COMP%]{margin-top:16px}.callback-group[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--builder-expansion-background-color);--mat-expansion-header-focus-state-layer-color: red;--mat-expansion-header-description-color: var(--builder-expansion-header-description-color);--mat-expansion-header-text-size: 15}.callback-list[_ngcontent-%COMP%]{padding:8px 0}.no-callbacks-in-type[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;font-style:italic;padding:12px;text-align:center}.callback-item[_ngcontent-%COMP%]{cursor:pointer;padding:8px 12px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.callback-item[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.callback-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-expansion-hover-color)}.callback-item[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.add-callback-icon[_ngcontent-%COMP%]{color:var(--builder-button-primary-background-color)}.add-callback-icon[_ngcontent-%COMP%]:hover{background-color:var(--builder-add-button-background-color)} .callback-group .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}mat-tab-group[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:16px 20px 0;min-height:0} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden;min-height:0} .mat-mdc-tab-body-content{flex:1;overflow:hidden;display:flex;flex-direction:column;min-height:0}mat-tab-group[_ngcontent-%COMP%]{flex:1;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden} .mat-mdc-tab-body-content{height:100%;overflow:hidden} .mat-drawer-inner-container{overflow:hidden}.action-buttons[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:16px 20px;border-top:1px solid var(--builder-border-color);flex-shrink:0;margin-top:auto;background-color:var(--builder-panel-background-color)}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]{color:var(--builder-button-secondary-text-color);border:1px solid var(--builder-button-secondary-border-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-secondary-hover-background-color);color:var(--builder-button-secondary-hover-text-color)}.builder-panel-wrapper[_ngcontent-%COMP%]{border-bottom:1px solid var(--builder-border-color);padding:12px 24px}.panel-title[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color);font-family:Google Sans;font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;justify-content:space-between}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%]{color:var(--builder-icon-color);width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center}.content-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center} .mat-mdc-menu-panel{background-color:var(--builder-menu-background-color)!important} .mat-mdc-menu-panel .menu-header{color:var(--builder-text-secondary-color);font-size:12px;padding:8px 16px;font-weight:500;text-transform:uppercase;pointer-events:none} .mat-mdc-menu-panel .mat-mdc-menu-item{color:var(--builder-text-primary-color)} .mat-mdc-menu-panel .mat-mdc-menu-item:hover{background-color:var(--builder-menu-item-hover-color)} .mat-mdc-menu-panel mat-divider{border-top-color:var(--builder-menu-divider-color);margin:4px 0}"],changeDetection:0})};var Gh=new yA("MARKDOWN_COMPONENT");var j_A=["chatMessages"],q_A=(t,e)=>({"user-message":t,"bot-message":e}),V_A=t=>({text:t,thought:!1});function W_A(t,e){t&1&&(m(0,"div",7)(1,"mat-icon",12),K(2,"smart_toy"),w(),m(3,"h3"),K(4,"Assistant Ready"),w(),m(5,"p"),K(6,"Your builder assistant is ready to help you build agents."),w()())}function Z_A(t,e){t&1&&(m(0,"div",15)(1,"span",16),K(2,"\u30FB\u30FB\u30FB"),w()())}function X_A(t,e){if(t&1&&(m(0,"div",18),K(1,"Assistant"),w(),on(2,19)),t&2){let A=v(2).$implicit,i=v(2);p(2),$("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",ss(2,V_A,A.text))}}function $_A(t,e){if(t&1&&(m(0,"div",17),K(1),w()),t&2){let A=v(2).$implicit;p(),qA(A.text)}}function ALA(t,e){if(t&1&&V(0,X_A,3,4)(1,$_A,2,1,"div",17),t&2){let A=v().$implicit;W(A.role==="bot"?0:1)}}function eLA(t,e){if(t&1&&(m(0,"div",13)(1,"mat-card",14),V(2,Z_A,3,0,"div",15)(3,ALA,2,1),w()()),t&2){let A=e.$implicit;$("ngClass",Zl(2,q_A,A.role==="user",A.role==="bot")),p(2),W(A.isLoading?2:3)}}function tLA(t,e){if(t&1&&Ut(0,eLA,4,5,"div",13,Li),t&2){let A=v();Jt(A.messages)}}var Lv=class t{isVisible=!0;appName="";closePanel=new $A;reloadCanvas=new $A;assistantAppName="__adk_agent_builder_assistant";userId="user";currentSession="";userMessage="";messages=[];shouldAutoScroll=!1;isGenerating=!1;chatMessages;markdownComponent=h(Gh);agentService=h(sg);sessionService=h(El);agentBuilderService=h(Q0);constructor(){}ngOnInit(){this.sessionService.createSession(this.userId,this.assistantAppName).subscribe(e=>{this.currentSession=e.id;let A={appName:this.assistantAppName,userId:this.userId,sessionId:e.id,newMessage:{role:"user",parts:[{text:"hello"}]},streaming:!1,stateDelta:{root_directory:`${this.appName}/tmp/${this.appName}`}};this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0,this.agentService.runSse(A).subscribe({next:i=>nt(this,null,function*(){if(i.content){let n="";for(let o of i.content.parts)o.text&&(n+=o.text);if(n){let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text=n,o.isLoading=!1,this.shouldAutoScroll=!0)}}}),error:i=>{console.error("SSE error:",i);let n=this.messages[this.messages.length-1];n.role==="bot"&&n.isLoading&&(n.text="Sorry, I encountered an error. Please try again.",n.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})})}onClosePanel(){this.closePanel.emit()}sendMessage(e){if(e.trim()){this.saveAgent(this.appName),e!="____Something went wrong, please try again"&&this.messages.push({role:"user",text:e});let A=e;this.userMessage="",this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0;let i={appName:this.assistantAppName,userId:this.userId,sessionId:this.currentSession,newMessage:{role:"user",parts:[{text:A}]},streaming:!1};this.agentService.runSse(i).subscribe({next:n=>nt(this,null,function*(){if(n.errorCode&&(n.errorCode=="MALFORMED_FUNCTION_CALL"||n.errorCode=="STOP")){this.sendMessage("____Something went wrong, please try again");return}if(n.content){let o="";for(let a of n.content.parts)a.text&&(o+=a.text);if(o){let a=this.messages[this.messages.length-1];a.role==="bot"&&a.isLoading&&(a.text=o,a.isLoading=!1,this.shouldAutoScroll=!0,this.reloadCanvas.emit())}}}),error:n=>{console.error("SSE error:",n);let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text="Sorry, I encountered an error. Please try again.",o.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})}}ngAfterViewChecked(){this.shouldAutoScroll&&(this.scrollToBottom(),this.shouldAutoScroll=!1)}scrollToBottom(){try{this.chatMessages&&setTimeout(()=>{this.chatMessages.nativeElement.scrollTop=this.chatMessages.nativeElement.scrollHeight},50)}catch(e){console.error("Error scrolling to bottom:",e)}}onKeyDown(e){if(e.key==="Enter"){if(e.shiftKey)return;this.userMessage?.trim()&&this.currentSession&&(e.preventDefault(),this.sendMessage(this.userMessage))}}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A)return;let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{console.log(o?"save to tmp":"something went wrong")})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-assistant"]],viewQuery:function(A,i){if(A&1&&ai(j_A,5),A&2){let n;ce(n=Ce())&&(i.chatMessages=n.first)}},inputs:{isVisible:"isVisible",appName:"appName"},outputs:{closePanel:"closePanel",reloadCanvas:"reloadCanvas"},decls:21,vars:6,consts:[["chatMessages",""],[1,"builder-assistant-panel"],[1,"panel-header"],[1,"panel-title"],["mat-icon-button","","matTooltip","Close assistant panel",1,"close-btn",3,"click"],[1,"panel-content"],[1,"chat-messages"],[1,"assistant-placeholder"],[1,"chat-input-container"],[1,"input-wrapper"],["cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","5","placeholder","Ask Gemini to build your agent",1,"assistant-input-box",3,"ngModelChange","keydown","ngModel","disabled"],["mat-icon-button","","matTooltip","Send message",1,"send-button",3,"click","disabled"],[1,"large-icon"],[3,"ngClass"],[1,"message-card"],[1,"loading-message"],[1,"dots"],[1,"message-text"],[1,"bot-label"],[3,"ngComponentOutlet","ngComponentOutletInputs"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",1)(1,"div",2)(2,"div",3)(3,"mat-icon"),K(4,"auto_awesome"),w(),m(5,"span"),K(6,"Assistant"),w()(),m(7,"button",4),tA("click",function(){return Z(n),X(i.onClosePanel())}),m(8,"mat-icon"),K(9,"close"),w()()(),m(10,"div",5)(11,"div",6,0),V(13,W_A,7,0,"div",7)(14,tLA,2,0),w(),m(15,"div",8)(16,"div",9)(17,"textarea",10),ho("ngModelChange",function(a){return Z(n),ao(i.userMessage,a)||(i.userMessage=a),X(a)}),tA("keydown",function(a){return Z(n),X(i.onKeyDown(a))}),w(),m(18,"button",11),tA("click",function(){return Z(n),X(i.sendMessage(i.userMessage.trim()))}),m(19,"mat-icon"),K(20,"send"),w()()()()()()}A&2&&(ne("hidden",!i.isVisible),p(13),W(i.messages.length===0?13:14),p(4),Qo("ngModel",i.userMessage),$("disabled",i.isGenerating),p(),$("disabled",!i.userMessage.trim()||i.isGenerating))},dependencies:[ma,gs,D2,Nn,uo,fo,Sa,Fn,Wa,xa,aE,KB,Op],styles:[".builder-assistant-panel[_ngcontent-%COMP%]{position:fixed;right:0;top:72px;width:400px;height:calc(100vh - 72px);background:var(--builder-assistant-panel-background-color);border-left:1px solid var(--builder-assistant-panel-border-color);box-shadow:-2px 0 10px #0006;z-index:999;display:flex;flex-direction:column;transition:transform .3s ease}.builder-assistant-panel.hidden[_ngcontent-%COMP%]{transform:translate(100%)}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--builder-assistant-panel-border-color);background:var(--builder-assistant-panel-header-background-color)}.panel-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-weight:400;font-size:16px;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.panel-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;width:20px;height:20px}.close-btn[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color)}.close-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-add-button-background-color)}.panel-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background:var(--builder-assistant-panel-background-color);overflow:hidden}.assistant-placeholder[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:300px;color:var(--builder-text-secondary-color)}.assistant-placeholder[_ngcontent-%COMP%] .large-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px;margin-bottom:16px;color:var(--builder-button-primary-background-color)}.assistant-placeholder[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:20px;font-weight:500;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.assistant-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5;color:var(--builder-text-secondary-color)}.chat-messages[_ngcontent-%COMP%]{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column}.chat-input-container[_ngcontent-%COMP%]{padding:16px 20px 20px;border-top:none;background:var(--builder-assistant-panel-background-color)}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--builder-assistant-input-background-color);border-radius:50px;padding:10px 6px 10px 18px;gap:8px}.assistant-input-box[_ngcontent-%COMP%]{flex:1;color:var(--builder-assistant-input-text-color);border:none;padding:0;background:transparent;resize:none;overflow:hidden;font-family:Google Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:20px;min-height:20px;max-height:120px}.assistant-input-box[_ngcontent-%COMP%]::placeholder{color:var(--builder-assistant-input-placeholder-color);font-size:14px}.assistant-input-box[_ngcontent-%COMP%]:focus{outline:none}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--builder-border-color);border-radius:4px}.send-button[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-assistant-send-button-color);width:36px;height:36px;min-width:36px;flex-shrink:0;margin:0;padding:0}.send-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target{display:none}.send-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{display:none}.send-button[_ngcontent-%COMP%]:disabled{background-color:transparent;color:var(--builder-assistant-send-button-disabled-color)}.send-button[_ngcontent-%COMP%]:hover:not(:disabled){background-color:var(--builder-add-button-background-color);color:var(--builder-assistant-send-button-hover-color);border-radius:50%}.send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.message-card[_ngcontent-%COMP%]{padding:10px 16px;margin:6px 0;font-size:14px;font-weight:400;position:relative;display:block;box-shadow:none;line-height:1.5;width:100%}.user-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:12px}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--builder-assistant-user-message-background-color);border:1px solid var(--builder-assistant-user-message-border-color);border-radius:4px;color:var(--builder-assistant-user-message-text-color);padding:8px 12px}.bot-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:0}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:transparent;border:none;border-radius:0;color:var(--builder-assistant-bot-message-text-color);padding:0;margin:0}.bot-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--builder-text-secondary-color);margin-bottom:8px;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%]{white-space:pre-line;word-break:break-word;overflow-wrap:break-word;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%] p{margin:0;line-height:1.4}.message-text[_ngcontent-%COMP%] p:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] p:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] ul, .message-text[_ngcontent-%COMP%] ol{margin:0;padding-left:1.5em}.message-text[_ngcontent-%COMP%] li{margin:0}.message-text[_ngcontent-%COMP%] code{background-color:#ffffff1a;padding:2px 4px;border-radius:3px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.message-text[_ngcontent-%COMP%] pre{background-color:#ffffff0d;padding:8px 12px;border-radius:6px;overflow-x:auto;margin:.5em 0}.message-text[_ngcontent-%COMP%] pre code{background:none;padding:0}.message-text[_ngcontent-%COMP%] blockquote{border-left:3px solid var(--builder-button-primary-background-color);padding-left:12px;margin:.5em 0;font-style:italic;color:var(--builder-text-tertiary-color)}.message-text[_ngcontent-%COMP%] strong{font-weight:600}.message-text[_ngcontent-%COMP%] em{font-style:italic}.loading-message[_ngcontent-%COMP%]{display:flex;align-items:center;color:var(--builder-text-secondary-color);font-family:Google Sans,Helvetica Neue,sans-serif;padding:0;margin:0}.loading-message[_ngcontent-%COMP%] .dots[_ngcontent-%COMP%]{font-size:24px;letter-spacing:-12px;animation:_ngcontent-%COMP%_pulse 1.4s ease-in-out infinite;display:inline-block;line-height:1}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:.3}50%{opacity:1}}"]})};var Kh=class t{constructor(e,A){this.http=e;this.zone=A}apiServerDomain=zr.getApiServerBaseUrl();_currentApp=new Ht("");currentApp=this._currentApp.asObservable();isLoading=new Ht(!1);getApp(){return this.currentApp}setApp(e){this._currentApp.next(e)}getLoadingState(){return this.isLoading}runSse(e){let A=this.apiServerDomain+"/run_sse";return this.isLoading.next(!0),new $i(i=>{let n=this;fetch(A,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify(e)}).then(o=>{let a=o.body?.getReader(),r=new TextDecoder("utf-8"),s="",g=()=>{a?.read().then(({done:l,value:C})=>{if(this.isLoading.next(!0),l)return this.isLoading.next(!1),i.complete();let I=r.decode(C,{stream:!0});s+=I;try{s.split(/\r?\n/).filter(B=>B.startsWith("data:")).forEach(B=>{let E=B.replace(/^data:\s*/,""),Q=JSON.parse(E);n.zone.run(()=>i.next(Q))}),s=""}catch(d){d instanceof SyntaxError&&g()}g()}).catch(l=>{n.zone.run(()=>i.error(l))})};g()}).catch(o=>{n.zone.run(()=>i.error(o))})})}listApps(){if(this.apiServerDomain!=null){let e=this.apiServerDomain+"/list-apps?relative_path=./";return this.http.get(e)}return new $i}agentBuild(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save";return this.http.post(A,e)}return new $i}agentBuildTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save?tmp=true";return this.http.post(A,e)}return new $i}getAgentBuilder(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}`;return this.http.get(A,{responseType:"text"})}return new $i}getAgentBuilderTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&tmp=true`;return this.http.get(A,{responseType:"text"})}return new $i}getSubAgentBuilder(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&file_path=${A}&tmp=true`;return this.http.get(i,{responseType:"text"})}return new $i}agentChangeCancel(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}/cancel`;return this.http.post(A,{})}return new $i}static \u0275fac=function(A){return new(A||t)(xo(Xs),xo(Oe))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Gv="http://www.w3.org/1999/xhtml",RG={svg:"http://www.w3.org/2000/svg",xhtml:Gv,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function I2(t){var e=t+="",A=e.indexOf(":");return A>=0&&(e=t.slice(0,A))!=="xmlns"&&(t=t.slice(A+1)),RG.hasOwnProperty(e)?{space:RG[e],local:t}:t}function nLA(t){return function(){var e=this.ownerDocument,A=this.namespaceURI;return A===Gv&&e.documentElement.namespaceURI===Gv?e.createElement(t):e.createElementNS(A,t)}}function oLA(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Kv(t){var e=I2(t);return(e.local?oLA:nLA)(e)}function aLA(){}function rB(t){return t==null?aLA:function(){return this.querySelector(t)}}function yaA(t){typeof t!="function"&&(t=rB(t));for(var e=this._groups,A=e.length,i=new Array(A),n=0;n=S&&(S=b+1);!(D=Q[S])&&++S=0;)(a=i[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function GaA(t){t||(t=uLA);function e(C,I){return C&&I?t(C.__data__,I.__data__):!C-!I}for(var A=this._groups,i=A.length,n=new Array(i),o=0;oe?1:t>=e?0:NaN}function KaA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function UaA(){return Array.from(this)}function JaA(){for(var t=this._groups,e=0,A=t.length;e1?this.each((e==null?vLA:typeof e=="function"?MLA:bLA)(t,e,A??"")):g1(this.node(),t)}function g1(t,e){return t.style.getPropertyValue(e)||Yv(t).getComputedStyle(t,null).getPropertyValue(e)}function kLA(t){return function(){delete this[t]}}function SLA(t,e){return function(){this[t]=e}}function xLA(t,e){return function(){var A=e.apply(this,arguments);A==null?delete this[t]:this[t]=A}}function PaA(t,e){return arguments.length>1?this.each((e==null?kLA:typeof e=="function"?xLA:SLA)(t,e)):this.node()[t]}function jaA(t){return t.trim().split(/^|\s+/)}function FG(t){return t.classList||new qaA(t)}function qaA(t){this._node=t,this._names=jaA(t.getAttribute("class")||"")}qaA.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function VaA(t,e){for(var A=FG(t),i=-1,n=e.length;++i=0&&(A=e.slice(i+1),e=e.slice(0,i)),{type:e,name:A}})}function VLA(t){return function(){var e=this.__on;if(e){for(var A=0,i=-1,n=e.length,o;A{}};function drA(){for(var t=0,e=arguments.length,A={},i;t=0&&(i=A.slice(n+1),A=A.slice(0,n)),A&&!e.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:i}})}Tv.prototype=drA.prototype={constructor:Tv,on:function(t,e){var A=this._,i=eGA(t+"",A),n,o=-1,a=i.length;if(arguments.length<2){for(;++o0)for(var A=new Array(n),i=0,n,o;i()=>t;function pm(t,{sourceEvent:e,subject:A,target:i,identifier:n,active:o,x:a,y:r,dx:s,dy:g,dispatch:l}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:A,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:r,enumerable:!0,configurable:!0},dx:{value:s,enumerable:!0,configurable:!0},dy:{value:g,enumerable:!0,configurable:!0},_:{value:l}})}pm.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function iGA(t){return!t.ctrlKey&&!t.button}function nGA(){return this.parentNode}function oGA(t,e){return e??{x:t.x,y:t.y}}function aGA(){return navigator.maxTouchPoints||"ontouchstart"in this}function zv(){var t=iGA,e=nGA,A=oGA,i=aGA,n={},o=sB("start","drag","end"),a=0,r,s,g,l,C=0;function I(M){M.on("mousedown.drag",d).filter(i).on("touchstart.drag",Q).on("touchmove.drag",f,BrA).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(M,D){if(!(l||!t.call(this,M,D))){var F=S(this,e.call(this,M,D),M,D,"mouse");F&&(_r(M.view).on("mousemove.drag",B,gB).on("mouseup.drag",E,gB),um(M.view),Hv(M),g=!1,r=M.clientX,s=M.clientY,F("start",M))}}function B(M){if(l1(M),!g){var D=M.clientX-r,F=M.clientY-s;g=D*D+F*F>C}n.mouse("drag",M)}function E(M){_r(M.view).on("mousemove.drag mouseup.drag",null),fm(M.view,g),l1(M),n.mouse("end",M)}function Q(M,D){if(t.call(this,M,D)){var F=M.changedTouches,_=e.call(this,M,D),U=F.length,J,j;for(J=0;J>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):A===8?Pv(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):A===4?Pv(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=sGA.exec(t))?new Mg(e[1],e[2],e[3],1):(e=gGA.exec(t))?new Mg(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=lGA.exec(t))?Pv(e[1],e[2],e[3],e[4]):(e=cGA.exec(t))?Pv(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=CGA.exec(t))?prA(e[1],e[2]/100,e[3]/100,1):(e=IGA.exec(t))?prA(e[1],e[2]/100,e[3]/100,e[4]):ErA.hasOwnProperty(t)?urA(ErA[t]):t==="transparent"?new Mg(NaN,NaN,NaN,0):null}function urA(t){return new Mg(t>>16&255,t>>8&255,t&255,1)}function Pv(t,e,A,i){return i<=0&&(t=e=A=NaN),new Mg(t,e,A,i)}function EGA(t){return t instanceof ym||(t=c1(t)),t?(t=t.rgb(),new Mg(t.r,t.g,t.b,t.opacity)):new Mg}function Jh(t,e,A,i){return arguments.length===1?EGA(t):new Mg(t,e,A,i??1)}function Mg(t,e,A,i){this.r=+t,this.g=+e,this.b=+A,this.opacity=+i}Ov(Mg,Jh,LG(ym,{brighter(t){return t=t==null?qv:Math.pow(qv,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?wm:Math.pow(wm,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Mg(cB(this.r),cB(this.g),cB(this.b),Vv(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:frA,formatHex:frA,formatHex8:QGA,formatRgb:mrA,toString:mrA}));function frA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}`}function QGA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}${lB((isNaN(this.opacity)?1:this.opacity)*255)}`}function mrA(){let t=Vv(this.opacity);return`${t===1?"rgb(":"rgba("}${cB(this.r)}, ${cB(this.g)}, ${cB(this.b)}${t===1?")":`, ${t})`}`}function Vv(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cB(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function lB(t){return t=cB(t),(t<16?"0":"")+t.toString(16)}function prA(t,e,A,i){return i<=0?t=e=A=NaN:A<=0||A>=1?t=e=NaN:e<=0&&(t=NaN),new Wc(t,e,A,i)}function DrA(t){if(t instanceof Wc)return new Wc(t.h,t.s,t.l,t.opacity);if(t instanceof ym||(t=c1(t)),!t)return new Wc;if(t instanceof Wc)return t;t=t.rgb();var e=t.r/255,A=t.g/255,i=t.b/255,n=Math.min(e,A,i),o=Math.max(e,A,i),a=NaN,r=o-n,s=(o+n)/2;return r?(e===o?a=(A-i)/r+(A0&&s<1?0:a,new Wc(a,r,s,t.opacity)}function yrA(t,e,A,i){return arguments.length===1?DrA(t):new Wc(t,e,A,i??1)}function Wc(t,e,A,i){this.h=+t,this.s=+e,this.l=+A,this.opacity=+i}Ov(Wc,yrA,LG(ym,{brighter(t){return t=t==null?qv:Math.pow(qv,t),new Wc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?wm:Math.pow(wm,t),new Wc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,A=this.l,i=A+(A<.5?A:1-A)*e,n=2*A-i;return new Mg(GG(t>=240?t-240:t+120,n,i),GG(t,n,i),GG(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new Wc(wrA(this.h),jv(this.s),jv(this.l),Vv(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=Vv(this.opacity);return`${t===1?"hsl(":"hsla("}${wrA(this.h)}, ${jv(this.s)*100}%, ${jv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function wrA(t){return t=(t||0)%360,t<0?t+360:t}function jv(t){return Math.max(0,Math.min(1,t||0))}function GG(t,e,A){return(t<60?e+(A-e)*t/60:t<180?A:t<240?e+(A-e)*(240-t)/60:e)*255}function KG(t,e,A,i,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*A+(1+3*t+3*o-3*a)*i+a*n)/6}function vrA(t){var e=t.length-1;return function(A){var i=A<=0?A=0:A>=1?(A=1,e-1):Math.floor(A*e),n=t[i],o=t[i+1],a=i>0?t[i-1]:2*n-o,r=i()=>t;function hGA(t,e){return function(A){return t+A*e}}function uGA(t,e,A){return t=Math.pow(t,A),e=Math.pow(e,A)-t,A=1/A,function(i){return Math.pow(t+i*e,A)}}function MrA(t){return(t=+t)==1?Wv:function(e,A){return A-e?uGA(e,A,t):UG(isNaN(e)?A:e)}}function Wv(t,e){var A=e-t;return A?hGA(t,A):UG(isNaN(t)?e:t)}var Zv=(function t(e){var A=MrA(e);function i(n,o){var a=A((n=Jh(n)).r,(o=Jh(o)).r),r=A(n.g,o.g),s=A(n.b,o.b),g=Wv(n.opacity,o.opacity);return function(l){return n.r=a(l),n.g=r(l),n.b=s(l),n.opacity=g(l),n+""}}return i.gamma=t,i})(1);function krA(t){return function(e){var A=e.length,i=new Array(A),n=new Array(A),o=new Array(A),a,r;for(a=0;aA&&(o=e.slice(A,o),r[a]?r[a]+=o:r[++a]=o),(i=i[0])===(n=n[0])?r[a]?r[a]+=n:r[++a]=n:(r[++a]=null,s.push({i:a,x:Ol(i,n)})),A=JG.lastIndex;return A180?l+=360:l-g>180&&(g+=360),I.push({i:C.push(n(C)+"rotate(",null,i)-2,x:Ol(g,l)})):l&&C.push(n(C)+"rotate("+l+i)}function r(g,l,C,I){g!==l?I.push({i:C.push(n(C)+"skewX(",null,i)-2,x:Ol(g,l)}):l&&C.push(n(C)+"skewX("+l+i)}function s(g,l,C,I,d,B){if(g!==C||l!==I){var E=d.push(n(d)+"scale(",null,",",null,")");B.push({i:E-4,x:Ol(g,C)},{i:E-2,x:Ol(l,I)})}else(C!==1||I!==1)&&d.push(n(d)+"scale("+C+","+I+")")}return function(g,l){var C=[],I=[];return g=t(g),l=t(l),o(g.translateX,g.translateY,l.translateX,l.translateY,C,I),a(g.rotate,l.rotate,C,I),r(g.skewX,l.skewX,C,I),s(g.scaleX,g.scaleY,l.scaleX,l.scaleY,C,I),g=l=null,function(d){for(var B=-1,E=I.length,Q;++B=0&&t._call.call(void 0,e),t=t._next;--Yh}function _rA(){CB=(e7=km.now())+t7,Yh=bm=0;try{KrA()}finally{Yh=0,kGA(),CB=0}}function MGA(){var t=km.now(),e=t-e7;e>LrA&&(t7-=e,e7=t)}function kGA(){for(var t,e=A7,A,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(A=e._next,e._next=null,e=t?t._next=A:A7=A);Mm=t,jG(i)}function jG(t){if(!Yh){bm&&(bm=clearTimeout(bm));var e=t-CB;e>24?(t<1/0&&(bm=setTimeout(_rA,t-km.now()-t7)),vm&&(vm=clearInterval(vm))):(vm||(e7=km.now(),vm=setInterval(MGA,LrA)),Yh=1,GrA(_rA))}}function n7(t,e,A){var i=new Sm;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,A),i}var SGA=sB("start","end","cancel","interrupt"),xGA=[],YrA=0,UrA=1,a7=2,o7=3,JrA=4,r7=5,Rm=6;function C1(t,e,A,i,n,o){var a=t.__transition;if(!a)t.__transition={};else if(A in a)return;RGA(t,A,{name:e,index:i,group:n,on:SGA,tween:xGA,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:YrA})}function Nm(t,e){var A=fr(t,e);if(A.state>YrA)throw new Error("too late; already scheduled");return A}function ns(t,e){var A=fr(t,e);if(A.state>o7)throw new Error("too late; already running");return A}function fr(t,e){var A=t.__transition;if(!A||!(A=A[e]))throw new Error("transition not found");return A}function RGA(t,e,A){var i=t.__transition,n;i[e]=A,A.timer=i7(o,0,A.time);function o(g){A.state=UrA,A.timer.restart(a,A.delay,A.time),A.delay<=g&&a(g-A.delay)}function a(g){var l,C,I,d;if(A.state!==UrA)return s();for(l in i)if(d=i[l],d.name===A.name){if(d.state===o7)return n7(a);d.state===JrA?(d.state=Rm,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[l]):+la7&&i.state=0&&(e=e.slice(0,A)),!e||e==="start"})}function XGA(t,e,A){var i,n,o=ZGA(e)?Nm:ns;return function(){var a=o(this,t),r=a.on;r!==i&&(n=(i=r).copy()).on(e,A),a.on=n}}function XrA(t,e){var A=this._id;return arguments.length<2?fr(this.node(),A).on.on(t):this.each(XGA(A,t,e))}function $GA(t){return function(){var e=this.parentNode;for(var A in this.__transition)if(+A!==t)return;e&&e.removeChild(this)}}function $rA(){return this.on("end.remove",$GA(this._id))}function AsA(t){var e=this._name,A=this._id;typeof t!="function"&&(t=rB(t));for(var i=this._groups,n=i.length,o=new Array(n),a=0;a()=>t;function qG(t,{sourceEvent:e,target:A,transform:i,dispatch:n}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:A,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:n}})}function Zc(t,e,A){this.k=t,this.x=e,this.y=A}Zc.prototype={constructor:Zc,scale:function(t){return t===1?this:new Zc(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Zc(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var I1=new Zc(1,0,0);VG.prototype=Zc.prototype;function VG(t){for(;!t.__zoom;)if(!(t=t.parentNode))return I1;return t.__zoom}function c7(t){t.stopImmediatePropagation()}function Hh(t){t.preventDefault(),t.stopImmediatePropagation()}function dKA(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function BKA(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function CsA(){return this.__zoom||I1}function EKA(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function QKA(){return navigator.maxTouchPoints||"ontouchstart"in this}function hKA(t,e,A){var i=t.invertX(e[0][0])-A[0][0],n=t.invertX(e[1][0])-A[1][0],o=t.invertY(e[0][1])-A[0][1],a=t.invertY(e[1][1])-A[1][1];return t.translate(n>i?(i+n)/2:Math.min(0,i)||Math.max(0,n),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function WG(){var t=dKA,e=BKA,A=hKA,i=EKA,n=QKA,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],r=250,s=PG,g=sB("start","zoom","end"),l,C,I,d=500,B=150,E=0,Q=10;function f(P){P.property("__zoom",CsA).on("wheel.zoom",U,{passive:!1}).on("mousedown.zoom",J).on("dblclick.zoom",j).filter(n).on("touchstart.zoom",AA).on("touchmove.zoom",O).on("touchend.zoom touchcancel.zoom",DA).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}f.transform=function(P,aA,iA,BA){var oA=P.selection?P.selection():P;oA.property("__zoom",CsA),P!==oA?D(P,aA,iA,BA):oA.interrupt().each(function(){F(this,arguments).event(BA).start().zoom(null,typeof aA=="function"?aA.apply(this,arguments):aA).end()})},f.scaleBy=function(P,aA,iA,BA){f.scaleTo(P,function(){var oA=this.__zoom.k,sA=typeof aA=="function"?aA.apply(this,arguments):aA;return oA*sA},iA,BA)},f.scaleTo=function(P,aA,iA,BA){f.transform(P,function(){var oA=e.apply(this,arguments),sA=this.__zoom,hA=iA==null?M(oA):typeof iA=="function"?iA.apply(this,arguments):iA,YA=sA.invert(hA),ee=typeof aA=="function"?aA.apply(this,arguments):aA;return A(S(b(sA,ee),hA,YA),oA,a)},iA,BA)},f.translateBy=function(P,aA,iA,BA){f.transform(P,function(){return A(this.__zoom.translate(typeof aA=="function"?aA.apply(this,arguments):aA,typeof iA=="function"?iA.apply(this,arguments):iA),e.apply(this,arguments),a)},null,BA)},f.translateTo=function(P,aA,iA,BA,oA){f.transform(P,function(){var sA=e.apply(this,arguments),hA=this.__zoom,YA=BA==null?M(sA):typeof BA=="function"?BA.apply(this,arguments):BA;return A(I1.translate(YA[0],YA[1]).scale(hA.k).translate(typeof aA=="function"?-aA.apply(this,arguments):-aA,typeof iA=="function"?-iA.apply(this,arguments):-iA),sA,a)},BA,oA)};function b(P,aA){return aA=Math.max(o[0],Math.min(o[1],aA)),aA===P.k?P:new Zc(aA,P.x,P.y)}function S(P,aA,iA){var BA=aA[0]-iA[0]*P.k,oA=aA[1]-iA[1]*P.k;return BA===P.x&&oA===P.y?P:new Zc(P.k,BA,oA)}function M(P){return[(+P[0][0]+ +P[1][0])/2,(+P[0][1]+ +P[1][1])/2]}function D(P,aA,iA,BA){P.on("start.zoom",function(){F(this,arguments).event(BA).start()}).on("interrupt.zoom end.zoom",function(){F(this,arguments).event(BA).end()}).tween("zoom",function(){var oA=this,sA=arguments,hA=F(oA,sA).event(BA),YA=e.apply(oA,sA),ee=iA==null?M(YA):typeof iA=="function"?iA.apply(oA,sA):iA,UA=Math.max(YA[1][0]-YA[0][0],YA[1][1]-YA[0][1]),mA=oA.__zoom,KA=typeof aA=="function"?aA.apply(oA,sA):aA,Pe=s(mA.invert(ee).concat(UA/mA.k),KA.invert(ee).concat(UA/KA.k));return function(Je){if(Je===1)Je=KA;else{var HA=Pe(Je),uA=UA/HA[2];Je=new Zc(uA,ee[0]-HA[0]*uA,ee[1]-HA[1]*uA)}hA.zoom(null,Je)}})}function F(P,aA,iA){return!iA&&P.__zooming||new _(P,aA)}function _(P,aA){this.that=P,this.args=aA,this.active=0,this.sourceEvent=null,this.extent=e.apply(P,aA),this.taps=0}_.prototype={event:function(P){return P&&(this.sourceEvent=P),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(P,aA){return this.mouse&&P!=="mouse"&&(this.mouse[1]=aA.invert(this.mouse[0])),this.touch0&&P!=="touch"&&(this.touch0[1]=aA.invert(this.touch0[0])),this.touch1&&P!=="touch"&&(this.touch1[1]=aA.invert(this.touch1[0])),this.that.__zoom=aA,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(P){var aA=_r(this.that).datum();g.call(P,this.that,new qG(P,{sourceEvent:this.sourceEvent,target:f,type:P,transform:this.that.__zoom,dispatch:g}),aA)}};function U(P,...aA){if(!t.apply(this,arguments))return;var iA=F(this,aA).event(P),BA=this.__zoom,oA=Math.max(o[0],Math.min(o[1],BA.k*Math.pow(2,i.apply(this,arguments)))),sA=zl(P);if(iA.wheel)(iA.mouse[0][0]!==sA[0]||iA.mouse[0][1]!==sA[1])&&(iA.mouse[1]=BA.invert(iA.mouse[0]=sA)),clearTimeout(iA.wheel);else{if(BA.k===oA)return;iA.mouse=[sA,BA.invert(sA)],IB(this),iA.start()}Hh(P),iA.wheel=setTimeout(hA,B),iA.zoom("mouse",A(S(b(BA,oA),iA.mouse[0],iA.mouse[1]),iA.extent,a));function hA(){iA.wheel=null,iA.end()}}function J(P,...aA){if(I||!t.apply(this,arguments))return;var iA=P.currentTarget,BA=F(this,aA,!0).event(P),oA=_r(P.view).on("mousemove.zoom",ee,!0).on("mouseup.zoom",UA,!0),sA=zl(P,iA),hA=P.clientX,YA=P.clientY;um(P.view),c7(P),BA.mouse=[sA,this.__zoom.invert(sA)],IB(this),BA.start();function ee(mA){if(Hh(mA),!BA.moved){var KA=mA.clientX-hA,Pe=mA.clientY-YA;BA.moved=KA*KA+Pe*Pe>E}BA.event(mA).zoom("mouse",A(S(BA.that.__zoom,BA.mouse[0]=zl(mA,iA),BA.mouse[1]),BA.extent,a))}function UA(mA){oA.on("mousemove.zoom mouseup.zoom",null),fm(mA.view,BA.moved),Hh(mA),BA.event(mA).end()}}function j(P,...aA){if(t.apply(this,arguments)){var iA=this.__zoom,BA=zl(P.changedTouches?P.changedTouches[0]:P,this),oA=iA.invert(BA),sA=iA.k*(P.shiftKey?.5:2),hA=A(S(b(iA,sA),BA,oA),e.apply(this,aA),a);Hh(P),r>0?_r(this).transition().duration(r).call(D,hA,BA,P):_r(this).call(f.transform,hA,BA,P)}}function AA(P,...aA){if(t.apply(this,arguments)){var iA=P.touches,BA=iA.length,oA=F(this,aA,P.changedTouches.length===BA).event(P),sA,hA,YA,ee;for(c7(P),hA=0;hA{let A=Math.max(0,Math.min(t.x+t.width,e.x+e.width)-Math.max(t.x,e.x)),i=Math.max(0,Math.min(t.y+t.height,e.y+e.height)-Math.max(t.y,e.y));return Math.ceil(A*i)};function ksA(t){if(t.length===0)return{x:0,y:0,width:0,height:0};let e={x:1/0,y:1/0,x2:-1/0,y2:-1/0};return t.forEach(A=>{let i=JUA(A);e=TUA(e,i)}),YUA(e)}function UUA(t,e,A){let i=e.find(o=>o.rawNode.id===t);if(!i)return[];let n=I7(i);return e.filter(o=>{if(o.rawNode.id===t)return!1;let a=KUA(I7(o),n);return A?.partially?a>0:a>=n.width*n.height})}function JUA(t){return{x:t.point().x,y:t.point().y,x2:t.point().x+t.size().width,y2:t.point().y+t.size().height}}function I7(t){return{x:t.globalPoint().x,y:t.globalPoint().y,width:t.width(),height:t.height()}}function YUA({x:t,y:e,x2:A,y2:i}){return{x:t,y:e,width:A-t,height:i-e}}function TUA(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y),x2:Math.max(t.x2,e.x2),y2:Math.max(t.y2,e.y2)}}var d7=class{constructor(e){this.settings=e,this.curve=e.curve??"bezier",this.type=e.type??"default",this.mode=e.mode??"strict";let A=this.getValidators(e);this.validator=i=>A.every(n=>n(i))}getValidators(e){let A=[];return A.push(HUA),this.mode==="loose"&&A.push(zUA),e.validator&&A.push(e.validator),A}},HUA=t=>t.source!==t.target,zUA=t=>t.sourceHandle!==void 0&&t.targetHandle!==void 0;function Oh(t){return t.split("").reduce((e,A)=>(e=(e<<5)-e+A.charCodeAt(0),e&e),0)}var Sg=(()=>{class t{constructor(){this.nodes=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawNodes=Ue(()=>this.nodes().map(A=>A.rawNode)),this.edges=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawEdges=Ue(()=>this.edges().map(A=>A.edge)),this.validEdges=Ue(()=>{let A=this.nodes();return this.edges().filter(i=>A.includes(i.source())&&A.includes(i.target()))}),this.connection=jA(new d7({})),this.markers=Ue(()=>{let A=new Map;this.validEdges().forEach(n=>{if(n.edge.markers?.start){let o=Oh(JSON.stringify(n.edge.markers.start));A.set(o,n.edge.markers.start)}if(n.edge.markers?.end){let o=Oh(JSON.stringify(n.edge.markers.end));A.set(o,n.edge.markers.end)}});let i=this.connection().settings.marker;if(i){let n=Oh(JSON.stringify(i));A.set(n,i)}return A}),this.entities=Ue(()=>[...this.nodes(),...this.edges()]),this.minimap=jA(null)}getNode(A){return this.nodes().find(({rawNode:i})=>i.id===A)}getDetachedEdges(){return this.edges().filter(A=>A.detached())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function OUA(t,e,A,i,n,o){let a=e/(t.width*(1+o)),r=A/(t.height*(1+o)),s=Math.min(a,r),g=PUA(s,i,n),l=t.x+t.width/2,C=t.y+t.height/2,I=e/2-l*g,d=A/2-C*g;return{x:I,y:d,zoom:g}}function PUA(t,e=0,A=1){return Math.min(Math.max(t,e),A)}function jUA(t,e,A){let i=t.zoom;return{x:-t.x/i,y:-t.y/i,width:e/i,height:A/i}}function qUA(t,e,A,i){let n=jUA(e,A,i);return!(t.x+t.widthn.x+n.width||t.y+t.heightn.y+n.height)}var VUA={detachedGroupsLayer:!1,virtualization:!1,virtualizationZoomThreshold:.5,lazyLoadTrigger:"immediate"},bs=(()=>{class t{constructor(){this.entitiesSelectable=jA(!0),this.elevateNodesOnSelect=jA(!0),this.elevateEdgesOnSelect=jA(!0),this.view=jA([400,400]),this.computedFlowWidth=jA(0),this.computedFlowHeight=jA(0),this.minZoom=jA(.5),this.maxZoom=jA(3),this.background=jA({type:"solid",color:"#fff"}),this.snapGrid=jA([1,1]),this.optimization=jA(VUA)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),dB=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.flowSettingsService=h(bs),this.writableViewport=jA({changeType:"initial",state:t.getDefaultViewport(),duration:0}),this.readableViewport=jA(t.getDefaultViewport()),this.viewportChangeEnd$=new XA}static getDefaultViewport(){return{zoom:1,x:0,y:0}}fitView(A={padding:.1,duration:0,nodes:[]}){let i=this.getBoundsNodes(A.nodes??[]),n=OUA(ksA(i),this.flowSettingsService.computedFlowWidth(),this.flowSettingsService.computedFlowHeight(),this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom(),A.padding??.1),o=A.duration??0;this.writableViewport.set({changeType:"absolute",state:n,duration:o})}triggerViewportChangeEvent(A){A==="end"&&this.viewportChangeEnd$.next()}getBoundsNodes(A){return A?.length?A.map(i=>this.entitiesService.nodes().find(({rawNode:n})=>n.id===i)).filter(i=>!!i):this.entitiesService.nodes()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function E2(t){return t!==void 0}var w7=(()=>{class t{constructor(){this.element=h(ge).nativeElement}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgRef",""]]})}}return t})();function IsA(){let t=window.navigator.userAgent.toLowerCase(),e=/(macintosh|macintel|macppc|mac68k|macos)/i,A=/(win32|win64|windows|wince)/i,i=/(iphone|ipad|ipod)/i,n=null;return e.test(t)?n="macos":i.test(t)?n="ios":A.test(t)?n="windows":/android/.test(t)?n="android":!n&&/linux/.test(t)&&(n="linux"),n}var AK=(()=>{class t{constructor(){this.actions=jA({multiSelection:[IsA()==="macos"?"MetaLeft":"ControlLeft",IsA()==="macos"?"MetaRight":"ControlRight"]}),this.actionsActive={multiSelection:!1},$n(this.actions).pipe(Si(()=>fi(nl(document,"keydown").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!0)})),nl(document,"keyup").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!1)})))),Tr()).subscribe()}setShortcuts(A){this.actions.update(i=>cA(cA({},i),A))}isActiveAction(A){return this.actionsActive[A]}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Um=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.keyboardService=h(AK),this.viewport$=new XA,this.resetSelection=this.viewport$.pipe(oi(({start:A,end:i,target:n})=>{if(A&&i&&n){let o=t.delta,a=Math.abs(i.x-A.x),r=Math.abs(i.y-A.y),s=ai.selected.set(!1)),A&&A.selected.set(!0))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),ZG=(()=>{class t{constructor(){this.rootSvg=h(w7).element,this.host=h(ge).nativeElement,this.selectionService=h(Um),this.viewportService=h(dB),this.flowSettingsService=h(bs),this.zone=h(Oe),this.rootSvgSelection=_r(this.rootSvg),this.transform=jA(""),this.viewportForSelection={},this.manualViewportChangeEffect=Ga(()=>{let A=this.viewportService.writableViewport(),i=A.state;if(A.changeType!=="initial"){if(E2(i.zoom)&&!E2(i.x)&&!E2(i.y)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.scaleTo,i.zoom);return}if(E2(i.x)&&E2(i.y)&&!E2(i.zoom)){let n=la(this.viewportService.readableViewport).zoom;this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(n));return}if(E2(i.x)&&E2(i.y)&&E2(i.zoom)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(i.zoom));return}}},{allowSignalWrites:!0}),this.handleZoom=({transform:A})=>{this.viewportService.readableViewport.set(XG(A)),this.transform.set(A.toString())},this.handleZoomStart=({transform:A})=>{this.viewportForSelection={start:XG(A)}},this.handleZoomEnd=({transform:A,sourceEvent:i})=>{this.zone.run(()=>{this.viewportForSelection=Ge(cA({},this.viewportForSelection),{end:XG(A),target:WUA(i)}),this.viewportService.triggerViewportChangeEvent("end"),this.selectionService.setViewport(this.viewportForSelection)})},this.filterCondition=A=>A.type==="mousedown"||A.type==="touchstart"?A.target.closest(".vflow-node")===null:!0}ngOnInit(){this.zone.runOutsideAngular(()=>{this.zoomBehavior=WG().scaleExtent([this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom()]).filter(this.filterCondition).on("start",this.handleZoomStart).on("zoom",this.handleZoom).on("end",this.handleZoomEnd),this.rootSvgSelection.call(this.zoomBehavior).on("dblclick.zoom",null)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","mapContext",""]],hostVars:1,hostBindings:function(i,n){i&2&&ie("transform",n.transform())}})}}return t})(),XG=t=>({zoom:t.k,x:t.x,y:t.y}),WUA=t=>{if(t instanceof Event&&t.target instanceof Element)return t.target},B7=t=>Math.round(t*100)/100;function kg(t,e){return Math.ceil(t/e)*e}var d1=(()=>{class t{constructor(){this.status=jA({state:"idle",payload:null})}setIdleStatus(){this.status.set({state:"idle",payload:null})}setConnectionStartStatus(A,i){this.status.set({state:"connection-start",payload:{source:A,sourceHandle:i}})}setReconnectionStartStatus(A,i,n){this.status.set({state:"reconnection-start",payload:{source:A,sourceHandle:i,oldEdge:n}})}setConnectionValidationStatus(A,i,n,o,a){this.status.set({state:"connection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A}})}setReconnectionValidationStatus(A,i,n,o,a,r){this.status.set({state:"reconnection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A,oldEdge:r}})}setConnectionEndStatus(A,i,n,o){this.status.set({state:"connection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o}})}setReconnectionEndStatus(A,i,n,o,a){this.status.set({state:"reconnection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o,oldEdge:a}})}setNodeDragStartStatus(A){this.status.set({state:"node-drag-start",payload:{node:A}})}setNodeDragEndStatus(A){this.status.set({state:"node-drag-end",payload:{node:A}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function dsA(t){return t.state==="node-drag-start"}function ZUA(t){return t.state==="node-drag-end"}var SsA=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.settingsService=h(bs),this.flowStatusService=h(d1)}enable(A,i){_r(A).call(this.getDragBehavior(i))}disable(A){_r(A).call(zv().on("drag",null))}destroy(A){_r(A).on(".drag",null)}getDragBehavior(A){let i=[],n=[],o=a=>A.dragHandlesCount()?!!a.target.closest(".vflow-drag-handle"):!0;return zv().filter(o).on("start",a=>{i=this.getDragNodes(A),this.flowStatusService.setNodeDragStartStatus(A),n=i.map(r=>({x:r.point().x-a.x,y:r.point().y-a.y}))}).on("drag",a=>{i.forEach((r,s)=>{let g={x:B7(a.x+n[s].x),y:B7(a.y+n[s].y)};this.moveNode(r,g)})}).on("end",()=>{this.flowStatusService.setNodeDragEndStatus(A)})}getDragNodes(A){return A.selected()?this.entitiesService.nodes().filter(i=>i.selected()&&i.draggable()):[A]}moveNode(A,i){i=this.alignToGrid(i);let n=A.parent();n&&(i.x=Math.min(n.width()-A.width(),i.x),i.x=Math.max(0,i.x),i.y=Math.min(n.height()-A.height(),i.y),i.y=Math.max(0,i.y)),A.setPoint(i)}alignToGrid(A){let[i,n]=this.settingsService.snapGrid();return i>1&&(A.x=kg(A.x,i)),n>1&&(A.y=kg(A.y,n)),A}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),BsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edge",""]]})}}return t})(),EsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","connection",""]]})}}return t})(),QsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edgeLabelHtml",""]]})}}return t})(),E7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeHtml",""]]})}}return t})(),hsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeSvg",""]]})}}return t})(),Q7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","groupNode",""]]})}}return t})();function usA(t,e){let A=t.reduce((i,n)=>(i[n.rawNode.id]=n,i),{});e.forEach(i=>{i.source.set(A[i.edge.source]),i.target.set(A[i.edge.target])})}function Gm(t){try{return new Proxy(t,{apply:()=>{}})(),!0}catch{return!1}}var eK=(()=>{class t{constructor(){this._event$=new XA,this.event$=this._event$.asObservable()}pushEvent(A){this._event$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Ph=(()=>{class t{constructor(){this.model=jA(null)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),xsA=(()=>{class t{constructor(){this.eventBus=h(eK),this.nodeService=h(Ph),this.destroyRef=h(qa),this.selected=this.nodeService.model().selected,this.data=jA(void 0)}ngOnInit(){this.trackEvents().pipe(Tr(this.destroyRef)).subscribe()}trackEvents(){let A=Object.getOwnPropertyNames(this),i=new Map;for(let n of A){let o=this[n];o instanceof $A&&i.set(o,n),o instanceof bU&&i.set(XUA(o),n)}return fi(...Array.from(i.keys()).map(n=>n.pipe(oi(o=>{this.eventBus.pushEvent({nodeId:this.nodeService.model()?.rawNode.id??"",eventName:i.get(n),eventPayload:o})}))))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,standalone:!1})}}return t})();function XUA(t){return new $i(e=>{let A=t.subscribe(i=>{e.next(i)});return()=>{A.unsubscribe()}})}var $UA=(()=>{class t extends xsA{constructor(){super(...arguments),this.node=rt.required()}ngOnInit(){let A=this.node().data;A&&(this.data=A),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[It]})}}return t})(),AJA=(()=>{class t extends xsA{constructor(){super(...arguments),this.node=rt.required()}ngOnInit(){this.node().data&&this.data.set(this.node().data),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[It]})}}return t})();function RsA(t){return Object.prototype.isPrototypeOf.call(AJA,t)}function NsA(t){return Object.prototype.isPrototypeOf.call($UA,t)}function eJA(t){return typeof t.point=="function"}function tJA(t){return RsA(t.type)?!0:Gm(t.type)&&!Gm(t.point)}function iJA(t){return NsA(t.type)?!0:Gm(t.type)&&Gm(t.point)}var h7=2;function nJA(t){return eJA(t)?t:Ge(cA({},oJA(t)),{id:t.id,type:t.type})}function oJA(t){let e={};for(let A in t)Object.prototype.hasOwnProperty.call(t,A)&&(e[A]=jA(t[A]));return e}function aJA(t,e,A){!e&&BU(t);let i=e??h(ft);return A?or(i,A):i}function Km(t,e){let A=aJA(Km,e?.injector),i;return Ue(()=>(i||(i=la(()=>Fs(t,Ge(cA({},e),{injector:A})))),i()))}function rJA(t){return t.rawNode.type==="default-group"||t.rawNode.type==="template-group"}var BB=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(bs),this.viewportService=h(dB),this.nodes=Ue(()=>this.flowSettingsService.optimization().virtualization?this.viewportNodesAfterInteraction().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.nodes()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.groups=Ue(()=>this.nodes().filter(A=>!!A.children().length||rJA(A))),this.nonGroups=Ue(()=>this.nodes().filter(A=>!this.groups().includes(A))),this.viewportNodes=Ue(()=>{let A=this.flowEntitiesService.nodes(),i=this.viewportService.readableViewport(),n=this.flowSettingsService.computedFlowWidth(),o=this.flowSettingsService.computedFlowHeight();return A.filter(a=>{let{x:r,y:s}=a.globalPoint(),g=a.width(),l=a.height();return qUA({x:r,y:s,width:g,height:l},i,n,o)})}),this.viewportNodesAfterInteraction=Km(fi($n(this.flowEntitiesService.nodes).pipe(fB(Wm),Ze(A=>!!A.length)),this.viewportService.viewportChangeEnd$.pipe(Os(300))).pipe(fe(()=>{let A=this.viewportService.readableViewport(),i=this.flowSettingsService.optimization().virtualizationZoomThreshold;return A.zoomMath.max(...this.flowEntitiesService.nodes().map(A=>A.renderOrder())))}pullNode(A){A.renderOrder.set(this.maxOrder()+1),A.children().forEach(i=>this.pullNode(i))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function u7(t,e){e||(e={equal:Object.is});let A;return Ue(()=>A=t(A),e)}var sJA=(()=>{class t{static{this.defaultWidth=100}static{this.defaultHeight=50}static{this.defaultColor="#1b262c"}constructor(A){this.rawNode=A,this.entitiesService=h(Sg),this.settingsService=h(bs),this.nodeRenderingService=h(BB),this.isVisible=jA(!1),this.point=jA({x:0,y:0}),this.width=jA(t.defaultWidth),this.height=jA(t.defaultHeight),this.size=Ue(()=>({width:this.width(),height:this.height()})),this.styleWidth=Ue(()=>this.controlledByResizer()?`${this.width()}px`:"100%"),this.styleHeight=Ue(()=>this.controlledByResizer()?`${this.height()}px`:"100%"),this.foWidth=Ue(()=>this.width()+h7),this.foHeight=Ue(()=>this.height()+h7),this.renderOrder=jA(0),this.selected=jA(!1),this.preview=jA({style:{}}),this.globalPoint=Ue(()=>{let n=this.parent(),o=this.point().x,a=this.point().y;for(;n!==null;)o+=n.point().x,a+=n.point().y,n=n.parent();return{x:o,y:a}}),this.pointTransform=Ue(()=>`translate(${this.globalPoint().x}, ${this.globalPoint().y})`),this.handles=jA([]),this.draggable=jA(!0),this.dragHandlesCount=jA(0),this.magnetRadius=20,this.isComponentType=tJA(this.rawNode)||iJA(this.rawNode),this.shouldLoad=u7(n=>{if(n||this.settingsService.optimization().lazyLoadTrigger==="immediate")return!0;if(this.settingsService.optimization().lazyLoadTrigger==="viewport"){if(RsA(this.rawNode.type)||NsA(this.rawNode.type))return!0;if(Gm(this.rawNode.type)||this.rawNode.type==="html-template"||this.rawNode.type==="svg-template"||this.rawNode.type==="template-group")return this.nodeRenderingService.viewportNodes().includes(this)}return!0}),this.componentInstance$=$n(this.shouldLoad).pipe(Ze(Boolean),Si(()=>this.rawNode.type()),ta(()=>se(this.rawNode.type)),Ps(1)),this.text=jA(""),this.componentTypeInputs={node:this.rawNode},this.parent=Ue(()=>this.entitiesService.nodes().find(n=>n.rawNode.id===this.parentId())??null),this.children=Ue(()=>this.entitiesService.nodes().filter(n=>n.parentId()===this.rawNode.id)),this.color=jA(t.defaultColor),this.controlledByResizer=jA(!1),this.resizable=jA(!1),this.resizing=jA(!1),this.resizerTemplate=jA(null),this.context={$implicit:{}},this.parentId=jA(null);let i=nJA(A);i.point&&(this.point=i.point),i.width&&(this.width=i.width),i.height&&(this.height=i.height),i.draggable&&(this.draggable=i.draggable),i.parentId&&(this.parentId=i.parentId),i.preview&&(this.preview=i.preview),i.type==="default-group"&&i.color&&(this.color=i.color),i.type==="default-group"&&i.resizable&&(this.resizable=i.resizable),i.type==="default"&&i.text&&(this.text=i.text),i.type==="html-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="svg-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="template-group"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),this.point$=$n(this.point),this.width$=$n(this.width),this.height$=$n(this.height),this.size$=$n(this.size),this.selected$=$n(this.selected),this.handles$=$n(this.handles)}setPoint(A){this.point.set(A)}}return t})(),_m=class{constructor(e){this.edgeLabel=e,this.size=jA({width:0,height:0})}};function Q2(t,e,A){return{x:(1-A)*t.x+A*e.x,y:(1-A)*t.y+A*e.y}}function tK({sourcePoint:t,targetPoint:e}){return{path:`M ${t.x},${t.y}L ${e.x},${e.y}`,labelPoints:{start:Q2(t,e,.15),center:Q2(t,e,.5),end:Q2(t,e,.85)}}}function iK({sourcePoint:t,targetPoint:e,sourcePosition:A,targetPosition:i}){let n={x:t.x-e.x,y:t.y-e.y},o=fsA(t,A,n),a=fsA(e,i,n),r=`M${t.x},${t.y} C${o.x},${o.y} ${a.x},${a.y} ${e.x},${e.y}`;return gJA(r,t,e,o,a)}function fsA(t,e,A){let i={x:0,y:0};switch(e){case"top":i.y=1;break;case"bottom":i.y=-1;break;case"right":i.x=1;break;case"left":i.x=-1;break}let n={x:A.x*Math.abs(i.x),y:A.y*Math.abs(i.y)},a=.25*25*Math.sqrt(Math.abs(n.x+n.y));return{x:t.x+i.x*a,y:t.y-i.y*a}}function gJA(t,e,A,i,n){return{path:t,labelPoints:{start:$G(e,A,i,n,.1),center:$G(e,A,i,n,.5),end:$G(e,A,i,n,.9)}}}function $G(t,e,A,i,n){let o=Q2(t,A,n),a=Q2(A,i,n),r=Q2(i,e,n);return Q2(Q2(o,a,n),Q2(a,r,n),n)}var msA={left:{x:-1,y:0},right:{x:1,y:0},top:{x:0,y:-1},bottom:{x:0,y:1}};function lJA(t,e){let A=Math.abs(e.x-t.x)/2,i=e.xe==="left"||e==="right"?t.xMath.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));function CJA({source:t,sourcePosition:e="bottom",target:A,targetPosition:i="top",offset:n}){let o=msA[e],a=msA[i],r={x:t.x+o.x*n,y:t.y+o.y*n},s={x:A.x+a.x*n,y:A.y+a.y*n},g=cJA({source:r,sourcePosition:e,target:s}),l=g.x!==0?"x":"y",C=g[l],I=[],d,B,E={x:0,y:0},Q={x:0,y:0},[f,b]=lJA(t,A);if(o[l]*a[l]===-1){d=f,B=b;let M=[{x:d,y:r.y},{x:d,y:s.y}],D=[{x:r.x,y:B},{x:s.x,y:B}];o[l]===C?I=l==="x"?M:D:I=l==="x"?D:M}else{let M=[{x:r.x,y:s.y}],D=[{x:s.x,y:r.y}];if(l==="x"?I=o.x===C?D:M:I=o.y===C?M:D,e===i){let j=Math.abs(t[l]-A[l]);if(j<=n){let AA=Math.min(n-1,n-j);o[l]===C?E[l]=(r[l]>t[l]?-1:1)*AA:Q[l]=(s[l]>A[l]?-1:1)*AA}}if(e!==i){let j=l==="x"?"y":"x",AA=o[l]===a[j],O=r[j]>s[j],DA=r[j]=J?(d=(F.x+_.x)/2,B=I[0].y):(d=I[0].x,B=(F.y+_.y)/2)}return[[t,{x:r.x+E.x,y:r.y+E.y},...I,{x:s.x+Q.x,y:s.y+Q.y},A],d,B]}function IJA(t,e,A,i){let n=Math.min(psA(t,e)/2,psA(e,A)/2,i),{x:o,y:a}=e;if(t.x===o&&o===A.x||t.y===a&&a===A.y)return`L${o} ${a}`;if(t.y===a){let g=t.x{let f="";return Q>0&&Q{let E=I*B;if(E<=0)return o[0];if(E>=I)return o[g-1];let Q=0,f=g-1;for(;Q>>1;C[_](this.source()?.shouldLoad()??!1)&&(this.target()?.shouldLoad()??!1)),this.renderOrder=jA(0),this.detached=Ue(()=>{let A=this.source(),i=this.target();if(!A||!i)return!0;let n=!1,o=!1;return this.edge.sourceHandle?n=!!A.handles().find(a=>a.rawHandle.id===this.edge.sourceHandle):n=!!A.handles().find(a=>a.rawHandle.type==="source"),this.edge.targetHandle?o=!!i.handles().find(a=>a.rawHandle.id===this.edge.targetHandle):o=!!i.handles().find(a=>a.rawHandle.type==="target"),!n||!o}),this.detached$=$n(this.detached),this.path=Ue(()=>{let A=this.sourceHandle(),i=this.targetHandle();if(!A||!i)return{path:""};let n=this.getPathFactoryParams(A,i);switch(this.curve){case"straight":return tK(n);case"bezier":return iK(n);case"smooth-step":return zh(n);case"step":return zh(n,0);default:return this.curve(n)}}),this.sourceHandle=u7(A=>{let i=null;return this.floating?i=this.closestHandles().sourceHandle:this.edge.sourceHandle?i=this.source()?.handles().find(n=>n.rawHandle.id===this.edge.sourceHandle)??null:i=this.source()?.handles().find(n=>n.rawHandle.type==="source")??null,i===null?A:i}),this.targetHandle=u7(A=>{let i=null;return this.floating?i=this.closestHandles().targetHandle:this.edge.targetHandle?i=this.target()?.handles().find(n=>n.rawHandle.id===this.edge.targetHandle)??null:i=this.target()?.handles().find(n=>n.rawHandle.type==="target")??null,i===null?A:i}),this.closestHandles=Ue(()=>{let A=this.source(),i=this.target();if(!A||!i)return{sourceHandle:null,targetHandle:null};let n=this.flowEntitiesService.connection().mode==="strict"?A.handles().filter(g=>g.rawHandle.type==="source"):A.handles(),o=this.flowEntitiesService.connection().mode==="strict"?i.handles().filter(g=>g.rawHandle.type==="target"):i.handles();if(n.length===0||o.length===0)return{sourceHandle:null,targetHandle:null};let a=1/0,r=null,s=null;for(let g of n)for(let l of o){let C=g.pointAbsolute(),I=l.pointAbsolute(),d=Math.sqrt(Math.pow(C.x-I.x,2)+Math.pow(C.y-I.y,2));d{let A=this.edge.markers?.start;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.markerEndUrl=Ue(()=>{let A=this.edge.markers?.end;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.context={$implicit:{edge:this.edge,path:Ue(()=>this.path().path),markerStart:this.markerStartUrl,markerEnd:this.markerEndUrl,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}},this.edgeLabels={},this.type=e.type??"default",this.curve=e.curve??"bezier",this.reconnectable=e.reconnectable??!1,this.floating=e.floating??!1,e.edgeLabels?.start&&(this.edgeLabels.start=new _m(e.edgeLabels.start)),e.edgeLabels?.center&&(this.edgeLabels.center=new _m(e.edgeLabels.center)),e.edgeLabels?.end&&(this.edgeLabels.end=new _m(e.edgeLabels.end))}getPathFactoryParams(e,A){return{mode:"edge",edge:this.edge,sourcePoint:e.pointAbsolute(),targetPoint:A.pointAbsolute(),sourcePosition:e.rawHandle.position,targetPosition:A.rawHandle.position,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}},f7=class{static nodes(e,A){let i=new Map;return A.forEach(n=>i.set(n.rawNode,n)),e.map(n=>i.get(n)??new sJA(n))}static edges(e,A){let i=new Map;return A.forEach(n=>i.set(n.edge,n)),e.map(n=>i.has(n)?i.get(n):new nK(n))}},dJA=25,oK=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.nodesPositionChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.point$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"position",id:A.rawNode.id,point:A.point()},...this.entitiesService.nodes().filter(i=>i!==A&&i.selected()).map(i=>({type:"position",id:i.rawNode.id,point:i.point()}))])),this.nodeSizeChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.size$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"size",id:A.rawNode.id,size:A.size()}])),this.nodeAddChange$=$n(this.entitiesService.nodes).pipe(h2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"add",id:i.rawNode.id})))),this.nodeRemoveChange$=$n(this.entitiesService.nodes).pipe(h2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"remove",id:i.rawNode.id})))),this.nodeSelectedChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.selected$.pipe(Vl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.rawNode.id,selected:A.selected()}])),this.changes$=fi(this.nodesPositionChange$,this.nodeSizeChange$,this.nodeAddChange$,this.nodeRemoveChange$,this.nodeSelectedChange$).pipe(fB(Wm,dJA))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),BJA=(t,e)=>t.length===e.length&&[...new Set([...t,...e])].every(A=>t.filter(i=>i===A).length===e.filter(i=>i===A).length),aK=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.edgeDetachedChange$=fi($n(Ue(()=>{let A=this.entitiesService.nodes();return la(this.entitiesService.edges).filter(({source:n,target:o})=>!A.includes(n())||!A.includes(o()))})),$n(this.entitiesService.edges).pipe(Si(A=>lU(...A.map(i=>i.detached$.pipe(fe(()=>i))))),fe(A=>A.filter(i=>i.detached())),Fg(2))).pipe(Vl(BJA),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"detached",id:i.id})))),this.edgeAddChange$=$n(this.entitiesService.edges).pipe(h2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"add",id:i.id})))),this.edgeRemoveChange$=$n(this.entitiesService.edges).pipe(h2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"remove",id:i.id})))),this.edgeSelectChange$=$n(this.entitiesService.edges).pipe(Si(A=>fi(...A.map(i=>i.selected$.pipe(Vl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.edge.id,selected:A.selected()}])),this.changes$=fi(this.edgeDetachedChange$,this.edgeAddChange$,this.edgeRemoveChange$,this.edgeSelectChange$).pipe(fB(Wm))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),EJA=(()=>{class t{constructor(){this.nodesChangeService=h(oK),this.edgesChangeService=h(aK),this.onNodesChange=Dn(this.nodesChangeService.changes$),this.onNodesChangePosition=Dn(this.nodeChangesOfType("position"),{alias:"onNodesChange.position"}),this.onNodesChangePositionSignle=Dn(this.singleChange(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.single"}),this.onNodesChangePositionMany=Dn(this.manyChanges(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.many"}),this.onNodesChangeSize=Dn(this.nodeChangesOfType("size"),{alias:"onNodesChange.size"}),this.onNodesChangeSizeSingle=Dn(this.singleChange(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.single"}),this.onNodesChangeSizeMany=Dn(this.manyChanges(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.many"}),this.onNodesChangeAdd=Dn(this.nodeChangesOfType("add"),{alias:"onNodesChange.add"}),this.onNodesChangeAddSingle=Dn(this.singleChange(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.single"}),this.onNodesChangeAddMany=Dn(this.manyChanges(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.many"}),this.onNodesChangeRemove=Dn(this.nodeChangesOfType("remove"),{alias:"onNodesChange.remove"}),this.onNodesChangeRemoveSingle=Dn(this.singleChange(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.single"}),this.onNodesChangeRemoveMany=Dn(this.manyChanges(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.many"}),this.onNodesChangeSelect=Dn(this.nodeChangesOfType("select"),{alias:"onNodesChange.select"}),this.onNodesChangeSelectSingle=Dn(this.singleChange(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.single"}),this.onNodesChangeSelectMany=Dn(this.manyChanges(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.many"}),this.onEdgesChange=Dn(this.edgesChangeService.changes$),this.onNodesChangeDetached=Dn(this.edgeChangesOfType("detached"),{alias:"onEdgesChange.detached"}),this.onNodesChangeDetachedSingle=Dn(this.singleChange(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.single"}),this.onNodesChangeDetachedMany=Dn(this.manyChanges(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.many"}),this.onEdgesChangeAdd=Dn(this.edgeChangesOfType("add"),{alias:"onEdgesChange.add"}),this.onEdgeChangeAddSingle=Dn(this.singleChange(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.single"}),this.onEdgeChangeAddMany=Dn(this.manyChanges(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.many"}),this.onEdgeChangeRemove=Dn(this.edgeChangesOfType("remove"),{alias:"onEdgesChange.remove"}),this.onEdgeChangeRemoveSingle=Dn(this.singleChange(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.single"}),this.onEdgeChangeRemoveMany=Dn(this.manyChanges(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.many"}),this.onEdgeChangeSelect=Dn(this.edgeChangesOfType("select"),{alias:"onEdgesChange.select"}),this.onEdgeChangeSelectSingle=Dn(this.singleChange(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.single"}),this.onEdgeChangeSelectMany=Dn(this.manyChanges(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.many"})}nodeChangesOfType(A){return this.nodesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}edgeChangesOfType(A){return this.edgesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}singleChange(A){return A.pipe(Ze(i=>i.length===1),fe(([i])=>i))}manyChanges(A){return A.pipe(Ze(i=>i.length>1))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","changesController",""]],outputs:{onNodesChange:"onNodesChange",onNodesChangePosition:"onNodesChange.position",onNodesChangePositionSignle:"onNodesChange.position.single",onNodesChangePositionMany:"onNodesChange.position.many",onNodesChangeSize:"onNodesChange.size",onNodesChangeSizeSingle:"onNodesChange.size.single",onNodesChangeSizeMany:"onNodesChange.size.many",onNodesChangeAdd:"onNodesChange.add",onNodesChangeAddSingle:"onNodesChange.add.single",onNodesChangeAddMany:"onNodesChange.add.many",onNodesChangeRemove:"onNodesChange.remove",onNodesChangeRemoveSingle:"onNodesChange.remove.single",onNodesChangeRemoveMany:"onNodesChange.remove.many",onNodesChangeSelect:"onNodesChange.select",onNodesChangeSelectSingle:"onNodesChange.select.single",onNodesChangeSelectMany:"onNodesChange.select.many",onEdgesChange:"onEdgesChange",onNodesChangeDetached:"onEdgesChange.detached",onNodesChangeDetachedSingle:"onEdgesChange.detached.single",onNodesChangeDetachedMany:"onEdgesChange.detached.many",onEdgesChangeAdd:"onEdgesChange.add",onEdgeChangeAddSingle:"onEdgesChange.add.single",onEdgeChangeAddMany:"onEdgesChange.add.many",onEdgeChangeRemove:"onEdgesChange.remove",onEdgeChangeRemoveSingle:"onEdgesChange.remove.single",onEdgeChangeRemoveMany:"onEdgesChange.remove.many",onEdgeChangeSelect:"onEdgesChange.select",onEdgeChangeSelectSingle:"onEdgesChange.select.single",onEdgeChangeSelectMany:"onEdgesChange.select.many"}})}}return t})(),D7=(()=>{class t{constructor(){this.host=h(ge).nativeElement,this.initialTouch$=new XA,this.prevTouchEvent=null,this.mouseMovement$=nl(this.host,"mousemove").pipe(fe(A=>({x:A.clientX,y:A.clientY,movementX:A.movementX,movementY:A.movementY,target:A.target,originalEvent:A})),fB(uB),u2()),this.touchMovement$=fi(this.initialTouch$,nl(this.host,"touchmove")).pipe(oi(A=>A.preventDefault()),fe(A=>{let i=A.touches[0]?.clientX??0,n=A.touches[0]?.clientY??0,o=this.prevTouchEvent?A.touches[0].pageX-this.prevTouchEvent.touches[0].pageX:0,a=this.prevTouchEvent?A.touches[0].pageY-this.prevTouchEvent.touches[0].pageY:0,r=document.elementFromPoint(i,n);return{x:i,y:n,movementX:o,movementY:a,target:r,originalEvent:A}}),oi(A=>this.prevTouchEvent=A.originalEvent),fB(uB),u2()),this.pointerMovement$=fi(this.mouseMovement$,this.touchMovement$),this.touchEnd$=nl(this.host,"touchend").pipe(fe(A=>{let i=A.changedTouches[0]?.clientX??0,n=A.changedTouches[0]?.clientY??0,o=document.elementFromPoint(i,n);return{x:i,y:n,target:o,originalEvent:A}}),oi(()=>this.prevTouchEvent=null),u2()),this.mouseUp$=nl(this.host,"mouseup").pipe(fe(A=>{let i=A.clientX,n=A.clientY,o=A.target;return{x:i,y:n,target:o,originalEvent:A}}),u2()),this.documentPointerEnd$=fi(nl(document,"mouseup"),nl(document,"touchend")).pipe(u2())}setInitialTouch(A){this.initialTouch$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootPointer",""]]})}}return t})(),Lm=(()=>{class t{constructor(){this.pointerMovementDirective=h(D7),this.rootSvg=h(w7).element,this.host=h(ge).nativeElement,this.svgCurrentSpacePoint=Ue(()=>{let A=this.pointerMovement();return A?this.documentPointToFlowPoint({x:A.x,y:A.y}):{x:0,y:0}}),this.pointerMovement=Fs(this.pointerMovementDirective.pointerMovement$)}documentPointToFlowPoint(A){let i=this.rootSvg.createSVGPoint();return i.x=A.x,i.y=A.y,i.matrixTransform(this.host.getScreenCTM().inverse())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","spacePointContext",""]]})}}return t})();function QJA(t){return typeof t=="string"?{type:"solid",color:t}:t}function m7(t,e,A){let i=A.value;return A.value=function(...n){queueMicrotask(()=>{i?.apply(this,n)})},A}var FsA=(()=>{class t{constructor(){this.toolbars=jA([]),this.nodeToolbarsMap=Ue(()=>{let A=new Map;return this.toolbars().forEach(i=>{let n=A.get(i.node)??[];A.set(i.node,[...n,i])}),A})}addToolbar(A){this.toolbars.update(i=>[...i,A])}removeToolbar(A){this.toolbars.update(i=>i.filter(n=>n!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([m7],t.prototype,"addToolbar",null),gu([m7],t.prototype,"removeToolbar",null),t})();function y7(t,e){return new $i(A=>{let i=new ResizeObserver(n=>{e.run(()=>A.next(n))});return t.forEach(n=>i.observe(n)),()=>i.disconnect()})}var hJA=(()=>{class t{constructor(){this.zone=h(Oe),this.destroyRef=h(qa),this.settingsService=h(bs),this.model=rt.required(),this.edgeModel=rt.required(),this.point=rt({x:0,y:0}),this.htmlTemplate=rt(),this.edgeLabelWrapperRef=ca.required("edgeLabelWrapper"),this.edgeLabelPoint=Ue(()=>{let A=this.point(),{width:i,height:n}=this.model().size();return{x:A.x-i/2,y:A.y-n/2}}),this.edgeLabelStyle=Ue(()=>{let A=this.model().edgeLabel;if(A.type==="default"&&A.style){let i=this.settingsService.background(),n="transparent";return i.type==="dots"&&(n=i.backgroundColor??"#fff"),i.type==="solid"&&(n=i.color),A.style.backgroundColor=A.style.backgroundColor??n,A.style}return null})}ngAfterViewInit(){let A=this.edgeLabelWrapperRef().nativeElement;y7([A],this.zone).pipe(cn(null),oi(()=>{let i=A.clientWidth+h7,n=A.clientHeight+h7;this.model().size.set({width:i,height:n})}),Tr(this.destroyRef)).subscribe()}getLabelContext(){return{$implicit:{edge:this.edgeModel().edge,label:this.model().edgeLabel}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edgeLabel",""]],viewQuery:function(i,n){i&1&&rs(n.edgeLabelWrapperRef,uKA,5),i&2&&Dr()},inputs:{model:[1,"model"],edgeModel:[1,"edgeModel"],point:[1,"point"],htmlTemplate:[1,"htmlTemplate"]},attrs:fKA,decls:1,vars:1,consts:[["edgeLabelWrapper",""],[1,"edge-label-wrapper"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){if(i&1&&V(0,yKA,2,2),i&2){let o;W((o=n.model())?0:-1,o)}},dependencies:[sl],styles:[".edge-label-wrapper[_ngcontent-%COMP%]{width:max-content;margin-top:1px;margin-left:1px}"],changeDetection:0})}}return t})();function _sA(t){let e={};return t.sourceHandle.rawHandle.type==="source"?(e.source=t.source,e.sourceHandle=t.sourceHandle):(e.source=t.target,e.sourceHandle=t.targetHandle),t.targetHandle.rawHandle.type==="target"?(e.target=t.target,e.targetHandle=t.targetHandle):(e.target=t.source,e.targetHandle=t.sourceHandle),e}var LsA=(()=>{class t{constructor(){this.statusService=h(d1),this.flowEntitiesService=h(Sg),this.onConnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>C7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.connect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>C7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.onReconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=C7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.reconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=C7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.isStrictMode=Ue(()=>this.flowEntitiesService.connection().mode==="strict")}startConnection(A){this.statusService.setConnectionStartStatus(A.parentNode,A)}startReconnection(A,i){this.statusService.setReconnectionStartStatus(A.parentNode,A,i)}validateConnection(A){let i=this.statusService.status();if(i.state==="connection-start"||i.state==="reconnection-start"){let n=i.state==="reconnection-start",o=i.payload.source,a=A.parentNode,r=i.payload.sourceHandle,s=A;if(this.isStrictMode()){let l=_sA({source:i.payload.source,sourceHandle:i.payload.sourceHandle,target:A.parentNode,targetHandle:A});o=l.source,a=l.target,r=l.sourceHandle,s=l.targetHandle}let g=this.flowEntitiesService.connection().validator({source:o.rawNode.id,target:a.rawNode.id,sourceHandle:r.rawHandle.id,targetHandle:s.rawHandle.id});A.state.set(g?"valid":"invalid"),n?this.statusService.setReconnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A,i.payload.oldEdge):this.statusService.setConnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A)}}resetValidateConnection(A){A.state.set("idle");let i=this.statusService.status();(i.state==="connection-validation"||i.state==="reconnection-validation")&&(i.state==="reconnection-validation"?this.statusService.setReconnectionStartStatus(i.payload.source,i.payload.sourceHandle,i.payload.oldEdge):this.statusService.setConnectionStartStatus(i.payload.source,i.payload.sourceHandle))}endConnection(){let A=this.statusService.status();if(A.state==="connection-validation"||A.state==="reconnection-validation"){let i=A.state==="reconnection-validation",n=A.payload.source,o=A.payload.sourceHandle,a=A.payload.target,r=A.payload.targetHandle;i?this.statusService.setReconnectionEndStatus(n,a,o,r,A.payload.oldEdge):this.statusService.setConnectionEndStatus(n,a,o,r)}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","onConnect",""],["","onReconnect",""],["","connect",""],["","reconnect",""]],outputs:{onConnect:"onConnect",connect:"connect",onReconnect:"onReconnect",reconnect:"reconnect"}})}}return t})();function C7(t,e){let A=t.payload.source,i=t.payload.target,n=t.payload.sourceHandle,o=t.payload.targetHandle;if(e){let l=_sA({source:t.payload.source,sourceHandle:t.payload.sourceHandle,target:t.payload.target,targetHandle:t.payload.targetHandle});A=l.source,i=l.target,n=l.sourceHandle,o=l.targetHandle}let a=A.rawNode.id,r=i.rawNode.id,s=n.rawHandle.id,g=o.rawHandle.id;return{source:a,target:r,sourceHandle:s,targetHandle:g}}var p7=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(bs),this.edges=Ue(()=>this.flowSettingsService.optimization().virtualization?this.viewportEdges().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.validEdges()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.viewportEdges=Ue(()=>this.flowEntitiesService.validEdges().filter(A=>{let i=A.sourceHandle(),n=A.targetHandle();return i&&n})),this.maxOrder=Ue(()=>Math.max(...this.flowEntitiesService.validEdges().map(A=>A.renderOrder())))}pull(A){A.renderOrder()!==0&&this.maxOrder()===A.renderOrder()||A.renderOrder.set(this.maxOrder()+1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function uJA(t){return window.TouchEvent&&t instanceof TouchEvent}var lK=(()=>{class t{constructor(){this.hostElement=h(ge).nativeElement,this.pointerMovementDirective=h(D7),this.pointerOver=jo(),this.pointerOut=jo(),this.pointerStart=jo(),this.pointerEnd=jo(),this.wasPointerOver=!1,this.touchEnd=this.pointerMovementDirective.touchEnd$.pipe(Ze(({target:A})=>A===this.hostElement),oi(({originalEvent:A})=>this.pointerEnd.emit(A)),Tr()).subscribe(),this.touchOverOut=this.pointerMovementDirective.touchMovement$.pipe(oi(({target:A,originalEvent:i})=>{this.handleTouchOverAndOut(A,i)}),Tr()).subscribe()}onPointerStart(A){this.pointerStart.emit(A),uJA(A)&&this.pointerMovementDirective.setInitialTouch(A)}onPointerEnd(A){this.pointerEnd.emit(A)}onMouseOver(A){this.pointerOver.emit(A)}onMouseOut(A){this.pointerOut.emit(A)}handleTouchOverAndOut(A,i){A===this.hostElement?(this.pointerOver.emit(i),this.wasPointerOver=!0):(this.wasPointerOver&&this.pointerOut.emit(i),this.wasPointerOver=!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","pointerStart",""],["","pointerEnd",""],["","pointerOver",""],["","pointerOut",""]],hostBindings:function(i,n){i&1&&tA("mousedown",function(a){return n.onPointerStart(a)})("touchstart",function(a){return n.onPointerStart(a)})("mouseup",function(a){return n.onPointerEnd(a)})("mouseover",function(a){return n.onMouseOver(a)})("mouseout",function(a){return n.onMouseOut(a)})},outputs:{pointerOver:"pointerOver",pointerOut:"pointerOut",pointerStart:"pointerStart",pointerEnd:"pointerEnd"}})}}return t})(),GsA=(()=>{class t{constructor(){this.injector=h(ft),this.selectionService=h(Um),this.flowSettingsService=h(bs),this.flowStatusService=h(d1),this.edgeRenderingService=h(p7),this.connectionController=h(LsA,{optional:!0}),this.model=rt.required(),this.edgeTemplate=rt(),this.edgeLabelHtmlTemplate=rt(),this.isReconnecting=Ue(()=>{let A=this.flowStatusService.status();return(A.state==="reconnection-start"||A.state==="reconnection-validation")&&A.payload.oldEdge===this.model()})}select(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}pull(){this.flowSettingsService.elevateEdgesOnSelect()&&this.edgeRenderingService.pull(this.model())}startReconnection(A,i){A.stopPropagation(),this.connectionController?.startReconnection(i,this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edge",""]],hostAttrs:[1,"selectable"],hostVars:2,hostBindings:function(i,n){i&2&&wn("visibility",n.isReconnecting()?"hidden":"visible")},inputs:{model:[1,"model"],edgeTemplate:[1,"edgeTemplate"],edgeLabelHtmlTemplate:[1,"edgeLabelHtmlTemplate"]},attrs:vKA,decls:6,vars:6,consts:[[1,"edge"],[1,"interactive-edge",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["edgeLabel","",3,"model","point","edgeModel","htmlTemplate"],["r","10",1,"reconnect-handle"],["r","10",1,"reconnect-handle",3,"pointerStart"]],template:function(i,n){if(i&1&&(V(0,bKA,2,6),V(1,kKA,1,1),V(2,xKA,1,1),V(3,NKA,1,1),V(4,_KA,1,1),V(5,KKA,2,2)),i&2){let o,a,r;W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"&&n.edgeTemplate()?1:-1),p(),W((o=n.model().edgeLabels.start)?2:-1,o),p(),W((a=n.model().edgeLabels.center)?3:-1,a),p(),W((r=n.model().edgeLabels.end)?4:-1,r),p(),W(n.model().sourceHandle()&&n.model().targetHandle()?5:-1)}},dependencies:[sl,hJA,lK],styles:[".edge[_ngcontent-%COMP%]{fill:none;stroke-width:2;stroke:#b1b1b7}.edge_selected[_ngcontent-%COMP%]{stroke-width:2.5;stroke:#0f4c75}.interactive-edge[_ngcontent-%COMP%]{fill:none;stroke-width:20;stroke:transparent}.reconnect-handle[_ngcontent-%COMP%]{fill:transparent;cursor:move}"],changeDetection:0})}}return t})(),rK=(()=>{class t{constructor(){this.node=jA(null)}createHandle(A){let i=this.node();i&&i.handles.update(n=>[...n,A])}destroyHandle(A){let i=this.node();i&&i.handles.update(n=>n.filter(o=>o!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([m7],t.prototype,"createHandle",null),t})(),fJA=(()=>{class t{constructor(){this.handleModel=rt.required({alias:"handleSizeController"}),this.handleWrapper=h(ge)}ngAfterViewInit(){let A=this.handleWrapper.nativeElement,i=A.getBBox(),n=mJA(A);this.handleModel().size.set({width:i.width+n,height:i.height+n})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","handleSizeController",""]],inputs:{handleModel:[1,"handleSizeController","handleModel"]}})}}return t})();function mJA(t){let e=t.firstElementChild;if(e){let A=getComputedStyle(e).strokeWidth,i=Number(A.replace("px",""));return isNaN(i)?0:i}return 0}var pJA=(()=>{class t{constructor(){this.selected=rt(!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["default-node"]],hostVars:2,hostBindings:function(i,n){i&2&&ne("selected",n.selected())},inputs:{selected:[1,"selected"]},ngContentSelectors:MsA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:["[_nghost-%COMP%]{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.selected[_nghost-%COMP%]{border-width:2px}"],changeDetection:0})}}return t})(),wJA=(()=>{class t{get model(){return this.nodeAccessor.model()}constructor(){this.nodeAccessor=h(Ph),this.rootPointer=h(D7),this.viewportService=h(dB),this.spacePointContext=h(Lm),this.settingsService=h(bs),this.hostRef=h(ge),this.resizable=rt(),this.resizerColor=rt("#2e414c"),this.gap=rt(1.5),this.resizer=ca.required("resizer"),this.lineGap=3,this.handleSize=6,this.resizeSide=null,this.zoom=Ue(()=>this.viewportService.readableViewport().zoom??0),this.minWidth=0,this.minHeight=0,this.maxWidth=1/0,this.maxHeight=1/0,this.resizeOnGlobalMouseMove=this.rootPointer.pointerMovement$.pipe(Ze(()=>this.resizeSide!==null),Ze(A=>A.movementX!==0||A.movementY!==0),oi(A=>this.resize(A)),Tr()).subscribe(),this.endResizeOnGlobalMouseUp=this.rootPointer.documentPointerEnd$.pipe(oi(()=>this.endResize()),Tr()).subscribe(),Ga(()=>{let A=this.resizable();typeof A=="boolean"?this.model.resizable.set(A):this.model.resizable.set(!0)},{allowSignalWrites:!0})}ngOnInit(){this.model.controlledByResizer.set(!0),this.model.resizerTemplate.set(this.resizer())}ngOnDestroy(){this.model.controlledByResizer.set(!1)}ngAfterViewInit(){this.minWidth=+getComputedStyle(this.hostRef.nativeElement).minWidth.replace("px","")||0,this.minHeight=+getComputedStyle(this.hostRef.nativeElement).minHeight.replace("px","")||0,this.maxWidth=+getComputedStyle(this.hostRef.nativeElement).maxWidth.replace("px","")||1/0,this.maxHeight=+getComputedStyle(this.hostRef.nativeElement).maxHeight.replace("px","")||1/0}startResize(A,i){i.stopPropagation(),this.resizeSide=A,this.model.resizing.set(!0)}resize(A){if(!this.resizeSide)return;let i=DJA(A.movementX,A.movementY,this.zoom()),n=this.applyResize(this.resizeSide,this.model,i,this.getDistanceToEdge(A)),{x:o,y:a,width:r,height:s}=yJA(n,this.model,this.resizeSide,this.minWidth,this.minHeight,this.maxWidth,this.maxHeight);this.model.setPoint({x:o,y:a}),this.model.width.set(r),this.model.height.set(s)}endResize(){this.resizeSide=null,this.model.resizing.set(!1)}getDistanceToEdge(A){let i=this.spacePointContext.documentPointToFlowPoint({x:A.x,y:A.y}),{x:n,y:o}=this.model.globalPoint();return{left:i.x-n,right:i.x-(n+this.model.width()),top:i.y-o,bottom:i.y-(o+this.model.height())}}applyResize(A,i,n,o){let{x:a,y:r}=i.point(),s=i.width(),g=i.height(),[l,C]=this.settingsService.snapGrid();switch(A){case"left":{let I=n.x+o.left,d=kg(a+I,l),B=d-a;return{x:d,y:r,width:s-B,height:g}}case"right":{let I=n.x+o.right,d=kg(s+I,l);return{x:a,y:r,width:d,height:g}}case"top":{let I=n.y+o.top,d=kg(r+I,C),B=d-r;return{x:a,y:d,width:s,height:g-B}}case"bottom":{let I=n.y+o.bottom,d=kg(g+I,C);return{x:a,y:r,width:s,height:d}}case"top-left":{let I=n.x+o.left,d=n.y+o.top,B=kg(a+I,l),E=kg(r+d,C),Q=B-a,f=E-r;return{x:B,y:E,width:s-Q,height:g-f}}case"top-right":{let I=n.x+o.right,d=n.y+o.top,B=kg(r+d,C),E=B-r;return{x:a,y:B,width:kg(s+I,l),height:g-E}}case"bottom-left":{let I=n.x+o.left,d=n.y+o.bottom,B=kg(a+I,l),E=B-a;return{x:B,y:r,width:s-E,height:kg(g+d,C)}}case"bottom-right":{let I=n.x+o.right,d=n.y+o.bottom;return{x:a,y:r,width:kg(s+I,l),height:kg(g+d,C)}}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["","resizable",""]],viewQuery:function(i,n){i&1&&rs(n.resizer,UKA,5),i&2&&Dr()},inputs:{resizable:[1,"resizable"],resizerColor:[1,"resizerColor"],gap:[1,"gap"]},attrs:JKA,ngContentSelectors:MsA,decls:3,vars:0,consts:[["resizer",""],["stroke-width","2",1,"top",3,"pointerStart"],["stroke-width","2",1,"left",3,"pointerStart"],["stroke-width","2",1,"bottom",3,"pointerStart"],["stroke-width","2",1,"right",3,"pointerStart"],[1,"top-left",3,"pointerStart"],[1,"top-right",3,"pointerStart"],[1,"bottom-left",3,"pointerStart"],[1,"bottom-right",3,"pointerStart"]],template:function(i,n){i&1&&(Yt(),pt(0,YKA,9,40,"ng-template",null,0,w2),Ke(2))},dependencies:[lK],styles:[".top[_ngcontent-%COMP%]{cursor:n-resize}.left[_ngcontent-%COMP%]{cursor:w-resize}.right[_ngcontent-%COMP%]{cursor:e-resize}.bottom[_ngcontent-%COMP%]{cursor:s-resize}.top-left[_ngcontent-%COMP%]{cursor:nw-resize}.top-right[_ngcontent-%COMP%]{cursor:ne-resize}.bottom-left[_ngcontent-%COMP%]{cursor:sw-resize}.bottom-right[_ngcontent-%COMP%]{cursor:se-resize}"],changeDetection:0})}}return gu([m7],t.prototype,"ngAfterViewInit",null),t})();function DJA(t,e,A){return{x:B7(t/A),y:B7(e/A)}}function yJA(t,e,A,i,n,o,a){let{x:r,y:s,width:g,height:l}=t;g=Math.max(g,0),l=Math.max(l,0),g=Math.max(i,g),l=Math.max(n,l),g=Math.min(o,g),l=Math.min(a,l),r=Math.min(r,e.point().x+e.width()-i),s=Math.min(s,e.point().y+e.height()-n),r=Math.max(r,e.point().x+e.width()-o),s=Math.max(s,e.point().y+e.height()-a);let C=e.parent();if(C){let d=C.width(),B=C.height(),E=e.point().x,Q=e.point().y;r=Math.max(r,0),s=Math.max(s,0),A.includes("left")&&r===0&&(g=Math.min(g,E+e.width())),A.includes("top")&&s===0&&(l=Math.min(l,Q+e.height())),g=Math.min(g,d-r),l=Math.min(l,B-s)}let I=ksA(e.children());return I&&(A.includes("left")&&(r=Math.min(r,e.point().x+e.width()-(I.x+I.width)),g=Math.max(g,I.x+I.width)),A.includes("right")&&(g=Math.max(g,I.x+I.width)),A.includes("bottom")&&(l=Math.max(l,I.y+I.height)),A.includes("top")&&(s=Math.min(s,e.point().y+e.height()-(I.y+I.height)),l=Math.max(l,I.y+I.height))),{x:r,y:s,width:g,height:l}}var sK=class{constructor(e,A){this.rawHandle=e,this.parentNode=A,this.strokeWidth=2,this.size=jA({width:10+2*this.strokeWidth,height:10+2*this.strokeWidth}),this.pointAbsolute=Ue(()=>({x:this.parentNode.globalPoint().x+this.hostOffset().x+this.sizeOffset().x,y:this.parentNode.globalPoint().y+this.hostOffset().y+this.sizeOffset().y})),this.state=jA("idle"),this.updateHostSizeAndPosition$=new XA,this.hostSize=Fs(this.updateHostSizeAndPosition$.pipe(fe(()=>this.getHostSize())),{initialValue:{width:0,height:0}}),this.hostPosition=Fs(this.updateHostSizeAndPosition$.pipe(fe(()=>({x:this.hostReference instanceof HTMLElement?this.hostReference.offsetLeft:0,y:this.hostReference instanceof HTMLElement?this.hostReference.offsetTop:0}))),{initialValue:{x:0,y:0}}),this.hostOffset=Ue(()=>{switch(this.rawHandle.position){case"left":return{x:-this.rawHandle.userOffsetX,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"right":return{x:-this.rawHandle.userOffsetX+this.parentNode.size().width,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"top":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY};case"bottom":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY+this.parentNode.size().height}}}),this.sizeOffset=Ue(()=>{switch(this.rawHandle.position){case"left":return{x:-(this.size().width/2),y:0};case"right":return{x:this.size().width/2,y:0};case"top":return{x:0,y:-(this.size().height/2)};case"bottom":return{x:0,y:this.size().height/2}}}),this.hostReference=this.rawHandle.hostReference,this.template=this.rawHandle.template,this.templateContext={$implicit:{point:this.hostOffset,state:this.state,node:this.parentNode.rawNode}}}updateHost(){this.updateHostSizeAndPosition$.next()}getHostSize(){return this.hostReference instanceof HTMLElement?{width:this.hostReference.offsetWidth,height:this.hostReference.offsetHeight}:this.hostReference instanceof SVGGraphicsElement?this.hostReference.getBBox():{width:0,height:0}}},cK=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(rK),this.element=h(ge).nativeElement,this.destroyRef=h(qa),this.position=rt.required(),this.type=rt.required(),this.id=rt(),this.template=rt(),this.offsetX=rt(0),this.offsetY=rt(0)}ngOnInit(){or(this.injector,()=>{let A=this.handleService.node();if(A){let i=new sK({position:this.position(),type:this.type(),id:this.id(),hostReference:this.element.parentElement,template:this.template(),userOffsetX:this.offsetX(),userOffsetY:this.offsetY()},A);this.handleService.createHandle(i),requestAnimationFrame(()=>i.updateHost()),this.destroyRef.onDestroy(()=>this.handleService.destroyHandle(i))}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["handle"]],inputs:{position:[1,"position"],type:[1,"type"],id:[1,"id"],template:[1,"template"],offsetX:[1,"offsetX"],offsetY:[1,"offsetY"]},decls:0,vars:0,template:function(i,n){},encapsulation:2,changeDetection:0})}}return t})(),vJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(qa),this.hostElementRef=h(ge)}ngOnInit(){this.nodeAccessor.model().handles$.pipe(Si(i=>y7([...i.map(n=>n.hostReference),this.hostElementRef.nativeElement],this.zone).pipe(fe(()=>i))),oi(i=>{i.forEach(n=>n.updateHost())}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeHandlesController",""]]})}}return t})(),bJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(qa),this.hostElementRef=h(ge)}ngOnInit(){let A=this.nodeAccessor.model(),i=this.hostElementRef.nativeElement;fi(y7([i],this.zone)).pipe(cn(null),Ze(()=>!A.resizing()),oi(()=>{A.width.set(i.clientWidth),A.height.set(i.clientHeight)}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeResizeController",""]]})}}return t})(),KsA=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(rK),this.draggableService=h(SsA),this.flowStatusService=h(d1),this.nodeRenderingService=h(BB),this.flowSettingsService=h(bs),this.selectionService=h(Um),this.hostRef=h(ge),this.nodeAccessor=h(Ph),this.overlaysService=h(FsA),this.connectionController=h(LsA,{optional:!0}),this.model=rt.required(),this.nodeTemplate=rt(),this.nodeSvgTemplate=rt(),this.groupNodeTemplate=rt(),this.showMagnet=Ue(()=>this.flowStatusService.status().state==="connection-start"||this.flowStatusService.status().state==="connection-validation"||this.flowStatusService.status().state==="reconnection-start"||this.flowStatusService.status().state==="reconnection-validation"),this.toolbars=Ue(()=>this.overlaysService.nodeToolbarsMap().get(this.model()))}ngOnInit(){this.model().isVisible.set(!0),this.nodeAccessor.model.set(this.model()),this.handleService.node.set(this.model()),Ga(()=>{this.model().draggable()?this.draggableService.enable(this.hostRef.nativeElement,this.model()):this.draggableService.disable(this.hostRef.nativeElement)},{injector:this.injector})}ngOnDestroy(){this.model().isVisible.set(!1),this.draggableService.destroy(this.hostRef.nativeElement)}startConnection(A,i){A.stopPropagation(),this.connectionController?.startConnection(i)}validateConnection(A){this.connectionController?.validateConnection(A)}resetValidateConnection(A){this.connectionController?.resetValidateConnection(A)}endConnection(){this.connectionController?.endConnection()}pullNode(){this.flowSettingsService.elevateNodesOnSelect()&&this.nodeRenderingService.pullNode(this.model())}selectNode(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","node",""]],hostAttrs:[1,"vflow-node"],inputs:{model:[1,"model"],nodeTemplate:[1,"nodeTemplate"],nodeSvgTemplate:[1,"nodeSvgTemplate"],groupNodeTemplate:[1,"groupNodeTemplate"]},features:[dt([rK,Ph])],attrs:TKA,decls:11,vars:7,consts:[[1,"selectable"],["nodeHandlesController","",1,"selectable"],["rx","5","ry","5",1,"default-group-node",3,"resizable","gap","resizerColor","default-group-node_selected","stroke","fill"],[1,"selectable",3,"click"],["nodeHandlesController","",3,"selected"],[3,"outerHTML"],["type","source","position","right"],["type","target","position","left"],["nodeHandlesController","","nodeResizeController","",1,"wrapper"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["nodeHandlesController","",1,"selectable",3,"click"],[3,"ngComponentOutlet","ngComponentOutletInputs","ngComponentOutletInjector"],["rx","5","ry","5",1,"default-group-node",3,"click","resizable","gap","resizerColor"],[3,"ngTemplateOutlet"],["r","5",1,"default-handle"],[3,"handleSizeController"],[1,"magnet"],["r","5",1,"default-handle",3,"pointerStart","pointerEnd"],[3,"pointerStart","pointerEnd","handleSizeController"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"magnet",3,"pointerEnd","pointerOver","pointerOut"]],template:function(i,n){if(i&1&&(V(0,HKA,5,12,":svg:foreignObject",0),V(1,zKA,3,9,":svg:foreignObject",0),V(2,OKA,2,3,":svg:g",1),V(3,jKA,2,3),V(4,qKA,1,11,":svg:rect",2),V(5,VKA,2,3,":svg:g",1),V(6,XKA,1,1),Ut(7,nUA,4,4,null,null,Li),Ut(9,oUA,2,4,":svg:foreignObject",null,Li)),i&2){let o;W(n.model().rawNode.type==="default"?0:-1),p(),W(n.model().rawNode.type==="html-template"&&n.nodeTemplate()?1:-1),p(),W(n.model().rawNode.type==="svg-template"&&n.nodeSvgTemplate()?2:-1),p(),W(n.model().isComponentType?3:-1),p(),W(n.model().rawNode.type==="default-group"?4:-1),p(),W(n.model().rawNode.type==="template-group"&&n.groupNodeTemplate()?5:-1),p(),W((o=n.model().resizerTemplate())?6:-1,o),p(),Jt(n.model().handles()),p(2),Jt(n.toolbars())}},dependencies:[lK,pJA,cK,sl,D2,wJA,fJA,vJA,bJA,ls],styles:[".magnet[_ngcontent-%COMP%]{opacity:0}.wrapper[_ngcontent-%COMP%]{display:table-cell}.default-group-node[_ngcontent-%COMP%]{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected[_ngcontent-%COMP%]{stroke-width:2px}.default-handle[_ngcontent-%COMP%]{stroke:#fff;fill:#1b262c}"],changeDetection:0})}}return t})(),MJA=(()=>{class t{constructor(){this.flowStatusService=h(d1),this.spacePointContext=h(Lm),this.flowEntitiesService=h(Sg),this.model=rt.required(),this.template=rt(),this.path=Ue(()=>{let A=this.flowStatusService.status(),i=this.model().curve;if(A.state==="connection-start"||A.state==="reconnection-start"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=this.spacePointContext.svgCurrentSpacePoint(),s=wsA(n.rawHandle.position),g=this.getPathFactoryParams(o,r,a,s);switch(i){case"straight":return tK(g).path;case"bezier":return iK(g).path;case"smooth-step":return zh(g).path;case"step":return zh(g,0).path;default:return i(g).path}}if(A.state==="connection-validation"||A.state==="reconnection-validation"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=A.payload.targetHandle,s=A.payload.valid?r.pointAbsolute():this.spacePointContext.svgCurrentSpacePoint(),g=A.payload.valid?r.rawHandle.position:wsA(n.rawHandle.position),l=this.getPathFactoryParams(o,s,a,g);switch(i){case"straight":return tK(l).path;case"bezier":return iK(l).path;case"smooth-step":return zh(l).path;case"step":return zh(l,0).path;default:return i(l).path}}return null}),this.markerUrl=Ue(()=>{let A=this.model().settings.marker;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.defaultColor="rgb(177, 177, 183)"}getContext(){return{$implicit:{path:this.path,marker:this.markerUrl}}}getPathFactoryParams(A,i,n,o){return{mode:"connection",sourcePoint:A,targetPoint:i,sourcePosition:n,targetPosition:o,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","connection",""]],inputs:{model:[1,"model"],template:[1,"template"]},attrs:aUA,decls:2,vars:2,consts:[["fill","none","stroke-width","2"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){i&1&&(V(0,sUA,1,1),V(1,cUA,1,1)),i&2&&(W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"?1:-1))},dependencies:[sl],encapsulation:2,changeDetection:0})}}return t})();function wsA(t){switch(t){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}function kJA(){return String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now()}var SJA="#fff",xJA=20,RJA=2,DsA="rgb(177, 177, 183)",ysA=.1,NJA=!0,FJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.rootSvg=h(w7).element,this.settingsService=h(bs),this.backgroundSignal=this.settingsService.background,this.scaledGap=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.gap??xJA):0}),this.x=Ue(()=>this.viewportService.readableViewport().x%this.scaledGap()),this.y=Ue(()=>this.viewportService.readableViewport().y%this.scaledGap()),this.patternColor=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?A.color??DsA:DsA}),this.patternSize=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.size??RJA)/2:0}),this.bgImageSrc=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.src:""}),this.imageSize=Km($n(this.backgroundSignal).pipe(Si(()=>_JA(this.bgImageSrc())),fe(A=>({width:A.naturalWidth,height:A.naturalHeight}))),{initialValue:{width:0,height:0}}),this.scaledImageWidth=Ue(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().width*i*(A.scale??ysA)}return 0}),this.scaledImageHeight=Ue(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().height*i*(A.scale??ysA)}return 0}),this.imageX=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().x%this.scaledImageWidth():A.fixed?0:this.viewportService.readableViewport().x:0}),this.imageY=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().y%this.scaledImageHeight():A.fixed?0:this.viewportService.readableViewport().y:0}),this.repeated=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"&&(A.repeat??NJA)}),this.patternId=kJA(),this.patternUrl=`url(#${this.patternId})`,Ga(()=>{let A=this.backgroundSignal();A.type==="dots"&&(this.rootSvg.style.backgroundColor=A.backgroundColor??SJA),A.type==="solid"&&(this.rootSvg.style.backgroundColor=A.color)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","background",""]],attrs:CUA,decls:2,vars:2,consts:[["patternUnits","userSpaceOnUse"],["x","0","y","0","width","100%","height","100%"]],template:function(i,n){i&1&&(V(0,IUA,3,10),V(1,EUA,2,2)),i&2&&(W(n.backgroundSignal().type==="dots"?0:-1),p(),W(n.backgroundSignal().type==="image"?1:-1))},encapsulation:2,changeDetection:0})}}return t})();function _JA(t){let e=new Image;return e.src=t,new Promise(A=>{e.onload=()=>A(e)})}var LJA=(()=>{class t{constructor(){this.markers=rt.required(),this.defaultColor="rgb(177, 177, 183)"}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["defs","flowDefs",""]],inputs:{markers:[1,"markers"]},attrs:QUA,decls:3,vars:2,consts:[["viewBox","-10 -10 20 20","refX","0","refY","0"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed",3,"stroke","stroke-width","fill"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default",3,"stroke","stroke-width"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default"]],template:function(i,n){i&1&&(Ut(0,fUA,3,7,":svg:marker",0,Li),ri(2,"keyvalue")),i&2&&Jt(Ci(2,0,n.markers()))},dependencies:[Bp],styles:[".marker__arrow_default[_ngcontent-%COMP%]{stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;fill:none}.marker__arrow_closed[_ngcontent-%COMP%]{stroke-linecap:round;stroke-linejoin:round}"],changeDetection:0})}}return t})(),GJA=(()=>{class t{constructor(){this.host=h(ge),this.flowSettingsService=h(bs),this.flowWidth=Ue(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[0]}),this.flowHeight=Ue(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[1]}),y7([this.host.nativeElement],h(Oe)).pipe(oi(([A])=>{this.flowSettingsService.computedFlowWidth.set(A.contentRect.width),this.flowSettingsService.computedFlowHeight.set(A.contentRect.height)}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","flowSizeController",""]],hostVars:2,hostBindings:function(i,n){i&2&&ie("width",n.flowWidth())("height",n.flowHeight())}})}}return t})(),KJA=(()=>{class t{constructor(){this.flowStatusService=h(d1)}resetConnection(){let A=this.flowStatusService.status();(A.state==="connection-start"||A.state==="reconnection-start")&&this.flowStatusService.setIdleStatus()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgContext",""]],hostBindings:function(i,n){i&1&&tA("mouseup",function(){return n.resetConnection()},nC)("touchend",function(){return n.resetConnection()},nC)("contextmenu",function(){return n.resetConnection()})}})}}return t})();function gK(t,e){let A=[];for(let i of e){let{x:n,y:o}=i.globalPoint();t.x>=n&&t.x<=n+i.width()&&t.y>=o&&t.y<=o+i.height()&&A.push({x:t.x-n,y:t.y-o,spaceNodeId:i.rawNode.id})}return A.reverse(),A.push({spaceNodeId:null,x:t.x,y:t.y}),A}var CK=(()=>{class t{static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),UJA=(()=>{class t extends CK{shouldRenderNode(A){return!A.isVisible()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function JJA(t,e){if(Object.keys(e.preview().style).length){HJA(t,e);return}if(e.rawNode.type==="default"){YJA(t,e);return}if(e.rawNode.type==="default-group"){TJA(t,e);return}zJA(t,e)}function YJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();UsA(t,e,5),t.fillStyle="white",t.fill(),t.strokeStyle="#1b262c",t.lineWidth=1.5,t.stroke(),t.fillStyle="black",t.font="14px Arial",t.textAlign="center",t.textBaseline="middle";let o=A.x+i/2,a=A.y+n/2;t.fillText(e.text(),o,a)}function TJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.globalAlpha=.05,t.fillStyle=e.color(),t.fillRect(A.x,A.y,i,n),t.globalAlpha=1,t.strokeStyle=e.color(),t.lineWidth=1.5,t.strokeRect(A.x,A.y,i,n)}function HJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height(),o=e.preview().style;if(o.borderRadius){let a=parseFloat(o.borderRadius);UsA(t,e,a)}else t.beginPath(),t.rect(A.x,A.y,i,n),t.closePath();o.backgroundColor&&(t.fillStyle=o.backgroundColor),o.borderColor&&(t.strokeStyle=o.borderColor),o.borderWidth&&(t.lineWidth=parseFloat(o.borderWidth)),t.fill(),t.stroke()}function zJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.fillStyle="rgb(0 0 0 / 10%)",t.fillRect(A.x,A.y,i,n)}function UsA(t,e,A){let i=e.globalPoint(),n=e.width(),o=e.height();t.beginPath(),t.moveTo(i.x+A,i.y),t.lineTo(i.x+n-A,i.y),t.quadraticCurveTo(i.x+n,i.y,i.x+n,i.y+A),t.lineTo(i.x+n,i.y+o-A),t.quadraticCurveTo(i.x+n,i.y+o,i.x+n-A,i.y+o),t.lineTo(i.x+A,i.y+o),t.quadraticCurveTo(i.x,i.y+o,i.x,i.y+o-A),t.lineTo(i.x,i.y+A),t.quadraticCurveTo(i.x,i.y,i.x+A,i.y),t.closePath()}var OJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.renderStrategy=h(CK),this.nodeRenderingService=h(BB),this.renderer2=h(_i),this.element=h(ge).nativeElement,this.ctx=this.element.getContext("2d"),this.width=rt(0),this.height=rt(0),this.dpr=window.devicePixelRatio,Ga(()=>{this.renderer2.setProperty(this.element,"width",this.width()*this.dpr),this.renderer2.setProperty(this.element,"height",this.height()*this.dpr),this.renderer2.setStyle(this.element,"width",`${this.width()}px`),this.renderer2.setStyle(this.element,"height",`${this.height()}px`),this.ctx.scale(this.dpr,this.dpr)}),Ga(()=>{let A=this.viewportService.readableViewport();this.ctx.clearRect(0,0,this.width(),this.height()),this.ctx.save(),this.ctx.setTransform(A.zoom*this.dpr,0,0,A.zoom*this.dpr,A.x*this.dpr,A.y*this.dpr);for(let i=0;i{class t{constructor(){this.nodeRenderingService=h(BB),this.edgeRenderingService=h(p7),this.flowEntitiesService=h(Sg),this.settingsService=h(bs),this.flowInitialized=jA(!1),h(Oe).runOutsideAngular(()=>nt(this,null,function*(){yield PJA(2),this.flowInitialized.set(!0)}))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function PJA(t){return new Promise(e=>{let A=0;function i(){A++,A{class t{constructor(){this.nodeRenderingService=h(BB),this.flowStatus=h(d1),this.tolerance=rt(10),this.lineColor=rt("#1b262c"),this.isNodeDragging=Ue(()=>dsA(this.flowStatus.status())),this.intersections=u7(A=>{let i=this.flowStatus.status();if(dsA(i)){let n=i.payload.node,o=bsA(I7(n)),a=this.nodeRenderingService.viewportNodes().filter(I=>I!==n).filter(I=>!n.children().includes(I)).map(I=>bsA(I7(I))),r=[],s=o.x,g=o.y,l=1/0,C=1/0;return a.forEach(I=>{let d=o.left+o.width/2,B=I.left+I.width/2;for(let[f,b,S,M]of[[d,B,B-o.width/2,!0],[o.left,I.left,I.left,!1],[o.left,I.right,I.right,!1],[o.right,I.left,I.left-o.width,!1],[o.right,I.right,I.right-o.width,!1]]){let D=Math.abs(f-b);if(D<=this.tolerance()){let F=Math.min(o.top,I.top),_=Math.max(o.bottom,I.bottom);if(r.push({x:b,y:F,x2:b,y2:_,isCenter:M}),DA.payload.node),fe(A=>[A,this.intersections()]),oi(([A,i])=>{if(i){let n={x:i.snappedX,y:i.snappedY},o=A.parent()?[A.parent()]:[];A.setPoint(gK(n,o)[0])}}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","alignmentHelper",""]],inputs:{tolerance:[1,"tolerance"],lineColor:[1,"lineColor"]},attrs:pUA,decls:1,vars:1,template:function(i,n){i&1&&V(0,yUA,1,1),i&2&&W(n.isNodeDragging()?0:-1)},encapsulation:2,changeDetection:0})}}return t})();var JsA=(()=>{class t{constructor(){this.viewportService=h(dB),this.flowEntitiesService=h(Sg),this.nodesChangeService=h(oK),this.edgesChangeService=h(aK),this.nodeRenderingService=h(BB),this.edgeRenderingService=h(p7),this.flowSettingsService=h(bs),this.componentEventBusService=h(eK),this.keyboardService=h(AK),this.injector=h(ft),this.flowRenderingService=h(vsA),this.alignmentHelper=rt(!1),this.nodeModels=this.nodeRenderingService.nodes,this.groups=this.nodeRenderingService.groups,this.nonGroups=this.nodeRenderingService.nonGroups,this.edgeModels=this.edgeRenderingService.edges,this.onComponentNodeEvent=Dn(this.componentEventBusService.event$),this.nodeTemplateDirective=rC(E7),this.nodeSvgTemplateDirective=rC(hsA),this.groupNodeTemplateDirective=rC(Q7),this.edgeTemplateDirective=rC(BsA),this.edgeLabelHtmlDirective=rC(QsA),this.connectionTemplateDirective=rC(EsA),this.mapContext=ca(ZG),this.spacePointContext=ca.required(Lm),this.viewport=this.viewportService.readableViewport.asReadonly(),this.nodesChange=Km(this.nodesChangeService.changes$,{initialValue:[]}),this.edgesChange=Km(this.edgesChangeService.changes$,{initialValue:[]}),this.initialized=this.flowRenderingService.flowInitialized.asReadonly(),this.viewportChange$=$n(this.viewportService.readableViewport).pipe(Fg(1)),this.nodesChange$=this.nodesChangeService.changes$,this.edgesChange$=this.edgesChangeService.changes$,this.initialized$=$n(this.flowRenderingService.flowInitialized),this.markers=this.flowEntitiesService.markers,this.minimap=this.flowEntitiesService.minimap,this.flowOptimization=this.flowSettingsService.optimization,this.flowWidth=this.flowSettingsService.computedFlowWidth,this.flowHeight=this.flowSettingsService.computedFlowHeight}set view(A){this.flowSettingsService.view.set(A)}set minZoom(A){this.flowSettingsService.minZoom.set(A)}set maxZoom(A){this.flowSettingsService.maxZoom.set(A)}set background(A){this.flowSettingsService.background.set(QJA(A))}set optimization(A){this.flowSettingsService.optimization.update(i=>cA(cA({},i),A))}set entitiesSelectable(A){this.flowSettingsService.entitiesSelectable.set(A)}set keyboardShortcuts(A){this.keyboardService.setShortcuts(A)}set connection(A){this.flowEntitiesService.connection.set(A)}get connection(){return this.flowEntitiesService.connection()}set snapGrid(A){this.flowSettingsService.snapGrid.set(A)}set elevateNodesOnSelect(A){this.flowSettingsService.elevateNodesOnSelect.set(A)}set elevateEdgesOnSelect(A){this.flowSettingsService.elevateEdgesOnSelect.set(A)}set nodes(A){let i=or(this.injector,()=>f7.nodes(A,this.flowEntitiesService.nodes()));usA(i,this.flowEntitiesService.edges()),this.flowEntitiesService.nodes.set(i),i.forEach(n=>this.nodeRenderingService.pullNode(n))}set edges(A){let i=or(this.injector,()=>f7.edges(A,this.flowEntitiesService.edges()));usA(this.flowEntitiesService.nodes(),i),this.flowEntitiesService.edges.set(i)}viewportTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}zoomTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:{zoom:A},duration:0})}panTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}fitView(A){this.viewportService.fitView(A)}getNode(A){return this.flowEntitiesService.getNode(A)?.rawNode}getDetachedEdges(){return this.flowEntitiesService.getDetachedEdges().map(A=>A.edge)}documentPointToFlowPoint(A,i){let n=this.spacePointContext().documentPointToFlowPoint(A);return i?.spaces?gK(n,this.nodeRenderingService.groups()):n}getIntesectingNodes(A,i={partially:!0}){return UUA(A,this.nodeModels(),i).map(n=>n.rawNode)}toNodeSpace(A,i){let n=this.nodeModels().find(a=>a.rawNode.id===A);if(!n)return{x:1/0,y:1/0};if(i===null)return n.globalPoint();let o=this.nodeModels().find(a=>a.rawNode.id===i);return o?gK(n.globalPoint(),[o])[0]:{x:1/0,y:1/0}}trackNodes(A,{rawNode:i}){return i}trackEdges(A,{edge:i}){return i}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["vflow"]],contentQueries:function(i,n,o){i&1&&Cp(o,n.nodeTemplateDirective,E7,5)(o,n.nodeSvgTemplateDirective,hsA,5)(o,n.groupNodeTemplateDirective,Q7,5)(o,n.edgeTemplateDirective,BsA,5)(o,n.edgeLabelHtmlDirective,QsA,5)(o,n.connectionTemplateDirective,EsA,5),i&2&&Dr(6)},viewQuery:function(i,n){i&1&&rs(n.mapContext,ZG,5)(n.spacePointContext,Lm,5),i&2&&Dr(2)},inputs:{view:"view",minZoom:"minZoom",maxZoom:"maxZoom",background:"background",optimization:"optimization",entitiesSelectable:"entitiesSelectable",keyboardShortcuts:"keyboardShortcuts",connection:[2,"connection","connection",A=>new d7(A)],snapGrid:"snapGrid",elevateNodesOnSelect:"elevateNodesOnSelect",elevateEdgesOnSelect:"elevateEdgesOnSelect",nodes:"nodes",alignmentHelper:[1,"alignmentHelper"],edges:"edges"},outputs:{onComponentNodeEvent:"onComponentNodeEvent"},features:[dt([SsA,dB,d1,Sg,oK,aK,BB,p7,Um,bs,eK,AK,FsA,{provide:CK,useClass:UJA},vsA]),sp([{directive:EJA,outputs:["onNodesChange","onNodesChange","onNodesChange.position","onNodesChange.position","onNodesChange.position.single","onNodesChange.position.single","onNodesChange.position.many","onNodesChange.position.many","onNodesChange.size","onNodesChange.size","onNodesChange.size.single","onNodesChange.size.single","onNodesChange.size.many","onNodesChange.size.many","onNodesChange.add","onNodesChange.add","onNodesChange.add.single","onNodesChange.add.single","onNodesChange.add.many","onNodesChange.add.many","onNodesChange.remove","onNodesChange.remove","onNodesChange.remove.single","onNodesChange.remove.single","onNodesChange.remove.many","onNodesChange.remove.many","onNodesChange.select","onNodesChange.select","onNodesChange.select.single","onNodesChange.select.single","onNodesChange.select.many","onNodesChange.select.many","onEdgesChange","onEdgesChange","onEdgesChange.detached","onEdgesChange.detached","onEdgesChange.detached.single","onEdgesChange.detached.single","onEdgesChange.detached.many","onEdgesChange.detached.many","onEdgesChange.add","onEdgesChange.add","onEdgesChange.add.single","onEdgesChange.add.single","onEdgesChange.add.many","onEdgesChange.add.many","onEdgesChange.remove","onEdgesChange.remove","onEdgesChange.remove.single","onEdgesChange.remove.single","onEdgesChange.remove.many","onEdgesChange.remove.many","onEdgesChange.select","onEdgesChange.select","onEdgesChange.select.single","onEdgesChange.select.single","onEdgesChange.select.many","onEdgesChange.select.many"]}])],decls:11,vars:8,consts:[["flow",""],["rootSvgRef","","rootSvgContext","","rootPointer","","flowSizeController","",1,"root-svg"],["flowDefs","",3,"markers"],["background",""],["mapContext","","spacePointContext",""],["connection","",3,"model","template"],[3,"ngTemplateOutlet"],["previewFlow","",1,"preview-flow",3,"width","height"],["alignmentHelper",""],["alignmentHelper","",3,"tolerance","lineColor"],["node","",3,"model","groupNodeTemplate"],["edge","",3,"model","edgeTemplate","edgeLabelHtmlTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate","groupNodeTemplate"]],template:function(i,n){if(i&1&&(Qt(),m(0,"svg",1,0),GA(2,"defs",2)(3,"g",3),m(4,"g",4),V(5,MUA,2,1),GA(6,"g",5),V(7,RUA,6,0),V(8,_UA,4,0),w(),V(9,LUA,1,1,":svg:ng-container",6),w(),V(10,GUA,1,2,"canvas",7)),i&2){let o,a,r;p(2),$("markers",n.markers()),p(3),W((o=n.alignmentHelper())?5:-1,o),p(),$("model",n.connection)("template",(a=n.connectionTemplateDirective())==null?null:a.templateRef),p(),W(n.flowOptimization().detachedGroupsLayer?7:-1),p(),W(n.flowOptimization().detachedGroupsLayer?-1:8),p(),W((r=n.minimap())?9:-1,r),p(),W(n.flowOptimization().virtualization?10:-1)}},dependencies:[w7,KJA,D7,GJA,LJA,FJA,ZG,Lm,MJA,KsA,GsA,sl,OJA,jJA],styles:["[_nghost-%COMP%]{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}[_nghost-%COMP%] *{box-sizing:border-box}.root-svg[_ngcontent-%COMP%]{grid-row-start:1;grid-column-start:1}.preview-flow[_ngcontent-%COMP%]{pointer-events:none;grid-row-start:1;grid-column-start:1}"],changeDetection:0})}}return t})();var YsA=(()=>{class t{constructor(){this.flowSettingsService=h(bs),this.selectionService=h(Um),this.parentEdge=h(GsA,{optional:!0}),this.parentNode=h(KsA,{optional:!0}),this.host=h(ge),this.selectOnEvent=this.getEvent$().pipe(oi(()=>this.select()),Tr()).subscribe()}select(){let A=this.entity();A&&this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(A)}entity(){return this.parentNode?this.parentNode.model():this.parentEdge?this.parentEdge.model():null}getEvent$(){return nl(this.host.nativeElement,"click")}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","selectable",""]]})}}return t})();var VJA=["canvas"],WJA=["svgCanvas"],ZJA=()=>({type:"dots",color:"#424242",size:1,gap:12}),XJA=()=>[12,12],$JA=(t,e)=>e.name;function AYA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",11)(2,"button",12),tA("click",function(){Z(A);let n=v();return X(n.backToMainCanvas())}),m(3,"mat-icon"),K(4,"arrow_back"),w()(),m(5,"div",13)(6,"span",14),K(7,"smart_toy"),w(),m(8,"div",15)(9,"h3",16),K(10),w(),m(11,"p",17),K(12,"Agent Tool"),w()()()()()}if(t&2){let A=v();p(2),$("matTooltip",A.getBackButtonTooltip()),p(8),qA(A.currentAgentTool())}}function eYA(t,e){if(t&1){let A=JA();m(0,"span",18),tA("click",function(){Z(A);let n=v();return X(n.toggleSidePanelRequest.emit())}),K(1,"left_panel_open"),w()}}function tYA(t,e){if(t&1){let A=JA();Qt(),m(0,"foreignObject"),as(),m(1,"div",27),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(2,"button",28,0),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-icon"),K(5,"add"),w()(),m(6,"span",29),K(7,"Add sub-agent"),w(),m(8,"mat-menu",null,1)(10,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(11,"mat-icon"),K(12,"psychology"),w(),m(13,"span"),K(14,"LLM Agent"),w()(),m(15,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(16,"mat-icon"),K(17,"more_horiz"),w(),m(18,"span"),K(19,"Sequential Agent"),w()(),m(20,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(21,"mat-icon"),K(22,"sync"),w(),m(23,"span"),K(24,"Loop Agent"),w()(),m(25,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(26,"mat-icon"),K(27,"density_medium"),w(),m(28,"span"),K(29,"Parallel Agent"),w()()()()()}if(t&2){let A=An(9),i=v().$implicit;ie("width",200)("height",100)("x",i.width()/2-100)("y",i.height()/2-40),p(2),$("matMenuTriggerFor",A)}}function iYA(t,e){t&1&&(Qt(),GA(0,"handle",26))}function nYA(t,e){if(t&1){let A=JA();Qt(),m(0,"g")(1,"rect",21),tA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupPointerDown(o.node,n))}),w(),m(2,"foreignObject",22),as(),m(3,"div",23)(4,"mat-icon",24),K(5),w(),m(6,"span",25),K(7),w()()(),V(8,tYA,30,5,":svg:foreignObject"),V(9,iYA,1,0,":svg:handle",26),w()}if(t&2){let A,i,n=e.$implicit,o=v(2);p(),wn("stroke",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.8)":"rgba(0, 187, 234, 0.3)")("fill",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.1)":"rgba(0, 187, 234, 0.03)")("stroke-width",o.isGroupSelected(n.node)?3:2),ie("width",n.width())("height",n.height()),p(),ie("width",200)("height",32),p(3),qA(o.getAgentIcon(n.node.data==null||(A=n.node.data())==null?null:A.agent_class)),p(2),qA(n.node.data==null||(i=n.node.data())==null?null:i.agent_class),p(),W(o.isGroupEmpty(n.node.id)?8:-1),p(),W(o.shouldShowTopHandle(n.node)?9:-1)}}function oYA(t,e){t&1&&(m(0,"span",35),K(1,"Root"),w())}function aYA(t,e){if(t&1){let A=JA();m(0,"button",43),tA("click",function(n){Z(A),v();let o=Vs(0);return v(2).openDeleteSubAgentDialog(o),X(n.stopPropagation())}),m(1,"mat-icon"),K(2,"delete"),w()()}}function rYA(t,e){if(t&1){let A=JA();m(0,"div",46),tA("click",function(n){let o=Z(A).$implicit,a=v(2).$implicit;return v(2).selectTool(o,a.node),X(n.stopPropagation())}),m(1,"mat-icon",47),K(2),w(),m(3,"span",48),K(4),w()()}if(t&2){let A=e.$implicit,i=v(4);p(2),qA(i.getToolIcon(A)),p(2),qA(A.name)}}function sYA(t,e){if(t&1&&(m(0,"div",38)(1,"div",44),Ut(2,rYA,5,2,"div",45,$JA),w()()),t&2){v();let A=Vs(3);p(2),Jt(A)}}function gYA(t,e){if(t&1){let A=JA();m(0,"div",39)(1,"button",49,2),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(3,"span",50),K(4,"+"),w()(),m(5,"mat-menu",null,3)(7,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(8,"mat-icon"),K(9,"psychology"),w(),m(10,"span"),K(11,"LLM Agent"),w()(),m(12,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(13,"mat-icon"),K(14,"more_horiz"),w(),m(15,"span"),K(16,"Sequential Agent"),w()(),m(17,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(18,"mat-icon"),K(19,"sync"),w(),m(20,"span"),K(21,"Loop Agent"),w()(),m(22,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(23,"mat-icon"),K(24,"density_medium"),w(),m(25,"span"),K(26,"Parallel Agent"),w()()()()}if(t&2){let A=An(6);p(),$("matMenuTriggerFor",A)}}function lYA(t,e){t&1&&GA(0,"handle",40)}function cYA(t,e){t&1&&GA(0,"handle",26)}function CYA(t,e){t&1&&GA(0,"handle",41)}function IYA(t,e){t&1&&GA(0,"handle",42)}function dYA(t,e){if(t&1){let A=JA();Ur(0)(1),ri(2,"async"),Ur(3),m(4,"div",31),tA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onCustomTemplateNodeClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onNodePointerDown(o.node,n))}),m(5,"div",32)(6,"div",33)(7,"mat-icon",34),K(8),w(),K(9),V(10,oYA,2,0,"span",35),w(),m(11,"div",36),V(12,aYA,3,0,"button",37),w()(),V(13,sYA,4,0,"div",38),V(14,gYA,27,1,"div",39),V(15,lYA,1,0,"handle",40),V(16,cYA,1,0,"handle",26),V(17,CYA,1,0,"handle",41),V(18,IYA,1,0,"handle",42),w()}if(t&2){let A=e.$implicit,i=v(2),n=A.node.data==null?null:A.node.data(),o=_g((n==null?null:n.name)||"root_agent"),a=Ci(2,17,i.toolsMap$);p(3);let s=_g(i.getToolsForNode(o,a)).length>0;p(),ne("custom-node_selected",i.isNodeSelected(A.node))("custom-node_has-tools",s)("in-group",A.node.parentId&&A.node.parentId()),p(4),qA(i.getAgentIcon(n==null?null:n.agent_class)),p(),Se(" ",o," "),p(),W(i.isRootAgent(o)?10:-1),p(2),W(i.isRootAgentForCurrentTab(o)?-1:12),p(),W(s?13:-1),p(),W(i.shouldShowAddButton(A.node)?14:-1),p(),W(i.shouldShowLeftHandle(A.node)?15:-1),p(),W(i.shouldShowTopHandle(A.node)?16:-1),p(),W(i.shouldShowRightHandle(A.node)?17:-1),p(),W(i.shouldShowBottomHandle(A.node)?18:-1)}}function BYA(t,e){if(t&1&&(m(0,"vflow",8),pt(1,nYA,10,14,"ng-template",19)(2,dYA,19,20,"ng-template",20),w()),t&2){let A=v();$("nodes",A.vflowNodes())("edges",A.edges())("background",Cu(4,ZJA))("snapGrid",Cu(5,XJA))}}function EYA(t,e){t&1&&(m(0,"div",9)(1,"div",51)(2,"mat-icon",52),K(3,"touch_app"),w(),m(4,"h4"),K(5,"Start Building Your ADK"),w(),m(6,"p"),K(7,"Drag components from the left panel to create your workflow"),w(),m(8,"div",53)(9,"div",54)(10,"mat-icon"),K(11,"drag_indicator"),w(),m(12,"span"),K(13,"Drag to move nodes"),w()(),m(14,"div",54)(15,"mat-icon"),K(16,"link"),w(),m(17,"span"),K(18,"Shift + Click to connect nodes"),w()()()()())}var jh=class t{constructor(e,A,i){this.dialog=e;this.agentService=A;this.router=i;this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.agentBuilderService.getSelectedTool().subscribe(n=>{this.selectedTool=n})}_snackBar=h(J2);canvasRef;svgCanvasRef;agentBuilderService=h(Q0);cdr=h(Dt);showSidePanel=!0;showBuilderAssistant=!1;appNameInput="";toggleSidePanelRequest=new $A;builderAssistantCloseRequest=new $A;ctx;connections=jA([]);nodeId=1;edgeId=1;callbackId=1;toolId=1;appName="";nodes=jA([]);edges=jA([]);workflowShellWidth=340;workflowGroupWidth=420;workflowGroupHeight=220;workflowGroupYOffset=180;workflowGroupXOffset=-40;workflowInnerNodePoint={x:40,y:80};groupNodes=jA([]);vflowNodes=Ue(()=>[...this.groupNodes(),...this.nodes()]);selectedAgents=[];selectedTool;selectedCallback;currentAgentTool=jA(null);agentToolBoards=jA(new Map);isAgentToolMode=!1;navigationStack=[];existingAgent=void 0;toolsMap$;nodePositions=new Map;ngOnInit(){this.agentService.getApp().subscribe(e=>{e&&(this.appName=e)}),this.appNameInput&&(this.appName=this.appNameInput),this.agentBuilderService.getNewTabRequest().subscribe(e=>{if(e){let{tabName:A,currentAgentName:i}=e;this.switchToAgentToolBoard(A,i)}}),this.agentBuilderService.getTabDeletionRequest().subscribe(e=>{e&&this.deleteAgentToolBoard(e)}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{if(e){let A=this.nodes().find(i=>i.data?i.data().name===e.agentName:void 0);if(A&&A.data){let i=A.data();i.callbacks=e.callbacks,A.data.set(i)}}}),this.agentBuilderService.getDeleteSubAgentSubject().subscribe(e=>{e&&this.openDeleteSubAgentDialog(e)}),this.agentBuilderService.getAddSubAgentSubject().subscribe(e=>{e.parentAgentName&&this.addSubAgent(e.parentAgentName,e.agentClass,e.isFromEmptyGroup)}),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.selectedAgents=this.nodes().filter(A=>A.data&&A.data().name===e?.name)}),this.toolsMap$.subscribe(e=>{this.nodes().some(i=>i.parentId&&i.parentId())&&this.groupNodes().length>0&&this.updateGroupDimensions()})}ngOnChanges(e){e.appNameInput&&e.appNameInput.currentValue&&(this.appName=e.appNameInput.currentValue)}ngAfterViewInit(){}onCustomTemplateNodeClick(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!0})}onNodePointerDown(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!1})}onGroupClick(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!0})}onGroupPointerDown(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!1})}onCanvasClick(e){let A=e.target;if(!A)return;let i=[".custom-node",".action-button-bar",".add-subagent-btn",".open-panel-btn",".agent-tool-banner",".mat-mdc-menu-panel"];A.closest(i.join(","))||this.clearCanvasSelection()}shouldIgnoreNodeInteraction(e){return e?!!e.closest("mat-chip, .add-subagent-btn, .mat-mdc-menu-panel"):!1}selectAgentNode(e,A={}){if(!e?.data)return;let i=this.agentBuilderService.getNode(e.data().name);i&&(this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedNode(i),this.nodePositions.set(i.name,cA({},e.point())),A.openConfig&&this.agentBuilderService.requestSideTabChange("config"))}handleAgentTypeSelection(e,A,i,n,o=!1){n.stopPropagation(),i?.closeMenu(),this.onAgentTypeSelected(e,A,o)}clearCanvasSelection(){!this.selectedAgents.length&&!this.selectedTool&&!this.selectedCallback||(this.selectedAgents=[],this.selectedTool=void 0,this.selectedCallback=void 0,this.agentBuilderService.setSelectedNode(void 0),this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedCallback(void 0),this.cdr.markForCheck())}onAddResource(e){}onAgentTypeSelected(e,A,i=!1){A&&this.addSubAgent(A,e,i)}generateNodeId(){return this.nodeId+=1,this.nodeId.toString()}generateEdgeId(){return this.edgeId+=1,this.edgeId.toString()}createNode(e,A,i){let n=jA(e),a={id:this.generateNodeId(),point:jA(cA({},A)),type:"html-template",data:n};return i&&(a.parentId=jA(i)),this.nodePositions.set(e.name,cA({},a.point())),a}createWorkflowGroup(e,A,i,n,o,a){let r,s=null;if(n){let d=(o||this.groupNodes()).find(B=>B.id===n);if(d){let B=d.point(),E=d.height?d.height():this.workflowGroupHeight;if(a&&o){let Q=a.filter(f=>f.parentId&&f.parentId()===d.id);if(Q.length>0){let U=0;for(let J of Q){let j=J.data?J.data():void 0,AA=120;j&&j.tools&&j.tools.length>0&&(AA+=20+j.tools.length*36),U=Math.max(U,AA)}E=Math.max(220,80+U+40)}}r={x:B.x,y:B.y+E+60},s=null}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset}}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset};let g=this.generateNodeId(),l={id:g,point:jA(r),type:"template-group",data:jA(e),parentId:jA(s),width:jA(this.workflowGroupWidth),height:jA(this.workflowGroupHeight)},C=e.agent_class==="SequentialAgent"?{id:this.generateEdgeId(),source:A.id,sourceHandle:"source-bottom",target:g,targetHandle:"target-top"}:null;return{groupNode:l,edge:C}}calculateWorkflowChildPosition(e,A){let r=(A-20)/2;return{x:45+e*428,y:r}}createAgentNodeWithGroup(e,A,i,n,o){let a=this.createNode(e,A,i),r=null,s=null;if(this.isWorkflowAgent(e.agent_class)){let g=this.createWorkflowGroup(e,a,A,i,n,o);r=g.groupNode,s=g.edge}return{shellNode:a,groupNode:r,groupEdge:s}}createWorkflowChildEdge(e,A){return this.createWorkflowChildEdgeFromArrays(e,A,this.nodes(),this.groupNodes())}createWorkflowChildEdgeFromArrays(e,A,i,n){if(!A)return null;let o=n.find(r=>r.id===A);if(!o||!o.data)return null;let a=o.data().agent_class;if(a==="LoopAgent"||a==="ParallelAgent"){let r=i.find(s=>s.data&&s.data().name===o.data().name);if(r)return{id:this.generateEdgeId(),source:r.id,sourceHandle:"source-bottom",target:e.id,targetHandle:"target-top"}}if(a==="SequentialAgent"){let r=i.filter(l=>l.parentId&&l.parentId()===A);if(r.length===0)return null;r.sort((l,C)=>l.point().x-C.point().x);let s=r.findIndex(l=>l.id===e.id);if(s<=0)return null;let g=r[s-1];return{id:this.generateEdgeId(),source:g.id,sourceHandle:"source-right",target:e.id,targetHandle:"target-left"}}return null}isWorkflowAgent(e){return e?e==="SequentialAgent"||e==="ParallelAgent"||e==="LoopAgent":!1}addSubAgent(e,A="LlmAgent",i=!1){let n=this.nodes().find(C=>C.data&&C.data().name===e);if(!n||!n.data)return;let a={name:this.agentBuilderService.getNextSubAgentName(),agent_class:A,model:"gemini-2.5-flash",instruction:"You are a sub-agent that performs specialized tasks.",isRoot:!1,sub_agents:[],tools:[]},r=this.isWorkflowAgent(n.data().agent_class),s=n.parentId&&n.parentId()&&this.groupNodes().some(C=>C.id===n.parentId()),g,l=null;if(i&&r){let C=n.data();if(!C)return;let I=this.groupNodes().find(b=>b.data&&b.data()?.name===C.name);if(!I){console.error("Could not find group for workflow node");return}let d=this.agentBuilderService.getNode(n.data().name);if(!d){console.error("Could not find clicked agent data");return}let B=d.sub_agents.length,E=I.height?I.height():this.workflowGroupHeight,Q=this.calculateWorkflowChildPosition(B,E),f=this.createAgentNodeWithGroup(a,Q,I.id);g=f.shellNode,l=f.groupNode,d.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),f.groupEdge&&this.edges.set([...this.edges(),f.groupEdge])}else if(s){let C=n.parentId()??void 0,I=this.groupNodes().find(S=>S.id===C);if(!I||!I.data){console.error("Could not find parent group node");return}let d=I.data().name,B=this.agentBuilderService.getNode(d);if(!B){console.error("Could not find workflow parent agent");return}let E=B.sub_agents.length,Q=I.height?I.height():this.workflowGroupHeight,f=this.calculateWorkflowChildPosition(E,Q),b=this.createAgentNodeWithGroup(a,f,C);g=b.shellNode,l=b.groupNode,B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),b.groupEdge&&this.edges.set([...this.edges(),b.groupEdge])}else{let C=n.data().sub_agents.length,I={x:n.point().x+C*400,y:n.point().y+300},d=this.createAgentNodeWithGroup(a,I);g=d.shellNode,l=d.groupNode;let B=this.agentBuilderService.getNode(n.data().name);B&&B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),d.groupEdge&&this.edges.set([...this.edges(),d.groupEdge])}if(this.agentBuilderService.addNode(a),this.nodes.set([...this.nodes(),g]),this.selectedAgents=[g],(s||r)&&this.updateGroupDimensions(),r||s){let C=g.parentId?g.parentId()??void 0:void 0,I=this.createWorkflowChildEdge(g,C);I&&this.edges.set([...this.edges(),I])}else{let C={id:this.generateEdgeId(),source:n.id,sourceHandle:"source-bottom",target:g.id,targetHandle:"target-top"};this.edges.set([...this.edges(),C])}this.agentBuilderService.setSelectedNode(a),this.agentBuilderService.requestSideTabChange("config")}addTool(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i=A.data();if(!i)return;this.dialog.open(W2,{width:"500px"}).afterClosed().subscribe(o=>{if(o)if(o.toolType==="Agent Tool")this.createAgentTool(i.name);else{let a={toolType:o.toolType,name:o.name};this.agentBuilderService.addTool(i.name,a),this.agentBuilderService.setSelectedTool(a)}})}addCallback(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i={name:`callback_${this.callbackId}`,type:"before_agent",code:`def callback_function(callback_context): - # Add your callback logic here - return None`,description:"Auto-generated callback"};this.callbackId++;let n=this.agentBuilderService.addCallback(A.data().name,i);n.success||this._snackBar.open(n.error||"Failed to add callback","Close",{duration:3e3,panelClass:["error-snackbar"]})}createAgentTool(e){this.dialog.open(Vc,{width:"750px",height:"310px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name"}}).afterClosed().subscribe(i=>{i&&typeof i=="string"&&this.agentBuilderService.requestNewTab(i,e)})}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(Vc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{a==="confirm"&&this.deleteToolWithoutDialog(e,A)})}deleteToolWithoutDialog(e,A){if(A.toolType==="Agent Tool"){let i=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,i)}else this.agentBuilderService.deleteTool(e,A)}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}deleteCallback(e,A){this.dialog.open(Vc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success||this._snackBar.open(o.error||"Failed to delete callback","Close",{duration:3e3,panelClass:["error-snackbar"]}),this.cdr.detectChanges()}})}openDeleteSubAgentDialog(e){this.dialog.open(Vc,{data:{title:"Delete sub agent",message:`Are you sure you want to delete ${e}? This will also delete all the underlying sub agents and tools.`,confirmButtonText:"Delete"}}).afterClosed().subscribe(i=>{i==="confirm"&&this.deleteSubAgent(e)})}deleteSubAgent(e){let A=this.agentBuilderService.getNode(e);if(!A)return;let i=this.agentBuilderService.getParentNode(this.agentBuilderService.getRootNode(),A,void 0,this.agentToolBoards());i&&(this.deleteSubAgentHelper(A,i),this.agentBuilderService.getSelectedNode().pipe(oo(1),Ze(n=>!!n)).subscribe(n=>{this.agentBuilderService.getNodes().includes(n)||this.agentBuilderService.setSelectedNode(i)}))}isNodeInSequentialWorkflow(e){if(!e.parentId||!e.parentId())return!1;let A=e.parentId(),i=this.groupNodes().find(n=>n.id===A);return!i||!i.data?!1:i.data().agent_class==="SequentialAgent"}getSequentialSiblings(e){if(!e.parentId||!e.parentId())return{previous:void 0,next:void 0};let A=e.parentId(),i=this.nodes().filter(o=>o.parentId&&o.parentId()===A);i.sort((o,a)=>o.point().x-a.point().x);let n=i.findIndex(o=>o.id===e.id);return n===-1?{previous:void 0,next:void 0}:{previous:n>0?i[n-1]:void 0,next:nn.data&&n.data().name===e.name);if(i){let n=this.isNodeInSequentialWorkflow(i),o,a;if(n){let s=this.getSequentialSiblings(i);o=s.previous,a=s.next}this.nodes.set(this.nodes().filter(s=>s.id!==i.id));let r=this.groupNodes().find(s=>s.data&&s.data().name===e.name);if(r){this.groupNodes.set(this.groupNodes().filter(g=>g.id!==r.id));let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id&&g.target!==r.id&&g.source!==r.id);this.edges.set(s)}else{let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id);this.edges.set(s)}if(n&&o&&a){let s={id:this.generateEdgeId(),source:o.id,sourceHandle:"source-right",target:a.id,targetHandle:"target-left"};this.edges.set([...this.edges(),s])}}this.nodePositions.delete(e.name),A.sub_agents=A.sub_agents.filter(n=>n.name!==e.name),this.agentBuilderService.deleteNode(e),i&&i.parentId&&i.parentId()&&this.updateGroupDimensions()}selectTool(e,A){if(e.toolType==="Agent Tool"){let i=e.name;this.switchToAgentToolBoard(i);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.editTool(e,i)}return}if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedTool(e)}editTool(e,A){let i;e.toolType==="Built-in tool"?i=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):i=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),i.afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=A.tools?.findIndex(a=>a.name===e.name);o!==void 0&&o!==-1&&A.tools&&(A.tools[o].name=n.name,n.args&&(A.tools[o].args=n.args),this.agentBuilderService.setAgentTools(A.name,A.tools))}})}selectCallback(e,A){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedCallback(e)}openToolsTab(e){if(e.data){let A=this.agentBuilderService.getNode(e.data().name);A&&this.agentBuilderService.setSelectedNode(A)}this.agentBuilderService.requestSideTabChange("tools")}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this._snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuild(i).subscribe(o=>{o?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this._snackBar.open("Something went wrong, please try again","OK")})}isRootAgent(e){let A=this.agentBuilderService.getRootNode();return A?A.name===e:!1}isRootAgentForCurrentTab(e){return this.isAgentToolMode&&this.currentAgentTool()?e===this.currentAgentTool():this.isRootAgent(e)}shouldShowHorizontalHandle(e,A){if(!e.parentId||!e.parentId())return!1;let i=e.parentId(),n=this.groupNodes().find(s=>s.id===i);if(!n||!n.data||n.data().agent_class!=="SequentialAgent")return!1;let a=this.nodes().filter(s=>s.parentId&&s.parentId()===i);if(a.length<=1)return!1;a.sort((s,g)=>s.point().x-g.point().x);let r=a.findIndex(s=>s.id===e.id);return A==="left"?r>0:r0):!1}shouldShowTopHandle(e){let A=e.data?e.data():void 0,i=A?.name,n=i?this.isRootAgent(i):!1;if(e.type==="template-group")return A?.agent_class==="SequentialAgent";if(n)return!1;if(e.parentId&&e.parentId()){let a=e.parentId(),r=this.groupNodes().find(s=>s.id===a);if(r&&r.data){let s=r.data().agent_class;if(s==="LoopAgent"||s==="ParallelAgent")return!0}return!1}return!0}getToolsForNode(e,A){return!e||!A?[]:A.get(e)??[]}loadFromYaml(e,A){try{let i=yE(e);this.agentBuilderService.clear(),this.nodePositions.clear(),this.agentToolBoards.set(new Map),this.agentBuilderService.setAgentToolBoards(new Map),this.currentAgentTool.set(null),this.isAgentToolMode=!1,this.navigationStack=[];let n=Ge(cA({name:i.name||"root_agent",agent_class:i.agent_class||"LlmAgent",model:i.model||"gemini-2.5-flash",instruction:i.instruction||"",description:i.description||""},i.max_iterations&&{max_iterations:i.max_iterations}),{isRoot:!0,sub_agents:i.sub_agents||[],tools:this.parseToolsFromYaml(i.tools||[]),callbacks:this.parseCallbacksFromYaml(i)});this.agentBuilderService.addNode(n),this.agentBuilderService.setSelectedNode(n),this.processAgentToolsFromYaml(n.tools||[],A),this.loadAgentBoard(n)}catch(i){console.error("Error parsing YAML:",i)}}parseToolsFromYaml(e){return e.map(A=>{let i={name:A.name,toolType:this.determineToolType(A),toolAgentName:A.name};if(A.name==="AgentTool"&&A.args&&A.args.agent&&A.args.agent.config_path){i.toolType="Agent Tool";let o=A.args.agent.config_path.replace("./","").replace(".yaml","");i.name=o,i.toolAgentName=o,i.args=A.args}else A.args&&(i.args=A.args);return i})}parseCallbacksFromYaml(e){let A=[];return Object.keys(e).forEach(i=>{if(i.endsWith("_callback")&&Array.isArray(e[i])){let n=i.replace("_callback","");e[i].forEach(o=>{o.name&&A.push({name:o.name,type:n})})}}),A}determineToolType(e){return e.name==="AgentTool"&&e.args&&e.args.agent?"Agent Tool":e.name&&e.name.includes(".")&&e.args?"Custom tool":e.name&&e.name.includes(".")&&!e.args?"Function tool":"Built-in tool"}processAgentToolsFromYaml(e,A){let i=e.filter(n=>n.toolType==="Agent Tool");for(let n of i)this.agentToolBoards().has(n.name)||this.loadAgentToolConfiguration(n,A)}loadAgentToolConfiguration(e,A){let i=e.name;this.agentService.getSubAgentBuilder(A,`${i}.yaml`).subscribe({next:n=>{if(n)try{let o=yE(n),a=Ge(cA({name:o.name||i,agent_class:o.agent_class||"LlmAgent",model:o.model||"gemini-2.5-flash",instruction:o.instruction||`You are the ${i} agent that can be used as a tool by other agents.`,description:o.description||""},o.max_iterations&&{max_iterations:o.max_iterations}),{isRoot:!1,sub_agents:o.sub_agents||[],tools:this.parseToolsFromYaml(o.tools||[]),callbacks:this.parseCallbacksFromYaml(o),isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization}),r=this.agentToolBoards();if(r.set(i,a),this.agentToolBoards.set(r),this.agentBuilderService.setAgentToolBoards(r),this.agentBuilderService.addNode(a),this.processAgentToolsFromYaml(a.tools||[],A),a.sub_agents&&a.sub_agents.length>0)for(let s of a.sub_agents)s.config_path&&this.agentService.getSubAgentBuilder(A,s.config_path).subscribe(g=>{if(g){let l=yE(g);this.processAgentToolsFromYaml(this.parseToolsFromYaml(l.tools||[]),A)}})}catch(o){console.error(`Error parsing YAML for agent tool ${i}:`,o),this.createDefaultAgentToolConfiguration(e)}else this.createDefaultAgentToolConfiguration(e)},error:n=>{console.error(`Error loading agent tool configuration for ${i}:`,n),this.createDefaultAgentToolConfiguration(e)}})}createDefaultAgentToolConfiguration(e){let A=e.name,i={name:A,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${A} agent that can be used as a tool by other agents.`,isRoot:!1,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization},n=this.agentToolBoards();n.set(A,i),this.agentToolBoards.set(n),this.agentBuilderService.setAgentToolBoards(n),this.agentBuilderService.addNode(i)}loadAgentTools(e){e.tools?(e.tools=e.tools.filter(A=>A.name&&A.name.trim()!==""),e.tools.forEach(A=>{A.toolType!=="Agent Tool"&&(A.name.includes(".")&&A.args?A.toolType="Custom tool":A.name.includes(".")&&!A.args?A.toolType="Function tool":A.toolType="Built-in tool")})):e.tools=[]}isNodeSelected(e){return this.selectedAgents.includes(e)}isGroupSelected(e){if(!e.data)return!1;let A=e.data().name,i=this.nodes().find(n=>n.data&&n.data().name===A);return i?this.isNodeSelected(i):!1}loadSubAgents(e,A){return nt(this,null,function*(){let i=[{node:A,depth:1,index:1,parentShellId:void 0,parentAgent:void 0,parentGroupId:void 0}],n=[],o=[],a=[];for(;i.length>0;){let{node:r,depth:s,index:g,parentShellId:l,parentAgent:C,parentGroupId:I}=i.shift(),d=r;if(r.config_path)try{let M=yield sU(this.agentService.getSubAgentBuilder(e,r.config_path));d=yE(M),d.tools&&(d.tools=this.parseToolsFromYaml(d.tools||[])),this.processAgentToolsFromYaml(d.tools||[],e)}catch(M){console.error(`Failed to load agent from ${r.config_path}`,M);continue}if(C&&C.sub_agents){let M=C.sub_agents.indexOf(r);M!==-1&&(C.sub_agents[M]=d,this.agentBuilderService.addNode(C))}this.agentBuilderService.addNode(d);let B=this.nodePositions.get(d.name),E=this.isWorkflowAgent(d.agent_class),Q=C?this.isWorkflowAgent(C.agent_class):!1,f,b,S=null;if(Q&&!d.isRoot){let M=C?.sub_agents.indexOf(d)??g,D=o.find(U=>U.id===I),F=D?.height?D.height():this.workflowGroupHeight;f=B??this.calculateWorkflowChildPosition(M,F);let _=this.createAgentNodeWithGroup(d,f,I??void 0,o,n);b=_.shellNode,S=_.groupNode,n.push(b),S&&o.push(S),_.groupEdge&&a.push(_.groupEdge)}else{if(B)f=B;else if(!l)f={x:100,y:150};else{let D=n.find(F=>F.id===l);D?f={x:D.point().x+(g-1)*400,y:D.point().y+300}:f={x:100,y:s*150+50}}let M=this.createAgentNodeWithGroup(d,f,void 0,o,n);b=M.shellNode,S=M.groupNode,n.push(b),E&&!d.isRoot&&(S&&o.push(S),M.groupEdge&&a.push(M.groupEdge))}if(l)if(I){let M=this.createWorkflowChildEdgeFromArrays(b,I,n,o);M&&a.push(M)}else{let M={id:this.generateEdgeId(),source:l,sourceHandle:"source-bottom",target:b.id,targetHandle:"target-top"};a.push(M)}if(d.sub_agents&&d.sub_agents.length>0){let M=1,D=E&&S?S.id:I;for(let F of d.sub_agents)i.push({node:F,parentShellId:b.id,depth:s+1,index:M,parentAgent:d,parentGroupId:D}),M++}}this.nodes.set(n),this.groupNodes.set(o),this.edges.set(a),this.updateGroupDimensions()})}switchToAgentToolBoard(e,A){let i=this.currentAgentTool()||"main";i!==e&&this.navigationStack.push(i);let n=this.agentToolBoards(),o=n.get(e);if(!o){o={isRoot:!1,name:e,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${e} agent that can be used as a tool by other agents.`,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!1};let a=new Map(n);a.set(e,o),this.agentToolBoards.set(a),this.agentBuilderService.setAgentToolBoards(a),A?this.addAgentToolToAgent(e,A):this.addAgentToolToRoot(e)}this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(o),this.agentBuilderService.setSelectedNode(o),this.agentBuilderService.requestSideTabChange("config")}backToMainCanvas(){if(this.navigationStack.length>0){let e=this.navigationStack.pop();if(e==="main"){this.currentAgentTool.set(null),this.isAgentToolMode=!1;let A=this.agentBuilderService.getRootNode();A&&(this.loadAgentBoard(A),this.agentBuilderService.setSelectedNode(A),this.agentBuilderService.requestSideTabChange("config"))}else{let i=this.agentToolBoards().get(e);i&&(this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(i),this.agentBuilderService.setSelectedNode(i),this.agentBuilderService.requestSideTabChange("config"))}}else{this.currentAgentTool.set(null),this.isAgentToolMode=!1;let e=this.agentBuilderService.getRootNode();e&&(this.loadAgentBoard(e),this.agentBuilderService.setSelectedNode(e),this.agentBuilderService.requestSideTabChange("config"))}}loadAgentBoard(e){return nt(this,null,function*(){if(this.captureCurrentNodePositions(),this.nodes.set([]),this.groupNodes.set([]),this.edges.set([]),this.nodeId=0,this.edgeId=0,this.loadAgentTools(e),this.agentBuilderService.addNode(e),e.tools&&e.tools.length>0?this.agentBuilderService.setAgentTools(e.name,e.tools):this.agentBuilderService.setAgentTools(e.name,[]),e.sub_agents&&e.sub_agents.length>0)yield this.loadSubAgents(this.appName,e);else{let A=this.nodePositions.get(e.name)??{x:100,y:150},i=this.createNode(e,A);if(this.nodes.set([i]),this.isWorkflowAgent(e.agent_class)){let{groupNode:n,edge:o}=this.createWorkflowGroup(e,i,A);this.groupNodes.set([n]),o&&this.edges.set([o])}}this.agentBuilderService.setSelectedNode(e)})}addAgentToolToAgent(e,A){let i=this.agentBuilderService.getNode(A);if(i){if(i.tools&&i.tools.some(o=>o.name===e))return;let n={name:e,toolType:"Agent Tool",toolAgentName:e};i.tools||(i.tools=[]),i.tools.push(n),i.tools=i.tools.filter(o=>o.name&&o.name.trim()!==""),this.agentBuilderService.setAgentTools(A,i.tools)}}addAgentToolToRoot(e){let A=this.agentBuilderService.getRootNode();if(A){if(A.tools&&A.tools.some(n=>n.name===e))return;let i={name:e,toolType:"Agent Tool",toolAgentName:e};A.tools||(A.tools=[]),A.tools.push(i),this.agentBuilderService.setAgentTools("root_agent",A.tools)}}deleteAgentToolBoard(e){let A=this.agentToolBoards(),i=new Map(A);i.delete(e),this.agentToolBoards.set(i),this.agentBuilderService.setAgentToolBoards(i);let n=this.agentBuilderService.getNodes();for(let o of n)o.tools&&(o.tools=o.tools.filter(a=>!(a.toolType==="Agent Tool"&&(a.toolAgentName===e||a.name===e))),this.agentBuilderService.setAgentTools(o.name,o.tools));this.navigationStack=this.navigationStack.filter(o=>o!==e),this.currentAgentTool()===e&&this.backToMainCanvas()}getBackButtonTooltip(){if(this.navigationStack.length>0){let e=this.navigationStack[this.navigationStack.length-1];return e==="main"?"Back to Main Canvas":`Back to ${e}`}return"Back to Main Canvas"}onBuilderAssistantClose(){this.builderAssistantCloseRequest.emit()}reloadCanvasFromYaml(){this.appNameInput&&this.agentService.getAgentBuilderTmp(this.appNameInput).subscribe({next:e=>{e&&this.loadFromYaml(e,this.appNameInput)},error:e=>{console.error("Error reloading canvas:",e)}})}captureCurrentNodePositions(){for(let e of this.nodes()){if(!e?.data)continue;let A=e.data();A&&this.nodePositions.set(A.name,cA({},e.point()))}}updateGroupDimensions(){for(let s of this.groupNodes()){if(!s.data)continue;let g=s.data().name,l=this.nodes().filter(f=>f.parentId&&f.parentId()===s.id);if(l.length===0){s.width&&s.width.set(480),s.height&&s.height.set(220);continue}l.sort((f,b)=>f.point().x-b.point().x),l.forEach((f,b)=>{let _={x:45+b*428,y:80};if(f.point.set(_),f.data){let U=f.data();U&&this.nodePositions.set(U.name,_)}});let C=1/0,I=1/0,d=-1/0,B=-1/0;for(let f of l){let b=f.point(),S=f.data?f.data():void 0,M=120;S&&S.tools&&S.tools.length>0&&(M+=20+S.tools.length*36),C=Math.min(C,b.x),I=Math.min(I,b.y),d=Math.max(d,b.x+340+68),B=Math.max(B,b.y+M)}let E=d-C+80,Q=B-I+80;s.width&&s.width.set(Math.max(480,E)),s.height&&s.height.set(Math.max(220,Q))}}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}isGroupEmpty(e){return!this.nodes().some(i=>i.parentId&&i.parentId()===e)}shouldShowAddButton(e){let A=e.data?e.data():void 0;if(!A)return!1;let i=this.isWorkflowAgent(A.agent_class),n=e.parentId&&e.parentId();if(i&&!n||!this.isNodeSelected(e))return!1;if(n&&e.parentId){let o=e.parentId(),a=this.nodes().filter(s=>s.parentId&&s.parentId()===o);if(a.length===0)return!0;let r=a.reduce((s,g)=>g.point().x>s.point().x?g:s,a[0]);return e.id===r.id}return!0}static \u0275fac=function(A){return new(A||t)(at(Gs),at(Kh),at(Cs))};static \u0275cmp=kA({type:t,selectors:[["app-canvas"]],viewQuery:function(A,i){if(A&1&&ai(VJA,5)(WJA,5),A&2){let n;ce(n=Ce())&&(i.canvasRef=n.first),ce(n=Ce())&&(i.svgCanvasRef=n.first)}},inputs:{showSidePanel:"showSidePanel",showBuilderAssistant:"showBuilderAssistant",appNameInput:"appNameInput"},outputs:{toggleSidePanelRequest:"toggleSidePanelRequest",builderAssistantCloseRequest:"builderAssistantCloseRequest"},features:[ti],decls:7,vars:8,consts:[["emptyGroupMenuTrigger","matMenuTrigger"],["emptyGroupMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["agentMenu","matMenu"],[1,"canvas-container"],[1,"canvas-workspace",3,"click"],[1,"agent-tool-banner"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn"],["view","auto",3,"nodes","edges","background","snapGrid"],[1,"canvas-instructions"],[3,"closePanel","reloadCanvas","isVisible","appName"],[1,"banner-content"],["mat-icon-button","",1,"back-to-main-btn",3,"click","matTooltip"],[1,"banner-info"],[1,"material-symbols-outlined","banner-icon"],[1,"banner-text"],[1,"agent-tool-name"],[1,"banner-subtitle"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn",3,"click"],["groupNode",""],["nodeHtml",""],["selectable","","rx","12","ry","12",3,"click","pointerdown"],["x","12","y","12"],[1,"workflow-group-chip"],[1,"workflow-chip-icon"],[1,"workflow-chip-label"],["type","target","position","top","id","target-top"],[1,"empty-group-placeholder",3,"click"],["mat-icon-button","","matTooltip","Add sub-agent","aria-label","Add sub-agent",3,"click","matMenuTriggerFor"],[1,"empty-group-label"],["mat-menu-item","",3,"click"],["selectable","",1,"custom-node",3,"click","pointerdown"],[1,"node-title-wrapper"],[1,"node-title"],[2,"margin-right","5px"],[1,"node-badge"],[1,"action-button-bar"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn"],[1,"tools-container"],[1,"add-subagent-container"],["type","target","position","left","id","target-left"],["type","source","position","right","id","source-right"],["type","source","position","bottom","id","source-bottom"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn",3,"click"],[1,"tools-list"],[1,"tool-item"],[1,"tool-item",3,"click"],[1,"tool-item-icon"],[1,"tool-item-name"],["matIconButton","","matTooltip","Add sub-agent","aria-label","Add sub-agent",1,"add-subagent-btn",3,"click","matMenuTriggerFor"],[1,"add-subagent-symbol"],[1,"instruction-content"],[1,"instruction-icon"],[1,"instruction-tips"],[1,"tip"]],template:function(A,i){A&1&&(m(0,"div",4)(1,"div",5),tA("click",function(o){return i.onCanvasClick(o)}),V(2,AYA,13,2,"div",6),V(3,eYA,2,0,"span",7),V(4,BYA,3,6,"vflow",8),V(5,EYA,19,0,"div",9),w(),m(6,"app-builder-assistant",10),tA("closePanel",function(){return i.onBuilderAssistantClose()})("reloadCanvas",function(){return i.reloadCanvasFromYaml()}),w()()),A&2&&(p(),ne("has-banner",i.currentAgentTool()),p(),W(i.currentAgentTool()?2:-1),p(),W(i.showSidePanel?-1:3),p(),W(i.vflowNodes().length>0?4:-1),p(),W(i.vflowNodes().length===0?5:-1),p(),$("isVisible",i.showBuilderAssistant)("appName",i.appName))},dependencies:[JsA,cK,YsA,E7,Q7,Fn,xa,AC,C2,_h,Lv,ls],styles:['[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;flex:1;min-height:0}.canvas-container[_ngcontent-%COMP%]{width:100%;height:100%;background:var(--builder-canvas-container-background);display:flex;flex-direction:column;border-radius:8px;overflow:hidden;box-shadow:var(--builder-canvas-shadow);flex:1;min-height:0;position:relative}.canvas-header[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:16px 24px;border-bottom:2px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;background:var(--builder-canvas-header-title-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.canvas-controls[_ngcontent-%COMP%]{display:flex;gap:8px}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:var(--builder-button-background-color);border:1px solid var(--builder-button-border-color);color:var(--builder-button-text-color);transition:all .3s ease}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--builder-button-hover-background-color);border-color:var(--builder-button-hover-border-color);transform:translateY(-1px)}.canvas-workspace[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;background-color:var(--builder-canvas-workspace-background);min-height:0;width:100%;height:100%}.agent-tool-banner[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;z-index:1000;background:linear-gradient(135deg,#1e3a8a,#3b82f6);border-bottom:2px solid rgba(59,130,246,.3);box-shadow:0 4px 16px #0000004d}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%]{padding:12px 20px;display:flex;align-items:center;gap:16px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);transition:all .2s ease}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]:hover{background:#fff3;transform:scale(1.05)}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px;color:#ffffffe6}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .agent-tool-name[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;line-height:1.2}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .banner-subtitle[_ngcontent-%COMP%]{margin:0;color:#fffc;font-size:12px;font-weight:400;line-height:1}.canvas-workspace[_ngcontent-%COMP%]:has(.agent-tool-banner) vflow[_ngcontent-%COMP%]{padding-top:68px}.canvas-workspace.has-banner[_ngcontent-%COMP%] vflow{padding-top:68px!important} vflow{width:100%!important;height:100%!important;display:block!important} vflow .root-svg{background-color:var(--builder-canvas-workspace-background)!important;color:var(--builder-text-primary-color)!important;width:100%!important;height:100%!important;min-width:100%!important;min-height:100%!important}.diagram-canvas[_ngcontent-%COMP%]{display:block;width:100%;height:100%;cursor:crosshair;transition:cursor .2s ease;object-fit:contain;image-rendering:pixelated}.diagram-canvas[_ngcontent-%COMP%]:active{cursor:grabbing}.canvas-instructions[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:1}.instruction-content[_ngcontent-%COMP%]{background:var(--builder-canvas-instruction-background);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:2px solid var(--builder-canvas-instruction-border);border-radius:16px;padding:32px;box-shadow:var(--builder-canvas-shadow)}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--builder-button-text-color);margin-bottom:16px;animation:_ngcontent-%COMP%_pulse 2s infinite}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;font-weight:600;margin:0 0 12px;font-family:Google Sans,Helvetica Neue,sans-serif}.instruction-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 24px;line-height:1.5}.instruction-tips[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.tip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;color:var(--builder-accent-color);font-size:13px}.tip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.connection-mode-indicator[_ngcontent-%COMP%]{position:absolute;top:20px;left:50%;transform:translate(-50%);z-index:10;animation:_ngcontent-%COMP%_slideDown .3s ease-out}.connection-indicator-content[_ngcontent-%COMP%]{background:linear-gradient(135deg,#1b73e8,#4285f4);color:#fff;padding:12px 20px;border-radius:24px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #1b73e866;border:1px solid rgba(255,255,255,.2)}.connection-indicator-content[_ngcontent-%COMP%] .connection-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;animation:_ngcontent-%COMP%_pulse 1.5s infinite}.connection-indicator-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500;white-space:nowrap}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:#fff3;color:#fff;border:1px solid rgba(255,255,255,.3);width:32px;height:32px;min-width:32px}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:#ffffff4d;transform:scale(1.1)}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translate(-50%) translateY(-20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.canvas-footer[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:12px 24px;border-top:1px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.node-count[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--builder-text-secondary-color);font-size:13px;font-weight:500}.node-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--builder-accent-color)}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.canvas-workspace.drag-over[_ngcontent-%COMP%]{background:radial-gradient(circle at 20% 50%,rgba(66,133,244,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(52,168,83,.1) 0%,transparent 50%),radial-gradient(circle at 40% 80%,rgba(251,188,4,.1) 0%,transparent 50%),#131314}.canvas-workspace.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:2px dashed #00bbea;border-radius:8px;margin:16px;animation:_ngcontent-%COMP%_dashMove 1s linear infinite}@keyframes _ngcontent-%COMP%_dashMove{0%{border-color:#8ab4f84d}50%{border-color:#8ab4f8cc}to{border-color:#8ab4f84d}}@media(max-width:768px){.canvas-header[_ngcontent-%COMP%]{padding:12px 16px}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.instruction-content[_ngcontent-%COMP%]{padding:24px;margin:16px}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.canvas-footer[_ngcontent-%COMP%]{padding:8px 16px;flex-direction:column;gap:8px}}.custom-node[_ngcontent-%COMP%]{width:340px;background:var(--builder-canvas-node-background);border:1px solid var(--builder-canvas-node-border);border-radius:8px;align-items:center;position:relative;max-height:none;padding-bottom:0;overflow:visible}.custom-node[_ngcontent-%COMP%]:hover{border-color:var(--builder-canvas-node-hover-border)}.custom-node_selected[_ngcontent-%COMP%]{border:2px solid;border-color:var(--builder-accent-color)}.custom-node_selected[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{--mdc-chip-outline-color: var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%]:hover{border-color:var(--builder-accent-color)}[_nghost-%COMP%] .default-group-node{background-color:var(--builder-canvas-group-background)!important;border:2px solid var(--builder-canvas-group-border)!important}.node-title-wrapper[_ngcontent-%COMP%]{padding-top:12px;padding-bottom:12px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center}.node-title[_ngcontent-%COMP%]{padding-left:12px;padding-right:12px;display:flex;align-items:center;color:var(--builder-text-primary-color);font-weight:500}.node-badge[_ngcontent-%COMP%]{margin-left:8px;padding:2px 6px;border-radius:999px;background:var(--builder-canvas-node-badge-background);color:var(--builder-accent-color);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.tools-container[_ngcontent-%COMP%]{padding:8px 12px;border-top:1px solid var(--builder-border-color)}.tools-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:4px;cursor:pointer;transition:background-color .2s ease;color:var(--builder-text-primary-color)}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-item-hover-color)}.tool-item[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{font-size:22px;width:22px;height:22px;color:var(--builder-text-primary-color);flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-item-name[_ngcontent-%COMP%]{font-family:Google Sans,sans-serif;font-size:15px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-item.more-tools[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-style:italic}.tool-item.more-tools[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%]{border-bottom-color:var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%] .node-title[_ngcontent-%COMP%]{color:var(--builder-accent-color)}.tools-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callbacks-container[_ngcontent-%COMP%]{padding:12px 6px 12px 12px}.callbacks-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callback-type[_ngcontent-%COMP%]{font-size:11px;background:var(--builder-chip-background-color);color:var(--builder-accent-color);padding:2px 6px;border-radius:4px;margin-left:4px;font-weight:500}.add-callback-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-callback-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-callback-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.instruction-title[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px}.instructions[_ngcontent-%COMP%]{font-family:Google Sans;margin-bottom:10px}.agent-resources[_ngcontent-%COMP%]{padding:8px 12px}.empty-resource[_ngcontent-%COMP%]{margin-top:8px;color:var(--builder-text-secondary-color);margin-bottom:8px;display:flex;font-size:13px}.empty-resource[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:none}.action-button-bar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-right:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{background:none;color:var(--builder-text-secondary-color);border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;pointer-events:auto;border-radius:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.action-button-bar[_ngcontent-%COMP%] .delete-subagent-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color)}.add-tool-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-tool-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-tool-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.add-subagent-container[_ngcontent-%COMP%]{position:absolute;left:50%;bottom:-68px;transform:translate(-50%);display:flex;justify-content:center;pointer-events:none}.custom-node.in-group[_ngcontent-%COMP%] .add-subagent-container[_ngcontent-%COMP%]{left:auto;right:-68px;bottom:50%;transform:translateY(50%)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:50%;border:2px solid var(--builder-accent-color);background:var(--builder-canvas-add-btn-background);color:var(--builder-accent-color);display:flex;align-items:center;justify-content:center;padding:0;box-sizing:border-box;transition:transform .2s ease,box-shadow .2s ease,background .2s ease;pointer-events:auto}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%] .add-subagent-symbol[_ngcontent-%COMP%]{font-size:28px;line-height:1;font-weight:400}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05);box-shadow:var(--builder-canvas-add-btn-shadow);background:var(--builder-canvas-add-btn-hover-background)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:var(--builder-canvas-add-btn-shadow)}.open-panel-btn[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;color:var(--builder-text-tertiary-color);cursor:pointer;margin-left:20px;margin-top:20px;z-index:9999}.custom-node[_ngcontent-%COMP%]:hover .action-button-bar[_ngcontent-%COMP%], .custom-node.custom-node_selected[_ngcontent-%COMP%] .action-button-bar[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}[_nghost-%COMP%] div[nodehandlescontroller][noderesizecontroller].wrapper{height:0px!important;overflow:visible!important}[_nghost-%COMP%] foreignObject.selectable, [_nghost-%COMP%] foreignObject.selectable>div{overflow:visible!important}[_nghost-%COMP%] .interactive-edge{stroke:var(--builder-accent-color)!important;stroke-width:2!important}[_nghost-%COMP%] .default-handle{stroke:var(--builder-accent-color)!important;stroke-width:1!important;fill:var(--builder-canvas-handle-fill)!important}[_nghost-%COMP%] .reconnect-handle{stroke:var(--builder-accent-color)!important;stroke-width:2!important;fill:var(--builder-canvas-reconnect-handle-fill)!important}[_nghost-%COMP%] .workflow-group-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:var(--builder-canvas-workflow-chip-background);border:1px solid var(--builder-canvas-workflow-chip-border);border-radius:16px;color:var(--builder-accent-color);font-family:Google Sans,sans-serif;font-size:12px;font-weight:500;height:32px;box-sizing:border-box;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-icon{font-size:16px;width:16px;height:16px;line-height:16px}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-label{color:var(--builder-text-primary-color);font-weight:500;font-size:12px;line-height:1}[_nghost-%COMP%] .empty-group-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;border-radius:8px;text-align:center;background:var(--builder-canvas-empty-group-background);border:2px dashed var(--builder-canvas-empty-group-border);transition:all .3s ease}[_nghost-%COMP%] .empty-group-placeholder:hover{background:var(--builder-canvas-empty-group-hover-background);border-color:var(--builder-canvas-empty-group-hover-border)}[_nghost-%COMP%] .empty-group-placeholder button{border:2px solid var(--builder-accent-color);background-color:var(--builder-canvas-empty-group-btn-background);color:var(--builder-accent-color);width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease}[_nghost-%COMP%] .empty-group-placeholder button:hover{background-color:var(--builder-canvas-empty-group-btn-hover-background);transform:scale(1.1);box-shadow:var(--builder-canvas-add-btn-shadow)}[_nghost-%COMP%] .empty-group-placeholder button mat-icon{font-size:24px;width:24px;height:24px}[_nghost-%COMP%] .empty-group-placeholder .empty-group-label{font-size:13px;font-weight:500;color:var(--builder-text-secondary-color);font-family:Google Sans,sans-serif}']})};function QYA(t,e){t&1&&Di(0,"div",2)}var hYA=new yA("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var v7=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(Dt);_renderer=h(_i);_cleanupTransitionEnd;constructor(){let A=Nu(),i=h(hYA,{optional:!0});this._isNoopAnimation=A==="di-disabled",A==="reduced-motion"&&this._elementRef.nativeElement.classList.add("mat-progress-bar-reduced-motion"),i&&(i.color&&(this.color=this._defaultColor=i.color),this.mode=i.mode||this.mode)}_isNoopAnimation;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";get value(){return this._value}set value(A){this._value=TsA(A||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(A){this._bufferValue=TsA(A||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new $A;get mode(){return this._mode}set mode(A){this._mode=A,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=A=>{this.animationEnd.observers.length===0||!A.target||!A.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("aria-valuenow",n._isIndeterminate()?null:n.value)("mode",n.mode),Po("mat-"+n.color),ne("_mat-animation-noopable",n._isNoopAnimation)("mdc-linear-progress--animation-ready",!n._isNoopAnimation)("mdc-linear-progress--indeterminate",n._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",en],bufferValue:[2,"bufferValue","bufferValue",en],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(i,n){i&1&&(li(0,"div",0),Di(1,"div",1),V(2,QYA,1,0,"div",2),Ei(),li(3,"div",3),Di(4,"span",4),Ei(),li(5,"div",5),Di(6,"span",4),Ei()),i&2&&(p(),wn("flex-basis",n._getBufferBarFlexBasis()),p(),W(n.mode==="buffer"?2:-1),p(),wn("transform",n._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar{--mat-progress-bar-animation-multiplier: 1;display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mat-progress-bar-reduced-motion{--mat-progress-bar-animation-multiplier: 2}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mat-progress-bar-track-height, 4px),var(--mat-progress-bar-active-indicator-height, 4px))}@media(forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mat-progress-bar-track-height, 4px);border-radius:var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none))}.mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle, var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2), transparent 0);background-repeat:repeat-x;background-size:calc(calc(var(--mat-progress-bar-track-height, 4px) / 2)*5);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}} -`],encapsulation:2,changeDetection:0})}return t})();function TsA(t,e=0,A=100){return Math.max(e,Math.min(A,t))}var HsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var fYA=["determinateSpinner"];function mYA(t,e){if(t&1&&(Qt(),m(0,"svg",11),GA(1,"circle",12),w()),t&2){let A=v();ie("viewBox",A._viewBox()),p(),wn("stroke-dasharray",A._strokeCircumference(),"px")("stroke-dashoffset",A._strokeCircumference()/2,"px")("stroke-width",A._circleStrokeWidth(),"%"),ie("r",A._circleRadius())}}var pYA=new yA("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:zsA})}),zsA=100,wYA=10,B1=(()=>{class t{_elementRef=h(ge);_noopAnimations;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";_determinateCircle;constructor(){let A=h(pYA),i=Nu(),n=this._elementRef.nativeElement;this._noopAnimations=i==="di-disabled"&&!!A&&!A._forceAnimations,this.mode=n.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&i==="reduced-motion"&&n.classList.add("mat-progress-spinner-reduced-motion"),A&&(A.color&&(this.color=this._defaultColor=A.color),A.diameter&&(this.diameter=A.diameter),A.strokeWidth&&(this.strokeWidth=A.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(A){this._value=Math.max(0,Math.min(100,A||0))}_value=0;get diameter(){return this._diameter}set diameter(A){this._diameter=A||0}_diameter=zsA;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(A){this._strokeWidth=A||0}_strokeWidth;_circleRadius(){return(this.diameter-wYA)/2}_viewBox(){let A=this._circleRadius()*2+this.strokeWidth;return`0 0 ${A} ${A}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(i,n){if(i&1&&ai(fYA,5),i&2){let o;ce(o=Ce())&&(n._determinateCircle=o.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(i,n){i&2&&(ie("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",n.mode==="determinate"?n.value:null)("mode",n.mode),Po("mat-"+n.color),wn("width",n.diameter,"px")("height",n.diameter,"px")("--mat-progress-spinner-size",n.diameter+"px")("--mat-progress-spinner-active-indicator-width",n.diameter+"px"),ne("_mat-animation-noopable",n._noopAnimations)("mdc-circular-progress--indeterminate",n.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",en],diameter:[2,"diameter","diameter",en],strokeWidth:[2,"strokeWidth","strokeWidth",en]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(i,n){if(i&1&&(pt(0,mYA,2,8,"ng-template",null,0,w2),m(2,"div",2,1),Qt(),m(4,"svg",3),GA(5,"circle",4),w()(),as(),m(6,"div",5)(7,"div",6)(8,"div",7),on(9,8),w(),m(10,"div",9),on(11,8),w(),m(12,"div",10),on(13,8),w()()()),i&2){let o=An(1);p(4),ie("viewBox",n._viewBox()),p(),wn("stroke-dasharray",n._strokeCircumference(),"px")("stroke-dashoffset",n._strokeDashOffset(),"px")("stroke-width",n._circleStrokeWidth(),"%"),ie("r",n._circleRadius()),p(4),$("ngTemplateOutlet",o),p(2),$("ngTemplateOutlet",o),p(2),$("ngTemplateOutlet",o)}},dependencies:[sl],styles:[`.mat-mdc-progress-spinner{--mat-progress-spinner-animation-multiplier: 1;display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mat-progress-spinner-reduced-motion{--mat-progress-spinner-animation-multiplier: 1.25}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate calc(1568.2352941176ms*var(--mat-progress-spinner-animation-multiplier)) linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate calc(5332ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}} -`],encapsulation:2,changeDetection:0})}return t})();var OsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var b7=class t{constructor(e){this.sanitizer=e}set json(e){this.formattedJson=this.syntaxHighlight(e)}formattedJson="";syntaxHighlight(e){if(!e)return"";try{let A=JSON.parse(e);e=JSON.stringify(A,null,0)}catch{return this.sanitizer.bypassSecurityTrustHtml(this.escapeHtml(e))}return e=e.replace(/&/g,"&").replace(//g,">"),e=e.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,A=>{let i="json-number";return/^"/.test(A)?/:$/.test(A)?i="json-key":i="json-string":/true|false/.test(A)?i="json-boolean":/null/.test(A)&&(i="json-null"),''+A+""}),this.sanitizer.bypassSecurityTrustHtml(e)}escapeHtml(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}static \u0275fac=function(A){return new(A||t)(at($s))};static \u0275cmp=kA({type:t,selectors:[["app-json-tooltip"]],inputs:{json:"json"},decls:1,vars:1,consts:[[3,"innerHTML"]],template:function(A,i){A&1&&Di(0,"div",0),A&2&&vo("innerHTML",i.formattedJson,al)},styles:["[_nghost-%COMP%]{display:block;font-family:Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;max-width:800px}"]})};var M7=class t{json="";overlayRef=null;overlay=h(i8);elementRef=h(ge);show(){if(!this.json)return;let e=this.overlay.position().flexibleConnectedTo(this.elementRef).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8}]);this.overlayRef=this.overlay.create({positionStrategy:e,scrollStrategy:this.overlay.scrollStrategies.close(),panelClass:"json-tooltip-panel"});let A=new Jg(b7),i=this.overlayRef.attach(A);i.instance.json=this.json}hide(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}ngOnDestroy(){this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=OA({type:t,selectors:[["","appJsonTooltip",""]],hostBindings:function(A,i){A&1&&tA("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{json:[0,"appJsonTooltip","json"]}})};function yYA(t,e){if(t&1&&GA(0,"a2ui-surface",0),t&2){let A=v();$("surfaceId",A.surfaceId())("surface",A.surface())}}var k7=class t{processor=h(HU);beginRendering=null;surfaceUpdate=null;dataModelUpdate=null;surfaceId=jA(null);activeSurface=jA(null);surface=Ue(()=>this.activeSurface());constructor(){}ngOnChanges(e){let A=[],i=null;e.beginRendering&&this.beginRendering&&Object.keys(this.beginRendering).length>0&&(A.push(this.beginRendering),i=this.beginRendering?.beginRendering?.surfaceId??i),e.surfaceUpdate&&this.surfaceUpdate&&Object.keys(this.surfaceUpdate).length>0&&(A.push(this.surfaceUpdate),i=this.surfaceUpdate?.surfaceUpdate?.surfaceId??i),e.dataModelUpdate&&this.dataModelUpdate&&Object.keys(this.dataModelUpdate).length>0&&(A.push(this.dataModelUpdate),i=this.dataModelUpdate?.dataModelUpdate?.surfaceId??i),A.length>0&&this.processor.processMessages(A),i&&this.surfaceId.set(i);let n=this.surfaceId();if(n){let o=this.processor.getSurfaces();o.has(n)&&this.activeSurface.set(o.get(n))}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-a2ui-canvas"]],inputs:{beginRendering:"beginRendering",surfaceUpdate:"surfaceUpdate",dataModelUpdate:"dataModelUpdate"},features:[ti],decls:1,vars:1,consts:[[3,"surfaceId","surface"]],template:function(A,i){A&1&&V(0,yYA,1,2,"a2ui-surface",0),A&2&&W(i.surface()?0:-1)},dependencies:[ma,PU],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;overflow:auto}[_nghost-%COMP%] *{box-sizing:border-box}.canvas[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:16px;box-sizing:border-box;min-height:100%}"],changeDetection:0})};var S7=new yA("FeedbackService");var vYA={goodResponseTooltip:"Good response",badResponseTooltip:"Bad response",feedbackAdditionalLabel:"Additional feedback (Optional)",feedbackCommentPlaceholderDown:"Share what could be improved in the response",feedbackCommentPlaceholderUp:"Share what you liked about the response",feedbackCancelButton:"Cancel",feedbackSubmitButton:"Submit",feedbackDialogTitle:"Reasons for feedback (Select all that apply)",feedbackReasonHallucination:"Hallucinated libraries / APIs etc",feedbackReasonIncomplete:"Incomplete answer",feedbackReasonFollowup:"Didn't understand followup",feedbackReasonFactual:"Factual errors",feedbackReasonLinks:"Broken/incorrect links",feedbackReasonIrrelevant:"Irrelevant information",feedbackReasonRepetitive:"Repetitive",feedbackReasonAccurate:"Accurate info",feedbackReasonHelpful:"Helpful",feedbackReasonConcise:"Concise",feedbackReasonUnderstanding:"Good understanding",feedbackReasonClear:"Clear and easy to follow"},PsA=new yA("Message Feedback Messages",{factory:()=>vYA});function bYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up_filled"),w())}function MYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up"),w())}function kYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down_filled"),w())}function SYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down"),w())}function xYA(t,e){if(t&1&&(m(0,"mat-chip-option",7),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function RYA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",5)(2,"h3"),K(3),w(),m(4,"mat-chip-listbox",6),Ut(5,xYA,2,2,"mat-chip-option",7,Li),w()(),m(7,"div",8)(8,"h3"),K(9),w(),m(10,"mat-form-field",9)(11,"textarea",10),K(12," "),w()()(),m(13,"div",11)(14,"button",12),tA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackCancelled())}),K(15),w(),m(16,"button",13),tA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackSubmitted())}),K(17),w()()()}if(t&2){let A=v();p(3),qA(A.i18n.feedbackDialogTitle),p(),$("formControl",A.selectedReasons),p(),Jt(A.reasons()),p(4),qA(A.i18n.feedbackAdditionalLabel),p(2),$("formControl",A.comment)("placeholder",A.feedbackPlaceholder()),p(4),Se(" ",A.i18n.feedbackCancelButton," "),p(2),Se(" ",A.i18n.feedbackSubmitButton," ")}}var x7=class t{sessionName=rt.required();eventId=rt.required();i18n=h(PsA);feedbackService=h(S7);existingFeedback=C6({params:()=>({sessionName:this.sessionName(),eventId:this.eventId()}),stream:({params:e})=>this.feedbackService.getFeedback(e.sessionName,e.eventId)});selectedFeedbackDirection=jA(void 0);feedbackDirection=Ue(()=>this.selectedFeedbackDirection()??this.existingFeedback.value()?.direction);isDetailedFeedbackVisible=jA(!1);feedbackPlaceholder=Ue(()=>this.feedbackDirection()==="up"?this.i18n.feedbackCommentPlaceholderUp:this.i18n.feedbackCommentPlaceholderDown);positiveReasonsResource=C6({stream:()=>this.feedbackService.getPositiveFeedbackReasons()});negativeReasonsResource=C6({stream:()=>this.feedbackService.getNegativeFeedbackReasons()});reasons=Ue(()=>this.feedbackDirection()==="up"?this.positiveReasonsResource.value():this.negativeReasonsResource.value());selectedReasons=new ks([]);comment=new ks("");isLoading=jA(!1);sendFeedback(e){this.feedbackDirection()===e?(this.isLoading.set(!0),this.feedbackService.deleteFeedback(this.sessionName(),this.eventId()).subscribe(()=>{this.isLoading.set(!1),this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()})):(this.selectedReasons.reset(),this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e}).subscribe(()=>{this.isLoading.set(!1),this.isDetailedFeedbackVisible.set(!0),this.selectedFeedbackDirection.set(e)}))}onDetailedFeedbackSubmitted(){let e=this.feedbackDirection();e&&(this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e,reasons:this.selectedReasons.value??[],comment:this.comment.value??void 0}).subscribe(()=>{this.isLoading.set(!1),this.resetDetailedFeedback()}))}onDetailedFeedbackCancelled(){this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()}resetDetailedFeedback(){this.isDetailedFeedbackVisible.set(!1),this.comment.reset(),this.selectedReasons.reset([])}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-message-feedback"]],inputs:{sessionName:[1,"sessionName"],eventId:[1,"eventId"]},decls:9,vars:7,consts:[[1,"message-feedback-container"],[1,"feedback-buttons"],["mat-icon-button","",3,"click","matTooltip","disabled"],["class","feedback-details-container",4,"ngIf"],[1,"feedback-details-container"],[1,"reasons-chips"],["multiple","",3,"formControl"],[3,"value"],[1,"additional-feedback"],["appearance","outline"],["matInput","",3,"formControl","placeholder"],[1,"actions"],["mat-stroked-button","",3,"click"],["mat-flat-button","","color","primary",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"div",1)(2,"button",2),tA("click",function(){return i.sendFeedback("up")}),V(3,bYA,2,0,"mat-icon")(4,MYA,2,0,"mat-icon"),w(),m(5,"button",2),tA("click",function(){return i.sendFeedback("down")}),V(6,kYA,2,0,"mat-icon")(7,SYA,2,0,"mat-icon"),w()(),pt(8,RYA,18,7,"div",3),w()),A&2&&(p(2),$("matTooltip",i.i18n.goodResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="up"?3:4),p(2),$("matTooltip",i.i18n.badResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="down"?6:7),p(2),$("ngIf",i.isDetailedFeedbackVisible()))},dependencies:[ma,rl,r0,uo,fo,v1,Ns,fn,Wa,Nv,xG,kG,Yr,No,Il,Fn,gl,wa,U2,xa],styles:[".message-feedback-container[_ngcontent-%COMP%]{display:block}.feedback-buttons[_ngcontent-%COMP%]{--mat-icon-button-touch-target-size: 32px;--button-size: 32px;--icon-size: 12px;margin-left:54px;display:flex}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:var(--button-size);height:var(--button-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:var(--icon-size);height:var(--icon-size);width:var(--icon-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%]{background-color:var(--side-panel-button-filled-container-color, var(--mat-sys-primary));color:var(--side-panel-button-filled-label-text-color, white)}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.reasons-chips[_ngcontent-%COMP%]{margin-bottom:20px}.feedback-details-container[_ngcontent-%COMP%]{margin-left:54px;max-width:500px;padding:16px;background-color:var(--builder-card-background-color);border-radius:8px;margin-top:8px;border:1px solid var(--builder-border-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-weight:500;margin-bottom:8px;margin-top:0;color:var(--builder-text-secondary-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:60px;resize:vertical}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:18px;padding:0 16px;height:32px;line-height:32px;font-weight:500}"]})};function R7(t){if(!t)return!1;if(t.name==="computer"){let i=t.args?.action,n=t.args?.coordinate;return["left_click","right_click","middle_click","double_click"].includes(i)&&Array.isArray(n)&&n.length===2}let e=["click_at","hover_at","type_text_at","scroll_at","drag_and_drop","mouse_move","scroll_document"].includes(t.name),A=t.args?.x!=null&&t.args?.y!=null||Array.isArray(t.args?.coordinate)&&t.args?.coordinate.length===2;return e&&A}function qh(t){return t?!!t.response?.image?.data:!1}function NYA(t,e){if(t&1&&K(0),t&2){let A=v(3);Se(" (",A.functionCall.args.action,") ")}}function FYA(t,e){if(t&1&&(m(0,"span",5),K(1),w()),t&2){v();let A=Vs(5);$("matTooltip",A.isVirtual?"Virtual (1000x1000)":"Hardware Mapping"),p(),wU(" [@ ",A.x,"",A.isVirtual?"v":"px",", ",A.y,"",A.isVirtual?"v":"px","] ")}}function _YA(t,e){if(t&1){let A=JA();m(0,"div",2),tA("click",function(){Z(A);let n=v(2);return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),V(4,NYA,1,1),Ur(5),V(6,FYA,2,5,"span",5),w()(),m(7,"div",6)(8,"img",7),tA("load",function(n){Z(A);let o=v(2);return X(o.onImageLoad(n))}),w(),GA(9,"div",8),w()()}if(t&2){v();let A=Vs(0),i=v();p(3),Se(" ",i.functionCall.name," "),p(),W(i.functionCall.args&&i.functionCall.args.action?4:-1),p();let n=_g(i.getActualPixelCoordinates());p(),W(n?6:-1),p(2),$("src",A,Ka),p(),$("ngStyle",i.getClickBoxStyle())}}function LYA(t,e){if(t&1&&(Ur(0),V(1,_YA,10,6,"div",1)),t&2){let A=_g(v().getPreviousComputerUseScreenshot());p(),W(A?1:-1)}}function GYA(t,e){if(t&1){let A=JA();m(0,"div",9),tA("click",function(){Z(A);let n=v();return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),w()(),GA(4,"img",10),m(5,"div",11)(6,"mat-icon",12),K(7,"computer"),w(),m(8,"span",13),K(9),w()()()}if(t&2){let A=v();p(3),qA(A.functionResponse.name),p(),$("src",A.getComputerUseScreenshot(),Ka),p(5),qA(A.getComputerUseUrl())}}var N7=class t{functionCall;functionResponse;allMessages=[];index=0;clickEvent=new $A;imageDimensions=new Map;VIRTUAL_WIDTH=1e3;VIRTUAL_HEIGHT=1e3;isComputerUseResponse(){return!!this.functionResponse&&qh(this.functionResponse)}isComputerUseClick(){return!!this.functionCall&&R7(this.functionCall)}getComputerUseScreenshot(){return this.getScreenshotFromPayload(this.functionResponse?.response)}getComputerUseUrl(){return this.isComputerUseResponse()&&(this.functionResponse?.response).url||""}getPreviousComputerUseScreenshot(){for(let e=this.index-1;e>=0;e--){let A=this.allMessages[e];if(this.isMsgComputerUseResponse(A)&&A.functionResponses&&A.functionResponses.length>0)for(let i=A.functionResponses.length-1;i>=0;i--){let n=A.functionResponses[i];if(qh(n)){let o=n.response;return this.getScreenshotFromPayload(o)}}}return""}getClickCoordinates(){if(!this.isComputerUseClick())return null;let e=this.functionCall.args;return e?e.coordinate?{x:Number(e.coordinate[0]),y:Number(e.coordinate[1])}:e.x!=null&&e.y!=null?{x:Number(e.x),y:Number(e.y)}:null:null}getActualPixelCoordinates(){let e=this.getClickCoordinates();if(!e)return null;let A=this.imageDimensions.get(this.index);return A?{x:Math.round(e.x/this.VIRTUAL_WIDTH*A.width),y:Math.round(e.y/this.VIRTUAL_HEIGHT*A.height),isVirtual:!1}:Ge(cA({},e),{isVirtual:!0})}getClickBoxStyle(){let e=this.getClickCoordinates();if(!e)return{display:"none"};let A=e.x/this.VIRTUAL_WIDTH*100,i=e.y/this.VIRTUAL_HEIGHT*100;return{left:`${A}%`,top:`${i}%`}}onImageLoad(e){let A=e.target;A.naturalWidth&&A.naturalHeight&&this.imageDimensions.set(this.index,{width:A.naturalWidth,height:A.naturalHeight})}isMsgComputerUseResponse(e){return e.functionResponses&&e.functionResponses.length>0?e.functionResponses.some(A=>qh(A)):!1}getScreenshotFromPayload(e){let A=e?.image;if(!A?.data)return"";let i=A.data;return i.startsWith("data:")?i:`data:${A.mimetype||"image/png"};base64,${i}`}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-computer-action"]],inputs:{functionCall:"functionCall",functionResponse:"functionResponse",allMessages:"allMessages",index:"index"},outputs:{clickEvent:"clickEvent"},decls:2,vars:1,consts:[[1,"computer-use-container"],[1,"computer-use-container","click-visualization-container"],[1,"computer-use-container","click-visualization-container",3,"click"],[1,"computer-use-header"],[1,"computer-use-tool-name"],[1,"actual-pixels",3,"matTooltip"],[1,"image-wrapper"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"load","src"],[1,"click-overlay-box",3,"ngStyle"],[1,"computer-use-container",3,"click"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"src"],[1,"computer-use-footprint"],[1,"computer-icon"],[1,"url-text"]],template:function(A,i){A&1&&V(0,LYA,2,2)(1,GYA,10,3,"div",0),A&2&&W(i.isComputerUseClick()?0:i.isComputerUseResponse()?1:-1)},dependencies:[ma,dp,Il,Fn,U2,xa],styles:['[_nghost-%COMP%]{display:block}.computer-use-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:600px;border-radius:12px;border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);overflow:hidden;cursor:pointer;margin:5px 5px 10px;background-color:var(--chat-panel-bot-message-message-card-background-color);transition:opacity .2s}.computer-use-container[_ngcontent-%COMP%]:hover{opacity:.9}.computer-use-tool-name[_ngcontent-%COMP%]{font-size:12px;font-family:monospace;font-weight:600;color:var(--chat-panel-input-field-textarea-color);opacity:.9;padding:12px}.computer-use-tool-name[_ngcontent-%COMP%] .actual-pixels[_ngcontent-%COMP%]{opacity:.6;margin-left:8px;font-weight:400}.computer-use-screenshot[_ngcontent-%COMP%]{width:100%;height:auto;display:block;border-bottom:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color)}.computer-use-footprint[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;gap:8px;background-color:var(--chat-panel-thought-chip-background-color)}.computer-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0}.url-text[_ngcontent-%COMP%]{font-size:11px;font-family:monospace;white-space:normal;word-break:break-all;color:var(--chat-panel-input-field-textarea-color);opacity:.8;min-width:0}.image-wrapper[_ngcontent-%COMP%]{position:relative;width:100%}.click-overlay-box[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;border:1px solid rgba(255,255,255,.8);border-radius:50%;transform:translate(-50%,-50%);background-color:#ff00004d;box-shadow:0 0 4px #00000080;pointer-events:none;z-index:10;display:flex;align-items:center;justify-content:center}.click-overlay-box[_ngcontent-%COMP%]:before{content:"";width:2px;height:2px;background-color:red;border-radius:50%;box-shadow:0 0 2px #fff;z-index:11}.click-overlay-box[_ngcontent-%COMP%]:after{content:"";position:absolute;width:100%;height:100%;background:linear-gradient(to right,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%),linear-gradient(to bottom,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%);border-radius:50%}']})};var KYA={cancelEditingTooltip:"Cancel editing",saveEvalMessageTooltip:"Save eval case message",thoughtChipLabel:"Thought",outcomeLabel:"Outcome",outputLabel:"Output",actualToolUsesLabel:"Actual tool uses:",expectedToolUsesLabel:"Expected tool uses:",actualResponseLabel:"Actual response:",expectedResponseLabel:"Expected response:",matchScoreLabel:"Match score",thresholdLabel:"Threshold",evalPassLabel:"Pass",evalFailLabel:"Fail",editEvalMessageTooltip:"Edit eval case message",deleteEvalMessageTooltip:"Delete eval case message",editFunctionArgsTooltip:"Edit function arguments",typeMessagePlaceholder:"Type a Message...",uploadFileTooltip:"Upload local file",moreOptionsTooltip:"More options",updateStateMenuLabel:"Update state",updateStateMenuTooltip:"Update the session state",turnOffMicTooltip:"Turn off microphone",useMicTooltip:"Use microphone",turnOffCamTooltip:"Turn off camera",useCamTooltip:"Use camera",updatedSessionStateChipLabel:"Updated session state"},jsA=new yA("Chat Panel Messages",{factory:()=>KYA});var UYA=["videoContainer"],JYA=["autoScroll"],YYA=["messageTextarea"],TYA=t=>({selected:t}),HYA=(t,e)=>({"user-message":t,"bot-message":e}),zYA=(t,e)=>({"eval-pass":t,"eval-fail":e}),OYA=t=>({hidden:t}),PYA=(t,e)=>({"eval-fail":t,"message-card--highlighted":e}),jYA=(t,e)=>({text:t,thought:e}),F7=t=>({"function-event-button-highlight":t}),IK=t=>({hidden:t});function qYA(t,e){t&1&&(m(0,"div",8),GA(1,"mat-progress-bar",10),w())}function VYA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),Se(" #",i.getOverallEventNumber(A)," ")}}function WYA(t,e){t&1&&GA(0,"div",23)}function ZYA(t,e){if(t&1&&(m(0,"div",12),V(1,VYA,2,1,"div",22)(2,WYA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstUserMessageInGroup(A)?1:2)}}function XYA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),Se(" #",i.getOverallEventNumber(A)," ")}}function $YA(t,e){t&1&&GA(0,"div",23)}function ATA(t,e){if(t&1&&(m(0,"div",14),V(1,XYA,2,1,"div",22)(2,$YA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstMessageInEventGroup(A)?1:2)}}function eTA(t,e){if(t&1&&(m(0,"button",24)(1,"mat-icon",25),K(2,"robot_2"),w()()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);Po(o.customIconColorClass(n)),$("disabled",!i.eventId)("matTooltip",o.getAgentNameFromEvent(n))("ngClass",ss(5,OYA,!o.getAgentNameFromEvent(n)))}}function tTA(t,e){t&1&&GA(0,"mat-progress-bar",26)}function iTA(t,e){if(t&1&&GA(0,"img",32),t&2){let A=v().$implicit;$("src",A.url,Ka)}}function nTA(t,e){if(t&1&&(m(0,"a",33),K(1),w()),t&2){let A=v(2).$implicit;$("href",A.url,Ka),p(),qA(A.file.name)}}function oTA(t,e){if(t&1&&K(0),t&2){let A=v(2).$implicit;Se(" ",A.file.name," ")}}function aTA(t,e){if(t&1&&(m(0,"mat-icon"),K(1,"insert_drive_file"),w(),V(2,nTA,2,2,"a",33)(3,oTA,1,1)),t&2){let A=v().$implicit;p(2),W(A.url?2:3)}}function rTA(t,e){if(t&1&&(m(0,"div",31),V(1,iTA,1,1,"img",32),V(2,aTA,4,1),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:-1),p(),W(A.file.type.startsWith("image/")?-1:2)}}function sTA(t,e){if(t&1&&(m(0,"div",27),Ut(1,rTA,3,2,"div",31,Li),w()),t&2){let A=v(2).$implicit;p(),Jt(A.attachments)}}function gTA(t,e){if(t&1&&(m(0,"div",28),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.thoughtChipLabel)}}function lTA(t,e){if(t&1){let A=JA();m(0,"div",34)(1,"textarea",36,2),tA("ngModelChange",function(n){Z(A);let o=v(5);return X(o.userEditEvalCaseMessageChange.emit(n))})("keydown",function(n){Z(A);let o=v(3).$implicit,a=v(2);return X(a.handleKeydown.emit({event:n,message:o}))}),w(),m(3,"div",37)(4,"span",38),tA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.cancelEditMessage.emit(n))}),K(5," close "),w(),m(6,"span",39),tA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.saveEditMessage.emit(n))}),K(7," check "),w()()()}if(t&2){let A=v(5);p(),$("ngModel",A.userEditEvalCaseMessage),p(3),$("matTooltip",A.i18n.cancelEditingTooltip),p(2),$("matTooltip",A.i18n.saveEvalMessageTooltip)}}function cTA(t,e){if(t&1&&on(0,35),t&2){let A=v(3).$implicit,i=v(2);$("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",Zl(2,jYA,A.text,A.thought))}}function CTA(t,e){if(t&1&&V(0,lTA,8,3,"div",34)(1,cTA,1,5,"ng-container",35),t&2){let A=v(2).$implicit;W(A.isEditing?0:1)}}function ITA(t,e){if(t&1&&(m(0,"div"),GA(1,"div",40),w()),t&2){let A=v(2).$implicit,i=v(2);p(),$("innerHTML",i.renderGooglerSearch(A.renderedContent),al)}}function dTA(t,e){if(t&1&&GA(0,"app-a2ui-canvas",29),t&2){let A=v(2).$implicit;$("beginRendering",A.a2uiData.beginRendering)("surfaceUpdate",A.a2uiData.surfaceUpdate)("dataModelUpdate",A.a2uiData.dataModelUpdate)}}function BTA(t,e){if(t&1&&(m(0,"code"),K(1),w()),t&2){let A=v(2).$implicit;p(),Se(" ",A.executableCode.code," ")}}function ETA(t,e){if(t&1&&(m(0,"div")(1,"div"),K(2),w(),m(3,"div"),K(4),w()()),t&2){let A=v(2).$implicit,i=v(2);p(2),n0("",i.i18n.outcomeLabel,": ",A.codeExecutionResult.outcome),p(2),n0("",i.i18n.outputLabel,": ",A.codeExecutionResult.output)}}function QTA(t,e){if(t&1){let A=JA();m(0,"div",41)(1,"img",42),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),$("src",A.inlineData.data,Ka)}}function hTA(t,e){if(t&1&&(m(0,"div"),GA(1,"app-audio-player",43),w()),t&2){let A=v(4).$implicit;p(),$("base64data",A.inlineData.data)}}function uTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",44)(2,"mat-icon"),K(3,"description"),w(),m(4,"button",45),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(5),w()()()}if(t&2){let A=v(4).$implicit;p(5),Se(" ",A.inlineData.name," ")}}function fTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"button",45),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(2),w()()}if(t&2){let A=v(4).$implicit;p(2),Se(" ",A.inlineData.name," ")}}function mTA(t,e){if(t&1&&(m(0,"div")(1,"div"),V(2,QTA,2,1,"div",41)(3,hTA,2,1,"div")(4,uTA,6,1,"div")(5,fTA,3,1,"div"),w()()),t&2){let A,i=v(3).$implicit,n=v(2);p(2),W((A=i.inlineData.mediaType)===n.MediaType.IMAGE?2:A===n.MediaType.AUDIO?3:A===n.MediaType.TEXT?4:5)}}function pTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"img",46),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),$("src",A.inlineData.data,Ka)}}function wTA(t,e){if(t&1&&(m(0,"div",31)(1,"mat-icon"),K(2,"insert_drive_file"),w(),m(3,"a",33),K(4),w()()),t&2){let A=v(4).$implicit;p(3),$("href",A.inlineData.data,Ka),p(),qA(A.inlineData.displayName)}}function DTA(t,e){if(t&1&&(m(0,"div"),V(1,pTA,2,1,"div")(2,wTA,5,2,"div",31),w()),t&2){let A=v(3).$implicit;p(),W(A.inlineData.mimeType.startsWith("image/")?1:2)}}function yTA(t,e){if(t&1&&V(0,mTA,6,1,"div")(1,DTA,3,1,"div"),t&2){let A=v(2).$implicit;W(A.role==="bot"?0:1)}}function vTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),GA(3,"ngx-json-viewer",51),w(),m(4,"div",52)(5,"div",53),K(6),w(),GA(7,"ngx-json-viewer",51),w()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualToolUsesLabel),p(),$("json",A.actualInvocationToolUses),p(3),qA(i.i18n.expectedToolUsesLabel),p(),$("json",A.expectedInvocationToolUses)}}function bTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),m(3,"div"),K(4),w()(),m(5,"div",52)(6,"div",53),K(7),w(),m(8,"div"),K(9),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualResponseLabel),p(2),qA(A.actualFinalResponse),p(3),qA(i.i18n.expectedResponseLabel),p(2),qA(A.expectedFinalResponse)}}function MTA(t,e){if(t&1&&(m(0,"div",48)(1,"span",54),K(2),w(),m(3,"span",55),K(4),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),n0("",i.i18n.matchScoreLabel,": ",A.evalScore),p(2),n0("",i.i18n.thresholdLabel,": ",A.evalThreshold)}}function kTA(t,e){if(t&1&&(m(0,"div",30)(1,"div",47),V(2,vTA,8,4)(3,bTA,10,4),w(),V(4,MTA,5,4,"div",48),w()),t&2){let A=v(2).$implicit;p(2),W(A.actualInvocationToolUses?2:A.actualFinalResponse?3:-1),p(2),W(A.evalScore!==void 0&&A.evalThreshold!==void 0?4:-1)}}function STA(t,e){if(t&1&&(m(0,"mat-card",16),V(1,tTA,1,0,"mat-progress-bar",26),V(2,sTA,3,0,"div",27),m(3,"div"),V(4,gTA,2,1,"div",28),m(5,"div"),V(6,CTA,2,1),w(),V(7,ITA,2,1,"div"),V(8,dTA,1,3,"app-a2ui-canvas",29),w(),V(9,BTA,2,1,"code"),V(10,ETA,5,4,"div"),V(11,yTA,2,1),V(12,kTA,5,2,"div",30),w()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);$("ngClass",Zl(11,PYA,i.evalStatus===2,o.shouldMessageHighlighted(n))),p(),W(i.isLoading?1:-1),p(),W(i.attachments?2:-1),p(2),W(i.thought?4:-1),p(2),W(i.text?6:-1),p(),W(i.renderedContent?7:-1),p(),W(i.a2uiData?8:-1),p(),W(i.executableCode?9:-1),p(),W(i.codeExecutionResult?10:-1),p(),W(i.inlineData?11:-1),p(),W(i.failedMetric&&i.evalStatus===2?12:-1)}}function xTA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",58),tA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("functionCall",A)("allMessages",n.messages)("index",i)}}function RTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"bolt"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.args?n.JSON.stringify(A.args):""),p(3),Se(" ",A.name," ")}}function NTA(t,e){if(t&1&&V(0,xTA,1,3,"app-computer-action",56)(1,RTA,4,5,"button",57),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseClick(A)?0:1)}}function FTA(t,e){if(t&1&&Ut(0,NTA,2,1,null,null,Li),t&2){let A=v().$implicit;Jt(A.functionCalls)}}function _TA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",60),tA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("functionResponse",A)("allMessages",n.messages)("index",i)}}function LTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"check"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.response?n.JSON.stringify(A.response):""),p(3),Se(" ",A.name," ")}}function GTA(t,e){if(t&1&&V(0,_TA,1,3,"app-computer-action",59)(1,LTA,4,5,"button",57),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseResponse(A)?0:1)}}function KTA(t,e){if(t&1&&Ut(0,GTA,2,1,null,null,Li),t&2){let A=v().$implicit;Jt(A.functionResponses)}}function UTA(t,e){if(t&1&&(m(0,"button",17)(1,"mat-icon"),K(2,"data_object"),w(),K(3," State "),w()),t&2){let A=v().$index,i=v(2);$("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getStateDeltaTooltip(A))}}function JTA(t,e){if(t&1&&(m(0,"button",18)(1,"mat-icon"),K(2,"attachment"),w(),K(3," Artifact "),w()),t&2){let A=v().$index,i=v(2);$("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getArtifactDeltaTooltip(A))}}function YTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",61),tA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editEvalCaseMessage.emit(n))}),K(2," edit "),w(),m(3,"span",61),tA("click",function(){Z(A);let n=v(2),o=n.$implicit,a=n.$index,r=v(2);return X(r.deleteEvalCaseMessage.emit({message:o,index:a}))}),K(4," delete "),w()()}if(t&2){let A=v(4);p(),$("ngClass",ss(4,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.editEvalMessageTooltip),p(2),$("ngClass",ss(6,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.deleteEvalMessageTooltip)}}function TTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",61),tA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editFunctionArgs.emit(n))}),K(2," edit "),w()()}if(t&2){let A=v(4);p(),$("ngClass",ss(2,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.editFunctionArgsTooltip)}}function HTA(t,e){if(t&1&&V(0,YTA,5,8,"div")(1,TTA,3,4,"div"),t&2){let A=v().$implicit,i=v(2);W(A.text?0:i.isEditFunctionArgsEnabled&&A.functionCalls&&A.functionCalls.length>0?1:-1)}}function zTA(t,e){t&1&&(m(0,"button",20)(1,"mat-icon"),K(2,"person"),w()())}function OTA(t,e){if(t&1&&GA(0,"app-message-feedback",21),t&2){let A=v().$implicit,i=v(2);$("sessionName",i.sessionName())("eventId",A.eventId)}}function PTA(t,e){if(t&1){let A=JA();m(0,"div",11),tA("click",function(n){let o=Z(A),a=o.$implicit,r=o.$index,s=v(2);return X(s.handleRowClick(n,a,r))}),V(1,ZYA,3,1,"div",12),m(2,"div",13),V(3,ATA,3,1,"div",14),V(4,eTA,3,7,"button",15),V(5,STA,13,14,"mat-card",16),V(6,FTA,2,0),V(7,KTA,2,0),V(8,UTA,4,4,"button",17),V(9,JTA,4,4,"button",18),m(10,"div",13)(11,"span",19),K(12),w(),m(13,"span"),K(14),w()(),V(15,HTA,2,1),V(16,zTA,3,0,"button",20),w(),V(17,OTA,1,2,"app-message-feedback",21),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);$("ngClass",ss(16,TYA,n.isMessageEventSelected(i))),p(),W(A.role==="user"?1:-1),p(),$("ngClass",Zl(18,HYA,A.role==="user",A.role==="bot")),p(),W(A.role==="bot"&&!A.isLoading?3:-1),p(),W(A.role==="bot"?4:-1),p(),W(n.shouldShowMessageCard(A)?5:-1),p(),W(A.functionCalls&&A.functionCalls.length>0?6:-1),p(),W(A.functionResponses&&A.functionResponses.length>0?7:-1),p(),W(A.role==="bot"&&n.hasStateDelta(i)?8:-1),p(),W(A.role==="bot"&&n.hasArtifactDelta(i)?9:-1),p(),$("ngClass",Zl(21,zYA,A.evalStatus===1,A.evalStatus===2)),p(2),qA(A.evalStatus===1?"check":A.evalStatus===2?"close":""),p(2),qA(A.evalStatus===1?n.i18n.evalPassLabel:A.evalStatus===2?n.i18n.evalFailLabel:""),p(),W(n.evalCase&&A.role==="bot"&&n.isEvalEditMode?15:-1),p(),W(A.role==="user"?16:-1),p(),W(n.isUserFeedbackEnabled()&&!n.isLoadingAgentResponse()&&A.role==="bot"?17:-1)}}function jTA(t,e){if(t&1){let A=JA();m(0,"div",7,0),tA("scroll",function(n){Z(A);let o=v();return X(o.onScroll.next(n))}),V(2,qYA,2,0,"div",8),ri(3,"async"),ri(4,"async"),GA(5,"div",null,1),Ut(7,PTA,18,24,"div",9,Li),w()}if(t&2){let A=v();p(2),W(Ci(3,1,A.uiStateService.isMessagesLoading())&&Ci(4,3,A.featureFlagService.isInfinityMessageScrollingEnabled())?2:-1),p(5),Jt(A.messages)}}function qTA(t,e){if(t&1){let A=JA();m(0,"div",74),GA(1,"img",75),m(2,"button",76),tA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(3,"mat-icon",77),K(4,"close"),w()()()}if(t&2){let A=v().$implicit;p(),$("src",A.url,Ka)}}function VTA(t,e){if(t&1){let A=JA();m(0,"div",73)(1,"button",76),tA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(2,"mat-icon",77),K(3,"close"),w()(),m(4,"div",78)(5,"mat-icon"),K(6,"insert_drive_file"),w(),m(7,"span"),K(8),w()()()}if(t&2){let A=v().$implicit;p(8),qA(A.file.name)}}function WTA(t,e){if(t&1&&(m(0,"div"),V(1,qTA,5,1,"div",74)(2,VTA,9,1,"div",73),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:A.file.type.startsWith("image/")?-1:2)}}function ZTA(t,e){if(t&1){let A=JA();m(0,"div",73)(1,"button",76),tA("click",function(){Z(A);let n=v(4);return X(n.removeStateUpdate.emit())}),m(2,"mat-icon",77),K(3,"close"),w()(),m(4,"div",78)(5,"span"),K(6),w()()()}if(t&2){let A=v(4);p(6),qA(A.i18n.updatedSessionStateChipLabel)}}function XTA(t,e){if(t&1&&(m(0,"div",65),Ut(1,WTA,3,1,"div",null,Li),V(3,ZTA,7,1,"div",73),w()),t&2){let A=v(3);p(),Jt(A.selectedFiles),p(2),W(A.updatedSessionState?3:-1)}}function $TA(t,e){if(t&1){let A=JA();m(0,"div",62)(1,"input",63,3),tA("change",function(n){Z(A);let o=v(2);return X(o.fileSelect.emit(n))}),w(),m(3,"mat-form-field",64),V(4,XTA,4,1,"div",65),m(5,"textarea",66),tA("ngModelChange",function(n){Z(A);let o=v(2);return X(o.userInputChange.emit(n))})("keydown.enter",function(n){Z(A);let o=v(2);return X(o.sendMessage.emit(n))}),w(),m(6,"div",67)(7,"div")(8,"button",68),ri(9,"async"),tA("click",function(){Z(A);let n=An(2);return X(n.click())}),m(10,"mat-icon"),K(11,"attach_file"),w()(),m(12,"button",69),ri(13,"async"),m(14,"mat-icon"),K(15,"more_vert"),w()(),m(16,"mat-menu",null,4)(18,"span",70),tA("click",function(){Z(A);let n=v(2);return X(n.updateState.emit())}),K(19),w()()(),m(20,"div")(21,"button",71),ri(22,"async"),tA("click",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording.emit())}),m(23,"mat-icon"),K(24,"mic"),w()(),m(25,"button",72),ri(26,"async"),tA("click",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording.emit())}),m(27,"mat-icon"),K(28,"videocam"),w()()()()()()}if(t&2){let A=An(17),i=v(2);p(4),W(i.selectedFiles.length&&i.appName!=""||i.updatedSessionState?4:-1),p(),$("ngModel",i.userInput)("placeholder",i.i18n.typeMessagePlaceholder),p(3),$("matTooltip",i.i18n.uploadFileTooltip)("disabled",!Ci(9,18,i.isMessageFileUploadEnabledObs)),p(4),$("matMenuTriggerFor",A)("matTooltip",i.i18n.moreOptionsTooltip)("disabled",!Ci(13,20,i.isManualStateUpdateEnabledObs)),p(6),$("matTooltip",i.i18n.updateStateMenuTooltip),p(),Se(" ",i.i18n.updateStateMenuLabel," "),p(2),ne("recording",i.isAudioRecording),$("matTooltip",i.isAudioRecording?i.i18n.turnOffMicTooltip:i.i18n.useMicTooltip)("disabled",!Ci(22,22,i.isBidiStreamingEnabledObs)),p(4),ne("recording",i.isVideoRecording),$("matTooltip",i.isVideoRecording?i.i18n.turnOffCamTooltip:i.i18n.useCamTooltip)("disabled",!Ci(26,24,i.isBidiStreamingEnabledObs))}}function AHA(t,e){if(t&1&&V(0,$TA,29,26,"div",62),t&2){let A=v();W(A.canEditSession()?0:-1)}}function eHA(t,e){t&1&&(m(0,"div",6),GA(1,"mat-progress-spinner",79),w())}var qsA="root_agent",Vh=class t{constructor(e){this.sanitizer=e;Ga(()=>{let A=this.sessionName();A&&(this.nextPageToken="",this.uiStateService.lazyLoadMessages(A,{pageSize:100,pageToken:this.nextPageToken}).pipe(zo()).subscribe())})}appName="";sessionName=rt("");messages=[];isChatMode=!0;evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;isEditFunctionArgsEnabled=!1;userInput="";userEditEvalCaseMessage="";selectedFiles=[];updatedSessionState=null;eventData=new Map;selectedEvent=void 0;isAudioRecording=!1;isVideoRecording=!1;hoveredEventMessageIndices=[];userInputChange=new $A;userEditEvalCaseMessageChange=new $A;clickEvent=new $A;handleKeydown=new $A;cancelEditMessage=new $A;saveEditMessage=new $A;openViewImageDialog=new $A;openBase64InNewTab=new $A;editEvalCaseMessage=new $A;deleteEvalCaseMessage=new $A;editFunctionArgs=new $A;fileSelect=new $A;removeFile=new $A;removeStateUpdate=new $A;sendMessage=new $A;updateState=new $A;toggleAudioRecording=new $A;toggleVideoRecording=new $A;videoContainer;scrollContainer;textarea;scrollInterrupted=!1;scrollHeight=0;lastMessageRef=null;nextPageToken="";i18n=h(jsA);uiStateService=h(Ql);stringToColorService=h(dE);markdownComponent=h(Gh);featureFlagService=h(vr);agentService=h(sg);sessionService=h(El);destroyRef=h(qa);MediaType=$1;JSON=JSON;isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled();canEditSession=jA(!0);isUserFeedbackEnabled=Fs(this.featureFlagService.isFeedbackServiceEnabled());isLoadingAgentResponse=Fs(this.agentService.getLoadingState());onScroll=new XA;ngOnInit(){this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo(),Ze(e=>e),Si(()=>fi(this.uiStateService.onNewMessagesLoaded().pipe(oi(e=>{this.nextPageToken=e.nextPageToken??"",e.isBackground||this.restoreScrollPosition()})),this.onScroll.pipe(Si(e=>{let A=e.target;return A.scrollTop!==0?ja:this.nextPageToken?(this.scrollHeight=A.scrollHeight,this.uiStateService.lazyLoadMessages(this.sessionName(),{pageSize:100,pageToken:this.nextPageToken}).pipe(zo(),ta(()=>gU))):ja})))),Tr(this.destroyRef)).subscribe()}ngAfterViewInit(){this.scrollContainer?.nativeElement&&(this.scrollContainer.nativeElement.addEventListener("wheel",()=>{this.scrollInterrupted=!0}),this.scrollContainer.nativeElement.addEventListener("touchmove",()=>{this.scrollInterrupted=!0}))}ngOnChanges(e){if(e.messages){let A=this.messages[this.messages.length-1];A!==this.lastMessageRef&&((A?.role==="user"||A?.isLoading===!0)&&(this.scrollInterrupted=!1),this.scrollToBottom()),this.lastMessageRef=A}}scrollToBottom(){this.scrollInterrupted||setTimeout(()=>{this.scrollContainer?.nativeElement.scrollTo({top:this.scrollContainer.nativeElement.scrollHeight,behavior:"auto"})},50)}getAgentNameFromEvent(e){let A=this.messages[e].eventId;return this.eventData.get(A)?.author??qsA}customIconColorClass(e){let A=this.getAgentNameFromEvent(e);return A!==qsA?`custom-icon-color-${this.stringToColorService.stc(A).replace("#","")}`:""}shouldMessageHighlighted(e){return this.hoveredEventMessageIndices.includes(e)}isMessageEventSelected(e){let A=this.messages[e];return A.eventId&&this.selectedEvent&&A.eventId===this.selectedEvent.id}shouldShowMessageCard(e){return!!(e.text||e.attachments||e.inlineData||e.executableCode||e.codeExecutionResult||e.a2uiData||e.renderedContent||e.isLoading||e.failedMetric&&e.evalStatus===2)}getBotEventNumber(e){let A=this.messages[e];if(A.role!=="bot"||!A.eventId)return-1;let i=[];for(let n=0;n<=e;n++){let o=this.messages[n];o.role==="bot"&&o.eventId&&!i.includes(o.eventId)&&i.push(o.eventId)}return i.indexOf(A.eventId)+1}getOverallEventNumber(e){let A=0,i=null,n=null;for(let o=0;o<=e;o++){let a=this.messages[o];if(a.role==="user"){if(i!=="user"&&(A++,i="user"),o===e)return A}else if(a.role==="bot"&&a.eventId&&(a.eventId!==n&&(A++,n=a.eventId,i="bot"),o===e))return A}return-1}isFirstUserMessageInGroup(e){return this.messages[e].role!=="user"?!1:e===0?!0:this.messages[e-1].role!=="user"}isFirstMessageInEventGroup(e){let A=this.messages[e];return A.role!=="bot"||!A.eventId?!1:e===0?!0:this.messages[e-1].eventId!==A.eventId}hasStateDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.stateDelta;return n&&Object.keys(n).length>0}hasArtifactDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;return n&&Object.keys(n).length>0}renderGooglerSearch(e){return this.sanitizer.bypassSecurityTrustHtml(e)}restoreScrollPosition(){if(!this.scrollHeight){this.scrollInterrupted=!1,this.scrollToBottom();return}let e=this.scrollContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight-this.scrollHeight,this.scrollHeight=0)}isComputerUseClick(e){return R7(e)}isComputerUseResponse(e){return qh(e)}getFunctionCallArgsTooltip(e){if(!e.functionCall||!e.functionCall.args)return"";try{return JSON.stringify(e.functionCall.args)}catch{return String(e.functionCall.args)}}getFunctionResponseTooltip(e){if(!e.functionResponse||!e.functionResponse.response)return"";try{return JSON.stringify(e.functionResponse.response)}catch{return String(e.functionResponse.response)}}getStateDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.stateDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}getArtifactDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}handleRowClick(e,A,i){let n=window.getSelection();n&&n.toString().length>0||this.clickEvent.emit(i)}handleKeyboardNavigation(e){if(!this.selectedEvent||e.key!=="ArrowUp"&&e.key!=="ArrowDown")return;e.preventDefault();let A=new Map;for(let a=0;athis.messages[a].eventId===this.selectedEvent.id);if(n===-1)return;let o;e.key==="ArrowDown"?o=n+1>=i.length?0:n+1:o=n-1<0?i.length-1:n-1,this.clickEvent.emit(i[o]),setTimeout(()=>{if(!this.scrollContainer?.nativeElement)return;let a=this.scrollContainer.nativeElement.querySelectorAll(".message-column-container");a&&a[i[o]]&&a[i[o]].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},0)}static \u0275fac=function(A){return new(A||t)(at($s))};static \u0275cmp=kA({type:t,selectors:[["app-chat-panel"]],viewQuery:function(A,i){if(A&1&&ai(UYA,5,ge)(JYA,5)(YYA,5),A&2){let n;ce(n=Ce())&&(i.videoContainer=n.first),ce(n=Ce())&&(i.scrollContainer=n.first),ce(n=Ce())&&(i.textarea=n.first)}},hostBindings:function(A,i){A&1&&tA("keydown",function(o){return i.handleKeyboardNavigation(o)},m2)},inputs:{appName:"appName",sessionName:[1,"sessionName"],messages:"messages",isChatMode:"isChatMode",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",userInput:"userInput",userEditEvalCaseMessage:"userEditEvalCaseMessage",selectedFiles:"selectedFiles",updatedSessionState:"updatedSessionState",eventData:"eventData",selectedEvent:"selectedEvent",isAudioRecording:"isAudioRecording",isVideoRecording:"isVideoRecording",hoveredEventMessageIndices:"hoveredEventMessageIndices"},outputs:{userInputChange:"userInputChange",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",clickEvent:"clickEvent",handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",fileSelect:"fileSelect",removeFile:"removeFile",removeStateUpdate:"removeStateUpdate",sendMessage:"sendMessage",updateState:"updateState",toggleAudioRecording:"toggleAudioRecording",toggleVideoRecording:"toggleVideoRecording"},features:[ti],decls:5,vars:5,consts:[["autoScroll",""],["videoContainer",""],["messageTextarea",""],["fileInput",""],["moreMenu","matMenu"],[1,"chat-messages"],[1,"loading-spinner-container"],[1,"chat-messages",3,"scroll"],[1,"messages-loading-container"],[1,"message-column-container",3,"ngClass"],["mode","indeterminate"],[1,"message-column-container",3,"click","ngClass"],[1,"event-number-container","user-event-number"],[3,"ngClass"],[1,"event-number-container"],["mat-mini-fab","",3,"disabled","matTooltip","class","ngClass"],[1,"message-card",3,"ngClass"],["mat-stroked-button","",1,"function-event-button","state-delta-button",3,"ngClass","appJsonTooltip"],["mat-stroked-button","",1,"function-event-button","artifact-delta-button",3,"ngClass","appJsonTooltip"],[1,"material-symbols-outlined"],["mat-mini-fab",""],[3,"sessionName","eventId"],[1,"event-number-label"],[1,"event-number-placeholder"],["mat-mini-fab","",3,"disabled","matTooltip","ngClass"],["fontSet","material-symbols-outlined"],["mode","buffer",1,"loading-bar"],[1,"attachments"],[1,"thought-chip"],[3,"beginRendering","surfaceUpdate","dataModelUpdate"],[1,"eval-compare-container"],[1,"attachment"],["alt","attachment",1,"image-preview-chat",3,"src"],["download","",3,"href"],[1,"edit-message-container"],[3,"ngComponentOutlet","ngComponentOutletInputs"],["rows","4","cols","80",1,"message-textarea",3,"ngModelChange","keydown","ngModel"],[1,"edit-message-buttons-container"],[1,"material-symbols-outlined","cancel-edit-button",3,"click","matTooltip"],[1,"material-symbols-outlined","save-edit-button",3,"click","matTooltip"],[3,"innerHTML"],[1,"generated-image-container"],["alt","image",1,"generated-image",3,"click","src"],[3,"base64data"],[1,"html-artifact-container"],[1,"link-style-button",3,"click"],["alt","image",1,"image-preview-chat",3,"click","src"],[1,"actual-expected-compare-container"],[1,"score-threshold-container"],[1,"actual-result"],[1,"eval-response-header","header-actual"],[3,"json"],[1,"expected-result"],[1,"eval-response-header","header-expected"],[1,"header-actual"],[1,"header-expected"],[3,"functionCall","allMessages","index"],["mat-stroked-button","",1,"function-event-button",3,"ngClass","appJsonTooltip"],[3,"clickEvent","functionCall","allMessages","index"],[3,"functionResponse","allMessages","index"],[3,"clickEvent","functionResponse","allMessages","index"],[1,"material-symbols-outlined","eval-case-edit-button",3,"click","ngClass","matTooltip"],[1,"chat-input"],["type","file","multiple","","hidden","",3,"change"],["appearance","outline",1,"input-field"],[1,"file-preview"],["matInput","","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","10",1,"chat-input-box",3,"ngModelChange","keydown.enter","ngModel","placeholder"],[1,"chat-input-actions"],["mat-icon-button","",1,"function-event-button",3,"click","matTooltip","disabled"],["mat-icon-button","",1,"function-event-button",3,"matMenuTriggerFor","matTooltip","disabled"],["mat-menu-item","",3,"click","matTooltip"],["mat-icon-button","","matSuffix","",1,"audio-rec-btn",3,"click","matTooltip","disabled"],["mat-icon-button","","matSuffix","",1,"video-rec-btn",3,"click","matTooltip","disabled"],[1,"file-container"],[1,"image-container"],["alt","preview",1,"image-preview",3,"src"],["mat-icon-button","",1,"delete-button",3,"click"],["color","warn"],[1,"file-info"],["mode","indeterminate","diameter","50"]],template:function(A,i){if(A&1&&(Ur(0),ri(1,"async"),V(2,jTA,9,5,"div",5),V(3,AHA,1,1),V(4,eHA,2,0,"div",6)),A&2){let n=Ci(1,3,i.uiStateService.isSessionLoading());p(2),W(i.appName!=""&&!n?2:-1),p(),W(i.appName!=""&&i.isChatMode&&!n?3:-1),p(),W(n?4:-1)}},dependencies:[ma,gs,D2,Nn,uo,fo,Sa,Il,Fn,jH,aE,HsA,v7,Ns,fn,Tp,Wa,gl,wa,No,x9,Op,KB,Yr,daA,AC,C2,_h,OsA,B1,E0,Y2,k7,vE,x7,U2,xa,M7,N7,ls],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}.generated-image-container[_ngcontent-%COMP%]{max-width:400px}.generated-image[_ngcontent-%COMP%]{max-width:100%;min-width:40px;border-radius:8px}.html-artifact-container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:flex-start;align-items:center}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.message-card.message-card--highlighted[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color)}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color);margin:5px 5px 10px;font-size:13px!important;padding:6px 12px!important;min-height:32px!important;height:32px!important}.function-event-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px!important;width:18px!important;height:18px!important}.state-delta-button[_ngcontent-%COMP%], .artifact-delta-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color)!important}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color);border-color:var(--chat-panel-function-event-button-highlight-border-color)!important;color:var(--chat-panel-function-event-button-highlight-color)!important}.message-column-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;margin-left:-20px;margin-right:-20px;padding:8px 20px;border:2px solid transparent;border-radius:4px;background-color:transparent;transition:background-color .2s ease;cursor:pointer}.message-column-container[_ngcontent-%COMP%]:hover{background-color:#4285f414}.message-column-container.selected[_ngcontent-%COMP%]{background-color:#4285f433!important;border:2px solid rgba(66,133,244,.6);border-radius:4px}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;flex-grow:1}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-panel-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;flex-grow:1}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-panel-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-panel-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-panel-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-panel-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-panel-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-panel-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-panel-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-panel-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-panel-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-fail-color)}.hidden[_ngcontent-%COMP%]{visibility:hidden}.chat-input[_ngcontent-%COMP%]{display:flex;padding:10px;width:60%;margin:0 auto;position:relative;z-index:1}.input-field[_ngcontent-%COMP%]{flex-grow:1;position:relative;z-index:1}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-textarea-color);border:none;padding:10px;box-sizing:content-box;caret-color:var(--chat-panel-input-field-textarea-caret-color)}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder{color:var(--chat-panel-input-field-textarea-placeholder-color)}.input-field[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-button-color);background-color:var(--chat-panel-input-field-button-background-color)}.chat-input-actions[_ngcontent-%COMP%]{width:106%;margin-top:10px;display:flex;justify-content:space-between;align-items:center;max-width:100%}.chat-input-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin-left:10px;margin-right:10px}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.image-preview-chat[_ngcontent-%COMP%]{max-width:90%;max-height:70vh;width:auto;height:auto;border-radius:8px;cursor:pointer;transition:transform .2s ease-in-out}.attachment[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-mini-fab{background-color:var(--chat-panel-mat-mdc-mini-fab-background-color, #4285f4)}[_nghost-%COMP%] .mat-mdc-mini-fab mat-icon{color:var(--chat-panel-mat-mdc-mini-fab-mat-icon-color, white)}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled{background-color:#fff3!important}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled mat-icon{color:#fff9!important}[_nghost-%COMP%] .message-text p{white-space:pre-line;word-break:break-word;overflow-wrap:break-word}[_nghost-%COMP%] .input-field .mat-mdc-text-field-wrapper{border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);border-radius:16px}.image-container[_ngcontent-%COMP%]{position:relative;display:inline-block;border-radius:12px;overflow:hidden}.image-preview[_ngcontent-%COMP%]{display:block;width:100%;height:auto;border-radius:12px;width:80px;height:80px}.delete-button[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;background-color:var(--chat-panel-delete-button-background-color);border:none;border-radius:50%;padding:8px;cursor:pointer;color:var(--chat-panel-delete-button-color);display:flex;align-items:center;justify-content:center;margin-right:0;scale:.7}.delete-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}.file-container[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;gap:8px;height:80px;background-color:var(--chat-panel-file-container-background-color);border-radius:12px}.file-info[_ngcontent-%COMP%]{margin-right:60px;padding-top:20px;padding-left:16px}.thought-chip[_ngcontent-%COMP%]{border-radius:5px;background-color:var(--chat-panel-thought-chip-background-color);width:80px;text-align:center;margin-top:5px}.event-number-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-self:center;min-width:30px}.bot-message[_ngcontent-%COMP%] .event-number-container[_ngcontent-%COMP%]{margin-right:8px}.user-event-number[_ngcontent-%COMP%]{margin-right:8px;align-self:center}.event-number-label[_ngcontent-%COMP%], .event-number-placeholder[_ngcontent-%COMP%]{font-size:14px;font-weight:600;text-align:center;display:inline-block}.event-number-label[_ngcontent-%COMP%]{color:var(--chat-panel-event-number-label-color, #5f6368)}.event-number-placeholder[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--chat-panel-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none;font-size:14px}.cancel-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-mat-mdc-text-field-wrapper-border-color);cursor:pointer;margin-right:16px}.save-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-primary);cursor:pointer;margin-right:16px}.chat-input-box[_ngcontent-%COMP%]{caret-color:#fff}button.audio-rec-btn[_ngcontent-%COMP%], button.video-rec-btn[_ngcontent-%COMP%]{background-color:var(--chat-card-background-color)}button.audio-rec-btn.recording[_ngcontent-%COMP%], button.video-rec-btn.recording[_ngcontent-%COMP%]{background-color:var(--chat-panel-eval-fail-color)}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.messages-loading-container[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:1em}"]})};var tHA={cancelButton:"Cancel",saveButton:"Save",invalidJsonAlert:"Invalid JSON: "},VsA=new yA("Edit Json Dialog Messages",{factory:()=>tHA});var Jm=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.jsonString=JSON.stringify(A.jsonContent,null,2),this.functionName=A.functionName||""}jsonEditorComponent=ca(qc);jsonString="";functionName="";i18n=h(VsA);ngOnInit(){}onSave(){try{this.jsonString=this.jsonEditorComponent().getJsonString();let e=JSON.parse(this.jsonString);this.dialogRef.close(e)}catch(e){alert(this.i18n.invalidJsonAlert+e)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-edit-json-dialog"]],viewQuery:function(A,i){A&1&&rs(i.jsonEditorComponent,qc,5),A&2&&Dr()},decls:11,vars:5,consts:[[1,"dialog-container"],["mat-dialog-title",""],[1,"editor"],[3,"jsonString"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content",2),K(4),GA(5,"app-json-editor",3),w(),m(6,"mat-dialog-actions",4)(7,"button",5),K(8),w(),m(9,"button",6),tA("click",function(){return i.onSave()}),K(10),w()()()),A&2&&(p(2),qA(i.data.dialogHeader),p(2),Se(" ",i.functionName," "),p(),$("jsonString",i.jsonString),p(3),qA(i.i18n.cancelButton),p(2),qA(i.i18n.saveButton))},dependencies:[Da,rr,qc,Ua,fn,B0],styles:[".dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--edit-json-dialog-container-box-shadow-color)}.editor[_ngcontent-%COMP%]{padding-top:12px;height:300px}"]})};var iHA=[[["caption"]],[["colgroup"],["col"]],"*"],nHA=["caption","colgroup, col","*"];function oHA(t,e){t&1&&Ke(0,2)}function aHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",0),on(3,2)(4,3),w(),m(5,"tfoot",0),on(6,4),w())}function rHA(t,e){t&1&&on(0,1)(1,2)(2,3)(3,4)}var Xc=new yA("CDK_TABLE");var G7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellDef",""]]})}return t})(),K7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderCellDef",""]]})}return t})(),XsA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterCellDef",""]]})}return t})(),Wh=(()=>{class t{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(A){this._setNameInput(A)}_name;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(A){A!==this._stickyEnd&&(this._stickyEnd=A,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(A){A&&(this._name=A,this.cssClassFriendlyName=A.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkColumnDef",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,G7,5)(o,K7,5)(o,XsA,5),i&2){let a;ce(a=Ce())&&(n.cell=a.first),ce(a=Ce())&&(n.headerCell=a.first),ce(a=Ce())&&(n.footerCell=a.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",he],stickyEnd:[2,"stickyEnd","stickyEnd",he]},features:[dt([{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}])]})}return t})(),L7=class{constructor(e,A){A.nativeElement.classList.add(...e._columnCssClassName)}},$sA=(()=>{class t extends L7{constructor(){super(h(Wh),h(ge))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[It]})}return t})();var AgA=(()=>{class t extends L7{constructor(){let A=h(Wh),i=h(ge);super(A,i);let n=A._table?._getCellRole();n&&i.nativeElement.setAttribute("role",n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[It]})}return t})();var BK=(()=>{class t{template=h(Tn);_differs=h(y1);columns;_columnsDiffer;constructor(){}ngOnChanges(A){if(!this._columnsDiffer){let i=A.columns&&A.columns.currentValue||[];this._columnsDiffer=this._differs.find(i).create(),this._columnsDiffer.diff(i)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(A){return this instanceof Tm?A.headerCell.template:this instanceof EK?A.footerCell.template:A.cell.template}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,features:[ti]})}return t})(),Tm=(()=>{class t extends BK{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",he]},features:[It,ti]})}return t})(),EK=(()=>{class t extends BK{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",he]},features:[It,ti]})}return t})(),U7=(()=>{class t extends BK{_table=h(Xc,{optional:!0});when;constructor(){super(h(Tn),h(y1))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[It]})}return t})(),EB=(()=>{class t{_viewContainer=h(Oo);cells;context;static mostRecentCellOutlet=null;constructor(){t.mostRecentCellOutlet=this}ngOnDestroy(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellOutlet",""]]})}return t})(),QK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-header-row"],["tr","cdk-header-row",""]],hostAttrs:["role","row",1,"cdk-header-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var hK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})(),egA=(()=>{class t{templateRef=h(Tn);_contentClassNames=["cdk-no-data-row","cdk-row"];_cellClassNames=["cdk-cell","cdk-no-data-cell"];_cellSelector="td, cdk-cell, [cdk-cell], .cdk-cell";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","cdkNoDataRow",""]]})}return t})(),WsA=["top","bottom","left","right"],dK=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(e=>this._updateCachedSizes(e)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(e,A,i=!0,n=!0,o,a,r){this._isNativeHtmlTable=e,this._stickCellCss=A,this._isBrowser=i,this._needsPositionStickyOnElement=n,this.direction=o,this._positionListener=a,this._tableInjector=r,this._borderCellCss={top:`${A}-border-elem-top`,bottom:`${A}-border-elem-bottom`,left:`${A}-border-elem-left`,right:`${A}-border-elem-right`}}clearStickyPositioning(e,A){(A.includes("left")||A.includes("right"))&&this._removeFromStickyColumnReplayQueue(e);let i=[];for(let n of e)n.nodeType===n.ELEMENT_NODE&&i.push(n,...Array.from(n.children));Yn({write:()=>{for(let n of i)this._removeStickyStyle(n,A)}},{injector:this._tableInjector})}updateStickyColumns(e,A,i,n=!0,o=!0){if(!e.length||!this._isBrowser||!(A.some(Q=>Q)||i.some(Q=>Q))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let a=e[0],r=a.children.length,s=this.direction==="rtl",g=s?"right":"left",l=s?"left":"right",C=A.lastIndexOf(!0),I=i.indexOf(!0),d,B,E;o&&this._updateStickyColumnReplayQueue({rows:[...e],stickyStartStates:[...A],stickyEndStates:[...i]}),Yn({earlyRead:()=>{d=this._getCellWidths(a,n),B=this._getStickyStartColumnPositions(d,A),E=this._getStickyEndColumnPositions(d,i)},write:()=>{for(let Q of e)for(let f=0;f!!Q)&&(this._positionListener.stickyColumnsUpdated({sizes:C===-1?[]:d.slice(0,C+1).map((Q,f)=>A[f]?Q:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:I===-1?[]:d.slice(I).map((Q,f)=>i[f+I]?Q:null).reverse()}))}},{injector:this._tableInjector})}stickRows(e,A,i){if(!this._isBrowser)return;let n=i==="bottom"?e.slice().reverse():e,o=i==="bottom"?A.slice().reverse():A,a=[],r=[],s=[];Yn({earlyRead:()=>{for(let g=0,l=0;g{let g=o.lastIndexOf(!0);for(let l=0;l{let i=e.querySelector("tfoot");i&&(A.some(n=>!n)?this._removeStickyStyle(i,["bottom"]):this._addStickyStyle(i,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(e,A){if(!e.classList.contains(this._stickCellCss))return;for(let n of A)e.style[n]="",e.classList.remove(this._borderCellCss[n]);WsA.some(n=>A.indexOf(n)===-1&&e.style[n])?e.style.zIndex=this._getCalculatedZIndex(e):(e.style.zIndex="",this._needsPositionStickyOnElement&&(e.style.position=""),e.classList.remove(this._stickCellCss))}_addStickyStyle(e,A,i,n){e.classList.add(this._stickCellCss),n&&e.classList.add(this._borderCellCss[A]),e.style[A]=`${i}px`,e.style.zIndex=this._getCalculatedZIndex(e),this._needsPositionStickyOnElement&&(e.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(e){let A={top:100,bottom:10,left:1,right:1},i=0;for(let n of WsA)e.style[n]&&(i+=A[n]);return i?`${i}`:""}_getCellWidths(e,A=!0){if(!A&&this._cachedCellWidths.length)return this._cachedCellWidths;let i=[],n=e.children;for(let o=0;o0;o--)A[o]&&(i[o]=n,n+=e[o]);return i}_retrieveElementSize(e){let A=this._elemSizeCache.get(e);if(A)return A;let i=e.getBoundingClientRect(),n={width:i.width,height:i.height};return this._resizeObserver&&(this._elemSizeCache.set(e,n),this._resizeObserver.observe(e,{box:"border-box"})),n}_updateStickyColumnReplayQueue(e){this._removeFromStickyColumnReplayQueue(e.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(e)}_removeFromStickyColumnReplayQueue(e){let A=new Set(e);for(let i of this._updatedStickyColumnsParamsToReplay)i.rows=i.rows.filter(n=>!A.has(n));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(i=>!!i.rows.length)}_updateCachedSizes(e){let A=!1;for(let i of e){let n=i.borderBoxSize?.length?{width:i.borderBoxSize[0].inlineSize,height:i.borderBoxSize[0].blockSize}:{width:i.contentRect.width,height:i.contentRect.height};n.width!==this._elemSizeCache.get(i.target)?.width&&sHA(i.target)&&(A=!0),this._elemSizeCache.set(i.target,n)}A&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let i of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(i.rows,i.stickyStartStates,i.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function sHA(t){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(e=>t.classList.contains(e))}var Ym=new yA("STICKY_POSITIONING_LISTENER");var uK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._rowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","rowOutlet",""]]})}return t})(),fK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._headerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","headerRowOutlet",""]]})}return t})(),mK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._footerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","footerRowOutlet",""]]})}return t})(),pK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._noDataRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","noDataRowOutlet",""]]})}return t})(),wK=(()=>{class t{_differs=h(y1);_changeDetectorRef=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_platform=h(Ii);_viewRepeater;_viewportRuler=h(Ls);_injector=h(ft);_virtualScrollViewport=h(qH,{optional:!0,host:!0});_positionListener=h(Ym,{optional:!0})||h(Ym,{optional:!0,skipSelf:!0});_document=h(Xt);_data;_renderedRange;_onDestroy=new XA;_renderRows;_renderChangeSubscription=null;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef=null;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow=null;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_headerRowStickyUpdates=new XA;_footerRowStickyUpdates=new XA;_disableVirtualScrolling=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let A=this._elementRef.nativeElement.getAttribute("role");return A==="grid"||A==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(A){this._trackByFn=A}_trackByFn;get dataSource(){return this._dataSource}set dataSource(A){this._dataSource!==A&&(this._switchDataSource(A),this._changeDetectorRef.markForCheck())}_dataSource;_dataSourceChanges=new XA;_dataStream=new XA;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(A){this._multiTemplateDataRows=A,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._virtualScrollEnabled()?!0:this._fixedLayout}set fixedLayout(A){this._fixedLayout=A,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;recycleRows=!1;contentChanged=new $A;viewChange=new Ht({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;constructor(){h(new Ws("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((i,n)=>this.trackBy?this.trackBy(n.dataIndex,n.data):n)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(Bt(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._viewRepeater=this.recycleRows||this._virtualScrollEnabled()?new q6:new I8,this._virtualScrollEnabled()&&this._setupVirtualScrolling(this._virtualScrollViewport),this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(A=>{A?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._headerRowStickyUpdates.complete(),this._footerRowStickyUpdates.complete(),this._onDestroy.next(),this._onDestroy.complete(),Q4(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let A=this._dataDiffer.diff(this._renderRows);if(!A){this._updateNoDataRow(),this.contentChanged.next();return}let i=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(A,i,(n,o,a)=>this._getEmbeddedViewArgs(n.item,a),n=>n.item.data,n=>{n.operation===rc.INSERTED&&n.context&&this._renderCellTemplateForItem(n.record.item.rowDef,n.context)}),this._updateRowIndexContext(),A.forEachIdentityChange(n=>{let o=i.get(n.currentIndex);o.context.$implicit=n.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(A){this._customColumnDefs.add(A)}removeColumnDef(A){this._customColumnDefs.delete(A)}addRowDef(A){this._customRowDefs.add(A)}removeRowDef(A){this._customRowDefs.delete(A)}addHeaderRowDef(A){this._customHeaderRowDefs.add(A),this._headerRowDefChanged=!0}removeHeaderRowDef(A){this._customHeaderRowDefs.delete(A),this._headerRowDefChanged=!0}addFooterRowDef(A){this._customFooterRowDefs.add(A),this._footerRowDefChanged=!0}removeFooterRowDef(A){this._customFooterRowDefs.delete(A),this._footerRowDefChanged=!0}setNoDataRow(A){this._customNoDataRow=A}updateStickyHeaderRowStyles(){let A=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let n=ZsA(this._headerRowOutlet,"thead");n&&(n.style.display=A.length?"":"none")}let i=this._headerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["top"]),this._stickyStyler.stickRows(A,i,"top"),this._headerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyFooterRowStyles(){let A=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let n=ZsA(this._footerRowOutlet,"tfoot");n&&(n.style.display=A.length?"":"none")}let i=this._footerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["bottom"]),this._stickyStyler.stickRows(A,i,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,i),this._footerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyColumnStyles(){let A=this._getRenderedRows(this._headerRowOutlet),i=this._getRenderedRows(this._rowOutlet),n=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this.fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...A,...i,...n],["left","right"]),this._stickyColumnStylesNeedReset=!1),A.forEach((o,a)=>{this._addStickyColumnStyles([o],this._headerRowDefs[a])}),this._rowDefs.forEach(o=>{let a=[];for(let r=0;r{this._addStickyColumnStyles([o],this._footerRowDefs[a])}),Array.from(this._columnDefsByName.values()).forEach(o=>o.resetStickyChanged())}stickyColumnsUpdated(A){this._positionListener?.stickyColumnsUpdated(A)}stickyEndColumnsUpdated(A){this._positionListener?.stickyEndColumnsUpdated(A)}stickyHeaderRowsUpdated(A){this._headerRowStickyUpdates.next(A),this._positionListener?.stickyHeaderRowsUpdated(A)}stickyFooterRowsUpdated(A){this._footerRowStickyUpdates.next(A),this._positionListener?.stickyFooterRowsUpdated(A)}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let i=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||i,this._forceRecalculateCellWidths=i,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){if(!Array.isArray(this._data)||!this._renderedRange)return[];let A=[],i=Math.min(this._data.length,this._renderedRange.end),n=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let o=this._renderedRange.start;o{let r=n&&n.has(a)?n.get(a):[];if(r.length){let s=r.shift();return s.dataIndex=i,s}else return{data:A,rowDef:a,dataIndex:i}})}_cacheColumnDefs(){this._columnDefsByName.clear(),_7(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(i=>{this._columnDefsByName.has(i.name),this._columnDefsByName.set(i.name,i)})}_cacheRowDefs(){this._headerRowDefs=_7(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=_7(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=_7(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let A=this._rowDefs.filter(i=>!i.when);!this.multiTemplateDataRows&&A.length>1,this._defaultRowDef=A[0]}_renderUpdatedColumns(){let A=(a,r)=>{let s=!!r.getColumnsDiff();return a||s},i=this._rowDefs.reduce(A,!1);i&&this._forceRenderDataRows();let n=this._headerRowDefs.reduce(A,!1);n&&this._forceRenderHeaderRows();let o=this._footerRowDefs.reduce(A,!1);return o&&this._forceRenderFooterRows(),i||n||o}_switchDataSource(A){this._data=[],Q4(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),A||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=A}_observeRenderChanges(){if(!this.dataSource)return;let A;Q4(this.dataSource)?A=this.dataSource.connect(this):mB(this.dataSource)?A=this.dataSource:Array.isArray(this.dataSource)&&(A=se(this.dataSource)),this._renderChangeSubscription=Ir([A,this.viewChange]).pipe(Bt(this._onDestroy)).subscribe(([i,n])=>{this._data=i||[],this._renderedRange=n,this._dataStream.next(i),this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((A,i)=>this._renderRow(this._headerRowOutlet,A,i)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((A,i)=>this._renderRow(this._footerRowOutlet,A,i)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(A,i){let n=Array.from(i?.columns||[]).map(r=>{let s=this._columnDefsByName.get(r);return s}),o=n.map(r=>r.sticky),a=n.map(r=>r.stickyEnd);this._stickyStyler.updateStickyColumns(A,o,a,!this.fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(A){let i=[];for(let n=0;n!o.when||o.when(i,A));else{let o=this._rowDefs.find(a=>a.when&&a.when(i,A))||this._defaultRowDef;o&&n.push(o)}return n.length,n}_getEmbeddedViewArgs(A,i){let n=A.rowDef,o={$implicit:A.data};return{templateRef:n.template,context:o,index:i}}_renderRow(A,i,n,o={}){let a=A.viewContainer.createEmbeddedView(i.template,o,n);return this._renderCellTemplateForItem(i,o),a}_renderCellTemplateForItem(A,i){for(let n of this._getCellTemplates(A))EB.mostRecentCellOutlet&&EB.mostRecentCellOutlet._viewContainer.createEmbeddedView(n,i);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let A=this._rowOutlet.viewContainer;for(let i=0,n=A.length;i{let n=this._columnDefsByName.get(i);return A.extractCellTemplate(n)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let A=(i,n)=>i||n.hasStickyChanged();this._headerRowDefs.reduce(A,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(A,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(A,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let A=this._dir?this._dir.value:"ltr",i=this._injector;this._stickyStyler=new dK(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,A,this,i),(this._dir?this._dir.change:se()).pipe(Bt(this._onDestroy)).subscribe(n=>{this._stickyStyler.direction=n,this.updateStickyColumnStyles()})}_setupVirtualScrolling(A){let i=typeof requestAnimationFrame<"u"?uB:Ub;this.viewChange.next({start:0,end:0}),A.renderedRangeStream.pipe(m1(0,i),Bt(this._onDestroy)).subscribe(this.viewChange),A.attach({dataStream:this._dataStream,measureRangeSize:(n,o)=>this._measureRangeSize(n,o)}),Ir([A.renderedContentOffset,this._headerRowStickyUpdates]).pipe(Bt(this._onDestroy)).subscribe(([n,o])=>{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a!i._table||i._table===this)}_updateNoDataRow(){let A=this._customNoDataRow||this._noDataRow;if(!A)return;let i=this._rowOutlet.viewContainer.length===0;if(i===this._isShowingNoDataRow)return;let n=this._noDataRowOutlet.viewContainer;if(i){let o=n.createEmbeddedView(A.templateRef),a=o.rootNodes[0];if(o.rootNodes.length===1&&a?.nodeType===this._document.ELEMENT_NODE){a.setAttribute("role","row"),a.classList.add(...A._contentClassNames);let r=a.querySelectorAll(A._cellSelector);for(let s=0;s=A.end||i!=="vertical")return 0;let n=this.viewChange.value,o=this._rowOutlet.viewContainer;A.startn.end;let a=A.start-n.start,r=A.end-A.start,s,g;for(let I=0;I-1;I--){let d=o.get(I+a);if(d&&d.rootNodes.length){g=d.rootNodes[d.rootNodes.length-1];break}}let l=s?.getBoundingClientRect?.(),C=g?.getBoundingClientRect?.();return l&&C?C.bottom-l.top:0}_virtualScrollEnabled(){return!this._disableVirtualScrolling&&this._virtualScrollViewport!=null}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,egA,5)(o,Wh,5)(o,U7,5)(o,Tm,5)(o,EK,5),i&2){let a;ce(a=Ce())&&(n._noDataRow=a.first),ce(a=Ce())&&(n._contentColumnDefs=a),ce(a=Ce())&&(n._contentRowDefs=a),ce(a=Ce())&&(n._contentHeaderRowDefs=a),ce(a=Ce())&&(n._contentFooterRowDefs=a)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(i,n){i&2&&ne("cdk-table-fixed-layout",n.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",he],fixedLayout:[2,"fixedLayout","fixedLayout",he],recycleRows:[2,"recycleRows","recycleRows",he]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[dt([{provide:Xc,useExisting:t},{provide:Ym,useValue:null}])],ngContentSelectors:nHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Yt(iHA),Ke(0),Ke(1,1),V(2,oHA,1,0),V(3,aHA,7,0)(4,rHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[fK,uK,pK,mK],styles:[`.cdk-table-fixed-layout{table-layout:fixed} -`],encapsulation:2})}return t})();function _7(t,e){return t.concat(Array.from(e))}function ZsA(t,e){let A=e.toUpperCase(),i=t.viewContainer.element.nativeElement;for(;i;){let n=i.nodeType===1?i.nodeName:null;if(n===A)return i;if(n==="TABLE")break;i=i.parentNode}return null}var gHA=[[["caption"]],[["colgroup"],["col"]],"*"],lHA=["caption","colgroup, col","*"];function cHA(t,e){t&1&&Ke(0,2)}function CHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",2),on(3,3)(4,4),w(),m(5,"tfoot",0),on(6,5),w())}function IHA(t,e){t&1&&on(0,1)(1,3)(2,4)(3,5)}var tgA=(()=>{class t extends wK{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-table-fixed-layout",n.fixedLayout)},exportAs:["matTable"],features:[dt([{provide:wK,useExisting:t},{provide:Xc,useExisting:t},{provide:Ym,useValue:null}]),It],ngContentSelectors:lHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Yt(gHA),Ke(0),Ke(1,1),V(2,cHA,1,0),V(3,CHA,7,0)(4,IHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[fK,uK,pK,mK],styles:[`.mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:var(--mat-table-header-container-height, 56px)}mat-row{min-height:var(--mat-table-row-item-container-height, 52px)}mat-footer-row{min-height:var(--mat-table-footer-container-height, 52px)}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-sys-surface))}.mat-table-fixed-layout{table-layout:fixed}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:start;text-overflow:ellipsis}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:start}.mdc-data-table__row:last-child>.mat-mdc-header-cell{border-bottom:none}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child>.mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch} -`],encapsulation:2})}return t})(),igA=(()=>{class t extends G7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matCellDef",""]],features:[dt([{provide:G7,useExisting:t}]),It]})}return t})(),ngA=(()=>{class t extends K7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderCellDef",""]],features:[dt([{provide:K7,useExisting:t}]),It]})}return t})();var ogA=(()=>{class t extends Wh{get name(){return this._name}set name(A){this._setNameInput(A)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[dt([{provide:Wh,useExisting:t},{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}]),It]})}return t})(),agA=(()=>{class t extends $sA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[It]})}return t})();var rgA=(()=>{class t extends AgA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[It]})}return t})();var sgA=(()=>{class t extends Tm{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderRowDef",""]],inputs:{columns:[0,"matHeaderRowDef","columns"],sticky:[2,"matHeaderRowDefSticky","sticky",he]},features:[dt([{provide:Tm,useExisting:t}]),It]})}return t})();var ggA=(()=>{class t extends U7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[dt([{provide:U7,useExisting:t}]),It]})}return t})(),lgA=(()=>{class t extends QK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-header-row"],["tr","mat-header-row",""]],hostAttrs:["role","row",1,"mat-mdc-header-row","mdc-data-table__header-row"],exportAs:["matHeaderRow"],features:[dt([{provide:QK,useExisting:t}]),It],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var cgA=(()=>{class t extends hK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[dt([{provide:hK,useExisting:t}]),It],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var dHA=9007199254740991,Hm=class extends E4{_data;_renderData=new Ht([]);_filter=new Ht("");_internalPageChanges=new XA;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(e){e=Array.isArray(e)?e:[],this._data.next(e),this._renderChangesSubscription||this._filterData(e)}get filter(){return this._filter.value}set filter(e){this._filter.next(e),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(e){this._sort=e,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(e){this._paginator=e,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(e,A)=>{let i=e[A];if(Mp(i)){let n=Number(i);return n{let i=A.active,n=A.direction;return!i||n==""?e:e.sort((o,a)=>{let r=this.sortingDataAccessor(o,i),s=this.sortingDataAccessor(a,i),g=typeof r,l=typeof s;g!==l&&(g==="number"&&(r+=""),l==="number"&&(s+=""));let C=0;return r!=null&&s!=null?r>s?C=1:r{let i=A.trim().toLowerCase();return Object.values(e).some(n=>`${n}`.toLowerCase().includes(i))};constructor(e=[]){super(),this._data=new Ht(e),this._updateChangeSubscription()}_updateChangeSubscription(){let e=this._sort?fi(this._sort.sortChange,this._sort.initialized):se(null),A=this._paginator?fi(this._paginator.page,this._internalPageChanges,this._paginator.initialized):se(null),i=this._data,n=Ir([i,this._filter]).pipe(fe(([r])=>this._filterData(r))),o=Ir([n,e]).pipe(fe(([r])=>this._orderData(r))),a=Ir([o,A]).pipe(fe(([r])=>this._pageData(r)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=a.subscribe(r=>this._renderData.next(r))}_filterData(e){return this.filteredData=this.filter==null||this.filter===""?e:e.filter(A=>this.filterPredicate(A,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(e){return this.sort?this.sortData(e.slice(),this.sort):e}_pageData(e){if(!this.paginator)return e;let A=this.paginator.pageIndex*this.paginator.pageSize;return e.slice(A,A+this.paginator.pageSize)}_updatePaginator(e){Promise.resolve().then(()=>{let A=this.paginator;if(A&&(A.length=e,A.pageIndex>0)){let i=Math.ceil(A.length/A.pageSize)-1||0,n=Math.min(A.pageIndex,i);n!==A.pageIndex&&(A.pageIndex=n,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var CgA=[{metricName:"tool_trajectory_avg_score",threshold:1},{metricName:"response_match_score",threshold:.7}];var J7="0123456789abcdef",Y7=class t{constructor(e){this.bytes=e}static ofInner(e){if(e.length!==16)throw new TypeError("not 128-bit length");return new t(e)}static fromFieldsV7(e,A,i,n){if(!Number.isInteger(e)||!Number.isInteger(A)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||A<0||i<0||n<0||e>0xffffffffffff||A>4095||i>1073741823||n>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/2**40,o[1]=e/2**32,o[2]=e/2**24,o[3]=e/2**16,o[4]=e/2**8,o[5]=e,o[6]=112|A>>>8,o[7]=A,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new t(o)}static parse(e){var A,i,n,o;let a;switch(e.length){case 32:a=(A=/^[0-9a-f]{32}$/i.exec(e))===null||A===void 0?void 0:A[0];break;case 36:a=(i=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||i===void 0?void 0:i.slice(1,6).join("");break;case 38:a=(n=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e))===null||n===void 0?void 0:n.slice(1,6).join("");break;case 45:a=(o=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||o===void 0?void 0:o.slice(1,6).join("");break;default:break}if(a){let r=new Uint8Array(16);for(let s=0;s<16;s+=4){let g=parseInt(a.substring(2*s,2*s+8),16);r[s+0]=g>>>24,r[s+1]=g>>>16,r[s+2]=g>>>8,r[s+3]=g}return new t(r)}else throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15),(A===3||A===5||A===7||A===9)&&(e+="-");return e}toHex(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(A=>A===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(A=>A===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new t(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let A=0;A<16;A++){let i=this.bytes[A]-e.bytes[A];if(i!==0)return Math.sign(i)}return 0}},DK=class{constructor(e){this.timestamp_biased=0,this.counter=0,this.random=e??BHA()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,A){let i=this.generateOrAbortCore(e,A);return i===void 0&&(this.timestamp_biased=0,i=this.generateOrAbortCore(e,A)),i}generateOrAbortCore(e,A){if(!Number.isInteger(e)||e<0||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit unsigned integer");if(A<0||A>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e++,e>this.timestamp_biased)this.timestamp_biased=e,this.resetCounter();else if(e+A>=this.timestamp_biased)this.counter++,this.counter>4398046511103&&(this.timestamp_biased++,this.resetCounter());else return;return Y7.fromFieldsV7(this.timestamp_biased-1,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=this.random.nextUint32()*1024+(this.random.nextUint32()&1023)}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Y7.ofInner(e)}},BHA=()=>{if(typeof crypto<"u"&&typeof crypto.getRandomValues<"u")return new yK;if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");return{nextUint32:()=>Math.trunc(Math.random()*65536)*65536+Math.trunc(Math.random()*65536)}},yK=class{constructor(){this.buffer=new Uint32Array(8),this.cursor=65535}nextUint32(){return this.cursor>=this.buffer.length&&(crypto.getRandomValues(this.buffer),this.cursor=0),this.buffer[this.cursor++]}},IgA;var T7=()=>EHA().toString(),EHA=()=>(IgA||(IgA=new DK)).generateV4();var H7=class t{evalService=h(h0);data=h(Ca);dialogRef=h(bo);newCaseId="case"+T7().slice(0,6);constructor(){}createNewEvalCase(){!this.newCaseId||this.newCaseId==""?alert("Cannot create eval set with empty id!"):this.evalService.addCurrentSession(this.data.appName,this.data.evalSetId,this.newCaseId,this.data.sessionId,this.data.userId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-add-eval-session-dialog"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Add Current Session To Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval case name -`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newCaseId,o)||(i.newCaseId=o),o}),tA("keydown.enter",function(){return i.createNewEvalCase()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.createNewEvalCase()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newCaseId))},dependencies:[Da,rr,No,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}html.darkmode [_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var QHA={allEvalSetsHeader:"All eval sets",createNewEvalSetTooltip:"Create new evaluation set",createNewEvalSetTitle:"Create New Evaluation Set",evalSetDescription:"An evaluation set is a curated collection of evaluation cases, where each case includes input-output examples for assessing agent performance.",createEvalSetButton:"Create Evaluation Set",runEvaluationButton:"Run Evaluation",viewEvalRunHistoryTooltip:"View eval run history",caseIdHeader:"Case ID",resultHeader:"Result",viewEvalRunResultTooltip:"View eval run result",passStatus:"Pass",failStatus:"Fail",passStatusCaps:"PASS",failStatusCaps:"FAIL",passedSuffix:"Passed",failedSuffix:"Failed",addSessionToSetButtonPrefix:"Add current session to"},dgA=new yA("Eval Tab Messages",{factory:()=>QHA});var z7=class t{evalService=h(h0);data=h(Ca);dialogRef=h(bo);newSetId="evalset"+T7().slice(0,6);constructor(){}createNewEvalSet(){!this.newSetId||this.newSetId==""?alert("Cannot create eval set with empty id!"):this.evalService.createNewEvalSet(this.data.appName,this.newSetId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-new-eval-set-dialog-component"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create New Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval set name -`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newSetId,o)||(i.newSetId=o),o}),tA("keydown.enter",function(){return i.createNewEvalSet()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.createNewEvalSet()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newSetId))},dependencies:[Da,rr,No,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var hHA=["knob"],uHA=["valueIndicatorContainer"];function fHA(t,e){if(t&1&&(m(0,"div",2,1)(2,"div",5)(3,"span",6),K(4),w()()()),t&2){let A=v();p(4),qA(A.valueIndicatorText)}}var mHA=["trackActive"],pHA=["*"];function wHA(t,e){if(t&1&&GA(0,"div"),t&2){let A=e.$implicit,i=e.$index,n=v(3);Po(A===0?"mdc-slider__tick-mark--active":"mdc-slider__tick-mark--inactive"),wn("transform",n._calcTickMarkTransform(i))}}function DHA(t,e){if(t&1&&Ut(0,wHA,1,4,"div",8,wB),t&2){let A=v(2);Jt(A._tickMarks)}}function yHA(t,e){if(t&1&&(m(0,"div",6,1),V(2,DHA,2,0),w()),t&2){let A=v();p(2),W(A._cachedWidth?2:-1)}}function vHA(t,e){if(t&1&&GA(0,"mat-slider-visual-thumb",7),t&2){let A=v();$("discrete",A.discrete)("thumbPosition",1)("valueIndicatorText",A.startValueIndicatorText)}}var pi=(function(t){return t[t.START=1]="START",t[t.END=2]="END",t})(pi||{}),Zh=(function(t){return t[t.ACTIVE=0]="ACTIVE",t[t.INACTIVE=1]="INACTIVE",t})(Zh||{}),vK=new yA("_MatSlider"),BgA=new yA("_MatSliderThumb"),bHA=new yA("_MatSliderRangeThumb"),EgA=new yA("_MatSliderVisualThumb");var MHA=(()=>{class t{_cdr=h(Dt);_ngZone=h(Oe);_slider=h(vK);_renderer=h(_i);_listenerCleanups;discrete=!1;thumbPosition;valueIndicatorText;_ripple;_knob;_valueIndicatorContainer;_sliderInput;_sliderInputEl;_hoverRippleRef;_focusRippleRef;_activeRippleRef;_isHovered=!1;_isActive=!1;_isValueIndicatorVisible=!1;_hostElement=h(ge).nativeElement;_platform=h(Ii);constructor(){}ngAfterViewInit(){let A=this._slider._getInput(this.thumbPosition);A&&(this._ripple.radius=24,this._sliderInput=A,this._sliderInputEl=this._sliderInput._hostElement,this._ngZone.runOutsideAngular(()=>{let i=this._sliderInputEl,n=this._renderer;this._listenerCleanups=[n.listen(i,"pointermove",this._onPointerMove),n.listen(i,"pointerdown",this._onDragStart),n.listen(i,"pointerup",this._onDragEnd),n.listen(i,"pointerleave",this._onMouseLeave),n.listen(i,"focus",this._onFocus),n.listen(i,"blur",this._onBlur)]}))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A())}_onPointerMove=A=>{if(this._sliderInput._isFocused)return;let i=this._hostElement.getBoundingClientRect(),n=this._slider._isCursorOnSliderThumb(A,i);this._isHovered=n,n?this._showHoverRipple():this._hideRipple(this._hoverRippleRef)};_onMouseLeave=()=>{this._isHovered=!1,this._hideRipple(this._hoverRippleRef)};_onFocus=()=>{this._hideRipple(this._hoverRippleRef),this._showFocusRipple(),this._hostElement.classList.add("mdc-slider__thumb--focused")};_onBlur=()=>{this._isActive||this._hideRipple(this._focusRippleRef),this._isHovered&&this._showHoverRipple(),this._hostElement.classList.remove("mdc-slider__thumb--focused")};_onDragStart=A=>{A.button===0&&(this._isActive=!0,this._showActiveRipple())};_onDragEnd=()=>{this._isActive=!1,this._hideRipple(this._activeRippleRef),this._sliderInput._isFocused||this._hideRipple(this._focusRippleRef),this._platform.SAFARI&&this._showHoverRipple()};_showHoverRipple(){this._isShowingRipple(this._hoverRippleRef)||(this._hoverRippleRef=this._showRipple({enterDuration:0,exitDuration:0}),this._hoverRippleRef?.element.classList.add("mat-mdc-slider-hover-ripple"))}_showFocusRipple(){this._isShowingRipple(this._focusRippleRef)||(this._focusRippleRef=this._showRipple({enterDuration:0,exitDuration:0},!0),this._focusRippleRef?.element.classList.add("mat-mdc-slider-focus-ripple"))}_showActiveRipple(){this._isShowingRipple(this._activeRippleRef)||(this._activeRippleRef=this._showRipple({enterDuration:225,exitDuration:400}),this._activeRippleRef?.element.classList.add("mat-mdc-slider-active-ripple"))}_isShowingRipple(A){return A?.state===Rs.FADING_IN||A?.state===Rs.VISIBLE}_showRipple(A,i){if(!this._slider.disabled&&(this._showValueIndicator(),this._slider._isRange&&this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)._showValueIndicator(),!(this._slider._globalRippleOptions?.disabled&&!i)))return this._ripple.launch({animation:this._slider._noopAnimations?{enterDuration:0,exitDuration:0}:A,centered:!0,persistent:!0})}_hideRipple(A){if(A?.fadeOut(),this._isShowingAnyRipple())return;this._slider._isRange||this._hideValueIndicator();let i=this._getSibling();i._isShowingAnyRipple()||(this._hideValueIndicator(),i._hideValueIndicator())}_showValueIndicator(){this._hostElement.classList.add("mdc-slider__thumb--with-indicator")}_hideValueIndicator(){this._hostElement.classList.remove("mdc-slider__thumb--with-indicator")}_getSibling(){return this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)}_getValueIndicatorContainer(){return this._valueIndicatorContainer?.nativeElement}_getKnob(){return this._knob.nativeElement}_isShowingAnyRipple(){return this._isShowingRipple(this._hoverRippleRef)||this._isShowingRipple(this._focusRippleRef)||this._isShowingRipple(this._activeRippleRef)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slider-visual-thumb"]],viewQuery:function(i,n){if(i&1&&ai(ig,5)(hHA,5)(uHA,5),i&2){let o;ce(o=Ce())&&(n._ripple=o.first),ce(o=Ce())&&(n._knob=o.first),ce(o=Ce())&&(n._valueIndicatorContainer=o.first)}},hostAttrs:[1,"mdc-slider__thumb","mat-mdc-slider-visual-thumb"],inputs:{discrete:"discrete",thumbPosition:"thumbPosition",valueIndicatorText:"valueIndicatorText"},features:[dt([{provide:EgA,useExisting:t}])],decls:4,vars:2,consts:[["knob",""],["valueIndicatorContainer",""],[1,"mdc-slider__value-indicator-container"],[1,"mdc-slider__thumb-knob"],["matRipple","",1,"mat-focus-indicator",3,"matRippleDisabled"],[1,"mdc-slider__value-indicator"],[1,"mdc-slider__value-indicator-text"]],template:function(i,n){i&1&&(V(0,fHA,5,1,"div",2),GA(1,"div",3,0)(3,"div",4)),i&2&&(W(n.discrete?0:-1),p(3),$("matRippleDisabled",!0))},dependencies:[ig],styles:[`.mat-mdc-slider-visual-thumb .mat-ripple{height:100%;width:100%}.mat-mdc-slider .mdc-slider__tick-marks{justify-content:start}.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--inactive{position:absolute;left:2px} -`],encapsulation:2,changeDetection:0})}return t})(),QgA=(()=>{class t{_ngZone=h(Oe);_cdr=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_globalRippleOptions=h(S2,{optional:!0});_trackActive;_thumbs;_input;_inputs;get disabled(){return this._disabled}set disabled(A){this._disabled=A;let i=this._getInput(pi.END),n=this._getInput(pi.START);i&&(i.disabled=this._disabled),n&&(n.disabled=this._disabled)}_disabled=!1;get discrete(){return this._discrete}set discrete(A){this._discrete=A,this._updateValueIndicatorUIs()}_discrete=!1;get showTickMarks(){return this._showTickMarks}set showTickMarks(A){this._showTickMarks=A,this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI())}_showTickMarks=!1;get min(){return this._min}set min(A){let i=A==null||isNaN(A)?this._min:A;this._min!==i&&this._updateMin(i)}_min=0;color;disableRipple=!1;_updateMin(A){let i=this._min;this._min=A,this._isRange?this._updateMinRange({old:i,new:A}):this._updateMinNonRange(A),this._onMinMaxOrStepChange()}_updateMinRange(A){let i=this._getInput(pi.END),n=this._getInput(pi.START),o=i.value,a=n.value;n.min=A.new,i.min=Math.max(A.new,n.value),n.max=Math.min(i.max,i.value),n._updateWidthInactive(),i._updateWidthInactive(),A.newA.old?this._onTranslateXChangeBySideEffect(n,i):this._onTranslateXChangeBySideEffect(i,n),o!==i.value&&this._onValueChange(i),a!==n.value&&this._onValueChange(n)}_updateMaxNonRange(A){let i=this._getInput(pi.END);if(i){let n=i.value;i.max=A,i._updateThumbUIByValue(),this._updateTrackUI(i),n!==i.value&&this._onValueChange(i)}}get step(){return this._step}set step(A){let i=isNaN(A)?this._step:A;this._step!==i&&this._updateStep(i)}_step=1;_updateStep(A){this._step=A,this._isRange?this._updateStepRange():this._updateStepNonRange(),this._onMinMaxOrStepChange()}_updateStepRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START),n=A.value,o=i.value,a=i.value;A.min=this._min,i.max=this._max,A.step=this._step,i.step=this._step,this._platform.SAFARI&&(A.value=A.value,i.value=i.value),A.min=Math.max(this._min,i.value),i.max=Math.min(this._max,A.value),i._updateWidthInactive(),A._updateWidthInactive(),A.value`${A}`;_tickMarks;_noopAnimations=ji();_dirChangeSubscription;_resizeObserver=null;_cachedWidth;_cachedLeft;_rippleRadius=24;startValueIndicatorText="";endValueIndicatorText="";_endThumbTransform;_startThumbTransform;_isRange=!1;_isRtl=!1;_hasViewInitialized=!1;_tickMarkTrackWidth=0;_hasAnimation=!1;_resizeTimer=null;_platform=h(Ii);constructor(){h(Xn).load(dr),this._dir&&(this._dirChangeSubscription=this._dir.change.subscribe(()=>this._onDirChange()),this._isRtl=this._dir.value==="rtl")}_knobRadius=8;_inputPadding;ngAfterViewInit(){this._platform.isBrowser&&this._updateDimensions();let A=this._getInput(pi.END),i=this._getInput(pi.START);this._isRange=!!A&&!!i,this._cdr.detectChanges();let n=this._getThumb(pi.END);this._rippleRadius=n._ripple.radius,this._inputPadding=this._rippleRadius-this._knobRadius,this._isRange?this._initUIRange(A,i):this._initUINonRange(A),this._updateTrackUI(A),this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._observeHostResize(),this._cdr.detectChanges()}_initUINonRange(A){A.initProps(),A.initUI(),this._updateValueIndicatorUI(A),this._hasViewInitialized=!0,A._updateThumbUIByValue()}_initUIRange(A,i){A.initProps(),A.initUI(),i.initProps(),i.initUI(),A._updateMinMax(),i._updateMinMax(),A._updateStaticStyles(),i._updateStaticStyles(),this._updateValueIndicatorUIs(),this._hasViewInitialized=!0,A._updateThumbUIByValue(),i._updateThumbUIByValue()}ngOnDestroy(){this._dirChangeSubscription?.unsubscribe(),this._resizeObserver?.disconnect(),this._resizeObserver=null}_onDirChange(){this._isRtl=this._dir?.value==="rtl",this._isRange?this._onDirChangeRange():this._onDirChangeNonRange(),this._updateTickMarkUI()}_onDirChangeRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._setIsLeftThumb(),i._setIsLeftThumb(),A.translateX=A._calcTranslateXByValue(),i.translateX=i._calcTranslateXByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateWidthInactive(),i._updateWidthInactive(),A._updateThumbUIByValue(),i._updateThumbUIByValue()}_onDirChangeNonRange(){this._getInput(pi.END)._updateThumbUIByValue()}_observeHostResize(){typeof ResizeObserver>"u"||!ResizeObserver||this._ngZone.runOutsideAngular(()=>{this._resizeObserver=new ResizeObserver(()=>{this._isActive()||(this._resizeTimer&&clearTimeout(this._resizeTimer),this._onResize())}),this._resizeObserver.observe(this._elementRef.nativeElement)})}_isActive(){return this._getThumb(pi.START)._isActive||this._getThumb(pi.END)._isActive}_getValue(A=pi.END){let i=this._getInput(A);return i?i.value:this.min}_skipUpdate(){return!!(this._getInput(pi.START)?._skipUIUpdate||this._getInput(pi.END)?._skipUIUpdate)}_updateDimensions(){this._cachedWidth=this._elementRef.nativeElement.offsetWidth,this._cachedLeft=this._elementRef.nativeElement.getBoundingClientRect().left}_setTrackActiveStyles(A){let i=this._trackActive.nativeElement.style;i.left=A.left,i.right=A.right,i.transformOrigin=A.transformOrigin,i.transform=A.transform}_calcTickMarkTransform(A){let i=A*(this._tickMarkTrackWidth/(this._tickMarks.length-1));return`translateX(${this._isRtl?this._cachedWidth-6-i:i}px)`}_onTranslateXChange(A){this._hasViewInitialized&&(this._updateThumbUI(A),this._updateTrackUI(A),this._updateOverlappingThumbUI(A))}_onTranslateXChangeBySideEffect(A,i){this._hasViewInitialized&&(A._updateThumbUIByValue(),i._updateThumbUIByValue())}_onValueChange(A){this._hasViewInitialized&&(this._updateValueIndicatorUI(A),this._updateTickMarkUI(),this._cdr.detectChanges())}_onMinMaxOrStepChange(){this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.markForCheck())}_onResize(){if(this._hasViewInitialized){if(this._updateDimensions(),this._isRange){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._updateThumbUIByValue(),i._updateThumbUIByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateMinMax(),i._updateMinMax(),A._updateWidthInactive(),i._updateWidthInactive()}else{let A=this._getInput(pi.END);A&&A._updateThumbUIByValue()}this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.detectChanges()}}_thumbsOverlap=!1;_areThumbsOverlapping(){let A=this._getInput(pi.START),i=this._getInput(pi.END);return!A||!i?!1:i.translateX-A.translateX<20}_updateOverlappingThumbClassNames(A){let i=A.getSibling(),n=this._getThumb(A.thumbPosition);this._getThumb(i.thumbPosition)._hostElement.classList.remove("mdc-slider__thumb--top"),n._hostElement.classList.toggle("mdc-slider__thumb--top",this._thumbsOverlap)}_updateOverlappingThumbUI(A){!this._isRange||this._skipUpdate()||this._thumbsOverlap!==this._areThumbsOverlapping()&&(this._thumbsOverlap=!this._thumbsOverlap,this._updateOverlappingThumbClassNames(A))}_updateThumbUI(A){if(this._skipUpdate())return;let i=this._getThumb(A.thumbPosition===pi.END?pi.END:pi.START);i._hostElement.style.transform=`translateX(${A.translateX}px)`}_updateValueIndicatorUI(A){if(this._skipUpdate())return;let i=this.displayWith(A.value);if(this._hasViewInitialized?A._valuetext.set(i):A._hostElement.setAttribute("aria-valuetext",i),this.discrete){A.thumbPosition===pi.START?this.startValueIndicatorText=i:this.endValueIndicatorText=i;let n=this._getThumb(A.thumbPosition);i.length<3?n._hostElement.classList.add("mdc-slider__thumb--short-value"):n._hostElement.classList.remove("mdc-slider__thumb--short-value")}}_updateValueIndicatorUIs(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A&&this._updateValueIndicatorUI(A),i&&this._updateValueIndicatorUI(i)}_updateTickMarkTrackUI(){if(!this.showTickMarks||this._skipUpdate())return;let A=this._step&&this._step>0?this._step:1,n=(Math.floor(this.max/A)*A-this.min)/(this.max-this.min);this._tickMarkTrackWidth=(this._cachedWidth-6)*n}_updateTrackUI(A){this._skipUpdate()||(this._isRange?this._updateTrackUIRange(A):this._updateTrackUINonRange(A))}_updateTrackUIRange(A){let i=A.getSibling();if(!i||!this._cachedWidth)return;let n=Math.abs(i.translateX-A.translateX)/this._cachedWidth;A._isLeftThumb&&this._cachedWidth?this._setTrackActiveStyles({left:"auto",right:`${this._cachedWidth-i.translateX}px`,transformOrigin:"right",transform:`scaleX(${n})`}):this._setTrackActiveStyles({left:`${i.translateX}px`,right:"auto",transformOrigin:"left",transform:`scaleX(${n})`})}_updateTrackUINonRange(A){this._isRtl?this._setTrackActiveStyles({left:"auto",right:"0px",transformOrigin:"right",transform:`scaleX(${1-A.fillPercentage})`}):this._setTrackActiveStyles({left:"0px",right:"auto",transformOrigin:"left",transform:`scaleX(${A.fillPercentage})`})}_updateTickMarkUI(){if(!this.showTickMarks||this.step===void 0||this.min===void 0||this.max===void 0)return;let A=this.step>0?this.step:1;this._isRange?this._updateTickMarkUIRange(A):this._updateTickMarkUINonRange(A)}_updateTickMarkUINonRange(A){let i=this._getValue(),n=Math.max(Math.round((i-this.min)/A),0)+1,o=Math.max(Math.round((this.max-i)/A),0)-1;this._isRtl?n++:o++,this._tickMarks=Array(n).fill(Zh.ACTIVE).concat(Array(o).fill(Zh.INACTIVE))}_updateTickMarkUIRange(A){let i=this._getValue(),n=this._getValue(pi.START),o=Math.max(Math.round((n-this.min)/A),0),a=Math.max(Math.round((i-n)/A)+1,0),r=Math.max(Math.round((this.max-i)/A),0);this._tickMarks=Array(o).fill(Zh.INACTIVE).concat(Array(a).fill(Zh.ACTIVE),Array(r).fill(Zh.INACTIVE))}_getInput(A){if(A===pi.END&&this._input)return this._input;if(this._inputs?.length)return A===pi.START?this._inputs.first:this._inputs.last}_getThumb(A){return A===pi.END?this._thumbs?.last:this._thumbs?.first}_setTransition(A){this._hasAnimation=!this._platform.IOS&&A&&!this._noopAnimations,this._elementRef.nativeElement.classList.toggle("mat-mdc-slider-with-animation",this._hasAnimation)}_isCursorOnSliderThumb(A,i){let n=i.width/2,o=i.x+n,a=i.y+n,r=A.clientX-o,s=A.clientY-a;return Math.pow(r,2)+Math.pow(s,2)bK),multi:!0};var bK=(()=>{class t{_ngZone=h(Oe);_elementRef=h(ge);_cdr=h(Dt);_slider=h(vK);_platform=h(Ii);_listenerCleanups;get value(){return en(this._hostElement.value,0)}set value(A){A===null&&(A=this._getDefaultValue()),A=isNaN(A)?0:A;let i=A+"";if(!this._hasSetInitialValue){this._initialValue=i;return}this._isActive||this._setValue(i)}_setValue(A){this._hostElement.value=A,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges(),this._slider._cdr.markForCheck()}valueChange=new $A;dragStart=new $A;dragEnd=new $A;get translateX(){return this._slider.min>=this._slider.max?(this._translateX=this._tickMarkOffset,this._translateX):(this._translateX===void 0&&(this._translateX=this._calcTranslateXByValue()),this._translateX)}set translateX(A){this._translateX=A}_translateX;thumbPosition=pi.END;get min(){return en(this._hostElement.min,0)}set min(A){this._hostElement.min=A+"",this._cdr.detectChanges()}get max(){return en(this._hostElement.max,0)}set max(A){this._hostElement.max=A+"",this._cdr.detectChanges()}get step(){return en(this._hostElement.step,0)}set step(A){this._hostElement.step=A+"",this._cdr.detectChanges()}get disabled(){return he(this._hostElement.disabled)}set disabled(A){this._hostElement.disabled=A,this._cdr.detectChanges(),this._slider.disabled!==this.disabled&&(this._slider.disabled=this.disabled)}get percentage(){return this._slider.min>=this._slider.max?this._slider._isRtl?1:0:(this.value-this._slider.min)/(this._slider.max-this._slider.min)}get fillPercentage(){return this._slider._cachedWidth?this._translateX===0?0:this.translateX/this._slider._cachedWidth:this._slider._isRtl?1:0}_hostElement=this._elementRef.nativeElement;_valuetext=jA("");_knobRadius=8;_tickMarkOffset=3;_isActive=!1;_isFocused=!1;_setIsFocused(A){this._isFocused=A}_hasSetInitialValue=!1;_initialValue;_formControl;_destroyed=new XA;_skipUIUpdate=!1;_onChangeFn;_onTouchedFn=()=>{};_isControlInitialized=!1;constructor(){let A=h(_i);this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[A.listen(this._hostElement,"pointerdown",this._onPointerDown.bind(this)),A.listen(this._hostElement,"pointermove",this._onPointerMove.bind(this)),A.listen(this._hostElement,"pointerup",this._onPointerUp.bind(this))]})}ngOnDestroy(){this._listenerCleanups.forEach(A=>A()),this._destroyed.next(),this._destroyed.complete(),this.dragStart.complete(),this.dragEnd.complete()}initProps(){this._updateWidthInactive(),this.disabled!==this._slider.disabled&&(this._slider.disabled=!0),this.step=this._slider.step,this.min=this._slider.min,this.max=this._slider.max,this._initValue()}initUI(){this._updateThumbUIByValue()}_initValue(){this._hasSetInitialValue=!0,this._initialValue===void 0?this.value=this._getDefaultValue():(this._hostElement.value=this._initialValue,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges())}_getDefaultValue(){return this.min}_onBlur(){this._setIsFocused(!1),this._onTouchedFn()}_onFocus(){this._slider._setTransition(!1),this._slider._updateTrackUI(this),this._setIsFocused(!0)}_onChange(){this.valueChange.emit(this.value),this._isActive&&this._updateThumbUIByValue({withAnimation:!0})}_onInput(){this._onChangeFn?.(this.value),(this._slider.step||!this._isActive)&&this._updateThumbUIByValue({withAnimation:!0}),this._slider._onValueChange(this)}_onNgControlValueChange(){(!this._isActive||!this._isFocused)&&(this._slider._onValueChange(this),this._updateThumbUIByValue()),this._slider.disabled=this._formControl.disabled}_onPointerDown(A){if(!(this.disabled||A.button!==0)){if(this._platform.IOS){let i=this._slider._isCursorOnSliderThumb(A,this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect());this._isActive=i,this._updateWidthActive(),this._slider._updateDimensions();return}this._isActive=!0,this._setIsFocused(!0),this._updateWidthActive(),this._slider._updateDimensions(),this._slider.step||this._updateThumbUIByPointerEvent(A,{withAnimation:!0}),this.disabled||(this._handleValueCorrection(A),this.dragStart.emit({source:this,parent:this._slider,value:this.value}))}}_handleValueCorrection(A){this._skipUIUpdate=!0,setTimeout(()=>{this._skipUIUpdate=!1,this._fixValue(A)},0)}_fixValue(A){let i=A.clientX-this._slider._cachedLeft,n=this._slider._cachedWidth,o=this._slider.step===0?1:this._slider.step,a=Math.floor((this._slider.max-this._slider.min)/o),r=this._slider._isRtl?1-i/n:i/n,g=Math.round(r*a)/a*(this._slider.max-this._slider.min)+this._slider.min,l=Math.round(g/o)*o,C=this.value;if(l===C){this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation});return}this.value=l,this.valueChange.emit(this.value),this._onChangeFn?.(this.value),this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation})}_onPointerMove(A){!this._slider.step&&this._isActive&&this._updateThumbUIByPointerEvent(A)}_onPointerUp(){this._isActive&&(this._isActive=!1,this._platform.SAFARI&&this._setIsFocused(!1),this.dragEnd.emit({source:this,parent:this._slider,value:this.value}),setTimeout(()=>this._updateWidthInactive(),this._platform.IOS?10:0))}_clamp(A){let i=this._tickMarkOffset,n=this._slider._cachedWidth-this._tickMarkOffset;return Math.max(Math.min(A,n),i)}_calcTranslateXByValue(){return this._slider._isRtl?(1-this.percentage)*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset:this.percentage*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset}_calcTranslateXByPointerEvent(A){return A.clientX-this._slider._cachedLeft}_updateWidthActive(){}_updateWidthInactive(){this._hostElement.style.padding=`0 ${this._slider._inputPadding}px`,this._hostElement.style.width=`calc(100% + ${this._slider._inputPadding-this._tickMarkOffset*2}px)`,this._hostElement.style.left=`-${this._slider._rippleRadius-this._tickMarkOffset}px`}_updateThumbUIByValue(A){this.translateX=this._clamp(this._calcTranslateXByValue()),this._updateThumbUI(A)}_updateThumbUIByPointerEvent(A,i){this.translateX=this._clamp(this._calcTranslateXByPointerEvent(A)),this._updateThumbUI(i)}_updateThumbUI(A){this._slider._setTransition(!!A?.withAnimation),this._slider._onTranslateXChange(this)}writeValue(A){(this._isControlInitialized||A!==null)&&(this.value=A)}registerOnChange(A){this._onChangeFn=A,this._isControlInitialized=!0}registerOnTouched(A){this._onTouchedFn=A}setDisabledState(A){this.disabled=A}focus(){this._hostElement.focus()}blur(){this._hostElement.blur()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["input","matSliderThumb",""]],hostAttrs:["type","range",1,"mdc-slider__input"],hostVars:1,hostBindings:function(i,n){i&1&&tA("change",function(){return n._onChange()})("input",function(){return n._onInput()})("blur",function(){return n._onBlur()})("focus",function(){return n._onFocus()}),i&2&&ie("aria-valuetext",n._valuetext())},inputs:{value:[2,"value","value",en]},outputs:{valueChange:"valueChange",dragStart:"dragStart",dragEnd:"dragEnd"},exportAs:["matSliderThumb"],features:[dt([kHA,{provide:BgA,useExisting:t}])]})}return t})();var O7=class t{constructor(e,A,i){this.dialogRef=e;this.fb=A;this.data=i;this.evalMetrics=this.data.evalMetrics,this.evalForm=this.fb.group({tool_trajectory_avg_score_threshold:[this.getEvalMetricThresholdFromData("tool_trajectory_avg_score"),[Ag.required,Ag.min(0),Ag.max(1)]],response_match_score_threshold:[this.getEvalMetricThresholdFromData("response_match_score"),[Ag.required,Ag.min(0),Ag.max(1)]]})}evalForm;evalMetrics=[];getEvalMetricThresholdFromData(e){return this.evalMetrics.find(A=>A.metricName===e)?.threshold??0}onStart(){if(this.evalForm.valid){let{tool_trajectory_avg_score_threshold:e,response_match_score_threshold:A}=this.evalForm.value;for(let i of this.evalMetrics)i.metricName==="tool_trajectory_avg_score"?i.threshold=e:i.metricName==="response_match_score"&&(i.threshold=A);this.dialogRef.close(this.evalMetrics)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(at(bo),at(mJ),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-run-eval-config-dialog"]],decls:26,vars:3,consts:[[1,"dialog-container"],["mat-dialog-title","",1,"dialog-title"],[1,"eval-form",3,"formGroup"],[1,"metric-row"],[1,"metric-name"],[1,"flex-1","pl-4"],["min","0","max","1","step","0.1","thumbLabel","",1,"threshold-slider"],["matSliderThumb","","formControlName","tool_trajectory_avg_score_threshold"],[1,"threshold-value"],["matSliderThumb","","formControlName","response_match_score_threshold"],["align","end",1,"dialog-actions"],["mat-button","",1,"cancel-button",3,"click"],["mat-button","",1,"save-button",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2,"EVALUATION METRIC"),w(),m(3,"mat-dialog-content")(4,"form",2)(5,"div",3)(6,"div",4),K(7,"Tool trajectory avg score: "),w(),m(8,"div",5)(9,"mat-slider",6),GA(10,"input",7),w(),m(11,"span",8),K(12),w()()(),m(13,"div",3)(14,"div",4),K(15,"Response match score: "),w(),m(16,"div",5)(17,"mat-slider",6),GA(18,"input",9),w(),m(19,"span",8),K(20),w()()()()(),m(21,"mat-dialog-actions",10)(22,"button",11),tA("click",function(){return i.onCancel()}),K(23,"Cancel"),w(),m(24,"button",12),tA("click",function(){return i.onStart()}),K(25,"Start"),w()()()),A&2&&(p(4),$("formGroup",i.evalForm),p(8),Se(" ",i.evalForm.controls.tool_trajectory_avg_score_threshold.value," "),p(8),Se(" ",i.evalForm.controls.response_match_score_threshold.value," "))},dependencies:[Da,rr,Nn,uJ,uo,fo,CJ,r0,v2,s9,QgA,bK,Ua,fn],styles:["build.dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--run-eval-config-dialog-container-box-shadow-color)}.threshold-slider[_ngcontent-%COMP%]{--mdc-slider-active-track-color: var(--run-eval-config-dialog-threshold-slider-active-track-color);--mdc-slider-inactive-track-color: var(--run-eval-config-dialog-threshold-slider-inactive-track-color);--mdc-slider-handle-color: var(--run-eval-config-dialog-threshold-slider-handle-color);--mdc-slider-ripple-color: var(--run-eval-config-dialog-threshold-slider-ripple-color);width:100px}.metric-row[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center}.metric-name[_ngcontent-%COMP%]{width:250px}.threshold-value[_ngcontent-%COMP%]{margin-left:20px}.mdc-slider__thumb--with-indicator[_ngcontent-%COMP%]{background-color:var(--mdc-slider-handle-color, var(--run-eval-config-dialog-mdc-slider-thumb-background-color));border:none!important;box-shadow:none!important}h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}"]})};function SHA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"div"),K(2),w(),m(3,"mat-icon",2),tA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(4,"add"),w()()}if(t&2){let A=v();p(2),qA(A.i18n.allEvalSetsHeader),p(),$("matTooltip",A.i18n.createNewEvalSetTooltip)}}function xHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",3)(2,"div",4),K(3),w(),m(4,"div",5),K(5),w(),m(6,"div",6),tA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(7),w()()()}if(t&2){let A=v();p(3),Se(" ",A.i18n.createNewEvalSetTitle," "),p(2),Se(" ",A.i18n.evalSetDescription," "),p(2),Se(" ",A.i18n.createEvalSetButton," ")}}function RHA(t,e){if(t&1){let A=JA();m(0,"div",8),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectEvalSet(n))}),m(1,"div",9)(2,"span",10),K(3,"folder"),w(),m(4,"div",11),K(5),w()(),m(6,"div")(7,"mat-icon",12),K(8,"chevron_right"),w()()()}if(t&2){let A=e.$implicit;p(5),qA(A)}}function NHA(t,e){if(t&1&&(m(0,"div"),Ut(1,RHA,9,1,"div",7,Li),w()),t&2){let A=v();p(),Jt(A.evalsets)}}function FHA(t,e){if(t&1){let A=JA();m(0,"th",29)(1,"mat-checkbox",30),tA("change",function(n){Z(A);let o=v(4);return X(n?o.toggleAllRows():null)}),w()()}if(t&2){let A=v(4);p(),$("checked",A.selection.hasValue()&&A.isAllSelected())("indeterminate",A.selection.hasValue()&&!A.isAllSelected())}}function _HA(t,e){if(t&1){let A=JA();m(0,"td",31)(1,"mat-checkbox",32),tA("click",function(n){return Z(A),X(n.stopPropagation())})("change",function(n){let o=Z(A).$implicit,a=v(4);return X(n?a.selection.toggle(o):null)}),w()()}if(t&2){let A=e.$implicit,i=v(4);p(),$("checked",i.selection.isSelected(A))}}function LHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.caseIdHeader," ")}}function GHA(t,e){if(t&1){let A=JA();m(0,"td",33),tA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.getEvalCase(n))}),K(1),w()}if(t&2){let A,i=e.$implicit,n=v(4);ne("selected-eval-case",i===((A=n.selectedEvalCase())==null?null:A.evalId)),p(),Se(" ",i," ")}}function KHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.resultHeader," ")}}function UHA(t,e){if(t&1){let A=JA();m(0,"button",35),tA("click",function(){Z(A);let n=v().$implicit,o=v(4);return X(o.getSession(n))}),m(1,"span",36),K(2),w(),m(3,"div",37),K(4),w()()}if(t&2){let A=v().$implicit,i=v(4);$("ngClass",i.getEvalResultForCase(A)==1?"result-btn pass":"result-btn fail")("matTooltip",i.i18n.viewEvalRunResultTooltip),p(2),Se(" ",i.getEvalResultForCase(A)==1?"check":"close"," "),p(2),Se("",i.getEvalResultForCase(A)==1?i.i18n.passStatus:i.i18n.failStatus," ")}}function JHA(t,e){if(t&1&&(m(0,"td",31),V(1,UHA,5,4,"button",34),w()),t&2){let A=e.$implicit,i=v(4);p(),W(i.getEvalResultForCase(A)?1:-1)}}function YHA(t,e){t&1&&GA(0,"tr",38)}function THA(t,e){t&1&&GA(0,"tr",39)}function HHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",16)(2,"button",17),tA("click",function(){Z(A);let n=v(3);return X(n.openEvalConfigDialog())}),K(3),w(),m(4,"mat-icon",18),tA("click",function(){Z(A);let n=v(3);return X(n.toggleEvalHistoryButton())}),K(5,"history"),w()(),m(6,"div",19)(7,"table",20),js(8,21),pt(9,FHA,2,2,"th",22)(10,_HA,2,1,"td",23),qs(),js(11,24),pt(12,LHA,2,1,"th",22)(13,GHA,2,3,"td",25),qs(),js(14,26),pt(15,KHA,2,1,"th",22)(16,JHA,2,1,"td",23),qs(),pt(17,YHA,1,0,"tr",27)(18,THA,1,0,"tr",28),w()()()}if(t&2){let A=v(3);p(3),qA(A.i18n.runEvaluationButton),p(),$("matTooltip",A.i18n.viewEvalRunHistoryTooltip),p(3),$("dataSource",A.dataSource),p(10),$("matHeaderRowDef",A.displayedColumns),p(),$("matRowDefColumns",A.displayedColumns)}}function zHA(t,e){if(t&1&&(m(0,"div")(1,"span",50),K(2,"|"),w(),m(3,"span",51),K(4),w()()),t&2){let A=v().$implicit,i=v(4);p(4),n0("",i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.failedSuffix)}}function OHA(t,e){if(t&1&&(m(0,"span",52),K(1),w()),t&2){let A=e.$implicit;p(),n0(" ",A.metricName,": ",A.threshold," ")}}function PHA(t,e){if(t&1&&(m(0,"div",46),Ut(1,OHA,2,2,"span",52,Li),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.getEvalMetrics(A))}}function jHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",53)(2,"span"),K(3),w(),m(4,"button",54),tA("click",function(){let n=Z(A).$implicit,o=v(6);return X(o.getHistorySession(n))}),m(5,"span",36),K(6),w(),m(7,"div",37),K(8),w()()()()}if(t&2){let A=e.$implicit,i=v(6);p(3),Se(" ",A.evalId," "),p(),$("ngClass",A.finalEvalStatus==1?"result-btn pass":"result-btn fail"),p(2),Se(" ",A.finalEvalStatus==1?"check":"close"," "),p(2),Se("",A.finalEvalStatus==1?i.i18n.passStatusCaps:i.i18n.failStatusCaps," ")}}function qHA(t,e){if(t&1&&(m(0,"div",49),Ut(1,jHA,9,4,"div",null,Li),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.generateHistoryEvaluationDatasource(A.timestamp))}}function VHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",40)(2,"div",41)(3,"div",42)(4,"div",43),K(5),w(),m(6,"div",44)(7,"span",45),K(8),w(),V(9,zHA,5,2,"div"),w(),V(10,PHA,3,0,"div",46),w(),m(11,"div",47)(12,"mat-icon",48),tA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.toggleHistoryStatusCard(n.timestamp))}),K(13),w()()(),V(14,qHA,3,0,"div",49),w()()}if(t&2){let A=e.$implicit,i=v(4);p(5),qA(i.formatTimestamp(A.timestamp)),p(3),n0("",i.getPassCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.passedSuffix),p(),W(i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)>0?9:-1),p(),W(i.getEvalMetrics(A)?10:-1),p(3),qA(i.getEvaluationStatusCardActionButtonIcon(A.timestamp)),p(),W(i.isEvaluationStatusCardToggled(A.timestamp)?14:-1)}}function WHA(t,e){if(t&1&&(m(0,"div"),Ut(1,VHA,15,7,"div",null,Li),w()),t&2){let A=v(3);p(),Jt(A.getEvalHistoryOfCurrentSetSorted())}}function ZHA(t,e){if(t&1&&(m(0,"div"),V(1,HHA,19,5,"div"),V(2,WHA,3,0,"div"),w()),t&2){let A=v(2);p(),W(A.showEvalHistory()?-1:1),p(),W(A.showEvalHistory()?2:-1)}}function XHA(t,e){if(t&1){let A=JA();m(0,"button",55),tA("click",function(){Z(A);let n=v(2);return X(n.openNewEvalCaseDialog())}),m(1,"div",56)(2,"mat-icon"),K(3,"add"),w(),m(4,"div",57),K(5),w()()()}if(t&2){let A=v(2);p(5),n0(" ",A.i18n.addSessionToSetButtonPrefix," ",A.selectedEvalSet," ")}}function $HA(t,e){t&1&&(m(0,"div"),GA(1,"mat-spinner",58),w()),t&2&&(p(),$("diameter",28)("strokeWidth",3))}function AzA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",9)(2,"mat-icon",13),tA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(3,"chevron_left"),w(),m(4,"div",14),tA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(5),w()(),V(6,ZHA,3,2,"div"),V(7,XHA,6,2,"button",15),V(8,$HA,2,2,"div"),w()}if(t&2){let A=v();p(5),Se(" ",A.selectedEvalSet," "),p(),W(A.evalCases.length>0&&!A.evalRunning()?6:-1),p(),W(!A.evalRunning()&&!A.showEvalHistory()?7:-1),p(),W(A.evalRunning()?8:-1)}}var P7=new yA("EVAL_TAB_COMPONENT"),$c=class t{checkboxes=xU(bE);appName=rt("");userId=rt("");sessionId=rt("");sessionSelected=jo();shouldShowTab=jo();evalNotInstalledMsg=jo();evalCaseSelected=jo();evalSetIdSelected=jo();shouldReturnToSession=jo();evalCasesSubject=new Ht([]);changeDetectorRef=h(Dt);flagService=h(vr);i18n=h(dgA);displayedColumns=["select","evalId","finalEvalStatus"];evalsets=[];selectedEvalSet="";evalCases=[];selectedEvalCase=jA(null);deletedEvalCaseIndex=-1;dataSource=new Hm(this.evalCases);selection=new V1(!0,[]);showEvalHistory=jA(!1);evalRunning=jA(!1);evalMetrics=CgA;currentEvalResultBySet=new Map;dialog=h(Gs);appEvaluationResults={};evalService=h(h0);sessionService=h(El);constructor(){this.evalCasesSubject.subscribe(e=>{!this.selectedEvalCase()&&this.deletedEvalCaseIndex>=0&&e.length>0?(this.selectNewEvalCase(e),this.deletedEvalCaseIndex=-1):e.length===0&&this.shouldReturnToSession.emit(!0)})}ngOnChanges(e){e.appName&&(this.selectedEvalSet="",this.evalCases=[],this.getEvalSet(),this.getEvaluationResult())}ngOnInit(){}selectNewEvalCase(e){let A=this.deletedEvalCaseIndex;this.deletedEvalCaseIndex===e.length&&(A=0),this.getEvalCase(e[A])}getEvalSet(){this.appName()!==""&&this.evalService.getEvalSets(this.appName()).pipe(ta(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{e!==null&&(this.shouldShowTab.emit(!0),this.evalsets=e,this.changeDetectorRef.detectChanges())})}openNewEvalSetDialog(){this.dialog.open(z7,{width:"600px",data:{appName:this.appName()}}).afterClosed().subscribe(A=>{A&&(this.getEvalSet(),this.changeDetectorRef.detectChanges())})}openNewEvalCaseDialog(){this.dialog.open(H7,{width:"600px",data:{appName:this.appName(),userId:this.userId(),sessionId:this.sessionId(),evalSetId:this.selectedEvalSet}}).afterClosed().subscribe(A=>{A&&(this.listEvalCases(),this.changeDetectorRef.detectChanges())})}listEvalCases(){this.evalCases=[],this.evalService.listEvalCases(this.appName(),this.selectedEvalSet).subscribe(e=>{this.evalCases=e,this.dataSource=new Hm(this.evalCases),this.evalCasesSubject.next(this.evalCases),this.changeDetectorRef.detectChanges()})}runEval(){if(this.evalRunning.set(!0),this.selection.selected.length==0){alert("No case selected!"),this.evalRunning.set(!1);return}this.evalService.runEval(this.appName(),this.selectedEvalSet,this.selection.selected,this.evalMetrics).pipe(ta(e=>(e.error?.detail?.includes("not installed")&&this.evalNotInstalledMsg.emit(e.error.detail),se([])))).subscribe(e=>{this.evalRunning.set(!1),this.currentEvalResultBySet.set(this.selectedEvalSet,e),this.getEvaluationResult(),this.changeDetectorRef.detectChanges()})}selectEvalSet(e){this.selectedEvalSet=e,this.listEvalCases()}clearSelectedEvalSet(){if(this.showEvalHistory()){this.toggleEvalHistoryButton();return}this.selectedEvalSet=""}isAllSelected(){let e=this.selection.selected.length,A=this.dataSource.data.length;return e===A}toggleAllRows(){if(this.isAllSelected()){this.selection.clear();return}this.selection.select(...this.dataSource.data)}getEvalResultForCase(e){let A=this.currentEvalResultBySet.get(this.selectedEvalSet)?.filter(i=>i.evalId==e);if(!(!A||A.length==0))return A[0].finalEvalStatus}formatToolUses(e){let A=[];for(let i of e)A.push({name:i.name,args:i.args});return A}addEvalCaseResultToEvents(e,A){let i=A.evalMetricResultPerInvocation,n=-1;if(i)for(let o=0;on.evalId==e)[0],i=A.sessionId;this.sessionService.getSession(this.userId(),this.appName(),i).subscribe(n=>{this.addEvalCaseResultToEvents(n,A);let o=this.fromApiResultToSession(n);this.sessionSelected.emit(o)})}toggleEvalHistoryButton(){this.showEvalHistory.set(!this.showEvalHistory())}getEvalHistoryOfCurrentSet(){return this.appEvaluationResults[this.appName()][this.selectedEvalSet]}getEvalHistoryOfCurrentSetSorted(){let e=this.getEvalHistoryOfCurrentSet();return Object.keys(e).sort((n,o)=>o.localeCompare(n)).map(n=>({timestamp:n,evaluationResults:e[n]}))}getPassCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==1).length}getFailCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==2).length}formatTimestamp(e){let A=Number(e);if(isNaN(A))return"Invalid timestamp provided";let i=new Date(A*1e3);if(isNaN(i.getTime()))return"Invalid date created from timestamp";let n={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return new Intl.DateTimeFormat("en-US",n).format(i)}getEvaluationStatusCardActionButtonIcon(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled?"keyboard_arrow_up":"keyboard_arrow_down"}toggleHistoryStatusCard(e){this.getEvalHistoryOfCurrentSet()[e].isToggled=!this.getEvalHistoryOfCurrentSet()[e].isToggled}isEvaluationStatusCardToggled(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled}generateHistoryEvaluationDatasource(e){return this.getEvalHistoryOfCurrentSet()[e].evaluationResults}getHistorySession(e){this.addEvalCaseResultToEvents(e.sessionDetails,e);let A=this.fromApiResultToSession(e.sessionDetails);this.sessionSelected.emit(A)}getEvalCase(e){this.evalService.getEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.selectedEvalCase.set(A),this.evalCaseSelected.emit(A),this.evalSetIdSelected.emit(this.selectedEvalSet)})}resetEvalCase(){this.selectedEvalCase.set(null)}resetEvalResults(){this.currentEvalResultBySet.clear()}deleteEvalCase(e){this.evalService.deleteEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.deletedEvalCaseIndex=this.evalCases.indexOf(e),this.selectedEvalCase.set(null),this.listEvalCases(),this.changeDetectorRef.detectChanges()})}getEvaluationResult(){this.evalService.listEvalResults(this.appName()).pipe(ta(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{for(let A of e)this.evalService.getEvalResult(this.appName(),A).subscribe(i=>{this.appEvaluationResults[this.appName()]||(this.appEvaluationResults[this.appName()]={}),this.appEvaluationResults[this.appName()][i.evalSetId]||(this.appEvaluationResults[this.appName()][i.evalSetId]={});let n=i.creationTimestamp;this.appEvaluationResults[this.appName()][i.evalSetId][n]||(this.appEvaluationResults[this.appName()][i.evalSetId][n]={isToggled:!1,evaluationResults:[]});let o={isToggled:!1,evaluationResults:i.evalCaseResults.map(a=>({setId:a.id,evalId:a.evalId,finalEvalStatus:a.finalEvalStatus,evalMetricResults:a.evalMetricResults,evalMetricResultPerInvocation:a.evalMetricResultPerInvocation,sessionId:a.sessionId,sessionDetails:a.sessionDetails,overallEvalMetricResults:a.overallEvalMetricResults??[]}))};this.appEvaluationResults[this.appName()][i.evalSetId][n]=o,this.changeDetectorRef.detectChanges()})})}openEvalConfigDialog(){if(this.selection.selected.length==0){alert("No case selected!");return}this.dialog.open(O7,{maxWidth:"90vw",maxHeight:"90vh",data:{evalMetrics:this.evalMetrics}}).afterClosed().subscribe(A=>{A&&(this.evalMetrics=A,this.runEval())})}getEvalMetrics(e){if(!e||!e.evaluationResults||!e.evaluationResults.evaluationResults)return this.evalMetrics;let A=e.evaluationResults.evaluationResults;return A.length===0?this.evalMetrics:typeof A[0].overallEvalMetricResults>"u"||!A[0].overallEvalMetricResults||A[0].overallEvalMetricResults.length===0?this.evalMetrics:A[0].overallEvalMetricResults.map(n=>({metricName:n.metricName,threshold:n.threshold}))}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-eval-tab"]],viewQuery:function(A,i){A&1&&rs(i.checkboxes,bE,5),A&2&&Dr()},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"]},outputs:{sessionSelected:"sessionSelected",shouldShowTab:"shouldShowTab",evalNotInstalledMsg:"evalNotInstalledMsg",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",shouldReturnToSession:"shouldReturnToSession"},features:[ti],decls:5,vars:4,consts:[[1,"eval-container"],[1,"eval-set-actions"],[2,"cursor","pointer",3,"click","matTooltip"],[1,"empty-eval-info"],[1,"info-title"],[1,"info-detail"],[1,"info-create",3,"click"],[1,"eval-set-row"],[1,"eval-set-row",3,"click"],[2,"display","flex"],[1,"material-symbols-outlined",2,"margin-right","10px","padding-top","16px"],[2,"font-family","Roboto","font-size","14px","padding","16px","padding-top","20px"],[2,"padding-top","20px","color","#9AA0A6"],[2,"color","white","cursor","pointer",3,"click"],[2,"color","#9AA0A6","padding-top","2px","cursor","pointer",3,"click"],[1,"save-session-btn"],[1,"evaluation-tab-header"],[1,"run-eval-btn",3,"click"],[1,"evaluation-history-icon",3,"click","matTooltip"],[1,"mat-table-container",2,"margin-top","16px"],["mat-table","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","evalId"],["mat-cell","","class","eval-case-id",3,"selected-eval-case","click",4,"matCellDef"],["matColumnDef","finalEvalStatus"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],[3,"change","checked","indeterminate"],["mat-cell",""],[3,"click","change","checked"],["mat-cell","",1,"eval-case-id",3,"click"],[3,"ngClass","matTooltip"],[3,"click","ngClass","matTooltip"],[1,"material-symbols-outlined"],[2,"padding-top","4px"],["mat-header-row",""],["mat-row",""],[1,"status-card"],[1,"status-card__overview"],[1,"status-card__info"],[1,"status-card__timestamp"],[1,"status-card__summary"],[1,"status-card__passed"],[1,"status-card__metrics"],[1,"status-card__action"],[3,"click"],[1,"status-card__history-cases"],[1,"status-card__separator"],[1,"status-card__failed"],[1,"status-card__metric"],[1,"status-card__history-case"],[3,"click","ngClass"],[1,"save-session-btn",3,"click"],[1,"save-session-btn-detail"],[1,"save-session-btn-text"],[1,"eval-spinner",3,"diameter","strokeWidth"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,SHA,5,2,"div",1),V(2,xHA,8,3,"div"),V(3,NHA,3,0,"div"),V(4,AzA,9,4,"div"),w()),A&2&&(p(),W(i.selectedEvalSet==""?1:-1),p(),W(i.evalsets.length==0?2:-1),p(),W(i.evalsets.length>0&&i.selectedEvalSet==""?3:-1),p(),W(i.selectedEvalSet!=""?4:-1))},dependencies:[Fn,xa,tgA,ogA,ngA,agA,bE,igA,rgA,gs,sgA,lgA,ggA,cgA,B1],styles:[".eval-container[_ngcontent-%COMP%]{margin-top:20px;padding-left:25px;padding-right:25px}.eval-case-id[_ngcontent-%COMP%]{cursor:pointer}.eval-set-actions[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--eval-tab-eval-set-actions-color);font-style:normal;font-weight:700;font-size:14px}.empty-eval-info[_ngcontent-%COMP%]{margin-top:12px;background-color:var(--eval-tab-empty-eval-info-background-color);border-radius:8px;box-shadow:0 2px 6px 2px var(--eval-tab-empty-eval-info-box-shadow-color1),0 1px 2px 0 var(--eval-tab-empty-eval-info-box-shadow-color2)}.info-title[_ngcontent-%COMP%]{color:var(--eval-tab-info-title-color);font-family:Roboto;font-size:14px;font-weight:500;padding-top:13px;padding-right:16px;padding-left:16px}.info-detail[_ngcontent-%COMP%]{color:var(--eval-tab-info-detail-color);font-family:Roboto;font-size:14px;font-weight:400;padding-top:13px;padding-right:16px;padding-left:16px;letter-spacing:.2px}.info-create[_ngcontent-%COMP%]{color:var(--eval-tab-info-create-color);font-size:14px;font-style:normal;font-weight:500;padding-right:16px;padding-left:16px;margin-top:19px;padding-bottom:16px;cursor:pointer}.eval-set-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;cursor:pointer}.selected-eval-case[_ngcontent-%COMP%]{font-weight:900;color:var(--eval-tab-selected-eval-case-color)}.save-session-btn[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--eval-tab-save-session-btn-background-color1) 0%,var(--eval-tab-save-session-btn-background-color1) 100%),var(--eval-tab-save-session-btn-background-color2);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.save-session-btn-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.save-session-btn-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--eval-tab-save-session-btn-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.run-eval-btn[_ngcontent-%COMP%]{border-radius:4px;border:1px solid var(--eval-tab-run-eval-btn-border-color);background-color:transparent;padding:8px 24px;margin-top:16px;color:var(--eval-tab-run-eval-btn-color);cursor:pointer}.run-eval-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-run-eval-btn-hover-background-color)}.result-btn[_ngcontent-%COMP%]{display:flex;background-color:transparent;border-radius:4px;border:1px solid var(--eval-tab-result-btn-border-color);margin-top:4px;cursor:pointer}.result-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-result-btn-hover-background-color)}.result-btn.pass[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-pass-color)}.result-btn.fail[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-fail-color)}.evaluation-tab-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.evaluation-history-icon[_ngcontent-%COMP%]{cursor:pointer;margin-top:4px}.status-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;border-radius:8px;background-color:var(--eval-tab-status-card-background-color);padding:12px 16px;margin-top:12px}.status-card__overview[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.status-card__info[_ngcontent-%COMP%]{display:flex;flex-direction:column}.status-card__timestamp[_ngcontent-%COMP%]{font-size:.9em;color:var(--eval-tab-status-card-timestamp-color);margin-bottom:5px}.status-card__summary[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.95em;font-weight:500}.status-card__metrics[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.75em;font-weight:300;margin-top:3px}.status-card__metric[_ngcontent-%COMP%]{width:180px;color:var(--eval-tab-status-card-metric-color)}.status-card__failed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-failed-color)}.status-card__separator[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-separator-color);margin:0 8px}.status-card__passed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-passed-color)}.status-card__action[_ngcontent-%COMP%]{display:flex;align-items:center}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-action-mat-icon-color);cursor:pointer;transition:transform .2s ease-in-out}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-icon-color);font-size:1.2em;cursor:pointer}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__history-cases[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-top:3px;justify-content:flex-start;width:100%}.status-card__history-case[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:15px}.eval-spinner[_ngcontent-%COMP%]{margin-top:12px}"]})};var q7=new yA("PendingEventService"),j7=class{};function ezA(t,e){t&1&&(m(0,"h2",0),K(1,"Events List"),w())}function tzA(t,e){t&1&&(m(0,"h2",0),K(1,"Send Response To Pending Event"),w())}function izA(t,e){t&1&&(m(0,"h2",4),K(1,"Events List"),w())}function nzA(t,e){t&1&&(m(0,"h2",4),K(1,"Send Response To Pending Event"),w())}function ozA(t,e){if(t&1){let A=JA();m(0,"div")(1,"p"),K(2,"Name"),w(),m(3,"p"),K(4),w(),m(5,"p"),K(6,"Args"),w(),m(7,"p"),K(8),w(),m(9,"mat-form-field",5)(10,"mat-label"),K(11,"Response"),w(),m(12,"textarea",6),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.selectedEvent.response,n)||(o.selectedEvent.response=n),X(n)}),w()()()}if(t&2){let A=v();p(4),qA(A.selectedEvent.name),p(4),qA(A.argsToJson(A.selectedEvent.args)),p(4),Qo("ngModel",A.selectedEvent.response)}}function azA(t,e){if(t&1){let A=JA();m(0,"button",7),tA("click",function(){Z(A);let n=v();return X(n.sendResponse())}),K(1),w()}if(t&2){let A=v();$("disabled",A.sending),p(),Se(" ",A.sending?"Sending...":"Send"," ")}}var V7=class t{dialogRef=h(bo);data=h(Ca);agentService=h(sg);pendingEventService=h(q7);selectedEvent=this.data.event;appName=this.data.appName;userId=this.data.userId;sessionId=this.data.sessionId;functionCallEventId=this.data.functionCallEventId;sending=!1;response=[];constructor(){}argsToJson(e){return JSON.stringify(e)}sendResponse(){this.sending=!0;let e={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[]},invocationId:this.data.invocationId};this.selectedEvent.response&&(e.functionCallEventId=this.functionCallEventId,e.newMessage.parts.push(this.pendingEventService.createFunctionResponse(this.selectedEvent.id,this.selectedEvent.name,{response:this.selectedEvent.response}))),this.agentService.runSse(e).subscribe({next:A=>nt(this,null,function*(){this.response.push(A)}),error:A=>console.error("SSE error:",A),complete:()=>{this.sending=!1,this.dialogRef.close({response:this.response,events:[this.selectedEvent]})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-pending-event-dialog"]],decls:10,vars:6,consts:[["mat-dialog-title",""],["mat-dialog-title","","class","dialog-title",4,"ngIf"],["mat-button","",3,"disabled"],["mat-button","","mat-dialog-close",""],["mat-dialog-title","",1,"dialog-title"],["appearance","outline",1,"response-textarea"],["matInput","",3,"ngModelChange","ngModel"],["mat-button","",3,"click","disabled"]],template:function(A,i){A&1&&(V(0,ezA,2,0,"h2",0),V(1,tzA,2,0,"h2",0),pt(2,izA,2,0,"h2",1)(3,nzA,2,0,"h2",1),m(4,"mat-dialog-content"),V(5,ozA,13,3,"div"),w(),m(6,"mat-dialog-actions"),V(7,azA,2,2,"button",2),m(8,"button",3),K(9,"Close"),w()()),A&2&&(W(i.selectedEvent?-1:0),p(),W(i.selectedEvent?1:-1),p(),$("ngIf",!i.selectedEvent),p(),$("ngIf",i.selectedEvent),p(2),W(i.selectedEvent?5:-1),p(2),W(i.selectedEvent&&i.selectedEvent.response?7:-1))},dependencies:[Da,rl,rr,No,Gg,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:[".response-textarea[_ngcontent-%COMP%]{min-width:500px;margin-top:15px}.dialog-title[_ngcontent-%COMP%]{font-weight:700;font-size:large}"]})};var zm=class t{constructor(e,A){this.dialogRef=e;this.data=A}onConfirm(){this.dialogRef.close(!0)}onCancel(){this.dialogRef.close(!1)}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-delete-session-dialog"]],decls:11,vars:4,consts:[[1,"confirm-delete-wrapper"],["mat-dialog-title",""],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content")(4,"p"),K(5),w()(),m(6,"mat-dialog-actions",2)(7,"button",3),tA("click",function(){return i.onCancel()}),K(8),w(),m(9,"button",4),tA("click",function(){return i.onConfirm()}),K(10),w()()()),A&2&&(p(2),qA(i.data.title),p(3),qA(i.data.message),p(3),qA(i.data.cancelButtonText),p(2),qA(i.data.confirmButtonText))},dependencies:[Da,rr,Ua,fn],encapsulation:2})};var RK=["*"];function rzA(t,e){t&1&&Ke(0)}var szA=["tabListContainer"],gzA=["tabList"],lzA=["tabListInner"],czA=["nextPaginator"],CzA=["previousPaginator"],IzA=["content"];function dzA(t,e){}var BzA=["tabBodyWrapper"],EzA=["tabHeader"];function QzA(t,e){}function hzA(t,e){if(t&1&&pt(0,QzA,0,0,"ng-template",12),t&2){let A=v().$implicit;$("cdkPortalOutlet",A.templateLabel)}}function uzA(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;qA(A.textLabel)}}function fzA(t,e){if(t&1){let A=JA();m(0,"div",7,2),tA("click",function(){let n=Z(A),o=n.$implicit,a=n.$index,r=v(),s=An(1);return X(r._handleClick(o,s,a))})("cdkFocusChange",function(n){let o=Z(A).$index,a=v();return X(a._tabFocusChanged(n,o))}),GA(2,"span",8)(3,"div",9),m(4,"span",10)(5,"span",11),V(6,hzA,1,1,null,12)(7,uzA,1,1),w()()()}if(t&2){let A=e.$implicit,i=e.$index,n=An(1),o=v();Po(A.labelClass),ne("mdc-tab--active",o.selectedIndex===i),$("id",o._getTabLabelId(A,i))("disabled",A.disabled)("fitInkBarToContent",o.fitInkBarToContent),ie("tabIndex",o._getTabIndex(i))("aria-posinset",i+1)("aria-setsize",o._tabs.length)("aria-controls",o._getTabContentId(i))("aria-selected",o.selectedIndex===i)("aria-label",A.ariaLabel||null)("aria-labelledby",!A.ariaLabel&&A.ariaLabelledby?A.ariaLabelledby:null),p(3),$("matRippleTrigger",n)("matRippleDisabled",A.disabled||o.disableRipple),p(3),W(A.templateLabel?6:7)}}function mzA(t,e){t&1&&Ke(0)}function pzA(t,e){if(t&1){let A=JA();m(0,"mat-tab-body",13),tA("_onCentered",function(){Z(A);let n=v();return X(n._removeTabBodyWrapperHeight())})("_onCentering",function(n){Z(A);let o=v();return X(o._setTabBodyWrapperHeight(n))})("_beforeCentering",function(n){Z(A);let o=v();return X(o._bodyCentered(n))}),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v();Po(A.bodyClass),$("id",n._getTabContentId(i))("content",A.content)("position",A.position)("animationDuration",n.animationDuration)("preserveContent",n.preserveContent),ie("tabindex",n.contentTabIndex!=null&&n.selectedIndex===i?n.contentTabIndex:null)("aria-labelledby",n._getTabLabelId(A,i))("aria-hidden",n.selectedIndex!==i)}}var wzA=new yA("MatTabContent"),DzA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabContent",""]],features:[dt([{provide:wzA,useExisting:t}])]})}return t})(),yzA=new yA("MatTabLabel"),mgA=new yA("MAT_TAB"),NK=(()=>{class t extends VH{_closestTab=h(mgA,{optional:!0});static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[dt([{provide:yzA,useExisting:t}]),It]})}return t})(),pgA=new yA("MAT_TAB_GROUP"),Om=(()=>{class t{_viewContainerRef=h(Oo);_closestTabGroup=h(pgA,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(A){this._setTemplateLabelInput(A)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new XA;position=null;origin=null;isActive=!1;constructor(){h(Xn).load(dr)}ngOnChanges(A){(A.hasOwnProperty("textLabel")||A.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new Is(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(A){A&&A._closestTab===this&&(this._templateLabel=A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab"]],contentQueries:function(i,n,o){if(i&1&&fa(o,NK,5)(o,DzA,7,Tn),i&2){let a;ce(a=Ce())&&(n.templateLabel=a.first),ce(a=Ce())&&(n._explicitContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(Tn,7),i&2){let o;ce(o=Ce())&&(n._implicitContent=o.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(i,n){i&2&&ie("id",null)},inputs:{disabled:[2,"disabled","disabled",he],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[dt([{provide:mgA,useExisting:t}]),ti],ngContentSelectors:RK,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),gp(0,rzA,1,0,"ng-template"))},encapsulation:2})}return t})(),MK="mdc-tab-indicator--active",hgA="mdc-tab-indicator--no-transition",kK=class{_items;_currentItem;constructor(e){this._items=e}hide(){this._items.forEach(e=>e.deactivateInkBar()),this._currentItem=void 0}alignToElement(e){let A=this._items.find(n=>n.elementRef.nativeElement===e),i=this._currentItem;if(A!==i&&(i?.deactivateInkBar(),A)){let n=i?.elementRef.nativeElement.getBoundingClientRect?.();A.activateInkBar(n),this._currentItem=A}}},vzA=(()=>{class t{_elementRef=h(ge);_inkBarElement=null;_inkBarContentElement=null;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(A){this._fitToContent!==A&&(this._fitToContent=A,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(A){let i=this._elementRef.nativeElement;if(!A||!i.getBoundingClientRect||!this._inkBarContentElement){i.classList.add(MK);return}let n=i.getBoundingClientRect(),o=A.width/n.width,a=A.left-n.left;i.classList.add(hgA),this._inkBarContentElement.style.setProperty("transform",`translateX(${a}px) scaleX(${o})`),i.getBoundingClientRect(),i.classList.remove(hgA),i.classList.add(MK),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(MK)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let A=this._elementRef.nativeElement.ownerDocument||document,i=this._inkBarElement=A.createElement("span"),n=this._inkBarContentElement=A.createElement("span");i.className="mdc-tab-indicator",n.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",i.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let A=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;A.appendChild(this._inkBarElement)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he]}})}return t})();var wgA=(()=>{class t extends vzA{elementRef=h(ge);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(i,n){i&2&&(ie("aria-disabled",!!n.disabled),ne("mat-mdc-tab-disabled",n.disabled))},inputs:{disabled:[2,"disabled","disabled",he]},features:[It]})}return t})(),ugA={passive:!0},bzA=650,MzA=100,kzA=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_viewportRuler=h(Ls);_dir=h(Ro,{optional:!0});_ngZone=h(Oe);_platform=h(Ii);_sharedResizeObserver=h(Hp);_injector=h(ft);_renderer=h(_i);_animationsDisabled=ji();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new XA;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged=!1;_keyManager;_currentTextContent;_stopScrolling=new XA;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){let i=isNaN(A)?0:A;this._selectedIndex!=i&&(this._selectedIndexChanged=!0,this._selectedIndex=i,this._keyManager&&this._keyManager.updateActiveItem(i))}_selectedIndex=0;selectFocusedIndex=new $A;indexFocused=new $A;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),ugA),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),ugA))}ngAfterContentInit(){let A=this._dir?this._dir.change:se("ltr"),i=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Os(32),Bt(this._destroyed)),n=this._viewportRuler.change(150).pipe(Bt(this._destroyed)),o=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new s0(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),Yn(o,{injector:this._injector}),fi(A,n,i,this._items.changes,this._itemsResized()).pipe(Bt(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),o()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(a=>{this.indexFocused.emit(a),this._setTabFocus(a)})}_itemsResized(){return typeof ResizeObserver!="function"?ja:this._items.changes.pipe(cn(this._items),Si(A=>new $i(i=>this._ngZone.runOutsideAngular(()=>{let n=new ResizeObserver(o=>i.next(o));return A.forEach(o=>n.observe(o.elementRef.nativeElement)),()=>{n.disconnect()}}))),Fg(1),Ze(A=>A.some(i=>i.contentRect.width>0&&i.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(A){if(!pa(A))switch(A.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let i=this._items.get(this.focusIndex);i&&!i.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(A))}break;default:this._keyManager?.onKeydown(A)}}_onContentChanges(){let A=this._elementRef.nativeElement.textContent;A!==this._currentTextContent&&(this._currentTextContent=A||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(A){!this._isValidIndex(A)||this.focusIndex===A||!this._keyManager||this._keyManager.setActiveItem(A)}_isValidIndex(A){return this._items?!!this._items.toArray()[A]:!0}_setTabFocus(A){if(this._showPaginationControls&&this._scrollToLabel(A),this._items&&this._items.length){this._items.toArray()[A].focus();let i=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?i.scrollLeft=0:i.scrollLeft=i.scrollWidth-i.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let A=this.scrollDistance,i=this._getLayoutDirection()==="ltr"?-A:A;this._tabList.nativeElement.style.transform=`translateX(${Math.round(i)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(A){this._scrollTo(A)}_scrollHeader(A){let i=this._tabListContainer.nativeElement.offsetWidth,n=(A=="before"?-1:1)*i/3;return this._scrollTo(this._scrollDistance+n)}_handlePaginatorClick(A){this._stopInterval(),this._scrollHeader(A)}_scrollToLabel(A){if(this.disablePagination)return;let i=this._items?this._items.toArray()[A]:null;if(!i)return;let n=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:o,offsetWidth:a}=i.elementRef.nativeElement,r,s;this._getLayoutDirection()=="ltr"?(r=o,s=r+a):(s=this._tabListInner.nativeElement.offsetWidth-o,r=s-a);let g=this.scrollDistance,l=this.scrollDistance+n;rl&&(this.scrollDistance+=Math.min(s-l,r-g))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let A=this._tabListInner.nativeElement.scrollWidth,i=this._elementRef.nativeElement.offsetWidth,n=A-i>=5;n||(this.scrollDistance=0),n!==this._showPaginationControls&&(this._showPaginationControls=n,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let A=this._tabListInner.nativeElement.scrollWidth,i=this._tabListContainer.nativeElement.offsetWidth;return A-i||0}_alignInkBarToSelectedTab(){let A=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,i=A?A.elementRef.nativeElement:null;i?this._inkBar.alignToElement(i):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(A,i){i&&i.button!=null&&i.button!==0||(this._stopInterval(),Ap(bzA,MzA).pipe(Bt(fi(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:n,distance:o}=this._scrollHeader(A);(o===0||o>=n)&&this._stopInterval()}))}_scrollTo(A){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let i=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(i,A)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:i,distance:this._scrollDistance}}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{disablePagination:[2,"disablePagination","disablePagination",he],selectedIndex:[2,"selectedIndex","selectedIndex",en]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return t})(),SzA=(()=>{class t extends kzA{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new kK(this._items),super.ngAfterContentInit()}_itemSelected(A){A.preventDefault()}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-tab-header"]],contentQueries:function(i,n,o){if(i&1&&fa(o,wgA,4),i&2){let a;ce(a=Ce())&&(n._items=a)}},viewQuery:function(i,n){if(i&1&&ai(szA,7)(gzA,7)(lzA,7)(czA,5)(CzA,5),i&2){let o;ce(o=Ce())&&(n._tabListContainer=o.first),ce(o=Ce())&&(n._tabList=o.first),ce(o=Ce())&&(n._tabListInner=o.first),ce(o=Ce())&&(n._nextPaginator=o.first),ce(o=Ce())&&(n._previousPaginator=o.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mat-mdc-tab-header-pagination-controls-enabled",n._showPaginationControls)("mat-mdc-tab-header-rtl",n._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",he]},features:[It],ngContentSelectors:RK,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",5,0),tA("click",function(){return Z(o),X(n._handlePaginatorClick("before"))})("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("before",r))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(2,"div",6),w(),m(3,"div",7,1),tA("keydown",function(r){return Z(o),X(n._handleKeydown(r))}),m(5,"div",8,2),tA("cdkObserveContent",function(){return Z(o),X(n._onContentChanges())}),m(7,"div",9,3),Ke(9),w()()(),m(10,"div",10,4),tA("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("after",r))})("click",function(){return Z(o),X(n._handlePaginatorClick("after"))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(12,"div",6),w()}i&2&&(ne("mat-mdc-tab-header-pagination-disabled",n._disableScrollBefore),$("matRippleDisabled",n._disableScrollBefore||n.disableRipple),p(3),ne("_mat-animation-noopable",n._animationsDisabled),p(2),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby||null),p(5),ne("mat-mdc-tab-header-pagination-disabled",n._disableScrollAfter),$("matRippleDisabled",n._disableScrollAfter||n.disableRipple))},dependencies:[ig,FJ],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}} -`],encapsulation:2})}return t})(),xzA=new yA("MAT_TABS_CONFIG"),fgA=(()=>{class t extends Yg{_host=h(SK);_ngZone=h(Oe);_centeringSub=Jn.EMPTY;_leavingSub=Jn.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(cn(this._host._isCenterPosition())).subscribe(A=>{this._host._content&&A&&!this.hasAttached()&&this._ngZone.run(()=>{Promise.resolve().then(),this.attach(this._host._content)})}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this._ngZone.run(()=>this.detach())})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabBodyHost",""]],features:[It]})}return t})(),SK=(()=>{class t{_elementRef=h(ge);_dir=h(Ro,{optional:!0});_ngZone=h(Oe);_injector=h(ft);_renderer=h(_i);_diAnimationsDisabled=ji();_eventCleanups;_initialized=!1;_fallbackTimer;_positionIndex;_dirChangeSubscription=Jn.EMPTY;_position;_previousPosition;_onCentering=new $A;_beforeCentering=new $A;_afterLeavingCenter=new $A;_onCentered=new $A(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(A){this._positionIndex=A,this._computePositionAnimationState()}constructor(){if(this._dir){let A=h(Dt);this._dirChangeSubscription=this._dir.change.subscribe(i=>{this._computePositionAnimationState(i),A.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),Yn(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(A=>A()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement,i=n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),n.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(A,"transitionstart",n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(A,"transitionend",i),this._renderer.listen(A,"transitioncancel",i)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let A=this._position==="center";this._beforeCentering.emit(A),A&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(A){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",A)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(A=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=A=="ltr"?"left":"right":this._positionIndex>0?this._position=A=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),Yn(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-body"]],viewQuery:function(i,n){if(i&1&&ai(fgA,5)(IzA,5),i&2){let o;ce(o=Ce())&&(n._portalHost=o.first),ce(o=Ce())&&(n._contentElement=o.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(i,n){i&2&&ie("inert",n._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(i,n){i&1&&(m(0,"div",1,0),pt(2,dzA,0,0,"ng-template",2),w()),i&2&&ne("mat-tab-body-content-left",n._position==="left")("mat-tab-body-content-right",n._position==="right")("mat-tab-body-content-can-animate",n._position==="center"||n._previousPosition==="center")},dependencies:[fgA,BC],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-tab-body-animating>.mat-mdc-tab-body-content{min-height:1px}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)} -`],encapsulation:2})}return t})(),W7=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_ngZone=h(Oe);_tabsSubscription=Jn.EMPTY;_tabLabelSubscription=Jn.EMPTY;_tabBodySubscription=Jn.EMPTY;_diAnimationsDisabled=ji();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new ol;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(A){this._fitInkBarToContent=A,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){this._indexToSelect=isNaN(A)?null:A}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(A){let i=A+"";this._animationDuration=/^\d+$/.test(i)?A+"ms":i}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(A){this._contentTabIndex=isNaN(A)?null:A}_contentTabIndex=null;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(A){let i=this._elementRef.nativeElement.classList;i.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),A&&i.add("mat-tabs-with-background",`mat-background-${A}`),this._backgroundColor=A}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new $A;focusChange=new $A;animationDone=new $A;selectedTabChange=new $A(!0);_groupId;_isServer=!h(Ii).isBrowser;constructor(){let A=h(xzA,{optional:!0});this._groupId=h(an).getId("mat-tab-group-"),this.animationDuration=A&&A.animationDuration?A.animationDuration:"500ms",this.disablePagination=A&&A.disablePagination!=null?A.disablePagination:!1,this.dynamicHeight=A&&A.dynamicHeight!=null?A.dynamicHeight:!1,A?.contentTabIndex!=null&&(this.contentTabIndex=A.contentTabIndex),this.preserveContent=!!A?.preserveContent,this.fitInkBarToContent=A&&A.fitInkBarToContent!=null?A.fitInkBarToContent:!1,this.stretchTabs=A&&A.stretchTabs!=null?A.stretchTabs:!0,this.alignTabs=A&&A.alignTabs!=null?A.alignTabs:null}ngAfterContentChecked(){let A=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=A){let i=this._selectedIndex==null;if(!i){this.selectedTabChange.emit(this._createChangeEvent(A));let n=this._tabBodyWrapper.nativeElement;n.style.minHeight=n.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((n,o)=>n.isActive=o===A),i||(this.selectedIndexChange.emit(A),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((i,n)=>{i.position=n-A,this._selectedIndex!=null&&i.position==0&&!i.origin&&(i.origin=A-this._selectedIndex)}),this._selectedIndex!==A&&(this._selectedIndex=A,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let A=this._clampTabIndex(this._indexToSelect);if(A===this._selectedIndex){let i=this._tabs.toArray(),n;for(let o=0;o{i[A].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(A))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(cn(this._allTabs)).subscribe(A=>{this._tabs.reset(A.filter(i=>i._closestTabGroup===this||!i._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(A){let i=this._tabHeader;i&&(i.focusIndex=A)}_focusChanged(A){this._lastFocusedTabIndex=A,this.focusChange.emit(this._createChangeEvent(A))}_createChangeEvent(A){let i=new xK;return i.index=A,this._tabs&&this._tabs.length&&(i.tab=this._tabs.toArray()[A]),i}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=fi(...this._tabs.map(A=>A._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(A){return Math.min(this._tabs.length-1,Math.max(A||0,0))}_getTabLabelId(A,i){return A.id||`${this._groupId}-label-${i}`}_getTabContentId(A){return`${this._groupId}-content-${A}`}_setTabBodyWrapperHeight(A){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=A;return}let i=this._tabBodyWrapper.nativeElement;i.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(i.style.height=A+"px")}_removeTabBodyWrapperHeight(){let A=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=A.clientHeight,A.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(A,i,n){i.focusIndex=n,A.disabled||(this.selectedIndex=n)}_getTabIndex(A){let i=this._lastFocusedTabIndex??this.selectedIndex;return A===i?0:-1}_tabFocusChanged(A,i){A&&A!=="mouse"&&A!=="touch"&&(this._tabHeader.focusIndex=i)}_bodyCentered(A){A&&this._tabBodies?.forEach((i,n)=>i._setActiveClass(n===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-group"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Om,5),i&2){let a;ce(a=Ce())&&(n._allTabs=a)}},viewQuery:function(i,n){if(i&1&&ai(BzA,5)(EzA,5)(SK,5),i&2){let o;ce(o=Ce())&&(n._tabBodyWrapper=o.first),ce(o=Ce())&&(n._tabHeader=o.first),ce(o=Ce())&&(n._tabBodies=o)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(i,n){i&2&&(ie("mat-align-tabs",n.alignTabs),Po("mat-"+(n.color||"primary")),wn("--mat-tab-animation-duration",n.animationDuration),ne("mat-mdc-tab-group-dynamic-height",n.dynamicHeight)("mat-mdc-tab-group-inverted-header",n.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",n.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",he],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",he],selectedIndex:[2,"selectedIndex","selectedIndex",en],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",en],disablePagination:[2,"disablePagination","disablePagination",he],disableRipple:[2,"disableRipple","disableRipple",he],preserveContent:[2,"preserveContent","preserveContent",he],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[dt([{provide:pgA,useExisting:t}])],ngContentSelectors:RK,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"mat-tab-header",3,0),tA("indexFocused",function(r){return Z(o),X(n._focusChanged(r))})("selectFocusedIndex",function(r){return Z(o),X(n.selectedIndex=r)}),Ut(2,fzA,8,17,"div",4,Li),w(),V(4,mzA,1,0),m(5,"div",5,1),Ut(7,pzA,1,10,"mat-tab-body",6,Li),w()}i&2&&($("selectedIndex",n.selectedIndex||0)("disableRipple",n.disableRipple)("disablePagination",n.disablePagination),cp("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby),p(2),Jt(n._tabs),p(2),W(n._isServer?4:-1),p(),ne("_mat-animation-noopable",n._animationsDisabled()),p(2),Jt(n._tabs))},dependencies:[SzA,wgA,d9,ig,Yg,SK],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1;touch-action:manipulation}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important} -`],encapsulation:2})}return t})(),xK=class{index;tab};var Z7=new yA("LOGO_COMPONENT");var RzA={noSessionsFound:"No sessions found",readonlyChip:"Read-only",filterSessionsLabel:"Search using session ID"},DgA=new yA("Session Tab Messages",{factory:()=>RzA});function NzA(t,e){if(t&1&&(m(0,"div",1)(1,"mat-form-field",4)(2,"mat-label"),K(3),w(),m(4,"mat-icon",5),K(5,"filter_list"),w(),GA(6,"input",6),w()()),t&2){let A=v();p(3),qA(A.i18n.filterSessionsLabel),p(3),$("formControl",A.filterControl)}}function FzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function _zA(t,e){if(t&1&&(m(0,"div",3),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noSessionsFound)}}function LzA(t,e){if(t&1&&(m(0,"div",14)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w()),t&2){let A=v(3);p(3),Se(" ",A.i18n.readonlyChip," ")}}function GzA(t,e){if(t&1){let A=JA();m(0,"div",10),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.getSession(n.id))}),m(1,"div",11)(2,"div",12),K(3),w(),m(4,"div",13),K(5),w()(),V(6,LzA,4,1,"div",14),ri(7,"async"),w()}if(t&2){let A=e.$implicit,i=v(2);$("ngClass",A.id===i.sessionId?"session-item current":"session-item"),p(3),qA(A.id),p(2),qA(i.getDate(A)),p(),W(Ci(7,4,i.sessionService.canEdit(i.userId,A))===!1?6:-1)}}function KzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function UzA(t,e){if(t&1){let A=JA();V(0,KzA,2,0,"div",2),m(1,"div",15)(2,"button",16),tA("click",function(){Z(A);let n=v(2);return X(n.loadMoreSessions())}),K(3,"Load more"),w()()}if(t&2){v(2);let A=Vs(3);W(A?0:-1)}}function JzA(t,e){if(t&1&&(m(0,"div",8),Ut(1,GzA,8,6,"div",9,Li),w(),V(3,UzA,4,1),ri(4,"async")),t&2){let A=v();p(),Jt(A.sessionList),p(2),W(Ci(4,1,A.isSessionFilteringEnabled)&&A.canLoadMoreSessions?3:-1)}}var Xh=class t{userId="";appName="";sessionId="";sessionSelected=new $A;sessionReloaded=new $A;SESSIONS_PAGE_LIMIT=100;sessionList=[];canLoadMoreSessions=!1;pageToken="";filterControl=new ks("");refreshSessionsSubject=new XA;getSessionSubject=new XA;reloadSessionSubject=new XA;route=h(ag);changeDetectorRef=h(Dt);sessionService=h(El);uiStateService=h(Ql);i18n=h(DgA);featureFlagService=h(vr);isSessionFilteringEnabled=this.featureFlagService.isSessionFilteringEnabled();isLoadingMoreInProgress=jA(!1);constructor(){this.filterControl.valueChanges.pipe(Os(300)).subscribe(()=>{this.pageToken="",this.sessionList=[],this.refreshSessionsSubject.next()}),this.refreshSessionsSubject.pipe(oi(()=>{this.uiStateService.setIsSessionListLoading(!0)}),Si(()=>{let e=this.filterControl.value||void 0;return this.isSessionFilteringEnabled?this.sessionService.listSessions(this.userId,this.appName,{filter:e,pageToken:this.pageToken,pageSize:this.SESSIONS_PAGE_LIMIT}).pipe(ta(()=>se({items:[],nextPageToken:""}))):this.sessionService.listSessions(this.userId,this.appName).pipe(ta(()=>se({items:[],nextPageToken:""})))}),oi(({items:e,nextPageToken:A})=>{this.sessionList=Array.from(new Map([...this.sessionList,...e].map(i=>[i.id,i])).values()).sort((i,n)=>Number(n.lastUpdateTime)-Number(i.lastUpdateTime)),this.pageToken=A??"",this.canLoadMoreSessions=!!A,this.changeDetectorRef.markForCheck()})).subscribe(()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)},()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)}),this.getSessionSubject.pipe(oi(()=>{this.uiStateService.setIsSessionLoading(!0)}),f2(this.featureFlagService.isInfinityMessageScrollingEnabled()),Si(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ta(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""}).pipe(zo()).subscribe(),this.sessionSelected.emit(A),this.changeDetectorRef.markForCheck()})).subscribe(e=>{this.uiStateService.setIsSessionLoading(!1)},e=>{this.uiStateService.setIsSessionLoading(!1)}),this.reloadSessionSubject.pipe(f2(this.featureFlagService.isInfinityMessageScrollingEnabled()),Si(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ta(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""},!0).pipe(zo()).subscribe(),this.sessionReloaded.emit(A),this.changeDetectorRef.markForCheck()})).subscribe()}ngOnInit(){this.featureFlagService.isSessionFilteringEnabled().subscribe(e=>{if(e){let A=this.route.snapshot.queryParams.session;A&&this.filterControl.setValue(A)}}),setTimeout(()=>{this.refreshSessionsSubject.next()},500)}getSession(e){this.getSessionSubject.next(e)}loadMoreSessions(){this.isLoadingMoreInProgress.set(!0),this.refreshSessionsSubject.next()}getDate(e){let A=e.lastUpdateTime;return new Date(A*1e3).toLocaleString()}fromApiResultToSession(e){return{id:e?.id??"",appName:e?.appName??"",userId:e?.userId??"",state:e?.state??[],events:e?.events??[]}}reloadSession(e){this.reloadSessionSubject.next(e)}refreshSession(e){let A=null;if(this.sessionList.length>0){let i=this.sessionList.findIndex(n=>n.id==e);i==this.sessionList.length-1&&(i=-1),A=this.sessionList[i+1]}return this.isSessionFilteringEnabled?this.filterControl.setValue(""):(this.sessionList=[],this.refreshSessionsSubject.next()),A}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-session-tab"]],inputs:{userId:"userId",appName:"appName",sessionId:"sessionId"},outputs:{sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded"},decls:8,vars:7,consts:[[1,"session-wrapper"],[1,"session-filter-container"],[1,"loading-spinner-container"],[1,"empty-state"],["appearance","outline",1,"session-filter"],["matPrefix",""],["matInput","",3,"formControl"],["mode","indeterminate"],[1,"session-tab-container",2,"margin-top","16px"],[3,"ngClass"],[3,"click","ngClass"],[1,"session-info"],[1,"session-id"],[1,"session-date"],[1,"readonly-badge"],[1,"load-more"],["mat-button","","color","primary",3,"click"]],template:function(A,i){if(A&1&&(m(0,"div",0),V(1,NzA,7,2,"div",1),ri(2,"async"),Ur(3),ri(4,"async"),V(5,FzA,2,0,"div",2)(6,_zA,2,1,"div",3)(7,JzA,5,3),w()),A&2){p(),W(Ci(2,2,i.isSessionFilteringEnabled)?1:-1),p(2);let n=_g(Ci(4,4,i.uiStateService.isSessionListLoading()));p(2),W(n&&!i.isLoadingMoreInProgress()?5:!n&&i.sessionList.length===0?6:7)}},dependencies:[gs,v7,Fn,Yr,No,Gg,S9,gl,wa,Nn,uo,fo,r0,v1,Ns,fn,Il,ls],styles:[".session-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;font-size:14px;font-weight:700;color:var(--session-tab-session-wrapper-color);display:flex;flex-direction:column;overflow:hidden;height:100%}.session-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{color:initial;padding-top:1em;text-align:center;font-weight:400;font-style:italic}.session-wrapper[_ngcontent-%COMP%] .session-filter-container[_ngcontent-%COMP%]{background-color:var(--session-tab-session-filter-container-background-color);border-radius:8px;padding:16px;margin-bottom:16px;margin-top:16px}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%]{width:100%}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%] .mdc-floating-label--float-above{background-color:var(--session-tab-session-filter-container-background-color)}.session-tab-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.session-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;border:none;background-color:var(--session-tab-session-item-background-color);border-radius:8px;margin-bottom:4px;cursor:pointer}.session-item[_ngcontent-%COMP%]:hover{background-color:var(--session-tab-session-item-hover-background-color)}.session-item.current[_ngcontent-%COMP%]{background-color:var(--session-tab-session-item-current-background-color)}.session-item[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{margin-right:11px}.session-id[_ngcontent-%COMP%]{color:var(--session-tab-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.session-date[_ngcontent-%COMP%]{color:var(--session-tab-session-date-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.3px}.session-info[_ngcontent-%COMP%]{padding:11px}.loading-spinner-container[_ngcontent-%COMP%]{margin-left:auto;margin-right:auto;margin-top:2em;width:100%}.load-more[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-top:1em}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-right:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}"]})};var YzA={stateIsEmpty:"State is empty"},ygA=new yA("State Tab Messages",{factory:()=>YzA});function TzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.stateIsEmpty)}}function HzA(t,e){if(t&1&&(m(0,"div"),GA(1,"ngx-json-viewer",2),w()),t&2){let A=v();p(),$("json",A.sessionState)}}var X7=class t{sessionState={};i18n=h(ygA);get isEmptyState(){return!this.sessionState||Object.keys(this.sessionState).length===0}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-state-tab"]],inputs:{sessionState:"sessionState"},decls:3,vars:1,consts:[[1,"state-wrapper"],[1,"empty-state"],[3,"json"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,TzA,2,1,"div",1)(2,HzA,2,1,"div"),w()),A&2&&(p(),W(i.isEmptyState?1:2))},dependencies:[E0,Y2],styles:[".state-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;margin-top:16px}.state-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{text-align:center;font-style:italic}"]})};function zzA(t,e){t&1&&Di(0,"div",8)}function OzA(t,e){if(t&1&&(li(0,"span",14),K(1),Ei()),t&2){let A=v().$implicit,i=v();wn("left",i.getRelativeStart(A.span)+5,"%"),p(),Se("",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms")}}function PzA(t,e){if(t&1){let A=JA();li(0,"div",5),p2("click",function(){let n=Z(A).$implicit,o=v();return X(o.selectRow(n))})("mouseenter",function(){let n=Z(A).$implicit,o=v();return X(o.onHover(n))})("mouseleave",function(){Z(A);let n=v();return X(n.onHoverOut())}),li(1,"div",6)(2,"div",7),Ut(3,zzA,1,0,"div",8,wB),Ei(),li(5,"span",9),K(6),Ei(),li(7,"div",10),K(8),Ei()(),li(9,"div",11)(10,"div",12),K(11),Ei(),V(12,OzA,2,3,"span",13),Ei()()}if(t&2){let A=e.$implicit,i=v();ne("selected",i.rowSelected(A)),p(3),Jt(i.getArray(A.level)),p(2),ne("is-event-row",i.isEventRow(A)),p(),Se(" ",i.getSpanIcon(A.span.name)," "),p(),wn("width",400-A.level*20,"px"),ne("is-event-row",i.isEventRow(A)),p(),Se(" ",A.span.name," "),p(2),wn("left",i.getRelativeStart(A.span),"%")("width",i.getRelativeWidth(A.span),"%"),p(),Se(" ",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms "),p(),W(i.getRelativeWidth(A.span)<10?12:-1)}}var $7=class t{spans=[];invocationId="";tree=[];eventData;baseStartTimeMs=0;totalDurationMs=1;flatTree=[];traceLabelIconMap=new Map([["Invocation","start"],["agent_run","robot"],["invoke_agent","robot_2"],["tool","build"],["execute_tool","build"],["call_llm","chat"]]);selectedRow=void 0;traceService=h(T2);constructor(){}ngOnInit(){this.tree=this.buildSpanTree(this.spans),this.flatTree=this.flattenTree(this.tree);let e=this.getGlobalTimes(this.spans);this.baseStartTimeMs=e.start,this.totalDurationMs=e.duration,this.traceService.selectedTraceRow$.subscribe(A=>this.selectedRow=A),this.traceService.eventData$.subscribe(A=>this.eventData=A)}buildSpanTree(e){let A=e.map(o=>cA({},o)),i=new Map,n=[];return A.forEach(o=>i.set(o.span_id,o)),A.forEach(o=>{if(o.parent_span_id&&i.has(o.parent_span_id)){let a=i.get(o.parent_span_id);a.children=a.children||[],a.children.push(o)}else n.push(o)}),n}getGlobalTimes(e){let A=Math.min(...e.map(n=>this.toMs(n.start_time))),i=Math.max(...e.map(n=>this.toMs(n.end_time)));return{start:A,duration:i-A}}toMs(e){return e/1e6}getRelativeStart(e){return(this.toMs(e.start_time)-this.baseStartTimeMs)/this.totalDurationMs*100}getRelativeWidth(e){return(this.toMs(e.end_time)-this.toMs(e.start_time))/this.totalDurationMs*100}flattenTree(e,A=0){return e.flatMap(n=>[{span:n,level:A},...n.children?this.flattenTree(n.children,A+1):[]])}getSpanIcon(e){for(let[A,i]of this.traceLabelIconMap.entries())if(e.startsWith(A))return i;return"start"}getArray(e){return Array.from({length:e})}selectRow(e){if(this.selectedRow&&this.selectedRow.span_id==e.span.span_id){this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,this.invocationId);return}this.traceService.selectedRow(e.span),this.traceService.setHoveredMessages(e.span,this.invocationId)}rowSelected(e){return this.selectedRow==e.span}isEventRow(e){if(!e.span.attributes)return!1;let A=e?.span.attributes["gcp.vertex.agent.event_id"];return!!(A&&this.eventData&&this.eventData.has(A))}onHover(e){this.traceService.setHoveredMessages(e.span,this.invocationId)}onHoverOut(){this.traceService.setHoveredMessages(void 0,this.invocationId),this.selectedRow&&this.traceService.setHoveredMessages(this.selectedRow,this.invocationId)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tree"]],inputs:{spans:"spans",invocationId:"invocationId"},decls:8,vars:1,consts:[[2,"margin-top","15px"],[1,"invocation-id-container"],[1,"invocation-id"],[1,"trace-container"],[1,"trace-row",3,"selected"],[1,"trace-row",3,"click","mouseenter","mouseleave"],[1,"trace-row-left"],[1,"trace-indent"],[1,"indent-connector"],[1,"material-symbols-outlined",2,"margin-right","8px"],[1,"trace-label"],[1,"trace-bar-container"],[1,"trace-bar"],[1,"short-trace-bar-duration",3,"left"],[1,"short-trace-bar-duration"]],template:function(A,i){A&1&&(li(0,"div",0)(1,"div",1),K(2,"Invocation ID: "),li(3,"div",2),K(4),Ei()(),li(5,"div",3),Ut(6,PzA,13,16,"div",4,Li),Ei()()),A&2&&(p(4),qA(i.invocationId),p(2),Jt(i.flatTree))},styles:[".trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tree-trace-label-color);font-family:Google Sans Mono,monospace;font-size:13px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.trace-bar-container[_ngcontent-%COMP%]{width:100%;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tree-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tree-trace-bar-color);font-family:Google Sans}.short-trace-bar-duration[_ngcontent-%COMP%]{position:absolute;color:var(--trace-tree-short-trace-bar-duration-color)}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tree-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px;align-items:center;cursor:pointer}.trace-row[_ngcontent-%COMP%]:hover{background-color:var(--trace-tree-trace-row-hover-background-color)}.trace-row.selected[_ngcontent-%COMP%]{background-color:var(--trace-tree-trace-row-selected-background-color)}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tree-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tree-horizontal-line-background-color)}.trace-row-left[_ngcontent-%COMP%]{display:flex;width:50%}.invocation-id-container[_ngcontent-%COMP%]{color:var(--trace-tree-invocation-id-container-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px;margin-bottom:5px}.invocation-id[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.trace-row-left[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .trace-row-left[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-span-div-color)}.trace-row-left[_ngcontent-%COMP%] .is-event-row[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-is-event-row-color)}"]})};var jzA={noInvocationsFound:"No invocations found",invocationsTitle:"Invocations"},vgA=new yA("Trace Tab Messages",{factory:()=>jzA});function qzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noInvocationsFound)}}function VzA(t,e){if(t&1&&(m(0,"div",4)(1,"mat-expansion-panel")(2,"mat-expansion-panel-header")(3,"mat-panel-title"),K(4),w()(),GA(5,"app-trace-tree",5),w()()),t&2){let A=e.$implicit,i=v(2);p(4),Se(" ",i.invocToUserMsg.get(A.key)," "),p(),$("spans",A.value)("invocationId",i.findInvocIdFromTraceId(A.key))}}function WzA(t,e){if(t&1&&(m(0,"h2",2),K(1),w(),m(2,"div",3),Ut(3,VzA,6,3,"div",4,Li),ri(5,"keyvalue"),w()),t&2){let A=v();p(),qA(A.i18n.invocationsTitle),p(2),Jt(yU(5,1,A.invocTraces,A.mapOrderPreservingSort))}}var Ab=class t{traceData=[];invocTraces=new Map;invocToUserMsg=new Map;i18n=h(vgA);constructor(){}ngOnInit(){}ngOnChanges(e){"traceData"in e&&this.rebuildTrace()}rebuildTrace(){this.invocTraces=this.traceData.reduce((e,A)=>{let i=A.trace_id,n=e.get(i);return n?(n.push(A),n.sort((o,a)=>o.start_time-a.start_time)):e.set(i,[A]),e},new Map);for(let[e,A]of this.invocTraces)this.invocToUserMsg.set(e,this.findUserMsgFromInvocGroup(A))}getArray(e){return Array.from({length:e})}findUserMsgFromInvocGroup(e){let A=e?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes&&"gcp.vertex.agent.llm_request"in i.attributes);if(!A)return"[no invocation id found]";try{return JSON.parse(A.attributes["gcp.vertex.agent.llm_request"]).contents.filter(o=>o.role=="user").at(-1)?.parts[0]?.text??"[attachment]"}catch{return"[error parsing request]"}}findInvocIdFromTraceId(e){return this.invocTraces.get(e)?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes).attributes["gcp.vertex.agent.invocation_id"]}mapOrderPreservingSort=(e,A)=>0;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tab"]],inputs:{traceData:"traceData"},features:[ti],decls:3,vars:1,consts:[[1,"trace-wrapper"],[1,"empty-state"],["mat-dialog-title","",1,"trace-title"],[1,"trace-list-wrapper"],[1,"trace-item"],[3,"spans","invocationId"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,qzA,2,1,"div",1)(2,WzA,6,4),w()),A&2&&(p(),W(i.invocTraces.size===0?1:2))},dependencies:[Da,Zk,LO,GO,$7,Bp],styles:[".trace-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px}.trace-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{padding-top:1em;text-align:center;font-style:italic}.trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-title[_ngcontent-%COMP%]{color:var(--trace-tab-trace-title-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tab-trace-label-color);text-overflow:ellipsis;font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px}.trace-bar-container[_ngcontent-%COMP%]{width:50vw;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tab-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tab-trace-bar-color);font-family:Google Sans}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tab-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tab-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tab-horizontal-line-background-color)}.trace-item[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--trace-tab-trace-item-container-background-color);--mat-expansion-header-focus-state-layer-color: var(--trace-tab-trace-item-header-focus-state-layer-color);--mat-expansion-header-description-color: var(--trace-tab-trace-item-header-description-color);--mat-expansion-header-text-size: 15}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--trace-tab-mat-expansion-panel-header-focus-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded{background-color:var(--trace-tab-mat-expansion-panel-header-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--trace-tab-mat-expansion-panel-header-hover-background-color)} .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden} .mat-expansion-panel-header-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}"]})};var ZzA={agentDevelopmentKitLabel:"Agent Development Kit",collapsePanelTooltip:"Collapse panel",traceTabLabel:"Trace",eventsTabLabel:"Events",stateTabLabel:"State",artifactsTabLabel:"Artifacts",sessionsTabLabel:"Sessions",evalTabLabel:"Eval",selectEventAriaLabel:"Select event",eventDetailsTabLabel:"Event",requestDetailsTabLabel:"Request",responseDetailsTabLabel:"Response",responseIsNotAvailable:"Response is not available",requestIsNotAvailable:"Request is not available"},bgA=new yA("Side Panel Messages",{factory:()=>ZzA});var XzA=["evalTabContainer"];function $zA(t,e){t&1&&on(0)}function AOA(t,e){if(t&1&&(m(0,"div"),pt(1,$zA,1,0,"ng-container",13),m(2,"div",14),K(3,"Powered by Agent Development Kit"),w()()),t&2){let A=v(2);p(),$("ngComponentOutlet",A.logoComponent)}}function eOA(t,e){if(t&1&&(GA(0,"img",15),K(1)),t&2){let A=v(2);p(),Se(" ",A.i18n.agentDevelopmentKitLabel," ")}}function tOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),qA(A)}}function iOA(t,e){t&1&&Ut(0,tOA,2,2,"mat-option",21,Li),t&2&&Jt(e)}function nOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=v(3);$("value",A.selectedAppControl().value),p(),qA(A.selectedAppControl().value)}}function oOA(t,e){if(t&1){let A=JA();m(0,"div",22)(1,"mat-icon",23),tA("click",function(){Z(A);let n=v(3);return X(n.openAddItemDialog.emit(!0))}),K(2,"add"),w(),m(3,"mat-icon",24),tA("click",function(){Z(A);let n=v(3);return X(!n.disableBuilderIcon()&&n.enterBuilderMode.emit(!0))}),K(4,"edit"),w()()}if(t&2){let A=v(3);p(3),wn("cursor",A.disableBuilderIcon()?"not-allowed":"pointer")("opacity",A.disableBuilderIcon()?"0.5":"1")("margin-right",32,"px"),$("matTooltip",A.disableBuilderIcon()?"This agent was not built by builder":"Edit in Builder Mode")}}function aOA(t,e){if(t&1){let A=JA();m(0,"div",12)(1,"div",16)(2,"mat-select",17),tA("selectionChange",function(n){Z(A);let o=v(2);return X(o.appSelectionChange.emit(n))})("openedChange",function(){Z(A);let n=v(2);return X(n.agentSearchControl.setValue(""))}),m(3,"mat-option",18),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-form-field",19),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(5,"input",20),tA("click",function(n){return Z(A),X(n.stopPropagation())})("keydown",function(n){return Z(A),X(n.stopPropagation())}),w()()(),V(6,iOA,2,0),ri(7,"async"),V(8,nOA,2,2,"mat-option",21),w()(),V(9,oOA,5,7,"div",22),w()}if(t&2){let A,i=v(2);p(2),$("placeholder",i.isLoadingApps()()?"Loading...":"Select an agent")("formControl",i.selectedAppControl()),p(),$("value",null),p(2),$("formControl",i.agentSearchControl),p(),W((A=Ci(7,7,i.filteredApps$))?6:-1,A),p(2),W(i.selectedAppControl().value&&i.isLoadingApps()()?8:-1),p(),W(i.isBuilderMode()?-1:9)}}function rOA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",7)(2,"div",8)(3,"div",9),V(4,AOA,4,1,"div")(5,eOA,2,1),w(),m(6,"div",10),GA(7,"app-theme-toggle"),m(8,"span",11),tA("click",function(){Z(A);let n=v();return X(n.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),V(10,aOA,10,9,"div",12),ri(11,"async")}if(t&2){let A=v();p(4),W(A.logoComponent?4:5),p(4),$("matTooltip",D1(A.i18n.collapsePanelTooltip)),p(2),W(Ci(11,4,A.isApplicationSelectorEnabledObs())?10:-1)}}function sOA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-spinner",25),w())}function gOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function lOA(t,e){t&1&&on(0)}function cOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,gOA,2,1,"ng-template",28)(2,lOA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),$("ngTemplateOutlet",A)}}function COA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.traceTabLabel)}}function IOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,COA,2,1,"ng-template",28),GA(2,"app-trace-tab",32),w()),t&2){let A=v(2);p(2),$("traceData",A.traceData())}}function dOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(2);p(),qA(A.i18n.stateTabLabel)}}function BOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.artifactsTabLabel)}}function EOA(t,e){if(t&1&&(m(0,"mat-tab"),pt(1,BOA,2,1,"ng-template",28),GA(2,"app-artifact-tab",33),w()),t&2){let A=v(2);p(2),$("artifacts",A.artifacts())}}function QOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function hOA(t,e){t&1&&on(0)}function uOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,QOA,2,1,"ng-template",28)(2,hOA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),$("ngTemplateOutlet",A)}}function fOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.evalTabLabel)}}function mOA(t,e){t&1&&(m(0,"mat-tab"),pt(1,fOA,2,1,"ng-template",28),on(2,null,1),w())}function pOA(t,e){if(t&1){let A=JA();m(0,"app-session-tab",34),tA("sessionSelected",function(n){Z(A);let o=v(2);return X(o.sessionSelected.emit(n))})("sessionReloaded",function(n){Z(A);let o=v(2);return X(o.sessionReloaded.emit(n))}),w()}if(t&2){let A=v(2);$("userId",A.userId())("appName",A.appName())("sessionId",A.sessionId())}}function wOA(t,e){if(t&1){let A=JA();m(0,"div",3)(1,"mat-tab-group",26),tA("selectedTabChange",function(n){Z(A);let o=v();return X(o.tabChange.emit(n))}),Ur(2),ri(3,"async"),V(4,cOA,3,1,"mat-tab",27),V(5,IOA,3,1,"mat-tab",27),ri(6,"async"),m(7,"mat-tab"),pt(8,dOA,2,1,"ng-template",28),GA(9,"app-state-tab",29),w(),V(10,EOA,3,1,"mat-tab"),ri(11,"async"),V(12,uOA,3,1,"mat-tab",27),V(13,mOA,4,0,"mat-tab"),ri(14,"async"),w(),pt(15,pOA,1,3,"ng-template",null,0,w2),w()}if(t&2){let A=v(),i=Vs(2);$("hidden",i);let n=Ci(3,7,A.isSessionsTabReorderingEnabledObs);p(4),W(n?4:-1),p(),W(Ci(6,9,A.isTraceEnabledObs)?5:-1),p(4),$("sessionState",A.currentSessionState()),p(),W(Ci(11,11,A.isArtifactsTabEnabledObs)?10:-1),p(2),W(n?-1:12),p(),W(Ci(14,13,A.isEvalEnabledObs)?13:-1)}}function DOA(t,e){if(t&1){let A=JA();m(0,"div",47),tA("click",function(){Z(A);let n=v(3);return X(n.openImageDialog.emit(n.rawSvgString()))}),w()}if(t&2){let A=v(3);$("innerHtml",A.renderedEventGraph(),al)}}function yOA(t,e){if(t&1&&(m(0,"div",41),V(1,DOA,1,1,"div",46),w()),t&2){let A=v(2);p(),W(A.renderedEventGraph()?1:-1)}}function vOA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function bOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.requestIsNotAvailable)}}function MOA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),$("json",A.llmRequest())}}function kOA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,vOA,2,0,"div",48),ri(2,"async"),aC(3,bOA,2,1,"div",49)(4,MOA,2,1,"div",42),w()),t&2){let A=v(2);$("label",D1(A.i18n.requestDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmRequest()?4:3)}}function SOA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function xOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.responseIsNotAvailable)}}function ROA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),$("json",A.llmResponse())}}function NOA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,SOA,2,0,"div",48),ri(2,"async"),aC(3,xOA,2,1,"div",49)(4,ROA,2,1,"div",42),w()),t&2){let A=v(2);$("label",D1(A.i18n.responseDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmResponse()?4:3)}}function FOA(t,e){if(t&1&&(m(0,"mat-tab",44)(1,"div",42),GA(2,"ngx-json-viewer",43),w()()),t&2){let A,i=v(2);p(2),$("json",(A=i.selectedEvent())==null||A.actions==null?null:A.actions.stateDelta)}}function _OA(t,e){if(t&1&&(m(0,"mat-tab",45),GA(1,"app-artifact-tab",33),w()),t&2){let A=v(2);p(),$("artifacts",A.artifactDeltaArray())}}function LOA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",35)(2,"div",36)(3,"mat-paginator",37),tA("page",function(n){Z(A);let o=v();return X(o.page.emit(n))}),w(),m(4,"button",38)(5,"mat-icon",39),tA("click",function(){Z(A);let n=v();return X(n.closeSelectedEvent.emit())}),K(6,"close"),w()()()(),m(7,"div")(8,"mat-tab-group")(9,"mat-tab",40),V(10,yOA,2,1,"div",41),m(11,"div",42),GA(12,"ngx-json-viewer",43),w()(),V(13,kOA,5,5,"mat-tab",40),ri(14,"async"),V(15,NOA,5,5,"mat-tab",40),ri(16,"async"),V(17,FOA,3,1,"mat-tab",44),V(18,_OA,2,1,"mat-tab",45),w()()()}if(t&2){let A,i,n,o=v(),a=Vs(2);$("hidden",a),p(3),$("length",o.eventData().size)("pageSize",1)("pageIndex",o.selectedEventIndex()),ie("aria-label",o.i18n.selectEventAriaLabel),p(6),$("label",D1(o.i18n.eventDetailsTabLabel)),p(),W(((A=o.selectedEvent())==null?null:A.author)!=="user"?10:-1),p(2),$("json",o.selectedEvent()),p(),W(Ci(14,13,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmRequest()&&o.Object.keys(o.llmRequest()).length>0?13:-1),p(2),W(Ci(16,15,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmResponse()&&o.Object.keys(o.llmResponse()).length>0?15:-1),p(2),W(!((i=o.selectedEvent())==null||i.actions==null)&&i.actions.stateDelta&&o.Object.keys((i=o.selectedEvent())==null||i.actions==null?null:i.actions.stateDelta).length>0?17:-1),p(),W(!((n=o.selectedEvent())==null||n.actions==null)&&n.actions.artifactDelta&&o.Object.keys((n=o.selectedEvent())==null||n.actions==null?null:n.actions.artifactDelta).length>0?18:-1)}}var $h=class t{Object=Object;appName=rt("");userId=rt("");sessionId=rt("");traceData=rt([]);eventData=rt(new Map);currentSessionState=rt();artifacts=rt([]);selectedEvent=rt();selectedEventIndex=rt();renderedEventGraph=rt();rawSvgString=rt(null);llmRequest=rt();llmResponse=rt();showSidePanel=rt(!1);isApplicationSelectorEnabledObs=rt(se(!1));apps$=rt(se([]));isLoadingApps=rt(jA(!1));selectedAppControl=rt(new ks("",{nonNullable:!0}));isBuilderMode=rt(!1);disableBuilderIcon=rt(!1);closePanel=jo();appSelectionChange=jo();tabChange=jo();sessionSelected=jo();sessionReloaded=jo();evalCaseSelected=jo();evalSetIdSelected=jo();returnToSession=jo();evalNotInstalled=jo();page=jo();closeSelectedEvent=jo();openImageDialog=jo();openAddItemDialog=jo();enterBuilderMode=jo();sessionTabComponent=ca(Xh);evalTabComponent=ca($c);evalTabContainer=ca("evalTabContainer",{read:Oo});logoComponent=h(Z7,{optional:!0});i18n=h(bgA);featureFlagService=h(vr);evalTabComponentClass=h(P7,{optional:!0});environmentInjector=h(Gr);uiStateService=h(Ql);destroyRef=h(qa);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();isTraceEnabledObs=this.featureFlagService.isTraceEnabled();isArtifactsTabEnabledObs=this.featureFlagService.isArtifactsTabEnabled();isEvalEnabledObs=this.featureFlagService.isEvalEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled;isSessionsTabReorderingEnabledObs=this.featureFlagService.isSessionsTabReorderingEnabled();agentSearchControl=new ks("",{nonNullable:!0});filteredApps$=$n(this.apps$).pipe(Si(e=>Ir([e,this.agentSearchControl.valueChanges.pipe(cn(""))])),fe(([e,A])=>{if(!e||!A||A.trim()==="")return e;let i=A.toLowerCase().trim();return e.filter(n=>n.toLowerCase().startsWith(i))}));artifactDeltaArray=Ue(()=>{let e=this.selectedEvent()?.actions?.artifactDelta;if(!e||Object.keys(e).length===0)return[];let A=[];for(let[i,n]of Object.entries(e))A.push({id:i,versionId:1,data:n.data||"",mimeType:n.mimeType||"",mediaType:O4(n.mimeType||"")});return A});ngAfterViewInit(){setTimeout(()=>{this.initEvalTab()},500)}initEvalTab(){this.isEvalEnabledObs.pipe(zo()).subscribe(e=>{if(e){let A=this.evalTabContainer()?.createComponent(this.evalTabComponentClass??$c,{environmentInjector:this.environmentInjector});if(!A)return;or(this.environmentInjector,()=>{Ga(()=>{A.setInput("appName",this.appName()),A.setInput("userId",this.userId()),A.setInput("sessionId",this.sessionId())})}),A.instance.sessionSelected.subscribe(i=>{this.sessionSelected.emit(i)}),A.instance.evalCaseSelected.subscribe(i=>{this.evalCaseSelected.emit(i)}),A.instance.evalSetIdSelected.subscribe(i=>{this.evalSetIdSelected.emit(i)}),A.instance.shouldReturnToSession.subscribe(i=>{this.returnToSession.emit(i)}),A.instance.evalNotInstalledMsg.subscribe(i=>{this.evalNotInstalled.emit(i)})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-side-panel"]],viewQuery:function(A,i){A&1&&rs(i.sessionTabComponent,Xh,5)(i.evalTabComponent,$c,5)(i.evalTabContainer,XzA,5,Oo),A&2&&Dr(3)},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"],traceData:[1,"traceData"],eventData:[1,"eventData"],currentSessionState:[1,"currentSessionState"],artifacts:[1,"artifacts"],selectedEvent:[1,"selectedEvent"],selectedEventIndex:[1,"selectedEventIndex"],renderedEventGraph:[1,"renderedEventGraph"],rawSvgString:[1,"rawSvgString"],llmRequest:[1,"llmRequest"],llmResponse:[1,"llmResponse"],showSidePanel:[1,"showSidePanel"],isApplicationSelectorEnabledObs:[1,"isApplicationSelectorEnabledObs"],apps$:[1,"apps$"],isLoadingApps:[1,"isLoadingApps"],selectedAppControl:[1,"selectedAppControl"],isBuilderMode:[1,"isBuilderMode"],disableBuilderIcon:[1,"disableBuilderIcon"]},outputs:{closePanel:"closePanel",appSelectionChange:"appSelectionChange",tabChange:"tabChange",sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",returnToSession:"returnToSession",evalNotInstalled:"evalNotInstalled",page:"page",closeSelectedEvent:"closeSelectedEvent",openImageDialog:"openImageDialog",openAddItemDialog:"openAddItemDialog",enterBuilderMode:"enterBuilderMode"},decls:8,vars:9,consts:[["sessionsTabBody",""],["evalTabContainer",""],[1,"loading-spinner-container"],[1,"tabs-container",3,"hidden"],[1,"details-panel-container",3,"hidden"],[1,"resize-handler"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],[2,"display","flex","align-items","center","gap","8px"],[1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer","margin-right","15px",3,"click","matTooltip"],[1,"app-actions"],[4,"ngComponentOutlet"],[1,"powered-by-adk"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[1,"app-select-container"],["panelClass","wide-agent-dropdown-panel",1,"app-select",3,"selectionChange","openedChange","placeholder","formControl"],[1,"search-option",3,"click","value"],["subscriptSizing","dynamic",1,"agent-search-field",3,"click"],["matInput","","placeholder","Search agents...",3,"click","keydown","formControl"],[1,"app-name-option",3,"value"],[1,"mode-toggle-container"],["matTooltip","Create new agent","matTooltipPosition","below",2,"cursor","pointer","margin-right","16px",3,"click"],[3,"click","matTooltip"],["mode","indeterminate","diameter","50"],[3,"selectedTabChange"],[1,"tabs-header"],["mat-tab-label",""],[3,"sessionState"],[4,"ngTemplateOutlet"],[1,"tab-label"],[3,"traceData"],[3,"artifacts"],[3,"sessionSelected","sessionReloaded","userId","appName","sessionId"],[1,"details-content"],[2,"display","flex","justify-content","flex-end","margin-top","10px"],[1,"event-paginator",3,"page","length","pageSize","pageIndex"],["mat-mini-fab",""],[3,"click"],[3,"label"],[1,"event-graph-container"],[1,"json-viewer-container"],[3,"json"],["label","State"],["label","Artifact"],[3,"innerHtml"],[3,"click","innerHtml"],[1,"request-response-loading-spinner-container"],[1,"request-response-empty-state"]],template:function(A,i){if(A&1&&(V(0,rOA,12,6),ri(1,"async"),Ur(2),ri(3,"async"),V(4,sOA,2,0,"div",2),V(5,wOA,17,15,"div",3),V(6,LOA,19,17,"div",4),GA(7,"div",5)),A&2){W(Ci(1,4,i.isAlwaysOnSidePanelEnabledObs)===!1?0:-1),p(2);let n=_g(Ci(3,6,i.uiStateService.isSessionLoading()));p(2),W(n?4:-1),p(),W(i.appName()!=""&&i.showSidePanel()?5:-1),p(),W(i.selectedEvent()&&i.showSidePanel()?6:-1)}},dependencies:[Nn,uo,fo,D2,sl,xa,W7,Om,NK,Lh,Ab,X7,sw,Xh,Rz,Tp,Fn,E0,Y2,Hr,Bl,r0,v1,B1,No,wa,ls],styles:[".drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center}.tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:20px}.tab-label[_ngcontent-%COMP%]{font-size:14px}.resize-handler[_ngcontent-%COMP%]{background:var(--side-panel-resize-handler-background-color);width:4px;border-radius:4px;position:absolute;display:block;height:20%;top:40%;right:0;z-index:9999;cursor:ew-resize}.json-viewer-container[_ngcontent-%COMP%]{margin:10px}.event-paginator[_ngcontent-%COMP%]{margin-top:-8px;margin-right:auto;background-color:inherit;display:flex;justify-content:center}[_nghost-%COMP%] .mat-mdc-paginator-page-size{display:none}.details-panel-container[_ngcontent-%COMP%]{position:absolute;width:100%;height:98%;left:0;right:0;bottom:0;background:var(--side-panel-details-panel-container-background-color);display:inline-block;justify-content:center;align-items:center;z-index:10}.details-content[_ngcontent-%COMP%]{color:var(--side-panel-details-content-color);font-size:14px}.event-graph-container[_ngcontent-%COMP%]{margin-top:16px;margin-bottom:16px;display:flex;justify-content:center;max-height:33%;cursor:pointer}.event-graph-container[_ngcontent-%COMP%] svg{width:100%;height:100%;display:block;object-fit:contain}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.powered-by-adk[_ngcontent-%COMP%]{font-size:10px;color:var(--side-panel-powered-by-adk-color);text-align:right;margin-top:-5px}.app-select[_ngcontent-%COMP%]{width:100%}.app-select-container[_ngcontent-%COMP%]{width:60%;margin-top:12px;background-color:var(--side-panel-app-select-container-background-color);margin-left:10px;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: var(--side-panel-select-placeholder-text-color);--mat-select-enabled-trigger-text-color: var(--side-panel-select-enabled-trigger-text-color);--mat-select-enabled-arrow-color: var(--side-panel-select-enabled-arrow-color)}.app-name-option[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:12px;padding-right:12px}.app-select[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.mode-toggle-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-right:20px}.build-mode-button[_ngcontent-%COMP%]{margin:0 4px}.build-mode-button.mat-mdc-unelevated-button[_ngcontent-%COMP%]{height:30px}.app-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-top:12px;margin-left:10px}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.request-response-loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em}.request-response-empty-state[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em;font-style:italic}[_nghost-%COMP%] .mat-mdc-tooltip .mdc-tooltip__surface{max-width:250px;white-space:wrap;font-size:11px}[_nghost-%COMP%] .wide-agent-dropdown-panel{min-width:300px;max-width:600px;max-height:400px}[_nghost-%COMP%] .wide-agent-dropdown-panel .mat-mdc-option{white-space:normal;line-height:1.4;height:auto;min-height:48px;padding:8px 16px}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;background-color:var(--mat-select-panel-background-color, white)!important;padding:8px 16px!important;border-bottom:1px solid var(--mat-divider-color, rgba(0, 0, 0, .12));min-height:auto!important;height:auto!important;box-shadow:0 2px 4px #0000001a;opacity:1!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option:hover{background-color:var(--mat-select-panel-background-color, white)!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option.mat-mdc-option.mat-mdc-option-active{background-color:var(--mat-select-panel-background-color, white)!important}.agent-search-field[_ngcontent-%COMP%]{width:100%}.agent-search-field[_ngcontent-%COMP%] .mat-mdc-form-field-subscript-wrapper[_ngcontent-%COMP%]{display:none}"]})};function GOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function KOA(t,e){t&1&&(m(0,"div"),K(1,"Request is not available."),w())}function UOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),$("json",A.llmRequest)}}function JOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function YOA(t,e){t&1&&(m(0,"div"),K(1,"Response is not available."),w())}function TOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),$("json",A.llmResponse)}}function HOA(t,e){if(t&1){let A=JA();m(0,"div",12),tA("click",function(){Z(A);let n=v();return X(n.openViewImageDialog(n.rawSvgString))}),w()}if(t&2){let A=v();$("innerHtml",A.renderedEventGraph,al)}}var eb=class t{userId="";sessionId="";appName="";panelClosed=new $A;renderedEventGraph;eventData;selectedRow=void 0;rawSvgString=null;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";dialog=h(Gs);traceService=h(T2);eventService=h(CE);graphService=h(IE);featureFlagService=h(vr);sanitizer=h($s);uiStateService=h(Ql);isEventFilteringEnabled=Fs(this.featureFlagService.isEventFilteringEnabled());constructor(){}ngOnInit(){this.traceService.selectedTraceRow$.subscribe(e=>{this.selectedRow=e;let A=this.getEventIdFromSpan();if(A){let i;this.isEventFilteringEnabled()&&this.selectedRow?.invoc_id&&this.selectedRow?.start_time&&(i={invocationId:this.selectedRow.invoc_id,timestamp:this.selectedRow.start_time/1e6});let n=cA({id:A},i);this.eventService.getEventTrace(n).pipe(oi(()=>{this.uiStateService.setIsEventRequestResponseLoading(!0)})).subscribe(o=>{this.llmRequest=JSON.parse(o[this.llmRequestKey]),this.llmResponse=JSON.parse(o[this.llmResponseKey]),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.getEventGraph(A)}}),this.traceService.eventData$.subscribe(e=>this.eventData=e)}openViewImageDialog(e){let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}getEventDetails(){if(this.eventData&&this.selectedRow)return this.eventData.get(this.getEventIdFromSpan())}getEventIdFromSpan(){if(this.selectedRow)return this.selectedRow.attributes["gcp.vertex.agent.event_id"]}getEventGraph(e){this.eventService.getEvent(this.userId,this.appName,this.sessionId,e).subscribe(A=>nt(this,null,function*(){if(!A.dotSrc){this.renderedEventGraph=void 0;return}let i=A.dotSrc,n=yield this.graphService.render(i);this.rawSvgString=n,this.renderedEventGraph=this.sanitizer.bypassSecurityTrustHtml(n)}))}closePanel(){this.panelClosed.emit(!0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-event"]],inputs:{userId:"userId",sessionId:"sessionId",appName:"appName"},outputs:{panelClosed:"panelClosed"},decls:21,vars:8,consts:[[1,"wrapper"],["mat-stretch-tabs","false","mat-align-tabs","start"],["label","Event"],[1,"json-viewer-container"],[3,"json"],["label","Request"],["mode","indeterminate"],["label","Response"],["label","Graph"],[1,"event-graph-container"],[3,"innerHtml"],["mat-icon-button","",1,"tab-header-action",3,"click"],[3,"click","innerHtml"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"mat-tab-group",1)(2,"mat-tab",2)(3,"div",3),GA(4,"ngx-json-viewer",4),w()(),m(5,"mat-tab",5),V(6,GOA,1,0,"mat-progress-spinner",6),ri(7,"async"),aC(8,KOA,2,0,"div")(9,UOA,2,1,"div",3),w(),m(10,"mat-tab",7),V(11,JOA,1,0,"mat-progress-spinner",6),ri(12,"async"),aC(13,YOA,2,0,"div")(14,TOA,2,1,"div",3),w(),m(15,"mat-tab",8)(16,"div",9),V(17,HOA,1,1,"div",10),w()()(),m(18,"button",11),tA("click",function(){return i.closePanel()}),m(19,"mat-icon"),K(20,"close"),w()()()),A&2&&(p(4),$("json",i.getEventDetails()),p(2),W(Ci(7,4,i.uiStateService.isEventRequestResponseLoading())===!0?6:i.llmRequest?9:8),p(5),W(Ci(12,6,i.uiStateService.isEventRequestResponseLoading())===!0?11:i.llmResponse?14:13),p(6),W(i.renderedEventGraph?17:-1))},dependencies:[W7,Om,E0,Y2,Wa,Fn,B1,ls],styles:[".json-viewer-container[_ngcontent-%COMP%]{padding-top:8px;padding-left:12px;padding-right:12px;background-color:var(--trace-event-json-viewer-container-background-color)}.event-graph-container[_ngcontent-%COMP%]{text-align:center;padding-top:20px}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.wrapper[_ngcontent-%COMP%]{position:relative}.tab-header-action[_ngcontent-%COMP%]{position:absolute;top:0;right:0;height:48px;z-index:2;margin-right:10px}"]})};var zOA={openPanelTooltip:"Open panel",evalCaseIdLabel:"Eval Case ID",cancelButton:"Cancel",saveButton:"Save",editEvalCaseTooltip:"Edit current eval case",deleteEvalCaseTooltip:"Delete current eval case",sessionIdLabel:"Session ID",userIdLabel:"User ID",loadingSessionLabel:"Loading session...",tokenStreamingLabel:"Token Streaming",createNewSessionTooltip:"Create a new Session",newSessionButton:"New Session",deleteSessionTooltip:"Delete current session",exportSessionTooltip:"Export current session",importSessionTooltip:"Import session",loadingAgentsLabel:"Loading agents, please wait...",welcomeMessage:"Welcome to ADK!",selectAgentMessage:"Select an agent on the left to begin with.",failedToLoadAgentsMessage:"Failed to load agents. To get started, run",errorMessageLabel:"Error message:",noAgentsFoundWarning:"Warning: No agents found in current folder.",cannotEditSessionMessage:"Chat is disabled to prevent changes to the end user's session.",readOnlyBadgeLabel:"Read-only",disclosureTooltip:"ADK Web is for development purposes. It has access to all the data and should not be used in production.",adkWebDeveloperUiMessage:"ADK Web Developer UI"},MgA=new yA("Chat Messages",{factory:()=>zOA});var OOA=["sideDrawer"],POA=["bottomPanel"],jOA=[[["","adk-web-chat-container-top",""]]],qOA=["[adk-web-chat-container-top]"],VOA=t=>({"edit-mode":t}),WOA=()=>[];function ZOA(t,e){if(t&1){let A=JA();m(0,"span",8),tA("click",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v();$("matTooltip",A.i18n.openPanelTooltip)}}function XOA(t,e){if(t&1){let A=JA();m(0,"app-side-panel",9),tA("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("tabChange",function(n){Z(A);let o=v();return X(o.handleTabChange(n))})("sessionSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("sessionReloaded",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("evalCaseSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedEvalCase(n))})("evalSetIdSelected",function(n){Z(A);let o=v();return X(o.updateSelectedEvalSetId(n))})("returnToSession",function(n){Z(A);let o=v();return X(o.handleReturnToSession(n))})("evalNotInstalled",function(n){Z(A);let o=v();return X(o.handleEvalNotInstalled(n))})("page",function(n){Z(A);let o=v();return X(o.handlePageEvent(n))})("closeSelectedEvent",function(){Z(A);let n=v();return X(n.closeSelectedEvent())})("openImageDialog",function(n){Z(A);let o=v();return X(o.openViewImageDialog(n))})("appSelectionChange",function(n){Z(A);let o=v();return X(o.onAppSelection(n))})("openAddItemDialog",function(){Z(A);let n=v();return X(n.openAddItemDialog())})("enterBuilderMode",function(){Z(A);let n=v();return X(n.enterBuilderMode())}),w()}if(t&2){let A=v();$("isApplicationSelectorEnabledObs",A.isApplicationSelectorEnabledObs)("apps$",A.apps$)("isLoadingApps",A.isLoadingApps)("selectedAppControl",A.selectedAppControl)("showSidePanel",A.showSidePanel)("appName",A.appName)("userId",A.userId)("sessionId",A.sessionId)("traceData",A.traceData)("eventData",A.eventData)("currentSessionState",A.currentSessionState)("artifacts",A.artifacts)("selectedEvent",A.selectedEvent)("selectedEventIndex",A.selectedEventIndex)("renderedEventGraph",A.renderedEventGraph)("rawSvgString",A.rawSvgString)("llmRequest",A.llmRequest)("llmResponse",A.llmResponse)("disableBuilderIcon",A.disableBuilderSwitch)}}function $OA(t,e){if(t&1){let A=JA();m(0,"app-builder-tabs",10),tA("exitBuilderMode",function(){Z(A);let n=v();return X(n.exitBuilderMode())})("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),w(),GA(1,"div",11)}if(t&2){let A=v();$("appNameInput",A.appName)}}function APA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",12)(2,"button",13),tA("click",function(){Z(A);let n=v();return X(n.saveAgentBuilder())}),m(3,"mat-icon"),K(4,"check"),w()(),m(5,"button",14),tA("click",function(){Z(A);let n=v();return X(n.exitBuilderMode())}),m(6,"mat-icon"),K(7,"close"),w()(),m(8,"button",15),tA("click",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),m(9,"mat-icon"),K(10,"assistant"),w()()(),m(11,"app-canvas",16),tA("toggleSidePanelRequest",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("builderAssistantCloseRequest",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),w()()}if(t&2){let A=v();p(8),ne("active",A.showBuilderAssistant),p(3),$("showSidePanel",A.showSidePanel)("showBuilderAssistant",A.showBuilderAssistant)("appNameInput",A.appName)}}function ePA(t,e){if(t&1){let A=JA();m(0,"span",24),tA("click",function(){Z(A);let n=v(3);return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v(3);$("matTooltip",A.i18n.openPanelTooltip)}}function tPA(t,e){if(t&1){let A=JA();m(0,"button",29),tA("click",function(){Z(A);let n=v(4);return X(n.cancelEditEvalCase())}),K(1),w(),m(2,"button",30),tA("click",function(){Z(A);let n=v(4);return X(n.saveEvalCase())}),K(3),w()}if(t&2){let A=v(4);p(),Se(" ",A.i18n.cancelButton," "),p(),$("disabled",!A.hasEvalCaseChanged()||A.isEvalCaseEditing()),p(),Se(" ",A.i18n.saveButton," ")}}function iPA(t,e){if(t&1){let A=JA();m(0,"span",31),tA("click",function(){Z(A);let n=v(4);return X(n.editEvalCase())}),K(1," edit "),w(),m(2,"span",31),tA("click",function(){Z(A);let n=v(4);return X(n.deleteEvalCase())}),K(3," delete "),w()}if(t&2){let A=v(4);$("matTooltip",A.i18n.editEvalCaseTooltip),p(2),$("matTooltip",A.i18n.deleteEvalCaseTooltip)}}function nPA(t,e){if(t&1&&(m(0,"div",25)(1,"div",26),K(2),w(),m(3,"div",27),K(4),w()(),m(5,"div",28),V(6,tPA,4,3)(7,iPA,4,2),w()),t&2){let A=v(3);p(2),qA(A.i18n.evalCaseIdLabel),p(2),qA(A.evalCase.evalId),p(2),W(A.isEvalEditMode()?6:7)}}function oPA(t,e){if(t&1&&(m(0,"div",33),K(1),w(),m(2,"div",27),K(3),w()),t&2){let A=v(5);p(),qA(A.i18n.userIdLabel),p(2),qA(A.userId)}}function aPA(t,e){if(t&1&&(m(0,"div",34)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w(),m(4,"div",35),K(5),w()),t&2){let A=v(5);p(3),Se(" ",A.i18n.readOnlyBadgeLabel," "),p(2),qA(A.i18n.cannotEditSessionMessage)}}function rPA(t,e){if(t&1&&(m(0,"div",26),K(1),w(),m(2,"div",27),K(3),w(),V(4,oPA,4,2),ri(5,"async"),V(6,aPA,6,2)),t&2){let A=v(4);p(),qA(A.i18n.sessionIdLabel),p(2),qA(A.sessionId),p(),W(Ci(5,4,A.isUserIdOnToolbarEnabledObs)?4:-1),p(2),W(A.canEditSession()?-1:6)}}function sPA(t,e){if(t&1&&(m(0,"div",26),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.loadingSessionLabel)}}function gPA(t,e){if(t&1){let A=JA();m(0,"span",43),tA("click",function(){Z(A);let n=v(5);return X(n.deleteSession(n.sessionId))}),K(1," delete "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.deleteSessionTooltip)}}function lPA(t,e){if(t&1){let A=JA();m(0,"span",44),tA("click",function(){Z(A);let n=v(5);return X(n.exportSession())}),K(1," download "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.exportSessionTooltip)}}function cPA(t,e){if(t&1){let A=JA();m(0,"span",45),tA("click",function(){Z(A);let n=v(5);return X(n.importSession())}),K(1," upload "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.importSessionTooltip)}}function CPA(t,e){if(t&1){let A=JA();m(0,"div",28)(1,"div",36)(2,"mat-slide-toggle",37),ri(3,"async"),tA("change",function(){Z(A);let n=v(4);return X(n.toggleSse())}),K(4),w()(),GA(5,"mat-divider",38),m(6,"div",32)(7,"div",39),tA("click",function(){Z(A);let n=v(4);return X(n.onNewSessionClick())}),m(8,"mat-icon"),K(9,"add"),w(),K(10),w(),V(11,gPA,2,1,"span",40),ri(12,"async"),V(13,lPA,2,1,"span",41),ri(14,"async"),V(15,cPA,2,1,"span",42),ri(16,"async"),w()()}if(t&2){let A=v(4);p(2),$("checked",A.enableSseIndicator())("disabled",!Ci(3,9,A.isTokenStreamingEnabledObs)),p(2),Se(" ",A.i18n.tokenStreamingLabel," "),p(),$("vertical",!0),p(2),$("matTooltip",A.i18n.createNewSessionTooltip),p(3),Se(" ",A.i18n.newSessionButton," "),p(),W(Ci(12,11,A.isDeleteSessionEnabledObs)?11:-1),p(2),W(Ci(14,13,A.isExportSessionEnabledObs)?13:-1),p(2),W(Ci(16,15,A.importSessionEnabledObs)?15:-1)}}function IPA(t,e){if(t&1&&(m(0,"div",32),Ur(1),ri(2,"async"),V(3,rPA,7,6)(4,sPA,2,1,"div",26),w(),V(5,CPA,17,17,"div",28)),t&2){let A=Ci(2,2,v(3).uiStateService.isSessionLoading());p(3),W(A===!1?3:4),p(2),W(A===!1?5:-1)}}function dPA(t,e){if(t&1&&(m(0,"div",17),V(1,ePA,2,1,"span",23),V(2,nPA,8,3)(3,IPA,6,4),w()),t&2){let A=v(2);$("ngClass",ss(3,VOA,A.isEvalEditMode())),p(),W(A.showSidePanel?-1:1),p(),W(A.evalCase?2:3)}}function BPA(t,e){if(t&1&&(m(0,"div",46)(1,"span"),K(2),w()()),t&2){let A=v(3);p(2),qA(A.i18n.loadingAgentsLabel)}}function EPA(t,e){if(t&1&&(m(0,"span"),K(1),GA(2,"br"),K(3),w()),t&2){let A=v(4);p(),qA(A.i18n.welcomeMessage),p(2),Se(" ",A.i18n.selectAgentMessage)}}function QPA(t,e){if(t&1&&(K(0),GA(1,"br"),m(2,"pre",48),K(3),w()),t&2){let A=v(5);Se(" ",A.i18n.errorMessageLabel," "),p(3),qA(A.loadingError())}}function hPA(t,e){if(t&1&&(m(0,"pre",47),K(1),w()),t&2){let A=v(5);p(),qA(A.i18n.noAgentsFoundWarning)}}function uPA(t,e){if(t&1&&(m(0,"div"),K(1),m(2,"pre"),K(3,"adk web"),w(),K(4," in the folder that contains the agents."),GA(5,"br"),V(6,QPA,4,2)(7,hPA,2,1,"pre",47),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.failedToLoadAgentsMessage," "),p(5),W(A.loadingError()?6:7)}}function fPA(t,e){if(t&1&&(m(0,"div",46),V(1,EPA,4,2,"span"),ri(2,"async"),aC(3,uPA,8,2,"div"),w()),t&2){let A=v(3);p(),W((Ci(2,1,A.apps$)||Cu(3,WOA)).length>0?1:3)}}function mPA(t,e){if(t&1&&(V(0,BPA,3,1,"div",46),ri(1,"async"),aC(2,fPA,4,4,"div",46)),t&2){let A=v(2);W(A.isLoadingApps()?0:Ci(1,1,A.isApplicationSelectorEnabledObs)?2:-1)}}function pPA(t,e){if(t&1){let A=JA();m(0,"button",49),tA("click",function(){Z(A);let n=v(2);return X(n.openDialog())}),m(1,"mat-icon"),K(2,"priority_high"),w()()}}function wPA(t,e){if(t&1){let A=JA();m(0,"app-chat-panel",50),ri(1,"async"),ho("userInputChange",function(n){Z(A);let o=v(2);return ao(o.userInput,n)||(o.userInput=n),X(n)})("userEditEvalCaseMessageChange",function(n){Z(A);let o=v(2);return ao(o.userEditEvalCaseMessage,n)||(o.userEditEvalCaseMessage=n),X(n)}),tA("clickEvent",function(n){Z(A);let o=v(2);return X(o.clickEvent(n))})("handleKeydown",function(n){Z(A);let o=v(2);return X(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){Z(A);let o=v(2);return X(o.cancelEditMessage(n))})("saveEditMessage",function(n){Z(A);let o=v(2);return X(o.saveEditMessage(n))})("openViewImageDialog",function(n){Z(A);let o=v(2);return X(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){Z(A);let o=v(2);return X(o.openBase64InNewTab(n.data,n.mimeType))})("editEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.editEvalCaseMessage(n))})("deleteEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.deleteEvalCaseMessage(n.message,n.index))})("editFunctionArgs",function(n){Z(A);let o=v(2);return X(o.editFunctionArgs(n))})("fileSelect",function(n){Z(A);let o=v(2);return X(o.onFileSelect(n))})("removeFile",function(n){Z(A);let o=v(2);return X(o.removeFile(n))})("removeStateUpdate",function(){Z(A);let n=v(2);return X(n.removeStateUpdate())})("sendMessage",function(n){Z(A);let o=v(2);return X(o.sendMessage(n))})("updateState",function(){Z(A);let n=v(2);return X(n.updateState())})("toggleAudioRecording",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording())})("toggleVideoRecording",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording())}),w()}if(t&2){let A=v(2);$("appName",A.appName)("messages",A.messages())("isChatMode",A.isChatMode())("evalCase",A.evalCase)("isEvalEditMode",A.isEvalEditMode())("isEvalCaseEditing",A.isEvalCaseEditing())("isEditFunctionArgsEnabled",Ci(1,17,A.isEditFunctionArgsEnabledObs)??!1),Qo("userInput",A.userInput)("userEditEvalCaseMessage",A.userEditEvalCaseMessage),$("selectedFiles",A.selectedFiles)("updatedSessionState",A.updatedSessionState())("eventData",A.eventData)("selectedEvent",A.selectedEvent)("isAudioRecording",A.isAudioRecording)("isVideoRecording",A.isVideoRecording)("hoveredEventMessageIndices",A.hoveredEventMessageIndices)("sessionName",A.sessionId)}}function DPA(t,e){if(t&1){let A=JA();m(0,"div",21,1),GA(2,"div",51),m(3,"app-trace-event",52),tA("panelClosed",function(){Z(A);let n=v(2);return X(n.closeTraceEventDetailPanel())}),w()()}if(t&2){let A=v(2);p(3),$("userId",A.userId)("appName",A.appName)("sessionId",A.sessionId)}}function yPA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2);$("matTooltip",A.i18n.disclosureTooltip),p(),Se(" ",A.i18n.adkWebDeveloperUiMessage," ")}}function vPA(t,e){if(t&1&&(m(0,"div",7),Ke(1),V(2,dPA,4,5,"div",17),m(3,"mat-card",18),V(4,mPA,3,3),V(5,pPA,3,0,"button",19),V(6,wPA,2,19,"app-chat-panel",20),w(),V(7,DPA,4,3,"div",21),V(8,yPA,2,2,"div",22),ri(9,"async"),w()),t&2){let A=v();p(2),W(A.appName!=""?2:-1),p(2),W(A.selectedAppControl.value?-1:4),p(),W(A.longRunningEvents.length>0?5:-1),p(),W(A.appName!=""?6:-1),p(),W(A.bottomPanelVisible?7:-1),p(),W(Ci(9,6,A.isDeveloperUiDisclaimerEnabledObs)?8:-1)}}var bPA="root_agent",tb="q",MPA="hideSidePanel",FK="",_K="",LK="application/json+a2ui";function GK(t){for(t=t.replace(/-/g,"+").replace(/_/g,"/");t.length%4!==0;)t+="=";return t}var KK=class t extends B8{nextPageLabel="Next Event";previousPageLabel="Previous Event";firstPageLabel="First Event";lastPageLabel="Last Event";getRangeLabel=(e,A,i)=>i===0?`Event 0 of ${i}`:(i=Math.max(i,0),`Event ${e*A+1} of ${i}`);static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac})},kgA="Restarting bidirectional streaming is not currently supported. Please refresh the page or start a new session.",ib=class t{i18n=h(MgA);_snackBar=h(J2);activatedRoute=h(ag);agentService=h(sg);artifactService=h(u8);changeDetectorRef=h(Dt);dialog=h(Gs);document=h(Xt);downloadService=h(cE);evalService=h(h0);eventService=h(CE);featureFlagService=h(vr);graphService=h(IE);localFileService=h(f8);location=h(w8);renderer=h(_i);router=h(Cs);safeValuesService=h(u0);sessionService=h(El);streamChatService=h(p8);stringToColorService=h(dE);traceService=h(T2);uiStateService=h(Ql);agentBuilderService=h(Q0);chatPanel=ca.required(Vh);canvasComponent=ca.required(jh);sideDrawer=ca.required("sideDrawer");sidePanel=ca.required($h);evalTab=ca($c);bottomPanelRef=ca.required("bottomPanel");enableSseIndicator=jA(!1);isChatMode=jA(!0);isEvalCaseEditing=jA(!1);hasEvalCaseChanged=jA(!1);isEvalEditMode=jA(!1);isBuilderMode=jA(!1);videoElement;currentMessage="";messages=jA([]);lastTextChunk="";streamingTextMessage=null;latestThought="";artifacts=[];userInput="";userEditEvalCaseMessage="";userId="user";appName="";sessionId="";sessionIdOfLoadedMessages="";evalCase=null;updatedEvalCase=null;evalSetId="";isAudioRecording=!1;isVideoRecording=!1;longRunningEvents=[];functionCallEventId="";redirectUri=zr.getBaseUrlWithoutPath();showSidePanel=!0;showBuilderAssistant=!0;useSse=!1;currentSessionState={};root_agent=bPA;updatedSessionState=jA(null);isModelThinkingSubject=new Ht(!1);canEditSession=jA(!0);sessionHasUsedBidi=new Set;eventData=new Map;traceData=[];renderedEventGraph;rawSvgString=null;selectedEvent=void 0;selectedEventIndex=void 0;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";getMediaTypeFromMimetype=O4;selectedFiles=[];MediaType=$1;selectedAppControl=new ks("",{nonNullable:!0});openBase64InNewTab(e,A){this.safeValuesService.openBase64InNewTab(e,A)}isLoadingApps=jA(!1);loadingError=jA("");apps$=se([]).pipe(oi(()=>{this.isLoadingApps.set(!0),this.selectedAppControl.disable()}),Si(()=>this.agentService.listApps().pipe(ta(e=>(this.loadingError.set(e.message),se(void 0))))),oo(1),oi(e=>{this.isLoadingApps.set(!1),this.selectedAppControl.enable(),e?.length==1&&this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:{app:e[0]}})}),Ps());importSessionEnabledObs=this.featureFlagService.isImportSessionEnabled();isEditFunctionArgsEnabledObs=this.featureFlagService.isEditFunctionArgsEnabled();isSessionUrlEnabledObs=this.featureFlagService.isSessionUrlEnabled();isApplicationSelectorEnabledObs=this.featureFlagService.isApplicationSelectorEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isExportSessionEnabledObs=this.featureFlagService.isExportSessionEnabled();isEventFilteringEnabled=Fs(this.featureFlagService.isEventFilteringEnabled());isApplicationSelectorEnabled=Fs(this.featureFlagService.isApplicationSelectorEnabled());isDeleteSessionEnabledObs=this.featureFlagService.isDeleteSessionEnabled();isUserIdOnToolbarEnabledObs=this.featureFlagService.isUserIdOnToolbarEnabled();isDeveloperUiDisclaimerEnabledObs=this.featureFlagService.isDeveloperUiDisclaimerEnabled();bottomPanelVisible=!1;hoveredEventMessageIndices=[];disableBuilderSwitch=!1;constructor(){}ngOnInit(){if(this.syncSelectedAppFromUrl(),this.updateSelectedAppUrl(),this.hideSidePanelIfNeeded(),Ir([this.agentService.getApp(),this.activatedRoute.queryParams]).pipe(Ze(([i,n])=>!!i&&!!n[tb]),zo(),fe(([,i])=>i[tb])).subscribe(i=>{setTimeout(()=>{this.userInput=i})}),this.streamChatService.onStreamClose().subscribe(i=>{let n=`Please check server log for full details: -`+i;this.openSnackBar(n,"OK")}),new URL(window.location.href).searchParams.has("code")){let i=window.location.href;window.opener?.postMessage({authResponseUrl:i},window.origin),window.close()}this.agentService.getApp().subscribe(i=>{this.appName=i}),Ir([this.agentService.getLoadingState(),this.isModelThinkingSubject]).subscribe(([i,n])=>{let o=this.messages()[this.messages().length-1];i?!o?.isLoading&&!this.streamingTextMessage&&this.messages.update(a=>[...a,{role:"bot",isLoading:!0}]):o?.isLoading&&!n&&(this.messages.update(a=>a.slice(0,-1)),this.changeDetectorRef.detectChanges())}),this.traceService.selectedTraceRow$.subscribe(i=>{let n=i?.attributes["gcp.vertex.agent.event_id"];n&&this.eventData.has(n)?this.bottomPanelVisible=!0:this.bottomPanelVisible=!1}),this.traceService.hoveredMessageIndices$.subscribe(i=>this.hoveredEventMessageIndices=i),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo()).subscribe(i=>{i&&(this.uiStateService.onNewMessagesLoaded().subscribe(n=>{this.populateMessages(n.items,!0,!n.isBackground),this.loadTraceData()}),this.uiStateService.onNewMessagesLoadingFailed().subscribe(n=>{this.openSnackBar(n.message,"OK")}))})}get sessionTab(){return this.sidePanel().sessionTabComponent()}ngAfterViewInit(){this.showSidePanel&&this.sideDrawer()?.open(),this.isApplicationSelectorEnabled()||this.loadSessionByUrlOrReset()}selectApp(e){e!=this.appName&&(this.agentService.setApp(e),this.loadSessionByUrlOrReset())}loadSessionByUrlOrReset(){this.isSessionUrlEnabledObs.subscribe(e=>{let A=this.activatedRoute.snapshot.queryParams,i=A.session,n=A.userId;if(n&&(this.userId=n),!e||!i){this.createSessionAndReset();return}i&&this.sessionService.getSession(this.userId,this.appName,i).pipe(oo(1),ta(o=>(this.openSnackBar("Cannot find specified session. Creating a new one.","OK"),this.createSessionAndReset(),se(null)))).subscribe(o=>{o&&this.updateWithSelectedSession(o)})})}hideSidePanelIfNeeded(){this.activatedRoute.queryParams.pipe(Ze(e=>e[MPA]==="true"),oo(1)).subscribe(()=>{this.showSidePanel=!1,this.sideDrawer()?.close()})}createSessionAndReset(){this.createSession(),this.eventData=new Map,this.messages.set([]),this.artifacts=[],this.userInput="",this.longRunningEvents=[]}createSession(){this.uiStateService.setIsSessionListLoading(!0),this.sessionService.createSession(this.userId,this.appName).subscribe(e=>{this.currentSessionState=e.state,this.sessionId=e.id??"",this.sessionTab?.refreshSession(),this.sessionTab?.reloadSession(this.sessionId),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()})},()=>{this.uiStateService.setIsSessionListLoading(!1)})}sendMessage(e){return nt(this,null,function*(){if(e.preventDefault(),!this.userInput.trim()&&this.selectedFiles.length<=0||e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;let A=`user_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,i=[],n={role:"user",eventId:A};if(this.userInput.trim()&&(i.push({text:this.userInput}),n.text=this.userInput),this.selectedFiles.length>0){let s=this.selectedFiles.map(g=>({file:g.file,url:g.url}));for(let g of this.selectedFiles){let l=yield this.localFileService.createMessagePartFromFile(g.file);i.push(l)}n.attachments=s}this.messages.update(s=>[...s,n]);let o={id:A,author:"user",content:{parts:i}};this.eventData.set(A,o),this.eventData=new Map(this.eventData);let a={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:yield this.getUserMessageParts()},streaming:this.useSse,stateDelta:this.updatedSessionState()};this.selectedFiles=[],this.streamingTextMessage=null,this.agentService.runSse(a).subscribe({next:s=>nt(this,null,function*(){if(s.error){this.openSnackBar(s.error,"OK");return}if(s.content){let g=this.combineTextParts(s.content.parts);this.isEventA2aResponse(s)&&(g=this.combineA2uiDataParts(g));for(let l of g)this.processPart(s,l),this.traceService.setEventData(this.eventData)}else s.errorMessage&&this.processErrorMessage(s);s.actions&&(this.processActionArtifact(s),this.processActionStateDelta(s)),this.changeDetectorRef.detectChanges()}),error:s=>{console.error("Send message error:",s),this.openSnackBar(s,"OK")},complete:()=>{this.updatedSessionState()&&(this.currentSessionState=this.updatedSessionState(),this.updatedSessionState.set(null)),this.streamingTextMessage=null,this.featureFlagService.isSessionReloadOnNewMessageEnabled().pipe(zo()).subscribe(s=>{s&&this.sessionTab?.reloadSession(this.sessionId)}),this.eventService.getTrace(this.sessionId).pipe(zo(),ta(s=>se([]))).subscribe(s=>{this.traceData=s,this.changeDetectorRef.detectChanges()}),this.traceService.setMessages(this.messages()),this.changeDetectorRef.detectChanges()}}),this.userInput="";let r=this.router.parseUrl(this.location.path());r.queryParams[tb]&&(delete r.queryParams[tb],this.location.replaceState(r.toString())),this.changeDetectorRef.detectChanges()})}processErrorMessage(e){this.storeEvents(e,e),this.insertMessageBeforeLoadingMessage({text:e.errorMessage,role:"bot"})}processPart(e,A){let i=e.groundingMetadata?.searchEntryPoint?.renderedContent;if(A.text){this.isModelThinkingSubject.next(!1);let n=A.text;if(A.thought){if(n!==this.latestThought){this.storeEvents(A,e);let o={role:"bot",text:this.processThoughtText(n),thought:!0,eventId:e.id};this.insertMessageBeforeLoadingMessage(o)}this.latestThought=n}else if(this.streamingTextMessage){if(i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),n==this.streamingTextMessage.text){this.storeEvents(A,e);let o={role:"bot",text:this.processThoughtText(n),thought:!!A.thought,eventId:e.id};this.insertMessageBeforeLoadingMessage(o),this.streamingTextMessage=null;return}this.streamingTextMessage.text+=n}else if(this.streamingTextMessage={role:"bot",text:this.processThoughtText(n),thought:!!A.thought,eventId:e.id},i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),!this.useSse){this.insertMessageBeforeLoadingMessage(this.streamingTextMessage),this.storeEvents(A,e),this.streamingTextMessage=null;return}}else if(A.thought)this.isModelThinkingSubject.next(!0);else{if(this.isA2aDataPart(A)){let a=this.extractA2aDataPartJson(A),s=a&&a.kind==="data"&&a.metadata?.mimeType===LK?{a2ui:a.data}:{text:a};this.isModelThinkingSubject.next(!1),this.storeEvents(A,e),this.storeMessage(s,e,e.author==="user"?"user":"bot");return}this.isModelThinkingSubject.next(!1),this.storeEvents(A,e);let o=this.messages().findIndex(a=>a.eventId===e.id&&a.role==="bot");o!==-1?this.messages.update(a=>{let r=[...a];return this.processPartIntoMessage(A,e,r[o]),r}):this.storeMessage(A,e,e.author==="user"?"user":"bot")}}getUserMessageParts(){return nt(this,null,function*(){let e=[];if(this.userInput.trim()&&e.push({text:`${this.userInput}`}),this.selectedFiles.length>0)for(let A of this.selectedFiles)e.push(yield this.localFileService.createMessagePartFromFile(A.file));return e})}processActionArtifact(e){e.actions&&e.actions.artifactDelta&&Object.keys(e.actions.artifactDelta).length>0&&(this.storeEvents(null,e),this.storeMessage(null,e,"bot"))}processActionStateDelta(e){e.actions&&e.actions.stateDelta&&Object.keys(e.actions.stateDelta).length>0&&(this.currentSessionState=e.actions.stateDelta)}combineTextParts(e){let A=[],i;for(let n of e)n.text&&!n.thought?i?i.text+=n.text:(i={text:n.text},A.push(i)):(i=void 0,A.push(n));return A}isEventA2aResponse(e){return!!e?.customMetadata?.["a2a:response"]}isA2aDataPart(e){if(!e.inlineData||e.inlineData.mimeType!=="text/plain")return!1;let A=atob(GK(e.inlineData.data));return A.startsWith(FK)&&A.endsWith(_K)}isA2uiDataPart(e){let A=this.extractA2aDataPartJson(e);return A&&A.kind==="data"&&A.metadata?.mimeType===LK}extractA2aDataPartJson(e){if(!this.isA2aDataPart(e))return null;let A=atob(GK(e.inlineData.data)),i=A.substring(FK.length,A.length-_K.length),n;try{n=JSON.parse(i)}catch{return null}return n}combineA2uiDataParts(e){let A=[],i=[],n;for(let o of e)this.isA2uiDataPart(o)?(i.push(this.extractA2aDataPartJson(o)),n||(n={inlineData:{mimeType:"text/plain",data:o.inlineData.data}},A.push(n))):A.push(o);if(n?.inlineData){let a=FK+JSON.stringify({kind:"data",metadata:{mimeType:LK},data:i})+_K;n.inlineData.data=btoa(a)}return A}processA2uiPartIntoMessage(e){let A={};return e.a2ui.forEach(i=>{i.data.beginRendering?A.beginRendering=i.data:i.data.surfaceUpdate?A.surfaceUpdate=i.data:i.data.dataModelUpdate&&(A.dataModelUpdate=i.data)}),A}updateRedirectUri(e,A){try{let i=new URL(e);return i.searchParams.set("redirect_uri",A),i.toString()}catch(i){return console.warn("Failed to update redirect URI: ",i),e}}storeMessage(e,A,i,n,o,a=!1){if(A?.author&&this.createAgentIconColorClass(A.author),A?.longRunningToolIds&&A.longRunningToolIds.length>0){this.getAsyncFunctionsFromParts(A.longRunningToolIds,A.content.parts,A.invocationId);let s=this.longRunningEvents[0].function;if(s.args.authConfig&&s.args.authConfig.exchangedAuthCredential&&s.args.authConfig.exchangedAuthCredential.oauth2){let g=s.args.authConfig.exchangedAuthCredential.oauth2.authUri,l=this.updateRedirectUri(g,this.redirectUri);this.openOAuthPopup(l).then(C=>{this.functionCallEventId=A.id,this.sendOAuthResponse(s,C,this.redirectUri)}).catch(C=>{console.error("OAuth Error:",C)})}else this.functionCallEventId=A.id}if(A?.actions&&A.actions.artifactDelta)for(let s in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifactDelta[s],a);A?.evalStatus&&this.isChatMode.set(!1);let r={role:i,evalStatus:A?.evalStatus,failedMetric:A?.failedMetric,evalScore:A?.evalScore,evalThreshold:A?.evalThreshold,actualInvocationToolUses:A?.actualInvocationToolUses,expectedInvocationToolUses:A?.expectedInvocationToolUses,actualFinalResponse:A?.actualFinalResponse,expectedFinalResponse:A?.expectedFinalResponse,invocationIndex:n!==void 0?n:void 0,finalResponsePartIndex:o?.finalResponsePartIndex!==void 0?o.finalResponsePartIndex:void 0,toolUseIndex:o?.toolUseIndex!==void 0?o.toolUseIndex:void 0};if(e){if(e.inlineData){let s=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);r.inlineData={displayName:e.inlineData.displayName,data:s,mimeType:e.inlineData.mimeType}}else if(e.a2ui)r.a2uiData=this.processA2uiPartIntoMessage(e);else if(e.text)r.text=e.text,r.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(r.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),r.eventId=A?.id;else if(e.functionCall)r.functionCalls=[e.functionCall],r.eventId=A?.id;else if(e.functionResponse)r.functionResponses=[e.functionResponse],r.eventId=A?.id;else if(e.executableCode)r.executableCode=e.executableCode;else if(e.codeExecutionResult&&(r.codeExecutionResult=e.codeExecutionResult,A.actions&&A.actions.artifact_delta))for(let s in A.actions.artifact_delta)A.actions.artifact_delta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifact_delta[s],a)}e&&Object.keys(e).length>0&&(a?this.messages.update(s=>[r,...s]):this.insertMessageBeforeLoadingMessage(r))}insertMessageBeforeLoadingMessage(e){this.messages.update(A=>{let i=A[A.length-1];return i?.isLoading?[...A.slice(0,-1),e,i]:[...A,e]})}formatBase64Data(e,A){let i=GK(e);return`data:${A};base64,${i}`}processPartIntoMessage(e,A,i){if(e)if(e.text)i.text=e.text,i.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(i.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),A?.id&&(i.eventId=A.id);else if(e.inlineData){let n=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);i.inlineData={displayName:e.inlineData.displayName,data:n,mimeType:e.inlineData.mimeType},i.role==="user"&&A?.id&&(i.eventId=A.id)}else e.functionCall?(i.functionCalls||(i.functionCalls=[]),i.functionCalls.push(e.functionCall),A?.id&&(i.eventId=A.id)):e.functionResponse?(i.functionResponses||(i.functionResponses=[]),i.functionResponses.push(e.functionResponse),A?.id&&(i.eventId=A.id)):e.executableCode?i.executableCode=e.executableCode:e.codeExecutionResult?i.codeExecutionResult=e.codeExecutionResult:e.a2ui&&(i.a2uiData=this.processA2uiPartIntoMessage(e))}handleArtifactFetchFailure(e,A,i){this.openSnackBar("Failed to fetch artifact data","OK"),this.messages.update(n=>n.filter(o=>o!==e)),this.artifacts=this.artifacts.filter(n=>n.id!==A||n.versionId!==i)}renderArtifact(e,A,i=!1){if(this.artifacts.some(r=>r.id===e&&r.versionId===A))return;let o={role:"bot",inlineData:{data:"",mimeType:"image/png"}};i?this.messages.update(r=>[o,...r]):this.insertMessageBeforeLoadingMessage(o);let a={id:e,versionId:A,data:"",mimeType:"image/png",mediaType:"image"};this.artifacts=[...this.artifacts,a],this.artifactService.getArtifactVersion(this.userId,this.appName,this.sessionId,e,A).subscribe({next:r=>{let{mimeType:s,data:g}=r.inlineData??{};if(!s||!g){this.handleArtifactFetchFailure(o,e,A);return}let l=this.formatBase64Data(g,s),C=O4(s),I={name:this.createDefaultArtifactName(s),data:l,mimeType:s,mediaType:C};this.messages.update(d=>d.map(B=>B===o?{role:"bot",inlineData:I}:B)),this.artifacts=this.artifacts.map(d=>d.id===e&&d.versionId===A?{id:e,versionId:A,data:l,mimeType:s,mediaType:C}:d)},error:r=>{this.handleArtifactFetchFailure(o,e,A)}})}storeEvents(e,A){let i="";e==null&&A.actions.artifactDelta?i+="eventAction: artifact":e&&(e.text?i+="text:"+e.text:e.functionCall?i+="functionCall:"+e.functionCall.name:e.functionResponse?i+="functionResponse:"+e.functionResponse.name:e.executableCode?i+="executableCode:"+e.executableCode.code.slice(0,10):e.codeExecutionResult?i+="codeExecutionResult:"+e.codeExecutionResult.outcome:e.errorMessage&&(i+="errorMessage:"+e.errorMessage)),A.title=i,this.eventData.set(A.id,A),this.eventData=new Map(this.eventData)}sendOAuthResponse(e,A,i){this.longRunningEvents.pop();let n={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[]}};var o=structuredClone(e.args.authConfig);o.exchangedAuthCredential.oauth2.authResponseUri=A,o.exchangedAuthCredential.oauth2.redirectUri=i,n.functionCallEventId=this.functionCallEventId,n.newMessage.parts.push({function_response:{id:e.id,name:e.name,response:o}});let a=[];this.agentService.runSse(n).subscribe({next:r=>nt(this,null,function*(){a.push(r)}),error:r=>console.error("SSE error:",r),complete:()=>{this.processRunSseResponse(a)}})}processRunSseResponse(e){for(let A of e)if(A.content)for(let i of A.content.parts)this.processPart(A,i)}openDialog(){this.dialog.open(V7,{width:"600px",data:{event:this.longRunningEvents[0].function,appName:this.appName,userId:this.userId,sessionId:this.sessionId,functionCallEventId:this.functionCallEventId,invocationId:this.longRunningEvents[0].invocationId}}).afterClosed().subscribe(A=>{A&&(this.removeFinishedLongRunningEvents(A.events),this.processRunSseResponse(A.response),this.changeDetectorRef.detectChanges())})}removeFinishedLongRunningEvents(e){let A=new Set(e.map(i=>i.id));this.longRunningEvents=this.longRunningEvents.filter(i=>!A.has(i.id))}createAgentIconColorClass(e){let A=this.stringToColorService.stc(e),i=`custom-icon-color-${A.replace("#","")}`;this.injectCustomIconColorStyle(i,A)}clickEvent(e){let A=this.messages()[e],i=A.eventId;if(i){if(this.selectedEvent&&this.selectedEvent.id===i){this.selectedEvent=void 0,this.selectedEventIndex=void 0;return}if(A.role==="user"){this.selectedEvent=this.eventData.get(i),this.selectedEventIndex=this.getIndexOfKeyInMap(i),this.llmRequest=void 0,this.llmResponse=void 0,this.sideDrawer()?.open(),this.showSidePanel=!0;return}this.sideDrawer()?.open(),this.showSidePanel=!0,this.selectEvent(i)}}ngOnDestroy(){this.streamChatService.closeStream()}onAppSelection(e){this.isAudioRecording&&(this.stopAudioRecording(),this.isAudioRecording=!1),this.isVideoRecording&&(this.stopVideoRecording(),this.isVideoRecording=!1),this.evalTab()?.resetEvalResults(),this.traceData=[],this.bottomPanelVisible=!1}toggleAudioRecording(){this.isAudioRecording?this.stopAudioRecording():this.startAudioRecording()}startAudioRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(kgA,"OK");return}this.isAudioRecording=!0,this.streamChatService.startAudioChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId}),this.messages.update(e=>[...e,{role:"user",text:"Speaking..."},{role:"bot",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId)}stopAudioRecording(){this.streamChatService.stopAudioChat(),this.isAudioRecording=!1}toggleVideoRecording(){this.isVideoRecording?this.stopVideoRecording():this.startVideoRecording()}startVideoRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(kgA,"OK");return}let e=this.chatPanel()?.videoContainer;e&&(this.isVideoRecording=!0,this.streamChatService.startVideoChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId,videoContainer:e}),this.messages.update(A=>[...A,{role:"user",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId))}stopVideoRecording(){let e=this.chatPanel()?.videoContainer;e&&(this.streamChatService.stopVideoChat(e),this.isVideoRecording=!1)}getAsyncFunctionsFromParts(e,A,i){for(let n of A)n.functionCall&&e.includes(n.functionCall.id)&&this.longRunningEvents.push({function:n.functionCall,invocationId:i})}openOAuthPopup(e){return new Promise((A,i)=>{if(!this.safeValuesService.windowOpen(window,e,"oauthPopup","width=600,height=700")){i("Popup blocked!");return}let o=a=>{if(a.origin!==window.location.origin)return;let{authResponseUrl:r}=a.data;r?(A(r),window.removeEventListener("message",o)):console.log("OAuth failed",a)};window.addEventListener("message",o)})}toggleSidePanel(){this.showSidePanel?(this.sideDrawer()?.close(),this.selectedEvent=void 0,this.selectedEventIndex=void 0):this.sideDrawer()?.open(),this.showSidePanel=!this.showSidePanel}handleTabChange(e){this.isChatMode()||(this.resetEditEvalCaseVars(),this.handleReturnToSession(!0))}handleReturnToSession(e){this.sessionTab?.getSession(this.sessionId),this.evalTab()?.resetEvalCase(),this.isChatMode.set(!0)}handleEvalNotInstalled(e){e&&this.openSnackBar(e,"OK")}resetEventsAndMessages({keepMessages:e}={}){e||(this.eventData.clear(),this.messages.set([])),this.artifacts=[]}loadTraceData(){this.eventService.getTrace(this.sessionId).pipe(zo(),ta(()=>se([]))).subscribe(e=>{this.traceData=e,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.bottomPanelVisible=!1,this.changeDetectorRef.detectChanges()}populateMessages(e,A=!1,i=!1){this.resetEventsAndMessages({keepMessages:i&&this.sessionIdOfLoadedMessages===this.sessionId}),e.forEach(n=>{let o=this.isEventA2aResponse(n),a=o?this.combineA2uiDataParts(n.content?.parts):n.content?.parts||[],r=A?[...a].reverse():a;if(n.author==="user"){let s={role:"user",eventId:n.id};r.forEach(g=>{this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}else{let s={role:"bot",eventId:n.id};r.forEach(g=>{o&&this.isA2uiDataPart(g)&&(g={a2ui:this.extractA2aDataPartJson(g).data}),this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}}),this.sessionIdOfLoadedMessages=this.sessionId}updateWithSelectedSession(e){!e||!e.id||!e.events||!e.state||(this.traceService.resetTraceService(),this.sessionId=e.id,this.currentSessionState=e.state,this.evalCase=null,this.isChatMode.set(!0),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()}),this.resetEventsAndMessages(),e.events.forEach(A=>{if(A.author==="user"){let i={role:"user",eventId:A.id};A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}else{let i={role:"bot",eventId:A.id};A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}}),this.eventService.getTrace(this.sessionId).pipe(zo(),ta(()=>se([]))).subscribe(A=>{this.traceData=A,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.sessionService.canEdit(this.userId,e).pipe(zo(),ta(()=>se(!0))).subscribe(A=>{this.chatPanel()?.canEditSession.set(A),this.canEditSession.set(A)}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo()).subscribe(A=>{A||this.populateMessages(e.events||[]),this.loadTraceData()}))}updateWithSelectedEvalCase(e){this.evalCase=e,this.isChatMode.set(!1),this.resetEventsAndMessages();let A=0;for(let i of e.conversation){if(i.userContent?.parts)for(let n of i.userContent.parts)this.storeMessage(n,null,"user");if(i.intermediateData?.toolUses){let n=0;for(let o of i.intermediateData.toolUses){let a={functionCall:{name:o.name,args:o.args}};this.storeMessage(a,null,"bot",A,{toolUseIndex:n}),n++;let r={functionResponse:{name:o.name}};this.storeMessage(r,null,"bot")}}if(i.finalResponse?.parts){let n=0;for(let o of i.finalResponse.parts)this.storeMessage(o,null,"bot",A,{finalResponsePartIndex:n}),n++}A++}}updateSelectedEvalSetId(e){this.evalSetId=e}editEvalCaseMessage(e){this.isEvalCaseEditing.set(!0),this.userEditEvalCaseMessage=e.text,e.isEditing=!0,setTimeout(()=>{let A=this.chatPanel()?.textarea?.nativeElement;if(!A)return;A.focus();let i=A.value.length;e.text.charAt(i-1)===` -`&&i--,A.setSelectionRange(i,i)},0)}editFunctionArgs(e){this.isEvalCaseEditing.set(!0),this.dialog.open(Jm,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Edit function arguments",functionName:e.functionCall.name,jsonContent:e.functionCall.args}}).afterClosed().subscribe(i=>{this.isEvalCaseEditing.set(!1),i&&(this.hasEvalCaseChanged.set(!0),e.functionCall.args=i,this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].intermediateData.toolUses[e.toolUseIndex].args=i)})}saveEvalCase(){this.evalService.updateEvalCase(this.appName,this.evalSetId,this.updatedEvalCase.evalId,this.updatedEvalCase).subscribe(e=>{this.openSnackBar("Eval case updated","OK"),this.resetEditEvalCaseVars()})}cancelEditEvalCase(){this.resetEditEvalCaseVars(),this.updateWithSelectedEvalCase(this.evalCase)}resetEditEvalCaseVars(){this.hasEvalCaseChanged.set(!1),this.isEvalCaseEditing.set(!1),this.isEvalEditMode.set(!1),this.updatedEvalCase=null}cancelEditMessage(e){e.isEditing=!1,this.isEvalCaseEditing.set(!1)}saveEditMessage(e){this.hasEvalCaseChanged.set(!0),this.isEvalCaseEditing.set(!1),e.isEditing=!1,e.text=this.userEditEvalCaseMessage?this.userEditEvalCaseMessage:" ",this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts[e.finalResponsePartIndex]={text:this.userEditEvalCaseMessage},this.userEditEvalCaseMessage=""}handleKeydown(e,A){e.key==="Enter"&&!e.shiftKey?(e.preventDefault(),this.saveEditMessage(A)):e.key==="Escape"&&this.cancelEditMessage(A)}deleteEvalCaseMessage(e,A){this.hasEvalCaseChanged.set(!0),this.messages.update(i=>i.filter((n,o)=>o!==A)),this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts.splice(e.finalResponsePartIndex,1)}editEvalCase(){this.isEvalEditMode.set(!0)}deleteEvalCase(){let e={title:"Confirm delete",message:`Are you sure you want to delete ${this.evalCase.evalId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(zm,{width:"600px",data:e}).afterClosed().subscribe(i=>{i&&(this.evalTab()?.deleteEvalCase(this.evalCase.evalId),this.openSnackBar("Eval case deleted","OK"))})}onNewSessionClick(){this.createSession(),this.eventData.clear(),this.messages.set([]),this.artifacts=[],this.traceData=[],this.bottomPanelVisible=!1,this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.evalTab()?.showEvalHistory&&this.evalTab()?.toggleEvalHistoryButton()}onFileSelect(e){let A=e.target;if(A.files)for(let i=0;i{e&&this.canvasComponent()?.loadFromYaml(e,this.appName)},error:e=>{console.error("Error loading agent configuration:",e),this._snackBar.open("Error loading agent configuration","OK")}})}exitBuilderMode(){let e=this.router.createUrlTree([],{queryParams:{mode:null},queryParamsHandling:"merge"}).toString();this.location.replaceState(e),this.isBuilderMode.set(!1),this.agentBuilderService.clear()}toggleBuilderAssistant(){this.showBuilderAssistant=!this.showBuilderAssistant}openAddItemDialog(){this.apps$.pipe(oo(1)).subscribe(e=>{let A=this.dialog.open(rw,{width:"600px",data:{existingAppNames:e??[]}})})}saveAgentBuilder(){this.canvasComponent()?.saveAgent(this.appName)}selectEvent(e){this.selectedEvent=this.eventData.get(e),this.selectedEventIndex=this.getIndexOfKeyInMap(e);let A;this.isEventFilteringEnabled()&&this.selectedEvent.invocationId&&(this.selectedEvent.timestamp||this.selectedEvent.timestampInMillis)&&(A={invocationId:this.selectedEvent.invocationId,timestamp:this.selectedEvent.timestamp??this.selectedEvent.timestampInMillis});let i=cA({id:this.selectedEvent.id},A);this.uiStateService.setIsEventRequestResponseLoading(!0),this.eventService.getEventTrace(i).subscribe(n=>{n[this.llmRequestKey]&&(this.llmRequest=JSON.parse(n[this.llmRequestKey])),n[this.llmResponseKey]&&(this.llmResponse=JSON.parse(n[this.llmResponseKey])),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.eventService.getEvent(this.userId,this.appName,this.sessionId,this.selectedEvent.id).subscribe(n=>nt(this,null,function*(){if(!n.dotSrc){this.renderedEventGraph=void 0;return}let o=yield this.graphService.render(n.dotSrc);this.rawSvgString=o,this.renderedEventGraph=this.safeValuesService.bypassSecurityTrustHtml(o)}))}deleteSession(e){let A={title:"Confirm delete",message:`Are you sure you want to delete this session ${this.sessionId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(zm,{width:"600px",data:A}).afterClosed().subscribe(n=>{n&&this.sessionService.deleteSession(this.userId,this.appName,e).subscribe(o=>{let a=this.sessionTab?.refreshSession(e);a?this.sessionTab?.getSession(a.id):window.location.reload()})})}syncSelectedAppFromUrl(){Ir([this.activatedRoute.queryParams,this.apps$]).subscribe(([e,A])=>{let i=e.app;if(A&&A.length&&i){if(!A.includes(i)){this.openSnackBar(`Agent '${i}' not found`,"OK");return}this.selectedAppControl.setValue(i,{emitEvent:!1}),this.selectApp(i),this.agentService.getAgentBuilder(i).subscribe(n=>{!n||n==""?(this.disableBuilderSwitch=!0,this.agentBuilderService.setLoadedAgentData(void 0)):(this.disableBuilderSwitch=!1,this.agentBuilderService.setLoadedAgentData(n))}),this.isBuilderMode.set(!1)}e.mode==="builder"&&this.enterBuilderMode()})}updateSelectedAppUrl(){this.selectedAppControl.valueChanges.pipe(Vl(),Ze(Boolean)).subscribe(e=>{this.selectApp(e);let A=this.activatedRoute.snapshot.queryParams.app;e!==A&&this.router.navigate([],{queryParams:{app:e,mode:null},queryParamsHandling:"merge"})})}updateSelectedSessionUrl(){let e=this.router.createUrlTree([],{queryParams:{session:this.sessionId,userId:this.userId},queryParamsHandling:"merge"}).toString();this.location.replaceState(e)}handlePageEvent(e){if(e.pageIndex>=0){let A=this.getKeyAtIndexInMap(e.pageIndex);A&&(this.selectEvent(A),setTimeout(()=>{let i=this.messages().findIndex(n=>n.eventId===A);if(i!==-1){let n=this.chatPanel()?.scrollContainer?.nativeElement;if(!n)return;let o=n.querySelectorAll(".message-column-container");o&&o[i]&&o[i].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}},0))}}closeSelectedEvent(){this.selectedEvent=void 0,this.selectedEventIndex=void 0}handleEscapeKey(e){e.key==="Escape"&&this.selectedEvent&&(e.preventDefault(),this.selectedEvent=void 0,this.selectedEventIndex=void 0)}getIndexOfKeyInMap(e){let A=0,i=(o,a)=>0,n=Array.from(this.eventData.keys()).sort(i);for(let o of n){if(o===e)return A;A++}}getKeyAtIndexInMap(e){let A=(n,o)=>0,i=Array.from(this.eventData.keys()).sort(A);if(e>=0&&e{console.log(e),this.downloadService.downloadObjectAsJson(e,`session-${this.sessionId}.json`)})}updateState(){this.dialog.open(Jm,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Update state",jsonContent:this.currentSessionState}}).afterClosed().subscribe(A=>{A&&this.updatedSessionState.set(A)})}removeStateUpdate(){this.updatedSessionState.set(null)}closeTraceEventDetailPanel(){this.bottomPanelVisible=!1,this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,"")}importSession(){let e=document.createElement("input");e.type="file",e.accept="application/json",e.onchange=()=>{if(!e.files||e.files.length===0)return;let A=e.files[0],i=new FileReader;i.onload=n=>{if(n.target?.result)try{let o=JSON.parse(n.target.result);if(!o.userId||!o.appName||!o.events){this.openSnackBar("Invalid session file format","OK");return}this.sessionService.importSession(o.userId,o.appName,o.events).subscribe(a=>{this.openSnackBar("Session imported","OK"),this.sessionTab?.refreshSession()})}catch{this.openSnackBar("Error parsing session file","OK")}},i.readAsText(A)},e.click()}injectCustomIconColorStyle(e,A){if(this.document.getElementById(e))return;let i=this.renderer.createElement("style");this.renderer.setAttribute(i,"id",e),this.renderer.setAttribute(i,"type","text/css");let n=` - .${e} { - background-color: ${A} !important; - } - `;this.renderer.appendChild(i,this.renderer.createText(n)),this.renderer.appendChild(this.document.head,i)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-chat"]],viewQuery:function(A,i){A&1&&rs(i.chatPanel,Vh,5)(i.canvasComponent,jh,5)(i.sideDrawer,OOA,5)(i.sidePanel,$h,5)(i.evalTab,$c,5)(i.bottomPanelRef,POA,5),A&2&&Dr(6)},hostBindings:function(A,i){A&1&&tA("keydown",function(o){return i.handleEscapeKey(o)},m2)},features:[dt([{provide:B8,useClass:KK}])],ngContentSelectors:qOA,decls:8,vars:3,consts:[["sideDrawer",""],["bottomPanel",""],["autosize","",1,"drawer-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"matTooltip"],["mode","side","appResizableDrawer","",1,"side-drawer"],[3,"isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[1,"builder-mode-container"],[1,"chat-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"click","matTooltip"],[3,"closePanel","tabChange","sessionSelected","sessionReloaded","evalCaseSelected","evalSetIdSelected","returnToSession","evalNotInstalled","page","closeSelectedEvent","openImageDialog","appSelectionChange","openAddItemDialog","enterBuilderMode","isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[3,"exitBuilderMode","closePanel","appNameInput"],[1,"resize-handler"],[1,"builder-exit-button"],["mat-icon-button","","matTooltip","Accept",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Exit Builder Mode",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Builder Assistant",1,"builder-mode-action-button",3,"click"],[3,"toggleSidePanelRequest","builderAssistantCloseRequest","showSidePanel","showBuilderAssistant","appNameInput"],[1,"chat-toolbar",3,"ngClass"],[1,"chat-card"],["mat-fab","","color","primary",1,"fab-button"],[3,"appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","sessionName"],["appResizableBottomPanel","",1,"trace-detail-container"],["matTooltipPosition","left",1,"adk-web-developer-ui-disclaimer",2,"align-self","flex-end",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"click","matTooltip"],[2,"display","flex"],[1,"toolbar-session-text"],[1,"toolbar-session-id"],[1,"toolbar-actions"],["mat-button","",2,"height","30px",3,"click"],["mat-flat-button","",2,"height","30px",3,"click","disabled"],[1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[2,"display","flex","align-items","center"],[1,"toolbar-session-text",2,"margin-left","16px"],[1,"readonly-badge"],[1,"readonly-session-message"],[1,"toolbar-sse-toggle"],[1,"example-margin",3,"change","checked","disabled"],[2,"margin-left","8px","margin-right","8px","height","22px",3,"vertical"],["id","toolbar-new-session-button",3,"click","matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[1,"empty-state-container"],[1,"warning"],[1,"error"],["mat-fab","","color","primary",1,"fab-button",3,"click"],[3,"userInputChange","userEditEvalCaseMessageChange","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","fileSelect","removeFile","removeStateUpdate","sendMessage","updateState","toggleAudioRecording","toggleVideoRecording","appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","sessionName"],[1,"bottom-resize-handler"],[3,"panelClosed","userId","appName","sessionId"]],template:function(A,i){A&1&&(Yt(jOA),m(0,"mat-drawer-container",2),V(1,ZOA,2,1,"span",3),m(2,"mat-drawer",4,0),V(4,XOA,1,19,"app-side-panel",5)(5,$OA,2,1),w(),V(6,APA,12,5,"div",6)(7,vPA,10,8,"div",7),w()),A&2&&(p(),W(!i.showSidePanel&&i.appName===""?1:-1),p(3),W(i.isBuilderMode()?5:4),p(2),W(i.isBuilderMode()?6:7))},dependencies:[dk,xa,Ik,y8,Nn,r0,Fn,E0,gs,fn,_z,r8,aE,oY,D8,eb,Vh,$h,jh,_v,ls],styles:[".expand-side-drawer[_ngcontent-%COMP%]{position:relative;top:4%;left:1%}.drawer-container[_ngcontent-%COMP%]{height:100%;background-color:var(--chat-drawer-container-background-color)}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: #89b4f8;--mat-button-filled-label-text-color: black}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:#bdc1c6;cursor:pointer;display:flex;align-items:center;justify-content:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.chat-container[_ngcontent-%COMP%]{width:100%;height:100%;max-width:100%;margin:auto;display:flex;flex-direction:column;flex:1}.event-container[_ngcontent-%COMP%]{color:var(--chat-event-container-color)}.chat-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;overflow:hidden;flex:1;min-height:12%;box-shadow:none;background-color:var(--chat-card-background-color)}.function-event-button[_ngcontent-%COMP%] .mdc-button__label[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-background-color);margin:5px 5px 10px}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-highlight-background-color);border-color:var(--chat-function-event-button-highlight-border-color)!important;color:var(--chat-function-event-button-highlight-color)!important}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;align-items:center}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-fail-color)}.navigation-button-sidepanel[_ngcontent-%COMP%]{margin-left:auto;margin-right:20px}.fab-button[_ngcontent-%COMP%]{position:fixed;bottom:200px;right:100px;z-index:1000}.sidepanel-toggle[_ngcontent-%COMP%]{position:relative;top:100px;z-index:1000}.side-drawer[_ngcontent-%COMP%]{background-color:var(--chat-side-drawer-background-color);color:var(--chat-side-drawer-color);border-radius:0}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;background:var(--chat-file-item-background-color);padding:5px;border-radius:4px}button[_ngcontent-%COMP%]{margin-left:20px;margin-right:20px}.empty-state-container[_ngcontent-%COMP%]{color:var(--chat-empty-state-container-color);height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:Google Sans,sans-serif;font-weight:400;letter-spacing:normal;line-height:24px;font-size:18px}.empty-state-container[_ngcontent-%COMP%] pre.warning[_ngcontent-%COMP%]{color:var(--chat-warning-color)}.empty-state-container[_ngcontent-%COMP%] pre.error[_ngcontent-%COMP%]{color:var(--chat-error-color)}[_nghost-%COMP%] .mat-mdc-unelevated-button:not(:disabled){color:var(--chat-mat-mdc-unelevated-button-color);background-color:var(--chat-mat-mdc-unelevated-button-background-color)}[_nghost-%COMP%] .mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle,var(--chat-mdc-linear-progress-buffer-dots-background-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2),transparent 0)}[_nghost-%COMP%] .mat-mdc-select-arrow-wrapper{margin-left:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:1px solid var(--chat-mat-mdc-text-field-wrapper-border-color)}[_nghost-%COMP%] .mdc-notched-outline__leading, [_nghost-%COMP%] .mdc-notched-outline__notch, [_nghost-%COMP%] .mdc-notched-outline__trailing{border:none}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{padding:0 10px 0 40px}[_nghost-%COMP%] .segment-key{color:var(--chat-segment-key-color)!important}.mat-mdc-select-placeholder[_ngcontent-%COMP%]{margin-left:20px}.bottom-resize-handler[_ngcontent-%COMP%]{background:var(--chat-bottom-resize-handler-background-color);height:5px;border-radius:4px;position:absolute;display:block;width:20%;left:40%;top:0;right:0;z-index:9999;cursor:ns-resize}.trace-detail-container[_ngcontent-%COMP%]{position:relative;background-color:var(--chat-trace-detail-container-background-color)}.trace-detail-container[_ngcontent-%COMP%] app-trace-event[_ngcontent-%COMP%]{padding-top:8px}.new-session-button[_ngcontent-%COMP%]{margin-top:0;margin-left:50px;width:130px;height:28px;font-size:14px}.app-select-container[_ngcontent-%COMP%]{width:35%;background-color:#212123;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: #8ab4f8;--mat-select-enabled-trigger-text-color: #8ab4f8;--mat-select-enabled-arrow-color: #8ab4f8}.adk-checkbox[_ngcontent-%COMP%]{position:fixed;bottom:0;left:0;right:0;margin-bottom:20px;margin-left:20px}.chat-toolbar[_ngcontent-%COMP%]{position:sticky;top:0;height:48px;background:var(--chat-toolbar-background-color);display:flex;align-items:center;z-index:10}.chat-toolbar.edit-mode[_ngcontent-%COMP%]{background:var(--chat-toolbar-edit-mode-background-color)}.toolbar-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;flex-shrink:0}.toolbar-session-text[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-text-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:500;line-height:12px;letter-spacing:.8px;text-transform:uppercase;margin-left:20px;padding-top:4px;flex-shrink:0}.toolbar-session-id[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;margin-left:5px;flex-shrink:0}.toolbar-icon[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-toolbar-icon-color);cursor:pointer;margin-right:16px}#toolbar-new-session-button[_ngcontent-%COMP%]{font-size:14px;margin-right:16px;color:var(--chat-toolbar-new-session-color);cursor:pointer;display:flex;align-items:center}.toolbar-sse-toggle[_ngcontent-%COMP%]{--mat-slide-toggle-label-text-size: 14px;--mat-slide-toggle-label-text-color: var(--chat-toolbar-sse-toggle-label-text-color);--mat-slide-toggle-unselected-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-focus-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-hover-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-focus-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-hover-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-selected-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-focus-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-hover-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-focus-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-hover-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-track-height: 24px;--mat-slide-toggle-track-width: 46px;--mat-slide-toggle-track-outline-color: var(--chat-toolbar-sse-toggle-track-outline-color);--mat-slide-toggle-with-icon-handle-size: 20px}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-left:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}.readonly-session-message[_ngcontent-%COMP%]{display:block;color:var(--chat-toolbar-session-text-color);margin-left:1em;font-weight:400;line-height:16px;letter-spacing:.3px;flex-shrink:1} .mat-drawer-content{display:flex!important} .mat-drawer{border-right:1px solid var(--chat-mat-drawer-border-right-color)!important}.builder-mode-container[_ngcontent-%COMP%]{position:relative;width:100%;height:100vh;display:flex;flex-direction:column;background-color:var(--builder-container-background-color)}.builder-exit-button[_ngcontent-%COMP%]{position:absolute;top:20px;right:20px;z-index:1000;display:flex;gap:8px}.builder-mode-action-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color)!important;color:var(--builder-text-tertiary-color)!important;border-radius:50%!important;transition:all .2s ease!important;margin:0!important;padding:0!important;width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;border:1px solid var(--builder-tool-item-border-color)!important;box-shadow:0 2px 4px #0000001a!important;display:flex!important;align-items:center!important;justify-content:center!important}.builder-mode-action-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)!important;box-shadow:0 4px 8px #00000026!important}.builder-mode-action-button.active[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color)!important;color:#fff!important;border-color:var(--builder-button-primary-background-color)!important}.builder-mode-action-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target[_ngcontent-%COMP%]{display:none!important}.builder-mode-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}app-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important;min-height:0!important}.build-mode-container[_ngcontent-%COMP%]{display:flex;width:100%;height:100%;background-color:var(--builder-container-background-color)}.build-left-panel[_ngcontent-%COMP%], .build-right-panel[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background-color:var(--builder-tertiary-background-color);border:1px solid var(--builder-border-color);margin:10px;border-radius:8px}.build-panel-header[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);padding:16px 20px;border-bottom:1px solid var(--builder-border-color);border-radius:8px 8px 0 0}.build-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:16px;font-weight:500;font-family:Google Sans,Helvetica Neue,sans-serif}.build-panel-content[_ngcontent-%COMP%]{flex:1;padding:20px;color:var(--builder-text-secondary-color);overflow-y:auto}.build-panel-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5}.app-name-option[_ngcontent-%COMP%], .app-select[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.adk-web-developer-ui-disclaimer[_ngcontent-%COMP%]{padding-left:4px;padding-bottom:4px;font-size:10px;color:var(--adk-web-text-color-light-gray)}"]})};var Au=class t{static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(A,i){A&1&&GA(0,"app-chat")},dependencies:[ib],encapsulation:2})};var kPA=[{path:"",component:Au}],nb=class t{static \u0275fac=function(A){return new(A||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[j6.forRoot(kPA),j6]})};var ob=class{static getRuntimeConfig(){return window.runtimeConfig}};function SPA(t,e){if(t&1&&(li(0,"a",0),Di(1,"img",1),K(2),Ei()),t&2){v();let A=Vs(0),i=Vs(1);p(),vo("src",D1(A),Ka),p(),Se(" ",i," ")}}function xPA(t,e){t&1&&(li(0,"div"),K(1," Invalid custom logo config. Make sure that your runtime config specifies both imgUrl and text in the logo field. "),Ei())}var ab=class t{logoConfig=ob.getRuntimeConfig().logo;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-custom-logo"]],decls:4,vars:3,consts:[["href","/"],["width","32px","height","32px",1,"orcas-logo",3,"src"]],template:function(A,i){if(A&1&&(Ur(0)(1),V(2,SPA,3,3,"a",0)(3,xPA,2,0,"div")),A&2){let n=_g(i.logoConfig==null?null:i.logoConfig.imageUrl);p();let o=_g(i.logoConfig==null?null:i.logoConfig.text);p(),W(n&&o?2:3)}},styles:[`a[_ngcontent-%COMP%]{color:inherit;text-decoration:none;display:flex;align-items:center;gap:8px} - - - - - - - - - - - - - - - - -`]})};var RPA=(t,e)=>({"font-style":t,color:e}),rb=class t{text=rt("");thought=rt(!1);static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-markdown"]],inputs:{text:[1,"text"],thought:[1,"thought"]},features:[dt([e4()])],decls:1,vars:5,consts:[[3,"data","ngStyle"]],template:function(A,i){A&1&&GA(0,"markdown",0),A&2&&$("data",i.text())("ngStyle",Zl(2,RPA,i.thought()?"italic":"normal",i.thought()?"#9aa0a6":"inherit"))},dependencies:[ma,dp,YT,JT],encapsulation:2})};var NPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-as-n":!0,"layout-dis-iflx":!0,"layout-al-c":!0},FPA={"layout-w-100":!0},_PA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-mt-0":!0,"layout-mb-2":!0,"typography-sz-bm":!0,"color-c-n10":!0},LPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-pt-3":!0,"layout-pb-3":!0,"layout-pl-5":!0,"layout-pr-5":!0,"layout-mb-1":!0,"border-br-16":!0,"border-bw-0":!0,"border-c-n70":!0,"border-bs-s":!0,"color-bgc-s30":!0,"color-c-n100":!0,"behavior-ho-80":!0},UK={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mb-2":!0,"color-c-n10":!0},GPA=Ge(cA({},UK),{"typography-sz-tl":!0}),KPA=Ge(cA({},UK),{"typography-sz-tm":!0}),UPA=Ge(cA({},UK),{"typography-sz-ts":!0}),JPA={"behavior-sw-n":!0},_gA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-pl-4":!0,"layout-pr-4":!0,"layout-pt-2":!0,"layout-pb-2":!0,"border-br-6":!0,"border-bw-1":!0,"color-bc-s70":!0,"border-bs-s":!0,"layout-as-n":!0,"color-c-n10":!0},YPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0,"color-c-n10":!0},TPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},HPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},zPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},OPA={"typography-f-c":!0,"typography-fs-n":!0,"typography-w-400":!0,"typography-sz-bm":!0,"typography-ws-p":!0,"layout-as-n":!0},PPA=Ge(cA({},_gA),{"layout-r-none":!0,"layout-fs-c":!0}),jPA={"layout-el-cv":!0},SgA=Zs.merge(NPA,{"color-c-p30":!0}),qPA=Zs.merge(_gA,{"color-c-n5":!0}),VPA=Zs.merge(PPA,{"color-c-n5":!0}),WPA=Zs.merge(LPA,{"color-c-n100":!0}),xgA=Zs.merge(GPA,{"color-c-n5":!0}),RgA=Zs.merge(KPA,{"color-c-n5":!0}),NgA=Zs.merge(UPA,{"color-c-n5":!0}),ZPA=Zs.merge(_PA,{"color-c-n5":!0}),FgA=Zs.merge(YPA,{"color-c-n60":!0}),XPA=Zs.merge(OPA,{"color-c-n35":!0}),$PA=Zs.merge(TPA,{"color-c-n35":!0}),AjA=Zs.merge(HPA,{"color-c-n35":!0}),ejA=Zs.merge(zPA,{"color-c-n35":!0}),LgA={additionalStyles:{Card:{},Button:{"--n-60":"var(--n-100)"},Image:{"max-width":"120px","max-height":"120px",marginLeft:"auto",marginRight:"auto"}},components:{AudioPlayer:{},Button:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-5":!0,"layout-pr-5":!0,"border-br-2":!0,"border-bw-0":!0,"border-bs-s":!0,"color-bgc-p30":!0,"color-c-n100":!0,"behavior-ho-70":!0},Card:{"border-br-4":!0,"color-bgc-p100":!0,"color-bc-n90":!0,"border-bw-1":!0,"border-bs-s":!0,"layout-pt-4":!0,"layout-pb-4":!0,"layout-pl-4":!0,"layout-pr-4":!0},CheckBox:{element:{"layout-m-0":!0,"layout-mr-2":!0,"layout-p-2":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0},label:{"color-c-p30":!0,"typography-f-sf":!0,"typography-v-r":!0,"typography-w-400":!0,"layout-flx-1":!0,"typography-sz-ll":!0},container:{"layout-dsp-iflex":!0,"layout-al-c":!0}},Column:{},DateTimeInput:{container:{},label:{},element:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0}},Divider:{"color-bgc-n90":!0,"layout-mt-6":!0,"layout-mb-6":!0},Image:{all:{"border-br-50pc":!0,"layout-el-cv":!0,"layout-w-100":!0,"layout-h-100":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0,"layout-mb-3":!0},avatar:{},header:{},icon:{},largeFeature:{},mediumFeature:{},smallFeature:{}},Icon:{"border-br-1":!0,"layout-p-2":!0,"color-bgc-n98":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0},List:{"layout-g-4":!0,"layout-p-2":!0},Modal:{backdrop:{"color-bbgc-p60_20":!0},element:{"border-br-2":!0,"color-bgc-p100":!0,"layout-p-4":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bc-p80":!0}},MultipleChoice:{container:{},label:{},element:{}},Row:{"layout-g-4":!0},Slider:{container:{},label:{},element:{}},Tabs:{container:{},controls:{all:{},selected:{}},element:{}},Text:{all:{"layout-w-100":!0,"layout-g-2":!0,"color-c-p30":!0},h1:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h2:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h3:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-ts":!0},h4:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-bl":!0},h5:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"color-c-n30":!0,"typography-sz-bm":!0,"layout-mb-1":!0},body:{},caption:{}},TextField:{container:{"typography-sz-bm":!0,"layout-w-100":!0,"layout-g-2":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0},label:{"layout-flx-0":!0},element:{"typography-sz-bm":!0,"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0}},Video:{"border-br-5":!0,"layout-el-cv":!0}},elements:{a:SgA,audio:FPA,body:ZPA,button:WPA,h1:xgA,h2:RgA,h3:NgA,h4:{},h5:{},iframe:JPA,input:qPA,p:FgA,pre:XPA,textarea:VPA,video:jPA},markdown:{p:[...Object.keys(FgA)],h1:[...Object.keys(xgA)],h2:[...Object.keys(RgA)],h3:[...Object.keys(NgA)],h4:[],h5:[],ul:[...Object.keys(AjA)],ol:[...Object.keys($PA)],li:[...Object.keys(ejA)],a:[...Object.keys(SgA)],strong:[],em:[]}};var sb=class t{nodes=[];subAgentIdCounter=1;selectedToolSubject=new Ht(void 0);selectedNodeSubject=new Ht(void 0);selectedCallbackSubject=new Ht(void 0);loadedAgentDataSubject=new Ht(void 0);agentToolsMapSubject=new Ht(new Map);agentToolsSubject=new Ht(void 0);newAgentToolBoardSubject=new Ht(void 0);agentCallbacksMapSubject=new Ht(new Map);agentCallbacksSubject=new Ht(void 0);agentToolDeletionSubject=new Ht(void 0);deleteSubAgentSubject=new Ht("");addSubAgentSubject=new Ht({parentAgentName:""});tabChangeSubject=new Ht(void 0);agentToolBoardsSubject=new Ht(new Map);constructor(){}getNode(e){return this.nodes.find(i=>i.name===e)}getRootNode(){return this.nodes.find(A=>!!A.isRoot)}addNode(e){let A=this.nodes.findIndex(g=>g.name===e.name);A!==-1?this.nodes[A]=e:this.nodes.push(e);let i=/^sub_agent_(\d+)$/,n=e.name.match(i);if(n){let g=parseInt(n[1],10);g>=this.subAgentIdCounter&&(this.subAgentIdCounter=g+1)}let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e.name,e.tools||[]),this.agentToolsMapSubject.next(a);let r=this.agentCallbacksMapSubject.value,s=new Map(r);s.set(e.name,e.callbacks||[]),this.agentCallbacksMapSubject.next(s),this.setSelectedNode(this.selectedNodeSubject.value)}getNodes(){return this.nodes}clear(){this.nodes=[],this.subAgentIdCounter=1,this.setSelectedNode(void 0),this.setSelectedTool(void 0),this.agentToolsMapSubject.next(new Map),this.agentCallbacksMapSubject.next(new Map),this.setSelectedCallback(void 0),this.setAgentTools(),this.setAgentCallbacks()}getSelectedNode(){return this.selectedNodeSubject.asObservable()}setSelectedNode(e){this.selectedNodeSubject.next(e)}getSelectedTool(){return this.selectedToolSubject.asObservable()}setSelectedTool(e){this.selectedToolSubject.next(e)}getSelectedCallback(){return this.selectedCallbackSubject.asObservable()}setSelectedCallback(e){this.selectedCallbackSubject.next(e)}getNextSubAgentName(){return`sub_agent_${this.subAgentIdCounter++}`}addTool(e,A){let i=this.getNode(e);if(i){let n=i.tools||[];i.tools=[A,...n];let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e,i.tools),this.agentToolsMapSubject.next(a)}}deleteTool(e,A){let i=this.getNode(e);if(i&&i.tools){let n=i.tools.length;if(i.tools=i.tools.filter(o=>o.name!==A.name),i.tools.lengthr.name===A.name))return{success:!1,error:`Callback with name '${A.name}' already exists`};i.callbacks.push(A),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),{success:!0}}catch(i){return{success:!1,error:"Failed to add callback: "+i.message}}}updateCallback(e,A,i){try{let n=this.getNode(e);if(!n)return{success:!1,error:"Agent not found"};if(!n.callbacks)return{success:!1,error:"No callbacks found for this agent"};let o=n.callbacks.findIndex(l=>l.name===A);if(o===-1)return{success:!1,error:"Callback not found"};if(n.callbacks.some((l,C)=>C!==o&&l.name===i.name))return{success:!1,error:`Callback with name '${i.name}' already exists`};let r=cA(cA({},n.callbacks[o]),i);n.callbacks[o]=r,this.agentCallbacksSubject.next({agentName:e,callbacks:n.callbacks});let s=this.agentCallbacksMapSubject.value,g=new Map(s);return g.set(e,n.callbacks),this.agentCallbacksMapSubject.next(g),this.selectedCallbackSubject.value?.name===A&&this.setSelectedCallback(r),{success:!0}}catch(n){return{success:!1,error:"Failed to update callback: "+n.message}}}deleteCallback(e,A){try{let i=this.getNode(e);if(!i)return{success:!1,error:"Agent not found"};if(!i.callbacks)return{success:!1,error:"No callbacks found for this agent"};let n=i.callbacks.findIndex(r=>r.name===A.name);if(n===-1)return{success:!1,error:"Callback not found"};i.callbacks.splice(n,1),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),this.selectedCallbackSubject.value?.name===A.name&&this.setSelectedCallback(void 0),{success:!0}}catch(i){return{success:!1,error:"Failed to delete callback: "+i.message}}}setLoadedAgentData(e){this.loadedAgentDataSubject.next(e)}getLoadedAgentData(){return this.loadedAgentDataSubject.asObservable()}getAgentToolsMap(){return this.agentToolsMapSubject.asObservable()}getAgentCallbacksMap(){return this.agentCallbacksMapSubject.asObservable()}requestSideTabChange(e){this.tabChangeSubject.next(e)}getSideTabChangeRequest(){return this.tabChangeSubject.asObservable()}requestNewTab(e,A){this.newAgentToolBoardSubject.next({toolName:e,currentAgentName:A})}getNewTabRequest(){return this.newAgentToolBoardSubject.asObservable().pipe(fe(A=>A?{tabName:A.toolName,currentAgentName:A.currentAgentName}:void 0))}requestTabDeletion(e){this.agentToolDeletionSubject.next(e)}getTabDeletionRequest(){return this.agentToolDeletionSubject.asObservable()}setAgentToolBoards(e){this.agentToolBoardsSubject.next(e)}getAgentToolBoards(){return this.agentToolBoardsSubject.asObservable()}getCurrentAgentToolBoards(){return this.agentToolBoardsSubject.value}getAgentTools(){return this.agentToolsSubject.asObservable()}getDeleteSubAgentSubject(){return this.deleteSubAgentSubject.asObservable()}setDeleteSubAgentSubject(e){this.deleteSubAgentSubject.next(e)}getAddSubAgentSubject(){return this.addSubAgentSubject.asObservable()}setAddSubAgentSubject(e,A,i){this.addSubAgentSubject.next({parentAgentName:e,agentClass:A,isFromEmptyGroup:i})}setAgentTools(e,A){if(e&&A){this.agentToolsSubject.next({agentName:e,tools:A});let i=this.agentToolsMapSubject.value,n=new Map(i);n.set(e,A),this.agentToolsMapSubject.next(n)}else this.agentToolsSubject.next(void 0)}getAgentCallbacks(){return this.agentCallbacksSubject.asObservable()}setAgentCallbacks(e,A){e&&A?this.agentCallbacksSubject.next({agentName:e,callbacks:A}):this.agentCallbacksSubject.next(void 0)}getParentNode(e,A,i,n){if(e){if(e.name===A.name)return i;for(let o of e.sub_agents){let a=this.getParentNode(o,A,e,n);if(a)return a}if(e.tools){for(let o of e.tools)if(o.toolType==="Agent Tool"){let a=n.get(o.toolAgentName||o.name);if(a){let r=this.getParentNode(a,A,e,n);if(r)return r}}}}}deleteNode(e){this.nodes=this.nodes.filter(A=>A.name!==e.name),this.setSelectedNode(this.selectedNodeSubject.value)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var gb=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();getLatestArtifact(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}`;return this.http.get(o)}getArtifactVersion(e,A,i,n,o){let a=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}/versions/${o}`;return this.http.get(a)}static \u0275fac=function(A){return new(A||t)(xo(Xs))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var lb=class t{audioContext=new AudioContext({sampleRate:22e3});lastAudioTime=0;scheduledAudioSources=new Set;playAudio(e){let A=this.combineAudioBuffer(e);A&&this.playPCM(A)}stopAudio(){for(let e of this.scheduledAudioSources)e.onended=null,e.stop();this.scheduledAudioSources.clear(),this.lastAudioTime=this.audioContext.currentTime}combineAudioBuffer(e){if(e.length===0)return;let A=e.reduce((o,a)=>o+a.length,0),i=new Uint8Array(A),n=0;for(let o of e)i.set(o,n),n+=o.length;return i}playPCM(e){let A=new Float32Array(e.length/2);for(let r=0;r=32768&&(s-=65536),A[r]=s/32768}let i=this.audioContext.createBuffer(1,A.length,22e3);i.copyToChannel(A,0);let n=this.audioContext.createBufferSource();n.buffer=i,n.connect(this.audioContext.destination),n.onended=()=>{this.scheduledAudioSources.delete(n)},this.scheduledAudioSources.add(n);let o=this.audioContext.currentTime,a=Math.max(this.lastAudioTime,o);n.start(a),this.lastAudioTime=a+i.duration}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var cb=new yA("AudioRecordingService"),Cb=new yA("AudioWorkletModulePath");var Ib=class t{audioWorkletModulePath=h(Cb);stream;audioContext;source;audioBuffer=[];startRecording(){return nt(this,null,function*(){try{this.stream=yield navigator.mediaDevices.getUserMedia({audio:!0}),this.audioContext=new AudioContext,yield this.audioContext.audioWorklet.addModule(this.audioWorkletModulePath),this.source=this.audioContext.createMediaStreamSource(this.stream);let e=new AudioWorkletNode(this.audioContext,"audio-processor");e.port.onmessage=A=>{let i=A.data,n=this.float32ToPCM(i);this.audioBuffer.push(n)},this.source.connect(e),e.connect(this.audioContext.destination)}catch(e){console.error("Error accessing microphone:",e)}})}stopRecording(){this.source&&this.source.disconnect(),this.audioContext&&this.audioContext.close(),this.stream&&this.stream.getTracks().forEach(e=>e.stop())}getCombinedAudioBuffer(){if(this.audioBuffer.length===0)return;let e=this.audioBuffer.reduce((n,o)=>n+o.length,0),A=new Uint8Array(e),i=0;for(let n of this.audioBuffer)A.set(n,i),i+=n.length;return A}cleanAudioBuffer(){this.audioBuffer=[]}float32ToPCM(e){let A=new ArrayBuffer(e.length*2),i=new DataView(A);for(let n=0;ne[Gz]==="true"))}isEditFunctionArgsEnabled(){return this.route.queryParams.pipe(fe(e=>e[Kz]==="true"))}isSessionUrlEnabled(){return se(!0)}isA2ACardEnabled(){return this.route.queryParams.pipe(fe(e=>e[Uz]==="true"))}isApplicationSelectorEnabled(){return se(!0)}isAlwaysOnSidePanelEnabled(){return se(!1)}isTraceEnabled(){return se(!0)}isArtifactsTabEnabled(){return se(!0)}isEvalEnabled(){return se(!0)}isTokenStreamingEnabled(){return se(!0)}isMessageFileUploadEnabled(){return se(!0)}isManualStateUpdateEnabled(){return se(!0)}isBidiStreamingEnabled(){return se(!0)}isExportSessionEnabled(){return se(!0)}isEventFilteringEnabled(){return se(!1)}isDeleteSessionEnabled(){return se(!0)}isLoadingAnimationsEnabled(){return se(!0)}isSessionsTabReorderingEnabled(){return se(!1)}isSessionFilteringEnabled(){return se(!1)}isSessionReloadOnNewMessageEnabled(){return se(!1)}isUserIdOnToolbarEnabled(){return se(!0)}isDeveloperUiDisclaimerEnabled(){return se(!0)}isFeedbackServiceEnabled(){return se(!1)}isInfinityMessageScrollingEnabled(){return se(!1)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var tjA=(()=>{var t=import.meta.url;return function(e={}){var A,i=e,n,o,a=new Promise((u,y)=>{n=u,o=y});i.agerrMessages=[],i.stderrMessages=[],B=u=>i.stderrMessages.push(u);var r=Object.assign({},i),s="./this.program",g=(u,y)=>{throw y},l="",C,I;typeof document<"u"&&document.currentScript&&(l=document.currentScript.src),t&&(l=t),l.startsWith("blob:")?l="":l=l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1),C=u=>fetch(u,{credentials:"same-origin"}).then(y=>y.ok?y.arrayBuffer():Promise.reject(new Error(y.status+" : "+y.url)));var d=console.log.bind(console),B=console.error.bind(console);Object.assign(i,r),r=null;var E;function Q(u){for(var y=atob(u),x=new Uint8Array(y.length),H=0;Hu.startsWith(Pe);function HA(){var u="data:application/octet-stream;base64,AGFzbQEAAAABmAd0YAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBH9/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AFf39/f38AYAZ/f39/f38AYAAAYAh/f39/f39/fwF/YAABf2AHf39/f39/fwF/YAF8AXxgAn9/AXxgAX8BfGAHf39/f39/fwBgA39/fwF8YAd/f39/fHx/AGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgBX9+fn5+AGAEf39/fABgCn9/f39/f39/f38Bf2ADf35/AX5gBH9/fHwBf2ADfHx8AXxgCX9/f39/f39/fwBgA39/fgBgAAF8YAR/f39/AXxgAn9/AX5gBX9/f39+AX9gA39/fgF/YAp/f39/f39/f39/AGAEf35+fwBgBH9/fH8AYAJ/fgBgAnx/AXxgBH9/f3wBf2ABfwF+YAJ/fgF/YAJ/fAF/YAN8fH8BfGADf3x/AGAIf39/f39/f38AYAV/f39/fAF/YAt/f39/f39/f39/fwF/YAN/f3wAYAV/f35/fwBgBH9/fH8Bf2AAAX5gB39/f398f38Bf2AFf39/f3wAYAN/f3wBf2ADf35/AX9gAn19AX1gBH9/fX8AYAZ/fHx8fHwBfGADf39/AX5gDH9/f39/f39/f39/fwF/YAV/f3x/fwF/YAd/f398fH9/AGAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgBH9/f38BfmAGf3x/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gB39/f39+f38Bf2AGf39/f39+AX9gAn5/AGAEf35/fwF/YAR/f3x8AXxgBX9/fH9/AGAJf39/f39/f39/AX9gBH9/fHwAYAR+fn5+AX9gAn99AX9gAn5/AX9gCH9/f398fHx/AGADf31/AGAGf39+fn5/AGABfAF/YAJ+fgF9YAJ/fQBgBH9/f34BfmAGf31/f39/AGADf3x8AX9gBX9/f3x/AGAFf398fH8AYAZ8fHx/f38AYAJ+fgF8YAJ8fwF/YAR/fHx8AGAGf39/f398AGAEf3x/fwBgBnx8f3x8fwBgB398fHx8fHwAYAV/fHx8fAF/YAF/AX1gA39/fwF9YAN+fn4Bf2AEf35+fgBgBH98f38Bf2AKf3x/f39/f39/fwBg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g+cDIAJBEGoQHxoQLAALFwBBAUF/IAAgASABED8iABChAiAARhsLJQEBfyAAKAIsIgBBAEGAASAAKAIAEQMAIgAEfyAAKAIQBUEACws0AQF/AkAgACABEOUBIgFFDQAgACgCLCIAIAFBCCAAKAIAEQMAIgBFDQAgACgCECECCyACC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDECADIAI2AgwCQCADQRBqIAEgAhC0CiIBQQBIBEAgA0GQhgsoAgAQswU2AgBBmP0DIAMQNwwBCyAAIANBEGoiABCOBSABEKECGiAAEFwLIANBIGokAAskAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhDLCyADQRBqJAALMwEBfyACBEAgACEDA0AgAyABLQAAOgAAIANBAWohAyABQQFqIQEgAkEBayICDQALCyAAC6QBAQN/IwBBEGsiAiQAAkAgABAuIgMgACgCAEEDcSAAKQMIEOYJIgEEfyABKAIYBUEACyIBDQAgAygCTCIBKAIAKAIMIgMEQCABKAIIIAAoAgBBA3EgACkDCCADESYAIgENAQtBACEBIAAoAgBBA3FBAkYNACACIAApAwg3AwggAkElNgIAQZDbCiEBQZDbCkEgQY4YIAIQpgEaCyACQRBqJAAgAQsPACAAIAEgAiADQQAQ7wsLQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsVACAAEKMBBEAgACgCBA8LIAAQpQMLFAAgABAoBEAgAC0ADw8LIAAoAgQLJgAgACABEK0HIgFFBEBBAA8LIAAQ7QEoAgwgASgCEEECdGooAgALogEBAn8CQAJAIAAEQCAAKAIIIgMgACgCDCICRgRAIAAgA0EBdEEBIAMbIAEQqgIgACgCDCECCyACRQ0BIAAoAggiAyACTw0CIAAgACgCBCADaiACcCICIAEQ3gEaIAAgACgCCEEBajYCCCACDwtBvdIBQbS3AUE3Qc3CARAAAAtB2pMDQbS3AUE/Qc3CARAAAAtBpAxBtLcBQcAAQc3CARAAAAsuACAALQAPIgBBAWpB/wFxQRFPBEBBqrkDQZ38AEHcAEHKlwEQAAALIABB/wFHC0MAIAAgACABpCABvUL///////////8Ag0KA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AEEQayIDJAAgAyACNgIMIAAgASACEMkLIANBEGokAAsIAEEBIAAQGgsMACAAIAFBHGoQ2goLGQEBfyMAQRBrIgEkACAAEKcLIAFBEGokAAsbAQF/QQohASAAEKMBBH8gABD2AkEBawVBCgsL0wECA38CfgJAIAApA3AiBFBFIAQgACkDeCAAKAIEIgEgACgCLCICa6x8IgVXcUUEQCAAEL0FIgNBAE4NASAAKAIsIQIgACgCBCEBCyAAQn83A3AgACABNgJoIAAgBSACIAFrrHw3A3hBfw8LIAVCAXwhBSAAKAIEIQEgACgCCCECAkAgACkDcCIEUA0AIAQgBX0iBCACIAFrrFkNACABIASnaiECCyAAIAI2AmggACAFIAAoAiwiACABa6x8NwN4IAAgAU8EQCABQQFrIAM6AAALIAMLygECAn8BfCMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAwPIDSQ0BIABEAAAAAAAAAABBABCwBCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARCoByECIAErAwghACABKwMAIQMCQAJAAkACQCACQQNxQQFrDgMBAgMACyADIABBARCwBCEADAMLIAMgABCxBCEADAILIAMgAEEBELAEmiEADAELIAMgABCxBJohAAsgAUEQaiQAIAALewEDfwJAIAEQuAohAiAAEPsGIQMgABAkIQQgAiADTQRAIAAQRiIDIAEgAhCoCyMAQRBrIgEkACAAECQaIAAgAhCfAyABQQA2AgwgAyACQQJ0aiABQQxqENsBIAFBEGokAAwBCyAAIAMgAiADayAEQQAgBCACIAEQsQoLC08BA38CQCABED8hAiAAEFUhAyAAECQhBCACIANNBEAgABBGIgMgASACEKoLIAAgAyACEMUKDAELIAAgAyACIANrIARBACAEIAIgARC1CgsLEAAgABCgCyABEKALc0EBcwsQACAAEKELIAEQoQtzQQFzCxUAIAAtAA9B/wFGBEAgACgCABAYCwsLACAAIAFBOBCgCguVBQIDfwJ+IwBB4ABrIgUkAAJAAkACQAJAAkACQCAAQQIgAyAFQdgAakEAEJQDRQRAIAMNAiAEBEAgABDcBUUNBAsgBUIANwNQIAVCADcDSAwBCyAFQgA3A0ggBSAFKQNYNwNQIAVB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CCEBIARBiPIIQRgQzgFFDQJBoPIIIQEgBEGg8ghBGBDOAUUNAkEAIQBBkJ8LLQAARQRAA0AgAEECdEHgngtqIABBlYAFEJ8HNgIAIABBAWoiAEEGRw0AC0GQnwtBAToAAEH4ngtB4J4LKAIANgIAC0HgngshASACQQhqIgBB4J4LQRgQzgFFDQJB+J4LIQEgAEH4ngtBGBDOAUUNAkEYEE0iAUUNAQsgASACKQIINwIAIAEgAikCGDcCECABIAIpAhA3AggMAQtBACEBCyACQSBqJABBhKELQQE6AABBgKELIAE2AgAgAQutAQIBfwJ+AkACQCAABEAgAQRAIABBABDAAiIDKAL0Aw0CIAMpA7AEIgQgAUEIayIBKAIAQQhqrSIFVA0DIAMgBCAFfSIENwOwBCADKALABEECTwRAIANBLSAFIAQgAykDuAQgAhCSBAsgASAAKAIUEQEACw8LQZ3TAUG+vAFBiwdB254BEAAAC0Gn0QFBvrwBQZIHQdueARAAAAtBlqgBQb68AUGbB0HbngEQAAALCQAgAEEAENcGC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmsh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IABBACAHELgFDAELIAUgAiADIAAgBEEQahCgBwsgAEEBRgRAIARBCGpBARC3BUEADAELIARBCGogBhC3BUEBCyEAIAQgBCgCCEEBciIGNgIIIAIgBWoiBSABSQ0ACwsgBSACIAMgBEEIaiAAQQAgBEEQahC4BQJAIABBAUcNACAEKAIIQQFHDQAgBCgCDEUNAQsDQAJ/IABBAUwEQCAEQQhqIgEgARDfCyIBELkFIAAgAWoMAQsgBEEIaiIBQQIQtwUgBCAEKAIIQQdzNgIIIAFBARC5BSAFIAlqIgggBEEQaiIHIABBAmsiBkECdGooAgBrIAIgAyABIABBAWtBASAHELgFIAFBARC3BSAEIAQoAghBAXI2AgggCCACIAMgASAGQQEgBxC4BSAGCyEAIAUgCWohBSAAQQFHDQAgBCgCCEEBRw0AIAQoAgwNAAsLIARB0AFqJAALxAEBA38CfwJAIAEoAkwiAkEATgRAIAJFDQFBnIgLKAIAIAJB/////wNxRw0BCwJAIABB/wFxIgIgASgCUEYNACABKAIUIgMgASgCEEYNACABIANBAWo2AhQgAyAAOgAAIAIMAgsgASACEKQHDAELIAFBzABqIgQQ6QsaAkACQCAAQf8BcSICIAEoAlBGDQAgASgCFCIDIAEoAhBGDQAgASADQQFqNgIUIAMgADoAAAwBCyABIAIQpAchAgsgBBDpAxogAgsLqwMCBX8BfiAAvUL///////////8Ag0KBgICAgICA+P8AVCABvUL///////////8Ag0KAgICAgICA+P8AWHFFBEAgACABoA8LIAG9IgdCIIinIgJBgIDA/wNrIAenIgVyRQRAIAAQwAUPCyACQR52QQJxIgYgAL0iB0I/iKdyIQMCQCAHQiCIp0H/////B3EiBCAHp3JFBEACQAJAIANBAmsOAgABAwtEGC1EVPshCUAPC0QYLURU+yEJwA8LIAJB/////wdxIgIgBXJFBEBEGC1EVPsh+T8gAKYPCwJAIAJBgIDA/wdGBEAgBEGAgMD/B0cNASADQQN0QYDKCGorAwAPCyAEQYCAwP8HRyACQYCAgCBqIARPcUUEQEQYLURU+yH5PyAApg8LAnwgBgRARAAAAAAAAAAAIARBgICAIGogAkkNARoLIAAgAaOZEMAFCyEAAkACQAJAIANBAWsOAwABAgQLIACaDwtEGC1EVPshCUAgAEQHXBQzJqahvKChDwsgAEQHXBQzJqahvKBEGC1EVPshCcCgDwsgA0EDdEGgyghqKwMAIQALIAALlgECAX8BfgJAIAAQOSABEDlHDQACQAJAAkAgASgCAEEDcQ4CAAECCwNAIAAgAUYiAg0DIAEoAkQiAQ0ACwwCCwJAIAAgASkDCCIDEL8DIgFBAXINAEEAIQEgACAAEDkiAkYNACACIAMQvwMiAkUNACAAIAJBARCDARogAiEBCyABQQBHDwsgACABQQAQ1gJBAEchAgsgAgtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQs7AQJ/IAAoAgQiAQRAIAEhAANAIAAiASgCACIADQALIAEPCwNAIAAgACgCCCIBKAIARyABIQANAAsgAAs6AQF/AkAgAUUNACAAEL4DKAIAIAFBARCYBCICRSACQQhqIAFHcg0AIAAgARDVAg8LIAAgAUEAEMsICwwAQYjdChDtCzYCAAuZAgEGfyAAKAIIIgVBgCBxBEAgACgCDA8LAkAgBUEBcQRAIAAoAhAiAiAAKAIUQQJ0aiEGA0AgAiAGTw0CIAIoAgAiBARAAkAgAUUEQCAEIgMhAQwBCyABIAQ2AgALA0AgASIEKAIAIgENAAsgAiAENgIAIAQhAQsgAkEEaiECDAALAAsgACgCDCIDRQRAQQAhAwwBCwNAIAMoAgQiAQRAIAMgASgCADYCBCABIAM2AgAgASEDDAELCyADIQEDQCABIgQoAgAiAQRAIAEoAgQiAkUNAQNAIAEgAigCADYCBCACIAE2AgAgAiIBKAIEIgINAAsgBCABNgIADAELCyAAKAIIIQULIAAgAzYCDCAAIAVBgCByNgIIIAMLoQEBAn8CQCAAECRFIAIgAWtBBUhyDQAgASACEJcFIAJBBGshBCAAEEYiAiAAECRqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQowEEQCAAKAIAIAAQ9gIaEKEFCyABECQaIAEQowEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDTASACQQA6AA8gASACQQ9qENIBAkAgACABRiIBIANyRQ0ACyAAEKMBIAFyRQRAIAAQpQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgxC////////P4MhCSACIAQgCBsiC0IwiKdB//8BcSEHIAxCMIinQf//AXEiBUUEQCAGQeAAaiAKIAkgCiAJIAlQIgUbeSAFQQZ0rXynIgVBD2sQswEgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQQ9rELMBQRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCACIASFIQQCfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQ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ABCCASIGEP4BRQ0AGiADIAYQ1gMhAQNAAkAgABCVARogAUEwayEBIAAgBUEMahBbIARBAkhyDQAgA0HAACAAEIIBIgYQ/gFFDQMgBEEBayEEIAMgBhDWAyABQQpsaiEBDAELCyAAIAVBDGoQW0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELlQEBA38jAEEQayIEJAAgBCABNgIMIAQgAzYCCCAEQQRqIARBDGoQjgIgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxBjIgNBAEgNACAAIANBAWoiAxBNIgA2AgAgAEUNACAAIAMgAiABKAIMEGMhBQsgAUEQaiQAEI0CIARBEGokACAFC2MAIAIoAgRBsAFxIgJBIEYEQCABDwsCQCACQRBHDQACQAJAIAAtAAAiAkEraw4DAAEAAQsgAEEBag8LIAJBMEcgASAAa0ECSHINACAALQABQSByQfgARw0AIABBAmohAAsgAAsuAAJAIAAoAgRBygBxIgAEQCAAQcAARgRAQQgPCyAAQQhHDQFBEA8LQQAPC0EKC0YBAX8gACgCACECIAEQbyEAIAJBCGoiARDFAiAASwR/IAEgABCeAygCAEEARwVBAAtFBEAQkAEACyACQQhqIAAQngMoAgALTQEBfyMAQRBrIgMkACAAIAEgAhCLByIABEAgAyAAELMFNgIIIAMgAjYCBCADIAE2AgBBqPMIKAIAQfv7AyADEB8aECwACyADQRBqJAALfQECfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAEgASACahCkBSADQRBqIAMoAhggAygCHCAAEKsLIAMgASADKAIQEKMFNgIMIAMgACADKAIUEKQDNgIIIARBCGogA0EMaiADQQhqEPwBIANBIGokACAEKAIMGiAEQRBqJAAL4wECBH4CfyMAQRBrIgYkACABvSIFQv////////8HgyECIAACfiAFQjSIQv8PgyIDUEUEQCADQv8PUgRAIAJCBIghBCADQoD4AHwhAyACQjyGDAILIAJCBIghBEL//wEhAyACQjyGDAELIAJQBEBCACEDQgAMAQsgBiACQgAgBadnQSByIAJCIIinZyACQoCAgIAQVBsiB0ExahCzAUGM+AAgB2utIQMgBikDCEKAgICAgIDAAIUhBCAGKQMACzcD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DCABNgJIIAEoAgRBAUcNACAMKAIAEBggDEH23gEQZDYCAAsgCSgCjAEgCUGQAWokAEUNAQJAAkACQCAAEJICDgMAAQIECyATIB0QITYCAEHA9QMgExB/DAMLIBMgHhAhNgIQQcn5AyATQRBqEH8MAgsgGUEwQQAgGSgCAEEDcUEDRxtqKAIoECEhACAUEIECIQEgEyAZQVBBACAZKAIAQQNxQQJHG2ooAigQITYCKCATQbbfAUHUngMgARs2AiQgEyAANgIgQfzuAyATQSBqEH8MAQsgASAAQQAQ8wghAAJ/IAVBAUYEQCAAEJsEDAELIAAgFBDRBgshASAAEBggDCABNgIAIBQoAhAoApABIAwQ9AgLIBNBMGokACAMDwtBwNUBQdH7AEEMQf47EAAACwgAIAAQmQEaC44BAQN/AkAgACgCCCIBQQxxBEAgACgCDCECDAELAkAgAUEBcQRAIAAQsAEhAiAAKAIQIgEgACgCFEECdGohAwNAIAEgA08NAiABQQA2AgAgAUEEaiEBDAALAAsgACgCECECIABBADYCEAwBCyAAKAIIIQELIABBADYCGCAAQQA2AgwgACABQf9fcTYCCCACC78CAgN/AXwjAEEwayICJAAgACgAnAEhAyAAKAKUASACIAApApwBNwMIIAIgACkClAE3AwAgAiADQQFrEBlBAnRqKAIAIQMgAiABKQMYNwMoIAIgASkDEDcDICACIAEpAwg3AxggAiABKQMANwMQIABBlAFqAkAgA0UNAAJAIAIoAhQNACADKAIEIgRFDQAgAiAENgIUCwJAIAIrAyBEAAAAAAAAAABjRQ0AIAMrAxAiBUQAAAAAAAAAAGZFDQAgAiAFOQMgCwJAIAIoAhANACADKAIAIgRFDQAgAiAENgIQCyADKAIYQf8AcSIDRQ0AIAIgAigCKCADcjYCKAsgACAAKAKsASgCiAEiAyACQRBqQQEgAygCABEDADYCqAFBBBAnIQEgACgClAEgAUECdGogACgCqAE2AgAgAkEwaiQAC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgACADQbCbCkEDIAFBqt4BEJAECyAAKAI8KAKIASIAIANBASAAKAIAEQMAIANBIGokAAsLACAAQeXMBBCg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CQoLDA0ODxAREhMUFRYXGBkLIAJBAWoiE0EQEBohEUEBIQMDQCACIANGBEAgESAQIAJBMGxqIgFBGGopAwA3AwggESABKQMQNwMAIBEgAkEEdGoiAyABQRBrIgJBCGopAwA3AwggAyACKQMANwMAIAAgESATIAQQSCAREBggDyACKQMINwMoIA8gAikDADcDICAPIAEpAxg3AzggDyABKQMQNwMwIA8gDysDMCAPKwMgIAErAwChoDkDQCAPIA8rAzggDysDKCABKwMIoaA5A0ggACAPQTBqQQIQPSAPIA8pA0g3AzggDyAPKQNANwMwIAAgD0EgakECED0MGgUgESADQQR0IhJqIhQgASASaiISKQMANwMAIBQgEikDCDcDCCADQQFqIQMMAQsACwALIAJBAmoiA0EQEBoiAiABKQMINwMIIAIgASkDADcDACACIBApAyA3AxAgAiAQKQMoNwMYIAIgECsDICAQKwMwIgYgECsDQKFEAAAAAAAACECjIgegOQMgIBArAyghCCAQKwNIIQkgECsDOCEFIAIgBiAHoDkDMCACIAUgBSAJoUQAAAAAAAAIQKMiBaA5AzggAiAIIAWgOQMoQQQgAyADQQRNGyERIAFBIGshE0EEIQEDQCABIBFGBEAgACACIAMgBBBIIAIQGCAPIBApAzg3AyggDyAQKQMwNwMgIA8gECkDKDcDOCAPIBApAyA3AzAgACAPQSBqQQIQPQwZBSACIAFBBHQiEmoiFCASIBNqIhIpAwA3AwAgFCASKQMINwMIIAFBAWohAQwBCwALAAsgAkEDaiIDQRAQGiICIAFBCGopAwA3AwggAiABKQMANwMAIAIgASsDACIFIAUgECsDEKEiBkQAAAAAAADQv6KgOQMQIAErAwghCCAQKwNIIQkgAiAQKwM4Igc5AzggAiAFIAZEAAAAAAAAAsCioDkDMCACIAUgBiAGoKE5AyAgAiAIIAcgCaFEAAAAAAAACECjoCIFOQMoIAIgBTkDGCAQKwMwIQUgAiAHOQNIIAIgBTkDQEEEIAMgA0EETRshESABQTBrIRNBBCEBA0AgASARRgRAIAAgAiADIAQQSCACEBgMGAUgAiABQQR0IhJqIhQgEiATaiISKQMANwMAIBQgEikDCDcDCCABQQFqIQEMAQsACwALIAJBBEcNG0EGQRAQGiICIAEp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ASkDADcDACAAIAEpAwg3AwgLCgAgAEEIahDTAwsNACAAKAIAIAFBAnRqCxkAIAAQowEEQCAAIAEQvgEPCyAAIAEQ0wELYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBAWsiATYCCCAAIAFPDQEgAigCDCACKAIIEPcKIAIgAigCDEEBaiIANgIMIAIoAgghAQwACwALIAJBEGokAAuxAQEDfyMAQRBrIgckAAJAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQ4QMgCEcNAQsgBiADIAFrQQJ1IgFrQQAgASAGSBsiAUEASgRAIAAgB0EEaiABIAUQgAsiBRBGIAEQ4QMhBiAFEHYaIAEgBkcNAQsgAyACa0ECdSIBQQBKBEAgACACIAEQ4QMgAUcNAQsgBBCDCwwBC0EAIQALIAdBEGokACAAC6gBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrIghBAEoEQCAAIAEgCBDhAyAIRw0BCyAGIAMgAWsiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRCECyIFEEYgARDhAyEGIAUQNBogASAGRw0BCyADIAJrIgFBAEoEQCAAIAIgARDhAyABRw0BCyAEEIMLDAELQQAhAAsgB0EQaiQAIAALDgAgACABKAIANgIAIAALCgAgACABIABragsLACAALQALQf8AcQsIACAAQf8BcQtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAECxYAIABFBEBBAA8LQZCGCyAANgIAQX8LCwAgACABIAIRAAAL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ACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUEaaiAKQQ9qEIUHIAlrIgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVB4K4Jai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVB4K4Jai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABB+KILEKkCC18BAn8jAEEQayIDJAADQAJAIAAoAgggAk0EQEF/IQIMAQsgAyAAKQIINwMIIAMgACkCADcDACABIAAgAyACEBkQlQtBBBDOAUUNACACQQFqIQIMAQsLIANBEGokACACCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEKILIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQnwUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELMBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QYzXCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAKDQELQZCGC0EwNgIAQX8PC0GM1wogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELHAAgAEGBYE8Ef0GQhgtBACAAazYCAEF/BSAACws2ACAAIAEQqwMiAEUEQEEADwsgACgCACEBIAIEQCAAIAJBCCABEQMADwsgAEEAQYABIAERAwALPAAgACgCTEEATgRA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MyADEDgFIBggCCgCACADQQR0aiIEKQM4NwMIIBggBCkDMDcDACACQbAVakEQECchBCACKAKwFSAEQQR0aiIEIBgpAwA3AwAgBCAYKQMINwMIIANBAWohAwwBCwsLIAgoAgAQGCAIEBgLIAxBAWohDCACKAKoDiEDDAALAAUgAkG4FWoiDgJ/IAMgFEsEQCACIAJBqA5qIgMpAwA3A5gEIAIgAikDoA43A5AEIAIoAqAOIAJBkARqIBQQGUHIAGxqKAIAIRYgAiADKQMANwOIBCACIAIpA6AONwOABCACKAKgDiACQYAEaiAUEBlByABsakEIagwBCyACKALAFCACKALEFEEBayIWQQR0agsiAykDCDcDACACIAMpAwA3A7AVIAJBkAhqQgA3AwAgAkGICGoiC0IANwMAIAJCADcDgAggEyAPKQMANwMIIBMgAikDgBU3AwAgAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCAFIQQDQCAWIARBAWoiBEsEQEEAIQMgAigCwBQhCANAIAIoAqgOIANLBEAgAiACQagOaikDADcDmAMgAiACKQOgDjcDkAMgCCACKAKgDiACQZADaiADEBlByABsaigCAEEEdGohCiADQQFqIQMgAigCwBQiByEIIAcgBEEEdGoiBysDACAKKwMAoSAHKwMIIAorAwihEEpEexSuR+F6hD9jRQ0BDAMLCyATIAggBEEEdGoiAykDADcDACATIAMpAwg3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCAwBCwsgEyACKQOwFTcDACATIA4pAwA3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCACIAspAwA3A/gDIAIgAikDgAg3A/ADQQAhAyAAIAIoAoAIIAJB8ANqQQAQGUEEdGogCygCABA9AkADQAJAIAIoAogIIANNBEAgAkGACGoiA0EQEDMgAxA4IBQgAigCqA5PDQMgAiACQagOaiIKKQMANwPoAyACIAIpA6AONwPgAyACKAKgDiACQeADaiAUEBlByABsaigCACEFA0BBACEDIAVBAWoiBSACKALEFE8NAgNAIAMgAigCqA5PDQMgAiAKKQMANwPIAyACIAIpA6AONwPAAyACKALAFCEOIAIoAqAOIQggAkHAA2ogAxAZIQQgA0EBaiEDIAIoAsAUIAVBBHRqIgcrAwAgDiAIIARByABsaigCAEEEdGoiBCsDAKEgBysDCCAEKwMIoRBKRHsUrkfheoQ/Y0UNAAsMAAsACyACIAspAwA3A7gDIAIgAikDgAg3A7ADIAJBsANqIAMQGSEEAkACQCACKAKQCCIHDgIBDgALIAIgAigCgAggBEEEdGoiBCkDCDcDqAMgAiAEKQMANwOgAyACQaADaiAHEQEACyADQQFqIQMMAQsLIAIgCikDADcD2AMgAiACKQOgDjcD0AMgDyACKAKgDiACQdADaiAUEBlByABsaiIDKQMgNwMAIAIgAykDGDcDgBULIBRBAWohFAwBCwALAAsgACACKALAFCACKALEFEEAEPEBDAILIAAgAigCwBQgAigCxBRBABDxAQtBACEDA0AgAigCqA4gA00EQCACQaAOaiIDQcgAEDMgAxA4BSACIAJBqA5qKQMANwP4ASACIAIpA6AONwPwASACQfABaiADEBkhBwJAAkAgAigCsA4iBQ4CAQgACyACQagBaiIEIAIoAqAOIAdByABsakHIABAgGiAEIAURAQALIANBAWohAwwBCwsLIAIoAsgUIgQEQCACIBUpAwg3A7gCIAIgFSkDADcDsAIgAiACKALAFCIDKQMINwOoAiACIAMpAwA3A6ACIABBAiACQbACaiACQaACaiAoICUgBBDqAgsgAigCzBQiBARAIAIgECkDCDcDmAIgAiAQKQMANwOQAiACIAIoAsAUIAIoAsQUQQR0akEQayIDKQMINwOIAiACIAMpAwA3A4ACIABBAyACQZACaiACQYACaiAoICUgBBDqAgsCQCAXRSABKAIQKAIIKAIEQQJJcg0AIAIoAsgUIAIoAswUckUNACAAIA0Q5AELIBlBAWohGQwACwALIBoQ7AIQGCAaEBggAkHoB2oQXCAAKAIQIgcoAgghCQJAIAcoAtgBRQRAIActAIwCQQFxRQ0BCyAAEJcCIAcoApwCIgtFDQAgBygCoAIiBCgCACEIQQEhBQNAIAUgC08NASAHIAQgBUECdCIBaigCADYClAIgByAHKAKkAiAIQQR0ajYCmAIgACAHKALYASAHKALsASAHKAL8ASAHKALcARDDASAAEJcCIAVBAWohBSABIAcoAqACIgRqKAIAIAhqIQggBygCnAIhCwwACwALIAdCADcClAIgACAJKAIQIgMoAggiAQR/IAcoAuQBIQMgBy8BjAIhBCACIAEoAgAiAUEQaiABKAIAIAEoAggbIgEpAwg3AyAgAiABKQMANwMYIAAgAkEYaiAEQYABcUEHdiADIARBAnFBAXYQ3gggBygC6AEhAyAHLwGMAiEEIAIgCSgCECgCCCIBKAIAIAEoAgRBMGxqIgEgAUEwaygCACABQSxrKAIAQQR0aiABQSRrKAIAG0EQayIBKQMINwMQIAIgASkDADcDCCAAIAJBCGogBEGAAnFBCHYgAyAEQQRxQQJ2EN4IIAkoAhAFIAMLKAJgQQsgBy8BjAJBA3ZBAXEgBygC4AEgBygC8AEgBygCgAIgBygC3AEgCUGQ2gooAgBB6pMBEHoQaQR/IAkoAhAoAggFQQALEN4EIAAgCSgCECgCbEELIAcvAYwCQQN2QQFxIAcoAuABIAcoAvABIAcoAoACIAcoAtwBIAlBkNoKKAIAQeqTARB6EGkEfyAJKAIQKAIIBUEACxDeBCAAIAkoAhAoAmRBByAHLwGMAkECdkEBcSAHKALoASAHKAL4ASAHKAKIAiAHKALcAUEAEN4EIAAgCSgCECgCaEEGIAcvAYwCQQF2QQFxIAcoAuQBIAcoAvQBIAcoAoQCIAcoAtwBQQAQ3gQCQCAAKAI8IgFFDQAgASgCRCIBRQ0AIAAgAREBAAsgABCNBAsgAkHgFWokAA8LQb6ABEHCAEEBQajzCCgCABA7GhA8AAvOBgECfyMAQYACayIDJAAgA0HQAWoiBEGovwhBMBAgGiABQgA3AgACQAJAAkACQCAAIAQQ4gQNACADKALYAUECSQ0AIAMgAykD2AE3A8gBIAMgAykD0AE3A8ABIAMoAtABIANBwAFqQQAQGUEYbGooAgANAQtBACEAQQAhAQNAIAEgAygC2AFPDQIgAyADKQPYATcDICADIAMpA9ABNwMYIANBGGogARAZIQICQAJAIAMoAuABIgQOAgEFAAsgAyADKALQASACQRhsaiICKQMINwMIIAMgAikDEDcDECADIAIpAwA3AwAgAyAEEQEACyABQQFqIQEMAAsACyADKALYAUEDTwRAQYWWBEEAECoLIAMgAykD2AE3A7gBIAMgAykD0AE3A7ABIAEgAygC0AEgA0GwAWpBABAZQRhsaigCABBkNgIAIAMgAykD2AE3A6gBIAMgAykD0AE3A6ABIAMoAtABIANBoAFqQQEQGUEYbGooAgAEQCADIAMpA9gBNwOYASADIAMpA9ABNwOQASABIAMoAtABIANBkAFqQQEQGUEYbGooAgAQZDYCBAsgAyADKQPYATcDiAEgAyADKQPQATcDgAEgAygC0AEhASADQYABakEAEBkhBCADKALQASEAIAICfCABIARBGGxqLQAQQQFGBEAgAyADKQPYATcDWCADIAMpA9ABNwNQIAAgA0HQAGpBABAZQRhsaisDCAwBCyADIAMpA9gBNwN4IAMgAykD0AE3A3BEAAAAAAAAAAAgACADQfAAakEBEBlBGGxqLQAQQQFHDQAaIAMgAykD2AE3A2ggAyADKQPQATcDYEQAAAAAAADwPyADKALQASADQeAAakEBEBlBGGxqKwMIoQs5AwBBACEBQQEhAANAIAEgAygC2AFPDQEgAyADKQPYATcDSCADIAMpA9ABNwNAIANBQGsgARAZIQICQAJAIAMoAuABIgQOAgEEAAsgAyADKALQASACQRhsaiICKQMINwMwIAMgAikDEDcDOCADIAIpAwA3AyggA0EoaiAEEQEACyABQQFqIQEMAAsACyADQdABaiIBQRgQMyABEDggA0GAAmokACAADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwAC68BAQF/IAAoAhAiAUUEQEG39QBBo7gBQYcBQc+RARAAAAsgASgC3AEQGCABKALYARAYIAEoAuABEBggASgC5AEQGCABKALoARAYIAEoAuwBEBggASgC8AEQGCABKAL0ARAYIAEoAvgBEBggASgC/AEQGCABKAKAAhAYIAEoAoQCEBggASgCiAIQGCABKAKYAhAYIAEoAqQCEBggASgCoAIQGCAAIAEoAgA2AhAgARAYC54BAQJ/QbgCEMYDIgEgACgCECICNgIAIAAgATYCECACBEAgAUEQaiACQRBqQSgQIBogAUE4aiACQThqQSgQIBogASACKAKYATYCmAEgASACKAKcATYCnAEgASACKwOgATkDoAEgASACKAKIATYCiAEgAUHgAGogAkHgAGpBKBAgGiABDwsgAUKAgICAgICA+D83A6ABIAFCAzcDmAEgAQvjAwIIfwJ+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KAIIIQMgBCEBDAALAAtBvdIBQbS3AUHYAUH5wwEQAAALQd6HAUG0twFB2QFB+cMBEAAACyACIAApAgg3AyggAiAAKQIANwMgIAAgAkEgaiADQQFrEBlBBBDeARogACAAKAIIQQFrNgIIIAJBMGokAAunAQEEfyMAQRBrIgUkACABED8hAiMAQRBrIgMkAAJAIAJB9////wdNBEACQCACEKAFBEAgACACENMBIAAhBAwBCyADQQhqIAIQ3wNBAWoQ3gMgAygCDBogACADKAIIIgQQ+wEgACADKAIMEPoBIAAgAhC+AQsgBCABIAIQqwIgA0EAOgAHIAIgBGogA0EHahDSASADQRBqJAAMAQsQygEACyAFQRBqJAALFwAgACADNgIQIAAgAjYCDCAAIAE2AggLDQAgACABIAJBARChBwsSACAAIAEgAkL/////DxCwBacLzAEBA38jAEEgayIDQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgAS0AACICRQRAQQAPCyABLQABRQRAIAAhAQNAIAEiA0EBaiEBIAMtAAAgAkYNAAsgAyAAaw8LA0AgAyACQQN2QRxxaiIEIAQoAgBBASACdHI2AgAgAS0AASECIAFBAWohASACDQALAkAgACIBLQAAIgJFDQADQCADIAJBA3ZBHHFqKAIAIAJ2QQFxRQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgASAAawuAAQEEfyAAIABBPRC0BSIBRgRAQQAPCwJAIAAgASAAayIEai0AAA0AQaCGCygCACIBRQ0AIAEoAgAiAkUNAANAAkAgACACIAQQ6QFFBEAgASgCACAEaiICLQAAQT1GDQELIAEoAgQhAiABQQRqIQEgAg0BDAILCyACQQFqIQMLIAMLTgEBf0EBQRwQGiIGIAU6ABQgBiAAIAEQrgE2AggCfyADBEAgACACENUCDAELIAAgAhCuAQshBSAGIAA2AhggBiAENgIQIAYgBTYCDCAGCwkAIAC9QjSIpwuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAAgA6IhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAQgBaKh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IAAQ9gJBAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEP0GIAAQRhoMAQsgABBGGiAEDQAgACIBIANBAWoQ0wEMAQsgACgCACEBIAAgA0EBahC+AQsgASADaiIAIAJBD2oQ0gEgAkEAOgAOIABBAWogAkEOahDSASACQRBqJAALDQAgAEHI6Ak2AgAgAAsHACAAQQhqCwcAIABBAkkLOwACQCAAECgEQCAAECVBD0YNAQsgAEEAEMoDCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQiAULBABBBAslAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhC0ChogA0EQaiQAC6EBAQJ/AkACQCABED8iAkUNACAAEE4gABAlayACSQRAIAAgAhC9AQsgABAlIQMgABAoBEAgACADaiABIAIQIBogAkGAAk8NAiAAIAAtAA8gAmo6AA8gABAlQRBJDQFBibQDQZ38AEGXAkHd6gAQAAALIAAoAgAgA2ogASACECAaIAAgACgCBCACajYCBAsPC0GJzQFBnfwAQZUCQd3qABAAAAsdACAAQQRqEPgGQX9GBEAgACAAKAIAKAIIEQEACwsRACAAIAEgASgCACgCKBEEAAtpAQF/IwBBEGsiAiQAAkAgACgCAARAIAEoAgBFDQEgAiAAKQIANwMIIAIgASkCADcDACACQQhqIAIQ8wogAkEQaiQARQ8LQa3VAUGG+wBB2wBBhDwQAAALQZ7VAUGG+wBB3ABBhDwQAAALCABB/////wcLBQBB/wALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIEKYFIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAvQAQECfyACQYAQcQRAIABBKzoAACAAQQFqIQALIAJBgAhxBEAgAEEjOgAAIABBAWohAAsgAkGEAnEiA0GEAkcEQCAAQa7UADsAACAAQQJqIQALIAJBgIABcSECA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACfwJAIANBgAJHBEAgA0EERw0BQcYAQeYAIAIbDAILQcUAQeUAIAIbDAELQcEAQeEAIAIbIANBhAJGDQAaQccAQecAIAIbCzoAACADQYQCRwvxAQEEfyMAQRBrIgQkAAJAAkACQCAABEAgACABEIwCIAAoAgwiBSAAKAIIIgJLBEAgAUUNAiAFQX8gAW5PDQMgACgCACEDAkAgASACbCICRQRAIAMQGEEAIQMMAQsgAyACEGYiA0UNBSACIAEgBWwiAU0NACABIANqQQAgAiABaxA2GgsgACADNgIAIAAgACgCCDYCDAsgBEEQaiQADwtBvdIBQbS3AUHnAkGLwwEQAAALQdGvA0HP/ABBzABB7bIBEAAAC0GgvQNBz/wAQc0AQe2yARAAAAsgBCACNgIAQajzCCgCAEGD5wMgBBAfGhAsAAuqAQEBfwJAIANBgBBxRQ0AIAJFIANBygBxIgRBCEYgBEHAAEZycg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABBGIAFBAnRqC5wEAQt/IwBBgAFrIgwkACAMIAE2AnwgAiADEJQLIQggDEEKNgIQIAxBCGpBACAMQRBqIgkQfSEPAkACQAJAIAhB5QBPBEAgCBBNIglFDQEgDyAJEI8BCyAJIQcgAiEBA0AgASADRgRAQQAhCwNAIAAgDEH8AGoiARBaQQEgCBsEQCAAIAEQWgRAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEIEBIQ0gBkUEQCAEIA0QmwEhDQsgC0EBaiEQQQAhDiAJIQcgAiEBA0AgASADRgRAIBAhCyAORQ0CIAAQlAEaIAkhByACIQEgCCAKakECSQ0CA0AgASADRgRADAQFAkAgBy0AAEECRw0AIAEQJCALRg0AIAdBADoAACAKQQFrIQoLIAdBAWohByABQQxqIQEMAQsACwAFAkAgBy0AAEEBRw0AIAEgCxCbBSgCACERAkAgBgR/IBEFIAQgERCbAQsgDUYEQEEBIQ4gARAkIBBHDQIgB0ECOgAAIApBAWohCgwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEPcBIgsbOgAAIAdBAWohByABQQxqIQEgCiALaiEKIAggC2shCAwBCwALAAsQkAEACyAFIAUoAgBBBHI2AgALIA8QfCAMQYABaiQAIAILEQAgACABIAAoAgAoAgwRAAALmwQBC38jAEGAAWsiDCQAIAwgATYCfCACIAMQlAshCCAMQQo2AhAgDEEIakEAIAxBEGoiCRB9IQ8CQAJAAkAgCEHlAE8EQCAIEE0iCUUNASAPIAkQjwELIAkhByACIQEDQCABIANGBEBBACELA0AgACAMQfwAaiIBEFtBASAIGwRAIAAgARBbBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQggEhDSAGRQRAIAQgDRCdBSENCyALQQFqIRBBACEOIAkhByACIQEDQCABIANGBEAgECELIA5FDQIgABCVARogCSEHIAIhASAIIApqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAkIAtGDQAgB0EAOgAAIApBAWshCgsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASALEEIsAAAhEQJAIAYEfyARBSAEIBEQnQULIA1GBEBBASEOIAEQJCAQRw0CIAdBAjoAACAKQQFqIQoMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARD3ASILGzoAACAHQQFqIQcgAUEMaiEBIAogC2ohCiAIIAtrIQgMAQsACwALEJABAAsgBSAFKAIAQQRyNgIACyAPEHwgDEGAAWokACACCw0AIAAoAgAgASgCAEkLBwAgAEELSQsJACAAQQEQpgsLFgAgACABKAIANgIAIAAgAigCADYCBAsJACAAIAEQpAMLMQEBfyMAQRBrIgMkACADIAE2AgwgAyACNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtvAQR/IAAQLiEFAkAgACgCACICIAEoAgBzQQNxDQADQCAFIAJBA3EgAxDmAyIDRQ0BIAEgAygCCBCtByICRQ0BAkAgACADEEQiBBB1BEAgASACIAQQqgQMAQsgASACIAQQcQsgACgCACECDAALAAsLHAEBfyAAKAIAIQIgACABKAIANgIAIAEgAjYCAAsIACAAKAIARQuNAQEBfwJAIAAoAgQiASABKAIAQQxrKAIAaigCGEUNACAAKAIEIgEgASgCAEEMaygCAGoQwAtFDQAgACgCBCIBIAEoAgBBDGsoAgBqKAIEQYDAAHFFDQAgACgCBCIBIAEoAgBBDGsoAgBqKAIYEL4LQX9HDQAgACgCBCIAIAAoAgBBDGsoAgBqQQEQqgULC7MBAQF/IAAgATYCBCAAQQA6AAAgASABKAIAQQxrKAIAahDACwRAIAEgASgCAEEMaygCAGooAkgiAQRAIwBBEGsiAiQAIAEgASgCAEEMaygCAGooAhgEQCACQQhqIAEQqQUaAkAgAi0ACEUNACABIAEoAgBBDGsoAgBqKAIYEL4LQX9HDQAgASABKAIAQQxrKAIAakEBEKoFCyACQQhqEKgFCyACQRBqJAALIABBAToAAAsgAAsJACAAIAEQsQ0L2gMCBX8CfiMAQSBrIgQkACABQv///////z+DIQcCQCABQjCIQv//AYMiCKciA0GB/wBrQf0BTQRAIAdCGYinIQICQCAAUCABQv///w+DIgdCgICACFQgB0KAgIAIURtFBEAgAkEBaiECDAELIAAgB0KAgIAIhYRCAFINACACQQFxIAJqIQILQQAgAiACQf///wNLIgUbIQJBgYF/QYCBfyAFGyADaiEDDAELIAAgB4RQIAhC//8BUnJFBEAgB0IZiKdBgICAAnIhAkH/ASEDDAELIANB/oABSwRAQf8BIQMMAQtBgP8AQYH/ACAIUCIFGyIGIANrIgJB8ABKBEBBACECQQAhAwwBCyAEQRBqIAAgByAHQoCAgICAgMAAhCAFGyIHQYABIAJrELMBIAQgACAHIAIQpwMgBCkDCCIAQhmIpyECAkAgBCkDACADIAZHIAQpAxAgBCkDGIRCAFJxrYQiB1AgAEL///8PgyIAQoCAgAhUIABCgICACFEbRQRAIAJBAWohAgwBCyAHIABCgICACIWEQgBSDQAgAkEBcSACaiECCyACQYCAgARzIAIgAkH///8DSyIDGyECCyAEQSBqJAAgAUIgiKdBgICAgHhxIANBF3RyIAJyvgu/AQIFfwJ+IwBBEGsiAyQAIAG8IgRB////A3EhAgJ/IARBF3YiBUH/AXEiBgRAIAZB/wFHBEAgAq1CGYYhByAFQf8BcUGA/wBqDAILIAKtQhmGIQdB//8BDAELIAJFBEBBAAwBCyADIAKtQgAgAmciAkHRAGoQswEgAykDCEKAgICAgIDAAIUhByADKQMAIQhBif8AIAJrCyECIAAgCDcDACAAIAKtQjCGIARBH3atQj+GhCAHhDcDCCADQRBqJAALqwsBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQJxRQ0BIAAoAgAiAiABaiEBAkACQAJAIAAgAmsiAEGEmwsoAgBHBEAgACgCDCEDIAJB/wFNBEAgAyAAKAIIIgRHDQJB8JoLQfCaCygCAEF+IAJBA3Z3cTYCAAwFCyAAKAIYIQYgACADRwRAIAAoAggiAiADNgIMIAMgAjYCCAwECyAAKAIUIgQEfyAAQRRqBSAAKAIQIgRFDQMgAEEQagshAgNAIAIhByAEIgNBFGohAiADKAIUIgQNACADQRBqIQIgAygCECIEDQALIAdBADYCAAwDCyAFKAIEIgJBA3FBA0cNA0H4mgsgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAQgAzYCDCADIAQ2AggMAgtBACEDCyAGRQ0AAkAgACgCHCICQQJ0QaCdC2oiBCgCACAARgRAIAQgAzYCACADDQFB9JoLQfSaCygCAEF+IAJ3cTYCAAwCCwJAIAAgBigCEEYEQCAGIAM2AhAMAQsgBiADNgIUCyADRQ0BCyADIAY2AhggACgCECICBEAgAyACNgIQIAIgAzYCGAsgACgCFCICRQ0AIAMgAjYCFCACIAM2AhgLAkACQAJAAkAgBSgCBCICQQJxRQRAQYibCygCACAFRgRAQYibCyAANgIAQfyaC0H8mgsoAgAgAWoiATYCACAAIAFBAXI2AgQgAEGEmwsoAgBHDQZB+JoLQQA2AgBBhJsLQQA2AgAPC0GEmwsoAgAgBUYEQEGEmwsgADYCAEH4mgtB+JoLKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohASAFKAIMIQMgAkH/AU0EQCAFKAIIIgQgA0YEQEHwmgtB8JoLKAIAQX4gAkEDdndxNgIADAULIAQgAzYCDCADIAQ2AggMBAsgBSgCGCEGIAMgBUcEQCAFKAIIIgIgAzYCDCADIAI2AggMAwsgBSgCFCIEBH8gBUEUagUgBSgCECIERQ0CIAVBEGoLIQIDQCACIQcgBCIDQRRqIQIgAygCFCIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgAMAgsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAMAwtBACEDCyAGRQ0AAkAgBSgCHCICQQJ0QaCdC2oiBCgCACAFRgRAIAQgAzYCACADDQFB9JoLQfSaCygCAEF+IAJ3cTYCAAwCCwJAIAUgBigCEEYEQCAGIAM2AhAMAQsgBiADNgIUCyADRQ0BCyADIAY2AhggBSgCECICBEAgAyACNgIQIAIgAzYCGAsgBSgCFCICRQ0AIAMgAjYCFCACIAM2AhgLIAAgAUEBcjYCBCAAIAFqIAE2AgAgAEGEmwsoAgBHDQBB+JoLIAE2AgAPCyABQf8BTQRAIAFBeHFBmJsLaiECAn9B8JoLKAIAIgNBASABQQN2dCIBcUUEQEHwmgsgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBHyEDIAFB////B00EQCABQSYgAUEIdmciAmt2QQFxIAJBAXRrQT5qIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEGgnQtqIQICQAJAQfSaCygCACIEQQEgA3QiB3FFBEBB9JoLIAQgB3I2AgAgAiAANgIAIAAgAjYCGAwBCyABQRkgA0EBdmtBACADQR9HG3QhAyACKAIAIQIDQCACIgQoAgRBeHEgAUYNAiADQR12IQIgA0EBdCEDIAQgAkEEcWoiBygCECICDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC74CAQR/IANB7JoLIAMbIgUoAgAhAwJAAn8CQCABRQRAIAMNAUEADwtBfiACRQ0BGgJAIAMEQCACIQQMAQsgAS0AACIDwCIEQQBOBEAgAARAIAAgAzYCAAsgBEEARw8LQeSICygCACgCAEUEQEEBIABFDQMaIAAgBEH/vwNxNgIAQQEPCyADQcIBayIDQTJLDQEgA0ECdEHAjAlqKAIAIQMgAkEBayIERQ0DIAFBAWohAQsgAS0AACIGQQN2IgdBEGsgA0EadSAHanJBB0sNAANAIARBAWshBCAGQf8BcUGAAWsgA0EGdHIiA0EATgRAIAVBADYCACAABEAgACADNgIACyACIARrDwsgBEUNAyABQQFqIgEsAAAiBkFASA0ACwsgBUEANgIAQZCGC0EZNgIAQX8LDwsgBSADNgIAQX4LIQAgABAuEDkgACgCAEEDcRCrAyIARQRAQQAPCyAAEJoBC50EAgd/BH4jAEEQayIIJAACQAJAAkAgAkEkTARAIAAtAAAiBQ0BIAAhBAwCC0GQhgtBHDYCAEIAIQMMAgsgACEEAkADQCAFwBDKAkUNASAELQABIQUgBEEBaiEEIAUNAAsMAQsCQCAFQf8BcSIGQStrDgMAAQABC0F/QQAgBkEtRhshByAEQQFqIQQLAn8CQCACQRByQRBHDQAgBC0AAEEwRw0AQQEhCSAELQABQd8BcUHYAEYEQCAEQQJqIQRBEAwCCyAEQQFqIQQgAkEIIAIbDAELIAJBCiACGwsiCq0hDEEAIQIDQAJAAkAgBC0AACIGQTBrIgVB/wFxQQpJDQAgBkHhAGtB/wFxQRlNBEAgBkHXAGshBQwBCyAGQcEAa0H/AXFBGUsNASAGQTdrIQULIAogBUH/AXFMDQAgCCAMQgAgC0IAEJwBQQEhBgJAIAgpAwhCAFINACALIAx+Ig0gBa1C/wGDIg5Cf4VWDQAgDSAOfCELQQEhCSACIQYLIARBAWohBCAGIQIMAQsLIAEEQCABIAQgACAJGzYCAAsCQAJAIAIEQEGQhgtBxAA2AgAgB0EAIANCAYMiDFAbIQcgAyELDAELIAMgC1YNASADQgGDIQwLIAynIAdyRQRAQZCGC0HEADYCACADQgF9IQMMAgsgAyALWg0AQZCGC0HEADYCAAwBCyALIAesIgOFIAN9IQMLIAhBEGokACADC2sBAX8CQCAARQRAQeiaCygCACIARQ0BCyAAIAEQrAQgAGoiAi0AAEUEQEHomgtBADYCAEEADwsgAiABEPkCIAJqIgAtAAAEQEHomgsgAEEBajYCACAAQQA6AAAgAg8LQeiaC0EANgIACyACC9IKAQ1/IAEsAAAiAkUEQCAADwsCQCAAIAIQzQEiAEUNACABLQABRQRAIAAPCyAALQABRQ0AIAEtAAJFBEAgAC0AASICQQBHIQQCQCACRQ0AIAAtAABBCHQgAnIiAiABLQABIAEtAABBCHRyIgVGDQAgAEEBaiEBA0AgASIALQABIgNBAEchBCADRQ0BIABBAWohASACQQh0QYD+A3EgA3IiAiAFRw0ACwsgAEEAIAQbDwsgAC0AAkUNACABLQADRQRAIABBAmohAiAALQACIgRBAEchAwJAAkAgBEUNACAALQABQRB0IAAtAABBGHRyIARBCHRyIgQgAS0AAUEQdCABLQAAQRh0ciABLQACQQh0ciIFRg0AA0AgAkEBaiEAIAItAAEiAUEARyEDIAFFDQIgACECIAEgBHJBCHQiBCAFRw0ACwwBCyACIQALIABBAmtBACADGw8LIAAtAANFDQAgAS0ABEUEQCAAQQNqIQIgAC0AAyIEQQBHIQMCQAJAIARFDQAgAC0AAUEQdCAALQAAQRh0ciAALQACQQh0ciAEciIEIAEoAAAiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnIiBUYNAANAIAJBAWohACACLQABIgFBAEchAyABRQ0CIAAhAiAEQQh0IAFyIgQgBUcNAAsMAQsgAiEACyAAQQNrQQAgAxsPCyAAIQRBACECIwBBoAhrIggkACAIQZgIakIANwMAIAhBkAhqQgA3AwAgCEIANwOICCAIQgA3A4AIAkACQAJAAkAgASIFLQAAIgFFBEBBfyEJQQEhAAwBCwNAIAQgBmotAABFDQQgCCABQf8BcUECdGogBkEBaiIGNgIAIAhBgAhqIAFBA3ZBHHFqIgAgACgCAEEBIAF0cjYCACAFIAZqLQAAIgENAAtBASEAQX8hCSAGQQFLDQELQX8hA0EBIQcMAQtBASEKQQEhAQNAAn8gBSAJaiABai0AACIDIAAgBWotAAAiB0YEQCABIApGBEAgAiAKaiECQQEMAgsgAUEBagwBCyADIAdLBEAgACAJayEKIAAhAkEBDAELIAIiCUEBaiECQQEhCkEBCyIBIAJqIgAgBkkNAAtBfyEDQQAhAEEBIQJBASEHQQEhAQNAAn8gAyAFaiABai0AACILIAIgBWotAAAiDEYEQCABIAdGBEAgACAHaiEAQQEMAgsgAUEBagwBCyALIAxJBEAgAiADayEHIAIhAEEBDAELIAAiA0EBaiEAQQEhB0EBCyIBIABqIgIgBkkNAAsgCiEACwJ/IAUgBSAHIAAgA0EBaiAJQQFqSyIAGyIKaiADIAkgABsiC0EBaiIHEM4BBEAgCyAGIAtBf3NqIgAgACALSRtBAWohCkEADAELIAYgCmsLIQ0gBkEBayEOIAZBP3IhDEEAIQMgBCEAA0ACQCAEIABrIAZPDQBBACECIARBACAMEPsCIgEgBCAMaiABGyEEIAFFDQAgASAAayAGSQ0CCwJ/An8gBiAIQYAIaiAAIA5qLQAAIgFBA3ZBHHFqKAIAIAF2QQFxRQ0AGiAIIAFBAnRqKAIAIgEgBkcEQCAGIAFrIgEgAyABIANLGwwBCwJAIAUgByIBIAMgASADSxsiAmotAAAiCQRAA0AgACACai0AACAJQf8BcUcNAiAFIAJBAWoiAmotAAAiCQ0ACwsDQCABIANNBEAgACECDAYLIAUgAUEBayIBai0AACAAIAFqLQAARg0ACyAKIQEgDQwCCyACIAtrCyEBQQALIQMgACABaiEADAALAAsgCEGgCGokACACIQQLIAQLHQAgAEEAIABBmQFNG0EBdEGwgglqLwEAQbTzCGoL6gEBA38CQAJAAkAgAUH/AXEiAiIDBEAgAEEDcQRAA0AgAC0AACIERSACIARGcg0FIABBAWoiAEEDcQ0ACwtBgIKECCAAKAIAIgJrIAJyQYCBgoR4cUGAgYKEeEcNASADQYGChAhsIQQDQEGAgoQIIAIgBHMiA2sgA3JBgIGChHhxQYCBgoR4Rw0CIAAoAgQhAiAAQQRqIgMhACACQYCChAggAmtyQYCBgoR4cUGAgYKEeEYNAAsMAgsgABA/IABqDwsgACEDCwNAIAMiAC0AACICRQ0BIABBAWohAyACIAFB/wFxRw0ACwsgAAt+AQJ/IwBBEGsiBCQAAkAgAA0AQbTbCigCACIADQAgBEGY7gkoAgA2AgxBtNsKQQAgBEEMakEAEOIBIgA2AgALAn8CQCADRQ0AIAAgAxDLAyIFIANHDQAgBRB1RQ0AIAAgASACIAMQ6AMMAQsgACABIAIgAxAiCyAEQRBqJAALDwBBiIkLIABBAWutNwMAC0gBAn8CfyABQR9NBEAgACgCACECIABBBGoMAQsgAUEgayEBIAALKAIAIQMgACACIAF0NgIAIAAgAyABdCACQSAgAWt2cjYCBAvIAgEGfyMAQfABayIIJAAgCCADKAIAIgc2AugBIAMoAgQhAyAIIAA2AgAgCCADNgLsAUEAIAFrIQwgBUUhCQJAAkACQAJAIAdBAUcEQCAAIQdBASEFDAELIAAhB0EBIQUgAw0ADAELA0AgByAGIARBAnRqIgooAgBrIgMgACACEKoDQQBMDQEgCUF/cyELQQEhCQJAIAsgBEECSHJBAXFFBEAgCkEIaygCACEKIAcgDGoiCyADIAIQqgNBAE4NASALIAprIAMgAhCqA0EATg0BCyAIIAVBAnRqIAM2AgAgCEHoAWoiByAHEN8LIgcQuQUgBUEBaiEFIAQgB2ohBCADIQcgCCgC6AFBAUcNASAIKALsAQ0BDAMLCyAHIQMMAQsgByEDIAlFDQELIAEgCCAFEN4LIAMgASACIAQgBhCgBwsgCEHwAWokAAtLAQJ/IAAoAgQhAiAAAn8gAUEfTQRAIAAoAgAhAyACDAELIAFBIGshASACIQNBAAsiAiABdjYCBCAAIAJBICABa3QgAyABdnI2AgALmwEBAX8CQCACQQNPBEBBkIYLQRw2AgAMAQsCQCACQQFHDQAgACgCCCIDRQ0AIAEgAyAAKAIEa6x9IQELIAAoAhQgACgCHEcEQCAAQQBBACAAKAIkEQMAGiAAKAIURQ0BCyAAQQA2AhwgAEIANwMQIAAgASACIAAoAigRHQBCAFMNACAAQgA3AgQgACAAKAIAQW9xNgIAQQAPC0F/C68BAQN/IAMoAkwaIAEgAmwhBSADIAMoAkgiBEEBayAEcjYCSCADKAIEIgYgAygCCCIERgR/IAUFIAAgBiAEIAZrIgQgBSAEIAVJGyIEECAaIAMgAygCBCAEajYCBCAAIARqIQAgBSAEawsiBARAA0ACQCADEL8FRQRAIAMgACAEIAMoAiARAwAiBg0BCyAFIARrIAFuDwsgACAGaiEAIAQgBmsiBA0ACwsgAkEAIAEbCy8AIAAgACABlyABvEH/////B3FBgICA/AdLGyABIAC8Qf////8HcUGAgID8B00bC0EBAn8jAEEQayIBJABBfyECAkAgABC/BQ0AIAAgAUEPakEBIAAoAiARAwBBAUcNACABLQAPIQILIAFBEGokACACCxoBAX8Q7gMhAEH32gotAABB7NoKKAIAIAAbC3wBAn8gACAAKAJIIgFBAWsgAXI2AkggACgCFCAAKAIcRwRAIABBAEEAIAAoAiQRAwAaCyAAQQA2AhwgAEIANwMQIAAoAgAiAUEEcQRAIAAgAUEgcjYCAEF/DwsgACAAKAIsIAAoAjBqIgI2AgggACACNgIEIAFBG3RBH3UL+gMDA3wCfwF+IAC9IgZCIIinQf////8HcSIEQYCAwKAETwRAIABEGC1EVPsh+T8gAKYgAL1C////////////AINCgICAgICAgPj/AFYbDwsCQAJ/IARB///v/gNNBEBBfyAEQYCAgPIDTw0BGgwCCyAAmSEAIARB///L/wNNBEAgBEH//5f/A00EQCAAIACgRAAAAAAAAPC/oCAARAAAAAAAAABAoKMhAEEADAILIABEAAAAAAAA8L+gIABEAAAAAAAA8D+goyEAQQEMAQsgBEH//42ABE0EQCAARAAAAAAAAPi/oCAARAAAAAAAAPg/okQAAAAAAADwP6CjIQBBAgwBC0QAAAAAAADwvyAAoyEAQQMLIAAgAKIiAiACoiIBIAEgASABIAFEL2xqLES0or+iRJr93lIt3q2/oKJEbZp0r/Kws7+gokRxFiP+xnG8v6CiRMTrmJmZmcm/oKIhAyACIAEgASABIAEgAUQR2iLjOq2QP6JE6w12JEt7qT+gokRRPdCgZg2xP6CiRG4gTMXNRbc/oKJE/4MAkiRJwj+gokQNVVVVVVXVP6CiIQEgBEH//+/+A00EQCAAIAAgAyABoKKhDwtBA3QiBEHAyQhqKwMAIAAgAyABoKIgBEHgyQhqKwMAoSAAoaEiAJogACAGQgBTGyEACyAACx8BAX8CQCABEO0BIgIEQCACKAIIDQELIAAgARDRCwsLqQcCDX8EfCMAQdAAayIDJAAgASgCGCENIAEoAhQhByABKAIAIQUgASgCACIIQQAgCEEAShshCiABKAIYIQsgASgCFCEJA0AgBCAKRwRAIAkgBEECdGooAgAiBiAJIARBAWoiAUECdGooAgAiDCAGIAxKGyEMA0AgBiAMRgRAIAEhBAwDCyAGQQJ0IQ4gBkEBaiEGIAQgCyAOaigCAEcNAAsLCwJAIAQgCE4EQCADQQA2AkggAyAFNgJMIAVBIU8EQCADIAVBA3YgBUEHcUEAR2pBARAaNgJICyAFQQAgBUEAShshCCADQUBrIQkDQCAIIA8iAUcEQCAHIAFBAWoiD0ECdGooAgAgByABQQJ0aiIEKAIAa0EBRw0BIAMgAykCSDcDKCADQShqIAEQywINASANIAQoAgBBAnRqKAIAIQEgAyADKQJINwMgIANBIGogARDLAg0BIANByABqIAEQ+AUgCUIANwMAIANCADcDOCADQgA3AzAgByABQQJ0aiIGKAIAIQREAAAAAAAAAAAhEANAIAYoAgQgBEoEQCAHIA0gBEECdGoiBSgCACIKQQJ0aiILKAIEIAsoAgBrQQFGBEAgA0HIAGogChD4BSACIAAgASAFKAIAENYBIREgAyAFKAIANgJEIANBMGpBBBAnIQUgAygCMCAFQQJ0aiADKAJENgIAIBAgEaAhEAsgBEEBaiEEDAELCyADKAI4IgRFDQNEAAAAAAAAAABETGB3hy5VGEAgBLgiEaMgBEEBRhshEiAQIBGjIREgAiAAIAFsQQN0aiEGQQAhAUSamZmZmZm5PyEQQQAhBQNAIAQgBUsEQCADIAMpAzg3AwggAyADKQMwNwMAIBAQSyETIAIgAygCMCADIAUQGUECdGooAgAgAGxBA3RqIgQgEyARoiAGKwMAoDkDACAEIBAQVyARoiAGKwMIoDkDCCAFQQFqIQUgEiAQoCEQIAMoAjghBAwBCwsDQCABIARPBEAgA0EwaiIBQQQQMyABEDgMAwUgAyADKQM4NwMYIAMgAykDMDcDECADQRBqIAEQGSEEAkACQAJAIAMoAkAiBQ4CAgABCyADKAIwIARBAnRqKAIAEBgMAQsgAygCMCAEQQJ0aigCACAFEQEACyABQQFqIQEgAygCOCEEDAELAAsACwsgAygCTEEhTwRAIAMoAkgQGAsgA0HQAGokAA8LQcalA0GUuwFByQFBny4QAAALQYmhA0GUuwFB3AFBny4QAAALrAICCn8DfCAAKAIYIQcgACgCFCEFIABBARDSAgRAIAUgACgCACIEQQJ0aigCACIIRQRARAAAAAAAAPA/DwtBACEAIARBACAEQQBKGyEJIAFBACABQQBKGyEKA0AgACAJRwRAIAUgAEECdGooAgAiAyAFIABBAWoiBEECdGooAgAiBiADIAZKGyEGIAIgACABbEEDdGohCwNAIAMgBkYEQCAEIQAMAwUgByADQQJ0aiEMQQAhAEQAAAAAAAAAACEOA0AgACAKRkUEQCALIABBA3RqKwMAIAIgDCgCACABbEEDdGorAwChIg8gD6IgDqAhDiAAQQFqIQAMAQsLIANBAWohAyANIA6foCENDAELAAsACwsgDSAIt6MPC0HeowNBlLsBQZwBQcb3ABAAAAuYAQEDfyAABEAgACgCECECIAAoAhQQGCAAKAIgEBggACgCMBAYIAAoAiQEQEEBIAJ0IgJBACACQQBKGyECA0AgACgCJCEDIAEgAkZFBEAgAyABQQJ0aigCABDEBSABQQFqIQEMAQsLIAMQGAsgACgCKCEBA0AgAQRAIAEoAhQhAiABELEIIAAgAjYCKCACIQEMAQsLIAAQGAsLHgEBfyAAKAIwIgJFBEAgACABQQgQGiICNgIwCyACC0oCAn8CfCACQQAgAkEAShshAgNAIAIgA0ZFBEAgACADQQN0IgRqKwMAIAEgBGorAwChIgYgBqIgBaAhBSADQQFqIQMMAQsLIAWfC+8BAQR/IwBBEGsiByQAIAEoAhAoAogBIgQgAygCBCIGSQRAIAMhBSAGQSFPBH8gAygCAAUgBQsgBEEDdmoiBSAFLQAAQQEgBEEHcXRyOgAAIAIgAUEBEIMBGiAAIAEQbiEEA0AgBARAIAEgBEEwQQAgBCgCAEEDcSIGQQNHG2ooAigiBUYEQCAEQVBBACAGQQJHG2ooAighBQsgBSgCECgCiAEhBiAHIAMpAgA3AwggB0EIaiAGEMsCRQRAIAAgBSACIAMQxwULIAAgBCABEHIhBAwBCwsgB0EQaiQADwtBjbADQez6AEHRAEGNIhAAAAvmAwIDfwh8IAEQHCEFA0AgBQRAAkAgAyAFRiACIAVGcg0AIAUoAhAiBigC6AEgAUcNACAGLQCGAQ0AIAAgBSAEQQAQxQw2AhQgAEEEECchBiAAKAIAIAZBAnRqIAAoAhQ2AgALIAEgBRAdIQUMAQVBASEGA0AgASgCECIFKAK0ASAGTgRAIAUoArgBIAZBAnRqKAIAIgUgAkYgAyAFRnJFBEBBAUEIENQCIQcgBSgCECIFKwMoIQsgBSsDICEIIAUrAxghCSAFKwMQIQogB0EENgIEIAdBBEEQENQCIgU2AgACfCAELQAQQQFGBEAgCSAEKwMIIgyhIQkgCiAEKwMAIg2hIQogCCANoCEIIAsgDKAMAQsgBCsDCCIMIAmiIAkgC6BEAAAAAAAA4L+iIAxEAAAAAAAA8L+goiIOoCEJIAQrAwAiDSAKoiAKIAigRAAAAAAAAOC/oiANRAAAAAAAAPC/oKIiD6AhCiANIAiiIA+gIQggDCALoiAOoAshCyAFIAk5AzggBSAIOQMwIAUgCzkDKCAFIAg5AyAgBSALOQMYIAUgCjkDECAFIAk5AwggBSAKOQMAIAAgBzYCFCAAQQQQJyEFIAAoAgAgBUECdGogACgCFDYCAAsgBkEBaiEGDAELCwsLC5wBAQh/IAFBACABQQBKGyEJIAFBAWogAWxBAm1BBBAaIQcgAUEEEBohBCABIQUDQCADIAlGRQRAIAMgACABIAQQ8gMgAiAFaiEIIAMhBgNAIAIgCEZFBEAgByACQQJ0aiAEIAZBAnRqKAIAsjgCACAGQQFqIQYgAkEBaiECDAELCyAFQQFrIQUgA0EBaiEDIAghAgwBCwsgBBAYIAcLKQEBfyAAKAIQLwGIAUEOcSECIAEEQCAAEMwHGgsgAgRAIAAgAhDLBQsLDQAgAEHhAyABEMEMGgu7AgIDfwF8IwBBIGsiBCQAA38gAC0AACIGQQlrQQVJIAZBIEZyBH8gAEEBaiEADAEFIAZBK0YEQEEBIQUgAEEBaiEACyABIAU6ABAgBCAEQRhqNgIAIAQgBEEQajYCBAJAAkACQCAAQdmDASAEEFEiAA4CAgABCyAEIAQrAxg5AxALIAECfCABLQAQQQFGBEAgAkQAAAAAAADwP2QEQCABIAMgBCsDGCACoxApOQMAIAMgBCsDECACoxApDAILIAQrAxghByACRAAAAAAAAPA/YwRAIAEgAyAHIAKjECM5AwAgAyAEKwMQIAKjECMMAgsgASAHOQMAIAQrAxAMAQsgASAEKwMYIAKjRAAAAAAAAPA/oDkDACAEKwMQIAKjRAAAAAAAAPA/oAs5AwhBASEACyAEQSBqJAAgAAsLCyYBAn8gACgCSCIBIAAoAgRJBH8gACABQQRqNgJIIAEoAgAFQQALC4MCAgV/CHwgAgRAAkAgACgCCCIDRQ0AIAEoAggiBEUNACADKAIkIgUgBCgCJCIHRg0AIAMrAwAiCyAEKwMIIgiiIAMrAwgiCSAEKwMAIgyioSIKmUS7vdfZ33zbPWMNACADKwMQIg0gCKIgBCsDECIOIAmioSAKoyEIAkAgBSsDCCIJIAcrAwgiD2MNACAJIA9hBEAgBSsDACAHKwMAYw0BCyAHIQUgASEACyAALQAMIQACQCAFKwMAIAhlBEAgAA0BDAILIABBAUYNAQsgAkEYENYHIgYgDiALoiANIAyaoqAgCqM5AwggBiAIOQMACyAGDwtBi9MBQbG5AUEsQfEjEAAACxoAIAArAwAgASsDAKEgACsDCCABKwMIoRBKC4EBAgJ/AXwgASACNgIQIAEgAyACKwMIoDkDGCAAKAIAIAAgARDfDEEobGohBANAAkAgBCIFKAIgIgRFDQAgASsDGCIGIAQrAxgiA2QNASADIAZkDQAgAisDACAEKAIQKwMAZA0BCwsgASAENgIgIAUgATYCICAAIAAoAghBAWo2AggLtQECA38CfAJAIABB5CYQJiIEBEAgBBCQAiIEQQJKDQELQRQhBAsgBBDNAiEFIAMgACgCECIAKwMoRAAAAAAAAOA/oqAhAyACIAArAyBEAAAAAAAA4D+ioCECIAS4IQhBACEAA38gACAERgR/IAEgBDYCACAFBSAFIABBBHRqIgYgALggCKNEGC1EVPshCUCiIgcgB6AiBxBXIAOiOQMIIAYgBxBLIAKiOQMAIABBAWohAAwBCwsLIgAgACABKwMAIAIrAwCgOQMAIAAgASsDCCACKwMIoDkDCAumEQIRfwh8IwBBEGsiDSQAIAAoAgggACgCBGoiB0EgEBohECAHIAUoAjAiCUEBdEEAIAlBAEobayIVQQAgFUEAShshDiABIAFDRwOAP5QgAxu7IRcDQCAGIA5HBEAgECAGQQV0aiIIIAUrAxhEAAAAAAAA4D+iIhggBSgCKCAGQQR0aiIRKwMAIBeiRAAAAAAAAOA/oiIZIAZBAnQiEiACKAIAaioCALsiGqCgOQMQIAggGiAZoSAYoTkDACAIIAUrAyBEAAAAAAAA4D+iIhggESsDCCAXokQAAAAAAADgP6IiGSACKAIEIBJqKgIAuyIaoKA5AxggCCAaIBmhIBihOQMIIAZBAWohBgwBCwsCQCAJQQBKBEAgCUEBakEEEBohEUEAIRIgBSgCMEEBakEEEBohDkEAIQIDQCAFKAIwIgYgAkoEQEEAIQYgAkECdCIKIAUoAjRqKAIAIghBACAIQQBKGyETRP///////+9/IRdE////////7/8hGCAIQQJqIgxBBBAaIQcgDEEgEBohCUT////////v/yEZRP///////+9/IRoDQCAGIBNHBEAgByAGQQJ0IgtqIAAoAhAgBSgCOCAKaigCACALaigCACIPQQJ0aigCADYCACAJIAZBBXRqIgsgECAPQQV0aiIPKwMAIhs5AwAgCyAPKwMIIhw5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QQAhBwNAIAgoAgAgB00EQCACIAIoAgBBAWs2AgAgAUGSgAUQGxogASACKAIAEEMgAUH1xwEQGxogCBCMCgwDCyAHBEAgAUHH6gQQGxoLIAgoAgghAyACIAIoAgAiBkEBajYCACABIAYQQyABQf7VAxAbGiABIAIoAgAQQwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAdB0ABsaiIDKAIAIgYOEAoKAAABAQIDBAQGBwsFBQgJCyAEQdAAQfAAIAZBAkYbNgJQIAFB/ekEIARB0ABqEB4gASACKAIAEEMgASADQQhqELIIDAoLIARBwgBB4gAgBkEERhs2AmAgAUH96QQgBEHgAGoQHiABIAIoAgAQQyABIANBCGoQsggMCQsgAUGy6gRBABAeIAEgAigCABBDIAEgA0EIahCyCAwICyABQZrqBEEAEB4gASACKAIAEEMgAysDCCELIAQgAysDEDkDmAEgBCALOQOQASABQYXoBCAEQZABahAeIAEgAigCABBDIARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUGK6gQgBEGAAWoQHiABIAIoAgAQQyAEIAMrAyA5A3AgAUHJ5wQgBEHwAGoQHiABIAIoAgAQQyABQeXJAxAbGiADKAIoIAIgARC8AiABQQoQZQwHCyAEQcMAQeMAIAZBCEYbNgKgASABQf3pBCAEQaABahAeIAEgAigCABBDIAFBsekEQQAQHiABIAIoAgAQQyABQf7JAxAbGiADKAIIIAIgARC8AiABQQoQZQwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQf3pBCAEQZACahAeIAEgAigCABBDAkACQAJAIAMoAggOAgABAgsgAUGx6QRBABAeIAEgAigCABBDIAFB/skDEBsaIAMoAhAgAiABELwCIAFBChBlDAcLIAFBi+kEQQAQHiABIAIoAgAQQyABIAIoAgAQQyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFBsegEIARBgAJqEB4gASACKAIAEEMgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQZvoBCAEQfABahAeIAEgAigCABBDIAEgAygCMCADKAI0IAIQjw8MBgsgAUGe6QRBABAeIAEgAigCABBDIAEgAigCABBDIAMrAxAhCyADKwMYIQwgBCADKwMgOQPg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CyABEBwhBwJAA0AgBwRAIAcoAhAiAiACKwMQIg4gAisDWKE5AzAgAiAOIAIrA2CgOQNAIAIgAisDGCITIAIrA1BEAAAAAAAA4D+iIg6hOQM4IAIgEyAOoDkDSCABIAcQLSEGA0AgBgRAIAYoAhAoAggiCARAIAgoAgRFDQUgA0HABGogCCgCACIEQTAQIBogA0HwA2oiAiAEQTAQIBogA0GgBGogAhDdCCADKwO4BCERIAMrA7AEIRAgAysDqAQhDyADKwOgBCESQQAhAgNAIAgoAgQgAksEQCACBEAgA0HABGogCCgCACACQTBsaiIFQTAQIBogA0HAA2oiBCAFQTAQIBogA0GgBGogBBDdCCADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAygCyAQEQCADIAMpA9gENwO4AyADIAMpA9AENwOwAyADIAMoAsAEIgQpAwg3A6gDIAMgBCkDADcDoAMgA0GgBGogA0GwA2ogA0GgA2oQzAMgAysDoAQhFCADKwOoBCETIAMrA7AEIQ4gESADKwO4BBAjIREgECAOECMhECAPIBMQKSEPIBIgFBApIRILIAMoAswEBEAgAyADKQPoBDcDmAMgAyADKQPgBDcDkAMgAyADKALABCADKALEBEEEdGpBEGsiBCkDCDcDiAMgAyAEKQMANwOAAyADQaAEaiADQZADaiADQYADahDMAyADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAkEBaiECDAELCyAIIBE5AyAgCCAQOQMYIAggDzkDECAIIBI5AwgLIAEgBhAwIQYMAQsLIAEgBxAdIQcMAQsLIABBADoAnQIgACABNgKgAQJAIAFB8OQAECYiAkUNACADIANBoARqNgL0AiADIANBwARqNgLwAiACQdmDASADQfACahBRIgJBAEwNACAAIAMrA8AERAAAAAAAAFJAoiIOOQPAASAAIA45A8gBIAJBAUcEQCAAIAMrA6AERAAAAAAAAFJAojkDyAELIABBAToAnQILIABBADoAnAICQCABQaOwARAmIgJFDQAgAyADQaAEajYC5AIgAyADQcAEajYC4AIgAkHZgwEgA0HgAmoQUSICQQBMDQAgACADKwPABEQAAAAAAABSQKIiDjkD0AEgACAOOQPYASACQQFHBEAgACADKwOgBEQAAAAAAABSQKI5A9gBCyAAQQE6AJwCCyAAQQA6AJ4CIAAgASgCECgCCCICKQMwNwPgASAAIAIpAzg3A+gBAkAgASgCECgCCCICKwMwRPyp8dJNYlA/ZEUNACACKwM4RPyp8dJNYlA/ZEUNACAAQQE6AJ4CCyACLQBRIQIgAEGb1gE2ArwBIABB2gBBACACGzYCmAICQCABQcg3ECYiAkUNACACLQAARQ0AIAAgAjYCvAELIAAgASgCECICKQMQNwP4ASAAIAIpAyg3A5ACIAAgAikDIDcDiAIgACACKQMYNwOAAkHg2AogAUEAQfUvQQAQIjYCAEHk2AogAUEAQd73AEEAECI2AgAgAEEAQYjZCigCAEGD6gAQjQE2ArgCQQBBhNkKKAIARAAAAAAAACxARAAAAAAAAPA/EE8hDiAAQbydCjYCyAIgACAOOQPAAiAAIAEQITYCtAEgACgCqAIQGCAAQQA2AqgCIAAoAqwCEBggAEEANgKsAiAAKAK0AhAYIABBADYCtAICQAJAIAFB2CkQJiIFBEAgACABQZbbABAmIgJByssDIAIbNgKgAiAAIAFBidsAECYiAkHYngMgAhsiBDYCpAIgACgCoAIiAiAEEPkCIAJqIgJBACACLQAAGyICBEAgAyACLAAANgLQAkGQ4QQgA0HQAmoQKiAAQZWABTYCpAILIAAgBRBkNgKoAiADQgA3A9AEIANCADcDyAQgA0IANwPABCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCACAAKAKoAiECA0AgAiAAKAKgAhCxBSICBEAgAyACNgLUBCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCAEEAIQIMAQsLIAMoAsgEIgJBAWsiBUEASA0CIAJBAk8EQCADQQA2AtQEIANBwARqIgRBBBAnIQIgAygCwAQgAkECdGogAygC1AQ2AgAgBCAAQawCakEAQQQQxgELQQAhAgNAIAMoAsgEIAJLBEAgAyADKQPIBDcDuAIgAyADKQPABDcDsAIgA0GwAmogAhAZIQgCQAJAAkAgAygC0AQiBA4CAgABCyADKALABCAIQQJ0aigCABAYDAELIAMoAsAE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AAsgAgvUAQEGfyAAKAIUIAAoAgxBAnRqKAIAKAIcIAAoAixqIQEgACgCJCEEIAAoAlAhAgNAIAIgBEkEQCACLQAAIgMEfyADQaCABWotAAAFQQELIQMgAUEBdEGgggVqLwEABEAgACACNgJEIAAgATYCQAsDQAJAA0AgASABQQF0IgVBgIgFai4BACADakEBdCIGQeCDBWouAQBGDQEgBUHgiQVqLgEAIgFB3QBIDQALIANBwIsFai0AACEDDAELCyACQQFqIQIgBkGAjAVqLgEAIQEMAQsLIAELvAICAX4CfyAABEAgACAAED8iBEF4cWohAyAErSECA0AgAkKV08fetfKp0kZ+IQIgACADRkUEQCACIAApAABCldPH3rXyqdJGfiICQi+IIAKFQpXTx9618qnSRn6FIQIgAEEIaiEADAELCyACQoCAgICAgICAAUIAIAEbhSECAkACQAJAAkACQAJAAkACQCAEQQdxQQFrDgcGBQQDAgEABwsgAzEABkIwhiAChSECCyADMQAFQiiGIAKFIQILIAMxAARCIIYgAoUhAgsgAzEAA0IYhiAChSECCyADMQACQhCGIAKFIQILIAMxAAFCCIYgAoUhAgsgAiADMQAAhSECCyACQpXTx9618qnSRn4iAkIviCAChUKV08fetfKp0kZ+IgJCL4ggAoWnDwtB9NIBQcG5AUGYAUGb+QAQAAALJAAgACABIAIQ4wkgACgCTCIAKAIIIAEgAiAAKAIAKAIIESEAC9EDAQF/AkAgASACRgRAIANBADYCAAwBCwJAAkAgACABIAIQ4wJBCWsiB0EXS0EBIAd0QZOAgARxRXINAANAIAAgASAAKAJAaiIBIAIQ4wJBCWsiB0EXTQRAQQEgB3RBk4CABHENAQsLIAEgAkYEQCADQQA2AgAMAwsgAyABNgIAAkACQAJAA0ACQCAAIAEgAhDjAiIHQQlrQQJJDQAgB0E9Rg0CIAdBDUYgB0EgRnINACAHQX9GDQUgASAAKAJAaiEBDAELCyAEIAE2AgADQCAAIAEgACgCQGoiASACEOMCIgRBCWsiB0EXSw0CQQEgB3RBk4CABHENAAsMAQsgBCABNgIADAELIARBPUcNAQsgASADKAIARg0AA0AgACABIAAoAkBqIgEgAhDjAiIDQQlrQQJJDQACQCADQSBrDgMBAgMACyAD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BEAgASAAKAIMTQRAQQAPCyABrSACrX5CIIhQRQRAQT0PCyAAKAIAIAEgAmwQZiIERQRAQTAPCyAEIAAoAgwiAyACbGpBACABIANrIAJsEDYaIAMgACgCBCIFIAAoAghqSQRAIAQgASADIAVrIgNrIgYgAmxqIAQgAiAFbGogAiADbBC2ARogACAGNgIECyAAIAE2AgwgACAENgIAQQAPC0G90gFBtLcBQeEAQY6JARAAAAs6AQF/IABB8JEJKAIAIgE2AgAgACABQQxrKAIAakH8kQkoAgA2AgAgAEEEahCNBxogAEE4ahDCCyAACxgAIABBhI8JNgIAIABBIGoQNBogABCVBwsdACMAQRBrIgMkACAAIAEgAhCvCyADQRBqJAAgAAuZAQECfwJAIAAQLiIEIAAoAgBBA3EgAUEAECIiAw0AAkAgBEGVgAUQywMiA0GVgAVHDQAgAxB1RQ0AIAQgACgCAEEDcSABQZWABRDoAyEDDAELIAQgACgCAEEDcSABQZWABRAiIQMLAkACQCACRQ0AIAQgAhDLAyIBIAJHDQAgARB1RQ0AIAAgAyACEKoEDAELIAAgAyACEHELC64BAQZ/IwBBEGsiAiQAIAJBCGoiAyAAEKkFGgJAIAMtAABFDQAgAkEEaiIDIAAgACgCAEEMaygCAGoQUyADELkLIQQgAxBQIAIgABC4CyEFIAAgACgCAEEMaygCAGoiBhC3CyEHIAIgBCAFKAIAIAYgByABIAQoAgAoAiARMwA2AgQgAxCnBUUNACAAIAAoAgBBDGsoAgBqQQUQqgULIAJBCGoQqAUgAkEQaiQAIAALDAAgAEEEahDCCyAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZSOCTYCACAAQQRqEFAgAAvzAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKE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EGsiAyQAIAMgAToADwJAAkAgACgCECICBH8gAgUgABClBwRAQX8hAgwDCyAAKAIQCyAAKAIUIgRGDQAgAUH/AXEiAiAAKAJQRg0AIAAgBEEBajYCFCAEIAE6AAAMAQsgACADQQ9qQQEgACgCJBEDAEEBRwRAQX8hAgwBCyADLQAPIQILIANBEGokACACC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC5QDAgN+An8CQCAAvSICQjSIp0H/D3EiBEH/D0cNACAARAAAAAAAgFZAoiIAIACjDwsgAkIBhiIBQoCAgICAgMDWgH9YBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgMDWgH9RGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEGFCEoEQANAAkAgAUKAgICAgICgC30iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEGFCEoNAAtBhQghBAsCQCABQoCAgICAgKALfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIAFCAYYhAQ0ACwsgAkKAgICAgICAgIB/gyABQoCAgICAgIAIfSAErUI0hoQgAUEBIARrrYggBEEAShuEvwviAgEFfwJAAkACQCACKAJMQQBOBEAgAUECSA0BDAILQQEhBiABQQFKDQELIAIgAigCSCICQQFrIAJyNgJIIAFBAUcNASAAQQA6AAAgAA8LIAFBAWshBCAAIQECQANAAkACQAJAIAIoAgQiAyACKAIIIgVGDQACfyADQQogBSADaxD7AiIHBEAgByACKAIEIgNrQQFqDAELIAIoAgggAigCBCIDawshBSABIAMgBSAEIAQgBUsbIgMQIBogAiACKAIEIANqIgU2AgQgASADaiEBIAcNAiAEIANrIgRFDQIgBSACKAIIRg0AIAIgBUEBajYCBCAFLQAAIQMMAQsgAhC9BSIDQQBO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AwAgA0EBaiEDDAIFIBAgNyAXIAFBA3QiGGorAwAgFCAYaisDAKKhIjc5AwAgAUEBaiEBDAELAAsACwALQcTWCigCABoCQEHnqwFB+NUKEIkBQQBIDQACQEHI1gooAgBBCkYNAEGM1gooAgAiAEGI1gooAgBGDQBBjNYKIABBAWo2AgAgAEEKOgAADAELQfjVCkEKEKQHGgsLIA0QGCAIEBhBACEBA0BBvNgKLwEAIhQgAUsEQEHQ2AorAwAhNxDVASE4IAFBA3QiACAJQaABamoiAyADKwMAIDcgOEQAAAAAAADwPyA3oSI3IDegoqCiIjc5AwAgAigCECgClAEgAGoiACA3IAArAwCgOQMAIAFBAWohAQwBCwsgBygCECIAIAAoApwBQQFqNgKcASAAKAKYASITIAtqKAIAIQ1BACEBA0AgASAURgRAQQAhAwNAIAMgFUcEQAJAIAMgDkYNAEEAIQogDSgCECgClAEgEyADQQJ0IgRqKAIAKAIQKAKUASAJQfABahDFDSE3A0AgCiAURg0BIApBA3QiASAAKAKsASIIIAtqKAIAIARqKAIAaiIRIANBA3QiEiAAKAKkASALaigCAGorAwAgCUHwAWogAWorAwAiOCA4IAAoAqABIAtqKAIAIBJqKwMAoiA3o6GiIjg5AwAgACgCqAEiEiALaigCACABaiIQIDggECsDAKA5AwAgBCAIaigCACALaigCACABaiIIKwMAITggCCARKwMAmiI5OQMAIAQgEmooAgAgAWoiASA5IDihIAErAwCgOQMAIApBAWohCgwACwALIANBAWohAwwBCwtB6NsKKAIABEBBACEBQbzYCi8BACEARAAAAAAAAAAAITgDQCAAIAFHBEAgOCAJQaABaiABQQN0aisDAJmgITggAUEBaiEBDAELCyACECEhACAJIDifOQM4IAkgADYCMCAMQdWiBCAJQTBqEDILIAUQGAwFBSAAKAKoASALaigCACABQQN0akIANwMAIAFBAWohAQwBCwALAAsgBUEBaiEFDAALAAsLQQAhAUGM2AotAAAEQEEBIAYgBkEBTBtBAWshBEG82AovAQAhBUQAAAAAAAAAACE3A0AgASAERwRAIAcoAhAiAigCmAEiCiABQQJ0IgNqKAIAIRUgAUEBaiIAIQsDQCAGIAtGBEAgACEBDAMFIAogC0EC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IDcDECAJIAIpAxg3AwgCQCACKAIIKAJYIgZFDQACQCAJKwMAIAkrAxBiDQAgCSsDCCAJKwMYYg0AIAlC/////////3c3AxggCUL/////////9/8ANwMAIAlC//////////f/ADcDCCAJQv////////93NwMQCyAGKAIIIQcDQCARIAYoAgBPDQEgC0IANwM4IAtCADcDMCALQgA3AyggC0IANwMgAkACQAJAAkACQAJAAkACQCAHKAIADhAAAAEBAgIDBAcHBQcHBwcGBwsgByAHKwMQIhwgBysDICIXoCIZOQNoIAcgBysDCCIUIAcrAxgiE6AiGjkDYCAHIBwgF6EiFzkDWCAHIBQgE6EiEzkDUCAJIAkrAwAgExApIBoQKTkDACAJIAkrAxggFxAjIBkQIzkDGCAJIAkrAwggFxApIBkQKTkDCCAJIAkrAxAgExAjIBoQIzkDEAwGCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwFCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwECyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwDCyAHQTgQxgM2AnAgBygCKBBkIQUgBygCcCICIAU2AgAgAiAHKAIYQaS/CGotAAA6ADAgCyAYOQMwIAsgEjYCICALIAsoAjhBgH9xIA5B/wBxcjYCOCANKAKIASICIAtBIGpBASACKAIAEQMAIQUgBygCcCICIAU2AgQgCyANIAIQ3wYgBysDCCETIAcoAnAiAisDKCEXIAIrAyAhFAJAAkACQAJAIAItADBB7ABrDgcAAwEDAwMCAwsgEyAUoCEWIBMhFQwCCyATIBREAAAAAAAA4D+iIhWgIRYgEyAVoSEVDAELIBMgFKEhFSATIRYLIAcrAxAhFCACKwMQIRMgByAWOQNgIAcgFTkDUCAHIBQgE6AiFDkDaCAHIBQgF6EiEzkDWCAJIAkrAxAgFRAjIBYQIzkDECAJIAkrAxggExAjIBQQIzkDGCAJIAkrAwAgFRApIBYQKTkDACAJIAkrAwggExApIBQQKTkDCCAGKAIMDQIg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IAIpAwA3A+ACIAEgBCkDQDcD2AIgASAEKQM4NwPQAiABQdADaiABQeACaiABQdACahDSBQJAIAErA4AEIAErA9ADZUUNACABKwPgAyABKwPwA2VFDQAgASsDiAQgASsD2ANlRQ0AIAErA+gDIAErA/gDZUUNAEEBIQMgBSgCKCIGQQFxBEAgBC0AUEEBcQ0BCwJAIAZBAnFFDQAgBC0AUEECcUUNACACKwMQIAIrAwChIhsgG6IgAisDGCACKwMIoSIbIBuioCAFKwMQIAUrAwChIAQrAzigIAQrAyihIhsgG6JEAAAAAAAA0D+iZSEDDAELIAUoAiAhAyAFKAIkIAEgAikDGDcDyAIgASACKQMQNwPAAiADIAFBwAJqEOUMIQYgBCgCSCEDIAQoAkwgASACKQMINwO4AiABIAIpAwA3A7ACIAMgAUGwAmoQ5QwhByAEKAJIIhFBAXQhFyAFKAIgIg5BAXQhGCARQQFrIRkgDkEBayEaQQAhA0EAIQgCQANAIAEgBiAIQQR0aiIJKQMINwOoAiABIAkpAwA3A6ACIAEgBiAIIBpqIA5vQQR0aiISKQMINwOYAiABIBIpAwA3A5ACIAFBwARqIAFBoAJqIAFBkAJqEOkMIAEgByAMQQR0aiILKQMINwOIAiABIAspAwA3A4ACIAEgByAMIBlqIBFvQQR0aiITKQMINwP4ASABIBMpAwA3A/ABIAFBsARqIAFBgAJqIAFB8AFqEOkMIAFCADcDmAQgAUIANwPoASABIAEpA8gENwPYASABIAEpA7gENwPIASABQgA3A5AEIAFCADcD4AEgASABKQPABDcD0AEgASABKQOwBDcDwAEgASsD6AEgASsD2AEiG6EgASsDwAEgASsD0AEiHKGiIAErA8gBIBuhIAErA+ABIByhoqEhHyABIBIpAwg3A7gBIAEgEikDADcDsAEgASAJKQMINwOoASABIAkpAwA3A6ABIAEgCykDCDcDmAEgASALKQMANwOQASABQbABaiABQaABaiABQZABahDoDCEVIAEgEykDCDcDiAEgASATKQMANwOAASABIAspAwg3A3ggASALKQMANwNwIAEgCSkDCDcDaCABIAkpAwA3A2AgAUGAAWogAUHwAGogAUHgAGoQ6AwhFiABIBIpAwg3A1ggASASKQMANwNQIAEgCSkDCDcDSCABIAkpAwA3A0AgASATKQMINwM4IAEgEykDADcDMCABIAspAwg3AyggASALKQMANwMgIAErAzAiICABKwNYIhsgAUFAayIJKwMIIiGhoiABKwMgIiUgISAboSIioiABKwNQIh4gASsDKCIdIAErAzgiHKGiIiYgCSsDACIjIBwgHaGioKCgIiREAAAAAAAAAABiBH8gASAlIBwgG6GiICYgICAbIB2hoqCgICSjIh0gIqIgG6A5A6gEIAEgHSAjIB6hoiAeoDkDoAQgHUQAAAAAAADwP2UgHUQAAAAAAAAAAGZxICAgIqIgHiAcICGhoiAjIBsgHKGioKCaICSjIhtEAAAAAAAAAABmIBtEAAAAAAAA8D9lcXEFQQALBEBBASEDDAILAkAgFiAfRAAAAAAAAAAAYiAVcnJFBEAgA0EBaiEDIAhBAWogDm8hCAwBCyAfRAAAAAAAAAAAZgRAIBUEQCADQQFqIQMgCEEBaiAObyEIDAILIA1BAWohDSAMQQFqIBFvIQwMAQsgFgRAIA1BAWohDSAMQQFqIBFvIQwMAQsgA0EBaiEDIAhBAWogDm8hCAsgAyAOSCANIBFIckUgAyAYTnJFIA0gF0hxDQALAkAgBisAACIbIAErA9ADZUUNACAbIAErA+ADZkUNACAGKwAIIhsgASsD2ANlRQ0AIBsgASsD6ANmRQ0AIAQoAkghCCABIAYpAwg3AxggASAGKQMANwMQQQEhAyAHIAggAUEQahDjDA0BC0EAIQMgBysAACIbIAErA/ADZUUNACAbIAErA4AEZkUNACAHKwAIIhsgASsD+ANlRQ0AIBsgASsDiARmRQ0AIAUoAiAhAyABIAcpAwg3AwggASAHKQMANwMAIAYgAyABEOMMIQMLIAYQGCAHEBgLIAFB0ARqJAAgAwRAIBRBAToAICAEQQE6ACAgEEEBaiEQCyAKQQFqIQpB9PsKKAIAIQEMAQsACwALAAUgBSAPQeAAbGpBADoAICAPQQFqIQ8MAQsACwAL+AICBnwDfyAALQAMIQgCQCABKwMAIgMgACgCCCIAKAIkIgkrAwAiB2QiCgRAIAgNAUEBDwsgCEEBRw0AQQAPCwJ/AkACQAJAIAArAwAiAkQAAAAAAADwP2EEQCADIAehIQQgASsDCCIFIAkrAwihIQYgACsDCCECAkAgCkUEQCACRAAAAAAAAAAAYw0BDAMLIAJEAAAAAAAAAABmRQ0CCyAGIAQgAqJmRQ0CQQEMBAsgASsDCCAAKwMQIAIgA6KhIgKhIgQgBKIgAyAHoSIEIASiIAIgCSsDCKEiAiACoqBkDAMLIAUgAqIgA6AhAyAAKwMQIQUgAkQAAAAAAAAAAGMEQCADIAVkRQ0BDAILIAMgBWRFDQELIAYgByAAKAIgKwMAoSIDoiACIAKiIAQgBKAgA6NEAAAAAAAA8D+goKIhAyAEIASiIAYgBqKhIAKiIQQgAyAEZCACRAAAAAAAAAAAY0UNARogAyAEZEUMAQtBAAsgCEEAR3MLRgEBfwJAIAFBAEgNACABIAAoAghODQAgACgCDCABQQJ0aiIBKAIAIgBFDQAgACICKAIIQX5HDQBBACECIAFBADYCAAsgAgslAQF/IAEgADYCACABIAAoAgQiAjYCBCACIAE2AgAgACABNgIECwgAIAAoAghFC00BAn8gASgCEARAIAAoAgAgACABEN8MQShsaiECA0AgAiIDKAIgIgIgAUcNAAsgAyABKAIgNgIgIAAgACgCCEEBazYCCCABQQA2AhALC1sBAX8gAwRAIABBGGoiBCABQQJ0aiACNgIAIARBASABa0ECdGooAgAEQCAAEOAMIANFBEBBvNUBQYC+AUGUAUHmngEQAAALCw8LQYvTAUGyuQFBsAFBsR8QAAALqAEBBH8jAEEQayIDJAACQCAABEACQCABRQ0AIAAgARDiDCICDQBBAUH8/wAgAUEHaiICIAJB/P8ATRsiBUEEaiIEEEchAkEAIAQgAhsNAiACIAAoAgA2AgAgACAFNgIEIAAgAjYCACAAIAEQ4gwhAgsgA0EQaiQAIAIPC0G81QFBgL4BQfUAQYizARAAAAsgAyAENgIAQajzCCgCAEGD5wMgAxAfGhAsAAsRACAAIAEgACgCTCgCKBDkDAu4AQECfyAAKAIAIgEEQCABKAIAEBggACgCABAYCyAAKAIUQQBKBEAgACgCJBCGDSAAKAIcIgEgACgCICICRiACRXJFBEBBACACEPQDIAAoAhwhAQsgACgCFCABEPQDQQAhAQNAIAAoAhAhAiABIAAoAgwgACgCCCAAKAIEampORQRAIAIgAUECdGooAgAQiA0gAUEBaiEBDAELCyACEBgLIAAoAigQGCAAKAIsEBggACgCMBAYIAAQGAu/EQIQfwF8IwBBIGsiDCQAQQFBNBAaIgVBADYCACADKAIwIQcgBUEANgIgIAVBADYCDCAFIAdBAXQiBzYCCCAFIAAgB2s2AgQgBSAAQQQQGjYCECAAQQAgAEEAShshECAFQQxqIRMDQCAGIBBHBEAgBkQAAAAAAADwPxDoByEHIAUoAhAgBkECdGogBzYCACAGQQFqIQYMAQsLIAVBADYCGAJAAkACQAJAIARBAWsOAgABAgtBACEEQYzYCi0AAARAQcjkBEEfQQFBqPMIKAIAEDsaCyAFKAIEIgdBACAHQQBKGyEKA0AgBCAKRwRAQQEhBkEBIAIgBEEUbGoiCCgCACIHIAdBAU0bIQcDQCAGIAdGBEAgBEEBaiEEDAMLIAgoAhAgBkECdGoqAgC7RHsUrkfheoQ/ZARAIAUgBSgCGEEBajYCGAsgBkEBaiEGDAALAAsLIAUoAhgQvgQhBCAFQQA2AhggBSAENgIgQQAhBANAIAQgBSgCBE4NAiACIARBFGxqIQpBASEGA0AgCigCACAGTQRAIARBAWohBAwCCyAGQQJ0IgggCigCEGoqAgBDAAAAAF4EQCAFKAIQIgcgBEECdGooAgAgByAKKAIEIAhqKAIAQQJ0aigCACADKwMIEPUDIQggBSAFKAIYIgdBAWoiCTYCGCAFKAIgIAdBAnRqIAg2AgALIAZBAWohBgwACwALAAsgDEEANgIcIAxBADYCGCAFKAIQIQ0gAiAFKAIEQQAgDEEcaiAMQRhqIBMQ2gdFBEBBACEGIAwoAhwhDiAFKAIEIQkgDCgCGCEPIAUoAgwiEUEBakEIEBoiFCAPKAIAIgI2AgQgFCACQQQQGiIHNgIAIAJBACACQQBKGyEEA38gBCALRgR/QQEgESARQQFMGyEKQQEhEgNAIAogEkcEQCAUIBJBA3RqIgQgDyASQQJ0aiICKAIAIAJBBGsiCCgCAGsiAjYCBCAEIAJBBBAaIgc2AgBBACELIAJBACACQQBKGyEEA0AgBCALRwRAIAcgC0ECdCICaiAOIAgoAgBBAnRqIAJqKAIANgIAIAtBAWohCwwBCwsgEkEBaiESDAELCwJAIBFBAEwNACAUIBFBA3RqIgIgCSAPIBFBAnRqQQRrIggoAgBrIgQ2AgQgAiAEQQQQGiIHNgIAQQAhCyAEQQAgBEEAShshBANAIAQgC0YNASAHIAtBAnQiAmogDiAIKAIAQQJ0aiACaigCADYCACALQQFqIQsMAAsACyAUBSAHIAtBAnQiAmogAiAOaigCADYCACALQQFqIQsMAQsLIQdBjNgKLQAABEAgDCATKAIANgIQQajzCCgCAEHs6AMgDEEQahAfGgtBACEPQQEgBSgCDCIKQQFqIgkgCUEBTBshCCAHQQRrIQRBASEOA0AgCCAORwRAIA8gByAOQQN0IgJqKAIEaiACIARqKAIAaiEPIA5BAWohDgwBCwsgBSAKIAcgCUEDdGpBBGsoAgAgBygCBCAPampqQQFrIgI2AhggAhC+BCECIAVBADYCGCAFIAI2AiAgBSAFKAIMIABqQQQQGjYCEANAIAYgEEcEQCAGQQJ0IgIgBSgCEGogAiANaigCADYCACAGQQFqIQYMAQsLIA0QGEEAIQIDQCATKAIAIgYgAkoEQCAAIAJqIghEje21oPfGsD4Q6AchBCAFKAIQIAhBAnRqIAQ2AgAgAkEBaiECDAELCyADKwMIIRVBACEEQQAhAgNAAkACQCACIAZOBEADQCAEIAZBAWtODQIgBSgCECAAQQJ0aiAEQQJ0aiICKAIAIAIoAgREAAAAAAAAAAAQ9QMhByAFIAUoAhgiAkEBajYCGCAFKAIgIAJBAnRqIAc2AgAgBEEBaiEEIAUoAgwhBgwACwALQQAhBiAHIAJBA3RqIg0oAgQiCEEAIAhBAEobIQkgACACaiEQA0AgBiAJRgRAQQAhBiAHIAJBAWoiAkEDdGoiDSgCBCIIQQAgCEEAShshCQNAIAYgCUYNBCAFKAIQIgggEEECdGooAgAgCCANKAIAIAZBAnRqKAIAQQJ0aigCACAVEPUDIQogBSAFKAIYIghBAWo2AhggBSgCICAIQQJ0aiAKNgIAIAZBAWohBgwACwAFIAUoAhAiCCANKAIAIAZBAnRqKAIAQQJ0aigCACAIIBBBAnRqKAIAIBUQ9QMhCiAFIAUoAhgiCEEBajYCGCAFKAIgIAhBAnRqIAo2AgAgBkEBaiEGDAELAAsACyAFKAIYIQkMAwsgEygCACEGDAALAAtBACEFDAELIAMoAjBBAEoEQCAFKAIgIQcgBSAJIAMoAixBAXRqEL4ENgIgQQAhBiAFKAIYIgJBACACQQBKGyEEA0AgBCAGRwRAIAZBAnQiAiAFKAIgaiACIAdqKAIANgIAIAZBAWohBgwBCwsgBwRAQQAgBxD0AwtBACEEA0AgAygCMCAESgRAIARBA3QhCUEAIQYgBEECdCENA0AgAygCNCANaigCACAGTARAIARBAWohBAwDBSAFKAIQIgcgBSgCBEECdGogCWoiAigCBCEKIAIoAgAgByADKAI4IA1qKAIAIAZBAnRqKAIAQQJ0aigCACIIRAAAAAAAAAAAEPUDIQcgBSAFKAIYIgJBAWo2AhggBSgCICACQQJ0aiAHNgIAIAggCkQAAAAAAAAAABD1AyEHIAUgBSgCGCICQQFqNgIYIAUoAiAgAkECdGogBzYCACAGQQFqIQYMAQsACwALCyAFKAIYIQkLIAVBADYCHCAFQQA2AhQgCUEASgRAIAUgBSgCDCAAaiAFKAIQIAkgBSgCIBCKDTYCJCAFIAUoAhg2AhQgBSAFKAIgNgIcCyABBEAgBSABIAAQ7Aw2AgALIAUgAEEEEBo2AiggBSAAQQQQGjYCLCAFIABBBBAaNgIwQYzYCi0AAEUNACAMIAUoAhQ2AgBBqPMIKAIAQdngBCAMEB8aCyAMQSBqJAAgBQu8AwIEfwF8AkACQCACIgdFBEBBASEGIAAgASABQQgQGiIHIAEQ+AwNAQsgAyABQQQQGiIANgIAQQAhBiABQQAgAUEAShshAwNAIAMgBkcEQCAAIAZBAnRqIAY2AgAgBkEBaiEGDAELCyAAIAFB2wMgBxDuDER7FK5H4XqEPyAHIAAgAUEBayIDQQJ0aigCAEEDdGorAwAgByAAKAIAQQN0aisDAKFEmpmZmZmZuT+iIAO3oyIKIApEexSuR+F6hD9jGyEKQQEgASABQQFMGyEIQQAhA0EBIQYDQCAGIAhHBEAgAyAHIAAgBkECdGoiCSgCAEEDdGorAwAgByAJQQRrKAIAQQN0aisDAKEgCmRqIQMgBkEBaiEGDAELCyAFIAM2AgACQCADRQRAIARBAUEEEBoiADYCACAAIAE2AgAMAQsgBCADQQQQGiIDNgIAQQAhAUEBIQYDQCAGIAhGDQEgCiAHIAAgBkECdGoiBCgCAEEDdGorAwAgByAEQQRrKAIAQQN0aisDAKFjBEAgAyABQQJ0aiAGNgIAIAFBAWohAQsgBkEBaiEGDAALAAtBACEGIAINAQsgBxAYCyAGC1YBAn8gACgCCBAYIABBADYCCAJAIAJFDQAgAUEAIAFBAEobIQEDQCABIANGDQEgACADQRRsaiIEIAI2AgggA0EBaiEDIAIgBCgCAEECdGohAgwACwALC+wBAQl/IAFBACABQQBKGyEGIAEQzwEhBEEAIQEDQCABIAZGRQRAIAAgAUEUbGooAgAgAmohAiABQQFqIQEMAQsLIAIQzwEhAgNAIAMgBkcEQCAAIANBFGxqIgcgAjYCCCAAIAMgBBDeByAHKAIAIghBAmshCSAIQQFrIQpBASEBA0AgASAKSwRAIAAgAyAEEN0HIANBAWohAyACIAhBAnRqIQIMAwUgAiABQQJ0IgVqIAkgACAHKAIEIAVqKAIAIgVBFGxqKAIAaiAAIAUgBBDfB0EBdGuzOAIAIAFBAWohAQwBCwALAAsLIAQQGAsNACAAIAEgAkEAEKQKCw0AIAAgASACQQEQpAoLWwECf0EBIAAgAUEUbGoiAygCACIAIABBAU0bIQRBACEAQQEhAQN/IAEgBEYEfyAABSAAIAIgAygCBCABQQJ0aigCAEECdGooAgBBAEpqIQAgAUEBaiEBDAELCwsQACAAKAIIEBggACgCABAYC0wCAn8BfSAAQQAgAEEAShshAANAIAAgAkcEQCABIAJBAnRqIgMqAgAiBEMAAAAAXgRAIANDAACAPyAEkZU4AgALIAJBAWohAgwBCwsLSQICfwF9IABBACAAQQBKGyEAA0AgACADRwRAIAEgA0ECdCIEaioCACIFQwAAAABgBEAgAiAEaiAFkTgCAAsgA0EBaiEDDAELCwtLAgJ/AX0gAEEAIABBAEobIQADQCAAIAJHBEAgASACQQJ0aiIDKgIAIgRDAAAAAFwEQCADQwAAgD8gBJU4AgALIAJBAWohAgwBCwsLKgEBf0EEEM4DEIsFIgBBoOgJNgIAIABBtOgJNgIAIABBiOkJQdgDEAEACw8AIAAgACgCACgCBBEBAAu6BwIHfwR8IwBBEGsiCiQAIApBADYCDCAKQgA3AgQgAEEAIABBAEobIQADfyAAIAZGBH8jAEFAaiIEJAAgBEEANgI8IARCADcCNCAEQTRqIApBBGoiBigCBCAGKAIAa0EEdRCcDQNAIAYoAgQgBigCACIBa0EFdSAFTQRAAkAgBCgCNCAEKAI4EJsNIAQgBEEsaiIINgIoIARCADcCLCAEQQA2AiAgBEIANwIYIAQoAjghAiAEKAI0IQcDQCACIAdGBEAgA0F/IAQoAhwgBCgCGGsiACAAQQJ1IgJB/////wNLGxCHATYCAEEAIQUgAkEAIAJBAEobIQEDQCABIAVGDQMgBUECdCIAIAMoAgBqIAQoAhggAGooAgA2AgAgBUEBaiEFDAALAAUgBCAHKAIEIgU2AhQCQCAHKAIARQRAIARBDGogBEEoaiIBIARBFGoiABCDAyABIAAQrgMiACAEKAIoRwRAIAUgABDqBygCECIANgIQIAAgBTYCFAsgBEEoaiAEQRRqEK4DEK0BIgAgCEYNASAFIAAoAhAiADYCFCAAIAU2AhAMAQsgBSgCFCEJIAUoAhAiAQRAIAEoAgQiACsDECEMIAArAxghDSAFKAIEIgArAxAhDiAAKwMYIQsgBEEgEIcBIAEoAgAgBSgCACALIA6hIA0gDKGgRAAAAAAAAOA/ohCvAzYCDCAEQRhqIARBDGoQvwEgASAFKAIUNgIUCyAJBEAgCSgCBCIAKwMQIQwgACsDGCENIAUoAgQiACsDECEOIAArAxghCyAEQSAQhwEgBSgCACAJKAIAIAsgDqEgDSAMoaBEAAAAAAAA4D+iEK8DNgIMIARBGGogBEEMahC/ASAJIAUoAhA2AhALIARBKGogBEEUahDaBQsgB0EYaiEHDAELAAsACwUgAiAFQQJ0aiIAKAIAIAEgBUEFdCIJaiIBKwMQIgsgASsDGCALoUQAAAAAAADgP6KgIgs5AwggBCALOQMYIARBKGoiByAAIAEgBEEYaiIIEJcNIARBADYCDCAEIAYoAgAgCWorAwA5AxggBEE0aiIBIARBDGoiACAHIAgQ2QUgBEEBNgIMIAQgBigCACAJaisDCDkDGCAFQQFqIQUgASAAIAcgCBDZBSAHENcBDAELCyAEQRhqEIICGiAEQShqEPYDIARBNGoQmA0gBEFAayQAIAYQggIaIApBEGokACACBSAKQQRqIAEgBkEFdGoiCCAIQRBqIAhBCGogCEEYahCJDSAGQQFqIQYMAQsLC4kOAgp/BHwjAEEQayIKJAAgCkEANgIMIApCADcCBCAAQQAgAEEAShshBQN/IAUgBkYEfwJ/QQAhBiMAQeAAayIAJAAgAEEANgJMIABCADcCRCAAQcQAaiAKQQRqIg4iASgCBCABKAIAa0EEdRCcDQNAIAEoAgQgASgCACIFa0EFdSAGTQRAIAAoAkQgACgCSBCbDSAAIABBPGoiCzYCOCAAQgA3AjwgAEEANgIwIABCADcCKCAAQRBqIQcgAEEcaiEJIAAoAkghDCAAKAJEIQYDQAJAAkACQAJAIAYgDEYEQCADQX8gACgCLCAAKAIoayIBIAFBAnUiAUH/////A0sbEIcBNgIAQQAhBiABQQAgAUEAShshAgNAIAIgBkYNAiAGQQJ0IgQgAygCAGogACgCKCAEaigCADYCACAGQQFqIQYMAAsACyAAIAYoAgQiATYCJCAGKAIADQEgAEEYaiAAQThqIgIgAEEkahCDAyAERQ0CIABCADcCHCAAIAk2AhggACABNgJUIAIgAEHUAGoQrgMhAgJAA0AgAiAAKAI4Rg0BIAAgAhDqByICKAIQIgU2AlwgBSgCBCABKAIEENsFRAAAAAAAAAAAZUUEQCAFKAIEIAEoAgQQ2wUgBSgCBCABKAIEEJoNZUUNASAAQQxqIABBGGogAEHcAGoQgwMMAQsLIABBDGogAEEYaiAAQdwAahCDAwsgAEIANwIQIAAgBzYCDCAAIAE2AlwgAEE4aiAAQdwAahCuAyECAkADQCACEK0BIgIgC0YNASAAIAIoAhAiBTYCUCAFKAIEIAEoAgQQ2wVEAAAAAAAAAABlRQRAIAUoAgQgASgCBBDbBSAFKAIEIAEoAgQQmg1lRQ0BIABB1ABqIABBDGogAEHQAGoQgwMMAQsLIABB1ABqIABBDGogAEHQAGoQgwMLIAFBGGogAEEYahCZDSABQSRqIABBDGoQmQ0gACgCGCECA0AgAiAJRgRAIAAoAgwhAgNAIAIgB0cEQCACKAIQIQUgACABNgJcIABB1ABqIAVBGGogAEHcAGoQgwMgAhCtASECDAELCyAAQQxqEPYDIABBGGoQ9gMMBQUgAigCECEFIAAgATYCXCAAQdQAaiAFQSRqIABB3ABqEIMDIAIQrQEhAgwBCwALAAsgAEEoahCCAhogAEE4ahD2AyAAQcQAahCYDSAAQeAAaiQAIAEMBgsCQCAEBEAgAUEcaiEIIAEoAhghAgNAIAIgCEYEQCABQShqIQggASgCJCECA0AgAiAIRg0EIAEoAgQiBSsDACEPIAUrAwghECACKAIQIgUoAgQiDSsDACERIA0rAwghEiAAQSAQhwEgASgCACAFKAIAIBAgD6EgEiARoaBEAAAAAAAA4D+iEK8DNgIYIABBKGogAEEYahC/ASAFQRhqIABBJGoQ2gUgAhCtASECDAALAAUgASgCBCIFKwMAIQ8gBSsDCCEQIAIoAhAiBSgCBCINKwMAIREgDSsDCCESIABBIBCHASAFKAIAIAEoAgAgECAPoSASIBGhoEQAAAAAAADgP6IQrwM2AhggAEEoaiAAQRhqEL8BIAVBJGogAEEkahDaBSACEK0BIQIMAQsACwALIAEoAhQhAiABKAIQIgUEQCAFKAIEIggrAwAhDyAIKwMIIRAgASgCBCIIKwMAIREgCCsDCCESIABBIBCHASAFKAIAIAEoAgAgEiARoSAQIA+hoEQAAAAAAADgP6IQrwM2AhggAEEoaiAAQRhqEL8BIAUgASgCFDYCFAsgAkUNACACKAIEIgUrAwAhDyAFKwMIIRAgASgCBCIFKwMAIREgBSsDCCESIABBIBCHASABKAIAIAIoAgAgEiARoSAQIA+hoEQAAAAAAADgP6IQrwM2AhggAEEoaiAAQRhqEL8BIAIgASgCEDYCEAsgAEE4aiAAQSRqENoFDAELIABBOGogAEEkahCuAyICIAAoAjhHBEAgASACEOoHKAIQIgI2AhAgAiABNgIUCyAAQThqIABBJGoQrgMQrQEiAiALRg0AIAEgAigCECICNgIUIAIgATYCEAsgBkEYaiEGDAALAAUgAiAGQQJ0aiIJKAIAIAUgBkEFdCILaiIHKwMAIg8gBysDCCAPoUQAAAAAAADgP6KgIg85AwggACAPOQMoIABBOGoiBSAJIAcgAEEoaiIHEJcNIABBADYCGCAAIAEoAgAgC2orAxA5AyggAEHEAGoiCSAAQRhqIgwgBSAHENkFIABBATYCGCAAIAEoAgAgC2orAxg5AyggBkEBaiEGIAkgDCAFIAcQ2QUgBRDXAQwBCwALAAsgDhCCAhogCkEQaiQABSAKQQRqIAEgBkEFdGoiACAAQRBqIABBCGogAEEYahCJDSAGQQFqIQYMAQsLC1IBAX9BwAAQhwEiAkIANwMoIAJBADoAJCACQQA2AiAgAkIANwMYIAIgATkDECACRAAAAAAAAPA/OQMIIAIgADYCACACQgA3AzAgAkIANwM4IAILUgAgACABIAIgBBDQAgJAIAMgAiAEKAIAEQAARQ0AIAIgAxC4ASACIAEgBCgCABEAAEUNACABIAIQuAEgASAAIAQoAgARAABFDQAgACABELgBCws7AQJ/IAAoAgAiAQRAIAEhAANAIAAiASgCBCIADQALIAEPCwNAIAAgACgCCCIBKAIARiABIQANAAsgAAtdAQR/IABBoM8KNgIAQej7CkEANgIAIABBBGoiAkEEaiEEIAIoAgAhAQNAIAEgBEcEQCABKAIQIgMEQCADEKUNGgsgAxAYIAEQrQEhAQwBCwsgAiACKAIEEOwHIAALHwAgAQRAIAAgASgCABDsByAAIAEoAgQQ7AcgARAYCws+AQF/IAFBgICAgARPBEAQwgQAC0H/////AyAAKAIIIAAoAgBrIgBBAXUiAiABIAEgAkkbIABB/P///wdPGwtXAQF/IANBADoAHEHIABCHASIEQQAQ+AcaIAEgBDYCACAAIAQgAygCACADKAIEEN8FQcgAEIcBIgFBABD4BxogAiABNgIAIAAgASADKAIEIAMoAgAQ3wULoQMCCH8CfCMAQRBrIgskACADKwMQIAMoAiArAxAgAysDGKAgAysDCKGiIQ8gAygCLCEMIAMoAighCCAFQQJGIQ0DQCAIIAxGBEACQCADKAI4IQwgAygCNCEIA0AgCCAMRg0BAkAgCCgCACIKKAIEIgcoAiAgAUcgBCAHRnINACAKLQAcQQFxRQ0AIAsgAUEAIAIgAiAHRiINGyICIAcgA0ECIAVBAUYgBnIiBkEBcSIOEO8HIAogCysDACIQOQMQIAogCSANGyEJAkAgAkUNACALKAIIIgdFDQAgDgRAIAohCSAQIAcrAxBjDQELIAchCQsgDyAQoCEPCyAIQQRqIQgMAAsACwUCQCAIKAIAIgooAgAiBygCICABRyAEIAdGcg0AIAotABxBAXFFDQAgCyABQQAgAiACIAdGIg4bIgIgByADQQEgBiANciIGQQFxEO8HIAogCysDACIQmjkDECALKAIIIgcgCiAJIA4bIgkgBxsgCSACGyEJIA8gEKAhDwsgCEEEaiEIDAELCyAAIAk2AgggACAPOQMAIAtBEGokAAupAgIEfwN8IAErAxAgASgCICsDECABKwMYoCABKwMIoaIhCCABKAI4IQcgASgCNCEEA0AgBCAHRgRAAkAgASgCLCEHIAEoAighBANAIAQg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NwO4BiAFIAIpAgA3A7AGIAVBsAZqIAMQGUHIAGxqKAIsQQFrQX1LDQAgAigCACAFIAIpAgg3A/gDIAUgAikCADcD8AMgBUHwA2ogAxAZQcgAbGooAjwgAigCACEAIAUgAikCCDcD6AMgBSACKQIANwPgAyAFQeADaiADEBkhAUEBa0F9TQRAIAIoAgAhBgJ/IAAgAUHIAGxqKAJAQQFGBEAgBSACKQIINwPIASAFIAIpAgA3A8ABIAYgBUHAAWogAxAZQcgAbGooAiwhACACKAIAIAUgAikCCDcDuAEgBSACKQIANwOwASAFQbABaiAEEBlByABsaiAANgIoIAIoAgAgBSACKQIINwOoASAFIAIpAgA3A6ABIAVBoAFqIAMQGUHIAGxqQX82AiwgAigCACAFIAIpAgg3A5gBIAUgAikCADcDkAEgBUGQAWogAxAZQcgAbGooAjwhACACKAIAIAUgAikCCDcDiAEgBSACKQIANwOAASAFQYABaiAEEBlByABsaiAANgIsIAIoAgAhACAFIAIpAgg3A3ggBSACKQIANwNwIAAgBUHwAGogAxAZQcgAbGooAighASAFIAIpAgg3A2ggBSACKQIANwNgIAAgBUHgAGogARAZQcgAbGogAzYCMCACKAIAIQAgBSACKQIINwNYIAUgAikCADcDUCAAIAVB0ABqIAQQGUHIAGxqKAIoIQEgBSACKQIINwNIIAUgAikCADcDQCAAIAVBQGsgARAZQcgAbGogBDYCMCACKAIAIQAgBSACKQIINwM4IAUgAikCADcDMCAAIAVBMGogBBAZQcgAbGpBLGoMAQsgBSACKQIINwOIAyAFIAIpAgA3A4ADIAYgBUGAA2ogBBAZQcgAbGpBfzYCLCACKAIAIAUgAikCCDcD+AIgBSACKQIANwPwAiAFQfACaiADEBlByABsaigCLCEAIAIoAgAgBSACKQIINwPoAiAFIAIpAgA3A+ACIAVB4AJqIAQQGUHIAGxqIAA2AiggAigCACAFIAIpAgg3A9gCIAUgAikCADcD0AIgBUHQAmogAxAZQcgAbGooAighACACKAIAIAUgAikCCDcDyAIgBSACKQIANwPAAiAFQcACaiADEBlByABsaiAANgIsIAIoAgAgBSACKQIINwO4AiAFIAIpAgA3A7ACIAVBsAJqIAMQGUHIAGxqKAI8IQAgAigCACAFIAIpAgg3A6gCIAUgAikCADcDoAIgBUGgAmogAxAZQcgAbGogADYCKCACKAIAIQAgBSACKQIINwOYAiAFIAIpAgA3A5ACIAAgBUGQAmogAxAZQcgAbGooAighASAFIAIpAgg3A4gCIAUgAikCADcDgAIgACAFQYACaiABEBlByABsaiADNgIwIAIoAgAhACAFIAIpAgg3A/gBIAUgAikCADcD8AEgACAFQfABaiADEBlByABsaigCLCEBIAUgAikCCDcD6AEgBSACKQIANwPgASAAIAVB4AFqIAEQGUHIAGxqIAM2AjAgAigCACEAIAUgAikCCDcD2AEgBSACKQIANwPQASAAIAVB0AFqIAQQGUHIAGxqQShqCygCACEBIAUgAikCCDcDKCAFIAIpAgA3AyAgACAFQSBqIAEQGUHIAGxqIAQ2AjAgAigCACAFIAIpAgg3AxggBSACKQIANwMQIAVBEGogAxAZQcgAbGpBADYCPCACKAIAIAUgAikCCDcDCCAFIAIpAgA3AwAgBSAEEBlByABsakEANgI8DAILIAAgAUHIAGxqKAIsIQAgAigCACAFIAIpAgg3A9gDIAUgAikCADcD0AMgBUHQA2ogBBAZQcgAbGogADYCKCACKAIAIAUgAikCCDcDyAMgBSACKQIANwPAAyAFQcADaiADEBlByABsakF/NgIsIAIoAgAgBSACKQIINwO4AyAFIAIpAgA3A7ADIAVBsANqIAQQGUHIAGxqQX82AiwgAigCACEAIAUgAikCCDcDqAMgBSACKQIANwOgAyAAIAVBoANqIAQQGUHIAGxqKAIoIQEgBSACKQIINwOYAyAFIAIpAgA3A5ADIAAgBUGQA2ogARAZQcgAbGogBDYCMAwBCyACKAIAIAUgAikCCDcDqAYgBSACKQIANwOgBiAFQaAGaiADEBlByABsaigCKCEGIAIoAgAhByAFIAIpAgg3A5gGIAUgAikCADcDkAYCQCAHIAVBkAZqIAYQGUHIAGxqKAIwIgdBAWtBfUsNACACKAIAIAUgAikCCDcDiAYgBSACKQIANwOABiAFQYAGaiAGEBlByABsaigCNEEBa0F9Sw0AIAIoAgAhBiAFIAIpAgg3A7gFIAUgAikCADcDsAUCQCAGIAVBsAVqIAcQGUHIAGxqKAIEQQBMDQAgAigCACAF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AEIANwMIAkACQAJAAkAgAkEBaw4DAgEDAAsgACABKQMANwMAIAAgASkDCDcDCA8LIAAgASsDADkDACAAIAErAwiaOQMIDwsgACABKwMAOQMIIAAgASsDCJo5AwAPCyAAIAErAwA5AwggACABKwMIOQMACzcBA38DQCABQQNHBEAgACABQQJ0aiICKAIAIgMEQCADEJkBGiACQQA2AgALIAFBAWohAQwBCwsLsQICCX8CfCMAQRBrIgUkACAAIAI6AEEgASsDCCEMIAAgASsDACINOQMQIAAgDDkDKCAAIAwgACsDCKE5AxggACANIAArAwCgOQMgIAAoAjAiBEEAIARBAEobIQdBDkEPIARBAWsiBhshCEENQQ8gBhshCQNAIAMgB0ZFBEACf0EAIAJFDQAaIAAtAEAEQCAJIANFDQEaQQdBBSADIAZGGwwBCyAIIANFDQAaQQtBCiADIAZGGwshBCADQQJ0IgogACgCOGooAgAgBSABKQMINwMIIAUgASkDADcDACAFIAIgBHEQ4AkgACgCOCAKaigCACEEAkAgAC0AQARAIAEgASsDACAEKwMAoDkDAAwBCyABIAErAwggBCsDCKE5AwgLIANBAWohAwwBCwsgBUEQaiQAC/MCAgV8A38jAEEgayIIJAAgAUEIaisDACEFIAArAwAhBCABKwMAIQYgACABKQMANwMAIAArAwghAyAAIAEpAwg3AwggBSADoSEDIAYgBKEhBAJAIAINACAAKAI0IgFFDQAgASAEIAErAyigOQMoIAEgAyABKwMwoDkDMAsCQCAAKAIwIglFDQAgBCADIAAtAEAbIAm3oyEHQQAhAQNAIAEgCU4NAQJ/IAcgAbiiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyEJAn8gByABQQFqIgq4oiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgCWshCSAAKAI4IAFBAnRqKAIAIQECfCAALQBABEAgBSEEIAErAwAgCbegDAELIAErAwggCbegIQQgBgshAyAIIAQ5AxggCCAIKQMYNwMIIAggAzkDECAIIAgpAxA3AwAgASAIIAIQ4QkgACgCMCEJIAohAQwACwALIAhBIGokAAuMAwIEfAJ/IwBBIGsiByQAAkAgAigCNCIIBEAgCCsDGCIERAAAAAAAAAAAZCAIKwMg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IANBtewDIAEoAiwQYyIDRyADQQBOcQ0CIANBAEwNACAAECgEQCADQYACTw0EIAQEQCAAEHkgAUEQaiADECAaCyAAIAAtAA8gA2o6AA8gABAlQRBJDQFBibQDQZ38AEHqAUGmHxAAAAsgBA0EIAAgACgCBCADajYCBAsgAUEwaiQADAQLQbykA0Gd/ABB3QFBph8QAAALQcucA0Gd/ABB4gFBph8QAAALQfDMAUGd/ABB5QFBph8QAAALQdadAUGd/ABB7AFBph8QAAALAkAgABAoBEAgABAlQQ9GDQELIAJBIGoiABAlIAAQTk8EQCAAQQEQvQELIAJBIGoiABAlIQEgABAoBEAgACABakEAOgAAIAIgAi0AL0EBajoALyAAECVBEEkNAUGJtANBnfwAQa8CQfexARAAAAsgAigCICABakEAOgAAIAIgAigCJEEBajYCJAsCQCACQSBqECgEQCACQQA6AC8MAQsgAkEANgIkCyACQSBqIgAQKCEBIAAgAigCICABGyIAEKEGBEAgAiAANgIAQcg0IAIQKgsgAi0AL0H/AUYEQCACKAIgEBgLQYUvEIsKIQULIAJBMGokACAFDwtBgaQDQZi3AUHwBUHSiQEQAAALQcrVAUGYtwFB8QVB0okBEAAAC78CAQZ/IAAoAgghBSAAKAIMIQYDQCAAKAIAIARLBEAgBSAAKAIEIARsaiEBIAYEQCABIAYRAQALAkACQAJAAkACQAJAAkACQAJAAkAgASgCAEECaw4NAAABAQIDBAQGBwgFBQkLIAEoAgwQGAwICyABKAIMEBgMBwsgASgCDBAYDAYLIAEoAigQGAwFCyABKAIIEBgMBAtBACECAkACQAJAAkAgASgCCEEBaw4CAAEDCwNAIAEoAjQhAyACIAEoAjBODQIgAyACQQR0aigCCBAYIAJBAWohAgwACwALA0AgASgCRCEDIAIgASgCQE4NASADIAJBBHRqKAIIEBggAkEBaiECDAALAAsgAxAYCwwDCyABKAIQEBgMAgsgASgCCBAYDAELIAEoAigQGAsgBEEBaiEEDAELCyAFEBggABAYC98BAQN/IAAQJSAAEE5PBEAgABBOIgJBAWoiAyACQQF0QYAIIAIbIgQgAyAESxshAyAAECUhBAJAIAAtAA9B/wFGBEAgACgCACACIANBARCGBSECDAELIANB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KAIIGiAEBEAgAiAJIAQQqwILIAYEQCACIARqIAcgBhCrAgsgAyAEIAVqIgprIQcgAyAKRwRAIAIgBGogBmogBCAJaiAFaiAHEKsCCyABQQpHBEAgCRChBQsgACACEPsBIAAgCCgCCBD6ASAAIAQgBmogB2oiABC+ASAIQQA6AAwgACACaiAIQQxqENIBIAhBEGokAA8LEMoBAAsWACAAIAEgAkKAgICAgICAgIB/ELAFCwkAIAAQZzYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsPACAAIAAoAgBBBGs2AgALCgAgACgCAEEEawsHACAAKAIECy0BAX8jAEEQayICJAACQCAAIAFGBEAgAEEAOgB4DAELIAEQngQLIAJBEGokAAsTACAAEIwFKAIAIAAoAgBrQQJ1CywBAX8gACgCBCECA0AgASACRwRAIAAQnQMaIAJBBGshAgwBCwsgACABNgIECwkAIABBADYCAAtJAQF/IwBBEGsiAyQAAkACQCACQR5LDQAgAS0AeEEBcQ0AIAFBAToAeAwBCyACEMcKIQELIANBEGokACAAIAI2AgQgACABNgIAC0ABAX8jAEEQayIBJAAgABCdAxogAUH/////AzYCDCABQf////8HNgIIIAFBDGogAUEIahCtCygCACABQRBqJAALCwAgAEEANgIAIAALNwEBfyMAQRBrIgMkACADIAEQ7QI2AgwgAyACEO0CNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtOAQF/IwBBEGsiAyQAIAMgATYCCCADIAA2AgwgAyACNgIEQQAhASADQQRqIgAgA0EMahCfBUUEQCAAIANBCGoQnwUhAQsgA0EQaiQAIAELNAEBfyMAQRBrIgMkACAAECQaIAAgAhCfAyADQQA6AA8gASACaiADQQ9qENIBIANBEGokAAtnAQJ/IwBBEGsiAyQAA0ACQCABLQAAIgJB3ABHBEAgAgRAIALAIgJBAE4EQCAAIAIQZQwDCyADIAI2AgAgAEHO3wAgAxAeDAILIANBEGokAA8LIABB98cBEBsaCyABQQFqIQEMAAsACxwAIABB/////wNLBEAQkAEACyAAQQJ0QQQQogsLCQAgABD1BhAYCxUAIABBgLoJNgIAIABBEGoQNBogAAsVACAAQdi5CTYCACAAQQxq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ACABKAIEIgIgACACSSIDGxDpASIBDQBBASEBIAAgAksNAEF/QQAgAxshAQsgAQsMACAAQQFBLRCACxoLDAAgAEEBQS0QhAsaCwoAIAEgAGtBAnULHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPcKCyACIAEgASACKAIAEKMLIAZBDGogAyAAKAIAEJsLIAFqNgIAIAZBEGokAAtCACABIAIgAyAEQQQQpAIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEJwFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQnAUgAGsiAEGnAUwEQCABIABBDG1BB282AgALC0IAIAEgAiADIARBBBClAiEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQIAIgAgAEGgAmogBSAEQQAQngUgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAgAiACAAQagBaiAFIARBABCeBSAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLBABBAgveAQEFfyMAQRBrIgckACMAQRBrIgMkACAAIQQCQCABQff///8DTQRAAkAgARCNBQRAIAQgARDTAQwBCyADQQhqIAEQ0ANBAWoQzwMgAygCDBogBCADKAIIIgAQ+wEgBCADKAIMEPoBIAQgARC+AQsjAEEQayIFJAAgBSACNgIMIAAhAiABIQYDQCAGBEAgAiAFKAIMNgIAIAZBAWshBiACQQRqIQIMAQsLIAVBEGokACADQQA2AgQgACABQQJ0aiADQQRqENsBIANBEGokAAwBCxDKAQALIAdBEGokACAEC8AFAQ5/IwBBEGsiCyQAIAYQywEhCiALQQRqIAYQ2QMiDhDIASAFIAM2AgACQAJAIAAiBy0AACIGQStrDgMA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aygCAGooAhg2AgAgAAsLACAAQYCgCxCpAgsJACAAEJEHEBgLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQpgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCmAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEKYDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCmAwsPACAAIAAoAgAoAhgRAgALLAAgACABEK0HIgFFBEAPCwJAIAMEQCAAIAEgAhCqBAwBCyAAIAEgAhC2CwsLCAAgACgCEEULBABBfwsIACAAEIoHGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQswEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQnAEgBUGQAmpCACAFKQOoAn1CACAEQgAQnAEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQnAEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQnAEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQnAEgBUHQAWogBEIAQgAgBSkD6AF9QgAQnAEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQnAEgBUGwAWogBEIAQgAgBSkDyAF9QgAQnAEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQnAEgBUGQAWogA0IPhkIAIAJCABCcASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJwBIAVBgAFqQgEgBH1CACACQgAQnAEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCcASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCcASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEKcDIAVBMGogDSAVIAZB8ABqELMBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQnAEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCcASAFIAMgEkIFQgAQnAEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwseAQF/IAAQ7QEiAQRAIAAgARDHCyAAQbWWBRDhAQsLnwMBBX9BECECAkBBECAAIABBEE0bIgMgA0EBa3FFBEAgAyEADAELA0AgAiIAQQF0IQIgACADSQ0ACwtBQCAAayABTQRAQZCGC0EwNgIAQQAPC0EQIAFBC2pBeHEgAUELSRsiAyAAakEMahBNIgJFBEBBAA8LIAJBCGshAQJAIABBAWsgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAAgAmpBAWtBACAAa3FBCGsiAiAAQQAgAiABa0EPTRtqIgAgAWsiAmshBCAGQQNxRQRAIAEoAgAhASAAIAQ2AgQgACABIAJqNgIADAELIAAgBCAAKAIEQQFxckECcjYCBCAAIARqIgQgBCgCBEEBcjYCBCAFIAIgBSgCAEEBcXJBAnI2AgAgASACaiIEIAQoAgRBAXI2AgQgASACEK0FCwJAIAAoAgQiAUEDcUUNACABQXhxIgIgA0EQak0NACAAIAMgAUEBcXJBAnI2AgQgACADaiIBIAIgA2siA0EDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAMQrQULIABBCGoLWQEDfyAAEC4hAyAAEK8FIgBBACAAQQBKGyEEQQAhAANAIAEoAgwhAiAAIARGRQRAIAMgAiAAQQJ0aigCACICIAIQdUEARxCKARogAEEBaiEADAELCyACEBgLEgAgAEUEQEEADwsgACABEJcHC+UeAg9/BX4jAEGQAWsiBSQAIAVBAEGQARA2IgVBfzYCTCAFIAA2AiwgBUGMBDYCICAFIAA2AlQgASEEIAIhEEEAIQAjAEGwAmsiBiQAIAUiAygCTBoCQAJAIAMoAgRFBEAgAxC/BRogAygCBEUNAQsgBC0AACIBRQ0BAkACQAJAAkACQANAAkACQCABQf8BcSIBEMoCBEADQCAEIgFBAWohBCABLQABEMoCDQALIANCABCPAgNAAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxBWCxDKAg0ACyADKAIEIQQgAykDcEIAWQRAIAMgBEEBayIENgIECyAEIAMoAixrrCADKQN4IBV8fCEVDAELAn8CQAJAIAFBJUYEQCAELQABIgFBKkYNASABQSVHDQILIANCABCPAgJAIAQtAABBJUYEQANAAn8gAygCBCIBIAMoAmhHBEAgAyABQQFqNgIEIAEtAAAMAQsgAxBWCyIBEMoCDQALIARBAWohBAwBCyADKAIEIgEgAygCaEcEQCADIAFBAWo2AgQgAS0AACEBDAELIAMQViEBCyAELQAAIAFHBEAgAykDcEIAWQRAIAMgAygCBEEBazYCBAsgAUEATiAOcg0NDAwLIAMoAgQgAygCLGusIAMpA3ggFXx8IRUgBCEBDAMLQQAhCCAEQQJqDAELAkAgAUEwayICQQlLDQAgBC0AAkEkRw0AIwBBEGsiASAQNgIMIAEgECACQQJ0akEEayAQIAJBAUsbIgFBBGo2AgggASgCACEIIARBA2oMAQsgECgCACEIIBBBBGohECAEQQFqCyEBQQAhD0EAIQcgAS0AACIEQTBrQQlNBEADQCAHQQpsIARqQTBrIQcgAS0AASEEIAFBAWohASAEQTBrQQpJDQALCyAEQe0ARwR/IAEFQQAhDCAIQQBHIQ8gAS0AASEEQQAhACABQQFqCyIJQQFqIQFBAyECIA8hBQJAAkACQAJAAkACQCAEQf8BcUHBAGsOOgQMBAwEBAQMDAwMAwwMDAwMDAQMDAwMBAwMBAwMDAwMBAwEBAQEBAAEBQwBDAQEBAwMBAIEDAwEDAIMCyAJQQJqIAEgCS0AAUHoAEYiAhshAUF+QX8gAhshAgwECyAJQQJqIAEgCS0AAUHsAEYiAhshAUEDQQEgAhshAgwDC0EBIQIMAgtBAiECDAELQQAhAiAJIQELQQEgAiABLQAAIgVBL3FBA0YiAhshEQJAIAVBIHIgBSACGyINQdsARg0AAkAgDUHuAEcEQCANQeMARw0BQQEgByAHQQFMGyEHDAILIAggESAVEMoLDAILIANCABCPAgNAAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxBWCxDKAg0ACyADKAIEIQQgAykDcEIAWQRAIAMgBEEBayIENgIECyAEIAMoAixrrCADKQN4IBV8fCEVCyADIAesIhQQjwICQCADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQMAQsgAxBWQQBIDQYLIAMpA3BCAFkEQCADIAMoAgRBAWs2AgQLQRAhBAJAAkACQAJAAkACQAJAAkACQAJAIA1B2ABrDiEGCQkCCQkJCQkBCQIEAQEBCQUJCQkJCQMGCQkCCQQJCQYACyANQcEAayICQQZLQQEgAnRB8QBxRXINCAsgBkEIaiADIBFBABDWCyADKQN4QgAgAygCBCADKAIsa6x9Ug0FDAwLIA1BEHJB8wBGBEAgBkEgakF/QYECEDYaIAZBADoAICANQfMARw0GIAZBADoAQSAGQQA6AC4gBkEANgEqDAYLIAZBIGogAS0AASIEQd4ARiIFQYECEDYaIAZBADoAICABQQJqIAFBAWogBRshAgJ/AkACQCABQQJBASAFG2otAAAiAUEtRwRAIAFB3QBGDQEgBEHeAEchCiACDAMLIAYgBEHeAEciCjoATgwBCyAGIARB3gBHIgo6AH4LIAJBAWoLIQEDQAJAIAEtAAAiAkEtRwRAIAJFDQ8gAkHdAEYNCAwBC0EtIQIgAS0AASIJRSAJQd0ARnINACABQQFqIQUCQCAJIAFBAWstAAAiBE0EQCAJIQIMAQsDQCAEQQFqIgQgBkEgamogCjoAACAEIAUtAAAiAkkNAAsLIAUhAQsgAiAGaiAKOgAhIAFBAWohAQwACwALQQghBAwCC0EKIQQMAQtBACEEC0IAIRJBACELQQAhCkEAIQkjAEEQayIHJAACQCAEQQFHIARBJE1xRQRAQZCGC0EcNgIADAELA0ACfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLIgIQygINAAsCQAJAIAJBK2sOAwABAAELQX9BACACQS1GGyEJIAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAAIQIMAQsgAxBWIQILAkACQAJAAkAgBEEARyAEQRBHcSACQTBHckUEQAJ/IAMoAgQiAiADKAJoRwRAIAMgAkEBajYCBCACLQAADAELIAMQVgsiAkFfcUHYAEYEQEEQIQQCfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLIgJBsYoJai0AAEEQSQ0DIAMpA3BCAFkEQCADIAMoAgRBAWs2AgQLIANCABCPAgwGCyAEDQFBCCEEDAILIARBCiAEGyIEIAJBsYoJai0AAEsNACADKQNwQgBZBEAgAyADKAIEQQFrNgIECyADQgAQjwJBkIYLQRw2AgAMBAsgBEEKRw0AIAJBMGsiC0EJTQRAQQAhAgNAIAJBCmwgC2oiAkGZs+bMAUkCfyADKAIEIgUgAygCaEcEQCADIAVBAWo2AgQgBS0AAAwBCyADEFYLQTBrIgtBCU1xDQALIAKtIRILIAtBCUsNAiASQgp+IRQgC60hEwNAAkACfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLIgJBMGsiBUEJTSATIBR8IhJCmrPmzJmz5swZVHFFBEAgBUEJTQ0BDAULIBJCCn4iFCAFrSITQn+FWA0BCwtBCiEEDAELIAQgBEEBa3EEQCACQbGKCWotAAAiCiAESQRAA0AgCiAEIAtsaiILQcfj8ThJAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxBWCyICQbGKCWotAAAiCiAESXENAAsgC60hEgsgBCAKTQ0BIAStIRYDQCASIBZ+IhQgCq1C/wGDIhNCf4VWDQIgEyAUfCESIAQCfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLIgJBsYoJai0AACIKTQ0CIAcgFkIAIBJCABCcASAHKQMIUA0ACwwBCyAEQRdsQQV2QQdxQbGMCWosAAAhBSACQbGKCWotAAAiCyAESQRAA0AgCyAKIAV0IgJyIQogAkGAgIDAAEkCfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLIgJBsYoJai0AACILIARJcQ0ACyAKrSESCyAEIAtNDQBCfyAFrSIUiCITIBJUDQADQCALrUL/AYMgEiAUhoQhEiAEAn8gAygCBCICIAMoAmhHBEAgAyACQQFqNgIEIAItAAAMAQsgAxBWCyICQbGKCWotAAAiC00NASASIBNYDQALCyAEIAJBsYoJai0AAE0NAANAIAQCfyADKAIEIgIgAygCaEcEQCADIAJBAWo2AgQgAi0AAAwBCyADEFYLQbGKCWotAABLDQALQZCGC0HEADYCAEEAIQlCfyESCyADKQNwQgBZBEAgAyADKAIEQQFrNgIECyAJQQFyRSASQn9RcQRAQZCGC0HEADYCAEJ+IRIMAQsgEiAJrCIThSATfSESCyAHQRBqJAAgAykDeEIAIAMoAgQgAygCLGusfVENByAIRSANQfAAR3JFBEAgCCASPgIADAMLIAggESASEMoLDAILIAhFDQEgBikDECEUIAYpAwghEwJAAkACQCARDgMAAQIECyAIIBMgFBCrBTgCAAwDCyAIIBMgFBCWBzkDAAwCCyAIIBM3AwAgCCAUNwMIDAELQR8gB0EBaiANQeMARyIJGyECAkAgEUEBRgRAIAghByAPBEAgAkECdBBNIgdFDQcLIAZCADcCqAJBACEEA0AgByEAAkADQAJ/IAMoAgQiBSADKAJoRwRAIAMgBUEBajYCBCAFLQAADAELIAMQVgsiBSAGai0AIUUNASAGIAU6ABsgBkEcaiAGQRtqQQEgBkGoAmoQrgUiBUF+Rg0AIAVBf0YEQEEAIQwMDAsgAARAIAAgBEECdGogBigCHDYCACAEQQFqIQQLIA9FIAIgBEdyDQALQQEhBUEAIQwgACACQQF0QQFyIgJBAnQQZiIHDQEMCwsLQQAhDCAAIQIgBkGoAmoEfyAGKAKoAgVBAAsNCAwBCyAPBEBBACEEIAIQTSIHRQ0GA0AgByEAA0ACfyADKAIEIgUgAygCaEcEQCADIAVBAWo2AgQgBS0AAAwBCyADEFYLIgUgBmotACFFBEBBACECIAAhDAwECyAAIARqIAU6AAAgBEEBaiIEIAJHDQALQQEhBSAAIAJBAXRBAXIiAhBmIgcNAAsgACEMQQAhAAwJC0EAIQQgCARAA0ACfyADKAIEIgAgAygCaEcEQCADIABBAWo2AgQgAC0AAAwBCyADEFYLIgAgBmotACEEQCAEIAhqIAA6AAAgBEEBaiEEDAEFQQAhAiAIIgAhDAwDCwALAAsDQAJ/IAMoAgQiACADKAJoRwRAIAMgAEEBajYCBCAALQAADAELIAMQVgsgBmotACENAAtBACEAQQAhDEEAIQILIAMoAgQhByADKQNwQgBZBEAgAyAHQQFrIgc2AgQLIAMpA3ggByADKAIsa6x8IhNQIAkgEyAUUXJFcg0CIA8EQCAIIAA2AgALAkAgDUHjAEYNACACBEAgAiAEQQJ0akEANgIACyAMRQRAQQAhDAwBCyAEIAxqQQA6AAALIAIhAAsgAygCBCADKAIsa6wgAykDeCAVfHwhFSAOIAhBAEdqIQ4LIAFBAWohBCABLQABIgENAQwICwsgAiEADAELQQEhBUEAIQxBACEADAILIA8hBQwCCyAPIQULIA5BfyAOGyEOCyAFRQ0BIAwQGCAAEBgMAQtBfyEOCyAGQbACaiQAIANBkAFqJAAgDgtDAAJAIABFDQACQAJAAkACQCABQQJqDgYAAQICBAMECyAAIAI8AAAPCyAAIAI9AQAPCyAAIAI+AgAPCyAAIAI3AwALCw8AIAAgASACQQBBABCYBwsVAQF/EO4DIQBBD0Hw2gooAgAgABsLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEEAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALbwEFfyAAKAIAIgMsAABBMGsiAUEJSwRAQQAPCwNAQX8hBCACQcyZs+YATQRAQX8gASACQQpsIgVqIAEgBUH/////B3NLGyEECyAAIANBAWoiBTYCACADLAABIAQhAiAFIQNBMGsiAUEKSQ0ACyACC/USAhJ/An4jAEFAaiIIJAAgCCABNgI8IAhBJ2ohFiAIQShqIRECQAJAAkACQANAQQAhBwNAIAEhDSAHIA5B/////wdzSg0CIAcgDmohDgJAAkACQAJAIAEiBy0AACILBEADQAJAAkAgC0H/AXEiAUUEQCAHIQEMAQsgAUElRw0BIAchCwNAIAstAAFBJUcEQCALIQEMAgsgB0EBaiEHIAstAAIgC0ECaiIBIQtBJUYNAAsLIAcgDWsiByAOQf////8HcyIXSg0JIAAEQCAAIA0gBxCkAQsgBw0HIAggATYCPCABQQFqIQdBfyEQAkAgASwAAUEwayIKQQlLDQAgAS0AAkEkRw0AIAFBA2ohB0EBIRIgCiEQCyAIIAc2AjxBACEMAkAgBywAACILQSBrIgFBH0sEQCAHIQoMAQsgByEKQQEgAXQiAUGJ0QRxRQ0AA0AgCCAHQQFqIgo2AjwgASAMciEMIAcsAAEiC0EgayIBQSBPDQEgCiEHQQEgAXQiAUGJ0QRxDQALCwJAIAtBKkYEQAJ/AkAgCiwAAUEwayIBQQlLDQAgCi0AAkEkRw0AAn8gAEUEQCAEIAFBAnRqQQo2AgBBAAwBCyADIAFBA3RqKAIACyEPIApBA2ohAUEBDAELIBINBiAKQQFqIQEgAEUEQCAIIAE2AjxBACESQQAhDwwDCyACIAIoAgAiB0EEajYCACAHKAIAIQ9BAAshEiAIIAE2AjwgD0EATg0BQQAgD2shDyAMQYDAAHIhDAwBCyAIQTxqEM4LIg9BAEgNCiAIKAI8IQELQQAhB0F/IQkCf0EAIAEtAABBLkcNABogAS0AAUEqRgRAAn8CQCABLAACQTBrIgpBCUsNACABLQADQSRHDQAgAUEEaiEBAn8gAEUEQCAEIApBAnRqQQo2AgBBAAwBCyADIApBA3RqKAIACwwBCyASDQYgAUECaiEBQQAgAEUNABogAiACKAIAIgpBBGo2AgAgCigCAAshCSAIIAE2AjwgCUEATgwBCyAIIAFBAWo2AjwgCEE8ahDOCyEJIAgoAjwhAUEBCyETA0AgByEUQRwhCiABIhgsAAAiB0H7AGtBRkkNCyABQQFqIQEgByAUQTpsakH/hAlqLQAAIgdBAWtBCEkNAAsgCCABNgI8AkAgB0EbRwRAIAdFDQwgEEEATgRAIABFBEAgBCAQQQJ0aiAHNgIADAwLIAggAyAQQQN0aikDADcDMAwCCyAARQ0IIAhBMGogByACIAYQzQsMAQsgEEEATg0LQQAhByAARQ0ICyAALQAAQSBxDQsgDEH//3txIgsgDCAMQYDAAHEbIQxBACEQQfITIRUgESEKAkACQAJ/AkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCAYLAAAIgdBU3EgByAHQQ9xQQNGGyAHIBQbIgdB2ABrDiEEFhYWFhYWFhYQFgkGEBAQFgYWFhYWAgUDFhYKFgEWFgQACwJAIAdBwQBrDgcQFgsWEBAQAAsgB0HTAEYNCwwVCyAIKQMwIRpB8hMMBQtBACEHAkACQAJAAkACQAJAAkAgFEH/AXEOCAABAgMEHAUGHAsgCCgCMCAONgIADBsLIAgoAjAgDjYCAAwaCyAIKAIwIA6sNwMADBkLIAgoAjAgDjsBAAwYCyAIKAIwIA46AAAMFwsgCCgCMCAONgIADBYLIAgoAjAgDqw3AwAMFQtBCCAJIAlBCE0bIQkgDEEIciEMQfgAIQcLIBEhASAHQSBxIQsgCCkDMCIaIhlQRQRAA0AgAUEBayIBIBmnQQ9xQZCJCWotAAAgC3I6AAAgGUIPViAZQgSIIRkNAAsLIAEhDSAMQQhxRSAaUHINAyAHQQR2QfITaiEVQQIhEAwDCyARIQEgCCkDMCIaIhlQRQRAA0AgAUEBayIBIBmnQQdxQTByOgAAIBlCB1YgGUIDiCEZDQALCyABIQ0gDEEIcUUNAiAJIBEgAWsiAUEBaiABIAlIGyEJDAILIAgpAzAiGkIAUwRAIAhCACAafSIaNwMwQQEhEEHyEwwBCyAMQYAQcQRAQQEhEEHzEwwBC0H0E0HyEyAMQQFxIhAbCyEVIBogERDkAyENCyATIAlBAEhxDREgDEH//3txIAwgExshDCAaQgBSIAlyRQRAIBEhDUEAIQkMDgsgCSAaUCARIA1raiIBIAEgCUgbIQkMDQsgCC0AMCEHDAsLIAgoAjAiAUHOogMgARsiDUH/////ByAJIAlB/////wdPGxDbCyIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIZUEUNAUEAIQcMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBC1AQwCCyAIQQA2AgwgCCAZPgIIIAggCEEIaiIHNgIwQX8hCSAHCyELQQAhBwNAAkAgCygCACINRQ0AIAhBBGogDRDICyINQQBIDQ8gDSAJIAdrSw0AIAtBBGohCyAHIA1qIgcgCUkNAQsLQT0hCiAHQQBIDQwgAEEgIA8gByAMELUBIAdFBEBBACEHDAELQQAhCiAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIJIA0QyAsiDSAKaiIKIAdLDQEgACAJIA0QpAEgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzELUBIA8gByAHIA9IGyEHDAgLIBMgCUEASHENCUE9IQogACAIKwMwIA8gCSAMIAcgBRFIACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQzQtBASEOIAdBAWoiB0EKRw0BDAsLCyAHQQpPBEBBASEODAoLA0AgBCAHQQJ0aigCAA0BQQEhDiAHQQFqIgdBCkcNAAsMCQtBHCEKDAYLIAggBzoAJ0EBIQkgFiENIAshDAsgCSAKIA1rIgsgCSALShsiASAQQf////8Hc0oNA0E9IQogDyABIBBqIgkgCSAPSBsiByAXSg0EIABBICAHIAkgDBC1ASAAIBUgEBCkASAAQTAgByAJIAxBgIAEcxC1ASAAQTAgASALQQAQtQEgACANIAsQpAEgAEEgIAcgCSAMQYDAAHMQtQEgCCgCPCEBDAELCwtBACEODAMLQT0hCgtBkIYLIAo2AgALQX8hDgsgCEFAayQAIA4LfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQ0AshACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwvuAQEFfyABQbWWBUEQQQAQNSEEAkAgACABKAIAQQNxEKsDIgMEQAJAIAQoAggiAkUEQCAEIAAQOSABKAIAQQNxEKsDNgIIIAQgARCvBUEEEBo2AgwgA0EAQYABIAMoAgARAwAhAANAIABFDQIgACgCDBB1IQYgARAuIQIgACgCDCEFAn8gBgRAIAIgBRDVAgwBCyACIAUQrgELIQIgBCgCDCAAKAIQQQJ0aiACNgIAIAMgAEEIIAMoAgARAwAhAAwACwALIAIgA0cNAgsPC0HdI0G6uQFBqAFBvCkQAAALQdAjQbq5AUG2AUG8KRAAAAtrAQJ/AkAgAEF/Rg0AIAEoAkxBAEghAwJAAkAgASgCBCICRQRAIAEQvwUaIAEoAgQiAkUNAQsgAiABKAIsQQhrSw0BCyADDQEPCyABIAJBAWsiAjYCBCACIAA6AAAgASABKAIAQW9xNgIACwuEAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAgPIDSQ0BIABEAAAAAAAAAABBABDUCyEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARCoByECIAErAwAgASsDCCACQQFxENQLIQALIAFBEGokACAAC58DAwJ8AX4CfyAAvSIFQoCAgICA/////wCDQoGAgIDwhOXyP1QiBkUEQEQYLURU+yHpPyAAmaFEB1wUMyamgTwgASABmiAFQgBZIgcboaAhAEQAAAAAAAAAACEBCyAAIAAgACAAoiIEoiIDRGNVVVVVVdU/oiAEIAMgBCAEoiIDIAMgAyADIANEc1Ng28t1876iRKaSN6CIfhQ/oKJEAWXy8thEQz+gokQoA1bJIm1tP6CiRDfWBoT0ZJY/oKJEev4QERERwT+gIAQgAyADIAMgAyADRNR6v3RwKvs+okTpp/AyD7gSP6CiRGgQjRr3JjA/oKJEFYPg/sjbVz+gokSThG7p4yaCP6CiRP5Bsxu6oas/oKKgoiABoKIgAaCgIgOgIQEgBkUEQEEBIAJBAXRrtyIEIAAgAyABIAGiIAEgBKCjoaAiACAAoKEiACAAmiAHGw8LIAIEfEQAAAAAAADwvyABoyIEIAS9QoCAgIBwg78iBCADIAG9QoCAgIBwg78iASAAoaGiIAQgAaJEAAAAAAAA8D+goKIgBKAFIAELC4kEAgN/AX4CQAJAAn8CQAJAAn8gACgCBCICIAAoAmhHBEAgACACQQFqNgIEIAItAAAMAQsgABBWCyICQStrDgMAAQABCyACQS1GIAFFAn8gACgCBCIDIAAoAmhHBEAgACADQQFqNgIEIAMtAAAMAQsgABBWCyIDQTprIgFBdUtyDQEaIAApA3BCAFMNAiAAIAAoAgRBAWs2AgQMAgsgAkE6ayEBIAIhA0EACyEEIAFBdkkNAAJAIANBMGtBCk8NAEEAIQIDQCADIAJBCmxqAn8gACgCBCICIAAoAmhHBEAgACACQQFqNgIEIAItAAAMAQsgABBWCyEDQTBrIQIgAkHMmbPmAEggA0EwayIBQQlNcQ0ACyACrCEFIAFBCk8NAANAIAOtIAVCCn58IQUCfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAEFYLIgNBMGsiAUEJTSAFQjB9IgVCro+F18fC66MBU3ENAAsgAUEKTw0AA0ACfyAAKAIEIgEgACgCaEcEQCAAIAFBAWo2AgQgAS0AAAwBCyAAEFYLQTBrQQpJDQALCyAAKQNwQgBZBEAgACAAKAIEQQFrNgIEC0IAIAV9IAUgBBshBQwBC0KAgICAgICAgIB/IQUgACkDcEIAUw0AIAAgACgCBEEBazYCBEKAgICAgICAgIB/DwsgBQudMQMRfwd+AXwjAEEwayIOJAACQAJAIAJBAksNACACQQJ0IgJBrIUJaigCACERIAJBoIUJaigCACEQA0ACfyABKAIEIgIgASgCaEcEQCABIAJBAWo2AgQgAi0AAAwBCyABEFYLIgIQygINAAtBASEJAkACQCACQStrDgMAAQABC0F/QQEgAkEtRhshCSABKAIEIgIgASgCaEcEQCABIAJBAWo2AgQgAi0AACECDAELIAEQViECCwJAAkAgAkFfcUHJAEYEQANAIAZBB0YNAgJ/IAEoAgQiAiABKAJoRwRAIAEgAkEBajYCBCACLQAADAELIAEQVgshAiAGQZwMaiAGQQFqIQYsAAAgAkEgckYNAAsLIAZBA0cEQCAGQQhGIgcNASADRSAGQQRJcg0CIAcNAQsgASkDcCIVQgBZBEAgASABKAIEQQFrNgIECyADRSAGQQRJcg0AIBVCAFMhAgNAIAJFBEAgASABKAIEQQFrNgIECyAGQQFrIgZBA0sNAAsLIA4gCbJDAACAf5QQrAUgDikDCCEVIA4pAwAhFgwCCwJAAkACQAJAAkAgBg0AQQAhBiACQV9xQc4ARw0AA0AgBkECRg0CAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARBWCyECIAZB2+kAaiAGQQFqIQYsAAAgAkEgckYNAAsLIAYOBAMBAQABCwJAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARBWC0EoRgRAQQEhBgwBC0KAgICAgIDg//8AIRUgASkDcEIAUw0FIAEgASgCBEEBazYCBAwFCwNAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARBWCyICQTBrQQpJIAJBwQBrQRpJciACQd8ARnJFIAJB4QBrQRpPcUUEQCAGQQFqIQYMAQsLQoCAgICAgOD//wAhFSACQSlGDQQgASkDcCIYQgBZBEAgASABKAIEQQFrNgIECwJAIAMEQCAGDQEMBgsMAgsDQCAYQgBZBEAgASABKAIEQQFrNgIECyAGQQFrIgYNAAsMBAsgASkDcEIAWQRAIAEgASgCBEEBazYCBAsLQZCGC0EcNgIAIAFCABCPAgwBCwJAIAJBMEcNAAJ/IAEoAgQiByABKAJoRwRAIAEgB0EBajYCBCAHLQAADAELIAEQVgtBX3FB2ABGBEAjAEGwA2siBSQAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARBWCyECAkACfwNAIAJBMEcEQAJAIAJBLkcNBCABKAIEIgIgASgCaEYNACABIAJBAWo2AgQgAi0AAAwDCwUgASgCBCICIAEoAmhHBH9BASEPIAEgAkEBajYCBCACLQAABUEBIQ8gARBWCyECDAELCyABEFYLIgJBMEcEQEEBIQsMAQsDQCAYQgF9IRgCfyABKAIEIgIgASgCaEcEQCABIAJBAWo2AgQgAi0AAAwBCyABEFYLIgJBMEYNAAtBASELQQEhDwtCgICAgICAwP8/IRYDQAJAIAIhBgJAAkAgAkEwayIMQQpJDQAgAkEuRyIHIAJBIHIiBkHhAGtBBUtxDQIgBw0AIAsNAkEBIQsgFSEYDAELIAZB1wBrIAwgAkE5ShshAgJAIBVCB1cEQCACIAhBBHRqIQgMAQsgFUIcWARAIAVBMGogAhDfASAFQSBqIBogFkIAQoCAgICAgMD9PxBqIAVBEGogBSkDMCAFKQM4IAUpAyAiGiAFKQMoIhYQaiAFIAUpAxAgBSkDGCAXIBkQtAEgBSkDCCEZIAUpAwAhFwwBCyACRSAKcg0AIAVB0ABqIBogFkIAQoCAgICAgID/PxBqIAVBQGsgBSkDUCAFKQNYIBcgGRC0ASAFKQNIIRlBASEKIAUpA0AhFwsgFUIBfCEVQQEhDwsgASgCBCICIAEoAmhHBH8gASACQQFqNgIEIAItAAAFIAEQVgshAgwBCwsCfiAPRQRAAkACQCABKQNwQgBZBEAgASABKAIEIgJBAWs2AgQgA0UNASABIAJBAms2AgQgC0UNAiABIAJBA2s2AgQMAgsgAw0BCyABQgAQjwILIAVB4ABqRAAAAAAAAAAAIAm3phCsAiAFKQNgIRcgBSkDaAwBCyAVQgdXBEAgFSEWA0AgCEEEdCEIIBZCAXwiFkIIUg0ACwsCQAJAAkAgAkFfcUHQAEYEQCABIAMQ1QsiFkKAgICAgICAgIB/Ug0DIAMEQCABKQNwQgBZDQIMAwtCACEXIAFCABCPAkIADAQLQgAhFiABKQNwQgBTDQILIAEgASgCBEEBazYCBAtCACEWCyAIRQRAIAVB8ABqRAAAAAAAAAAAIAm3phCsAiAFKQNwIRcgBSkDeAwBCyAYIBUgCxtCAoYgFnxCIH0iFUEAIBFrrVUEQEGQhgtBxAA2AgAgBUGgAWogCRDfASAFQZABaiAFKQOgASAFKQOoAUJ/Qv///////7///wAQaiAFQYABaiAFKQOQASAFKQOYAUJ/Qv///////7///wAQaiAFKQOAASEXIAUpA4gBDAELIBFB4gFrrCAVVwRAIAhBAE4EQANAIAVBoANqIBcgGUIAQoCAgICAgMD/v38QtAEgFyAZQoCAgICAgID/PxDECyEBIAVBkANqIBcgGSAFKQOgAyAXIAFBAE4iAhsgBSkDqAMgGSACGxC0ASACIAhBAXQiAXIhCCAVQgF9IRUgBSkDmAMhGSAFKQOQAyEXIAFBAE4NAAsLAn4gFUEgIBFrrXwiFqciAUEAIAFBAEobIBAgFiAQrVMbIgFB8QBPBEAgBUGAA2ogCRDfASAFKQOIAyEYIAUpA4ADIRpCAAwBCyAFQeACakQAAAAAAADwP0GQASABaxD6AhCsAiAFQdACaiAJEN8BIAUpA9ACIRogBUHwAmogBSkD4AIgBSkD6AIgBSkD2AIiGBDZCyAFKQP4AiEbIAUpA/ACCyEWIAVBwAJqIAggCEEBcUUgFyAZQgBCABCoA0EARyABQSBJcXEiAXIQ4gMgBUGwAmogGiAYIAUpA8ACIAUpA8gCEGogBUGQAmogBSkDsAIgBSkDuAIgFiAbELQBIAVBoAJqIBogGEIAIBcgARtCACAZIAEbEGogBUGAAmogBSkDoAIgBSkDqAIgBSkDkAIgBSkDmAIQtAEgBUHwAWogBSkDgAIgBSkDiAIgFiAbEPgCIAUpA/ABIhggBSkD+AEiFkIAQgAQqANFBEBBkIYLQcQANgIACyAFQeABaiAYIBYgFacQ2AsgBSkD4AEhFyAFKQPoAQwBC0GQhgtBxAA2AgAgBUHQAWogCRDfASAFQcABaiAFKQPQASAFKQPYAUIAQoCAgICAgMAAEGogBUGwAWogBSkDwAEgBSkDyAFCAEKAgICAgIDAABBqIAUpA7ABIRcgBSkDuAELIRUgDiAXNwMQIA4gFTcDGCAFQbADaiQAIA4pAxghFSAOKQMQIRYMAwsgASkDcEIAUw0AIAEgASgCBEEBazYCBAsgASEGIAIhByAJIQwgAyEJQQAhAyMAQZDGAGsiBCQAQQAgEWsiDyAQayEUAkACfwNAAkAgB0EwRwRAIAdBLkcNBCAGKAIEIgEgBigCaEYNASAGIAFBAWo2AgQgAS0AAAwDCyAGKAIEIgEgBigCaEcEQCAGIAFBAWo2AgQgAS0AACEHBSAGEFYhBwtBASEDDAELCyAGEFYLIgdBMEYEQANAIBVCAX0hFQJ/IAYoAgQiASAGKAJoRwRAIAYgAUEBajYCBCABLQAADAELIAYQVgsiB0EwRg0AC0EBIQMLQQEhCwsgBEEANgKQBgJ+AkACQAJAAkAgB0EuRiIBIAdBMGsiAkEJTXIEQANAAkAgAUEBcQRAIAtFBEAgFiEVQQEhCwwCCyADRSEBDAQLIBZCAXwhFiAIQfwPTARAIA0gFqcgB0EwRhshDSAEQZAGaiAIQQJ0aiIBIAoEfyAHIAEoAgBBCmxqQTBrBSACCzYCAEEBIQNBACAKQQFqIgEgAUEJRiIBGyEKIAEgCGohCAwBCyAHQTBGDQAgBCAEKAKARkEBcjYCgEZB3I8BIQ0LAn8gBigCBCIBIAYoAmhHBEAgBiABQQFqNgIEIAEtAAAMAQsgBhBWCyIHQS5GIgEgB0EwayICQQpJcg0ACwsgFSAWIAsbIRUgA0UgB0FfcUHFAEdyRQRAAkAgBiAJENULIhdCgICAgICAgICAf1INACAJRQ0EQgAhFyAGKQNwQgBTDQAgBiAGKAIEQQFrNgIECyAVIBd8IRUMBAsgA0UhASAHQQBIDQELIAYpA3BCAFMNACAGIAYoAgRBAWs2AgQLIAFFDQFBkIYLQRw2AgALIAZCABCPAkIAIRVCAAwBCyAEKAKQBiIBRQRAIAREAAAAAAAAAAAgDLemEKwCIAQpAwghFSAEKQMADAELIBUgFlIgFkIJVXIgEEEeTUEAIAEgEHYbckUEQCAEQTBqIAwQ3wEgBEEgaiABEOIDIARBEGogBCkDMCAEKQM4IAQpAyAgBCkDKBBqIAQpAxghFSAEKQMQDAELIA9BAXatIBVTBEBBkIYLQcQANgIAIARB4ABqIAwQ3wEgBEHQAGogBCkDYCAEKQNoQn9C////////v///ABBqIARBQGsgBCkDUCAEKQNYQn9C////////v///ABBqIAQpA0ghFSAEKQNADAELIBFB4gFrrCAVVQRAQZCGC0HEADYCACAEQZABaiAMEN8BIARBgAFqIAQpA5ABIAQpA5gBQgBCgICAgICAwAAQaiAEQfAAaiAEKQOAASAEKQOIAUIAQoCAgICAgMAAEGogBCkDeCEVIAQpA3AMAQsgCgRAIApBCEwEQCAEQZAGaiAIQQJ0aiIBKAIAIQYDQCAGQQpsIQYgCkEBaiIKQQlHDQALIAEgBjYCAAsgCEEBaiEICwJAIA1BCU4gFUIRVXIgFaciCiANSHINACAVQglRBEAgBEHAAWogDBDfASAEQbABaiAEKAKQBhDiAyAEQaABaiAEKQPAASAEKQPIASAEKQOwASAEKQO4ARBqIAQpA6gBIRUgBCkDoAEMAgsgFUIIVwRAIARBkAJqIAwQ3wEgBEGAAmogBCgCkAYQ4gMgBEHwAWogBCkDkAIgBCkDmAIgBCkDgAIgBCkDiAIQaiAEQeABakEAIAprQQJ0QaCFCWooAgAQ3wEgBEHQAWogBCkD8AEgBCkD+AEgBCkD4AEgBCkD6AEQwwsgBCkD2AEhFSAEKQPQAQwCCyAQIApBfWxqQRtqIgJBHkxBACAEKAKQBiIBIAJ2Gw0AIARB4AJqIAwQ3wEgBEHQAmogARDiAyAEQcACaiAEKQPgAiAEKQPoAiAEKQPQAiAEKQPYAhBqIARBsAJqIApBAnRB2IQJaigCABDfASAEQaACaiAEKQPAAiAEKQPIAiAEKQOwAiAEKQO4AhBqIAQpA6gCIRUgBCkDoAIMAQsDQCAEQZAGaiAIIgFBAWsiCEECdGooAgBFDQALQQAhDQJAIApBCW8iAkUEQEEAIQIMAQsgAkEJaiACIBVCAFMbIRICQCABRQRAQQAhAkEAIQEMAQtBgJTr3ANBACASa0ECdEGghQlqKAIAIgVtIQtBACEHQQAhBkEAIQIDQCAEQZAGaiIPIAZBAnRqIgMgByADKAIAIgggBW4iCWoiAzYCACACQQFqQf8PcSACIANFIAIgBkZxIgMbIQIgCkEJayAKIAMbIQogCyAIIAUgCWxrbCEHIAZBAWoiBiABRw0ACyAHRQ0AIAFBAnQgD2ogBzYCACABQQFqIQELIAogEmtBCWohCgsDQCAEQZAGaiACQQJ0aiEPIApBJEghBgJAA0AgBkUEQCAKQSRHDQIgDygCAEHR6fkETw0CCyABQf8PaiEIQQAhAwNAIAEhCSADrSAEQZAGaiAIQf8PcSILQQJ0aiIBNQIAQh2GfCIVQoGU69wDVAR/QQAFIBUgFUKAlOvcA4AiFkKAlOvcA359IRUgFqcLIQMgASAVPgIAIAkgCSALIAkgFVAbIAIgC0YbIAsgCUEBa0H/D3EiB0cbIQEgC0EBayEIIAIgC0cNAAsgDUEdayENIAkhASADRQ0ACyACQQFrQf8PcSICIAFGBEAgBEGQBmoiCSABQf4PakH/D3FBAnRqIgEgASgCACAHQQJ0IAlqKAIAcjYCACAHIQELIApBCWohCiAEQZAGaiACQQJ0aiADNgIADAELCwJAA0AgAUEBakH/D3EhCSAEQZAGaiABQQFrQf8PcUECdGohEgNAQQlBASAKQS1KGyETAkADQCACIQNBACEGAkADQAJAIAMgBmpB/w9xIgIgAUYNACAEQZAGaiACQQJ0aigCACIHIAZBAnRB8IQJaigCACICSQ0AIAIgB0kNAiAGQQFqIgZBBEcNAQsLIApBJEcNAEIAIRVBACEGQgAhFgNAIAEgAyAGakH/D3EiAkYEQCABQQFqQf8PcSIBQQJ0IARqQQA2AowGCyAEQYAGaiAEQZAGaiACQQJ0aigCABDiAyAEQfAFaiAVIBZCAEKAgICA5Zq3jsAAEGogBEHgBWogBCkD8AUgBCkD+AUgBCkDgAYgBCkDiAYQtAEgBCkD6AUhFiAEKQPgBSEVIAZBAWoiBkEERw0ACyAEQdAFaiAMEN8BIARBwAVqIBUgFiAEKQPQBSAEKQPYBRBqIAQpA8gFIRZCACEVIAQpA8AFIRcgDUHxAGoiByARayIIQQAgCEEAShsgECAIIBBIIgkbIgZB8ABNDQIMBQsgDSATaiENIAEhAiABIANGDQALQYCU69wDIBN2IQVBfyATdEF/cyELQQAhBiADIQIDQCAEQZAGaiIPIANBAnRqIgcgBiAHKAIAIgggE3ZqIgc2AgAgAkEBakH/D3EgAiAHRSACIANGcSIHGyECIApBCWsgCiAHGyEKIAggC3EgBWwhBiADQQFqQf8PcSIDIAFHDQALIAZFDQEgAiAJRwRAIAFBAnQgD2ogBjYCACAJIQEMAwsgEiASKAIAQQFyNgIADAELCwsgBEGQBWpEAAAAAAAA8D9B4QEgBmsQ+gIQrAIgBEGwBWogBCkDkAUgBCkDmAUgFhDZCyAEKQO4BSEaIAQpA7AFIRkgBEGABWpEAAAAAAAA8D9B8QAgBmsQ+gIQrAIgBEGgBWogFyAWIAQpA4AFIAQpA4gFENcLIARB8ARqIBcgFiAEKQOgBSIVIAQpA6gFIhgQ+AIgBEHgBGogGSAaIAQpA/AEIAQpA/gEELQBIAQpA+gEIRYgBCkD4AQhFwsCQCADQQRqQf8PcSICIAFGDQACQCAEQZAGaiACQQJ0aigCACICQf/Jte4BTQRAIAJFIANBBWpB/w9xIAFGcQ0BIARB8ANqIAy3RAAAAAAAANA/ohCsAiAEQeADaiAVIBggBCkD8AMgBCkD+AMQtAEgBCkD6AMhGCAEKQPgAyEVDAELIAJBgMq17gFHBEAgBEHQBGogDLdEAAAAAAAA6D+iEKwCIARBwARqIBUgGCAEKQPQBCAEKQPYBBC0ASAEKQPIBCEYIAQpA8AEIRUMAQsgDLchHCABIANBBWpB/w9xRgRAIARBkARqIBxEAAAAAAAA4D+iEKwCIARBgARqIBUgGCAEKQOQBCAEKQOYBBC0ASAEKQOIBCEYIAQpA4AEIRUMAQsgBEGwBGogHEQAAAAAAADoP6IQrAIgBEGgBGogFSAYIAQpA7AEIAQpA7gEELQBIAQpA6gEIRggBCkDoAQhFQsgBkHvAEsNACAEQdADaiAVIBhCAEKAgICAgIDA/z8Q1wsgBCkD0AMgBCkD2ANCAEIAEKgDDQAgBEHAA2ogFSAYQgBCgICAgICAwP8/ELQBIAQpA8gDIRggBCkDwAMhFQsgBEGwA2ogFyAWIBUgGBC0ASAEQaADaiAEKQOwAyAEKQO4AyAZIBoQ+AIgBCkDqAMhFiAEKQOgAyEXAkAgFEECayAHQf////8HcU4NACAEIBZC////////////AIM3A5gDIAQgFzcDkAMgBEGAA2ogFyAWQgBCgICAgICAgP8/EGogBCkDkAMgBCkDmANCgICAgICAgLjAABDECyECIAQpA4gDIBYgAkEATiIBGyEWIAQpA4ADIBcgARshFyAJIAYgCEcgAkEASHJxIBUgGEIAQgAQqANBAEdxRSAUIAEgDWoiDUHuAGpOcQ0AQZCGC0HEADYCAAsgBEHwAmogFyAWIA0Q2AsgBCkD+AIhFSAEKQPwAgshFiAOIBU3AyggDiAWNwMgIARBkMYAaiQAIA4pAyghFSAOKQMgIRYMAQtCACEVCyAAIBY3AwAgACAVNwMIIA5BMGokAAvDBgIEfwN+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAEKgDRQ0AAn8gBEL///////8/gyEKAn8gBEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEEGogBSAFKQMQIgIgBSkDGCIBIAIgARDDCyAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJEKgDQQBMBEAgASAKIAMgCRCoAwRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEGogBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQaiAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEGogBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEGogBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQaiAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QaiAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQaiAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBqQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBqIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBqQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBqIAAg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A0AgBQRAIAAgBSAHEKMHIAYgBRAwIQUMAQUgBiACEB0hAgwCCwALAAsACyAIQa0CNgIEIAhBurkBNgIAQajzCCgCAEHmvAQgCBAfGhA8AAsgBiAGQR4gB0EBEMgDGgsgASAHRXJFBEAgACAHIAMgBBChBwsgACAAIAcQ3gwMAQsgACABIAIQ7gshBwsgCEEwaiQAIAcPC0HA1QFB0fsAQQxB/jsQAAALTQEDf0EBIQEDQCAAKAIQIgMoArgBIQIgAygCtAEgAUgEQCACEBgFIAIgAUECdGooAgAiAigCECgCDBC8ASACEPALIAFBAWohAQwBCwsL5gMCBn8GfCMAQeAAayIDJAAgACgCECICKwMYIQkgAisDECEKQYzYCi0AAEECTwRAIAEQsQIgAyAAECE2AlBBqPMIKAIAQaHzAyADQdAAahAfGgsCQCABRQRAQajzCCgCACEGDAELQajzCCgCACEGIAAQHCECIANBQGshBQNAIAJFDQECQCACKAIQIgQoAoABIABHDQAgBCAKIAQrAxCgOQMQIAQgCSAEKwMYoDkDGEGM2AotAABBAkkNACABELECIAIQISEEIAIoAhAiBysDECEIIAUgBysDGDkDACADIAg5AzggAyAENgIwIAZBg6kEIANBMGoQMgsgACACEB0hAgwACwALIAFBAWohB0EBIQQDQCAAKAIQIgIoArQBIAROBEAgAigCuAEgBEECdGooAgAhBSABBEAgCSAFKAIQIgIrAyigIQggCiACKwMgoCELIAkgAisDGKAhDCAKIAIrAxCgIQ1BjNgKLQAAQQJPBEAgARCxAiAFECEhAiADIAg5AyAgAyALOQMYIAMgDDkDECADIA05AwggAyACNgIAIAZB8agEIAMQMiAFKAIQIQILIAIgCDkDKCACIAs5AyAgAiAMOQMYIAIgDTkDEAsgBSAHEPELIARBAWohBAwBCwsgA0HgAGokAAv0GQMNfwt8AX4jAEGwBGsiAiQAIAAoAkghBkGM2AotAABBAk8EQCABELECIAIgABAhNgKwA0Go8wgoAgBB/u0DIAJBsANqEB8aCyABQQFqIQdBASEEA0AgACgCECIFKAK0ASAESARAAkACQCAAEDogA2siCSAAKAIQIgQoArQBaiINDQAgBCgCDA0AIARCADcDECAEQoCAgICAgICZwAA3AyggBEKA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oSIQOQMgIARCADcDGEEAIQRBjNgKLQAAQQFLBEAgARCxAiAAECEhACACIA85A7ACIAIgEDkDqAIgAkIANwOgAiACQgA3A5gCIAIgADYCkAIgB0HxqAQgAkGQAmoQMgsDQCACKALgAyAETQRAIAJB2ANqIgBBIBAzIAAQOEEAIQQDQCACKALIAyAETQRAIAJBwANqIgBBBBAzIAAQOCAGEBgMCgUgAiACKQPIAzcDiAIgAiACKQPAAzcDgAIgAkGAAmogBBAZIQACQAJAAkAgAigC0AMiAQ4CAgABCyACKALAAyAAQQJ0aigCABAYDAELIAIoAsADIABBAnRqKAIAIAERAQALIARBAWohBAwBCwALAAUgAiACKQPgAzcD+AEgAiACKQPYAzcD8AEgAkHwAWogBBAZIQACQAJAAkAgAigC6AMiAQ4CAgABC0G+gARBwgBBASAHEDsaEDwACyACIAIoAtgDIABBBXRqIgApAwg3A9gBIAIgACkDEDcD4AEgAiAAKQMYNwPoASACIAApAwA3A9ABIAJB0AFqIAERAQALIARBAWohBAwBCwALAAUgACgCECgCtAEhAyACIAIpA8gDNwPIASACIAIpA8ADNwPAASACKALAAyACQcABaiAEEBlBAnRqKAIAIQUCQCADIARLBEAgBSgCECIDIAMrAyggD6EiEjkDKCADIAMrAyAgEKEiFjkDICADIAMrAxggD6EiFDkDGCADIAMrAxAgEKEiFTkDEEGM2AotAABBAkkNASABELECIAUQISEDIAIgEjkDkAEgAiAWOQOIASACIBQ5A4ABIAIgFTkDeCACIAM2AnAgB0HxqAQgAkHwAGoQMgwBCyAFRQ0AIAUoAhAiAyADKwAYIA+hOQMYIAMgAysAECAQoTkDEEGM2AotAABBAkkNACABELECIAUQISEDIAUoAhAiBSsDECESIAIgBSsDGDkDsAEgAiASOQOoASACIAM2AqABIAdBg6kEIAJBoAFqEDILIARBAWohBAwBCwALAAUgBiAEQQR0aiIDKwMIIRQgAysDACEVIAIgAikD4AM3A2ggAiACKQPYAzcDYCACKALYAyACQeAAaiAEEBlBBXRqIgMrAxghDyADKwMQIRMgAysDCCEXIAMrAwAhGCAAKAIQKAK0ASEFIAIgAikDyAM3A1ggAiACKQPAAzcDUCACKALA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ACsDECEFIAArA2AhBCAAKwNYIQYgACsDGCEHIAIgACsDUDkDGCACIAc5AxAgAiAGIASgOQMgIAIgBTkDCCACIAM2AgBBqPMIKAIAQb2oBCACEDILIAJB8ABqJAALswYCCn8FfCMAQdABayIBJAACQCAAKAJAIgRFDQAgBEEEENYEIQUgAEEwaiIHIQMDQCACIARGBEAgBSAEQQRB8AMQqAFBACECIARBCBDWBCEDA0AgAiAERgRAAn8gACsDCCIMIAArAwBhBEAgASAAKQMoNwOIASABIAApAyA3A4ABIAEgACkDGDcDeCABIAApAxA3A3AgBCADIAFB8ABqEPsLDAELIAArAyAhCyAAKwMoIQ0gASAAKwMQOQOwASABIAArAxg5A7gBIAEgCyANIAugIA0gC6EiCyALoiAMRAAAAAAAABBAoqCfoUQAAAAAAADgP6IiC6E5A8ABIAEgDSALoTkDyAEgASABKQO4ATcDmAEgASABKQPAATcDoAEgASABKQPIATcDqAEgASABKQOwATcDkAEgBCADIAFBkAFqEPsLCyEIQajzCCgCACEJQYzYCi0AAARAIAArAxAhCyAAKwMYIQ0gACsDICEMIAEgACsDKDkDaCABIAw5A2AgASANOQNYIAEgCzkDUCAJQeCoBCABQdAAahAyCyABQUBrIQpBACECA0AgAiAERgRAIAUQGCADEBggCBAYQQAhAgNAIAIgBEYNByAHKAIAIgAoAjxFBEAgABD5CwsgAkEBaiECIABBNGohBwwACwALIAUgAkECdGooAgAiBiAIIAJBBXRqIgApAwA3AxAgBiAAKQMYNwMoIAYgACkDEDcDICAGIAApAwg3AxhBjNgKLQAABEAgAyACQQN0aisDACEPIAArAwAhCyAAKwMIIQ0gACsDECEMIAEgACsDGCIOOQNIIAogDDkDACABIA05AzggASALOQMwIAEgDCAOojkDKCABIA0gDkQAAAAAAADgP6IiDqA5AyAgASALIAxEAAAAAAAA4D+iIgygOQMYIAEgDSAOoTkDECABIAsgDKE5AwggASAPOQMAIAlBivEEIAEQMgsgAkEBaiECDAALAAUgAyACQQN0aiAFIAJBAnRqKAIAKwMAOQMAIAJBAWohAgwBCwALAAUgBSACQQJ0aiADKAIAIgM2AgAgAkEBaiECIANBNGohAwwB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QTAgBygCECgCfCgCAEEBRiIIG0EAIAcoAgBBA3FBAkEDIAgbRxtqKAIoIggoAhAoAoABKAIMRQRAIAVFBEAgACACEIMMIQULIAUgCBCwBwsgBiAHRw0ACyAFRQ0BAkAgASgCECgCgAEoAgwNACAFKAIIEDpBAkgNACAFIAEQsAcLAkAgA0UNACABKAIQKAKAASgCDCAFRw0AIAIgBRCGDAwCCyACIAUQhwwMAQsgByABKAIQKAKAASIIKAIIRg0AIAggCCgCGCIHIAUgBSAHShs2AhgLIAAgBiABEHIhBgwBBQJAIANFDQAgASgCECgCgAEoAgwNACAAIAIQgwwiACABELAHIAIgABCGDAsLCwshAQF/IAEgACAAKAIAIgIbIAIgASACGzYCBCAAIAE2AgALLwEBfyABQQA2AgQCQCAAKAIEIgIEQCACIAE2AgQMAQsgACABNgIACyAAIAE2AgQLRQECfyMAQRBrIgEkAEEBQdAAEEciAkUEQCABQdAANgIAQajzCCgCAEGD5wMgARAfGhAsAAsgAiAANgIIIAFBEGokACACCwkAIABCADcCAAsrAQF/IAAQHCECA0ACQCACRQ0AIAIgARBEEGkNACAAIAIQHSECDAELCyACC94BAgN/AnwgASgCECgCgAEiAigCIAR8IAIrAzAgAisDKEQAAAAAAADgv6KgBUQAAAAAAAAAAAshBSAAIAEQbiECA0AgAgRAIAEgAkEwQQAgAigCAEEDcSIDQQNHG2ooAigiBEYEQCACQVBBACADQQJHG2ooAighBAsCQCAEKAIQKAKAASIDKAIgIAFHDQAgAykDMEKAgICAgICAksAAUg0AIAMgBSADKwMoIgZEAAAAAAAA4D+ioDkDMCAFIAagIQUgAykDEFANACAAIAQQiwwLIAAgAiABEHIhAgwBCwsLrwECA38BfCABKAIQKAKAASICKwMoIAIpAwi6oyEFIAAgARBuIQIDQCACBEAgASACQTBBACACKAIAQQNxIgNBA0cbaigCKCIERgRAIAJBUEEAIANBAkcbaigCKCEECwJAIAQoAhAoAoABIgMoAiAgAUcNACADKwMoRAAAAAAAAAAAYg0AIAMgBSADKQMIuqI5AyggAykDEFANACAAIAQQjAwLIAAgAiABEHIhAgwBCwsLkgECA38BfiABKAIQKAKAASkDAEIB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AFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABCjDCABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAcIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQHSECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEKQMIANBAWohAwwBCwsLoUsDGH8QfAF+IwBBsAFrIggkAEGM2AotAAAEQCAIIAAQITYCcEGo8wgoAgBB/u0DIAhB8ABqEB8aCyAAEBwhAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAdIQIMAQsLQYzYCi0AAEECTwRAIAEoAhAhAiAIIAAQITYCZCAIIAI2AmBBqPMIKAIAQZv2AyAIQeAAahAfGgsgASABKAIQQQFqNgIQIAhB3O0JKAIANgJcQYWnASAIQdwAakEAEOIBIgpBkCZBmAJBARA1GkE4EFIhAiAKKAIQIAI2AowBIAAQOSECIAooAhAgAigCEC8BsAE7AbABIAAgCkHz3AAQuAcgACAKQbHbABC4ByAAIApBnNcBELgHIAhBmAFqIQcgCEGQAWohBiAIQYgBaiEJQQEhDANAIAAoAhAiAigCtAEgDE4EQCACKAK4ASAMQQJ0aigCACIDEJUEIAogAxAhELcHIgQoAhAiAiALNgKIASACIAM2AugBAkACQCABKAIEIgVFBEBE////////738hG0T////////v/yEaDAELRP///////+9/IRtE////////7/8hGiADIAUQRCICLQAARQ0AIAEoAgAgA0cEQCACIAMoAkQgBRBEEExFDQELIAhBADoArAEgCCAJNgJEIAggBjYCSCAIIAc2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAJBl74BIAhBQGsQUUEETgRAIAgrA5gBIRogCCsDkAEhHiAIKwOIASEbIAgrA4ABIRxBoNgKKwMAIh1EAAAAAAAAAABkBEAgHiAdoyEeIBsgHaMhGyAcIB2jIRwgGiAdoyEaCyAEKAIQQQNBAkEBIAgtAKwBIgJBP0YbIAJBIUYbOgCHAQwCCyADECEhBSAIIAI2AjQgCCAFNgIwQZXoAyAIQTBqECoLRP///////+//IR5E////////738hHAsgC0EBaiELIAMQHCECA0AgAgRAIAIoAhAgBDYCuAEgAyACEB0hAgwBCwsgBCgCECICLQCHAQRAIAIoApQBIgIgGiAboEQAAAAAAADgP6I5AwggAiAeIBygRAAAAAAAAOA/ojkDAAsgDEEBaiEMDAELCyAAEBwhAgJ/AkADQCACBEACQCACKAIQIgMoArgBDQACQCADKALoASIERQ0AIAQgACgCECgCjAEoAjBGDQAgAhAhIQEgABAhIQAgCCACKAIQKALoARAhNgIoIAggADYCJCAIIAE2AiBBmPoEIAhBIGoQNwwECyADIAA2AugBIAMtAIYBDQAgCiACECEQtwchAyACKAIQIgQgAzYCuAEgAygCECIDIAs2AogBIAMgBCsDIDkDICADIAQrAyg5AyggAyAEKwNYOQNYIAMgBCsDYDkDYCADIAQrA1A5A1AgAyAEKAIINgIIIAMgBCgCDDYCDCAELQCHASIFBEAgAygClAEiByAEKAKUASIEKwMAOQMAIAcgBCsDCDkDCCADIAU6AIcBCyALQQFqIQsgAygCgAEgAjYCCAsgACACEB0hAgwBCwsgABAcIQ4DQCAOBEAgDigCECgCuAEhAyAAIA4QLSECA0AgAgRAIAMgAkFQQQAgAigCAEEDcUECRxtqKAIoKAIQKAK4ASIERwRAAn8gAyAESQRAIAogAyAEQQBBARBeDAELIAogBCADQQBBARBeCyIHQZ0mQbgBQQEQNRogBygCECIGIAIoAhAiBSsDiAE5A4gBIAYgBSsDgAE5A4ABIAQoAhAoAoABIgQgBCgCBEEBajYCBCADKAIQKAKAASIFIAUoAgRBAWo2AgQgBigCsAFFBEAgBCAEKAIAQQFqNgIAIAUgBSgCAEEBajYCAAsgByACEKIMCyAAIAIQMCECDAELCyAAIA4QHSEODAELCwJAAkAgACgCECgCjAEiAygCACICBEAgAygCBEEBakEQEBohBCAKKAIQKAKMASAENgIAQQAhDgNAIAIoAgAiA0UNAiACKAIEKAIQKAK4ASIFBEAgA0FQQQAgAygCAEEDcSIHQQJHG2ooAiggA0EwQQAgB0EDRxtqKAIoIAAQISEJKAIQKAKIASEHKAIQKAKIASEGIAggAygCAEEEdjYCHCAIIAY2AhggCCAHNgIUIAggCTYCEEGg/gpB6QdBpxggCEEQahCmARogCkGg/goQtwciAygCECALNgKIASALQQFqIQsgDkEBaiEOAn8gAyAFSwRAIAogBSADQQBBARBeDAELIAogAyAFQQBBARBeCyIHQZ0mQbgBQQEQNRogBygCECIGIAIoAgAiCSgCECIMKwOIATkDiAEgBiAMKwOAATkDgAEgByAJEKIMIAMoAhAoAoABIgYgBigCBEEBajYCBCAFKAIQKAKAASIFIAUoAgRBAWo2AgQgBiAGKAIAQQFqNgIAIAUgBSgCAEEBajYCACAEIAM2AgQgAisDCCEaIAQgBzYCACAEIBo5AwggBEEQaiEECyACQRBqIQIMAAsACyAKDQEMAgsgCigCECgCjAEgDjYCBAsCf0EAIQVBACELIwBB0ABrIgQkACAEQgA3A0ggBEIANwNAAkAgChA6QQBOBEAgBCAKEDoiAjYCPCAEQQA2AjggAkEhTwRAIAQgAkEDdiACQQdxQQBHakEBEBo2AjgLIAooAhAoAowBKAIAIglFDQEgBCAKECE2AjAgBEHw/QooAgA2AjQgBEFAayICQewXIARBMGoQjgFBASELIAogAhDTAkEBEJEBIgVBkCZBmAJBARA1GhC9ByECIAUoAhAgAjYCjAEgAiAJNgIAIAIgCigCECgCjAEoAgQ2AgQDQCAJKAIEIgJFDQIgAigCECgCiAEhAiAEIAQpAjg3AyggBEEoaiACEMsCRQRAIAogCSgCBCAFIARBOGoQxwULIAlBEGohCQwACwALQb6YA0H6uQFBxwBB2dkAEAAACyAKEBwhCUEAIQIDQCAJBEAgCSgCECgCiAEhAyAEIAQpAjg3AyACQCAEQSBqIAMQywINACAJKAIQLQCHAUEDRw0AIAVFBEAgBCAKECE2AhAgBEHw/QooAgAgC2o2AhQgBEFAayICQewXIARBEGoQjgEgCiACENMCQQEQkQEiBUGQJkGYAkEBEDUaEL0HIQIgBSgCECACNgKMASALQQFqIQsLIAogCSAFIARBOGoQxwVBASECCyAKIAkQHSEJDAELCyAFBEAgBUEAELIDGgsgChAcIQkDQCAJBEAgCSgCECgCiAEhAyAEIAQpAjg3AwggBEEIaiADEMsCRQRAIAQgChAhNgIAIARB8P0KKAIAIAtqNgIEIARBQGsiA0H1FyAEEI4BIAogAxDTAkEBEJEBIgNBkCZBmAJBARA1GhC9ByEFIAMoAhAgBTYCjAEgCiAJIAMgBEE4ahDHBSADQQAQsgMaIAtBAWohCwsgCiAJEB0hCQwBCwsgBCgCPEEhTwRAIAQoAjgQGAsgBC0AT0H/AUYEQCAEKAJAEBgLQfD9CkHw/QooAgAgC2o2AgAgCEH8AGoiAwRAIAMgCzYCAAsgCEGsAWoiAwRAIAMgAjYCAAsgC0EBakEEEBohAyAKEHghCSADIQIDQCAJBEAgAiAJNgIAIAtBAWshCyACQQRqIQIgCRB3IQkMAQsLIAtFBEAgAkEANgIAIARB0ABqJAAgAwwBC0GbmQNB+rkBQYYBQdnZABAAAAsiCyEWAkADQCAWKAIAIgZFDQEgFkEEaiEWRAAAAAAAAAAAIR1EAAAAAAAAAAAhH0QAAAAAAAAAACEcRAAAAAAAAAAAISAgBigCECgCjAEoAgAhBAJAQcD9CisDACIeRAAAAAAAAPC/YgRAQbj9CisDACEbIB4hGgwBC0HA/QogBhA6t59BsP0KKwMAQbj9CisDACIboqJEAAAAAAAAFECjIho5AwALQaD9CigCACEHQej9CigCACECIAggGzkDkAEgCCAaIAcgAmsiBbeiIAe3ozkDiAFBqP0KKwMAIRogCCAFNgKAASAIIBo5A5gBAkACQEGc/QooAgAiA0EATgRAIAIgA04EQEEAIQVB7P0KIAM2AgAMAgsgAyAHSg0CQez9CiACNgIAIAMgAmshBQwBC0Hs/QogAjYCAAsgCCAFNgKgAQsgBhA6IQcgBigCECgCjAEoAgQhCUEAIQMgBhAcIQJEAAAAAAAAAAAhGgNAIAIEQCACKAIQIgUtAIcBBEAgBSgClAEiBSsDACEbAnwgAwRAIBsgHSAbIB1kGyEdIBsgHyAbIB9jGyEfIAUrAwgiGyAgIBsgIGQbISAgGyAaIBogG2QbDAELIBsiHSEfIAUrAwgiIAshGiADQQFqIQMLIAYgAhAdIQIMAQsLQeD9CiAHIAlrt59EAAAAAAAA8D+gQbj9CisDAKJEAAAAAAAA4D+iRDMzMzMzM/M/oiIbOQMAQdj9CiAbOQMAAnwgA0EBRgRAIBohHCAfDAELRAAAAAAAAAAAIANBAkgNABogICAaoCAdIB+gISICQCAgIBqhRDMzMzMzM/M/oiIcIB0gH6FEMzMzMzMz8z+iIh2iIBsgG0QAAAAAAAAQQKKiIh+jIhpEAAAAAAAA8D9mBEAgHEQAAAAAAADgP6IhGiAdRAAAAAAAAOA/oiEbDAELIBpEAAAAAAAAAABkBEAgHCAanyIaIBqgIhujIRogHSAboyEbDAELIB1EAAAAAAAAAABkBEAgHUQAAAAAAADgP6IhGyAfIB2jRAAAAAAAAOA/oiEaDAELIBshGiAcRAAAAAAAAAAAZEUNACAcRAAAAAAAAOA/oiEaIB8gHKNEAAAAAAAA4D+iIRsLRAAAAAAAAOA/oiEcQeD9CiAaIBogGxCqASIaEFejOQMAQdj9CiAbIBoQS6M5AwAgIkQAAAAAAADgP6ILIR0Cf0HI/QooAgBBAkYEQEGY/QooAgAMAQsQ1AGnCxCdBwJAIAQEQCAEIQIDQCACKAIABEBB2P0KKwMAIRogAisDCBBLIRsgAigCBCgCECIDKAKUASIFIBogG6IgHaA5AwAgBUHg/QorAwAgAisDCBBXoiAcoDkDCCADQQE6AIcBIAJBEGohAgwBCwsgHESamZmZmZm5P6IhHyAdRJqZmZmZmbk/oiEgIAYQHCEFA0AgBUUNAgJAIAUoAhAiAigCgAEoAghFBEAgAigC6AFFDQELIAItAIcBBEAgAigClAEiAiACKwMAIB2hOQMAIAIgAisDCCAcoTkDCAwBC0EAIQdEAAAAAAAAAAAhGiAGIAUQbiECRAAAAAAAAAAAIRsDQCACBEACQCACQVBBACACKAIAQQNxIglBAkcbaigCKCIDIAJBMEEAIAlBA0cbaigCKCIJRg0AIAkgAyADIAVGGygCECIDLQCHAUUNACAHBEAgGyAHtyIhoiADKAKUASIDKwMIoCAHQQFqIge3IiKjIRsgGiAhoiADKwMAoCAioyEaDAELIAMoApQBIgMrAwghGyADKwMAIRpBASEHCyAGIAIgBRByIQIMAQsLAkAgB0ECTgRAIAUoAhAiAigClAEiAyAaOQMADAELIAdBAUYEQCAFKAIQIgIoApQBIgMgGkRcj8L1KFzvP6IgIKA5AwAgG0TNzMzMzMzsP6IgH6AhGwwBCxDVARDVASEbQdj9CisDACEhRBgtRFT7IRlAoiIaEEshIiAFKAIQIgIoApQBIgMgIiAhIBtEzczMzMzM7D+iIhuiojkDAEHg/QorAwAhISAaEFcgGyAhoqIhGwsgAyAbOQMIIAJBAToAhwELIAYgBRAdIQUMAAsACyAGEBwhAiADRQRAA0AgAkUNAkHY/QorAwAhGxDVASEaIAIoAhAoApQBIBsgGiAaoEQAAAAAAADwv6CiOQMAQeD9CisDACEbENUBIRogAigCECgClAEgGyAaIBqgRAAAAAAAAPC/oKI5AwggBiACEB0hAgwACwALA0AgAkUNAQJAIAIoAhAiAy0AhwEEQCADKAKUASIDIAMrAwAgHaE5AwAgAyADKwMIIByhOQMIDAELQdj9CisDACEbENUBIRogAigCECgClAEgGyAaIBqgRAAAAAAAAPC/oKI5AwBB4P0KKwMAIRsQ1QEhGiACKAIQKAKUASAbIBogGqBEAAAAAAAA8L+gojkDCAsgBiACEB0hAgwACwALAkBBkP0KKAIARQRAQez9CigCACEDQQAhBQNAIAMgBUwNAkHA/QorAwBBoP0KKAIAIgIgBWu3oiACt6MiGkQAAAAAAAAAAGVFBEAgBhAcIQIDQCACBEAgAigCECgCgAEiA0IANwMQIANCADcDGCAGIAIQHSECDAELCyAGEBwhAwNAIAMiAgRAA0AgBiACEB0iAgRAIAMgAhCuDAwBCwsgBiADEC0hAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiByADRwRAIAMgByACEK0MCyAGIAIQMCECDAELCyAGIAMQHSEDDAELCyAGIBogBBCsDEHs/QooAgAhAwsgBUEBaiEFDAALAAsgBhA6IQJBhP0KQgA3AgBB/PwKQgA3AgBB9PwKQgA3AgBB9PwKQZDQCkG06wkoAgAQkgE2AgBB+PwKIAIQrww2AgAgBhA6IgJBgP0KKAIAIgNKBEBBhP0KKAIAEBggAiADQQF0IgMgAiADShsiAkEIEBohA0GA/QogAjYCAEGE/QogAzYCAAtB7P0KKAIAIQNBACEHA0AgAyAHTARAQfT8CigCABCZARpB+PwKKAIAIQIDQCACBEAgAigCDCACKAIAEBggAhAYIQIMAQsLQYT9CigCABAYBUHA/QorAwBBoP0KKAIAIgIgB2u3oiACt6MiGkQAAAAAAAAAAGVFBEBB9PwKKAIAIgJBAEHAACACKAIAEQMAGkGI/QpBhP0KKAIANgIAQfz8CkH4/AooAgAiAjYCACACIAIoAgA2AgQgBhAcIQIDQCACBEAgAigCECIDKAKAASIFQgA3AxAgBUIANwMYAn8gAygClAEiAysDCEHQ/QorAwAiG6OcIh+ZRAAAAAAAAOBBYwRAIB+qDAELQYCAgIB4CyEJAn8gAysDACAbo5wiG5lEAAAAAAAA4EFjBEAgG6oMAQtBgICAgHgLIQwjAEEgayIDJAAgAyAJNgIQIAMgDDYCDEH0/AooAgAiBSADQQxqQQEgBSgCABEDACIOKAIIIRBBiP0KQYj9CigCACIFQQhqNgIAIAUgEDYCBCAFIAI2AgAgDiAFNgIIQYzYCi0AAEEDTwRAIAMgAhAhNgIIIAMgCTYCBCADIAw2AgBBqPMIKAIAQdj+AyADEB8aCyADQSBqJAAgBiACEB0hAgwBCwsgBhAcIQMDQCADBEAgBiADEC0hAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiBSADRwRAIAMgBSACEK0MCyAGIAIQMCECDAELCyAGIAMQHSEDDAELC0H0/AooAgAiBUEAQYABIAUoAgARAwAhAgNAIAIEQCAFIAJBCCAFKAIAEQMAIAJB9PwKEKsMIQkhAiAJQQBODQELCyAGIBogBBCsDEHs/QooAgAhAwsgB0EBaiEHDAELCwsCQCAdRAAAAAAAAAAAYSAcRAAAAAAAAAAAYXENACAGEBwhAgNAIAJFDQEgAigCECgClAEiAyAdIAMrAwCgOQMAIAMgHCADKwMIoDkDCCAGIAIQHSECDAALAAsgHkQAAAAAAADwv2EEQEHA/QpCgICAgICAgPi/fzcDAAsgBhAcIQkCQANAAkACQAJAAkAgCSIQBEAgBiAJEB0hCSAQKAIQIgMoAoABIQIgAygC6AEiEkUNASACKAIEIhNFDQMgE0EBakEQEBohFEEAIQMgECgCECgCgAEoAgAiBUEBakEYEBohDyAGIBAQbiECA0AgAgRAIBAgAkFQQQAgAigCAEEDcSIHQQJHG2ooAigiBEYEQCACQTBBACAHQQNHG2ooAighBAsgECgCECgClAEiBysDCCEaIAQoAhAoApQBIgQrAwghGyAHKwMAIRwgBCsDACEdIA8gA0EYbGoiBCACNgIAIAQgGyAaoSIaIB0gHKEiGxCqATkDCCAEIBsgG6IgGiAaoqA5AxAgA0EBaiEDIAYgAiAQEHIhAgwBCwsgAyAFRgRAIA8gBUEYQewDEKgBIAVBAkgNAyAFQQFrIQdBACEEA0AgBCIDIAdODQQgDyADQRhsaisDCCEaIANBAWoiBCECA0ACQCACIAVGBEAgBSECDAELIA8gAkEYbGorAwggGmINACACQQFqIQIMAQsLIAIgBEYNACACIAMgAiADShshBEQAAAAAAAAAACEbIAIgBUcEfCAPIAJBGGxqKwMIBUQYLURU+yEJQAsgGqEgAiADa7ejRDmdUqJG36E/ECkhGgNAIAMgBEYNASAPIANBGGxqIgIgGyACKwMIoDkDCCADQQFqIQMgGiAboCEbDAALAAsAC0GOggFBj7cBQcgEQbUbEAAACyAGEDpBAkgNAyABKAIAIABGBEAgBhDYDBoLQQAhBUEAIQ4jAEEgayIJJAAgBkHz3AAQJiEHQYzYCi0AAARAQa3FA0EIQQFBqPMIKAIAEDsaCwJAIAcEQCAHLQAADQELQarsACEHCwJAIAdBOhDNASICRQ0AIAIgB0cEQCAHLAAAQTBrQQlLDQELIAcQkAIiA0EAIANBAEobIQ4gAkEBaiEHC0GM2AotAAAEQCAJIAc2AgQgCSAONgIAQajzCCgCAEHR+wMgCRAfGgsCQAJAIA5FDQAgBhA6IQwgBhC1AiAJQQhqIAYQ/gJBiP4KIAkpAxgiKjcDAEGA/gogCSkDEDcDAEH4/QogCSkDCDcDACAqp0EBcQRAQfj9CkH4/QorAwBEAAAAAAAAUkCjOQMAQYD+CkGA/gorAwBEAAAAAAAAUkCjOQMACyAGEBwhAwNAIAMEQCADIQIDQCAGIAIQHSICBEAgAyACELwHIAVqIQUMAQUgBiADEB0hAwwDCwALAAsLIAVFDQEgDEEBayAMbLchIbchIiAIKAKgASEEIAgrA5gBIR8gCCsDiAEhICAIKAKAASESIAy3nyEmIAgrA5ABIichHEEAIQwDQAJAIAVFIAwgDk9yRQRAQajQCiASNgIAQbDQCiAcOQMAQZD+CiAgOQMAQZj+CiAENgIAIB9EAAAAAAAAAABkBEBBuNAKIB85AwALICBEAAAAAAAAAABhBEBBkP4KICYgHKJEAAAAAAAAFECjOQMAC0EAIQ8gHCAcokG40AorAwCiIiggIqIiGiAaoCAhoyEpIAQhAgNAIAIgD0wNAkGQ/gorAwBBqNAKKAIAIgIgD2u3oiACt6MiHUQAAAAAAAAAAGUNAiAGEBwhAgNAIAIEQCACKAIQKAKAASIDQgA3AxAgA0IANwMYIAYgAhAdIQIMAQUCQEEAIQUgBhAcIQMDQCADRQRAIAUNAkEAIQUMBwsgBiADEB0hAgNAIAIEQCACKAIQKAKUASINKwMAIAMoAhAoApQBIhErAwChIh4gHqIgDSsDCCARKwMIoSIbIBuioCEaA0AgGkQAAAAAAAAAAGEEQEEFEKcBQQpva7ciHiAeokEFEKcBQQpva7ciGyAboqAhGgwBCwsgAigCECgCgAEiDSAeICggKSADIAIQvAciERsgGqMiGqIiHiANKwMQoDkDECANIBsgGqIiGiANKwMYoDkDGCADKAIQKAKAASINIA0rAxAgHqE5AxAgDSANKwMYIBqhOQMYIAUgEWohBSAGIAIQHSECDAEFIAYgAxAtIQIDQCACRQRAIAYgAxAdIQMMBAsgAyACQVBBACACKAIAQQNxQQJHG2ooAigiERC8B0UEQCARKAIQIg0oApQBIhMrAwAgAygCECIUKAKUASIVKwMAoSEaIA0oAoABIg0gDSsDECAaIBogEysDCCAVKwMIoSIaEEoiGyADEKYMIBEQpgygIh6hIiUgJaIgG0Gw0AorAwAgHqCioyIboiIeoTkDECANIA0rAxggGiAboiIaoTkDGCAUKAKAASINIB4gDSsDEKA5AxAgDSAaIA0rAxigOQMYCyAGIAIQMCECDAALAAsACwALAAsLCyAdIB2iIR4gBhAcIQIDQCACBEAgAigCECIDLQCHAUEDRwRAAkAgHiADKAKAASINKwMQIhsgG6IgDSsDGCIaIBqioCIlZARAIAMoApQBIgMgGyADKwMAoDkDAAwBCyADKAKUASIDIB0gG6IgJZ8iG6MgAysDAKA5AwAgHSAaoiAboyEaCyADIBogAysDCKA5AwgLIAYgAhAdIQIMAQsLIA9BAWohD0GY/gooAgAhAgwACwALIAVFDQMMAgsgDEEBaiEMICcgHKAhHAwACwALIAYgBxDTDBoLIAlBIGokAAwDCyACKAIIDQMgBiAQELcBDAMLIA8oAgAhAkEAIQ4gDyENA0AgAgRAAnwgDSgCGCIHBEAgDSsDIAwBCyAPKwMIRBgtRFT7IRlAoAsgAigCECIFLgGoASERIBAgAkFQQQAgAigCAEEDcSIEQQJHG2ooAigiA0YEQCACQTBBACAEQQNHG2ooAighAwtBASEVIA0rAwgiG6EgEbejRDmdUqJG36E/ECkhGgJAIAMgEEsEQCAOIQQMAQtBfyEVIBFBAWsiAiAOaiEEIBogAreiIBugIRsgGpohGgsgDUEYaiENQQAhAyARQQAgEUEAShshGCAFKAKwASEMA0AgAyAYRwRAIBQgBEEEdGoiFyAMKAIAIgI2AgAgECACQTBBACACKAIAQQNxIhlBA0cbaigCKCIFKAIQKAK4AUcEQCACQVBBACAZQQJHG2ooAighBQsgFyAbOQMIIBcgBTYCBCAMQQRqIQwgA0EBaiEDIBogG6AhGyAEIBVqIQQMAQsLIA4gEWohDiAHIQIMAQsLIA4gE0cNAyASKAIQKAKMASICIBM2AgQgAiAUNgIAIA8QGAsgEiABEKUMDQAgECgCECICIBIoAhAoAowBIgMrAxgiGzkDICADKwMgIRogAiAbRAAAAAAAAFJAokQAAAAAAADgP6IiGzkDYCACIBs5A1ggAiAaOQMoIAIgGkQAAAAAAABSQKI5A1AMAQsLIBANAwwBCwtBzQhBj7cBQb8FQYM4EAAACwJ/AkACQCAIKAJ8IgJBAk8EQAJAIAgoAqwBRQRAQQAhAwwBCyACQQEQGiIDQQE6AAAgCCgCfCECCyABIAM2AiggAiALQQAgAUEUahDeDSEFIAMQGAwBCyACQQFHBEAgACABKAIARiEMQQAhBQwCCyALKAIAEMICQQAhBQsgACABKAIARiEMIAgoAnwiAkUNACALKAIAKAIQIgErAyghHyABKwMgIR4gASsDGCEjIAErAxAhGkEAIAJBAUYNARogHyAFKwMIIhugIR8gHiAFKwMAIhygIR4gIyAboCEjIBogHKAhGiALIQQgBSECA0AgBCgCBCIBBEAgBEEEaiEEIAIrAxAhGyABKAIQIgErAxAhHCABKwMYIR0gASsDICEgIB8gASsDKCACKwMYIiGgECMhHyAeICAgG6AQIyEeICMgHSAhoBApISMgGiAcIBugECkhGiACQRBqIQIMAQVBAAwDCwALAAsgASgCDCECIAAgASgCCEE2QQMQYbchHiAAIAJBJEEDEGG3IR9EAAAAAAAAAAAhGkEBCyEBIAAoAhAiAigCDCIDBH8gHiADKwMYEDEgHiAaoaEiG0QAAAAAAADgP6IiHKAgHiAbRAAAAAAAAAAAZCIDGyEeIBogHKEgGiADGyEaQQAFIAELIAxyRQRAIABB7NgKKAIAQQhBABBhtyEkIAAoAhAhAgsgJCAaoSEcICQgI6EgAisDOKAhHSACKwNYISACQCABDQAgCyEMIAUhAgNAIAwoAgAiBEUNAQJ/IAJFBEAgHSEbIBwhGkEADAELIB0gAisDCKAhGyAcIAIrAwCgIRogAkEQagshASAMQQRqIQwgG0QAAAAAAABSQKMhGyAaRAAAAAAAAFJAoyEaIAQQHCECA0AgAgRAIAIoAhAoApQBIgMgGiADKwMAoDkDACADIBsgAysDCKA5AwggBCACEB0hAgwBBSABIQIMAgsACwALAAsgCigCECgCjAEiAUIANwMIIAFCADcDECABIB4gJCAcoKBEAAAAAAAAUkCjOQMYIAEgHyAgICQgHaCgoEQAAAAAAABSQKM5AyAgBRAYIAoQHCECA0AgAgRAAkAgAigCECIBKALoASIDBEAgAygCECgCjAEiAyABKAKUASIEKwMAIAErAyAiG0QAAAAAAADgP6KhIhw5AwggBCsDCCEdIAErAyghGiADIBsgHKA5AxggAyAdIBpEAAAAAAAA4D+ioSIbOQMQIAMgGiAboDkDIAwBCyABKAKAASgCCCIDRQ0AIAMoAhAoApQBIgMgASgClAEiASsDADkDACADIAErAwg5AwgLIAogAhAdIQIMAQsLIAAoAhAoAowBIgEgCigCECgCjAEiAikDCDcDCCABIAIpAyA3AyAgASACKQMYNwMYIAEgAikDEDcDECALIQIDQCACKAIAIgEEQCABEKEMIAFBkCYQ4QEgAkEEaiECDAELCyAKKAIQKAKMASgCABAYIAoQoQwgCkGQJhDhASAKEBwhAwNAIAMEQCAKIAMQHSAKIAMQLSECA0AgAgRAIAIoAhAoArABEBggAkGdJhDhASAKIAIQMCECDAELCyADKAIQKAKAARAYIAMoAhAoApQBEBggA0GqJhDhASEDDAELCyAKELkBIAsQGEEAQYzYCi0AAEUNARogCCAAECE2AgBBqPMIKAIAQd75AyAIEB8aQQAMAQtBfwsgCEGwAWokAAsOACAAELsHIAAQugcQSgsjACACIAEoAhBGBEAgASACKAIEIgBBACAAIAJHG0EAEMQHCwtIAQJ/IAQhBgNAIAEgA0xFBEAgACAGKAIAIgcgAkEAIAUQyAUgAUEBayEBIAcoAhAoAowBQTBqIQYgByECDAELCyAEIAI2AgALbgEDf0EBIQIDQAJAIAAoAhAiAygCuAEhASACIAMoArQBSg0AIAEgAkECdGooAgAiASgCECgCDBC8ASABKAIQKAKMASIDBEAgAygCABAYIAEoAhAoAowBEBgLIAEQqQwgAkEBaiECDAELCyABEBgL+gECAXwBfwNAIAREAAAAAAAAAABiRQRAQQUQpwFBCm9rtyICIAKiQQUQpwFBCm9rtyIDIAOioCEEDAELCwJ8QZT9CigCAARAQbj9CisDACIFIAWiIAQgBJ+iowwBC0G4/QorAwAiBSAFoiAEowshBAJAIAAoAhAiBigCgAEiACgCCA0AIAYoAugBDQAgASgCECIGKAKAASgCCA0AIAQgBEQAAAAAAAAkQKIgBigC6AEbIQQLIAEoAhAoAoABIgEgAiAEoiICIAErAxCgOQMQIAEgAyAEoiIDIAErAxigOQMYIAAgACsDECACoTkDECAAIAArAxggA6E5AxgLxAEBBH8gACgCBCEFIAAoAgAhBCAAKAIIIgIhAwNAIAIhACADBEADQCAABEAgACADRwRAIAMoAgAgACgCABCuDAsgACgCBCEADAELCyADKAIEIQMMAQsLIAEgBEEBayIAIAVBAWsiAyACEP0CIAEgACAFIAIQ/QIgASAAIAVBAWoiACACEP0CIAEgBCADIAIQ/QIgASAEIAAgAhD9AiABIARBAWoiBCADIAIQ/QIgASAEIAUgAhD9AiABIAQgACACEP0CQQALuQICBHwEfyABIAGiIQYgABAcIQgDQCAIBEAgCCgCECIJLQCHAUECcUUEQAJ8IAYgCSgCgAEiCisDECIFIAWiIAorAxgiBCAEoqAiA2QEQCAEIAkoApQBIgcrAwigIQQgBSAHKwMAoAwBCyAEIAEgA5+jIgOiIAkoApQBIgcrAwigIQQgBSADoiAHKwMAoAshBQJAAkAgAkUNACAFIAWiQdj9CisDACIDIAOioyAEIASiQeD9CisDACIDIAOio6CfIQMCQCAKKAIIDQAgCSgC6AENACAHIAUgA6M5AwAgBCADoyEEDAILIANEAAAAAAAA8D9mRQ0AIAcgBURmZmZmZmbuP6IgA6M5AwAgBERmZmZmZmbuP6IgA6MhBAwBCyAHIAU5AwALIAcgBDkDCAsgACAIEB0hCAwBCwsL/QECBHwCfyABKAIQKAKUASIHKwMAIAAoAhAoApQBIggrAwChIgQgBKIgBysDCCAIKwMIoSIFIAWioCEDA0AgA0QAAAAAAAAAAGJFBEBBBRCnAUEKb2u3IgQgBKJBBRCnAUEKb2u3IgUgBaKgIQMMAQsLIAOfIQMgAigCECICKwOAASEGIAEoAhAoAoABIgEgASsDECAEAnxBlP0KKAIABEAgBiADIAIrA4gBoaIgA6MMAQsgAyAGoiACKwOIAaMLIgOiIgShOQMQIAEgASsDGCAFIAOiIgOhOQMYIAAoAhAoAoABIgAgBCAAKwMQoDkDECAAIAMgACsDGKA5AxgLQgECfCAAIAEgASgCECgClAEiASsDACAAKAIQKAKUASIAKwMAoSICIAErAwggACsDCKEiAyACIAKiIAMgA6KgEKoMCzQBAn9BAUEQEBoiAUEANgIMIAEgAEEUEBoiAjYCACABIAI2AgQgASACIABBFGxqNgIIIAELrwICB38BfSADIAFBAnRqKAIAIgkoAhAiBUEBOgC0ASAFQQE2ArABQwAAgL9DAACAPyACQQNGGyELIAAgAUEUbGohCEEBIQUDQCAFIAgoAgBPRQRAAkAgBUECdCIEIAgoAhBqIgYqAgBDAACAP1sNACADIAgoAgQgBGooAgAiB0ECdGooAgAoAhAiBC0AtAEEQCAGIAs4AgBBASEEQQEgACAHQRRsaiIHKAIAIgYgBkEBTRshBgJAA0AgBCAGRwRAIARBAnQiCiAHKAIEaigCACABRg0CIARBAWohBAwBCwtBjTBB+7cBQb4FQbObARAAAAsgBygCECAKakGAgID8ezYCAAwBCyAEKAKwAQ0AIAAgByACIAMQsAwLIAVBAWohBQwBCwsgCSgCEEEAOgC0AQvoCQEgfyAAELUCQfibCkG06wkoAgAQkgEhEiAEQQJHBEAgAEECQbnmAEEAECJBAEchE0Hk2QooAgBBAEchDQsgAUEUEBohDiABQQQQGiEQQQF0IAFqIhFBBBAaIQggA0F+cSIYQQJGIBNyIhoEQCARQQQQGiEHCyANBEAgEUEEEBohCQsgGEECRyIbRQRAIBFBBBAaIQ8LQQRBACANGyEeQQRBACAaGyEfIBhBAkYiIEECdCEhIAAQHCEKAkACQANAIAoEQCASQQBBwAAgEigCABEDABogCigCECgCiAEgFEcNAiAQIBRBAnRqIAo2AgAgDiAUQRRsaiIWIA9BACAgGzYCECAWIAlBACANGyIiNgIMIBYgB0EAIBobIiM2AgggFiAINgIEIA8gIWohDyAJIB5qIQkgByAfaiEHIAhBBGohC0EBIRcgACAKEG4hBEEBIRkDQCAEBEACQCAEIARBMGsiHCAEKAIAQQNxIgZBAkYiFRsoAiggBCAEQTBqIiQgBkEDRiIGGygCKEYNACAEQQBBMCAGG2ooAigoAhAoAogBIgwgBEEAQVAgFRtqKAIoKAIQKAKIASIVIAwgFUgbISUjAEEgayIGJAAgBiAXNgIcIAYgDCAVIAwgFUobNgIYIAYgJTYCFCASIAZBDGpBASASKAIAEQMAKAIQIQwgBkEgaiQAIBcgDCIGRwRAIA0EQCAiIAZBAnRqIgwgBCgCECsDgAEgDCoCALugtjgCAAsgE0UNASAjIAZBAnRqIgYgBioCALsgBCgCECsDiAEQI7Y4AgAMAQsgCyAKIAQgJCAEKAIAQQNxIgZBA0YbKAIoIgxGBH8gBCAcIAZBAkYbKAIoBSAMCygCECgCiAE2AgAgDQRAIAkgBCgCECsDgAG2OAIAIAlBBGohCQsCQAJAIBNFBEAgGw0CIAdBgICA/AM2AgAgB0EEaiEHDAELIAcgBCgCECsDiAG2OAIAIAdBBGohByAbDQELIA8CfSAEQcw3ECYiBgRAQwAAAAAgBkGhlgEQwwINARoLQwAAgD9DAACAvyAKIAQgHCAEKAIAQQNxQQJGGygCKEYbCzgCACAPQQRqIQ8LIAtBBGohCyAXQQFqIRcgHUEBaiEdIBlBAWohGQsgACAEIAoQciEEDAELCyAWIBk2AgAgCCAUNgIAIBRBAWohFCAAIAoQHSEKIAshCAwBCwsgGEECRw0BQQAhCEEAIQQDQCABIAhGBEADQCABIARGDQQgECAEQQJ0aigCACgCECgCsAFFBEAgDiAEIAMgEBCwDAsgBEEBaiEEDAALAAUgECAIQQJ0aigCACgCECILQQA6ALQBIAtBADYCsAEgCEEBaiEIDAELAAsAC0HP9gBB+7cBQZQGQbjAARAAAAsCQCAAELUCIB1BAm0iC0YNACAOKAIEIBEgC0EBdCABaiIAQQQQ8wEhCCATBEAgDigCCCARIABBBBDzASEHCyANBEAgDigCDCARIABBBBDzASEJC0EAIQQDQCABIARGDQEgDiAEQRRsaiIAIAg2AgQgACgCAEECdCEDIBMEQCAAIAc2AgggAyAHaiEHCyANBEAgACAJNgIMIAMgCWohCQsgAyAIaiEIIARBAWohBAwACwALIAIgCzYCAAJAIAUEQCAFIBA2AgAMAQsgEBAYCyASENwCIA4LTQEDfyAAKAIQIgIgAigCtAEiBEEBaiIDNgK0ASACKAK4ASADIARBAmpBBBDzASECIAAoAhAgAjYCuAEgAiADQQJ0aiABNgIAIAEQlQQLlwcCCH8CfCAAQQIQiQIgACAAQQBBsOYAQQAQIkECQQIQYSEBIAAgAEEAQfvsAEEAECIgAUECEGEhAyAAEDkoAhAgAzsBsAEgACgCSCgCECIIQQogCC8BsAEiAyADQQpPGyIDOwGwAUG82AogAzsBACAIIAEgAyABIANIGzsBsgEgABA6IQhB6PwKIABBAUG6K0EAECI2AgAgAEEBQePkAEEAECIhAyAAEBwhAQNAIAEEQCABELQEQej8CigCACEEIwBB0ABrIgIkAAJAIARFDQAgASgCECgClAEhByABIAQQRCIFLQAARQ0AIAJBADoATwJAQbzYCi8BAEEDSQ0AIAIgBzYCMCACIAdBEGo2AjggAiAHQQhqNgI0IAIgAkHPAGo2AjwgBUGbvgEgAkEwahBRQQNIDQAgASgCEEEBOgCHAUG82AovAQAhBQJAQaDYCisDAEQAAAAAAAAAAGRFDQBBACEGA0AgBSAGRg0BIAcgBkEDdGoiBCAEKwMAQaDYCisDAKM5AwAgBkEBaiEGDAALAAsgBUEETwRAIAEgCEEDEP4HCyACLQBPQSFHBEAgA0UNAiABIAMQRBBpRQ0CCyABKAIQQQM6AIcBDAELIAIgBzYCICACIAdBCGo2AiQgAiACQc8AajYCKCAFQZ++ASACQSBqEFFBAk4EQCABKAIQQQE6AIcBQbzYCi8BACEFAkBBoNgKKwMARAAAAAAAAAAAZEUNAEEAIQYDQCAFIAZGDQEgByAGQQN0aiIEIAQrAwBBoNgKKwMAozkDACAGQQFqIQYMAAsACwJAIAVBA0kNAAJAQdjZCigCACIERQ0AIAEgBBBEIgRFDQAgAiACQUBrNgIAIARB7YMBIAIQUUEBRw0AIAcgAisDQCIKQaDYCisDACIJoyAKIAlEAAAAAAAAAABkGzkDECABIAhBAxD+BwwBCyABIAgQ/QcLIAItAE9BIUcEQCADRQ0CIAEgAxBEEGlFDQILIAEoAhBBAzoAhwEMAQsgARAhIQQgAiAFNgIUIAIgBDYCEEHA6AMgAkEQahA3CyACQdAAaiQAIAAgARAdIQEMAQsLIAAQHCEDA0AgAwRAIAAgAxAtIQEDQCABBEAgAUGdJkG4AUEBEDUaIAEQmAMgAUHk2QooAgBEAAAAAAAA8D9EAAAAAAAA8D8QTyEJIAEoAhAgCTkDgAEgACABEDAhAQwBCwsgACADEB0hAwwBCwsLzQECBH8EfCMAQRBrIgMkACADQQE2AgwCQCAAIAIgA0EMahDCByIEQQJGDQBB6PwKKAIARQ0AQfeKBEEAECoLAkAgBEEBRw0ARBgtRFT7IRlAIAG3IgijIQkgABAcIQIDQCACRQ0BIAcQVyEKIAIoAhAiBSgClAEiBiAKIAiiOQMIIAYgBxBLIAiiOQMAIAVBAToAhwFBvNgKLwEAQQNPBEAgAiABEP0HCyAJIAegIQcgACACEB0hAgwACwALIAMoAgwQnQcgA0EQaiQAIAQLmwICAn8CfCMAQdAAayIEJAACQAJAIAAQxAFFDQAgACADEEQgBCAEQcgAajYCDCAEIARBQGs2AgggBCAEQThqNgIEIAQgBEEwajYCAEHRgwEgBBBRQQRHDQAgBCsDOCIGIAQrA0giB2QEQCAEIAY5A0ggBCAHOQM4CyAEIAQpA0g3AyggBCAEQUBrKQMANwMgIAQgBCkDODcDGCAEIAQpAzA3AxAgAEGQJkGYAkEBEDUaIAAoAhAiBSAEKQMQNwMQIAUgBCkDKDcDKCAFIAQpAyA3AyAgBSAEKQMYNwMYIAEgABCyDCAAIAIgAxC2DAwBCyAAEHghAANAIABFDQEgACABIAIgAxC1DCAAEHchAAwACwALIARB0ABqJAALpQECAn8CfCMAQSBrIgQkAAJAIAFFDQAgACgCECgCDEUNACAAIAEQRCAEIARBEGo2AgQgBCAEQRhqNgIAQdmDASAEEFFBAkcNACAEKwMYIQUgBCsDECEGIAAoAhAoAgwiA0EBOgBRIAMgBjkDQCADIAU5AzgLAkAgAkUNACAAEHghAwNAIANFDQEgAyAAIAEgAhC1DCADEHchAwwACwALIARBIGokAAusAwIHfwN8IAJBACACQQBKGyELAkAgBEECRgRAA0AgAyAFRg0CIAEgBUEEdGoiBigCACEHQQAhBANAIAQgB0YEQCAFQQFqIQUMAgUgBSAEQQJ0IgggBigCBGooAgAiCUgEQEQAAAAAAAAAACENQQAhAgNAIAIgC0ZFBEAgACACQQJ0aigCACIKIAVBA3RqKwMAIAogCUEDdGorAwChIg4gDqIgDaAhDSACQQFqIQIMAQsLIAwgBigCCCAIaigCALciDCANn6EiDSANoiAMIAyio6AhDAsgBEEBaiEEDAELAAsACwALA0AgAyAFRg0BIAEgBUEEdGoiBigCACEHQQAhBANAIAQgB0YEQCAFQQFqIQUMAgUgBSAEQQJ0IgggBigCBGooAgAiCUgEQEQAAAAAAAAAACENQQAhAgNAIAIgC0ZFBEAgACACQQJ0aigCACIKIAVBA3RqKwMAIAogCUEDdGorAwChIg4gDqIgDaAhDSACQQFqIQIMAQsLIAwgBigCCCAIaigCALciDCANn6EiDSANoiAMo6AhDAsgBEEBaiEEDAELAAsACwALIAwLugMCBn8CfCMAQTBrIgMkACAAKAIAIQICQAJAAkAgAAJ/IAAoAgQiBCAAKAIIRwRAIAQMAQsgBEH/////AE8NASAEQQF0IgVBgICAgAFPDQICQCAFRQRAIAIQGEEAIQIMAQsgAiAEQQV0IgYQZiICRQ0EIAYgBEEEdCIHTQ0AIAIgB2pBACAHEDYaCyAAIAU2AgggACACNgIAIAAoAgQLQQFqNgIEIAIgBEEEdGoiBSABKQMINwMIIAUgASkDADcDAANAAkAgBEUNACAAKAIAIgIgBEEEdCIBaisDCCIIIAIgBEEBdiIEQQR0IgVqKwMIIgljRQRAIAggCWINARCnAUEBcUUNASAAKAIAIQILIAMgASACaiIBKQMANwMgIAMgASkDCDcDKCABIAIgBWoiAikDADcDACABIAIpAwg3AwggACgCACAFaiIBIAMpAyA3AwAgASADKQMoNwMIDAELCyADQTBqJAAPC0GgvQNBz/wAQc0AQe2yARAAAAsgA0EQNgIEIAMgBTYCAEGo8wgoAgBBtOcDIAMQHxoQLAALIAMgBjYCEEGo8wgoAgBBg+cDIANBEGoQHxoQLAALmAICBH8CfCMAQRBrIgUkAANAIAFBAXQiAkEBciEDAkACQCACIAAoAgRPDQAgACgCACIEIAJBBHRqKwMIIgYgBCABQQR0aisDCCIHYw0BIAYgB2INABCnAUEBcQ0BCyABIQILAkAgAyAAKAIETw0AIAAoAgAiBCADQQR0aisDCCIGIAQgAkEEdGorAwgiB2NFBEAgBiAHYg0BEKcBQQFxRQ0BCyADIQILIAEgAkcEQCAFIAAoAgAiBCACQQR0aiIDKQMANwMAIAUgAykDCDcDCCADIAQgAUEEdCIBaiIEKQMANwMAIAMgBCkDCDcDCCAAKAIAIAFqIgEgBSkDADcDACABIAUpAwg3AwggAiEBDAELCyAFQRBqJAALEwBB5NoKKAIAGkHk2gpBADYCAAv7CwMQfwJ8AX5BjNgKLQAABEBB6+8AQRlBAUGo8wgoAgAQOxoLIABBACAAQQBKGyEHA0AgAyAHRwRAIAEgA0ECdGohBkEAIQREAAAAAAAAAAAhEwNAIAAgBEcEQCADIARHBEAgEyAGKAIAIARBA3RqKwMAoCETCyAEQQFqIQQMAQsLIAYoAgAgA0EDdGogE5o5AwAgA0EBaiEDDAELCyAAQQFrIQNBACEEQQAhBiMAQSBrIgskAAJAAn9B1PwKKAIAIgAEQCAAEIYDC0HU/AogAyADRAAAAAAAAAAAEIcDNgIAQdj8CigCABAYQdj8CiADQQQQGjYCAEHc/AooAgAQGEHc/AogA0EIEBoiCjYCACADQQAgA0EAShshCEHY/AooAgAhB0HU/AooAgAhCQJAAkADQCAEIAhGDQEgCSAEQQJ0IgVqIQwgASAFaiEORAAAAAAAAAAAIRNBACEAA0AgACADRwRAIABBA3QiDyAMKAIAaiAOKAIAIA9qKwMAIhQ5AwAgAEEBaiEAIBMgFJkQIyETDAELCyATRAAAAAAAAAAAZARAIAogBEEDdGpEAAAAAAAA8D8gE6M5AwAgBSAHaiAENgIAIARBAWohBAwBCwsgCiAEQQN0akIANwMADAELQQAhASADQQFrIghBACAIQQBKGyEMQQAhBANAAkBEAAAAAAAAAAAhEyAMIAEiAEYNAANAIAAgA0gEQCAJIAcgAEECdGooAgAiBUECdGooAgAgAUEDdGorAwCZIAogBUEDdGorAwCiIhQgEyATIBRjIgUbIRMgACAEIAUbIQQgAEEBaiEADAELCyATRAAAAAAAAAAAZQ0CIAEgBEcEQCAHIAFBAnRqIgAoAgAhBSAAIAcgBEECdGoiACgCADYCACAAIAU2AgALIAkgByABQQJ0aigCAEECdGooAgAiDiABQQN0Ig9qKwMAIRMgAUEBaiIBIQUDQCADIAVMDQIgCSAHIAVBAnRqKAIAQQJ0aigCACIQIA9qIgAgACsDACAToyIUOQMAIBSaIRQgASEAA0AgACADSARAIBAgAEEDdCIRaiISIBQgDiARaisDAKIgEisDAKA5AwAgAEEBaiEADAELCyAFQQFqIQUMAAsACwsgCSAHIAhBAnRqKAIAQQJ0aigCACAIQQN0aisDAEQAAAAAAAAAAGIMAQtBAAtFDQACQCADQYCAgIACSQRAQQAgAyADQQgQRyIEGw0BA0BBACEAIAMgBkcEQANAIAAgA0cEQCAEIABBA3RqQgA3AwAgAEEBaiEADAELCyAEIAZBA3RqQoCAgICAgID4PzcDACACIAZBAnRqKAIAIQdBACEBIANBACADQQBKGyEKQdj8CigCACEFQdT8CigCACEJA38gASAKRgR/IAMFIAkgBSABQQJ0aigCACIIQQJ0aiENRAAAAAAAAAAAIRNBACEAA0AgACABRwRAIABBA3QiDCANKAIAaisDACAHIAxqKwMAoiAToCETIABBAWohAAwBCwsgByABQQN0aiAEIAhBA3RqKwMAIBOhOQMAIAFBAWohAQwBCwshAANAAkACQCAAQQBKBEAgBSAAQQFrIgFBAnRqIQpEAAAAAAAAAAAhEwNAIAAgA04NAiAAQQN0IgggCSAKKAIAQQJ0aigCAGorAwAgByAIaisDAKIgE6AhEyAAQQFqIQAMAAsACwwBCyAHIAFBA3QiAGoiCCAIKwMAIBOhIAkgCigCAEECdGooAgAgAGorAwCjOQMAIAEhAAwBCwsgBkEBaiEGDAELCyAEEBhBACEGQQEhDQNAIAMgBkYNAyACIAZBAnRqIQFBACEAA0AgACAGRwRAIAEoAgAgAEEDdGoiBCkDACEVIAQgAiAAQQJ0aigCACAGQQN0aiIEKwMAOQMAIAQgFTcDACAAQQFqIQAMAQsLIAZBAWohBgwACwALIAtBCDYCBCALIAM2AgBBqPMIKAIAQbTnAyALEB8aECwACyALIANBA3Q2AhBBqPMIKAIAQYPnAyALQRBqEB8aECwACyALQSBqJAAgDQsgACAABEAgACgCBBAYIAAoAggQGCAAKAIQEBggABAYCwvYAQIDfwJ8IwBBEGsiBCQAIAAoAhAiAiACKwMgIAErAwAiBqE5AyAgASsDCCEFIAIgAisDECAGoTkDECACIAIrAyggBaE5AyggAiACKwMYIAWhOQMYAkAgAigCDCIDRQ0AIAMtAFFBAUcNACADIAMrAzggBqE5AzggAyADKwNAIAWhOQNAC0EBIQMDQCADIAIoArQBSkUEQCACKAK4ASADQQJ0aigCACAEIAEpAwg3AwggBCABKQMANwMAIAQQvQwgA0EBaiEDIAAoAhAhAgwBCwsgBEEQaiQAC6ABAgN/AnwjAEEQayIDJABBASEEA0AgBCAAKAIQIgIoArQBSkUEQCACKAK4ASAEQQJ0aigCACADIAEpAwg3AwggAyABKQMANwMAIAMQvgwgBEEBaiEEDAELCyACIAIrAyAgASsDACIGoTkDICABKwMIIQUgAiACKwMQIAahOQMQIAIgAisDKCAFoTkDKCACIAIrAxggBaE5AxggA0EQaiQAC6gBAQJ/IAAoAhAiAyABIAMrAyCiOQMgIAMgAiADKwMoojkDKCADIAEgAysDEKI5AxAgAyACIAMrAxiiOQMYAkAgAygCDCIERQ0AIAQtAFFBAUcNACAEIAEgBCsDOKI5AzggBCACIAQrA0CiOQNAC0EBIQQDQCAEIAMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQvwwgBEEBaiEEIAAoAhAhAwwBCwsLogUCCn8EfCMAQSBrIgMkACADIAAoAhAiASkDGDcDGCADIAEpAxA3AxAgAysDECILRAAAAAAAAFJAoyENIAMrAxgiDEQAAAAAAABSQKMhDiAAEBwhAgNAIAIEQCACKAIQIgQoApQBIgEgASsDACANoTkDACABIAErAwggDqE5AwgCQCAEKAJ8IgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALIAAgAhAdIQIMAQsLIAAQHCEEA0AgBARAIAAgBBAtIQUDQAJAIAUEQCAFKAIQIgYoAggiAUUNASABKAIEIQkgASgCACEBQQAhBwNAIAcgCUYEQAJAIAYoAmAiAUUNACABLQBRQQFHDQAgASABKwM4IAuhOQM4IAEgASsDQCAMoTkDQAsCQCAGKAJsIgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALAkAgBigCZCIBRQ0AIAEtAFFBAUcNACABIAErAzggC6E5AzggASABKwNAIAyhOQNACyAGKAJoIgFFDQMgAS0AUUEBRw0DIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0AMAwsgASgCBCEKIAEoAgAhAkEAIQgDQCAIIApGBEAgASgCCARAIAEgASsDECALoTkDECABIAErAxggDKE5AxgLIAEoAgwEQCABIAErAyAgC6E5AyAgASABKwMoIAyhOQMoCyAHQQFqIQcgAUEwaiEBDAIFIAIgAisDACALoTkDACACIAIrAwggDKE5AwggCEEBaiEIIAJBEGohAgwBCwALAAsACyAAIAQQHSEEDAMLIAAgBRAwIQUMAAsACwsgAyADKQMYNwMIIAMgAykDEDcDACAAIAMQvQwgA0EgaiQAC+UHAgd/BnwjAEHgAGsiBiQAIAZBCGohAyMAQSBrIgUkAAJAIAAiB0Gw2wAQJiIABEAgACADRAAAAAAAAPA/RAAAAAAAAAAAEMwFDQELIAdBsdsAECYiAARAIAAgA0QAAAAAAAD0P0SamZmZmZkJQBDMBQ0BCyADQQE6ABAgA0Kas+bMmbPmhMAANwMAIANCmrPmzJmz5oTAADcDCAtBjNgKLQAABEAgAy0AECEAIAMrAwAhCiAFIAMrAwg5AxAgBSAKOQMIIAUgADYCAEGo8wgoAgBBsvAEIAUQMgsgBUEgaiQAIAcQHCEFA0AgBQRAIAcgBRAtIQQDQCAEBEAjAEEwayIDJAAgBCgCECIALQAvQQFGBEAgA0EIaiIIIARBMEEAIAQoAgBBA3EiCUEDRxtqKAIoIARBUEEAIAlBAkcbaigCKCAAQRBqIgAQ9wQgACAIQSgQIBogBCgCECEACyAALQBXQQFGBEAgA0EIaiIIIARBUEEAIAQoAgBBA3EiCUECRxtqKAIoIARBMEEAIAlBA0cbaigCKCAAQThqIgAQ9wQgACAIQSgQIBoLIANBMGokACAHIAQQMCEEDAELCyAHIAUQHSEFDAELC0HszwpBtOsJKAIAEJIBIQkgBxAcIQgDQCAIBEAgByAIEC0hBANAAkACQAJAIAQEQAJAQZjYCigCAEECSA0AIAQoAhAiACgCCEUNACAAIAAvAagBQQFqOwGoAQwECyAEQTBBACAEKAIAQQNxIgNBA0cbaigCKCIAIARBUEEAIANBAkcbaigCKCIFSQRAIAQoAhAiAysDQCENIAMrAzghDiADKwMYIQogAysDECELIAAhAwwDCyAEKAIQIQMgACAFSwRAIAMrA0AhCiADKwM4IQsgAysDGCENIAMrAxAhDiAFIQMgACEFDAMLIAMrAxghDCADKwNAIQogAysDECIPIAMrAzgiC2MNASALIA9jRQRAIAogDGQNAiAKIAwgCiAMYyIDGyEKIAsgDyADGyELCyAAIgMhBSAPIQ4gDCENDAILIAcgCBAdIQgMBQsgACIDIQUgCyEOIAohDSAPIQsgDCEKCyAGIA05A1AgBiAOOQNIIAYgBTYCQCAGIAo5AzggBiALOQMwIAYgAzYCKCAGIAQ2AlggCSAGQSBqQQEgCSgCABEDACgCOCIAIARGDQAgACgCECIAIAAvAagBQQFqOwGoASAEKAIQIAAoArABNgKwASAAIAQ2ArABCyAHIAQQMCEEDAALAAsLIAkQmQEaQQEhBCAHIAZBCGogAiABEQMARQRAQcDYCkEBNgIAQQAhBAsgBkHgAGokACAEC/gGAg1/AX4jAEGgAWsiBCQAIAQgACgCECkDkAEiETcDmAEgBCARpyIFKQMINwOIASAEIAUpAwA3A4ABIAQgBSARQiCIp0EEdGpBEGsiBSkDCDcDeCAEIAUpAwA3A3ACQCADRQRAIAJBACACQQBKGyEIQal3IQVBqXchBgwBC0EAIQMgAkEAIAJBAEobIQhBqXchBUGpdyEGA0AgAyAIRg0BIAVBqXdGBEAgASADQQJ0aigCACkCACERIARBQGsgBCkDiAE3AwAgBCARNwNIIAQgBCkDgAE3AzggA0GpdyAEQcgAaiAEQThqELcEGyEFCyAGQal3RgRAIAEgA0ECdGooAgApAgAhESAEIAQpA3g3AyggBCARNwMwIAQgBCkDcDcDICADQal3IARBMGogBEEgahC3BBshBgsgA0EBaiEDDAALAAtBACEDA0AgAyAIRwRAIAMgBUYgAyAGRnJFBEAgASADQQJ0aigCACgCBCAHaiEHCyADQQFqIQMMAQsLIAdBIBAaIQlBACECA0AgAiAIRwRAAkAgAiAFRiACIAZGcg0AQQAhAyABIAJBAnRqKAIAIg4oAgQiDUEAIA1BAEobIQ8DQCADIA9GDQEgCSAKQQV0aiILIA4oAgAiDCADQQR0aiIQKQMANwMAIAsgECkDCDcDCCALIAwgA0EBaiIDQQAgAyANSBtBBHRqIgwpAwA3AxAgCyAMKQMINwMYIApBAWohCgwACwALIAJBAWohAgwBCwsgByAKRgRAIARCADcDaCAEQgA3A2AgBEIANwNYIARCADcDUCAEIAQpA5gBNwMYAkAgCSAHIARBGGogBEHQAGogBEGQAWoQrghBAEgEQCAAQTBBACAAKAIAQQNxQQNHG2ooAigQISEBIAQgAEFQQQAgACgCAEEDcUECRxtqKAIoECE2AgQgBCABNgIAQeTrBCAEEDcMAQtBjNgKLQAAQQJPBEAgAEEwQQAgACgCAEEDcUEDRxtqKAIoECEhASAEIABBUEEAIAAoAgBBA3FBAkcbaigCKBAhNgIUIAQgATYCEEGo8wgoAgBBxe8DIARBEGoQHxoLIAAgAEFQQQAgACgCAEEDcUECRxtqKAIoIAQoApABIAQoApQBQYTQChCTASAJEBggABCbAwsgBEGgAWokAA8LQdXrAEGTuQFBygBB+CkQAAALhA8CEX8CfCMAQUBqIgUkACABQTBBACABKAIAQQNxIgZBA0cbaigCKCgCECITKwAQIRYgASgCECISKwAQIRUgBSASKwAYIBMrABigOQM4IAUgFSAWoDkDMCABQVBBACAGQQJHG2ooAigoAhAiFCsAECEWIBIrADghFSAFIBIrAEAgFCsAGKA5AyggBSAVIBagOQMgQal3IQFBqXchBiADBEAgFCgCsAIhBiATKAKwAiEBCyAFIAUpAzg3AxggBSAFKQMoNwMIIAUgBSkDMDcDECAFIAUpAyA3AwAgACESIwBB4ABrIgckACAHIAUpAxg3A1ggByAFKQMQNwNQIAIgASAHQdAAahDQDCETIAcgBSkDCDcDSCAHIAUpAwA3A0AgAiAGIAdBQGsQ0AwhFCAHIAUpAxg3AzggByAFKQMQNwMwIAcgBSkDCDcDKCAHIAUpAwA3AyAjAEEgayIIJAAgAiIPKAIEIRAgCCAHKQM4NwMYIAggBykDMDcDECAIIAcpAyg3AwggCCAHKQMgNwMAQQAhAiMAQcABayIEJAACfwJ/AkAgAUEASARAQQAgBkEASA0DGiAPKAIMIAZBAnRqIQoMAQsgBkEASARAIA8oAgwgAUECdGohCgwBCyAPKAIMIQAgASAGTQRAIAAgBkECdGohCiAAIAFBAnRqIgAoAgQhCSAAKAIADAILIAAgAUECdGohCiAAIAZBAnRqIgAoAgQhCSAAKAIADAELQQALIQ4gCigCBCECIAooAgALIREgDygCECENIA8oAgghCyAPKAIEIQZBACEKIA5BACAOQQBKGyEDAkADQAJAIAMgCkYEQCARIAkgCSARSBshAwNAIAMgCUYEQCACIAYgAiAGShshAwNAIAIgA0YiDg0GIA0gAkECdGooAgAhASAEIAgpAxg3AzggBCAIKQMQNwMwIAQgCCkDCDcDKCAEIAgpAwA3AyAgBCALIAJBBHRqIgApAwg3AxggBCAAKQMANwMQIAQgCyABQQR0aiIAKQMINwMIIAQgACkDADcDACACQQFqIQIgBEEwaiAEQSBqIARBEGogBBC2BEUNAAsMBQsgDSAJQQJ0aigCACEBIAQgCCkDGDcDeCAEIAgpAxA3A3AgBCAIKQMINwNoIAQgCCkDADcDYCAEIAsgCUEEdGoiACkDCDcDWCAEIAApAwA3A1AgBCALIAFBBHRqIgApAwg3A0ggBCAAKQMANwNAIAlBAWohCSAEQfAAaiAEQeAAaiAEQdAAaiAEQUBrELYERQ0ACwwBCyANIApBAnRqKAIAIQEgBCAIKQMYNwO4ASAEIAgpAxA3A7ABIAQgCCkDCDcDqAEgBCAIKQMANwOgASAEIAsgCkEEdGoiACkDCDcDmAEgBCAAKQMANwOQASAEIAsgAUEEdGoiACkDCDcDiAEgBCAAKQMANwOAASAKQQFqIQogBEGwAWogBEGgAWogBEGQAWogBEGAAWoQtgRFDQELC0EAIQ4LIARBwAFqJAACQCAOBEAgEEECakEEEBoiCSAQQQJ0aiAQQQFqIgA2AgAgCSAAQQJ0akF/NgIADAELIA8oAhgiCiAQQQJ0aiAUNgIAIAogEEEBaiIAQQJ0aiATNgIAIBBBAmoiAUEAIAFBAEobIQ4gAUEEEBohCSAQQQNqQQgQGiILQQhqIQQDQCAMIA5HBEAgCSAMQQJ0akF/NgIAIAQgDEEDdGpCgICA/v///+9BNwMAIAxBAWohDAwBCwsgC0KAgICAgICA8EE3AwADQCAAIBBHBEAgBCAAQQN0IhFqIg1EAAAAAAAAAAAgDSsDACIVmiAVRAAAwP///9/BYRs5AwAgCiAAQQJ0aiEGQX8hAkEAIQwDQCAMIA5GBEAgAiEADAMFIAQgDEEDdCIDaiIBKwMAIhZEAAAAAAAAAABjBEACQAJ/IAAgDE4EQCAGKAIAIANqDAELIAogDEECdGooAgAgEWoLKwMAIhVEAAAAAAAAAABhDQAgFiAVIA0rAwCgmiIVY0UNACABIBU5AwAgCSAMQQJ0aiAANgIAIBUhFgsgDCACIBYgBCACQQN0aisDAGQbIQILIAxBAWohDAwBCwALAAsLIAsQGAsgCEEgaiQAIAkhDSAPKAIEIgFBAWohEUEBIQAgASEGA0AgACIDQQFqIQAgDSAGQQJ0aigCACIGIBFHDQALAkACQAJAIABBgICAgAFJBEBBACAAIABBEBBHIgYbDQEgBiADQQR0aiICIAUpAwA3AwAgAiAFKQMINwMIA0AgBiADQQFrIgNBBHRqIQsgESANIAFBAnRqKAIAIgFHBEAgCyAPKAIIIAFBBHRqIgIpAwA3AwAgCyACKQMINwMIDAELCyALIAUpAxA3AwAgCyAFKQMYNwMIIAMNAiATEBggFBAYIBIgBjYCACASIAA2AgQgDRAYIAdB4ABqJAAMAwsgB0EQNgIEIAcgADYCAEGo8wgoAgBBtOcDIAcQHxoQLAALIAcgAEEEdDYCEEGo8wgoAgBBg+cDIAdBEGoQHxoQLAALQc2ZA0GJtwFB+wBBjvgAEAAACyAFQUBrJAALggEBAXwCQCAAIAIrAwAiA2IEQCABIAOiIgGaIAEgAisDCEQAAAAAAAAAAGYbIAAgACAAoiADIAOioZ+ioyIAvUL///////////8Ag0KAgICAgICA+P8AWg0BIAAPC0GmrgNBk7kBQY8CQdOVARAAAAtB97gDQZO5AUGSAkHTlQEQAAALnQ4CCnwJfyMAQaABayINJAACQAJAAkACQAJAIAAQ5QJBAWsOBAABAAIEC0EIIQ9BCBBSIRAgACgCECIOKAIMIRECfCACBEACfyARLQApQQhxBEAgDUEwaiAREPUJIA0gDSsDSCIDOQOIASANIA0rAzAiBjkDgAEgDSADOQN4IA0gDSsDQCIFOQNwIA0gDSsDOCIDOQNoIA0gBTkDYCANIAM5A1ggDSAGOQNQQQEhEyANQdAAaiESQQQMAQsgDisDaCEEIA4rA2AhBiAOKwNYIQcgDSAOKwNwRAAAAAAAAFJAoiIFRAAAAAAAAOA/oiIDOQOIASANIAM5A3ggDSAFRAAAAAAAAOC/oiIDOQNoIA0gAzkDWCANIAcgBEQAAAAAAABSQKKiIAcgBqCjIgM5A3AgDSADOQNgIA0gA5oiAzkDgAEgDSADOQNQQQEhEyANQdAAaiESQQQLIQ9EAAAAAAAAAAAhBkQAAAAAAAAAAAwBCyARKAIIIgJBA0kEQEQAAAAAAAAAAAwBCyAAQdzZCigCAEQAAAAAAADwP0QAAAAAAAAAABBPIQMgESgCLCARKAIEIg8gD0EARyADRAAAAAAAAAAAZHFqIg9BAWsgAmxBACAPG0EEdGohEiABKwMIIQZBASETIAIhDyABKwMACyEFIBAgDzYCBCAQIA9BEBAaIhQ2AgAgD7ghC0EAIQIgD0EERyEVA0AgAiAPRg0EAkAgEwRAIAEtABBBAUYEQCAVRQRAIAUhAyAGIQQCQAJAAkACQAJAIAIOBAQDAAECCyAGmiEEIAWaIQMMAwsgBpohBAwCCyANQaIDNgIEIA1Bk7kBNgIAQajzCCgCAEHmvAQgDRAfGhA8AAsgBZohAwsgBCASIAJBBHRqIg4rAwigIQQgAyAOKwMAoCEDDAMLIBIgAkEEdGoiDisDCCIDIAYgDisDACIHIAMQSiIDo0QAAAAAAADwP6CiIQQgByAFIAOjRAAAAAAAAPA/oKIhAwwCCyAGIBIgAkEEdGoiDisDCKIhBCAFIA4rAwCiIQMMAQsgACgCECIOKwNwRAAAAAAAAFJAoiEIIA4rA2hEAAAAAAAAUkCiIQdEAAAAAAAAAAAhBkQAAAAAAAAAACEFIAEtABBBAUYEQCABKwMIIQYgASsDACEFCyANIAK4IgREAAAAAAAA4L+gRBgtRFT7IRlAoiALoyIDEFcgCCAGoEQAAAAAAADgP6IiDKIiCDkDOCANIAMQSyAHIAWgRAAAAAAAAOA/oiIJoiIHOQMwIA0gBEQAAAAAAADgP6BEGC1EVPshGUCiIAujIgQQVyAMoiIDOQOYASANIA0pAzg3AyggDSANKQMwNwMgIA0gBBBLIAmiIgQ5A5ABIAkgDCANQSBqEMQMIQogDSANKQOYATcDGCANIA0pA5ABNwMQIAogAyAKIAeiIAihIAkgDCANQRBqEMQMIgMgBKKhoCAKIAOhoyIDIAehoiAIoCEECyAUIA8gAkF/c2pBBHRqIhEgAyAAKAIQIg4rAxCgOQMAIBEgBCAOKwMYoDkDCCACQQFqIQIMAAsACyAAKAIQKAIMIgIrAyghByACKwMgIQMgAisDGCEEIAIrAxAhBkEIEFIiEEEENgIEIBBBBEEQEBoiAjYCACABKwMIIQkgASsDACEKIAAoAhAiACsDGCELIAArAxAhCCABLQAQQQFGBEAgAiAIIAMgCqCgIgU5AzAgAiALIAcgCaCgIgM5AyggAiAFOQMgIAIgAzkDGCACIAggBiAKoaAiAzkDECACIAsgBCAJoaAiBDkDCCACIAM5AwAMAgsgAiADIAqiIAigIgU5AzAgAiAHIAmiIAugIgM5AyggAiAFOQMgIAIgAzkDGCACIAYgCqIgCKAiAzkDECACIAQgCaIgC6AiBDkDCCACIAM5AwAMAQtBCBBSIhBBBDYCBCAQQQRBEBAaIgI2AgAgASsDCCEIIAAoAhAiACsDGCEHIAArAxAhBCAAKwNYmiEFIAEtABBBAUYEQCAAKwNQIQMgAiAEIAUgASsDACIFoaA5AwAgAiAHIAOaIAihoDkDCCAAKwNYIQMgAiAHIAggACsDUKCgOQMYIAIgBCADmiAFoaA5AxAgACsDYCEDIAIgByAIIAArA1CgoDkDKCACIAQgBSADoKA5AyAgACsDUCEDIAIgBCAFIAArA2CgoDkDMCAHIAOaIAihoCEEDAELIAErAwAhBiACIAcgACsDUCAIoqE5AwggAiAFIAaiIASgOQMAIAArA1ghAyACIAArA1AgCKIgB6A5AxggAiAEIAMgBqKhOQMQIAArA2AhAyACIAArA1AgCKIgB6A5AyggAiADIAaiIASgOQMgIAArA1AhAyACIAYgACsDYKIgBKA5AzAgByADIAiioSEECyACIAQ5AzgLIA1BoAFqJAAgEAvOAgIEfwF8IwBBEGsiBSQAAkAgACgCEC4BqAEiAkEATgRAAkAgAkEBRwRAQazYCi0AAEEBRw0BCyAFIAA2AgwgBUEMakEBIAG3IgYgBkGE0AoQ3AYgACgCECgCYARAIABBMEEAIAAoAgBBA3FBA0cbaigCKBAuIAAoAhAoAmAQigILIAAQmwMMAgsgAkUNASACQQQQGiEEA0AgAiADRgRAIAQgAiABtyIGIAZBhNAKENwGQQAhAANAIAAgAkYEQCAEEBgMBQsgBCAAQQJ0aigCACIBKAIQKAJgBEAgAUEwQQAgASgCAEEDcUEDRxtqKAIoEC4gASgCECgCYBCKAgsgARCbAyAAQQFqIQAMAAsABSAEIANBAnRqIAA2AgAgA0EBaiEDIAAoAhAoArABIQAMAQsACwALQeWYA0GTuQFB2gFB5TEQAAALIAVBEGokAAs/AAJAIAAgAWMEQCABIAJjDQFBf0EAIAEgAmQbDwsgACABZEUEQEEADwsgASACZA0AQX9BACABIAJjGw8LQQELfwIDfwN8IwBBMGsiAiQAIAErAwghBSABKwMAIQZBqPMIKAIAAn8gASgCECIEKAIEIAFGBEAgBCgCAAwBCyABQRhqCyIBKwMAIQcgAiABKwMIOQMgIAIgBzkDGCACIAU5AxAgAiAGOQMIIAIgADYCAEH27gQgAhAyIAJBMGokAAuvBAIKfAF/IARBAEwEQEEADwsgACsDCCEKIAArAwAhCCABKwMIIQUgASsDACEJAn8gACgCECIPKAIEIABGBEAgDygCAAwBCyAAQRhqCyIPKwMIIQ0gDysDACELAn8gASgCECIPKAIEIAFGBEAgDygCAAwBCyABQRhqCyIPKwMIIQYgDysDACEHQQEhDwJAAkACQAJAAkACQAJAIARBAWsOAwIBAAYLIAggC2EEQCACIAg5AwAgBSAGoSAJIAehoyAIIAehoiAGoCEFDAULIAcgCWEEQCACIAk5AwAgCiANoSAIIAuhoyAJIAuhoiANoCEFDAULIAIgCiAKIA2hIAggC6GjIgwgCKKhIg4gBSAFIAahIAkgB6GjIgYgCaKhIgWhIAYgDKEiB6M5AwAgBiAOoiAFIAyioSAHoyEFDAQLIAAgAUEAEMwCQX9GBEAgASAAQQEQzAJBf0cEQCAHIQwgBiEODAMLIA0gCiABIABBABDMAkF/RiIAGyEOIAsgCCAAGyEMDAILIAkhDCAFIQ4gACABQQEQzAJBf0YNAkEAIQ8gCyEMIA0hDiAIIQcgCiEGIAEgAEEAEMwCQX9HDQQMAgsgCCALoSAFIAqhoiAKIA2hIAkgCKGiYQRAIAIgCTkDAAwDCyACIAc5AwAgBiEFDAILIAkhByAFIQYLIAIgDCAHoEQAAAAAAADgP6I5AwAgDiAGoEQAAAAAAADgP6IhBQsgAyAFOQMAQQEhDwsgDwv2AQIIfAF/IAArAwghAyAAKwMAIQQgASsDCCEFIAErAwAhBgJ/IAAoAhAiCygCBCAARgRAIAsoAgAMAQsgAEEYagsiCysDCCEIIAsrAwAhBwJ/IAEoAhAiACgCBCABRgRAIAAoAgAMAQsgAUEYagsiACsDCCEJIAArAwAhCiACQX8gByAEoSIHIAUgA6GiIAggA6EiBSAGIAShoqEiBkQAAAAAAAAAAGQgBkQAAAAAAAAAAGMbIgA2AgAgAkF/IAcgCSADoaIgBSAKIAShoqEiA0QAAAAAAAAAAGQgA0QAAAAAAAAAAGMbIgE2AgQgAiAAIAFsNgIIC00BAnwCf0EBIAAoAgAiACsDACICIAEoAgAiASsDACIDZA0AGkF/IAIgA2MNABpBASAAKwMIIgIgASsDCCIDZA0AGkF/QQAgAiADYxsLC84PAxB/CnwBfiMAQbABayICJAAgAUEAIAFBAEobIQ8gAUEoEBohDQNAIAMgD0ZFBEAgACADQQJ0aigCACgCBCAKaiEKIANBAWohAwwBCwsgCkEYEBoiDkEYayEGA0AgCCAPRwRAIA0gCEEobGoiBCAOIAdBGGxqNgIAIAAgCEECdGooAgAiCygCBCEMQQAhA0T////////vfyESRP///////+//IRNE////////7/8hFUT////////vfyEUA0AgAyAMRgRAIAQgEzkDICAEIBU5AxggBCASOQMQIAQgFDkDCCAEIAYgB0EYbGo2AgQgCEEBaiEIDAMFIAsoAgAgA0EEdGoiBSsDACEWIAUrAwghFyAOIAdBGGxqIgVBADYCFCAFIAQ2AhAgBSAXOQMIIAUgFjkDACADQQFqIQMgB0EBaiEHIBMgFxAjIRMgFSAWECMhFSASIBcQKSESIBQgFhApIRQMAQsACwALCyACQgA3A4gBIAJCADcDgAEgAkIANwN4QQAhAyAKQQQQGiEMAkADQCADIApGBEACQCAMIApBBEHgAxCoASACQYwBaiEQQQAhCwNAIAogC0YNASACIAwgC0ECdGoiESgCACIDNgJ0IAICfyADKAIQIgQoAgAgA0YEQCAEKAIEDAELIANBGGsLIgU2AnBBACEIA0ACQAJAIAhBAkcEQAJAIAJB9ABqIAJB8ABqEMsMQQFqDgMAAwIDCyAFQRhqIQdBACEDA0ACQCACKAKAASADSwRAIAIgAikDgAE3A1ggAiACKQN4NwNQIAIoAnggAkHQAGogAxAZQQJ0aigCACIGIAUgAkGUAWoiCRDKDCACKAKcASIEQQBKDQECQCAEQQBIBEAgBSAGIAkQygwgAigCnAEiBEEASg0DIAYgBSACQagBaiACQaABaiAEQQBIBH9BAwUgBSAGIAIoApQBIgQgBEEfdSIEcyAEaxDMAgsQyQwNAQwDCyAGIAUgAkGoAWogAkGgAWoCfyACKAKUASIEIAIoApgBRgRAIAYgBUEAEMwCIgQgBiAFQQEQzAIiCSAEIAlKG0EBdAwBCyAGIAUgBCAEQR91IglzIAlrEMwCCxDJDEUNAgsgBisDACEVAn8gBigCECIEKAIEIAZGBEAgBCgCAAwBCyAGQRhqCyIJKwMAIRQgByEEIAYrAwghGCACKwOgASESIAIrA6gBIRMgBSsDCCEZIAkrAwghGiAFKAIQIgkoAgQgBUYEQCAJKAIAIQQLIAQrAwghGwJAIBQgFWIiCSAFKwMAIhYgBCsDACIXYnEgEyAVYSASIBhhcSAJckUgEyAUYiASIBpicnFyDQAgEyAWYSASIBlhcSAWIBdicg0CIBMgF2INACASIBthDQILQYzYCi0AAEECSQ0IIAIgEjkDSCACIBM5A0BBqPMIKAIAQd6iBCACQUBrEDJBASAGEMgMQQIgBRDIDAwICyACIAU2AowBIAJB+ABqQQQQJyEDIAIoAnggA0ECdGogAigCjAE2AgAgBSAFNgIUDAQLIANBAWohAwwACwALIAtBAWohCwwDCyAFKAIUIgNFBEBBACEFQc2tBEEAEDcMBwsgAiACKQOAATcDaCACIAM2AowBIAIgAikDeDcDYCACQeAAaiAQENwDIgNBf0cEQAJAAkACQCACKAKIASIEDgICAAELIAIoAnggA0ECdGooAgAQGAwBCyACKAJ4IANBAnRqKAIAIAQRAQALIAJB+ABqIAMQpwQLIAVBADYCFAsgAgJ/IBEoAgAiBSAFKAIQIgMoAgRGBEAgAygCAAwBCyAFQRhqCzYCcCAIQQFqIQgMAAsACwALBSAMIANBAnRqIA4gA0EYbGo2AgAgA0EBaiEDDAELC0EAIQMDQCADIAIoAoABT0UEQCACIAIpA4ABNwMIIAIgAikDeDcDACACIAMQGSEEAkACQAJAIAIoAogBIgcOAgIAAQsgAigCeCAEQQJ0aigCABAYDAELIAIoAnggBEECdGooAgAgBxEBAAsgA0EBaiEDDAELCyACQfgAaiIEQQQQMyAEEDggDBAYQQAhBSAKIAtHDQBBACEDQQEhBQNAIAMgD0YNASACIAAgA0ECdGooAgAiCigCACIEKQMINwOAASACIAQpAwA3A3ggDSADQShsaiEHIANBAWoiBCEDA0AgASADRgRAIAQhAwwCCyAAIANBAnRqKAIAIQgCQAJAAkAgBysDCCITIA0gA0EobGoiBisDGCIVZSILRSATIAYrAwgiEmZFcg0AIAcrAxAiFCAGKwMgIhZlRQ0AIBQgBisDECIXZkUNACAHKwMYIhQgFWVFIBIgFGVFcg0AIAcrAyAiFCAWZUUgFCAXZkVyDQAgCCkCACEcIAIgAikDgAE3AzAgAiAcNwM4IAIgAikDeDcDKCACQThqIAJBKGoQtwRFDQEMAgsgEiATZkUNACASIAcrAxgiE2VFDQAgEyAVZkUgBisDECISIAcrAyAiFGVFIAtFcnINACASIAcrAxAiE2ZFDQAgBisDICISIBRlRSASIBNmRXINACAIKAIAIQYgAiAKKQIANwMgIAIgBikDCDcDGCACIAYpAwA3AxAgAkEgaiACQRBqELcEDQELIANBAWohAwwBCwsLQQAhBQsgDRAYIA4QGCACQbABaiQAIAULPAEBfyAAKAIIEBggACgCDBAYIAAoAhAQGCAAKAIUEBggACgCGCIBBEAgASgCABAYIAAoAhgQGAsgABAYC14BAX8CQCACRQ0AIAAgASACKAIIEM4MQQghAwJAAkACQCABKAIAQQNxQQFrDgMAAQMCC0EUIQMMAQtBICEDCyACKAIAIANqKAIAIgNFDQAgACABIAIoAgQgAxEFAAsLhAgCDn8BfEEcEE0iBQRAIAFBACABQQBKGyELA0AgAyALRwRAIAAgA0ECdGooAgAoAgQgAmohAiADQQFqIQMMAQsLAkAgAkEASA0AIAUgAkEQEEciDDYCCAJAIAFBAE4EQCAFIAFBAWpBBBBHIgo2AgwgBSACQQQQRyIHNgIQIAJBBBBHIQkgBSACNgIEIAUgCTYCFCAFIAE2AgACQCAKRQ0AIAJFDQIgDEUgB0VyDQAgCQ0CCyAJEBggBxAYIAoQGCAMEBgMAgtBzZYDQYm3AUEvQe3lABAAAAsDQAJAAkAgCyANRwRAIAogDUECdCIBaiAGNgIAIAAgAWooAgAiDigCBCIIQQBIDQEgBkEBayEPQQAhAiAIIQEgBiEDA0AgASACTA0DIAwgA0EEdGoiASAOKAIAIAJBBHRqIgQpAwA3AwAgASAEKQMINwMIIAcgA0ECdCIBaiADQQFqIgQ2AgAgASAJaiADQQFrNgIAIAJBAWohAiAOKAIEIQEgBCEDDAALAAsgCiALQQJ0aiAGNgIAQQAhBCMAQSBrIgMkAAJAIAUoAgQiAEEATgRAIABBAmoiCEEEEBohBiAAIABsQQgQGiEBIABBA3QhAgNAIAAgBEYEQANAIAAgCEcEQCAGIABBAnRqQQA2AgAgAEEBaiEADAELCyAFIAY2AhggBSgCBCICQQAgAkEAShshCyAFKAIUIQkgBSgCECEKIAUoAgghBEEAIQEDQCABIAtHBEAgBiABQQJ0IgBqKAIAIgwgACAJaigCACIAQQN0aiAEIAFBBHRqIggrAAAgBCAAQQR0aiIHKwAAoSIQIBCiIAgrAAggBysACKEiECAQoqCfIhA5AwAgAUEDdCINIAYgAEECdGooAgBqIBA5AwAgAUECayABQQFrIgcgACAHRhshAANAIABBAE4EQAJAIAEgACAEIAogCRDRDEUNACAAIAEgBCAKIAkQ0QxFDQAgAyAIKQMINwMYIAMgCCkDADcDECADIAQgAEEEdGoiBykDCDcDCCADIAcpAwA3AwAgA0EQaiADIAIgAiACIAQgChDNB0UNACAMIABBA3RqIAgrAAAgBysAAKEiECAQoiAIKwAIIAcrAAihIhAgEKKgnyIQOQMAIAYgAEECdGooAgAgDWogEDkDAAsgAEEBayEADAELCyABQQFqIQEMAQsLIANBIGokAAwDBSAGIARBAnRqIAE2AgAgBEEBaiEEIAEgAmohAQwBCwALAAtBopgDQbm2AUEcQcsQEAAACyAFDwtBr8oBQYm3AUHHAEHt5QAQAAALIAcgCCAPaiIBQQJ0aiAGNgIAIAkgBkECdGogATYCACANQQFqIQ0gAyEGDAALAAsgBRAYC0EAC/oIAwp/C3wBfiMAQfAAayIDJAAgACgCFCEMIAAoAhAhCiAAKAIIIQcgACgCBCIIQQJqQQgQGiEJAkAgAUHSbkcNACADIAIpAwg3A2AgAyACKQMANwNYA0AgBCIBIAAoAgBOBEBBqXchAQwCCyADIAAoAgggACgCDCIFIAFBAnRqKAIAIgZBBHRqNgJoIAUgAUEBaiIEQQJ0aigCACEFIAMgAykDYDcDSCADIAUgBms2AmwgAyADKQNYNwNAIAMgAykCaDcDUCADQdAAaiADQUBrELcERQ0ACwtBACEEIAgiBSEGIAFBAE4EQCAAKAIMIAFBAnRqIgAoAgQhBiAAKAIAIQULIAVBACAFQQBKGyELIAIrAwAhEyACKwMIIRQDQAJ8AkACQCAEIAtGBEAgBSAGIAUgBkobIQAgBSEEDAELIAMgByAEQQR0aiIAKQMINwNgIAMgACkDADcDWCAUIAMrA2AiDaEiECAHIAogBEECdCIBaigCAEEEdGoiACsAACADKwNYIg+hIhWiIAArAAggDaEiFiATIA+hIhGioSIORC1DHOviNho/ZCAORC1DHOviNhq/Y0VyIQAgFCAHIAEgDGooAgBBBHRqIgErAAgiDqEgDyABKwAAIhKhoiANIA6hIBMgEqGioSIXRC1DHOviNho/ZCAXRC1DHOviNhq/Y0VyIQECQCAOIA2hIBWiIBYgEiAPoaKhRC1DHOviNho/ZARAIAAgAXENAQwDCyAAIAFyRQ0CCyADIAIpAwg3AzggAikDACEYIAMgAykDYDcDKCADIBg3AzAgAyADKQNYNwMgIANBMGogA0EgaiAFIAYgCCAHIAoQzQdFDQEgESARoiAQIBCioJ8MAgsDQCAAIARGRQRAIAkgBEEDdGpCADcDACAEQQFqIQQMAQsLIAYgCCAGIAhKGyELIAYhBANAIAkgBEEDdGoCfAJAIAQgC0cEQCADIAcgBEEEdGoiACkDCDcDYCADIAApAwA3A1ggFCADKwNgIg2hIhAgByAKIARBAnQiAWooAgBBBHRqIgArAAAgAysDWCIPoSIVoiAAKwAIIA2hIhYgEyAPoSIRoqEiDkQtQxzr4jYaP2QgDkQtQxzr4jYav2NFciEAIBQgByABIAxqKAIAQQR0aiIBKwAIIg6hIA8gASsAACISoaIgDSAOoSATIBKhoqEiF0QtQxzr4jYaP2QgF0QtQxzr4jYav2NFciEBAkAgDiANoSAVoiAWIBIgD6GioUQtQxzr4jYaP2QEQCAAIAFxDQEMAwsgACABckUNAgsgAyACKQMINwMYIAIpAwAhGCADIAMpA2A3AwggAyAYNwMQIAMgAykDWDcDACADQRBqIAMgBSAGIAggByAKEM0HRQ0BIBEgEaIgECAQoqCfDAILIAkgCEEDdGoiAEIANwMAIABCADcDCCADQfAAaiQAIAkPC0QAAAAAAAAAAAs5AwAgBEEBaiEEDAALAAtEAAAAAAAAAAALIQ0gCSAEQQN0aiANOQMAIARBAWohBAwACwAL8QECB3wCfyACIAFBBHRqIgErAAgiBSACIABBBHRqIgwrAAgiB6EgAiADIABBAnQiDWooAgBBBHRqIgArAAAgDCsAACIIoSIKoiAAKwAIIAehIgsgASsAACIJIAihoqEiBkQtQxzr4jYaP2QgBkQtQxzr4jYav2NFciEAIAUgAiAEIA1qKAIAQQR0aiIBKwAIIgWhIAggASsAACIGoaIgByAFoSAJIAahoqEiCUQtQxzr4jYaP2QgCUQtQxzr4jYav2NFciEBIAUgB6EgCqIgCyAGIAihoqFELUMc6+I2Gj9kBH8gACABcQUgACABcgtBAXELkgEBAn8gACgCAEUEQCAAQfT7CigCAEEEEBoiATYCACAAIAFB9PsKKAIAQQJ0ajYCBAtBACEBA0BB9PsKKAIAIgIgAU0EQCAAKAIAIAJBBEHfAxCoASAAIAAoAgA2AkgFIAAoAgAgAUECdGpBqPwKKAIAIAFB4ABsaiICQQhqNgIAIAJCADcDWCABQQFqIQEMAQsLCzcBAn8jAEEgayIDJAAgABA6QQJOBEAgACABIANBCGoiARDWDCAAIAEQ8QMhAgsgA0EgaiQAIAIL5gICBn8EfCAAENIMIAAoAgQhBSAAKAIAIQADQAJAIAUgACIBSwRAIABBBGoiACAFTw0CIAEoAgAiAysDACIHIAEoAgQiAisDAGINAiADKwMIIgggAisDCGINAiABQQhqIQNBAiECAkADQCADIAVPDQEgAygCACIEKwMIIQkgBCsDACIKIAdiIAggCWJyRQRAIANBBGohAyACQQFqIQIMAQsLIAggCWINACAKIAehIAK4oyEHQQEhAQNAIAAgA08NAyAAKAIAIgIgAbggB6IgAisDAKA5AwAgAEEEaiEAIAFBAWohAQwACwALQaj8CigCACECA0AgACADTw0CIAAoAgAiBCABKAIAIgYrAwAgAiAGKAIQQeAAbGoiBisDOCAGKwMooSACIAQoAhBB4ABsaiIEKwM4IAQrAyihoEQAAAAAAADgP6KgOQMAIABBBGohACABQQRqIQEMAAsACw8LIAMhAAwACwALVAECfwJ/A0ACQEGo/AooAgAhAEH0+wooAgAgAU0EQCAADQFBAAwDBSAAIAFB4ABsaigCTBAYIAFBAWohAQwCCwALCyAAKAJYEBhBqPwKKAIACxAYC70DAgd/AX4jAEEwayIFJABBoZYBIQgCQAJAIAFFDQAgAS0AAEUNAEGMxwghBANAAkACQCAEKAIEIgNFBEBBzMgIIQQMAQsgASADEC9FIAQoAgAiBkEQRgR/IAEgAyADED8QgAIFQQELRXJFDQEgBCgCCCIHRQRAIAUgAzYCIEG0twQgBUEgahAqIAJB7PUANgIEIAJBATYCAEGMxwghBAwBCyACIAc2AgQgAiAGNgIAIAZBEEcNACAEKAIEED8gAWojAEEQayIDJAAgAyADQQxqNgIAQfSxASADEFEhBiACQegHQegHIAMoAgwiByAHQQBIGyAGQQBMGzYCCCACIAAgAEEAQab/AEEAECJEAAAAAAAAEMBEAAAAIF+gAsIQTzkDECADQRBqJAALIAQoAgQNAwJAIAEQaSIAIAFBARDXBkcEQCAFIAE2AhBBiqwEIAVBEGoQKgwBCyAADQMLQez1ACEIQQEhCQwCCyAEQQxqIQQMAAsACyACIAg2AgQgAiAJNgIAC0GM2AotAAAEQCACKQIEIQogBSACKwMQOQMIIAUgCjcDAEGo8wgoAgBByKEEIAUQMgsgBUEwaiQACxoAIAAgAEHz3AAQJiIAQZWABSAAGyABENYMC50EAgV/B3wjAEEQayIDJAACQAJAIABB6YgBECYiAUUNACABLQAARQ0AIAEgA0EMahDgASEGIAEgAygCDEYEQEQAAAAAAAAAACEGIAEQaUUNAQsDQCAGRAAAAAAAgGZAZARAIAZEAAAAAACAdsCgIQYMAQUDQCAGRAAAAAAAgGbAZQRAIAZEAAAAAACAdkCgIQYMAQsLIAZEAAAAAACAZkCjIAAQHCgCECgClAEiASsDCCEGIAErAwAhCCAAEBwhAQNAIAEEQCABKAIQKAKUASICIAIrAwAgCKE5AwAgAiACKwMIIAahOQMIIAAgARAdIQEMAQsLIAhEAAAAAAAAAABiIAZEAAAAAAAAAABiciECRBgtRFT7IQlAoiAAEBwhAQNAIAFFDQQgACABEC0iBEUEQCAAIAEQHSEBDAELCyAEQVBBACAEKAIAQQNxIgFBAkcbaigCKCgCECgClAEiBSsDCCAEQTBBACABQQNHG2ooAigoAhAoApQBIgErAwgiBqEgBSsDACABKwMAIgihEKoBoSIHRAAAAAAAAAAAYQ0DIAcQVyIJmiEKIAAQHCEBIAcQSyEHA0AgAQRAIAEoAhAoApQBIgIgBiACKwMAIAihIgsgCaIgByACKwMIIAahIgyioKA5AwggAiAIIAsgB6IgDCAKoqCgOQMAIAAgARAdIQEMAQVBASECDAULAAsACwALAAsLIANBEGokACACC2IBAX8CQCADRQ0AIAAgASACIAMoAggQ2QxBBCEEAkACQAJAIAEoAgBBA3FBAWsOAwABAwILQRAhBAwBC0EcIQQLIAMoAgAgBGooAgAiBEUNACAAIAEgAygCBCACIAQRBwALCyQAIABFBEBB9NIBQej7AEEMQZv3ABAAAAsgAEGxCEELEOkBRQv9AQIEfwJ8QbzYCi8BACAAEDpsQQgQGiEGIAAQHCEEIAErAwghCCABKwMAIQkDQCAEBEAgAwRAIAQQIRDaDCAFaiEFCyAGIAQoAhAiASgCiAFBvNgKLwEAbEEDdGoiByABKwMgRAAAAAAAAOA/oiAJoDkDACAHIAErAyhEAAAAAAAA4D+iIAigOQMIIAAgBBAdIQQMAQUCQCADRSAFRXINAEEAIQEgBUEEEBohBSAAEBwhBANAIAQEQCAEECEQ2gwEQCAFIAFBAnRqIAQoAhAoAogBNgIAIAFBAWohAQsgACAEEB0hBAwBBSADIAU2AgAgAiABNgIACwsLCwsgBgsjAQF/IAAoAggiAQR/IAFBIEEkIAAtAAwbagVB0PwKCygCAAsjAQJ/IAAoAgAiASAAKAIEIgI2AgQgAiABNgIAIABBfjYCCAsTACAAIAEgAiAAKAJMKAIoENkMC5MBAgJ/AXwgACgCBCIDQQBKBEACQCABKwMYQZD8CisDACIEoUGY/AorAwAgBKGjIAO3oiIERAAAAAAAAAAAYw0AIAQgA0EBayICuGQNACAEmUQAAAAAAADgQWMEQCAEqiECDAELQYCAgIB4IQILIAAoAgwgAkoEQCAAIAI2AgwLIAIPC0HWN0GVugFBIEHt2QAQAAAL9QUCB3wCfwJAAkAgACsDACIDRAAAAAAAAPA/YQRAIABBGEEcIAArAwgiA0QAAAAAAAAAAGYiCBtqKAIAIQkCQAJ8IABBHEEYIAgbaigCACIIBEAgCCsDCCIFQbD8CisDAGQNBUG4/AorAwAiAiAFZQRAIAgrAwAhBAwDCyAAKwMQIAMgAqKhDAELIAArAxAgA0G4/AorAwAiAqKhCyEEIAIhBQsCfCAJBEAgCSsDCCIBIAJjDQRBsPwKKwMAIgIgAWYEQCAJKwMADAILIAArAxAgAyACIgGioQwBCyAAKwMQIANBsPwKKwMAIgGioQshBiAEQcD8CisDACIHZCIIIAYgB2RxDQJByPwKKwMAIgIgBGQgAiAGZHENAiAIBEAgACsDECAHoSADoyEFIAchBAsgAiAEZARAIAArAxAgAqEgA6MhBSACIQQLIAYgB2QEQCAAKwMQIAehIAOjIQEgByEGCyACIAZkRQRAIAYhAgwCCyAAKwMQIAKhIAOjIQEMAQsgACgCHCEJAkACfCAAKAIYIggEQCAIKwMAIgRBwPwKKwMAZA0EQcj8CisDACIBIARlBEAgCCsDCCEFDAMLIAArAxAgAyABoqEMAQsgACsDECADQcj8CisDACIBoqELIQUgASEECwJ8IAkEQCAJKwMAIgIgAWMNA0HA/AorAwAiASACZgRAIAkrAwgMAgsgASECIAArAxAgAyABoqEMAQsgACsDECADQcD8CisDACICoqELIQYgBUGw/AorAwAiB2QiCCAGIAdkcQ0BQbj8CisDACIBIAVkIAEgBmRxDQEgCARAIAchBSAAKwMQIAehIAOjIQQLIAEgBWQEQCABIQUgACsDECABoSADoyEECyAGIAdkBEAgACsDECAHoSADoyECIAchBgsgASAGZEUEQCAGIQEMAQsgACsDECABoSADoyECCyAAKAIgIAQgBRD/AiAAKAIgIAIgARD/AiAAKAIkIAQgBRD/AiAAKAIkIAIgARD/AgsLwgEBB3wgAgRAIAJBKBDWByICIAE2AiQgAiAANgIgIAJCADcDGAJ8IAErAwAgACsDACIHoSIDmSABKwMIIAArAwgiCKEiBJlkBEAgBCADoyEFRAAAAAAAAPA/IQYgAwwBCyADIASjIQZEAAAAAAAA8D8hBSAECyEJIAIgBTkDCCACIAY5AwAgAiADIAOiIAQgBKKgRAAAAAAAAOA/oiAHIAOiIAggBKKgoCAJozkDECACDwtBi9MBQbK5AUEWQfwjEAAAC3cBA39BCCECA0AgAiIDQQF2IQIgA0EBcUUNAAsgA0EBRgRAAn9BACAAKAIEIgQgAUkNABpBACAEIAAoAgAiAkEEaiIDaiABa0F4cSIBIANJDQAaIAAgASACa0EEazYCBCABCw8LQbugA0GAvgFBygBBkbMBEAAAC9cDAgV/BHwgAUEAIAFBAEobIQYgARDNAiEEIAIrAwghCCACKwMAIQkDQCADIAZGBEACQCABQQFrIQVBACEDRAAAAAAAAAAAIQgDQCADIAZHBEAgAyAFaiABbyEAAkACQCAEIANBBHRqIgIrAwgiCUQAAAAAAAAAAGINACAEIABBBHRqIgcrAwhEAAAAAAAAAABiDQAgAisDACAHKwMAokQAAAAAAAAAAGNFDQEMBAsgBCAAQQR0aiIAKwMIIgpEAAAAAAAAAABlIAlEAAAAAAAAAABmcUUgCUQAAAAAAAAAAGVFIApEAAAAAAAAAABmRXJxDQAgAisDACAKoiAAKwMAIAmioSAKIAmhoyILRAAAAAAAAAAAYQ0DIAtEAAAAAAAAAABkRQ0AIAlEAAAAAAAAAABiIApEAAAAAAAAAABicUUEQCAIRAAAAAAAAOA/oCEIDAELIAhEAAAAAAAA8D+gIQgLIANBAWohAwwBCwsgBBAYAn8gCJlEAAAAAAAA4EFjBEAgCKoMAQtBgICAgHgLQYGAgIB4cUEBRg8LBSAEIANBBHQiAmoiBSAAIAJqIgIrAwAgCaE5AwAgBSACKwMIIAihOQMIIANBAWohAwwBCwsgBBAYQQELZAEBfwJAIAJFDQAgACABIAIoAggQ5AwCfwJAAkACQCABKAIAQQNxQQFrDgMBAgQACyACKAIADAILIAIoAgBBDGoMAQsgAigCAEEYagsoAgAiA0UNACAAIAEgAigCBCADEQUACwtnAgJ/AnwgAUEAIAFBAEobIQQgARDNAiEBIAIrAwghBSACKwMAIQYDQCADIARGRQRAIAEgA0EEdGoiAiAAKwMAIAagOQMAIAIgACsDCCAFoDkDCCADQQFqIQMgAEEQaiEADAELCyABC4wBAgZ8AX9BASABIAFBAU0bIQogACsDACIEIQUgACsDCCIGIQdBASEBA0AgASAKRgRAIAIgBjkDCCACIAQ5AwAgAyAHOQMIIAMgBTkDAAUgAUEBaiEBIAArAxAhCCAHIAArAxgiCRAjIQcgBSAIECMhBSAGIAkQKSEGIAQgCBApIQQgAEEQaiEADAELCwt4AgF/AnwCQCABQQRHDQAgACsDCCIDIAArAxgiBGEEQCAAKwMoIAArAzhiDQEgACsDACAAKwMwYg0BIAArAxAgACsDIGEPCyAAKwMAIAArAxBiDQAgACsDICAAKwMwYg0AIAMgACsDOGINACAEIAArAyhhIQILIAILOwECfCAAKwMIIAErAwgiA6EgAisDACABKwMAIgShoiACKwMIIAOhIAArAwAgBKGioUQAAAAAAAAAAGQLIgAgACABKwMAIAIrAwChOQMAIAAgASsDCCACKwMIoTkDCAvMAQIDfwF8IABBAEEAIAJBABDZByIEQwAAgD8gAUEAQQEgAhDTBSAEKAIkEOUHIABBACAAQQBKGyEAA0AgACADRkUEQCADQQJ0IgUgBCgCEGooAgAQ2AUhBiABKAIAIAVqIAa2OAIAIANBAWohAwwBCwtBACEDIARDAACAPyABQQFBACACENMFIAQoAiQQ5QcDQCAAIANGRQRAIANBAnQiAiAEKAIQaigCABDYBSEGIAEoAgQgAmogBrY4AgAgA0EBaiEDDAELCyAEENgHC8gIAgt/Bn0gACgCCCAAKAIEaiEHIAAoAjAhCiAAKAIsIQsgACgCKCEIAkAgACgCFEEATARAIAdBACAHQQBKGyEGDAELIAdBACAHQQBKGyEGA0AgAyAGRwRAIANBAnQiBCAAKAIQaigCACACIARqKgIAuxCFDSADQQFqIQMMAQsLIAAoAiQQhw1BACEDA0AgAyAGRg0BIAIgA0ECdCIEaiAAKAIQIARqKAIAENgFtjgCACADQQFqIQMMAAsAC0EAIQMDQAJAIAxB6AdODQBBACEEIANBAXENAAN/IAQgBkYEf0MAAAAAIRBDAAAAACEPQQAFIAsgBEECdCIFaiACIAVqKgIAOAIAIAUgCGoiCSABIAVqKgIAIg4gDpIiDjgCAEEAIQMDQCADIAdHBEAgCSADQQJ0Ig0gACgCACAFaigCAGoqAgBDAAAAwJQgAiANaioCAJQgDpIiDjgCACADQQFqIQMMAQsLIARBAWohBAwBCwshBANAAkAgBCAGRwRAIAggBEECdCIFaioCACERQwAAAAAhDkEAIQMDQCADIAdGDQIgA0ECdCIJIAAoAgAgBWooAgBqKgIAIhIgEpIgCCAJaioCAJQgDpIhDiADQQFqIQMMAAsACyAQjCAPlUMAAIC/IA9DAAAAAFwbIQ5BACEDA0AgAyAGRwRAIAIgA0ECdCIEaiIFIA4gBCAIaioCAJQgBSoCAJI4AgAgA0EBaiEDDAELC0EAIQMCQCAAKAIUQQBMDQADQCADIAZHBEAgA0ECdCIEIAAoAhBqKAIAIAIgBGoqAgC7EIUNIANBAWohAwwBCwsgACgCJBCHDUEAIQMDQCADIAZGDQEgAiADQQJ0IgRqIAAoAhAgBGooAgAQ2AW2OAIAIANBAWohAwwACwALQQAhBEEAIQMDfSADIAZGBH1DAAAAACEPQwAAAAAFIAogA0ECdCIFaiACIAVqKgIAIAUgC2oqAgCTOAIAIANBAWohAwwBCwshEANAAkAgBCAGRwRAIAogBEECdCIFaioCACERIAUgCGoqAgAhEkMAAAAAIQ5BACEDA0AgAyAHRg0CIANBAnQiCSAAKAIAIAVqKAIAaioCACITIBOSIAkgCmoqAgCUIA6SIQ4gA0EBaiEDDAALAAtDAAAAACEOIBAgD5VDAACAPyAPQwAAAABcGyIPQwAAAABeIA9DAACAP11xIQVBACEDA0AgAyAGRwRAAkAgBUUEQCACIANBAnRqKgIAIRAMAQsgAiADQQJ0IgRqIA8gBCAKaioCAJQgBCALaioCAJIiEDgCAAsgDiAQIAsgA0ECdGoqAgCTi5IhDiADQQFqIQMMAQsLIAxBAWohDCAOu0QtQxzr4jYaP2RFIQMMBQsgBEEBaiEEIA4gEZQgD5IhDyASIBGUIBCSIRAMAAsACyAEQQFqIQQgDyAOIBGUkyEPIBEgEZQgEJIhEAwACwALCyAMC+UBAgh/AX0gAUEEEBoiBCABIAFsIgNBBBAaIgU2AgAgA0MAAAAAIAUQ8wNBASABIAFBAUwbIQNBASECA38gAiADRgR/IAFBACABQQBKGyEHQQAhAwNAIAMgB0ZFBEAgBCADQQJ0IghqIQkgAyECA0AgASACRkUEQCACQQJ0IgUgCSgCAGogACAGQQJ0aioCACIKOAIAIAQgBWooAgAgCGogCjgCACAGQQFqIQYgAkEBaiECDAELCyADQQFqIQMMAQsLIAQFIAQgAkECdGogBSABIAJsQQJ0ajYCACACQQFqIQIMAQsLCy0BAnxBfyACIAAoAgBBA3RqKwMAIgMgAiABKAIAQQN0aisDACIEZCADIARjGwteAEHs+wooAgBB8PsKKAIAckUEQEHw+wogAzYCAEHs+wogAjYCACABQQJPBEAgACABQQRB2gMQqAELQfD7CkEANgIAQez7CkEANgIADwtBq6wDQZ/7AEEcQfAbEAAAC14CAn8CfCABQQAgAUEAShshASADQQN0IQMgAkEDdCECA0AgASAERkUEQCAAIARBAnRqKAIAIgUgAmorAwAgAyAFaisDAKEiByAHoiAGoCEGIARBAWohBAwBCwsgBp8LdwEFfyABQQAgAUEAShshBSABIAFsEM8BIQYgARDPASEEA38gAyAFRgR/A0AgAiAFRkUEQCACIAAgASAEIAJBAnRqKAIAELoEIAJBAWohAgwBCwsgBAUgBCADQQJ0aiAGIAEgA2xBAnRqNgIAIANBAWohAwwBCwsLFABB4NoKKAIAGkHg2gpBgQQ2AgALZQEEfyAAKAIAIgMgAUECdCIFaiIEKAIAIQYgBCADIAJBAnQiBGoiAygCADYCACADIAY2AgAgACgCCCIDIAAoAgAiACAFaigCAEECdGogATYCACADIAAgBGooAgBBAnRqIAI2AgALqwEBBH8DQCABQQF0IgNBAXIhBAJAIAAoAgQiBSADSgRAIAIgACgCACIGIANBAnRqKAIAQQJ0aioCACACIAYgAUECdGooAgBBAnRqKgIAXQ0BCyABIQMLIAQgBUgEQCAEIAMgAiAAKAIAIgUgBEECdGooAgBBAnRqKgIAIAIgBSADQQJ0aigCAEECdGoqAgBdGyEDCyABIANHBEAgACADIAEQ8gwgAyEBDAELCwuaAQEGfyADIAFBAnQiBGoiBSoCACACX0UEQCAAKAIIIgYgBGoiBygCACEEIAUgAjgCACAAKAIAIQUDQAJAIARBAEwNACADIAUgBEEBdiIAQQJ0aigCACIIQQJ0IglqKgIAIAJeRQ0AIAUgBEECdGogCDYCACAGIAlqIAQ2AgAgACEEDAELCyAFIARBAnRqIAE2AgAgByAENgIACwtgAQF/IAAoAgQiAwRAIAEgACgCACIBKAIANgIAIAEgASAAKAIEQQJ0akEEaygCACIBNgIAIAAoAgggAUECdGpBADYCACAAIAAoAgRBAWs2AgQgAEEAIAIQ8wwLIANBAEcLnQEBBX8gA0EBayIFEM8BIQYgACAFNgIEIAAgBjYCACAAIAMQzwEiBzYCCCADQQAgA0EAShshCEEAIQMDQCAEIAhGRQRAIAEgBEcEQCAGIANBAnRqIAQ2AgAgByAEQQJ0aiADNgIAIANBAWohAwsgBEEBaiEEDAELCyAFQQJtIQQDQCAEQQBIRQRAIAAgBCACEPMMIARBAWshBAwBCwsLqwEBBH8DQCABQQF0IgNBAXIhBAJAIAAoAgQiBSADSgRAIAIgACgCACIGIANBAnRqKAIAQQJ0aigCACACIAYgAUECdGooAgBBAnRqKAIASA0BCyABIQMLIAQgBUgEQCAEIAMgAiAAKAIAIgUgBEECdGooAgBBAnRqKAIAIAIgBSADQQJ0aigCAEECdGooAgBIGyEDCyABIANHBEAgACADIAEQ8gwgAyEBDAELCwvSBgIMfwJ8IAFBACABQQBKGyEJIAFBCBAaIQogACgCCCELA0ACQCAFIAlHBEAgACgCEEUNAUEBIQRBASAAIAVBFGxqIgYoAgAiByAHQQFNGyEHRAAAAAAAAAAAIRADQCAEIAdGBEAgCiAFQQN0aiAQOQMADAMFIBAgBEECdCIIIAYoAghqKgIAIAYoAhAgCGoqAgCUu6AhECAEQQFqIQQMAQsACwALQQAhBCABQQAgAUEAShshBQNAIAQgBUcEQCACIARBA3RqEKcBQfQDb7c5AwAgBEEBaiEEDAELCyABIAIQzwJBACEEQQAhBQNAIAQgCUcEQCAAIARBFGxqKAIAIAVqIQUgBEEBaiEEDAELC0EAIQYgBUEEEBohBQNAIAYgCUcEQCAAIAZBFGxqIgQgBTYCCCAFIAQoAgAiB0EBa7OMOAIAQQEhBEEBIAcgB0EBTRshCANAIAQgCEYEQCAGQQFqIQYgBSAHQQJ0aiEFDAMFIAUgBEECdGpBgICA/AM2AgAgBEEBaiEEDAELAAsACwsCfyABQQgQGiEEIAFBCBAaIQUgAUEIEBohBiABQQgQGiEHIAFBCBAaIQggASAKIAFBCBAaIgwQkwIgASAMEM8CIAEgAhDPAiAAIAEgAiAHEIANIAEgDCAHIAQQ1wUgASAEIAUQkwIgA0EAIANBAEobIQ4gA0EBayEPIAEgBCAEEKwBIRBBACEDA0ACQAJAAkAgAyAORg0AIAEgBBD+DET8qfHSTWJQP2RFDQAgACABIAUgBhCADSABIAUgBhCsASIRRAAAAAAAAAAAYQ0AIAEgBSAQIBGjIhEgCBDuASABIAIgCCACENYFIAMgD04NAiABIAYgESAGEO4BIAEgBCAGIAQQ1wUgASAEIAQQrAEhESAQRAAAAAAAAAAAYg0BQYGBBEEAEDdBASENCyAEEBggBRAYIAYQGCAHEBggCBAYIAwQGCANDAMLIAEgBSARIBCjIAUQ7gEgASAEIAUgBRDWBSARIRALIANBAWohAwwACwALIAAoAggQGEEAIQQDQCAEIAlHBEAgACAEQRRsaiICIAs2AgggBEEBaiEEIAsgAigCAEECdGohCwwBCwsgChAYQR92DwsgBUEBaiEFDAALAAv2AgIHfwJ8IANBCBAaIQcgA0EIEBohCCADQQgQGiEJIANBCBAaIQogA0EIEBohCyADIAIgA0EIEBoiAhCTAiAGBEAgAyACEM8CIAMgARDPAgsgACADIAEgChD/DCADIAIgCiAHENcFIAMgByAIEJMCQQAhBiAFQQAgBUEAShshDCAFQQFrIQ0gAyAHIAcQrAEhD0EAIQUDQAJAAkACQCAFIAxGDQAgAyAHEP4MIARkRQ0AIAAgAyAIIAkQ/wwgAyAIIAkQrAEiDkQAAAAAAAAAAGENACADIAggDyAOoyIOIAsQ7gEgAyABIAsgARDWBSAFIA1ODQIgAyAJIA4gCRDuASADIAcgCSAHENcFIAMgByAHEKwBIQ4gD0QAAAAAAAAAAGINAUGBgQRBABA3QQEhBgsgBxAYIAgQGCAJEBggChAYIAsQGCACEBggBg8LIAMgCCAOIA+jIAgQ7gEgAyAHIAggCBDWBSAOIQ8LIAVBAWohBQwACwALMAEBfyAAKAI8IgIgAUECIAIoAgARAwBFBEAPCyAAKAJAIgAgAUECIAAoAgARAwAaCzoBAn8gAEEAIABBAEobIQADQCAAIANGRQRAIAIgA0ECdCIEaiABIARqKgIAOAIAIANBAWohAwwBCwsLQwECfyAAQQAgAEEAShshBQNAIAQgBUZFBEAgAyAEQQJ0IgBqIAAgAWoqAgAgACACaioCAJI4AgAgBEEBaiEEDAELCwuJAQICfwF8IAFBACABQQBKGyEGIAJBACACQQBKGyECA0BEAAAAAAAAAAAhB0EAIQEgBSAGRkUEQANAIAEgAkZFBEAgACABQQJ0aigCACAFQQN0aisDACADIAFBA3RqKwMAoiAHoCEHIAFBAWohAQwBCwsgBCAFQQN0aiAHOQMAIAVBAWohBQwBCwsLRgIBfwF8IABBACAAQQBKGyEARJpkfsUOG1HKIQMDQCAAIAJGRQRAIAMgASACQQN0aisDAJkQIyEDIAJBAWohAgwBCwsgAwuCAQIEfwF8IAFBACABQQBKGyEGA0AgBCAGRkUEQCAAIARBAnRqIQdEAAAAAAAAAAAhCEEAIQUDQCABIAVGRQRAIAcoAgAgBUECdGoqAgC7IAIgBUEDdGorAwCiIAigIQggBUEBaiEFDAELCyADIARBA3RqIAg5AwAgBEEBaiEEDAELCwuTAQIFfwF8IAFBACABQQBKGyEGA0AgBCAGRwRAIAAgBEEUbGoiBSgCACEHQQAhAUQAAAAAAAAAACEJA0AgASAHRgRAIAMgBEEDdGogCTkDACAEQQFqIQQMAwUgAUECdCIIIAUoAghqKgIAuyACIAUoAgQgCGooAgBBA3RqKwMAoiAJoCEJIAFBAWohAQwBCwALAAsLC6YCAgp/AXwgAiADbEEUEBohBSAEIAJBBBAaIgY2AgBBACEEIAJBACACQQBKGyEHA0AgBCAHRgRAQQAhAiADQQAgA0EAShshBQNAIAIgB0ZFBEAgBiACQQJ0aiEIIAAgAkEUbGoiAygCACEJIAMoAgghCiADKAIEIQtBACEDA0AgAyAFRwRAIAEgA0ECdCIMaiENQQAhBEQAAAAAAAAAACEPA0AgBCAJRgRAIAgoAgAgDGogD7Y4AgAgA0EBaiEDDAMFIAogBEECdCIOaioCALsgDSgCACALIA5qKAIAQQN0aisDAKIgD6AhDyAEQQFqIQQMAQsACwALCyACQQFqIQIMAQsLBSAGIARBAnRqIAU2AgAgBEEBaiEEIAUgA0ECdGohBQwBCwsLjAECBH8BfCABQQAgAUEAShshBiACQQAgAkEAShshAgNAIAUgBkZFBEAgACAFQQJ0aiEHRAAAAAAAAAAAIQlBACEBA0AgASACRkUEQCABQQN0IgggBygCAGorAwAgAyAIaisDAKIgCaAhCSABQQFqIQEMAQsLIAQgBUEDdGogCTkDACAFQQFqIQUMAQsLC9MGAgx/A3wgAiABIAEgAkobIglBACAJQQBKGyEHIAFBACABQQBKGyEOIAFBAWshCCABQR5sIQ8gAUEIEBohDCABQQgQGiENIAlBCBAaIQoCQANAIAYgB0YNASADIAZBAnRqKAIAIQVBACEEA0BBACECIAQgDkcEQCAFIARBA3RqEKcBQeQAb7c5AwAgBEEBaiEEDAELA0AgAiAGRkUEQCAFIAggASADIAJBAnRqKAIAIgQgBRCsAZogBBC9BCACQQFqIQIMAQsLQQAhBCAFIAgQrQMiEES7vdfZ33zbPWMNAAsgASAFRAAAAAAAAPA/IBCjIAUQ7gEDQCABIAUgDRCTAiAAIAEgASAFIAwQgg0gASAMIAUQkwJBACECA0AgAiAGRgRAAkAgBEEBaiELIAQgD04gBSAIEK0DIhBEu73X2d982z1jcg0AIAEgBUQAAAAAAADwPyAQoyAFEO4BIAshBCABIAUgDRCsASIRmUQrhxbZzvfvP2MNAyAKIAZBA3RqIBAgEaI5AwAgBkEBaiEGDAQLBSAFIAggASADIAJBAnRqKAIAIgsgBRCsAZogCxC9BCACQQFqIQIMAQsLCwsgBiEHCyAHIAkgByAJShshBgN/IAYgB0YEf0EBIAkgCUEBTBtBAWshB0EAIQYDQCAHIAYiAEcEQCAKIAAiBEEDdGoiBSsDACIRIRAgBEEBaiIGIQIDQCACIAlOBEAgACAERg0DIAEgAyAAQQJ0aigCACIAIAwQkwIgASADIARBAnRqIgIoAgAgABCTAiABIAwgAigCABCTAiAKIARBA3RqIBE5AwAgBSAQOQMADAMFIAogAkEDdGorAwAiEiAQIBAgEmMiCBshECACIAQgCBshBCACQQFqIQIMAQsACwALCyAKEBggDBAYIA0QGCALIA9MBSADIAdBAnRqKAIAIQBBACECQQAhBANAIAQgDkZFBEAgACAEQQN0ahCnAUHkAG+3OQMAIARBAWohBAwBCwsDQCACIAdGRQRAIAAgCCABIAMgAkECdGooAgAiBCAAEKwBmiAEEL0EIAJBAWohAgwBCwsgASAARAAAAAAAAPA/IAAgCBCtA6MgABDuASAKIAdBA3RqQgA3AwAgB0EBaiEHDAELCwt0AQR8AkAgASsDACEFIAIrAwAhBiADKwMAIQcgACAEKwMAIgg5AxggACAHOQMQIAAgBjkDCCAAIAU5AwACQCAFIAZlBEAgByAIZUUNAQwCC0G4zQFBhdkAQSVBy5oBEAAAC0GlyAFBhdkAQSZBy5oBEAAACwsJACAAIAE5AwgLJgAgAEUEQEGSNUGo2QBB0ABBwdwBEAAACyAAIAAoAgAoAgwRAQALDwAgACAAKAIAKAIAEQEACx0AIAAEQCAAQTRqEIICGiAAQShqEIICGgsgABAYC5UEAQV/IAACfyAAKAIEIgUgACgCCEkEQCAAKAIEIgYgASACIAMgBBCEDSAAIAZBIGo2AgQgBUEgagwBCyMAQSBrIgkkACAAKAIEIAAoAgBrQQV1QQFqIgVBgICAwABPBEAQwgQAC0H///8/IAAoAgggACgCAGsiBkEEdSIHIAUgBSAHSRsgBkHg////B08bIQYgACgCBCAAKAIAa0EFdSEIQQAhByAJQQxqIgUgAEEIajYCECAFQQA2AgwgBgRAIAZBgICAwABPBEAQ5AcACyAGQQV0EIcBIQcLIAUgBzYCACAFIAcgCEEFdGoiCDYCCCAFIAcgBkEFdGo2AgwgBSAINgIEIAUoAgggASACIAMgBBCEDSAFIAUoAghBIGo2AgggBSgCBCEEIAAoAgAhASAAKAIEIQMDQCABIANHBEAgBEEgayIEIANBIGsiAykDADcDACAEIAMpAxg3AxggBCADKQMQNwMQIAQgAykDCDcDCAwBCwsgBSAENgIEIAAoAgAhASAAIAQ2AgAgBSABNgIEIAAoAgQhASAAIAUoAgg2AgQgBSABNgIIIAAoAgghASAAIAUoAgw2AgggBSABNgIMIAUgBSgCBDYCACAAKAIEIAUoAgQhAiAFKAIIIQADQCAAIAJHBEAgBSAAQSBrIgA2AggMAQsLIAUoAgAiAARAIAUoAgwaIAAQGAsgCUEgaiQACzYCBAuGBAEEf0EwEIcBIgVBoM8KNgIAIwBBEGsiBiQAIAVBBGoiBCAANgIQIAQgATYCDCAEQgA3AgQgBCAEQQRqNgIAQQAhAUHo+wpBADYCAAN/IAAgAUwEfyAGQRBqJAAgBAUgBkHIABCHASAEKAIMIAFBAnRqKAIAEPgHNgIMIAZBBGogBCAGQQxqEPcDIAFBAWohASAEKAIQIQAMAQsLGiAFIAI2AhwgBSADNgIYIAVBADYCLCAFQgA3AiQgBUGIzwo2AgAgAyACQQJ0aiIAIQECQCAAIANrQQJ1IgYgBUEkaiIAKAIIIAAoAgAiAmtBAnVNBEAgBiAAKAIEIgQgAmsiB0ECdUsEQCACIARHBEAgAiADIAcQtgEaIAAoAgQhBAsgASADIAdqIgJrIQMgASACRwRAIAQgAiADELYBGgsgACADIARqNgIEDAILIAEgA2shBCABIANHBEAgAiADIAQQtgEaCyAAIAIgBGo2AgQMAQsgABCeDSAAIAYQ7QciAkGAgICABE8EQBDCBAALIAAgAhCmDSIENgIEIAAgBDYCACAAIAQgAkECdGo2AgggASADayECIAAoAgQhBCABIANHBEAgBCADIAIQtgEaCyAAIAIgBGo2AgQLIAUoAighASAFKAIkIQADfyAAIAFGBH8gBQUgACgCAEEAOgAcIABBBGohAAwBCwsLuQIBB38jAEEgayIGJAAgAyAAa0EYbSEEAkAgAkECSA0AIAJBAmtBAXYiCiAESA0AIAAgBEEBdCIIQQFyIgVBGGxqIQQgAiAIQQJqIghKBEAgBEEYaiIHIAQgBCAHIAEoAgARAAAiBxshBCAIIAUgBxshBQsgBCADIAEoAgARAAANACAGIAMoAgA2AgggBiADKAIENgIMIAYgAygCCDYCECADQgA3AgQgBiADKwMQOQMYIAZBCGpBBHIDQAJAIAMgBCIDEJ4BIAUgCkoNACAAIAVBAXQiB0EBciIFQRhsaiEEIAIgB0ECaiIHSgRAIARBGGoiCSAEIAQgCSABKAIAEQAAIgkbIQQgByAFIAkbIQULIAQgBkEIaiABKAIAEQAARQ0BCwsgAyAGQQhqEJ4BENcBCyAGQSBqJAAL+gIBB38jAEEgayIEJABBASEHAkACQAJAAkACQAJAIAEgAGtBGG0OBgUFAAECAwQLIAFBGGsiASAAIAIoAgARAABFDQQgACABELgBDAQLIAAgAEEYaiABQRhrIAIQ0AIMAwsgACAAQRhqIABBMGogAUEYayACEOkHDAILIAAgAEEYaiAAQTBqIABByABqIAFBGGsgAhCNDQwBCyAAIABBGGogAEEwaiIGIAIQ0AIgAEHIAGohBSAEQQhqQQRyIQkDQCAFIgMgAUYNAQJAIAMgBiACKAIAEQAABEAgBCADKAIANgIIIAQgAygCBDYCDCAEIAMoAgg2AhAgA0IANwIEIAQgAysDEDkDGANAAkAgBSAGIgUQngEgACAFRgRAIAAhBQwBCyAEQQhqIAVBGGsiBiACKAIAEQAADQELCyAFIARBCGoQngEgCRDXASAIQQFqIghBCEYNAQsgA0EYaiEFIAMhBgwBCwsgA0EYaiABRiEHCyAEQSBqJAAgBwtqACAAIAEgAiADIAUQ6QcCQCAEIAMgBSgCABEAAEUNACADIAQQuAEgAyACIAUoAgARAABFDQAgAiADELgBIAIgASAFKAIAEQAARQ0AIAEgAhC4ASABIAAgBSgCABEAAEUNACAAIAEQuAELC04BAn8jAEHQAGsiAiQAIAAoAkAiA0EAEP4EQcDtCUcEQCADQcDtCRD+BBoLIAIgATcDCCAAKAJAIgAgAkEEIAAoAgARAwAgAkHQAGokAAu+EAEJfyMAQRBrIg0kAANAIAFByABrIQkgAUEwayEIIAFBGGshCwJAA0ACQAJAAkACQAJAIAEgAGsiBkEYbSIHDgYGBgABAgMECyABQRhrIgEgACACKAIAEQAARQ0FIAAgARC4AQwFCyAAIABBGGogAUEYayACENACDAQLIAAgAEEYaiAAQTBqIAFBGGsgAhDpBwwDCyAAIABBGGogAEEwaiAAQcgAaiABQRhrIAIQjQ0MAgsgBkG/BEwEQCAEQQFxBEAgAiEHIwBBIGsiBSQAAkAgASIEIABGDQAgBUEIakEEciEGIAAhAQNAIAEiA0EYaiIBIARGDQEgASADIAcoAgARAABFDQAgBSADKAIYNgIIIAUgAygCHDYCDCAFIAMoAiA2AhAgA0IANwIcIAUgAysDKDkDGCABIQIDQAJAIAIgAyICEJ4BIAAgAkYEQCAAIQIMAQsgBUEIaiACQRhrIgMgBygCABEAAA0BCwsgAiAFQQhqEJ4BIAYQ1wEMAAsACyAFQSBqJAAMAwsgAiEEIwBBIGsiBSQAAkAgASIDIABGDQAgBUEIakEEciEGA0AgACICQRhqIgAgA0YNASAAIAIgBCgCABEAAEUNACAFIAIoAhg2AgggBSACKAIcNgIMIAUgAigCIDYCECACQgA3AhwgBSACKwMoOQMYIAAhAQNAIAEgAhCeASAFQQhqIgcgAiIBQRhrIgIgBCgCABEAAA0ACyABIAcQngEgBhDXAQwACwALIAVBIGokAAwCCyADRQRAIAAgAUcEfyAAIAFGBH8gAQUgASAAayIDQRhtIQQCQCADQRlIDQAgBEECa0EBdiEDA0AgA0EASA0BIAAgAiAEIAAgA0EYbGoQiw0gA0EBayEDDAALAAsgASAAa0EYbSEEIAEhAwNAIAEgA0cEQCADIAAgAigCABEAAARAIAMgABC4ASAAIAIgBCAAEIsNCyADQRhqIQMMAQsLIAEgAGtBGG0hAwNAIANBAUoEQCABIQRBACEGIwBBIGsiDCQAIANBAk4EQCAMIAAoAgA2AgggDCAAKAIENgIMIAwgACgCCDYCECAAQgA3AgQgDCAAKwMQOQMYIAxBCGoiC0EEciAAIQEgA0ECa0ECbSEKA0AgBkEBdCIIQQFyIQcgASAGQRhsaiIGQRhqIQUgAyAIQQJqIghMBH8gBwUgBkEwaiIGIAUgBSAGIAIoAgARAAAiBhshBSAIIAcgBhsLIQYgASAFEJ4BIAUhASAGIApMDQALAkAgBEEYayIHIAVGBEAgBSALEJ4BDAELIAEgBxCeASAHIAxBCGoQngEgAUEYaiIBIQojAEEgayILJAACQCABIAAiB2tBGG0iAUECSA0AIAAgAUECa0EBdiIIQRhsaiIBIApBGGsiBiACKAIAEQAARQ0AIAsgBigCADYCCCALIApBFGsiBSgCADYCDCALIApBEGsoAgA2AhAgBUIANwIAIAsgCkEIaysDADkDGCALQQhqQQRyA0ACQCAGIAEiBhCeASAIRQ0AIAcgCEEBa0EBdiIIQRhsaiIBIAtBCGogAigCABEAAA0BCwsgBiALQQhqEJ4BENcBCyALQSBqJAALENcBCyAMQSBqJAAgA0EBayEDIARBGGshAQwBCwtBAAsFIAELGgwCCyAAIAdBAXZBGGwiBWohCgJAIAZBgRhPBEAgACAKIAsgAhDQAiAAQRhqIgcgCkEYayIGIAggAhDQAiAAQTBqIAUgB2oiByAJIAIQ0AIgBiAKIAcgAhDQAiAAIAoQuAEMAQsgCiAAIAsgAhDQAgsgA0EBayEDAkAgBEEBcSIKDQAgAEEYayAAIAIoAgARAAANAEEAIQQjAEEgayIFJAAgBSAAKAIANgIIIAUgACgCBDYCDCAFIAAoAgg2AhAgAEIANwIEIAUgACsDEDkDGAJAIAVBCGogASIGQRhrIAIoAgARAAAEQCAAIQcDQCAFQQhqIAdBGGoiByACKAIAEQAARQ0ACwwBCyAAIQcDQCAHQRhqIgcgBk8NASAFQQhqIAcgAigCABEAAEUNAAsLIAYgB0sEQANAIAVBCGogBkEYayIGIAIoAgARAAANAAsLA0AgBiAHSwRAIAcgBhC4AQNAIAVBCGogB0EYaiIHIAIoAgARAABFDQALA0AgBUEIaiAGQRhrIgYgAigCABEAAA0ACwwBCwsgB0EYayIGIABHBEAgACAGEJ4BCyAGIAVBCGoiABCeASAAQQRyENcBIAVBIGokACAHIQAMAQsLIAEhBiMAQSBrIgkkACAJIAAoAgA2AgggCSAAKAIENgIMIAkgACgCCDYCECAAQgA3AgQgCSAAKwMQOQMYIAAhBwNAIAciBUEYaiIHIAlBCGogAigCABEAAA0ACwJAIAAgBUYEQANAIAYgB00NAiAGQRhrIgYgCUEIaiACKAIAEQAARQ0ADAILAAsDQCAGQRhrIgYgCUEIaiACKAIAEQAARQ0ACwsgBiEFIAchCANAIAUgCEsEQCAIIAUQuAEDQCAIQRhqIgggCUEIaiACKAIAEQAADQALA0AgBUEYayIFIAlBCGogAigCABEAAEUNAAsMAQsLIAhBGGsiCCAARwRAIAAgCBCeAQsgCCAJQQhqIgUQngEgDSAGIAdNOgAMIA0gCDYCCCAFQQRyENcBIAlBIGokACANKAIIIQYCQCANLQAMQQFHDQAgACAGIAIQjA0hBSAGQRhqIgcgASACEIwNBEAgBiEBIAVFDQMMAgsgBUUNACAHIQAMAgsgACAGIAIgAyAKEI8NIAZBGGohAEEAIQQMAQsLIA1BEGokAAsNACAAQczPCjYCACAAC3gCAn8CfAJAIAAoAgQiA0UEQCAAQQRqIgAhAgwBCyACKAIAIgQrAwghBQNAIAUgAyIAKAIQIgIrAwgiBmNFIAIgBE0gBSAGZHJxRQRAIAAhAiAAKAIAIgMNAQwCCyAAKAIEIgMNAAsgAEEEaiECCyABIAA2AgAgAgt1AQN/IAAgACgCBCIDNgIIIAMEQAJAIAMoAggiAUUEQEEAIQEMAQsCQCADIAEoAgAiAkYEQCABQQA2AgAgASgCBCICDQEMAgsgAUEANgIEIAJFDQELA0AgAiIBKAIAIgINACABKAIEIgINAAsLIAAgATYCBAsLGwEBfyAAKAIAIQEgAEEANgIAIAEEQCABEBgLC0MBAn8gACgCBCECA0AgACgCCCIBIAJHBEAgACABQRhrNgIIIAFBFGsQ1wEMAQsLIAAoAgAiAQRAIAAoAgwaIAEQGAsLzQIBBH8gACgCBCEDIAAoAgAhBSABKAIEIQQjAEEgayICJAAgAiAENgIcIAIgBDYCGCACQQA6ABQgAiAAQQhqNgIIIAIgAkEcajYCECACIAJBGGo2AgwDQCADIAVHBEAgBEEYayIEIANBGGsiAygCADYCACAEIAMoAgQ2AgQgBCADKAIINgIIIANCADcCBCAEIAMrAxA5AxAgAiACKAIcQRhrIgQ2AhwMAQsLIAJBAToAFCACLQAURQRAIAIoAggaIAIoAhAoAgAhAyACKAIMKAIAIQUDQCADIAVHBEAgA0EEahDXASADQRhqIQMMAQsLCyACQSBqJAAgASAENgIEIAAoAgAhAiAAIAQ2AgAgASACNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAtdAQF/IAAgAzYCECAAQQA2AgwgAQRAIAFBq9Wq1QBPBEAQ5AcACyABQRhsEIcBIQQLIAAgBDYCACAAIAQgAkEYbGoiAjYCCCAAIAQgAUEYbGo2AgwgACACNgIEIAALowECAX8BfEHAABCHASIEQgA3AgQgBEHMzwo2AgAgASgCACEBIAMrAwAhBSAEQgA3AiwgBCAFOQMYIAQgAjYCFCAEIAE2AhAgBEIANwI4IAQgBEEsajYCKCAEIARBOGo2AjQgBEIANwMgIAIrAwggAisDAKFEpVzD8SljPUhjRQRAQbKQA0GF2QBBN0GunwEQAAALIAAgBDYCBCAAIARBEGo2AgALawEDfyMAQRBrIgIkACACIAA2AgwgAigCDCIBKAIABEAgASgCACEDIAEoAgQhAANAIAAgA0cEQCAAQRRrENcBIABBGGshAAwBCwsgASADNgIEIAIoAgwiACgCACAAKAIIGhAYCyACQRBqJAALzAIBBX8jAEEQayICJAACQCAAIAFGDQAgAUEEaiEFIAEoAgAhAQJAIAAoAghFDQAgAiAANgIEIAAoAgAhAyAAIABBBGo2AgAgACgCBEEANgIIIABCADcCBCACIAMoAgQiBCADIAQbNgIIIAJBBGoQkg0DQCACKAIMIgNFIAEgBUZyRQRAIAMgASgCEDYCECAAIAIgA0EQahCRDSEEIAAgAigCACAEIAMQ3QUgAkEEahCSDSABEK0BIQEMAQsLIAMQvwQgAigCCCIDRQ0AA0AgAyIEKAIIIgMNAAsgBBC/BAsgAEEEaiEEA0AgASAFRg0BQRQQhwEhAyACIAQ2AgggAyABKAIQNgIQIAJBAToADCAAIAIgA0EQahCRDSEGIAAgAigCACAGIAMQ3QUgAkEANgIEIAJBBGoQkw0gARCtASEBDAALAAsgAkEQaiQAC3oBBnwgASsDECICIAErAxgiBCACoUQAAAAAAADgP6KgIQUgACsDECIDIAArAxgiBiADoUQAAAAAAADgP6KgIQcgAiAGY0UgBSAHZkVyRQRAIAYgAqEPCyAEIAOhRAAAAAAAAAAAIAUgB2UbRAAAAAAAAAAAIAMgBGMbC0EBAX8jAEEQayICJAAgAkHRAzYCDCAAIAEgAkEMakE+IAEgAGtBGG1nQQF0a0EAIAAgAUcbQQEQjw0gAkEQaiQAC2MBAn8jAEEgayICJAACQCAAKAIIIAAoAgAiA2tBGG0gAUkEQCABQavVqtUATw0BIAAgAkEMaiABIAAoAgQgA2tBGG0gAEEIahCWDSIAEJUNIAAQlA0LIAJBIGokAA8LEMIEAAuqBgEGfwJ/AkAgASIDKAIAIgUEQCADKAIERQ0BIAMQrQEiAygCACIFDQELIAMoAgQiBQ0AIAMoAgghBEEAIQVBAQwBCyAFIAMoAggiBDYCCEEACyEGAkAgBCgCACICIANGBEAgBCAFNgIAIAAgA0YEQEEAIQIgBSEADAILIAQoAgQhAgwBCyAEIAU2AgQLIAMtAAwhByABIANHBEAgAyABKAIIIgQ2AggCQCAEKAIAIAFGBEAgBCADNgIADAELIAQgAzYCBAsgAyABKAIAIgQ2AgAgBCADNgIIIAMgASgCBCIENgIEIAQEQCAEIAM2AggLIAMgAS0ADDoADCADIAAgACABRhshAAsgAEUgB0EBcUVyRQRAIAYEQANAIAItAAwhAwJAIAIoAggiASgCACACRwRAIANBAXFFBEAgAkEBOgAMIAFBADoADCABEMEEIAIgACAAIAIoAgAiAUYbIQAgASgCBCECCwJAAkACQAJAIAIoAgAiAQRAIAEtAAxBAUcNAQsgAigCBCIDBEAgAy0ADEEBRw0CCyACQQA6AAwgACACKAIIIgJHBEAgAi0ADA0GCyACQQE6AAwPCyACKAIEIgNFDQELIAMtAAxBAUcNAQsgAUEBOgAMIAJBADoADCACEMAEIAIoAggiAigCBCEDCyACIAIoAggiAC0ADDoADCAAQQE6AAwgA0EBOgAMIAAQwQQPCyADQQFxRQRAIAJBAToADCABQQA6AAwgARDABCACIAAgACACKAIEIgFGGyEAIAEoAgAhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMIgFBAUcNAQsCQCACKAIEIgEEQCABLQAMQQFHDQELIAJBADoADCACKAIIIgItAAxBAUYgACACR3ENBSACQQE6AAwPCyADRQ0CIAMtAAxBAXENAQwDCyABRQ0CCyACKAIEIQELIAFBAToADCACQQA6AAwgAhDBBCACKAIIIgIoAgAhAwsgAiACKAIIIgAtAAw6AAwgAEEBOgAMIANBAToADCAAEMAEDwsgAigCCCIBIAIgASgCAEZBAnRqKAIAIQIMAAsACyAFQQE6AAwLCy0BAX8gACgCACIBBEAgACABNgIEIAAoAggaIAEQGCAAQQA2AgggAEIANwIACwsZACAAQYjPCjYCACAAQSRqEIICGiAAEOsHCw0AIAAtABhBf3NBAXELgQMCCn8BfCMAQSBrIgIkACAAQQhqIQQgACgCBCEBA0AgASAERwRAIAEoAhAiAyADEK8NIgs5AyAgAyALIAMrAxijOQMQIAEQrQEhAQwBCwsgAEEANgIgIABBJGohByAAQQhqIQggAEEEaiEEIAAoAgQhAwJAA0AgAyAIRwRAIAIgAygCEBCrDSIBNgIcAkAgAUUNACABKwMQREivvJry13q+Y0UNACAAIAAoAiBBAWo2AiAgASgCACgCICEFIAJBADYCGCACQQA2AhQgASgCACgCICABKAIEKAIgRw0DIAUrAxAhCyAFIAJBGGoi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AyAAKAIQIQEoAhAtAHRBAXENACAHIAErA1igIQcgCCABKwM4oCEICyABIAc5A4ABIAEgCDkDeCAAEGAgAEcEQCAFIAAoAhAiACgC6AFByABsaiIBIAErAxgiCSAHIAcgCWMbOQMYIAUgACgC7AFByABsaiIAIAArAxAiByAIIAcgCGQbOQMQCyADC3ABAn9BASEEA0AgBCAAKAIQIgMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQ7A0gBEEBaiEEDAELCyADIAEgAysDEKI5AxAgAyACIAMrAxiiOQMYIAMgASADKwMgojkDICADIAIgAysDKKI5AygL5QQCCH8EfEEBIQIDQCACIAAoAhAiAygCtAFKRQRAIAMoArgBIAJBAnRqKAIAIAEQ7Q0gAkEBaiECDAELCyAAEGAhAiAAKAIQIQMCQCAAIAJGBEAgAygC7AEhBUQAAMD////fwSEKRAAAwP///99BIQsgAygC6AEiCCEEA0AgBCAFSgRAIAMoArQBIgBBACAAQQBKG0EBaiEAQQEhAgNAIAAgAkYNBCAKIAMoArgBIAJBAnRqKAIAKAIQIgQrAyBEAAAAAAAAIECgIgwgCiAMZBshCiALIAQrAxBEAAAAAAAAIMCgIgwgCyAMYxshCyACQQFqIQIMAAsABQJAIAMoAsQBIARByABsaiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQcgAbGooAgQoAgAoAhArAxghDCAAIAhByABsaigCBCgCACgCECsDGCENIAMgCjkDICADIAs5AxAgAyANIAMrA4ABoDkDKCADIAwgAysDeKE5AxgLogECAnwBfwJAAn9B/////wcgAEGCIRAmIgNFDQAaIAAQ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KGQEQCAFIAs5AyggBSALOQMYCyALIAUrAyBkBEAgBSALOQMgIAUgCzkDEAsCQCAGKALoASIBRQ0AAkAgACABRgRARAAAAAAAAAAAIQwMAQsgAUHs2AooAgBBCEEAEGG3IQwgCigCECEGCyAGKAL0ASIDIAEoAhAiASgC6AFGBEAgASABKwOAASALIAygECM5A4ABCyADIAEoAuwBRw0AIAEgASsDeCALIAygECM5A3gLIAJBAWohAgwACwALCyAAEOsNIQcgBCAAKAIQIgIoAuwBIgFByABsaiIDKAIEKAIAKAIQIAMrAxA5AxggAigC6AEhCkQAAAAAAAAAACELA0AgASAKSgRAIAQgAUEBayIDQcgAbGoiBigCACAEIAFByABsaiIBKwMoIAYrAyCgIAIoAvwBt6AgASsDGCAGKwMQoEQAAAAAAAAgQKAQIyENQQBKBEAgBigCBCgCACgCECANIAEoAgQoAgAoAhArAxigOQMYCyALIA0QIyELIAMhAQwBCwsCQCAHRQ0AIAItAHRBAXFFDQAgAEEAEOoNIAAoAhAiAi0AlAJBAUcNACAEIAIoAuwBIgFByABsaigCBCgCACgCECsDGCEMIAIoAugBIQBEAAAAAAAAAAAhCwNAIAAgAU4NASALIAFByABsIARqQcQAaygCACgCACgCECsDGCINIAyhECMhCyABQQFrIQEgDSEMDAALAAsCQCACLQCUAkEBRw0AIAIoAugBIQggAigC7AEhAwNAIAMiACAITA0BIAQgAEEBayIDQcgAbGoiASgCAEEATA0AIAEoAgQoAgAoAhAgCyAEIABByABsaigCBCgCACgCECsDGKA5AxgMAAsACyACQcABaiEBA0AgASgCACIABEAgACgCECIAIAQgACgC9AFByABsaigCBCgCACgCECsDGDkDGCAAQbgBaiEBDAELCwv4NAMQfwh8AX4jAEEQayIPJAACQCAAKAIQKALAAUUNACAAEIcIIAAQ9Q1BrNgKLQAAQQFGBEAjAEGgAWsiCCQAAkAgACgCECIBKALsASABKALoAWtBAkgNACABKALEASEEQQEhAgNAIAQgAkEBaiIFQcgAbGooAgAEQEEAIQMDQCAEIAJByABsIglqIgYoAgAgA0wEQCAFIQIMAwUCQCAGKAIEIANBAnRqKAIAIgsQgA5FDQAgAyEBA0AC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QcD7Ci0AAEHA+wpBAToAAEEBcQ0EQZnmA0EAECogBRAhIQMgABCBAiEFIAIgCBAhNgLoBCACQbbfAUHUngMgBRs2AuQEIAIgAzYC4ARBl+8DIAJB4ARqEH8MBAsDQCADIAtGBEAgB0EBcQRAIAJB2O0JQeDtCSAAEIECGygCADYCjAVBACEDQeb8ACACQYwFakEAEOIBIgdBkCZBmAJBARA1GiAHQQBBufQAQZWABRAiGkEBQeAAEBohCSAHKAIQIgQgCTYCCCAJIAAoAhAiBigCCCIKKwMAOQMAIAkgCisDGDkDGCAEIAYtAHM6AHMgBCAGKAJ0QX9zQQFxNgJ0IAQgBigC+AE2AvgBIAQgBigC/AE2AvwBQQAhBgNAIAAQOUEBIAYQ5gMiBgRAIAYoAgwQdSAGKAIMIQQgBigCCCEJBH8gB0EBIAkgBBDoAwUgB0EBIAkgBBAiCxoMAQsLA0AgABA5QQIgAxDmAyIDBEAgAygCDBB1IAMoAgwhBCADKAIIIQYEfyAHQQIgBiAEEOgDBSAHQQIgBiAEECILGgwBCwsgB0ECQb0cQQAQIkUEQCAHQQJBvRxBlYAFECIaCyAHQQJBgRxBABAiRQRAIAdBAkGBHEGVgAUQIhoLQdzYCigCACEgQcDYCigCACEhQczZCigCACEiQZjZCigCACEXQbzZCigCACEwQbjZCigCACExQbDZCigCACEyQbTZCigCACEzQajZCigCACE0QaTZCigCACE1QazZCigCACE2QaDZCigCACE3QZTZCigCACE4QZDZCigCACE5QYzZCigCACE6QYjZCigCACE7QYTZCigCACE8QZzZCigCACE9QfjYCigCACE+QfTYCigCACE/QfDYCigCACFAQYTaCigCACFBQbjaCigCACFCQdDaCigCACFDQbzaCigCACFEQcDaCigCACFFQcTaCigCACFGQajaCigCACFHQYDaCigCACFIQbTaCigCACFJQdTaCigCACFKQfTZCigCACFLQfjZCigCACFMQfzZCigCACFNQejZCigCACFOQeTZCigCACFPQbDaCigCACFQQazaCigCACFRQYjaCigCACFSQZzaCigCACFTQZzaCkEANgIAQYjaCiAHQQJBzDdBABAiNgIAQazaCiAHQQJB0rABQQAQIjYCAEGw2gogB0ECQZfvAEEAECI2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AEGQzgBOGyISQQVsQQNqEE0iAEUNASAAIAIgDiACayIEQQFqIgUQICIAIBJBA2pBBG1BAnRqIBQgBUECdCIGECAhFCAKQdAGaiACRwRAIAIQGAsgBSASTg0DIAAgBGohDiAGIBRqQQRrIQcgACECCyANQQZGDQQCfwJAAkACQAJAIA1BsJAFai0AACIJQe4BRg0AAn8gAUF+RgRAAn8jAEEwayIMJAAgAyAKQZwIajYCXCADKAIoRQRAIANBATYCKCADKAIsRQRAIANBATYCLAsgAygCBEUEQCADQazzCCgCADYCBAsgAygCCEUEQCADQbDzCCgCADYCCAsCQCADKAIUIgAEQCAAIAMoAgxBAnRqKAIADQELIAMQvgkgAygCBCADELgJIQAgAygCFCADKAIMQQJ0aiAANgIACyADEO8ECyADQcQAaiEYIANBJGohDwNAIAMoAiQiCCADLQAYOgAAIAMoAhQgAygCDEECdGooAgAoAhwgAygCLGohACAIIQUDQCAFLQAAQaCABWotAAAhASAAQQF0QaCCBWovAQAEQCADIAU2AkQgAyAANgJACwNAIAFB/wFxIQECQANAIAAgAEEBdCIEQYCIBWouAQAgAWpBAXQiBkHggwVqLgEARg0BIARB4IkFai4BACIAQd0ASA0ACyABQcCLBWotAAAhAQwBCwsgBUEBaiEFIAZBgIwFai4BACIAQQF0QYCIBWovAQBB2wFHDQAgACEBA0AgAUEBdEGgggVqLwEAIgBFBEAgAygCRCEFIAMoAkBBAXRBoIIFai8BACEACyADIAg2AlAgAyAFIAhrNgIgIAMgBS0AADoAGCAFQQA6AAAgAyAFNgIkIADBIQACfwNAAkBBACEBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAOKQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQnJycnJQsgBSADLQAYOgAAIAMoAkAhASAYDC4LIAMoAiAiAEEASg0kQX8hAQwlCyADKAIgIgBBAEoEQCADKAIUIAMoAgxBAnRqKAIAIAMoAlAgAGpBAWstAABBCkY2AhwLIAMoAgAiACAAKAIU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AygCACACIAMpAgg3A+ADIAIgAykCADcD2AMgAkHYA2ogBRAZQQJ0aigCACgCMCsDCCADKAIAIAIgAykCCDcD0AMgAiADKQIANwPIAyACQcgDaiAAEBlBAnRqKAIAKAIwKwMIYgshBCADKAIAIAIgAykCCDcDwAMgAiADKQIANwO4AyACQbgDaiAFEBlBAnRqKAIAIQcgAygCACEGIAIgAykCCDcDsAMgAiADKQIANwOoAyACQagEaiIIIAcgBiACQagDaiAAEBlBAnRqKAIAQQAgBBCWDg0FIAMoAgAgAiADKQIINwOgAyACIAMpAgA3A5gDIAIoAqwEIQkgAigCqAQhBiACQZgDaiAFEBlBAnRqKAIAIQcgAygCACELIAIgAykCCDcDkAMgAiADKQIANwOIAyAIIAcgCyACQYgDaiAAEBlBAnRqKAIAQQEgBEUiBxCWDg0FIAIoAqwEIQggAigCqAQhCwJAAkACQCAJQQFqDgMAAQIDCyADKAIAIAIgAykCCDcDYCACIAMpAgA3A1ggAkHYAGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDUCACIAMpAgA3A0ggAkHIAGogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAkFAayADKQIINwMAIAIgAykCADcDOCACQThqIAAQGUECdGooAgAgAygCACACIAMpAgg3AzAgAiADKQIANwMoIAJBKGogBRAZQQJ0aigCACAHQQEgCyABELkCIAhBAUcNAiADKAIAIAIgAykCCDcDICACIAMpAgA3AxggAkEYaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwMQIAIgAykCADcDCCACQQhqIAAQGUECdGooAgAgByABEJUODAILAkACQAJAIAhBAWoOAwABAgQLIAMoAgAgAiADKQIINwOgASACIAMpAgA3A5gBIAJBmAFqIAAQGUECdGooAgAgAygCACACIAMpAgg3A5ABIAIgAykCADcDiAEgAkGIAWogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAiADKQIINwOAASACIAMpAgA3A3ggAkH4AGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDcCACIAMpAgA3A2ggAkHoAGogBRAZQQJ0aigCACAHQQEgCyABELkCDAMLIAMoAgAgAiADKQIINwPgASACIAMpAgA3A9gBIAJB2AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ABIAIgAykCADcDyAEgAkHIAWogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPAASACIAMpAgA3A7gBIAJBuAFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A7ABIAIgAykCADcDqAEgAkGoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAILIAMoAgAgAiADKQIINwOgAiACIAMpAgA3A5gCIAJBmAJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A5ACIAIgAykCADcDiAIgAkGIAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwOAAiACIAMpAgA3A/gBIAJB+AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ABIAIgAykCADcD6AEgAkHoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAELIAMoAgAgAiADKQIINwOAAyACIAMpAgA3A/gCIAJB+AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ACIAIgAykCADcD6AIgAkHoAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPgAiACIAMpAgA3A9gCIAJB2AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ACIAIgAykCADcDyAIgAkHIAmogABAZQQJ0aigCAEEBIAcgCyABELkCIAhBf0cNACADKAIAIAIgAykCCDcDwAIgAiADKQIANwO4AiACQbgCaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwOwAiACIAMpAgA3A6gCIAJBqAJqIAAQGUECdGooAgAgByABEJUOCyAAQQFqIQAgCigAICEEDAALAAsACwsgDCgCACEMDAELCyACQbAEaiQAQX9BACAMGwurAgELfyMAQSBrIgEkACAAELABIQYDQAJAIAZFDQAgBigCEBCwASECA0AgAgRAIAIoACAiBwRAIAJBGGohAyAHQQFrIQogAigCMCEIQQAhAANAAkAgAEEBaiIJIQQgACAKRg0AA0AgBCAHRgRAIAkhAAwDCyADKAIAIAEgAykCCDcDGCABIAMpAgA3AxAgAUEQaiAAEBlBAnRqKAIAIAMoAgAgASAD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IANBoAFqEDIgAUEBaiEBDAELAAsAC0G+mANBjbwBQcwDQYCJARAAAAsgDiADKAKUAkHIABAaIg82AgggDiADKAKUAiIRNgIAQQAhAQNAIAEgEUYEQCAGEBggAysDsAIhGyADKwOoAiEcIAMrA6ACIR0gAysDmAIhH0EBQRgQGiIEQQA2AgAgBCARQQJ0IgBBAnJBKBAaNgIQQZzNCkG06wkoAgAQkgEhC0G0zQpBtOsJKAIAEJIBIQkgAEEgEBohDCAAQQQQGiEGQQAhAANAIAAgEUYEQEEAIQYDQCAGIApHBEAgA0IANwPIAiADQgA3A8ACIANCADcDuAIgAyACIAZByABsaiIBKQMwNwPYAiADIAEpAyg3A9ACIAkgA0HQAmpBgAQgCSgCABEDACEAA0ACQCAARQ0AIAArAwggASsDOGNFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhggCSAAQQggCSgCABEDACEADAELCyALIANB0AJqQYAEIAsoAgARAwAhAANAAkAgASsDQCEbIABFDQAgACsDECAbY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCGCALIABBCCALKAIAEQMAIQAMAQsLIAMgGzkD2AIgCSADQdACakGABCAJKAIAEQMAIQADQAJAIAErAzghGyAARQ0AIAArAwggG2NFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhQgCSAAQQggCSgCABEDACEADAELCyADIBs5A9ACIAMgASsDMDkD2AIgCyADQdACakGABCALKAIAEQMAIQADQAJAIABFDQAgACsDECABKwNAY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCFCALIABBCCALKAIAEQMAIQAMAQsLIANBuAJqIAFBJGogAUEgakEEEMYBIAEoAiAiACAQIAAgEEsbIRAgBkEBaiEGDAELCwNAIAogDUYEQCAEKAIQIAQoAgAiAEEobGoiASAANgIgIAEgAEEBajYCSEEAIQIgBCgCAEEGbCAQQQF0akEE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BiAEQdgXaiACKQIINwMAIAQgAikCADcD0BcCQCAGIARB0BdqIAwQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARByBdqIAIpAgg3AwAgBCACKQIANwPAFyAEQcAXaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEG4F2ogAikCCDcDACAEIAIpAgA3A7AXIARBsBdqIAYQGUHIAGxqIAw2AiwLIAIoAgAhBiAEQagXaiACKQIINwMAIAQgAikCADcDoBcCQCAGIARBoBdqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBmBdqIAIpAgg3AwAgBCACKQIANwOQFyAEQZAXaiAGEBlByABsaigCKCAFRw0AIAIoAgAgBEGIF2ogAikCCDcDACAEIAIpAgA3A4AXIARBgBdqIAYQGUHIAGxqIAw2AigLIAIoAgAhBiAEQfgWaiACKQIINwMAIAQgAikCADcD8BYCQCAGIARB8BZqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARB6BZqIAIpAgg3AwAgBCACKQIANwPgFiAEQeAWaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEHYFmogAikCCDcDACAEIAIpAgA3A9AWIARB0BZqIAYQGUHIAGxqIAw2AiwLIAMQ8AEhCSADEPABIQcgAigCACAEQcgWaiACKQIINwMAIAQgAikCADcDwBYgBEHAFmogBRAZQcgAbGooAjghBiADKAIAIARBuBZqIAMpAgg3AwAgBCADKQIANwOwFiAEQbAWaiAGEBlBKGxqQQI2AgAgAygCACAEQagWaiADKQIINwMAIAQgAykCADcDoBYgBEGgFmogBhAZQShsaiILIAQpA9gZNwMIIAsgBEHgGWopAwA3AxAgAygCACAEQZgWaiADKQIINwMAIAQgAykCADcDkBYgBEGQFmogBhAZQShsaiAANgIEIAMoAgAgBEGIFmogAykCCDcDACAEIAMpAgA3A4AWIARBgBZqIAYQGUEobGogBzYCICADKAIAIARB+BVqIAMpAgg3AwAgBCADKQIANwPwFSAEQfAVaiAGEBlBKGxqIAk2AiQgAygCACAEQegVaiADKQIINwMAIAQgAykCADcD4BUgBEHgFWogCRAZQShsakEDNgIAIAMoAgAgBEHYFWogAykCCDcDACAEIAMpAgA3A9AVIARB0BVqIAkQGUEobGogBTYCGCADKAIAIARByBVqIAMpAgg3AwAgBCADKQIANwPAFSAEQcAVaiAJEBlBKGxqIAY2AhwgAygCACAEQbgVaiADKQIINwMAIAQgAykCADcDsBUgBEGwFWogBxAZQShsakEDNgIAIAMoAgAgBEGoFWogAykCCDcDACAEIAMpAgA3A6AVIARBoBVqIAcQGUEobGogDDYCGCADKAIAIARBmBVqIAMpAgg3AwAgBCADKQIANwOQFSAEQZAVaiAHEBlBKGxqIAY2AhwgAigCACAEQYgVaiACKQIINwMAIAQgAikCADcDgBUgBEGAFWogBRAZQcgAbGogCTYCOCACKAIAIARB+BRqIAIpAgg3AwAgBCACKQIANwPwFCAEQfAUaiAMEBlByABsaiAHNgI4CyABQTBBLCAKGyIQIAEgAEE4bGpqKAIAQThsai0AICELIAggBEHYGWogBCgCgBogASADEPIFIQkgC0UEQCACELcDIQUgAigCACEGIARB6BRqIAIpAgg3AwAgBCACKQIANwPgFCACQRhqIAYgBEHgFGogCRAZQcgAbGpByAAQICEHIARB2BRqIAIpAgg3AwAgBCACKQIANwPQFCAEQdAUaiAFEBkhBgJAAkAgAigCECIKDgIBAwALIARBiBRqIg0gAigCACAGQcgAbGpByAAQIBogDSAKEQEACyACKAIAIAZByABsaiAHQcgAECAaIAIoAgAgBEGAFGogAikCCDcDACAEIAIpAgA3A/gTIARB+BNqIAkQGUHIAGxqIgYgCCkDADcDGCAGIAgpAwg3AyAgAigCACAEQfATaiACKQIINwMAIAQgAikCADcD6BMgBEHoE2ogBRAZQcgAbGoiBiAIKQMANwMIIAYgCCkDCDcDECACKAIAIARB4BNqIAIpAgg3AwAgBCACKQIANwPYEyAEQdgTaiAJEBlByABsaiAFNgIwIAIoAgAgBEHQE2ogAikCCDcDACAEIAIpAgA3A8gTIARByBNqIAkQGUHIAGxqQQA2AjQgAigCACAEQcATaiACKQIINwMAIAQgAikCADcDuBMgBEG4E2ogBRAZQcgAbGogCTYCKCACKAIAIARBsBNqIAIpAgg3AwAgBCACKQIANwOoEyAEQagTaiAFEBlByABsakEANgIsIAIoAgAhBiAEQaATaiACKQIINwMAIAQgAikCADcDmBMCQCAGIARBmBNqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARBkBNqIAIpAgg3AwAgBCACKQIANwOIEyAEQYgTaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGAE2ogAikCCDcDACAEIAIpAgA3A/gSIARB+BJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQfASaiACKQIINwMAIAQgAikCADcD6BICQCAGIARB6BJqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARB4BJqIAIpAgg3AwAgBCACKQIANwPYEiAEQdgSaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHQEmogAikCCDcDACAEIAIpAgA3A8gSIARByBJqIAYQGUHIAGxqIAU2AiwLIAIoAgAhBiAEQcASaiACKQIINwMAIAQgAikCADcDuBICQCAGIARBuBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBsBJqIAIpAgg3AwAgBCACKQIANwOoEiAEQagSaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGgEmogAikCCDcDACAEIAIpAgA3A5gSIARBmBJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQZASaiACKQIINwMAIAQgAikCADcDiBICQCAGIARBiBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBgBJqIAIpAgg3AwAgBCACKQIANwP4ESAEQfgRaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHwEWogAikCCDcDACAEIAIpAgA3A+gRIARB6BFqIAYQGUHIAGxqIAU2AiwLIAMQ8AEhByADEPABIQogAigCACAEQeARaiACKQIINwMAIAQgAikCADcD2BEgBEHYEWogCRAZQcgAbGooAjghBiADKAIAIARB0BFqIAMpAgg3AwAgBCADKQIANwPIESAEQcgRaiAGEBlBKGxqQQI2AgAgAygCACAEQcARaiADKQIINwMAIAQgAykCADcDuBEgBEG4EWogBhAZQShsaiIOIAgpAwA3AwggDiAIKQMINwMQIAMoAgAgBEGwEWogAykCCDcDACAEIAMpAgA3A6gRIARBqBFqIAYQGUEobGogADYCBCADKAIAIARBoBFqIAMpAgg3AwAgBCADKQIANwOYESAEQZgRaiAGEBlBKGxqIAo2AiAgAygCACAEQZARaiADKQIINwMAIAQgAykCADcDiBEgBEGIEWogBhAZQShsaiAHNgIkIAMoAgAgBEGAEWogAykCCDcDACAEIAMpAgA3A/gQIARB+BBqIAcQGUEobGpBAzYCACADKAIAIARB8BBqIAMpAgg3AwAgBCADKQIANwPoECAEQegQaiAHEBlBKGxqIAk2AhggAygCACAEQeAQaiADKQIINwMAIAQgAykCADcD2BAgBEHYEGogBxAZQShsaiAGNgIcIAMoAgAgBEHQEGogAykCCDcDACAEIAMpAgA3A8gQIARByBBqIAoQGUEobGpBAzYCACADKAIAIARBwBBqIAMpAgg3AwAgBCADKQIANwO4ECAEQbgQaiAKEBlBKGxqIAU2AhggAygCACAEQbAQaiADKQIINwMAIAQgAykCADcDqBAgBEGoEGogChAZQShsaiAGNgIcIAIoAgAgBEGgEGogAikCCDcDACAEIAIpAgA3A5gQIARBmBBqIAkQGUHIAGxqIAc2AjggAigCACAEQZAQaiACKQIINwMAIAQgAikCADcDiBAgBEGIEGogBRAZQcgAbGogCjYCOAsgDyAQaiETIAJBGGohFEEAIRAgDCEFQQAhDgNAAkACQCAFIghBAWtBfUsNACACKAIAIQUgBEGAEGogAikCCDcDACAEIAIpAgA3A/gPIARB+A9qIAgQGSEGIAIoAgAhByAEQfAPaiACKQIINwMAIAQgAikCADcD6A8gBEHoD2ogCRAZIQoCQCAFIAZByABsaiIFKwAgIhUgByAKQcgAbGoiBisAICIWREivvJry13o+oGQNACAVIBZESK+8mvLXer6gY0UgBSsAGCIXIAYrABgiGGRxDQAgFSAWoZlESK+8mvLXej5lRSAXIBihmURIr7ya8td6PmVFcg0BCyACKAIAIARB4A9qIAIpAgg3AwAgBCACKQIANwPYDyAEQdgPaiAIEBlByABsaigCOCEFIAMQ8AEhByADEPABIQogAygCACAEQdAPaiADKQIINwMAIAQgAykCADcDyA8gBEHID2ogBRAZQShsakEBNgIAIAMoAgAgBEHAD2ogAykCCDcDACAEIAMpAgA3A7gPIARBuA9qIAUQGUEobGogADYCBCADKAIAIARBsA9qIAMpAgg3AwAgBCADKQIANwOoDyAEQagPaiAFEBlBKGxqIAc2AiAgAygCACAEQaAPaiADKQIINwMAIAQgAykCADcDmA8gBEGYD2ogBRAZQShsaiAKNgIkIAMoAgAgBEGQD2ogAykCCDcDACAEIAMpAgA3A4gPIARBiA9qIAcQGUEobGpBAzYCACADKAIAIARBgA9qIAMpAgg3AwAgBCADKQIANwP4DiAEQfgOaiAHEBlBKGxqIAg2AhggAygCACAEQfAOaiADKQIINwMAIAQgAykCADcD6A4gBEHoDmogBxAZQShsaiAFNgIcIAMoAgAgBEHgDmogAykCCDcDACAEIAMpAgA3A9gOIARB2A5qIAoQGUEobGpBAzYCACACELcDIQYgAygCACAEQdAOaiADKQIINwMAIAQgAykCADcDyA4gBEHIDmogChAZQShsaiAGNgIYIAIoAgAgBEHADmogAikCCDcDACAEIAIpAgA3A7gOIARBuA5qIAYQGUHIAGxqQQE6AEQgAygCACAEQbAOaiADKQIINwMAIAQgAykCADcDqA4gBEGoDmogChAZQShsaiAFNgIcIAIoAgAgBEGgDmogAikCCDcDACAEIAIpAgA3A5gOIARBmA5qIAgQGSACKAIAIREgBEGQDmogAikCCDcDACAEIAIpAgA3A4gOIARBiA5qIAkQGSESQcgAbGoiBSsAICEVIBEgEkHIAGxqIg0rACAhFiAFKwAYIRcgDSsAGCEYIAIoAgAhBSAEQYAOaiACKQIINwMAIAQgAikCADcD+A0gFCAFIARB+A1qIAgQGUHIAGxqQcgAECAhDSAEQfANaiACKQIINwMAIAQgAikCADcD6A0gBEHoDWogBhAZIQUCQAJAIAIoAhAiEQ4CAQUACyAEQaANaiISIAIoAgAgBUHIAGxqQcgAECAaIBIgEREBAAsgBiAQIBcgGKGZREivvJry13o+ZRsgECAVIBahmURIr7ya8td6PmUbIRAgBiAOIAggDEYbIQ4gAigCACAFQcgAbGogDUHIABAgGiACKAIAIARBmA1qIAIpAgg3AwAgBCACKQIANwOQDSAEQZANaiAIEBlByABsaiAHNgI4IAIoAgAgBEGIDWogAikCCDcDACAEIAIpAgA3A4ANIARBgA1qIAYQGUHIAGxqIAo2AjggAigCACAEQfgMaiACKQIINwMAIAQgAikCADcD8AwgBEHwDGogCBAZQcgAbGooAjBBAWtBfkkNASACKAIAIARB6AxqIAIpAgg3AwAgBCACKQIANwPgDCAEQeAMaiAIEBlByABsaigCNEEBa0F+SQ0BQdqCBEETQQFBqPMIKAIAEDsaCyAAIAwgCUEBIAIgAxCtDiAAIA4gEEECIAIgAxCtDiAPQQE6ACAgBEGQGmokAA8LIAIoAgAhBSAEQdgMaiACKQIINwMAIAQgAikCADcD0AwCfwJAIAUgBEHQDGogCBAZQcgAbGooAjBBAWtBfUsNACACKAIAIARByAxqIAIpAgg3AwAgBCACKQIANwPADCAEQcAMaiAIEBlByABsaigCNEEBa0F+SQ0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARBuAxqIAIpAgg3AwAgBCACKQIANwOwDCAEQbAMaiAIEBlByABsaisDICEVIAIoAgAhBSAEQagMaiACKQIINwMAIAQgAikCADcDoAwCQAJAIBUgBSAEQaAMaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBmAxqIAIpAgg3AwAgBCACKQIANwOQDCAEQZAMaiAIEBlByABsaisDGCACKAIAIARBiAxqIAIpAgg3AwAgBCACKQIANwOADCAEQYAMaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBEG4C2ogAikCCDcDACAEIAIpAgA3A7ALIAUgBEGwC2ogCBAZQcgAbGooAjAhByAEQagLaiACKQIINwMAIAQgAikCADcDoAsgBSAEQaALaiAHEBlByABsaiAINgIoIAIoAgAgBEGYC2ogAikCCDcDACAEIAIpAgA3A5ALIARBkAtqIAYQGUHIAGxqQX82AjAgAigCACAEQYgLaiACKQIINwMAIAQgAikCADcDgAsgBEGAC2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEH4C2ogAikCCDcDACAEIAIpAgA3A/ALIAUgBEHwC2ogBhAZQcgAbGooAjAhByAEQegLaiACKQIINwMAIAQgAikCADcD4AsgBSAEQeALaiAHEBlByABsaiAGNgIsIAIoAgAgBEHYC2ogAikCCDcDACAEIAIpAgA3A9ALIARB0AtqIAgQGUHIAGxqQX82AjAgAigCACAEQcgLaiACKQIINwMAIAQgAikCADcDwAsgBEHAC2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBEH4CmogAikCCDcDACAEIAIpAgA3A/AKIAUgBEHwCmogCBAZQcgAbGooAjAhByAEQegKaiACKQIINwMAIAQgAikCADcD4AoCQCAFIARB4ApqIAcQGUHIAGxqKAIoQQFrQX1LDQAgAigCACEFIARB2ApqIAIpAgg3AwAgBCACKQIANwPQCiAFIARB0ApqIAgQGUHIAGxqKAIwIQcgBEHICmogAikCCDcDACAEIAIpAgA3A8AKIAUgBEHACmogBxAZQcgAbGooAixBAWtBfUsNACACKAIAIQUgBEG4CmogAikCCDcDACAEIAIpAgA3A7AKIAUgBEGwCmogCBAZQcgAbGooAjAhByAEQagKaiACKQIINwMAIAQgAikCADcDoAogBSAEQaAKaiAHEBlByABsaigCKCEHIAIoAgAhBSAEQZgKaiACKQIINwMAIAQgAikCADcDkAogBSAEQZAKaiAIEBlByABsaigCMCEKIARBiApqIAIpAgg3AwAgBCACKQIANwOACiAFIARBgApqIAoQGUHIAGxqIgVBLGogBUEoaiAHIAhGIgcbKAIAIQogAigCACEFIARB+AlqIAIpAgg3AwAgBCACKQIANwPwCSAFIARB8AlqIAgQGUHIAGxqKAIwIQ0gBEHoCWogAikCCDcDACAEIAIpAgA3A+AJIAUgBEHgCWogDRAZQcgAbGogCjYCPCACKAIAIQUgBEHYCWogAikCCDcDACAEIAIpAgA3A9AJIAUgBEHQCWogCBAZQcgAbGooAjAhCiAEQcgJaiACKQIINwMAIAQgAikCADcDwAkgBSAEQcAJaiAKEBlByABsakEBQQIgBxs2AkALIAIoAgAhBSAEQbgJaiACKQIINwMAIAQgAikCADcDsAkgBSAEQbAJaiAIEBlByABsaigCMCEHIARBqAlqIAIpAgg3AwAgBCACKQIANwOgCSAFIARBoAlqIAcQGUHIAGxqIAg2AiggAigCACEFIARBmAlqIAIpAgg3AwAgBCACKQIANwOQCSAFIARBkAlqIAgQGUHIAGxqKAIwIQcgBEGICWogAikCCDcDACAEIAIpAgA3A4AJIAUgBEGACWogBxAZQcgAbGogBjYCLAsgAigCACAEQfgIaiACKQIINwMAIAQgAikCADcD8AggBEHwCGogCBAZQcgAbGpBMGoMAQsgAigCACEFIARB6AhqIAIpAgg3AwAgBCACKQIANwPgCAJAIAUgBEHgCGogCBAZQcgAbGooAjBBAWtBfkkNACACKAIAIARB2AhqIAIpAgg3AwAgBCACKQIANwPQCCAEQdAIaiAIEBlByABsaigCNEEBa0F9Sw0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARByAhqIAIpAgg3AwAgBCACKQIANwPACCAEQcAIaiAIEBlByABsaisDICEVIAIoAgAhBSAEQbgIaiACKQIINwMAIAQgAikCADcDsAgCQAJAIBUgBSAEQbAIaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBqAhqIAIpAgg3AwAgBCACKQIANwOgCCAEQaAIaiAIEBlByABsaisDGCACKAIAIARBmAhqIAIpAgg3AwAgBCACKQIANwOQCCAEQZAIaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBCACKQIINwPIByAEIAIpAgA3A8AHIAUgBEHAB2ogCBAZQcgAbGooAjQhByAEIAIpAgg3A7gHIAQgAikCADcDsAcgBSAEQbAHaiAHEBlByABsaiAINgIoIAIoAgAgBCACKQIINwOoByAEIAIpAgA3A6AHIARBoAdqIAYQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A5gHIAQgAikCADcDkAcgBEGQB2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEGICGogAikCCDcDACAEIAIpAgA3A4AIIAUgBEGACGogBhAZQcgAbGooAjQhByAEIAIpAgg3A/gHIAQgAikCADcD8AcgBSAEQfAHaiAHEBlByABsaiAGNgIsIAIoAgAgBCACKQIINwPoByAEIAIpAgA3A+AHIARB4AdqIAgQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A9gHIAQgAikCADcD0AcgBEHQB2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBCACKQIINwOIByAEIAIpAgA3A4AHIAUgBEGAB2og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IARB0AVqIBIQGUEobGpBAzYCACAEIAApAwA3A8gFIAQgBCkDoAg3A8AFIAQoAqAIIARBwAVqIBIQGUEobGogBzYCHCAFELcDIQcgBRC3AyEKIAUQtwMhDCAFELcDIQ0gBSgCACAEIAUpAgg3A7gFIAQgBSkCADcDsAUgBEGwBWogBxAZIAQgACkDADcDqAUgBCAEKQOgCDcDoAVByABsaiIIIAQoAqAIIARBoAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A5gFIAQgBSkCADcDkAUgBEGQBWogChAZIAQgACkDADcDiAUgBCAEKQOgCDcDgAVByABsaiIIIAQoAqAIIARBgAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A/gEIAQgBSkCADcD8AQgBEHwBGogDRAZIAQgACkDADcD6AQgBCAEKQOgCDcD4ARByABsaiIIIAQoAqAIIARB4ARqIAkQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A9gEIAQgBSkCADcD0AQgBEHQBGogBxAZIAQgACkDADcDyAQgBCAEKQOgCDcDwARByABsaiIIIAQoAqAIIARBwARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A7gEIAQgBSkCADcDsAQgBEGwBGogChAZIAQgACkDADcDqAQgBCAEKQOgCDcDoARByABsaiIIIAQoAqAIIARBoARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A5gEIAQgBSkCADcDkAQgBEGQBGogDBAZIAQgACkDADcDiAQgBCAEKQOgCDcDgARByABsaiIIIAQoAqAIIARBgARqIAYQGUEobGoiBikDCDcDCCAIIAYpAxA3AxAgBSgCACAEIAUpAgg3A/gDIAQgBSkCADcD8AMgBEHwA2ogDRAZQcgAbGpC//////////f/ADcDECAFKAIAIAQgBSkCCDcD6AMgBCAFKQIANwPgAyAEQeADaiANEBlByABsakL/////////9/8ANwMIIAUoAgAgBCAFKQIINwPYAyAEIAUpAgA3A9ADIARB0ANqIAwQGUHIAGxqQv////////93NwMgIAUoAgAgBCAFKQIINwPIAyAEIAUpAgA3A8ADIARBwANqIAwQGUHIAGxqQv////////93NwMYIAUoAgAgBCAFKQIINwO4AyAEIAUpAgA3A7ADIARBsANqIAcQGUHIAGxqIBM2AgQgBSgCACAEIAUpAgg3A6gDIAQgBSkCADcDoAMgBEGgA2ogChAZQcgAbGogEzYCACAFKAIAIAQgBSkCCDcDmAMgBCAFKQIANwOQAyAEQZADaiAHEBlByABsaiANNgIoIAUoAgAgBCAFKQIINwOIAyAEIAUpAgA3A4ADIARBgANqIAoQGUHIAGxqIA02AiggBSgCACAEIAUpAgg3A/gCIAQgBSkCADcD8AIgBEHwAmogBxAZQcgAbGogDDYCMCAFKAIAIAQgBSkCCDcD6AIgBCAFKQIANwPgAiAEQeACaiAKEBlByABsaiAMNgIwIAUoAgAgBCAFKQIINwPYAiAEIAUpAgA3A9ACIARB0AJqIA0QGUHIAGxqIAc2AjAgBSgCACAEIAUpAgg3A8gCIAQgBSkCADcDwAIgBEHAAmogDBAZQcgAbGogBzYCKCAFKAIAIAQgBSkCCDcDuAIgBCAFKQIANwOwAiAEQbACaiANEBlByABsaiAKNgI0IAUoAgAgBCAFKQIINwOoAiAEIAUpAgA3A6ACIARBoAJqIAwQGUHIAGxqIAo2AiwgBSgCACAEIAUpAgg3A5gCIAQgBSkCADcDkAIgBEGQAmogBxAZQcgAbGogETYCOCAFKAIAIAQgBSkCCDcDiAIgBCAFKQIANwOAAiAEQYACaiAKEBlByABsaiASNgI4IAUoAgAgBCAFKQIINwP4ASAEIAUpAgA3A/ABIARB8AFqIAwQGUHIAGxqIBA2AjggBSgCACAEIAUpAgg3A+gBIAQgBSkCADcD4AEgBEHgAWogDRAZQcgAbGogDzYCOCAFKAIAIAQgBSkCCDcD2AEgBCAFKQIANwPQASAEQdABaiAHEBlByABsakEBOgBEIAUoAgAgBCAFKQIINwPIASAEIAUpAgA3A8ABIARBwAFqIAoQGUHIAGxqQQE6AEQgBSgCACAEIAUpAgg3A7gBIAQgBSkCADcDsAEgBEGwAWogDBAZQcgAbGpBAToARCAFKAIAIAQgBSkCCDcDqAEgBCAFKQIANwOgASAEQaABaiANEBlByABsakEBOgBEIAQgACkDADcDmAEgBCAEKQOgCDcDkAEgBCgCoAggBEGQAWogDxAZQShsaiANNgIYIAQgACkDADcDiAEgBCAEKQOgCDcDgAEgBCgCoAggBEGAAWogEBAZQShsaiAMNgIYIAQgACkDADcDeCAEIAQpA6AINwNwIAQoAqAIIARB8ABqIBEQGUEobGogBzYCGCAEIAApAwA3A2ggBCAEKQOgCDcDYCAEKAKgCCAEQeAAaiASEBlBKGxqIAo2AhggDkEBOgAgIAFBACABQQBKG0EBaiEMQQEhAANAIAAgDEZFBEAgAiAAQThsaiIGIAk2AiQgBiAJNgIoIABBAWohAAwBCwsgAbchFEEAIQYDQCAURAAAAAAAAPA/ZgRAIAZBAWohBiAUEKwHIRQMAQsLQQEgBiAGQQFNGyENQQEhAEEBIQcDQCAHIA1HBEAgASAHQQFrEI4IIQkgACABIAcQjggiCiAJIAkgCkgbaiAJayEJA0AgACAJRgRAQQEhCgNAIAogDEcEQCACIApBOGxqIgAtACBFBEAgACAAIABBEGoiDiAAKAIkIAIgBEGgCGoiCBDyBSIPNgIkIAUoAgAhECAEIAUpAgg3A1ggBCAFKQIANwNQIAAgECAEQdAAaiAPEBlByABsaigCODYCJCAAIA4gACAAKAIoIAIgCBDyBSIONgIoIAUoAgAhDyAEIAUpAgg3A0ggBCAFKQIANwNAIAAgDyAEQUBrIA4QGUHIAGxqKAI4NgIoCyAKQQFqIQoMAQsLIAdBAWohByAJIQAMAwUgAyAAQQJ0aigCACACIAUgBEGgCGoQrg4gAEEBaiEADAELAAsACwsgASAGQQFrEI4IIgkgASABIAlIGyAJayAAaiEBA0AgACABRgRAAkBBACEAA0AgACAEKAKoCE8NASAEIARBqAhqKQMANwM4IAQgBCkDoAg3AzAgBEEwaiAAEBkhAQJAAkACQCAEKAKwCCICDgICAAELQb6ABEHCAEEBQajzCCgCABA7GhA8AAsgBEEIaiIDIAQoAqAIIAFBKGxqQSgQIBogAyACEQEACyAAQQFqIQAMAAsACwUgAyAAQQJ0aigCACACIAUgBEGgCGoQrg4gAEEBaiEADAELCyAEQaAIaiIAQSgQMyAAEDggBEGQCWokAAuLAgEFfyMAQfAAayIDJABBASEEA0AgBCABKAIQIgUoArQBSkUEQCAFKAK4ASAEQQJ0aigCACEFIANBIGoiBiACQSgQIBogA0HIAGoiByAFIAYQsA4gAiAHQSgQIBogBEEBaiEEDAELCwJAIAEQOSABRg0AIAEoAhAoAgwiAUUNACABLQBRQQFHDQAgAigCICEEIAMgAikDCDcDCCADIAIpAxA3AxAgAyACKQMYNwMYIAMgAikDADcDACADQcgAaiABIAQgAxD/AyACIAMpA2A3AxggAiADKQNYNwMQIAIgAykDUDcDCCACIAMpA0g3AwAgAiAEQShqNgIgCyAAIAJBKBAgGiADQfAAaiQAC18BA38CQCAAEDkgAEYNACAAKAIQKAIMIgFFDQAgAS0AUSECC0EBIQEDfyAAKAIQIgMoArQBIAFIBH8gAgUgAygCuAEgAUECdGooAgAQsQ4gAmohAiABQQFqIQEMAQsLC5MCAgN/A3wCQCAAEDkgAEYNACAAKAIQIgEoAgwiAkUNACACLQBRDQACfyABLQCTAiIDQQFxBEAgASsDKCABKwNYRAAAAAAAAOC/oqAhBSABQdAAagwBCyABKwMYIAErAzhEAAAAAAAA4D+ioCEFIAFBMGoLKwMAIQQCfCADQQRxBEAgASsDICAERAAAAAAAAOC/oqAMAQsgASsDECEGIAREAAAAAAAA4D+iIAagIANBAnENABogBiABKwMgoEQAAAAAAADgP6ILIQQgAkEBOgBRIAIgBTkDQCACIAQ5AzgLQQEhAQNAIAEgACgCECICKAK0AUpFBEAgAigCuAEgAUECdGooAgAQsg4gAUEBaiEBDAELCwuVAgIDfwJ8AkAgABA5IABGDQAgACgCECIBKAIMIgJFDQAgAi0AUQ0AAn8gAS0AkwIiA0EBcQRAIAErAyAgASsDQEQAAAAAAADgv6KgIQUgAUHIAGoMAQsgASsDECABKwNgRAAAAAAAAOA/oqAhBSABQegAagsrAwAhBAJ8IANBBHEEQCAERAAAAAAAAOA/oiABKwMYoAwBCyADQQJxBEAgASsDKCAERAAAAAAAAOC/oqAMAQsgASsDGCABKwMooEQAAAAAAADgP6ILIQQgAkEBOgBRIAIgBDkDQCACIAU5AzgLQQEhAQNAIAEgACgCECICKAK0AUpFBEAgAigCuAEgAUECdGooAgAQsw4gAUEBaiEBDAELCwsNAQF/IAAoAiAgABAYC/UCAgR/BHwjAEGgAWsiAiQAIAAoAhAiAysDICEGIAMrAxAhByACQfAAaiACQdAAaiABQQFrQQJJIgQbIgVBCGogAysDKCIIIAMrAxgiCSAEGzkDACAFIAc5AwAgAiAFKQMINwMoIAIgBSkDADcDICACQYABaiACQSBqEIQCIAJB4ABqIAJBQGsgBBsiA0EIaiAJIAggBBs5AwAgAyAGOQMAIAIgAykDCDcDGCACIAMpAwA3AxAgAkGQAWogAkEQahCEAiAAKAIQIgMgAikDgAE3AxAgAyACKQOYATcDKCADIAIpA5ABNwMgIAMgAikDiAE3AxggACgCECgCDCIDBEAgAiADQUBrIgQpAwA3AwggAiADKQM4NwMAIAJBMGogAhCEAiAEIAIpAzg3AwAgAyACKQMwNwM4C0EBIQMDQCADIAAoAhAiBCgCtAFKRQRAIAQoArgBIANBAnRqKAIAIAEQtQ4gA0EBaiEDDAELCyACQaABaiQAC+YBAgR8A38gACgCICIHIAEoAiAiCEcEQEF/IQYCQCAHLQAkRQ0AIAgtACRFDQAgACsDACICRAAAAAAAAAAAYQRAIAArAwhEAAAAAAAAAABhDQELIAErAwAiA0QAAAAAAAAAAGEgASsDCCIERAAAAAAAAAAAYXENACAAKwMIIgUgBGQEQCACIANkBEBBAA8LQQJBASACIANjGw8LIAQgBWQEQCACIANkBEBBBg8LQQhBByACIANjGw8LIAIgA2QEQEEDDwtBBUF/IAIgA2MbIQYLIAYPC0H32QBB87gBQdEBQbv1ABAAAAueBwIHfwR+IwBB0AFrIgYkACAGQQA2AqQBAkAgAwRAIAMoAgQiBUEASA0BAn8gBQRAIAYgASkDGDcDeCAGIAEpAxA3A3AgBiABKQMINwNoIAYgASkDADcDYCMAQcABayIFJAACQCADBEAgA0EIaiELA0AgCEHAAEYNAiALIAhBKGxqIgcoAiAEQCAFIAcpAxg3A7gBIAUgBykDEDcDsAEgBSAHKQMINwOoASAFIAcpAwA3A6ABIAUgBykDCDcDaCAFIAcpAxA3A3AgBSAHKQMYNwN4IAUgBykDADcDYCAFQeAAahCMAyENIAUgBikDaDcDSCAFIAYpA3A3A1AgBSAGKQN4NwNYIAYpA2AhDiAFIAUpA6gBNwMoIAUgBSkDsAE3AzAgBSAFKQO4ATcDOCAFIA43A0AgBSAFKQOgATcDICAFQYABaiAFQUBrIAVBIGoQiwMgBSAFKQOYATcDGCAFIAUpA5ABNwMQIAUgBSkDiAE3AwggBSAFKQOAATcDAAJ/IAUQjAMgDX0iDiAPWiAJcUUEQCANIQwgDiEPIAgMAQsgDSAMIA4gD1EgDCANVnEiBxshDCAIIAogBxsLIQpBASEJCyAIQQFqIQgMAAsAC0Ho6wBBq70BQe4AQdf6ABAAAAsgBUHAAWokACADIApBKGxqIgUoAighByAGIAEpAxg3A1ggBiABKQMQNwNQIAYgASkDCDcDSCAGIAEpAwA3A0AgACAGQUBrIAIgByAGQaQBahC3DkUEQCAGIAEpAwg3AyggBiABKQMQNwMwIAYgASkDGDcDOCAGIAEpAwA3AyAgBiAFKQMQNwMIIAYgBSkDGDcDECAGIAUpAyA3AxggBiAFKQMINwMAIAZBqAFqIAZBIGogBhCLAyAFIAYpA8ABNwMgIAUgBikDuAE3AxggBSAGKQOwATcDECAFIAYpA6gBNwMIQQAMAgsgBkGAAWogBSgCKBD1BSAFIAYpA5gBNwMgIAUgBikDkAE3AxggBSAGKQOIATcDECAFIAYpA4ABNwMIIAYgBigCpAEiATYCyAEgBkGoAWoiAiABEPUFIAAgAiADIAQQygQMAQsgBiABKQMYNwPAASAGIAEpAxA3A7gBIAYgASkDCDcDsAEgBiABKQMANwOoASAGIAI2AsgBIAAgBkGoAWogAyAEEMoECyAGQdABaiQADwtB7xZB37YBQdABQZbRAhAAAAtBoO8AQd+2AUHRAUGW0QIQAAAL/AMBBn8jAEGgAWsiAyQAAkACQAJAIAEEQCABKAIEIgRBAEgNASABQQhqIQYgBA0CQQAhAQNAIAFBwABGBEAgBSEEDAUFAkAgBiABQShsaiIEKAIgRQ0AIAMgAikDGDcDOCADIAIpAxA3AzAgAyACKQMINwMoIAMgAikDADcDICADIAQpAwg3AwggAyAEKQMQNwMQIAMgBCkDGDcDGCADIAQpAwA3AwAgA0EgaiADEIoDRQ0AQQgQ+QMiACAFNgIAIAAgBDYCBCAAIQULIAFBAWohAQwBCwALAAtB6OsAQd+2AUGDAUG4+gAQAAALQd+WA0HftgFBhAFBuPoAEAAAC0EAIQQDQCAFQcAARg0BAkAgBiAFQShsaiIBKAIgRQ0AIAMgAikDGDcDmAEgAyACKQMQNwOQASADIAIpAwg3A4gBIAMgAikDADcDgAEgAyABKQMINwNoIAMgASkDEDcDcCADIAEpAxg3A3ggAyABKQMANwNgIANBgAFqIANB4ABqEIoDRQ0AIAEoAiAhASADIAIpAxg3A1ggAyACKQMQNwNQIAMgAikDCDcDSCADIAIpAwA3A0AgACABIANBQGsQuA4hByAEIgFFBEAgByEEDAELA0AgASIIKAIAIgENAAsgCCAHNgIACyAFQQFqIQUMAAsACyADQaABaiQAIAQLfQEEfyAAQShqIQICQCAAKAIEQQBKBEADQCABQcAARg0CIAIgAUEobGoiAygCACIEBEAgBBC5DiADKAIAEBggACABELoOCyABQQFqIQEMAAsACwNAIAFBwABGDQEgAiABQShsaigCAARAIAAgARC6DgsgAUEBaiEBDAALAAsLXQACQCAARSABQcAAT3JFBEAgACABQShsaiIBKAIoRQ0BIAFBCGoQuw4gACAAKAIAQQFrNgIADwtBy9sBQau9AUGtAUHK+gAQAAALQfWlAUGrvQFBrgFByvoAEAAACw4AIAAQvQ4gAEEANgIgCzoBAX8gAEKAgICAcDcDACAAQQhqIQFBACEAA0AgAEHAAEcEQCABIABBKGxqELsOIABBAWohAAwBCwsLJQEBfwNAIAFBBEcEQCAAIAFBA3RqQgA3AwAgAUEBaiEBDAELCwvyAwEDfyMAQfAAayIDJAACQAJAAkACQANAIAQgACgACE8NASAAKAIAIAMgACkCCDcDSCADIAApAgA3A0AgA0FAayAEEBlBHGxqKAIAIgVFDQMgAkUNBCAFIAIQTARAIARBAWohBAwBCwsgACgCACADIAApAgg3AzggAyAAKQIANwMwIANBMGogBBAZQRxsaiABNgIYIAAoAgAgAyAAKQIINwMoIAMgACkCADcDICADQSBqIAQQGUEcbGpBBGpBBBAnIQEgACgCACADIAApAgg3AxggAyAAKQIANwMQIANBEGogBBAZQRxsaigCGCECIAAoAgAgAyAAKQIINwMIIAMgACkCADcDACADIAQQGUEcbGooAgQgAUECdGogAjYCAAwBCyADQQA2AmggA0IANwJgIAMgATYCbCADQgA3AlggAyACNgJUIANB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ASgCsAIgAEEcbGoiACkCCDcDOCABQUBrIAApAhA3AwAgASAAKAIYNgJIIAEgACkCADcDMCABQTBqIAMRAQALIAJBAWohAgwBCwALAAUgASABKQLoAjcDKCABIAEpAuACNwMgIAFBIGogAhAZIQACQAJAIAEoAvACIgMOAgEHAAsgASABKALgAiAAQRxsaiIAKQIINwMIIAEgACkCEDcDECABIAAoAhg2AhggASAAKQIANwMAIAEgAxEBAAsgAkEBaiECDAELAAsACyAAIAUQbiECA0BBACEDAkACQAJAIAJFBEBBACECA0AgAiABKALoAiIETw0CIAEgASkC6AI3A5ABIAEgASkC4AI3A4gBIAEoAuACIAFBiAFqIAIQGUEcbGooAAxBAk8EQCABIAEpAugCNwOAASABIAEpAuACNwN4IAEgASgC4AIgAUH4AGogAhAZQRxsaiIEKQIUNwNwIAEgBCkCDDcDaCABIAQpAgQ3A2AgBSABQeAAahC/DgsgAkEBaiECDAALAAsgAkFQQQAgAigCAEEDcSIDQQJHG2ooAigiBCACIAJBMGoiBiADQQNGGygCKEYNAgJAIAQgBUcNAEGs2gooAgAiBEUNACACIAQQRCIDLQAADQIgAigCAEEDcSEDCyACIAYgA0EDRhsoAiggBUcNAkGw2gooAgAiA0UNAiACIAMQRCIDLQAARQ0CIAFBsAJqIAIgAxC+DgwCCwNAAkAgAyAETwRAIAFB4AJqQRwQM0EAIQNBACECA0AgAiABKAK4AiIETw0CIAEgASkCuAI3A/gBIAEgASkCsAI3A/ABIAEoArACIAFB8AFqIAIQGUEcbGooAAxBAk8EQCABIAEpArgCNwPoASABIAEpArACNwPgASABIAEoArACIAFB4AFqIAIQGUEcbGoiBCkCFDcD2AEgASAEKQIMNwPQASABIAQpAgQ3A8gBIAUgAUHIAWoQvw4LIAJBAWohAgwACwALIAEgASkC6AI3A8ABIAEgASkC4AI3A7gBIAFBuAFqIAMQGSECAkACQCABKALwAiIEDgIBCQALIAEgASgC4AIgAkEcbGoiAikCCDcDoAEgASACKQIQNwOoASABIAIoAhg2ArABIAEgAikCADcDmAEgAUGYAWogBBEBAAsgA0EBaiEDIAEoAugCIQQMAQsLA0AgAyAETwRAIAFBsAJqQRwQMyAAIAUQHSEFDAUFIAEgASkCuAI3A6gCIAEgASkCsAI3A6ACIAFBoAJqIAMQGSECAkACQCABKALAAiIEDgIBCQALIAEgASgCsAIgAkEcbGoiAikCCDcDiAIgASACKQIQNwOQAiABIAIoAhg2ApgCIAEgAikCADcDgAIgAUGAAmogBBEBAAsgA0EBaiEDIAEoArgCIQQMAQsACwALIAFB4AJqIAIgAxC+DgsgACACIAUQciECDAALAAsACyABQZADaiQADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwACxwBAX9BASECIAAgARDQDgR/QQEFIAAgARDPDgsLQAECfwJAIAEgACgCAE8NACACIAAoAgQiBE8NACAAKAIIIAEgBGwgAmoiAEEDdmotAAAgAEEHcXZBAXEhAwsgAwvOAgEKfwJAAkAgAARAIAAoAgAiBSABSyAAKAIEIgQgAktxRQRAIAQgAkEBaiIDIAMgBEkbIgQgBSABQQFqIgMgAyAFSRsiBWwiA0EDdiADQQdxQQBHahDGAyEHIAAoAgAhCANAIAYgCEcEQCAEIAZsIQkgACgCBCEKQQAhAwNAIAMgCkYEQCAGQQFqIQYMAwsgACAGIAMQwg4EQCAHIAMgCWoiC0EDdmoiDCAMLQAAQQEgC0EHcXRyOgAACyADQQFqIQMMAAsACwsgACgCCBAYIAAgBzYCCCAAIAQ2AgQgACAFNgIACyABIAVPDQEgAiAETw0CIAAoAgggASAEbCACaiIAQQN2aiIBIAEtAABBASAAQQdxdHI6AAAPC0Gy1AFBurgBQccAQZoiEAAAC0G6JkG6uAFB5ABBmiIQAAALQdwsQbq4AUHlAEGaIhAAAAuqAgEHfyMAQRBrIgQkACAAKAIAIgMoAhAhBSADKAIIIQYgAgRAEJ4OCyAFQRhqIgIhAANAIAAoAgAiAARAIAAoAghFBEAQng4LIABBDGohAAwBCwsgAUGCAmsiAUEDSQRAIAMgARCgCCACIQADQCAAKAIAIgAEQAJAIAAoAgBBiwJGDQACQCAAKAIEIgMtABUEQCAFKAIAIAZGDQELIAAoAggQdSAAKAIIIQMgBSgCACEHIAAoAgQoAgghCARAIAcgASAIIAMQ6AMhAwwBCyAHIAEgCCADECIhAwsgBSgCACAGRw0AIANBAToAFgsgAEEMaiEADAELCyAGIAIQugIgBEEQaiQADwsgBEH2AjYCBCAEQY0SNgIAQajzCCgCAEHmvAQgBBAfGhA8AAtMAQF/A0AgACIBKAIQKAJ4IgANAAsgAUEwQQAgASgCAEEDcSIAQQNHG2ooAigoAhAoAugBIAFBUEEAIABBAkcbaigCKCgCECgC6AFHC88EAQd/IwBBIGsiBCQAAkACQAJAAkACQCABQVBBACABKAIAQQNxIgVBAkcbaigCKCIGKAIQKALQASIHRQ0AIAFBMEEAIAVBA0cbaiEIA0AgByADQQJ0aigCACICRQ0BIANBAWohAyACQVBBACACKAIAQQNxQQJHG2ooAiggCCgCKEcNAAsgASACEI0DAkAgAigCECIALQBwQQRHDQAgACgCeA0AIAAgATYCeAsgASABQTBqIgAgASgCAEEDcUEDRhsoAigoAhAiAygC5AEiAkEBaiIFQf////8DTw0CIAJBAmoiAkGAgICABE8NAyADKALgASEDAkAgAkUEQCADEBhBACECDAELIAMgAkECdCIDEGYiAkUNBSADIAVBAnQiBU0NACACIAVqQQA2AAALIAEgACABKAIAQQNxQQNGGygCKCgCECACNgLgASABIAAgASgCAEEDcUEDRhsoAigoAhAiAiACKALkASIDQQFqNgLkASACKALgASADQQJ0aiABNgIAIAEgACABKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAwBCyAGIAFBMEEAIAVBA0cbaigCKCABEKUIIgIoAhAiA0EEQQMgASgCECIBLQBwQQRGGzoAcCADIAEoAmA2AmAgACACEPwFCyAEQSBqJAAPC0GgvQNBz/wAQc0AQe2yARAAAAsgBEEENgIEIAQgAjYCAEGo8wgoAgBBtOcDIAQQHxoQLAALIAQgAzYCEEGo8wgoAgBBg+cDIARBEGoQHxoQLAALvAEBA38gASgCECIEQQE2ArABAkAgBCgC1AFFDQADQCAEKALQASAFQQJ0aigCACIGRQ0BAkAgACAGEPkFRQ0AIAZBUEEAIAYoAgBBA3FBAkcbaigCKCIEKAIQKAKwAQ0AIAAgBCACIAMQxw4LIAVBAWohBSABKAIQIQQMAAsACyADIAQoAvQBRwRAQe47Qbq4AUGKC0HiORAAAAsgAiABNgIUIAJBBBAnIQAgAigCACAAQQJ0aiACKAIUNgIAC40DAQd/IAAoAhAoAsQBIAEoAhAiAigC9AFByABsaigCQCEGIAJBAToAtAEgAkEBNgKwASAAEGAhBQJAIAEoAhAiAygC0AEiAkUNACAFKAIQKAK0AUEATCEHA0AgAiAEQQJ0aigCACICRQ0BAkAgB0UEQCAAIAJBMEEAIAIoAgBBA3FBA0cbaigCKBCrAUUNASAAIAJBUEEAIAIoAgBBA3FBAkcbaigCKBCrAUUNAQsgAigCECgCnAFFDQAgAiACQTBrIgggAigCAEEDcSIDQQJGGygCKCgCECIFLQC0AQRAIAYgBSgCrAIgAkEwQQAgA0EDRxtqKAIoKAIQKAKsAhDDDiACEKMIIARBAWshBCACKAIQLQBwQQRGDQEgACACEMYODAELIAYgAkEwQQAgA0EDRxtqKAIoKAIQKAKsAiAFKAKsAhDDDiACIAggAigCAEEDcUECRhsoAigiAigCECgCsAENACAAIAIQyA4LIARBAWohBCABKAIQIgMoAtABIQIMAAsACyADQQA6ALQBCyUBAX8gABAcIQIDQCACBEAgACACIAEQkgggACACEB0hAgwBCwsL0AEBB38gASgCECgCyAEhAgNAIAIoAgAiAQRAIAFBUEEAIAEoAgBBA3FBAkcbaigCKCgCECgC+AEhBSAAKAIQKALIASEEIAEoAhAiBi4BmgEhBwNAIAQoAgAiAQRAAkACQCAFIAFBUEEAIAEoAgBBA3FBAkcbaigCKCgCECgC+AEiCEgEQCABKAIQIQEMAQsgBSAIRw0BIAEoAhAiASsDOCAGKwM4ZEUNAQsgAS4BmgEgB2wgA2ohAwsgBEEEaiEEDAELCyACQQRqIQIMAQsLIAML0gECBX8CfiABKAIQKALAASECA0AgAigCACIBBEAgAUEwQQAgASgCAEEDcUEDRxtqKAIoKAIQKAL4ASEEIAAoAhAoAsABIQMgASgCECIFMgGaASEIA0AgAygCACIBBEACQAJAIAQgAUEwQQAgASgCAEEDcUEDRxtqKAIoKAIQKAL4ASIGSARAIAEoAhAhAQwBCyAEIAZHDQEgASgCECIBKwMQIAUrAxBkRQ0BCyABMgGaASAIfiAHfCEHCyADQQRqIQMMAQsLIAJBBGohAgwBCwsgBwvgAgEIfyAAKAIAIQUgAUEATCEJQQAhAQNAIAUgAUECdGooAgAiBARAIARBKGohCCABIQACQCAJRQRAA0AgBSAAQQFqIgBBAnRqKAIAIgJFDQIgAigCECIGKwMQIAQoAhAiBysDEKEgAkFQQQAgAigCAEEDcUECRxtqKAIoKAIQKAL4ASAIQVBBACAEKAIAQQNxQQJHG2ooAgAoAhAoAvgBa7eiRAAAAAAAAAAAY0UNACAGLgGaASAHLgGaAWwgA2ohAwwACwALA0AgBSAAQQFqIgBBAnRqKAIAIgJFDQEgAigCECIGKwM4IAQoAhAiBysDOKEgAkEwQQAgAigCAEEDcUEDRxtqKAIoKAIQKAL4ASAIQTBBACAEKAIAQQNxQQNHG2ooAgAoAhAoAvgBa7eiRAAAAAAAAAAAY0UNACAGLgGaASAHLgGaAWwgA2ohAwwACwALIAFBAWohAQwBCwsgAwulAgEDfwJAIAJFBEADQCADIAEoAhAiAigCzAFPDQIgAigCyAEgA0ECdGooAgAiAiACQTBrIgQgAigCAEEDcUECRhsoAigoAhAiBSgCsAFFBEAgBUEBNgKwASAAIAIgBCACKAIAQQNxQQJGGygCKDYCFCAAQQQQJyECIAAoAgAgAkECdGogACgCFDYCAAsgA0EBaiEDDAALAAsDQCADIAEoAhAiAigCxAFPDQEgAigCwAEgA0ECdGooAgAiAiACQTBqIgQgAigCAEEDcUEDRhsoAigoAhAiBSgCsAFFBEAgBUEBNgKwASAAIAIgBCACKAIAQQNxQQNGGygCKDYCFCAAQQQQJyECIAAoAgAgAkECdGogACgCFDYCAAsgA0EBaiEDDAALAAsLnwQBBn8jAEHwAGsiAiQAIAEoAhAoAvQBIgNByABsIgUgACgCECgCxAFqIgQoAgAhBgJAAn8CQCAEKAIIQQBMBEAgABAhIQAgARAhIQEgAiAGNgIQIAIgAzYCDCACIAE2AgggAiAANgIEIAJB5Ak2AgBBq9sEIAIQNwwBCyAEKAIEIAZBAnRqIAE2AgAgASgCECAGNgL4ASAAKAIQIgQoAsQBIAVqIgAgACgCACIFQQFqNgIAIAUgACgCCE4NAiADQcgAbCIFQcj6CigCACgCECgCxAFqKAIIIgcgBkgEQCABECEhACABKAIQKAL4ASEBIAJByPoKKAIAKAIQKALEASAFaigCCDYCMCACQfgJNgIgIAIgADYCJCACIAE2AiggAiADNgIsQfrHBCACQSBqEDcMAQsgBCgC7AEhBSAEKALoASIEIANMIAMgBUxxRQRAIAIgBTYCTCACIAQ2AkggAiADNgJEIAJB/Qk2AkBBs8kEIAJBQGsQNwwBC0EAIAAoAgQgBkECdGogACgCDCAHQQJ0ak0NARogARAhIQBByPoKKAIAKAIQKALEASADQcgAbGooAgghBiABKAIQKAL4ASEBIAIgAzYCYCACIAM2AmQgAiAGNgJoIAJBgwo2AlAgAiADNgJUIAIgADYCWCACIAE2AlxBw8gEIAJB0ABqEDcLQX8LIAJB8ABqJAAPC0G56gBBurgBQesJQZ30ABAAAAtiAQJ/An8CQCABKAIQIgEtAKwBQQFHDQAgASgCxAFBAUcNACABKALMAUEBRw0AIAEoAsgBIQEDQCABKAIAIgIoAhAiA0H4AGohASADLQBwDQALQQEgACACEKsBDQEaC0EACwsdAQF/IAEoAhAtAKwBBH9BAAUgACABEKsBQQBHCwvcAQEDfyACQQBOIQUgASEDA0AgASEEAkACQAJ/IAVFBEAgAygCECIDKAL4ASIBQQBMDQJByPoKKAIAKAIQKALEASADKAL0AUHIAGxqKAIEIAFBAnRqQQRrDAELQcj6CigCACgCECgCxAEgAygCECIBKAL0AUHIAGxqKAIEIAEoAvgBIgFBAnRqQQRqCygCACIDRQ0AIAMoAhAoAvgBIAFrIAJsQQBKDQFBoZQDQbq4AUHEB0GrNxAAAAsgBA8LIAMhASAAIAMQ0A4NACADIAQgACADEM8OGyEBDAALAAs9AQJ/IAAQ0w5BASEBA0AgASAAKAIQIgIoArQBSkUEQCACKAK4ASABQQJ0aigCABDSDiABQQFqIQEMAQsLC14BAn8CQCAAKAIQIgEoAowCRQ0AIAEoAugBIQIDQCACIAEoAuwBSg0BIAEoAowCIAJBAnRqIAEoAsQBIAJByABsaigCBCgCADYCACACQQFqIQIgACgCECEBDAALAAsLxAEBBH8gAigCECIGKALoASEDIAEoAhAiBCgC6AEhBQJAAkACQEHE+gotAABFBEAgBUUgA0VyIAMgBUZyDQEgBC0AtQFBB0YEQCAELQCsAUEBRg0ECyAGLQC1AUEHRw0CIAYtAKwBQQFGDQMMAgsgAyAFRw0BCyAAKAIQIgAoAsQBIAQoAvQBQcgAbGooAkAiA0UNASADIAIgASAAKAJ0QQFxIgAbKAIQKAKsAiABIAIgABsoAhAoAqwCEMIODwtBAQ8LQQALvwEBA38gACgCEEEYaiEAAkACQANAIAAoAgAiAARAAkACQCAAKAIAIgJBigJGBEAgACgCBEUNAiAAKAIIEHUgACgCCCECIAAoAgQhA0UNASABIAMgAhCqBAwCCyABLQAAQQJxRQ0EIAJBiwJHDQUgACgCBBCeCA0BQd6eA0GNEkHVAkGxKRAAAAsgASADIAIQcQsgAEEMaiEADAELCw8LQcbaAUGNEkHTAkGxKRAAAAtBvewAQY0SQdQCQbEpEAAAC4ECAgl/AXwgACgCECIBKALsASEFIAEoAugBIgMhAgNAIAIgBUoEQANAAkAgAyAFSg0AIANByABsIgJByPoKKAIAKAIQKALEAWpBADoAMSABKALEASACaiIBKAIEIAEoAgBBBEGlAxCoASADQQFqIQMgACgCECIBKALsASEFDAELCwVBACEEIAEoAsQBIAJByABsaiIHKAIAIgZBACAGQQBKGyEIA0AgBCAIRkUEQAJ/IAcoAgQgBEECdGooAgAoAhAiCSsDECIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAshBiAJIAY2AvgBIARBAWohBAwBCwsgAkEBaiECDAELCwu4CQENfyMAQdAAayICJAAgAkIANwNIIAJBQGsiDUIANwMAIAJCADcDOCAAKAIQIgQtAPABQQFGBEAgBCgC6AEhCQNAIAQoAuwBIAlIBEADQCACKAJAIApNBEAgAkE4aiIAQQQQMyAAEDgFIAIgAkFAaykDADcDECACIAIpAzg3AwggAkEIaiAKEBkhAAJAAkACQCACKAJIIgEOAgIAAQsgAigCOCAAQQJ0aigCABAYDAELIAIoAjggAEECdGooAgAgAREBAAsgCkEBaiEKDAELCwUCQCAJQcgAbCIIIAQoAsQBaiIFKAIAIgFFDQBBACEDIAFBACABQQBKGyEEIAUoAgQiBSgCACgCECgC+AEhDEEAIQEDQCABIARGRQRAIAUgAUECdGooAgAoAhBBADYCsAEgAUEBaiEBDAELCwNAIAIoAkAgA00EQCACQThqQQQQM0EAIQUDQCAAKAIQIgQoAsQBIAhqIgEoAgAiAyAFSgRAIAEoAgQiASAFQQJ0aiABIANBAnRqIAVBf3NBAnRqIAQtAHRBAXEbKAIAIQRBACEGQQAhAUEAIQcDQCAEKAIQIgMoAtwBIAFNBEBBACEBA0AgAygC1AEgAU0EQAJAIAYgB3JFBEAgAiAENgJMIAJBOGpBBBAnIQEgAigCOCABQQJ0aiACKAJMNgIADAELIAMoArABIAdyDQAgACAEIAJBOGogCRDHDgsgBUEBaiEFDAUFIAAgAygC0AEgAUECdGooAgAQ+QUgBmohBiAEKAIQIQMgAUEBaiEBDAELAAsABSAAIAMoAtgBIAFBAnRqKAIAEPkFIAdqIQcgAUEBaiEBDAELAAsACwsCQAJAIAIoAkBFDQAgBC0AdEEBcUUEQCACQThqEIcLC0EAIQtBACEDA0AgAyAAKAIQIgQoAsQBIgYgCGooAgAiB05FBEAgAiANKQMANwMwIAIgAikDODcDKCACKAI4IQEgAkEoaiADEBkhBCAAKAIQKALEASAIaigCBCADQQJ0aiABIARBAnRqKAIAIgE2AgAgASgCECADIAxqNgL4ASADQQFqIQMMAQsLA0AgByALTA0BQQAhASAGIAhqKAIEIAtBAnRqKAIAIgwoAhAoAtABIgUEQANAAkAgACgCECEEIAUgAUECdGooAgAiA0UNACADQTBBACADKAIAQQNxIgZBA0cbaigCKCgCECgC+AEhByADQVBBACAGQQJHG2ooAigoAhAoAvgBIQYCQAJAIAQtAHRBAXFFBEAgBiAHSA0BDAILIAYgB0wNAQsgACADEPkFDQYgAxCjCCAAIAMQxg4gAUEBayEBIAwoAhAoAtABIQULIAFBAWohAQwBCwsgBCgCxAEiBiAIaigCACEHCyALQQFqIQsMAAsAC0HI+gooAgAoAhAoAsQBIAhqQQA6ADEMAwtB+6QDQbq4AUHFC0HsORAAAAUgAiANKQMANwMgIAIgAikDODcDGCACQRhqIAMQGSEBAkACQAJAIAIoAkgiBA4CAgABCyACKAI4IAFBAnRqKAIAEBgMAQsgAigCOCABQQJ0aigCACAEEQEACyADQQFqIQMMAQsACwALIAlBAWohCQwBCwsLIAJB0ABqJAALwAIBB38gACgCECIDKALoASEFA0BBACECQQAhASAFIAMoAuwBSkUEQANAIAIgBUHIAGwiByADKALEAWoiBCgCACIGTkUEQCAEKAIEIAJBAnRqKAIAKAIQIgQgAjYCrAIgBEEAOgC0ASAEQQA2ArABAn8gBCgC1AEiBEUgAXJBAXEEQCAEQQBHIAFyDAELQQwQxgMiASAGIAZsIgNBA3YgA0EFcUEAR2oQxgM2AgggASAGNgIEIAEgBjYCACAAKAIQIgMoAsQBIAdqIAE2AkBBAQshASACQQFqIQIMAQsLQQAhAgJAIAFBAXFFDQADQCACIAMoAsQBIAdqIgEoAgBODQEgASgCBCACQQJ0aigCACIBKAIQKAKwAUUEQCAAIAEQyA4gACgCECEDCyACQQFqIQIMAAsACyAFQQFqIQUMAQsLC6UJAQt/IwBB0ABrIgMkACADQgA3A0ggA0FAa0IANwMAIANCADcDOCAAKAIQIgRBwAFqIQIDQCACKAIAIgIEQCACKAIQIgJBADYCsAEgAkG4AWohAgwBCwsgBCgC7AEhBSAEKALoASECA0AgAiAFTARAIAQoAsQBIAJByABsakEANgIAIAJBAWohAgwBCwsgABA5IQIgACgCECgCwAEhBAJAIAAgAkYiBQRAIAQhAgwBCwNAIAQiAigCECgCuAEiBA0ACwtByAFBwAEgARshCEG4AUG8ASAFGyEJIANBzABqIQoCQANAIAIEQAJAIAIoAhAiBCAIaigCACgCAA0AIAQoArABDQAgBEEBNgKwASADIAI2AkwgA0E4akEEECchBCADKAI4IARBAnRqIAMoAkw2AgADQCADKAJARQ0BIANBOGogChCjBCADKAJMIgUoAhAtALUBQQdHBEAgACAFEM4OBEBBACECA0AgAygCQCACTQRAQX8hBAwIBSADIANBQGspAwA3AzAgAyADKQM4NwMoIANBKGogAhAZIQACQAJAAkAgAygCSCIBDgICAAELIAMoAjggAEECdGooAgAQGAwBCyADKAI4IABBAnRqKAIAIAERAQALIAJBAWohAgwBCwALAAsgA0E4aiAFIAEQzQ4MAQsgA0E4aiELQQAhBAJAIAFBAWoiDCAFKAIQKALoASIGKAIQIgUsAJECRg0AIAUoAugBIQUDQCAGKAIQIgQoAuwBIgcgBU4EQCAFQQJ0IQcgBUEBaiEFIAAgByAEKAKMAmooAgAQzg4iBEUNAQwCCwsgBCgC6AEhBQNAIAUgB0wEQCALIAQoAowCIAVBAnRqKAIAIAEQzQ4gBUEBaiEFIAYoAhAiBCgC7AEhBwwBCwsgBCAMOgCRAkEAIQQLIARFDQALQQAhAgNAIAIgAygCQE8NBCADIANBQGspAwA3AyAgAyADKQM4NwMYIANBGGogAhAZIQACQAJAAkAgAygCSCIBDgICAAELIAMoAjggAEECdGooAgAQGAwBCyADKAI4IABBAnRqKAIAIAERAQALIAJBAWohAgwACwALIAIoAhAgCWooAgAhAgwBCwtByPoKKAIAIQUgACgCECICKALoASEEA0AgAigC7AEgBE4EQCAEQcgAbCIBIAUoAhAoAsQBakEAOgAxAkAgAi0AdEEBcUUNACACKALEASABaiIBKAIAIgZBAEwNACAGQQFrIgZBAXZBAWohByABKAIEIQFBACECA0AgAiAHRwRAIAEgAkECdGooAgAgASAGIAJrQQJ0aigCABCVCCACQQFqIQIMAQsLIAAoAhAhAgsgBEEBaiEEDAELCwJAIAAQYCAARw0AEMsEQgBXDQAgAEEAEJQIC0EAIQRBACECA0AgAiADKAJATw0BIAMgA0FAaykDADcDECADIAMpAzg3AwggA0EIaiACEBkhAAJAAkACQCADKAJIIgEOAgIAAQsgAygCOCAAQQJ0aigCABAYDAELIAMoAjggAEECdGooAgAgAREBAAsgAkEBaiECDAALAAsgA0E4aiIAQQQQMyAAEDggA0HQAGokACAEC80IAgp/An5CfyELAkACfyAAIgIQ5g0gACgCECIAQQE2AtwBIAAoAtgBIAAoAsABNgIAIAIQ2w4CQAJAIAJBABDZDiIDDQAgAigCECIAKALoASAAKALsAUoNASACEGAhASACKAIQIgMoAugBIgRBAEoEQCABKAIQKALEASAEQcgAbGpBF2tBADoAAAsDQCADKALsASAETgRAIAEgBCADKAKMAiAEQQJ0aigCACgCECgC+AEiACAEQcgAbCIIIAMoAsQBaigCABDkDUEAIQUgACEGA0AgAigCECIDKALEASAIaiIHKAIAIAVKBEAgASgCECgCxAEgCGooAgQgBkECdGogBygCBCAFQQJ0aigCACIDNgIAIAMoAhAiByAGNgL4ASAHLQCsAUEBRgRAIAMgARA5NgIYCyAGQQFqIQYgAiADEP0FIAEgAxCkCCAFQQFqIQUMAQsLIAcgASgCECgCxAEg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A0AgAQRAAkAgASgCECgCsAENACABEN8NDQAgASABQTBqIgYgASgCAEEDcUEDRhsoAigQogEiBCABIAFBMGsiByABKAIAQQNxQQJGGygCKBCiASICRg0AAkAgBCgCECgC6AFFBEAgAigCECgC6AFFDQELIAEgByABKAIAQQNxIgRBAkYiBxsgASAGIARBA0YiBhshCkEAIQRBACECIAFBAEEwIAYbaigCKCgCECIGKALoASILBEAgBigC9AEgCygCECgCiAIoAhAoAvQBayECCygCKCAKKAIoIAFBAEFQIAcbaigCKCgCECIGKALoASIHBEAgBygCECgCiAIoAhAoAvQBIAYoAvQBayEECyABKAIQKAKsASEHIAAQuwIiBigCEEECOgCsARCiASEKEKIBIQkgBiAKRAAAAAAAAAAAQQAgByACIARqaiIEa7ggBEEASiICGyABKAIQKAKcAUEKbBCfASAGIAkgBEEAIAIbuCABKAIQKAKcARCfASgCECABNgJ4KAIQIAE2AngMAQsgBCACELkDIgYEQCABIAYQjQMMAQsgBCACIAEQ4wEaCyAAIAEQMCEBDAELCyAAIAMQHSEDDAELCyAAKAIQIgMoAuABIQECQAJAAkACQAJAIAMoAuQBIgNFBEAgAQ0BQQAhBgwFCyABRQ0BCyABEKIBIQEgACgCECICIAE2AuABIAIoAuQBIgNFDQELIAMQogEhASAAKAIQIgIgATYC5AEgAUUNACABKAIQIgItALUBQQVGIQYCQANAIAIoAsgBKAIAIgMEQCADQVBBACADKAIAQQNxQQJHG2ooAigiBBCiASAERw0CIAMQogggASgCECECDAELCyAAKAIQIQIMAgtB6KcDQbu7AUGUA0GhMBAAAAtBACEGCyACKALgASIDRQRADAELIAMoAhAiAi0AtQFBA0YhCANAIAIoAsABKAIAIgFFDQEgAUEwQQAgASgCAEEDcUEDRxtqKAIoIgQQogEgBEYEQCABEKIIIAMoAhAhAgwBCwtByKcDQbu7AUGbA0GhMBAAAAsgAEEAEKEIIAAhAUEAIQQDQCABKAIQIgAoAtwBIARLBEAgACAAKALYASAEQQJ0aigCACIANgLAASAAIQMDQCADBEAgAygCECIDQQA2ArABIAMoArgBIQMMAQsLA0AgAARAIAAQ7w4gACgCECgCuAEh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AugBCyADIQEgAgRAIAEgAiAEIAIoAhAoAvQBSBshAQsgACADEB0hAyABIQIMAQsLIAEgAjYCiAILNwAgASgCEEG0+gooAgBBAWo2ArABIAAgATYCFCAAQQQQJyEBIAAoAgAgAUECdGogACgCFDYCAAuUAQEEfyAAKAIQIgEoArABRQRAIAFBAToAtAEgAUEBNgKwAQNAIAEoAsgBIAJBAnRqKAIAIgMEQAJAIANBUEEAIAMoAgBBA3FBAkcbaigCKCIBKAIQIgQtALQBBEAgAxCiCCACQQFrIQIMAQsgBCgCsAENACABEO8OCyACQQFqIQIgACgCECEBDAELCyABQQA6ALQBCwsYAQF/QSQQUiICIAE2AgAgAiAANgIgIAILnAEBBX8gAEEwQQAgACgCAEEDcUEDRxtqKAIoKAIQIgIoAuABIQQgAigC5AEhAwJAA0AgASADRwRAIAFBAnQhBSABQQFqIQEgACAEIAVqKAIARw0BDAILCyACIAQgA0EBaiADQQJqENgBIgE2AuABIAIgAigC5AEiAkEBaiIDNgLkASABIAJBAnRqIAA2AgAgASADQQJ0akEANgIACwv/AgEHfyAAKAJQIQQgACgCJCICIAAtABg6AAACQAJAIAAoAhQgACgCDEECdGooAgAiAygCBCIBQQJqIAJLBEAgASAAKAIcakECaiEFIAEgAygCDGpBAmohBgNAIAEgBUkEQCAGQQFrIgYgBUEBayIFLQAAOgAAIAAoAhQgACgCDEECdGooAgAiAygCBCEBDAELCyAAIAMoAgwiBzYCHCADIAc2AhAgAiAGIAVrIgNqIgIgAUECakkNASADIARqIQQLIAJBAWsiAUHAADoAACAAIAQ2AlAgAS0AACECIAAgATYCJCAAIAI6ABgMAQtB3xUQnQIAC0EAIQIgACgCACgCCCIDKAJMQSxqIQUDQCACQQNHBEACQCAFIAJBAnRqIgQoAgAiAEUNACAAQQBBgAEgACgCABEDACEBA0AgASIARQ0BIAQoAgAiASAAQQggASgCABEDACEBIAAoAhgtAABBJUcNACADIAIgACkDEBDjCQwACwALIAJBAWohAgwBCwsL8AIBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgCyAEgASgCzAEiAUEBaiABQQJqENgBIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AsgBIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAswBIgNBAWo2AswBIAEoAsgBIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgIoAsgBIAIoAswBQQJ0akEANgIAIAAgAEEwayICIAAoAgBBA3FBAkYbKAIoKAIQIgEoAsABIAEoAsQBIgFBAWogAUECahDYASEBIAAgAiAAKAIAQQNxQQJGGygCKCgCECABNgLAASAAIAIgACgCAEEDcUECRhsoAigoAhAiASABKALEASIDQQFqNgLEASABKALAASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQJGGygCKCgCECICKALAASACKALEAUECdGpBADYCACAAC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkC0AE3AwggAiADKQLYATcDACAAIAJBCGogASACEPUOIAJBEGokAAutAQEDfwJAAkAgASgCBCIFRQ0AIAMoAgQiBkUNACAFIAZPBEAgAygCACECQQAhAQNAIAIgAUECdGooAgAiBEUNAyABQQFqIQEgBEEwQQAgBCgCAEEDcUEDRxtqKAIoIABHDQALDAELIAEoAgAhAEEAIQEDQCAAIAFBAnRqKAIAIgRFDQIgAUEBaiEBIARBUEEAIAQoAgBBA3FBAkcbaigCKCACRw0ACwsgBA8LQQAL2QEBBH8gAEEwQQAgACgCAEEDcSIFQQNHG2ooAigiBiEDAn8CQCABIAZGBH8gAEFQQQAgBUECRxtqKAIoBSADCygCECgCsAIiAyABKAIQIgQoAqwCTgRAIAMgBCgCsAJMDQELIAAoAhAoApwBIQNBAAwBC0EAIQMgACgCECIEKAKkAUEATgR/IAQoAqABBUEACyAEKAKcAWshA0EBCyEEQQAgA2sgA0EBQX8gAkEATAR/IAEgBkYFIABBUEEAIAVBAkcbaigCKCABRgsbIgBBACAAayAEG0EASBsLkwEBBX8jAEEQayICJAAgAEEEaiEBA0AgAyAAKAAMT0UEQCACIAEpAgg3AwggAiABKQIANwMAIAIgAxAZIQQCQAJAAkAgACgCFCIFDgICAAELIAEoAgAgBEECdGooAgAQGAwBCyABKAIAIARBAnRqKAIAIAURAQALIANBAWohAwwBCwsgAUEEEDMgARA4IAJBEGokAAtWAQF/IAAoAgAiACgCECEBA0AgAQRAIAAoAgggAUEIahC6AiAAKAIIIAAoAhBBGGoQugIgACgCCCAAKAIQQRBqELoCIAAgACgCEBC0DiIBNgIQDAELCwuYAQEEf0GAgICAeCECQf////8HIQEgACgCACgCEEHAAWoiAyEAA0AgACgCACIABEAgACgCECIELQCsAUUEQCACIAQoAvQBIgAgACACSBshAiABIAAgACABShshAQsgBEG4AWohAAwBCwsDQCADKAIAIgAEQCAAKAIQIgAgACgC9AEgAWs2AvQBIABBuAFqIQMMAQsLIAIgAWsLlwEBAn8DQAJAAkAgASgCECICKAKsAkF/Rg0AIAJBfzYCrAIgAigCqAIiA0UNACACKAKwAiAAKAIQKAKwAkgNASAAIAFGDQBBss0EQQAQNwsPCyADQTBBACADKAIAQQNxIgFBA0cbaigCKCICIANBUEEAIAFBAkcbaigCKCIBIAIoAhAoArACIAEoAhAoArACShshAQwACwALtgEBA39BACACayEGIAEoAhAoArACIQUDQAJAIAUgACgCECIBKAKsAk4EQCAFIAEoArACTA0BCyABKAKoAiIBKAIQIgQgBCgCoAEgAiAGIAMgACABIAFBMGoiBCABKAIAQQNxQQNGGygCKEdzG2o2AqABIAEgBCABKAIAQQNxIgBBA0YbKAIoIgQgAUFQQQAgAEECRxtqKAIoIgAgBCgCECgCsAIgACgCECgCsAJKGyEADAELCyAAC6oIAQ5/IwBBIGsiASQAAkAgAEEwQQAgACgCAEEDcSICQQNHG2ooAigiBCgCECgCsAIgAEFQQQAgAkECRxtqKAIoIgAoAhAoArACTgRAIAAoAhAiBCgCsAIhCCAEKAKsAiEJIAFBADYCGCABQgA3AxAgAUIANwMIIAEgADYCHCABQQhqQQQQJyEAIAEoAgggAEECdGogASgCHDYCACABQRxqIQpB/////wchBANAIAEoAhAEQCABQQhqIApBBBDHAUEAIQAgASgCHCEHA0AgBygCECICKALIASAAQQJ0aigCACIDBEAgA0FQQQAgAygCAEEDcSILQQJHG2ooAigiDCgCECINKAKwAiEGAkAgAygCECIOKAKkAUEASARAIAYgCEwgBiAJTnENASANKAL0ASADQTBBACALQQNHG2ooAigoAhAoAvQBIA4oAqwBamsiAiAEIAVFIAIgBEhyIgIbIQQgAyAFIAIbIQUMAQsgBiACKAKwAk4NACABIAw2AhwgAUEIakEEECchAiABKAIIIAJBAnRqIAEoAhw2AgALIABBAWohAAwBBUEAIQAgBEEATA0DA0AgAigCmAIgAEECdGooAgAiA0UNBCADQTBBACADKAIAQQNxQQNHG2ooAigiAygCECgCsAIgAigCsAJIBEAgASADNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIAIAcoAhAhAgsgAEEBaiEADAALAAsACwALCwwBCyAEKAIQIgAoArACIQggACgCrAIhCSABQQA2AhggAUIANwMQIAFCADcDCCABIAQ2AhwgAUEIakEEECchACABKAIIIABBAnRqIAEoAhw2AgAgAUEcaiEKQf////8HIQQDQCABKAIQBEAgAUEIaiAKQQQQxwFBACEAIAEoAhwhBwNAIAcoAhAiAigCwAEgAEECdGooAgAiAwRAIANBMEEAIAMoAgBBA3EiC0EDRxtqKAIoIgwoAhAiDSgCsAIhBgJAIAMoAhAiDigCpAFBAEgEQCAGIAhMIAYgCU5xDQEgA0FQQQAgC0ECRxtqKAIoKAIQKAL0ASANKAL0ASAOKAKsAWprIgIgBCAFRSACIARIciICGyEEIAMgBSACGyEFDAELIAYgAigCsAJODQAgASAMNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIACyAAQQFqIQAMAQVBACEAIARBAEwNAwNAIAIoAqACIABBAnRqKAIAIgNFDQQgA0FQQQAgAygCAEEDcUECRxtqKAIoIgMoAhAoArACIAIoArACSARAIAEgAzYCHCABQQhqQQQQJyECIAEoAgggAkECdGogASgCHDYCACAHKAIQIQILIABBAWohAAwACwALAAsACwsLIAFBCGoiAEEEEDMgABA4IAFBIGokACAFC4JEAhB/AX4jAEHwBGsiBCQAIARB8MQILwEAOwHABCAEQejECCkDADcDuAQgBEHgxAgpAwA3A7AEIARBhARqQQBBLBA2GkGM2AotAAAEQCAAKAIQQcABaiEFA0AgBSgCACIFBEAgBSgCECIKKALIASEJQQAhBQNAIAkgBUECdGooAgAEQCAFQQFqIQUgBkEBaiEGDAEFIApBuAFqIQUgB0EBaiEHDAMLAAsACwsgBCABNgKABCAEIAI2AvwDIAQgBjYC+AMgBCAHNgL0AyAEIARBsARqNgLwA0Go8wgoAgBBib4EIARB8ANqEB8aEK8BCyAEIAA2AoQEQQAhBiAEQYgEakEAQSgQNiEOIAAoAhBBwAFqIQVBACEJA0ACQCAFKAIAIgdFBEAgBCAGNgKkBCAEIAk2AqgEIA4gCUEEEKoCIAAoAhBBwAFqIQVBASEIA0AgBSgCACIHBEBBACEFIAcoAhAiCkEANgK0AiAKKALAASEJA0AgBUEBaiEGIAkgBUECdGooAgAiBQRAIAogBjYCtAIgBSgCECIMQoCAgIBwNwOgASAIIAwoAqwBIAVBUEEAIAUoAgBBA3EiCEECRxtqKAIoKAIQKAL0ASAFQTBBACAIQQNHG2ooAigoAhAoAvQBa0xxIQggBiEFDAELCyAGQQQQGiEKQQAhBSAHKAIQIgZBADYCnAIgBiAKNgKYAiAGKALIASEGA0AgBUECdCEKIAVBAWohBSAGIApqKAIADQALIAVBBBAaIQYgBygCECIFQQA2AqQCIAUgBjYCoAIgBUG4AWohBQwBCwsCQCAIQQFxDQAgBEIANwPYBCAEQgA3A9AEIARCADcDyAQgBEHIBGogBCgCqARBBBCqAiAEKAKEBCgCEEHAAWohBSAEQdwEaiEMA0AgBSgCACIFBEAgBSgCECIGKAK0AgR/IAYFIAQgBTYC3AQgBEHIBGpBBBAnIQYgBCgCyAQgBkECdGogBCgC3AQ2AgAgBSgCEAtBuAFqIQUMAQVBACEKCwsDQAJAIAQoAtAEBEAgBEHIBGogDBCjBEEAIQYgBCgC3AQiCygCECIJQQA2AvQBIAkoAsABIQ1BACEHQQAhCANAIA0gCEECdGooAgAiBQRAIAkgByAFKAIQKAKsASAFQTBBACAFKAIAQQNxQQNHG2ooAigoAhAoAvQBaiIFIAUgB0gbIgc2AvQBIAhBAWohCAwBCwsDQCAJKALIASAGQQJ0aigCACIFRQ0CIAUgBUEwayIHIAUoAgBBA3FBAkYbKAIoKAIQIgggCCgCtAIiCEEBazYCtAIgCEEBTARAIAQgBSAHIAUoAgBBA3FBAkYbKAIoNgLcBCAEQcgEakEEECchBSAEKALIBCAFQQJ0aiAEKALcBDYCACALKAIQIQkLIAZBAWohBgwACwALAkAgCiAEKAKoBEYNAEHDkARBABA3IAQoAoQEKAIQQcABaiEFA0AgBSgCACIFRQ0BIAUoAhAiBigCtAIEfyAFECEhBiAEIAUoAhAoArQCNgLkAyAEIAY2AuADQYq/BCAEQeADahB/IAUoAhAFIAYLQbgBaiEFDAALAAtBACEFA0AgBSAEKALQBE9FBEAgBCAEKQPQBDcD2AMgBCAEKQPIBDcD0AMgBEHQA2ogBRAZIQYCQAJAAkAgBCgC2AQiBw4CAgABCyAEKALIBCAGQQJ0aigCABAYDAELIAQoAsgEIAZBAnRqKAIAIAcRAQALIAVBAWohBQwBCwsgBEHIBGoiBUEEEDMgBRA4DAILIApBAWohCgwACwALIARBHiADIANBAEgbNgKsBCAEKAKEBCgCEEHAAWohBQJAAkADQCAFKAIAIgMEQCADKAIQIgNBADYCqAIgA0G4AWohBQwBBQJAIAQoAqgEQQQQGiENIAQoAoQEKAIQQcABaiEFIARB3ARqIQdBACEKA0AgBSgCACIIBEAgCCgCECIFKAKoAgR/IAUFQRAQUiIJIAg2AgAgCCgCECAJNgKoAiAEQQA2AtgEIARCADcD0AQgBEIANwPIBEEBIQUgBEEBNgLoBCAEQgA3A+AEIAQgCDYC3AQgBEHIBGpBEBAnIQMgBCgCyAQgA0EEdGoiAyAHKQIANwIAIAMgBykCCDcCCANAAkAgBSEDIAQoAtAEIgVFDQAgBCAEKQPQBDcDyAMgBCAEKQPIBDcDwAMgBCgCyAQgBEHAA2ogBUEBaxAZQQR0aiIMKAIEIQYgDCgCACgCECIPKALAASEQA0ACQCAQIAZBAnRqKAIAIgVFBEAgDCgCCCEGIA8oAsgBIQ8MAQsCQCAFKAIQIhEoAqQBQQBODQAgBSAFQTBqIgsgBSgCAEEDcSISQQNGGygCKCgCECITKAKoAg0AIAVBUEEAIBJBAkcbaigCKCgCECgC9AEgESgCrAEgEygC9AFqRw0AIARBhARqIAUQqggEQCAEIAQpA9AENwO4AyAEIAQpA8gENwOwAyAEQbADaiAEKALQBEEBaxAZIQUCQAJAIAQoAtgEIgYOAgERAAsgBCAEKALIBCAFQQR0aiIFKQIINwOoAyAEIAUpAgA3A6ADIARBoANqIAYRAQALIARByARqIAdBEBDHAUF/IQUgBCgC0AQiBkUNBSAEIAQpA9AENwOYAyAEIAQpA8gENwOQAyAEKALIBCAEQZADaiAGQQFrEBlBBHRqIgUgBSgCDEEBazYCDCADIQUMBQsgBSALIAUoAgBBA3FBA0YbKAIoKAIQIAk2AqgCIAUgCyAFKAIAQQNxQQNGGygCKCEFIARBATYC6AQgBEIANwPgBCAEIAU2AtwEIARByARqQRAQJyEFIAQoAsgEIAVBBHRqIgUgBykCADcCACAFIAcpAgg3AgggAyEFDAQLIAwgBkEBaiIGNgIEDAELCwJAA0AgDyAGQQJ0aigCACIFRQ0BAkACQCAFKAIQIhAoAqQBQQBODQAgBSAFQTBrIgsgBSgCAEEDcSIRQQJGGygCKCgCECISKAKoAg0AIBIoAvQBIBAoAqwBIAVBMEEAIBFBA0cbaigCKCgCECgC9AFqRg0BCyAMIAZBAWoiBjYCCAwBCwsgBEGEBGogBRCqCARAIAQgBCkD0AQ3A4gDIAQgBCkDyAQ3A4ADIARBgANqIAQoAtAEQQFrEBkhBQJAAkAgBCgC2AQiBg4CAQ8ACyAEIAQoAsgEIAVBBHRqIgUpAgg3A/gCIAQgBSkCADcD8AIgBEHwAmogBhEBAAsgBEHIBGogB0EQEMcBQX8hBSAEKALQBCIGRQ0DIAQgBCkD0AQ3A+gCIAQgBCkDyAQ3A+ACIAQoAsgEIARB4AJqIAZBAWsQGUEEdGoiBSAFKAIMQQFrNgIMIAMhBQwDCyAFIAsgBSgCAEEDcUECRhsoAigoAhAgCTYCqAIgBSALIAUoAgBBA3FBAkYbKAIoIQUgBEEBNgLoBCAEQgA3A+AEIAQgBTYC3AQgBEHIBGpBEBAnIQUgBCgCyAQgBUEEdGoiBSAHKQIANwIAIAUgBykCCDcCCCADIQUMAgsgBEHIBGogB0EQEMcBIAQoAugEIQUgBCgC0AQiBkUNASAEIAQpA9AENwPYAiAEIAQpA8gENwPQAiAEKALIBCAEQdACaiAGQQFrEBlBBHRqIgYgBigCDCAFajYCDCADIQUMAQsLIARByARqIgVBEBAzIAUQOCAJIAM2AgQgA0EASA0DIAkgCTYCDCANIApBAnRqIAk2AgAgCkEBaiEKIAgoAhALQbgBaiEFDAELC0EIEFIiByAKNgIEIAcgDTYCAEEAIQUDQCAFIApGBEAgCkEBdiEFA0AgBUF/RgRAAkAgDUEEayEQQQAhDCAKIQkDQCAJQQJJIg8NCiANKAIAIgNBfzYCCCANIBAgCUECdGoiBSgCACIGNgIAIAZBADYCCCAFIAM2AgAgByAJQQFrIgk2AgQgB0EAEKkIIAMoAgBBAEEAEKgIIghFBEBBASEMDAsLIAgoAhAoAqQBQQBODQEgCCAIQTBqIgMgCCgCAEEDcUEDRhsoAigQ0AQhBSAIIAhBMGsiCyAIKAIAQQNxQQJGGygCKBDQBCEGIAgoAhAoAqwBIAggAyAIKAIAQQNxIhFBA0YbKAIoKAIQKAL0AWohAyAIIAsgEUECRhsoAigoAhAoAvQBIQsCQAJ/IAUoAghBf0YEQCADIAtGDQIgCyADayELIAUMAQsgAyALRg0BIAMgC2shCyAGCygCAEEAIAsQpwgLIARBhARqIAgQqggNCQNAIAUiAygCDCIFBEAgAyAFRw0BCwsDQCAGIgUoAgwiBgRAIAUgBkcNAQsLAkAgAyAFRwRAIAUoAgghBgJ/IAMoAghBf0YEQCAGQX9HBEAgBSEGQQAMAgtBracDQea4AUG1A0Hj4wAQAAALIAZBf0YEQCADIQZBAAwBCyADIAUgBSgCBCADKAIESBsiBigCCEF/RgsgBSAGNgIMIAMgBjYCDCAGIAUoAgQgAygCBGo2AgRFDQFBoaEDQea4AUG9A0Hj4wAQAAALIAMiBkUNCgsgByAGKAIIEKkIDAALAAsFIAcgBRCpCCAFQQFrIQUMAQsLQe2kA0HmuAFBpwRB8zAQAAAFIA0gBUECdGooAgAgBTYCCCAFQQFqIQUMAQsACwALCwsgCRAYQQIhDEEAIQ8gDSAKQQJ0akEANgIAQQAhBwwBC0ECIQwLIAcQGEEAIQUCQAJAAkACQAJAA0AgBSAKRgRAAkAgDRAYIA9FDQYgBCgCkAQgBCgCqARBAWtGBEAgBCgChAQoAhAoAsABIQMgBEEANgLYBCAEQgA3A9AEIARCADcDyAQgAygCEEKAgICAEDcDqAIgBEIANwPoBCAEQoCAgIAQNwPgBCAEIAM2AtwEIARByARqQRQQJyEDIAQoAsgEIANBFGxqIgMgBCkC3AQ3AgAgAyAEKALsBDYCECADIAQpAuQENwIIIARB3ARqIQUDQCAEKALQBCIDBEAgBCAEKQPQBDcDyAIgBCAEKQPIBDcDwAIgBCgCyAQgBEHAAmogA0EBaxAZQRRsaiIDKAIMIQYgAygCACgCECIKKAKgAiEJAkADQCAJIAZBAnRqKAIAIgdFBEAgAygCECEGIAooApgCIQkDQCAJIAZBAnRqKAIAIgdFDQMgAyAGQQFqIgY2AhAgByADKAIERg0ACyAHQTBBACAHKAIAQQNxQQNHG2ooAigiBigCECIKIAc2AqgCIAogAygCCCIDNgKsAiAEQgA3A+gEIAQgAzYC5AQgBCAHNgLgBCAEIAY2AtwEIARByARqQRQQJyEDIAQoAsgEIANBFGxqIgMgBSkCADcCACADIAUoAhA2AhAgAyAFKQIINwIIDAQLIAMgBkEBaiIGNgIMIAcgAygCBEYNAAsgB0FQQQAgBygCAEEDcUECRxtqKAIoIgYoAhAiCiAHNgKoAiAKIAMoAggiAzYCrAIgBEIANwPoBCAEIAM2AuQEIAQgBzYC4AQgBCAGNgLcBCAEQcgEakEUECchAyAEKALIBCADQRRsaiIDIAUpAgA3AgAgAyAFKAIQNgIQIAMgBSkCCDcCCAwCCyAKIAMoAggiBjYCsAIgBCAEKQPQBDcDuAIgBCAEKQPIBDcDsAIgBEGwAmogBCgC0ARBAWsQGSEDAkACQCAEKALYBCIHDgIBDgALIAQgBCgCyAQgA0EUbGoiAykCCDcDoAIgBCADKAIQNgKoAiAEIAMpAgA3A5gCIARBmAJqIAcRAQALIARByARqIAVBFBDHASAEKALQBCIDRQ0BIAQgBCkD0AQ3A5ACIAQgBCkDyAQ3A4gCIAQoAsgEIARBiAJqIANBAWsQGUEUbGogBkEBajYCCAwBCwsgBEHIBGoiA0EUEDMgAxA4IAQoAoQEKAIQKALAAUEAEKYIIAJBAEwNBkGo8wgoAgAhDSAEQdwEaiEKQQAhAwJAA0BBACEFIAQoAqAEIgchBkEAIQkCQANAIAQoApAEIAZLBEAgBCAOKQIINwPgASAEIA4pAgA3A9gBIAQoAogEIARB2AFqIAYQGUECdGooAgAiBigCECgCoAEiCEEASARAAn8gBQRAIAYgBSAFKAIQKAKgASAIShsMAQsgBCAOKQIINwPQASAEIA4pAgA3A8gBIAQoAogEIARByAFqIAQoAqAEEBlBAnRqKAIACyEFIAlBAWoiCSAEKAKsBE4NAwsgBCAEKAKgBEEBaiIGNgKgBAwBCwtBACEGIAdFDQADQCAEIAY2AqAEIAYgB08NASAEIA4pAgg3A4ACIAQgDikCADcD+AEgBCgCiAQgBEH4AWogBhAZQQJ0aigCACIGKAIQKAKgASIIQQBIBEACfyAFBEAgBiAFIAUoAhAoAqABIAhKGwwBCyAEIA4pAgg3A/ABIAQgDikCADcD6AEgBCgCiAQgBEHoAWogBCgCoAQQGUECdGooAgALIQUgCUEBaiIJIAQoAqwETg0CCyAEKAKgBEEBaiEGDAALAAsgBUUNAQJAIAUQ/A4iByAHQTBrIgYgBygCAEEDcSIJQQJGGygCKCgCECgC9AEgByAHQTBqIgggCUEDRhsoAigoAhAoAvQBIAcoAhAoAqwBamsiCUEATA0AAkAgBUEwQQAgBSgCAEEDcSILQQNHG2ooAigiECgCECIMKAKkAiAMKAKcAmpBAUYNACAFQVBBACALQQJHG2ooAigiCygCECIPKAKkAiAPKAKcAmpBAUYEQCALQQAgCWsQugMMAgsgDCgCsAIgDygCsAJIDQAgC0EAIAlrELoDDAELIBAgCRC6AwsgByAIIAcoAgBBA3EiCUEDRhsoAiggByAGIAlBAkYbKAIoIAUoAhAoAqABIgtBARD7DiIJIAcgBiAHKAIAQQNxIgxBAkYbKAIoIAcgCCAMQQNGGygCKCALQQAQ+w5HDQcgCSgCECgCrAIhDCAJIAcgBiAHKAIAQQNxQQJGGygCKBD6DiAJIAcgCCAHKAIAQQNxQQNGGygCKBD6DiAHKAIQIgZBACALazYCoAEgBSgCECIIQQA2AqABIAYgCCgCpAEiBjYCpAECQCAGQQBOBEAgBCAHNgKcBCAEIA4pAgg3A8ABIAQgDikCADcDuAEgBEG4AWogBhAZIQYCQAJAAkAgBCgCmAQiCA4CAgABCyAEKAKIBCAGQQJ0aigCABAYDAELIAQoAogEIAZBAnRqKAIAIAgRAQALIAQoAogEIAZBAnRqIAQoApwENgIAIAUoAhBBfzYCpAFBACEGIAVBMEEAIAUoAgBBA3FBA0cbaigCKCIPKAIQIgggCCgCpAJBAWsiCzYCpAIgCCgCoAIhCANAAkAgBiALSw0AIAggBkECdGooAgAgBUYNACAGQQFqIQYMAQsLIAggBkECdGogCCALQQJ0IgtqKAIANgIAQQAhBiAPKAIQKAKgAiALakEANgIAIAVBUEEAIAUoAgBBA3FBAkcbaigCKCIPKAIQIgggCCgCnAJBAWsiCzYCnAIgCCgCmAIhCANAAkAgBiALSw0AIAggBkECdGooAgAgBUYNACAGQQFqIQYMAQsLIAggBkECdGogCCALQQJ0IgVqKAIANgIAIA8oAhAoApgCIAVqQQA2AgAgB0EwQQAgBygCAEEDcUEDRxtqKAIoIgYoAhAiBSAFKAKkAiIIQQFqNgKkAiAFKAKgAiAIQQJ0aiAHNgIAIAYoAhAiBSgCoAIgBSgCpAJBAnRqQQA2AgAgB0FQQQAgBygCAEEDcUECRxtqKAIoIgYoAhAiBSAFKAKcAiIIQQFqNgKcAiAFKAKYAiAIQQJ0aiAHNgIAIAYoAhAiBSgCmAIgBSgCnAJBAnRqQQA2AgAgCSgCECIFKAKsAiAMRg0BIAUoAqgCIQYgBEEANgLYBCAEQgA3A9AEIARCADcDyAQgBSAMNgKsAiAEQgA3A+gEIAQgDDYC5AQgBCAGNgLgBCAEIAk2AtwEIARByARqQRQQJyEFIAQoAsgEIAVBFGxqIgUgCikCADcCACAFIAooAhA2AhAgBSAKKQIINwIIA0ACQAJAIAQoAtAEIgUEQCAEIAQpA9AENwOwASAEIAQpA8gENwOoASAEKALIBCAEQagBaiAFQQFrEBlBFGxqIgUoAgwhBiAFKAIAKAIQIgcoAqACIQgCQAJAA0AgCCAGQQJ0aigCACIJRQRAIAUoAhAhBiAHKAKYAiEIA0AgCCAGQQJ0aigCACIJRQ0EIAUgBkEBaiIGNgIQIAkgBSgCBEYNAAsgCUEwQQAgCSgCAEEDcUEDRxtqKAIoIggoAhAiBigCqAIgCUYNAiAFKAIIIQcMBgsgBSAGQQFqIgY2AgwgCSAFKAIERg0ACyAJIAlBUEEAIAkoAgBBA3FBAkcbaigCKCIIKAIQIgYoAqgCRwRAIAUoAgghBwwECyAFKAIIIgcgBigCrAJHDQMgBSAGKAKwAkEBajYCCAwFCyAFKAIIIgcgBigCrAJHDQMgBSAGKAKwAkEBajYCCAwECyAHIAUoAggiBjYCsAIgBCAEKQPQBDcDoAEgBCAEKQPIBDcDmAEgBEGYAWogBCgC0ARBAWsQGSEFAkACQAJAIAQoAtgEIgcOAgIAAQtBvoAEQcIAQQEgDRA7GhA8AAsgBCAEKALIBCAFQRRsaiIFKQIINwOIASAEIAUoAhA2ApABIAQgBSkCADcDgAEgBEGAAWogBxEBAAsgBEHIBGogCkEUEMcBIAQoAtAEIgVFDQMgBCAEKQPQBDcDeCAEIAQpA8gENwNwIAQoAsgEIARB8ABqIAVBAWsQGUEUbGogBkEBajYCCAwDCyAEQcgEaiIFQRQQMyAFEDgMBAsgBiAHNgKsAiAGIAk2AqgCIARCADcD6AQgBCAHNgLkBCAEIAk2AuAEIAQgCDYC3AQgBEHIBGpBFBAnIQUgBCgCyAQgBUEUbGoiBSAKKQIANwIAIAUgCigCEDYCECAFIAopAgg3AggMAQsgBiAHNgKsAiAGIAk2AqgCIARCADcD6AQgBCAHNgLkBCAEIAk2AuAEIAQgCDYC3AQgBEHIBGpBFBAnIQUgBCgCyAQgBUEUbGoiBSAKKQIANwIAIAUgCigCEDYCECAFIAopAgg3AggMAAsAC0HPmANB5rgBQfMAQa4wEAAACwJAQYzYCi0AAEUgA0EBaiIDQeQAcHINACADQegHcCIFQeQARgRAIARBsARqIA0QiQEaCyAEIAM2AmAgDUHYxwMgBEHgAGoQHxogBQ0AQQogDRCpARoLIAIgA0cNAAsgAiEDC0EAIQUCQAJAAkACQCABQQFrDgIAAQILIARBhARqEPkOIgBBAEgNAkEBIQdBACEKIABBAWpBBBAaIQEgBCgChARBmqEBECYiAkUNBCACQefkABBiIgZFBEBBAiEHIAJBxxMQYkUNBQsgBCgChAQoAhBBwAFqIQUgBkEBcyEKA0AgBSgCACICBEACQCACKAIQIgItAKwBDQAgCiACKALEAUEAR3JFBEAgAkEANgL0AQsgBiACKALMAXINACACIAA2AvQBCyACQbgBaiEFDAEFIAchCgwGCwALAAsDQCAFIAQoApAET0UEQCAEIA4pAgg3A1ggBCAOKQIANwNQAkAgBCgCiAQgBEHQAGogBRAZQQJ0aigCACIAKAIQKAKgAQ0AIAAQ/A4iAUUNACABQVBBACABKAIAQQNxIgJBAkcbaigCKCgCECgC9AEgAUEwQQAgAkEDRxtqKAIoKAIQKAL0ASABKAIQKAKsAWprIgFBAkgNACABQQF2IQEgAEEwQQAgACgCAEEDcSICQQNHG2ooAigiBigCECgCsAIgAEFQQQAgAkECRxtqKAIoIgAoAhAoArACSARAIAYgARC6AwwBCyAAQQAgAWsQugMLIAVBAWohBQwBCwsgBEGEBGogBCgChAQQzwQMBgsgBEGEBGoiABD5DhogACAEKAKEBBDPBAwFC0H7lgNB5rgBQYoGQY+hARAAAAtBmowDQea4AUHwBEG/ngEQAAALBSANIAVBAnRqKAIAEBggBUEBaiEFDAELCyAEQgA3A9gEIARCADcD0AQgBEIANwPIBCAEQcgEaiAEKAKoBEEEEKoCIAQoAoQEKAIQQcABaiEFA0AgBSgCACICBEAgBCACNgLcBCAEQcgEakEEECchBSAEKALIBCAFQQJ0aiAEKALcBDYCACACKAIQQbgBaiEFDAELCyAEQcgEakGeA0GfAyAKQQFKG0EEENcDQQAhBgNAIAQoAtAEIgUgBk0EQEEAIQwDQCAFIAxNBEBBACEGA0AgBSAGTUUEQCAEIAQpA9AENwNIIAQgBCkDyAQ3A0AgBEFAayAGEBkhAAJAAkACQCAEKALYBCICDgICAAELIAQoAsgEIABBAnRqKAIAEBgMAQsgBCgCyAQgAEECdGooAgAgAhEBAAsgBkEBaiEGIAQoAtAEIQUMAQsLIARByARqIgBBBBAzIAAQOCABEBggBEGEBGoQ9w4MBAsgBCAEKQPQBDcDOCAEIAQpA8gENwMwIAQoAsgEIARBMGogDBAZQQJ0aigCACIOKAIQIgItAKwBRQRAIAIoAsABIQdBACEJQQAhBkEAIQgDQCAHIAhBAnRqKAIAIgUEQCAGIAUoAhAiCygCrAEgBUEwQQAgBSgCAEEDcUEDRxtqKAIoKAIQKAL0AWoiBSAFIAZIGyEGIAhBAWohCCALKAKcASAJaiEJDAEFAkAgAigCyAEhD0EAIQsgACEHQQAhCANAIA8gCEECdGooAgAiBQRAIAcgBUFQQQAgBSgCAEEDcUECRxtqKAIoKAIQKAL0ASAFKAIQIgUoAqwBayIQIAcgEEgbIQcgCEEBaiEIIAUoApwBIAtqIQsMAQUgCgRAIAkgC0cNAyACIAYgByAKQQFGGzYC9AEMAwsgCSALRw0CIAcgBiAGIAdIGyEHIAYhBQNAIAUgB0YEQCABIAIoAvQBQQJ0aiIFIAUoAgBBAWs2AgAgASAGQQJ0aiIFIAUoAgBBAWo2AgAgAiAGNgL0AQUgBUEBaiIFIAYgASAFQQJ0aigCACABIAZBAnRqKAIASBshBgwBCwsLCwsLCyACKAKYAhAYIA4oAhAoAqACEBggDigCEEEANgKwAQsgDEEBaiEMIAQoAtAEIQUMAAsACyAEIAQpA9AENwMoIAQgBCkDyAQ3AyAgBCgCyAQgBEEgaiAGEBlBAnRqKAIAKAIQIgItAKwBRQRAIAEgAigC9AFBAnRqIgIgAigCAEEBajYCAAsgBkEBaiEGDAALAAtBACEMQYzYCi0AAEUNAyADQeQATgRAQQogDRCpARoLIAQpAqQEIRQgBBCMATkDECAEIAM2AgwgBCAUQiCJNwIEIAQgBEGwBGo2AgAgDUH4xgQgBBAyDAMLQe7nA0EAEDcgBEGEBGogABDPBEECIQwMAgsgBEGEBGogABDPBEEAIQwMAQsgBEGEBGogABDPBAsgBEHwBGokACAMDwtBACEFIAcoAhAiB0EANgKwASAHKALIASEKA0AgCiAFQQJ0aigCAARAIAVBAWohBSAGQQFqIQYMAQUgB0G4AWohBSAJQQFqIQkMAwsACwALC0G+gARBwgBBAUGo8wgoAgAQOxoQPAAL5wQBA38jAEGAAWsiBSQAIAUgATYCfCAFIAIpAgg3A2AgBSACKQIANwNYIAVB2ABqIAVB/ABqEIYHIQYgBSgCfCEBAkAgBgRAIAEgA0cNASACKAAIIQZBACEAA0AgBCgACCAASwRAIAQoAgAhAyAFIAQpAgg3AzAgBSAEKQIANwMoQQAhASAGIAMgBUEoaiAAEBlBAnRqKAIAIgMoAAhGBEADQCABIAZGDQUgAygCACEHIAUgAykCCDcDICAFIAMpAgA3AxggBSAHIAVBGGogARAZQQJ0aigCADYCbCAFIAIpAgg3AxAgBSACKQIANwMIIAFBAWohASAFQQhqIAVB7ABqEIYHDQALCyAAQQFqIQAMAQsLEP8OIQAgBUFAayACKQIINwMAIAUgAikCADcDOCAFQewAaiAFQThqEIkLIABBADYCFCAAIAUpAmw3AgAgACAFKQJ0NwIIIAAgAigCEDYCECAEIAA2AhQgBEEEECchACAEKAIAIABBAnRqIAQoAhQ2AgAMAQsgAiABNgIUIAJBBBAnIQEgAigCACABQQJ0aiACKAIUNgIAIAAgBSgCfBAtIQEDQCABBEAgACABQVBBACABKAIAQQNxQQJHG2ooAiggAiADIAQQ/g4gACABEDAhAQwBCwsgAigACCIARQ0AIAJBFGohASAFIAIpAgg3A1AgBSACKQIANwNIIAVByABqIABBAWsQGSEAAkACQAJAIAIoAhAiAw4CAgABCyACKAIAIABBAnRqKAIAEBgMAQsgAigCACAAQQJ0aigCACADEQEACyACIAFBBBDHAQsgBUGAAWokAAsIAEEBQRgQGgu/EgMLfwl8An4jAEHQAmsiBSQAIAEoAgAiBiAGQTBrIgkgBigCAEEDcSIHQQJGGygCKCEKIAZBMEEAIAdBA0cbaigCKCgCECIIKwAQIRAgBigCECIHKwAQIREgBSAHKwAYIAgrABigIhM5A5gCIAUgBSkDmAI3A6gCIAUgESAQoCIROQOQAiAFIAUpA5ACNwOgAiAKKAIQIggrABAhECAHKwA4IRIgBSAHKwBAIAgrABigIhQ5A8gCIAUgEiAQoCIQOQPAAiAFIAUpA8gCNwO4AiAFIAUpA8ACNwOwAgJAAkACQCACQQFHBEBBrNgKLQAAQQFHDQELIANBBEcNASAFQdjECCkCACIZNwPgASAFQdDECCkCACIaNwPYASAFIBo3A5gBIAUgGTcDoAEgBUHIxAgpAgAiGTcD0AEgBSAZNwOQASAAEBwhAwNAIAMEQCAFEP8OIgE2AuQBIAVB0AFqQQQQJyECIAUoAtABIAJBAnRqIAUoAuQBNgIAIAAgAyABIAMgBUGQAWoQ/g4gACADEB0hAwwBBUEAIQMDQCAFKALYASADSwRAIAUgBSkD2AE3AxAgBSAFKQPQATcDCCAFQQhqIAMQGSEBAkACQAJAIAUoAuABIgIOAgIAAQsgBSgC0AEgAUECdGooAgAQGAwBCyAFKALQASABQQJ0aigCACACEQEACyADQQFqIQMMAQsLIAVB0AFqIgFBBBAzIAZBKGohCCABEDhBACEKQQAhAQNAAkACQCAFKAKYASIDIApLBEAgBUFAayAFKQOYATcDACAFIAUpA5ABNwM4IAUoApABIAVBOGogChAZQQJ0aigCACIHKAAIIgJBA0kNAiABBEAgASgACCACTQ0DC0EAIQMgCEFQQQAgBigCAEEDcSILQQJHG2ooAgAhDSAIQTBBACALQQNHG2ooAgAhCwNAIAIgA0YEQCACIQMMAwsgBygCACAFIAcpAgg3AzAgBSAHKQIANwMoIAVBKGogAyACIAMbQQFrEBlBAnRqKAIAIQwgBygCACEOIAUgBykCCDcDICAFIAcpAgA3AxggBUEYaiADEBkhDyALIAxGBEAgDiAPQQJ0aigCACANRg0DCyADQQFqIQMMAAsACwJAAkAgAQRAQQAhA0QAAAAAAAAAACERRAAAAAAAAAAAIRBEAAAAAAAAAAAhEwwBC0EAIQEDQCABIANPBEAgBUGQAWoiAUEEEDMgARA4IAAoAhAiACsDGCAAKwMooEQAAAAAAADgP6IhEiAAKwMQIAArAyCgRAAAAAAAAOA/oiEVDAMFIAUgBSkDmAE3A1AgBSAFKQOQATcDSCAFQcgAaiABEBkhAgJAAkACQCAFKAKgASIDDgICAAELIAUoApABIAJBAnRqKAIAEBgMAQsgBSgCkAEgAkECdGooAgAgAxEBAAsgAUEBaiEBIAUoApgBIQMMAQsACwALA0AgASgACCADSwRAIAEoAgAhACAFIAEpAgg3A2AgBSABKQIANwNYIBFEAAAAAAAA8D+gIREgECAAIAVB2ABqIAMQGUECdGooAgAoAhAiACsDGKAhECATIAArAxCgIRMgA0EBaiEDDAELC0EAIQMDfCAFKAKYASADTQR8IAVBkAFqIgBBBBAzIBAgEaMhEiATIBGjIRUgABA4IAUrA5gCIRMgBSsDyAIhFCAFKwPAAiEQIAUrA5ACBSAFIAUpA5gBNwNwIAUgBSkDkAE3A2ggBUHoAGogAxAZIQACQAJAAkAgBSgCoAEiAQ4CAgABCyAFKAKQASAAQQJ0aigCABAYDAELIAUoApABIABBAnRqKAIAIAERAQALIANBAWohAwwBCwshEQsgFSAQIBGgRAAAAAAAAOA/oiIVoSIWIBIgFCAToEQAAAAAAADgP6IiF6EiGBBKIhJEAAAAAAAAAABhDQYgBSAXIBggEqMgECARoSIQIBCiIBQgE6EiECAQoqCfRAAAAAAAABRAoyIQoqEiETkDuAIgBSAVIBYgEqMgEKKhIhA5A6ACIAUgEDkDsAIgBSAROQOoAgwGCyAHIAEgAiADSxshAQsgCkEBaiEKDAALAAsACwALAkACfCARIBChIhIgEqIgEyAUoSISIBKioESN7bWg98awPmMEQCAFIAUpA5ACNwOgAiAFIAUpA5gCNwOoAiAFIAUpA8ACNwOwAiAFIAUpA8gCNwO4AkQAAAAAAAAAACEQRAAAAAAAAAAADAELIAJBAWsiBkEASA0BIAUgFCAQIBGhIhUgACgCSCgCECgC+AEiACAGbEECbbciFqIgEiAVEEoiFKMiF6A5A7gCIAUgECASIBaiIBSjIhCgOQOwAiAFIBMgF6A5A6gCIAUgESAQoDkDoAIgFUEAIABrtyIRoiAUoyEQIBIgEaIgFKMLIRFBACEGIANBBkchCANAIAIgBkYNA0EAIQMCQCAKIAEgBkECdGooAgAiACAAQTBrIgcgACgCAEEDcUECRhsoAihGBEADQCADQQRGDQIgA0EEdCIJIAVB0AFqaiILIAVBkAJqIAlqIgkpAwg3AwggCyAJKQMANwMAIANBAWohAwwACwALA0AgA0EERg0BQQAgA2tBBHQgBWoiCSAFQZACaiADQQR0aiILKQMINwOIAiAJIAspAwA3A4ACIANBAWohAwwACwALAkAgCEUEQCAFIAUpA9ABNwOQASAFKQPYASEZIAUgBSkD4AE3A6ABIAUgGTcDmAEgBSAFKQPoATcDqAEgBSAFKQPwATcDsAEgBSAFKQP4ATcDuAEgBSAFKQOIAjcDyAEgBSAFKQOAAjcDwAEgBUEENgKEASAFIAVBkAFqNgKAASAFIAUpAoABNwN4IAVB+ABqIAVBiAFqEI8EIAAgACAHIAAoAgBBA3FBAkYbKAIoIAUoAogBIAUoAowBIAQQkwEMAQsgACAAIAcgACgCAEEDcUECRhsoAiggBUHQAWpBBCAEEJMBCyAAEJsDIAUgECAFKwOoAqA5A6gCIAUgESAFKwOgAqA5A6ACIAUgESAFKwOwAqA5A7ACIAUgECAFKwO4AqA5A7gCIAZBAWohBgwACwALQY/LAUH2ugFB7wdBwjAQAAALIAYgBiAJIAYoAgBBA3FBAkYbKAIoIAVBkAJqQQQgBBCTASAGEJsDCyAFQdACaiQAC/UCAgV8BX8gBCABuKIhCANAIAMgCkEDaiINSwRAIAIgDUEEdGohDkQAAAAAAAAAACEHIAIgCkEEdGohCwNAIAcgCGVFBEAgDSEKDAMLIAcgCKMiBCAEIAQgDisDCCALKwMoIgWhoiAFoCAEIAUgCysDGCIFoaIgBaAiBqGiIAagIAQgBiAEIAUgCysDCCIFoaIgBaAiBaGiIAWgIgWhoiAFoCEFIAQgBCAEIA4rAwAgCysDICIGoaIgBqAgBCAGIAsrAxAiBqGiIAagIgmhoiAJoCAEIAkgBCAGIAsrAwAiBKGiIASgIgShoiAEoCIEoaIgBKAhBEEAIQoDQCABIApGBEAgB0QAAAAAAADwP6AhBwwCBQJAIAUgACAKQQV0aiIMKwMYRC1DHOviNho/oGVFDQAgBSAMKwMIRC1DHOviNhq/oGZFDQAgDCAMKwMAIAQQKTkDACAMIAwrAxAgBBAjOQMQCyAKQQFqIQoMAQsACwALAAsLC4wBAgF8AX8CQCABIAJlIAAgA2ZyBHxEAAAAAAAAAAAFIAAgAmVFIAEgA2ZFckUEQCABIAChDwsgACACZiIFRSABIANlRXJFBEAgAyACoQ8LIAVFIAAgA2VFckUEQCADIAChDwsgASACZkUgASADZUVyDQEgASACoQsPC0HV7wJB9roBQe0EQfPcABAAAAu1IQIRfwh8IwBB0AJrIgQkACABQQA2AgBBrPoKQaz6CigCAEEBajYCAEGw+gogACgCUCIMQbD6CigCAGo2AgAgAEHYAGohAwJAAkACQANAIAMoAgAiDkUNASAOKAIQIgdB+ABqIQMgBy0AcA0ACyAAKAJUIQhBACEDAkADQCADIAxGBEACQCAIKwMAIAgrAxBkDQAgCCsDCCAIKwMYZA0AQQEgCiAKQQFNG0EBayERQajzCCgCACEPQQAhAwwDCwUCQCAIIANBBXRqIgcrAwggBysDGKGZRHsUrkfheoQ/Yw0AIAcrAwAgBysDEKGZRHsUrkfheoQ/Yw0AIAggCkEFdGoiBSAHKQMANwMAIAUgBykDGDcDGCAFIAcpAxA3AxAgBSAHKQMINwMIIApBAWohCgsgA0EBaiEDDAELC0H+sgRBABA3IAAQqwgMAwsDQCADIBFHBEACQCAIIANBAWoiB0EFdGoiBSsDACIWIAUrAxAiFGRFBEAgBSsDCCIXIAUrAxgiGGRFDQELIAQgBzYC0AFBz7IEIARB0AFqEDcgABCrCEEAIQYMBQsCQAJAAkAgCCADQQV0aiIGKwMAIhUgFGQiCSAGKwMQIhkgFmMiEmogBisDGCIaIBdjIg1qIAYrAwgiGyAYZCILaiIQRQ0AQYzYCi0AAEUNACAEIAc2AuQBIAQgAzYC4AEgD0GfkgQgBEHgAWoQHxogABCrCAwBCyAQRQ0BCwJAIBIEQCAGKwMQIRQgBiAFKwMAOQMQIAUgFDkDAAwBCyAUIBVjBEAgBisDACEUIAYgBSsDEDkDACAFIBQ5AxBBACEJDAELIBcgGmQEQCAGKwMYIRQgBiAFKwMIOQMYIAUgFDkDCEEAIQlBACENDAELQQAhCUEAIQ1BACELIBggG2NFDQAgBisDCCEUIAYgBSsDGDkDCCAFIBQ5AxgLIBBBAWshEEEAIQMDQCADIBBHBEACQCAJQQFxBEAgBSAGKwMAIAUrAxCgRAAAAAAAAOA/okQAAAAAAADgP6AiFDkDECAGIBQ5AwAMAQsgDUEBRgRAIAUgBisDGCAFKwMIoEQAAAAAAADgP6JEAAAAAAAA4D+gIhQ5AwggBiAUOQMYQQAhDQwBC0EAIQ0gCwRAIAUgBisDCCAFKwMYoEQAAAAAAADgP6JEAAAAAAAA4D+gIhQ5AxggBiAUOQMIC0EAIQsLIANBAWohA0EAIQkMAQsLIAUrAxAhFCAFKwMAIRYgBisDECEZIAYrAwAhFQsgByEDIBUgGSAWIBQQgg8iFEQAAAAAAAAAAGRFIAYrAwggBisDGCAFKwMIIAUrAxgQgg8iFUQAAAAAAAAAAGRFcg0BAkAgFCAVYwRAIAYrAxAiFCAGKwMAIhahIAUrAxAiFSAFKwMAIhehZARAIBQgFWNFBEAgBiAVOQMADAMLIAYgFzkDEAwCCyAUIBVjBEAgBSAUOQMADAILIAUgFjkDEAwBCyAGKwMYIhQgBisDCCIWoSAFKwMYIhUgBSsDCCIXoWQEQCAUIBVjBEAgBiAXOQMYDAILIAYgFTkDCAwBCyAUIBVjBEAgBSAUOQMIDAELIAUgFjkDGAsMAQsLIAgrAxAhFAJAAkAgACsDACIWIAgrAwAiF2MEQCAIKwMIIRUMAQsgCCsDCCEVIBQgFmMNACAAKwMIIhggFWMNACAYIAgrAxhkRQ0BCyAAIBYgFxAjIBQQKTkDACAIKwMYIRQgACAAKwMIIBUQIyAUECk5AwgLIAggCkEFdGoiA0EYaysDACEUAkAgACsDKCIVIANBIGsrAwAiF2MgFSADQRBrKwMAIhhkciAAKwMwIhYgFGNyRQRAIBYgA0EIaysDAGRFDQELIAAgFSAXECMgGBApOQMoIANBCGsrAwAhFSAAIBYgFBAjIBUQKTkDMAtBACEGIAxBA3RBEBAaIQsgDEECSQ0BIAgrAwggCCsDKGRFDQEDQCAGIAxGBEBBASEGDAMFIAggBkEFdGoiAysDGCEUIAMgAysDCJo5AxggAyAUmjkDCCAGQQFqIQYMAQsACwALQYywBEEAEDcMAQsgDiAOQTBqIhEgDigCAEEDcSIDQQNGGygCKCAOIA5BMGsiECADQQJGGygCKEcEQCALQRhqIRIgCEEYayETQQAhCkEAIQUDQAJAIAwgBSIDRgRAIAhBOGshCSAMIQMMAQtBACENQQAhCSASIApBBHRqAn8gAwRAQX9BASAIIANBBXQiB2orAwggByATaisDAGQbIQkLIAwgA0EBaiIFSwRAQQFBfyAIIAVBBXRqKwMIIAggA0EFdGorAwhkGyENCwJAIAkgDUcEQCAIIANBBXRqIQMgDUF/RyAJQQFHcQ0BIAsgCkEEdGoiByADKwMAIhQ5AwAgAysDGCEVIAcgFDkDECAHIBU5AwggA0EIagwCCwJAAkAgCUEBag4CBQABCyALIApBBHRqIgcgCCADQQV0aiIDKwMAIhQ5AwAgAysDGCEVIAcgFDkDECAHIBU5AwggA0EIagwCCyALEBggBEH6AjYCyAEgBCAJNgLEASAEIAk2AsABQfbBBCAEQcABahA3QQAhBgwFCyALIApBBHRqIgcgAysDECIUOQMAIAMrAwghFSAHIBQ5AxAgByAVOQMIIANBGGoLKwMAOQMAIApBAmohCgwBCwsDQAJ/AkAgAwRAIANBAWshB0EAIQ1BACEFIAMgDEkEQEF/QQEgCCAHQQV0aisDCCAIIANBBXRqKwMIZBshBQsgBwRAQQFBfyAJIANBBXRqKwMAIAggB0EFdGorAwhkGyENCyAFIA1HBEAgCCAHQQV0aiEDIA1Bf0cgBUEBR3FFBEAgCyAKQQR0aiIFIAMrAwAiFDkDACADKwMYIRUgBSAUOQMQIAUgFTkDCCAFIAMrAwg5AxgMAwsgCyAKQQR0aiIFIAMrAxAiFDkDACADKwMIIRUgBSAUOQMQIAUgFTkDCCAFIAMrAxg5AxgMAgsCQAJAAkAgBUEBag4CAAECCyALIApBBHRqIgMgCCAHQQV0aiIFKwMQIhQ5AwAgBSsDCCEVIAMgFDkDECADIBU5AwggAyAFKwMYIhQ5AxggAyAFKwMAIhU5AzAgAyAUOQMoIAMgFTkDICADIAUrAwg5AzggCkEEagwECyALIApBBHRqIgMgCCAHQQV0aiIFKwMQIhQ5AwAgBSsDCCEVIAMgFDkDECADIBU5AwggAyAFKwMYOQMYDAILIAsQGCAEQZwDNgK4ASAEIAU2ArQBIAQgBTYCsAFB9sEEIARBsAFqEDdBACEGDAULAkAgBkUNAEEAIQMDQCADIAxGBEBBACEDA0AgAyAKRg0DIAsgA0EEdGoiByAHKwMImjkDCCADQQFqIQMMAAsABSAIIANBBXRqIgcrAxghFCAHIAcrAwiaOQMYIAcgFJo5AwggA0EBaiEDDAELAAsAC0EAIQMDQCADIAxGBEACQCAEIAo2AswCIAQgCzYCyAIgBCAAKwMAOQOQAiAEIAArAwg5A5gCIAQgACsDKDkDoAIgBCAAKwMwOQOoAkEAIQYgBEHIAmogBEGQAmogBEHAAmoQig9BAEgEQCALEBhB07sEQQAQNwwICyACBEAgBCAEKQLAAjcDqAEgBEGoAWogBEG4AmoQjwQMAQsgBCgCzAJBIBAaIQIgBCgCzAIhB0EAIQMDQCADIAdGBEAgBEIANwOIAiAEQgA3A4ACIARCADcD+AEgBEIANwPwASAALQAdBEAgBCAAKwMQIhQQVzkD+AEgBCAUEEs5A/ABCyAALQBFQQFGBEAgBCAAKwM4IhQQV5o5A4gCIAQgFBBLmjkDgAILIAQgBCkCwAI3A6ABIAIgByAEQaABaiAEQfABaiAEQbgCahCuCCACEBhBACEGQQBODQIgCxAYQfq7BEEAEDcMCQUgAiADQQV0aiIFIAsgA0EEdGoiBikDADcDACAFIAYpAwg3AwggBSALIANBAWoiA0EAIAMgB0cbQQR0aiIGKQMANwMQIAUgBikDCDcDGAwBCwALAAsFIAggA0EFdGoiB0L/////////dzcDECAHQv/////////3/wA3AwAgA0EBaiEDDAELCwJAAkACQCAEKAK8AiIJQRAQRyIGBEBBACEDIAQoArgCIQADQCADIAlGBEBBACEDIAlBAEchBQJAAkADQCADIAlGDQEgA0EEdCEAIANBAWohAyAGKwMIIAAgBmorAwihmUQtQxzr4jYaP2RFDQALQQAhBQwBCyAJRQ0AQYzYCi0AAEUNACAPEOwBIAQQ1AE3A/ABIARB8AFqEOoBIgAoAhQhAiAAKAIQIQMgACgCDCEHIAAoAgghBSAEIAAoAgA2ApgBIAQgBTYClAEgBCAHNgKQASAEQYgENgKEASAEQfa6ATYCgAFBASEFIAQgA0EBajYCjAEgBCACQewOajYCiAEgD0G4yQMgBEGAAWoQHxogBiAEKAK8AkEEdGoiAEEIaysDACEUIAYrAwghFSAGKwMAIRYgBCAAQRBrKwMAOQNwIAQgFDkDeCAEIBY5A2AgBCAVOQNoIA9BlK4BIARB4ABqEDJBCiAPEKkBGiAPEOsBIAQoArwCIQkLQQAhAyAJQQBHIQ0CQANAIAMgCUYNASADQQR0IQAgA0EBaiEDIAYrAwAgACAGaisDAKGZRC1DHOviNho/ZEUNAAtBACENDAQLIAlFDQNBjNgKLQAARQ0DIA8Q7AEgBBDUATcD8AEgBEHwAWoQ6gEiACgCFCECIAAoAhAhAyAAKAIMIQcgACgCCCEFIAQgACgCADYCWCAEIAU2AlQgBCAHNgJQIARBlgQ2AkQgBEH2ugE2AkAgBCADQQFqNgJMIAQgAkHsDmo2AkggD0G4yQMgBEFAaxAfGiAGIAQoArwCQQR0aiIAQQhrKwMAIRQgBisDCCEVIAYrAwAhFiAEIABBEGsrAwA5AzAgBCAUOQM4IAQgFjkDICAEIBU5AyggD0HlrgEgBEEgahAyQQogDxCpARogDxDrAQwEBSAGIANBBHQiAmoiByAAIAJqIgIpAwA3AwAgByACKQMINwMIIANBAWohAwwBCwALAAsgCxAYQQAhBkHb4wNBABA3DAcLQQEhAyAFIA1yQQFHDQELQQAhA0EAIQkDQCAJIAxGDQEgCCAJQQV0aiIAIAYrAwAiFDkDECAAIBQ5AwAgCUEBaiEJDAALAAtEAAAAAAAAJEAhFEEAIQoDQCADQQFxRSAKQQ5LckUEQCAIIAwgBiAEKAK8AiAUEIEPQQAhAwNAAkACQCADIAxGBEAgDCEDDAELIAggA0EFdGoiACkDAEL/////////9/8AUgRAIAApAxBC/////////3dSDQILIBQgFKAhFAsgCkEBaiEKIAMgDEchAwwDCyADQQFqIQMMAAsACwsgA0EBcQRAIA4gESAOKAIAQQNxQQNGGygCKBAhIQAgBCAOIBAgDigCAEEDcUECRhsoAigQITYCFCAEIAA2AhBB994EIARBEGoQKiAEIAQpAsACNwMIIARBCGogBEHwAWoQjwQgCCAMIAQoAvABIAQoAvQBRAAAAAAAACRAEIEPCyABIAQoArwCNgIAIAsQGAwECyAKQQJqCyEKIAchAwwACwALIAsQGCAEIA4gECAOKAIAQQNxQQJGGygCKBAhNgIAQabuAyAEEDdBACEGCyAEQdACaiQAIAYLqwMBA38jAEHgAGsiBSQAIAUgACsDADkDMCAFIAArAwg5AzggBSABKwMAOQNAIAUgASsDCDkDSEEAIQECQCACIAVBMGogBUHYAGoQig9BAEgNAAJAIAQEQCAFIAUpAlg3AwggBUEIaiAFQdAAahCPBAwBCyACKAIEQSAQGiEBIAIoAgAhBiACKAIEIQJBACEAA0AgACACRgRAIAVCADcDKCAFQgA3AyAgBUIANwMYIAVCADcDECAFIAUpAlg3AwAgASACIAUgBUEQaiAFQdAAahCuCCABEBhBAE4NAkEAIQEMAwUgASAAQQV0aiIEIAYgAEEEdGoiBykDADcDACAEIAcpAwg3AwggBCAGIABBAWoiAEEAIAAgAkcbQQR0aiIHKQMANwMQIAQgBykDCDcDGAwBCwALAAsgBSgCVCICQRAQRyIBBEBBACEAIAUoAlAhBANAIAAgAkYEQCADIAI2AgAMAwUgASAAQQR0IgZqIgcgBCAGaiIGKQMANwMAIAcgBikDCDcDCCAAQQFqIQAMAQsACwALQQAhAUHb4wNBABA3CyAFQeAAaiQAIAELTAICfwF8QQEhAgNAIAEgAkZFBEAgBCAAIAJBBHRqIgMrAwAgA0EQaysDAKEgAysDCCADQQhrKwMAoRBKoCEEIAJBAWohAgwBCwsgBAvtAgECfyMAQRBrIgMkAEGQ+gpBfzYCAEGM+gogADYCAEGI+gogAjYCAEGE+gpBfzYCAEGA+gogAjYCAEH8+QogATYCAEH4+QpBfzYCAEH0+QogATYCAEHw+QogADYCAEHs+QpBADYCAAJ/QQAhAgJAAkACQEHg+QooAgAiAUHk+QooAgAiAEcNAAJAIAFBAEgEQCABIQAMAQtB2PkKIAFBAXRBASABG0EoEIsHQeT5CigCACEARQ0BCyAAQX9GDQFB2PkKIABBAWpBKBCLBw0BQeT5CigCACEAC0Hg+QooAgAiASAATw0BQdj5CkHc+QooAgAgAWogAHBBKBDeAUHs+QpBKBAgGkEBIQJB4PkKQeD5CigCAEEBajYCAAsgAgwBC0GkDEG0twFBuQFBqMQBEAAAC0UEQCADQdItNgIIIANB3gI2AgQgA0G7twE2AgBBqPMIKAIAQcD+AyADEB8aQX8hBAsgA0EQaiQAIAQL2wIBBn8jAEHgAGsiAiQAIAAoAgghBAJAA0AgBCIDIAAoAhAiBUkEQCAAKAIAIgcgA0ECdGooAgAoAgAhBSABKAIAIQYgAiAHIANBAWoiBEECdGooAgAoAgAiBykDCDcDKCACIAcpAwA3AyAgAiAFKQMINwMYIAIgBSkDADcDECACIAYpAwg3AwggAiAGKQMANwMAIAJBIGogAkEQaiACEIEEQQFHDQEMAgsLIAAoAgwhBCAFIQMDfyADIARPDQEgACgCACAEQQJ0aiIGKAIAKAIAIQMgASgCACEFIAIgBkEEaygCACgCACIGKQMINwNYIAIgBikDADcDUCACIAMpAwg3A0ggAiADKQMANwNAIAIgBSkDCDcDOCACIAUpAwA3AzAgAkHQAGogAkFAayACQTBqEIEEQQJGBH8gBAUgBEEBayEEIAAoAhAhAwwBCwshAwsgAkHgAGokACADC60CAQV/IwBBQGoiAiQAIAJB4PkKKQIANwM4IAJB2PkKKQIANwMwAn9BAEHY+QooAgAgAkEwaiAAEBlBKGxqKAIADQAaIAJB4PkKKQIANwMoIAJB2PkKKQIANwMgQdj5CigCACACQSBqIAAQGUEobGpBATYCAEEBIAAgAUYNABoDQAJAIAJB4PkKKQIANwMYIAJB2PkKKQIANwMQQdj5CigCACEFIAJBEGogABAZIQYgA0EDRg0AAkAgA0EMbCIEIAUgBkEobGpqKAIMQX9GDQAgAkHg+QopAgA3AwggAkHY+QopAgA3AwBB2PkKKAIAIAIgABAZQShsaiAEaigCDCABEIgPRQ0AQQEMAwsgA0EBaiEDDAELCyAFIAZBKGxqQQA2AgBBAAsgAkFAayQAC/oBAQV/IwBB0ABrIgIkAANAIANBA0ZFBEAgAkHg+QopAgA3A0ggAkHY+QopAgA3A0AgA0EMbCIFQdj5CigCACACQUBrIAAQGUEobGpqKAIEKAIAIQYgAkHg+QopAgA3AzggAkHY+QopAgA3AzBB2PkKKAIAIAJBMGogABAZQShsaiAFaigCCCgCACEFIAIgBikDCDcDKCACIAYpAwA3AyAgAiAFKQMINwMYIAIgBSkDADcDECACIAEpAwg3AwggAiABKQMANwMAIANBAWohAyAEIAJBIGogAkEQaiACEIEEQQJHaiEEDAELCyACQdAAaiQAIARFIARBA0ZyC94jAhJ/DXwjAEHQA2siAyQAAkACQCAAKAIEIgZBCBBHIg4gBkVyRQRAIANBgy02AgggA0HdADYCBCADQbu3ATYCAEGo8wgoAgBBwP4DIAMQHxoMAQsCQCAGQQQQRyIJIAZFckUEQCADQcYqNgIYIANB4gA2AhQgA0G7twE2AhBBqPMIKAIAQcD+AyADQRBqEB8aDAELAkACQAJAA0BB4PkKKAIAIARNBEACQEHY+QpBKBAzQQAhBCADQQA2ArwDIAMgACgCBCIFQQF0IgY2ArADIAMgBkEEEEciCzYCrAMgCw0AIANB7Cw2AmggA0HsADYCZCADQbu3ATYCYEGo8wgoAgBBwP4DIANB4ABqEB8aDAMLBSADQeD5CikCADcDWCADQdj5CikCADcDUCADQdAAaiAEEBkhBgJAAkACQEHo+QooAgAiCA4CAgABC0G+gARBwgBBAUGo8wgoAgAQOxoQPAALIANBKGoiB0HY+QooAgAgBkEobGpBKBAgGiAHIAgRAQALIARBAWohBAwBCwsgAyAFQf////8HcSIRNgK0A0F/IQYgAyARQQFrIg82ArgDRAAAAAAAAPB/IRUDQCAEIAVHBEAgACgCACAEQQR0aisDACIXIBUgFSAXZCIIGyEVIAQgBiAIGyEGIARBAWohBAwBCwsgAyAAKAIAIgQgBkEEdGoiCCkDCDcDoAMgAyAIKQMANwOYAyADIAQgBiAFIAYbQQR0akEQayIIKQMINwOQAyADIAgpAwA3A4gDIAQgBkEBaiAFcEEEdGohBAJAAkACQCADKwOYAyIVIAMrA4gDYg0AIBUgBCsDAGINACAEKwMIIAMrA6ADZA0BCyADIAMpA5ADNwOAAyADIAMpA6ADNwPwAiADIAMpA5gDNwPoAiADIAMpA4gDNwP4AiADIAQpAwg3A+ACIAMgBCkDADcD2AIgA0H4AmogA0HoAmogA0HYAmoQgQQgACgCBCEFQQFHDQBBACEHQQAhBANAIAQgBUYNAiAAKAIAIQgCQAJAIARFDQAgCCAEQQR0aiIGKwMAIAZBEGsrAwBiDQAgBisDCCAGQQhrKwMAYQ0BCyAOIAdBA3RqIgYgCCAEQQR0ajYCACAGIA4gByAFcEEDdGo2AgQgCSAHQQJ0aiAGNgIAIAdBAWohBwsgBEEBaiEEDAALAAsgBUEBayEKQQAhByAFIQYDQCAGIQQDQCAERQ0CIAAoAgAhCAJAIARBAWsiBiAKTw0AIAggBkEEdGoiDCsDACAIIARBBHRqIg0rAwBiDQAgBiEEIAwrAwggDSsDCGENAQsLIA4gB0EDdGoiBCAIIAZBBHRqNgIAIAQgDiAHIAVwQQN0ajYCBCAJIAdBAnRqIAQ2AgAgB0EBaiEHDAALAAsjAEEQayIMJAACfwJAAkACQANAAkBBACEAIAdBBEkNAANAIAAiBCAHRg0DIARBAWohACAEQQJqIAdwIQpBACENIwBBgAJrIgUkACAFQfABaiAJIAQgB2pBAWsgB3AiCBDAASAFQeABaiAJIAQQwAEgBUHQAWogCSAAIAdwIgYQwAECQAJAIAUrA/gBIAUrA+gBIhWhIAUrA9ABIAUrA+ABIhehoiAFKwPYASAVoSAFKwPwASAXoaKhRAAAAAAAAAAAYwRAIAVBwAFqIAkgBBDAASAFQbABaiAJIAoQwAEgBUGgAWogCSAIEMABIAUrA8gBIAUrA7gBIhWhIAUrA6ABIAUrA7ABIhehoiAFKwOoASAVoSAFKwPAASAXoaKhRAAAAAAAAAAAY0UNAiAFQZABaiAJIAoQwAEgBUGAAWogCSAEEMABIAVB8ABqIAkgBhDAASAFKwOYASAFKwOIASIVoSAFKwNwIAUrA4ABIhehoiAFKwN4IBWhIAUrA5ABIBehoqFEAAAAAAAAAABjRQ0CDAELIAVB4ABqIAkgBBDAASAFQdAAaiAJIAoQwAEgBUFAayAJIAYQwAEgBSsDaCAFKwNYIhWhIAUrA0AgBSsDUCIXoaIgBSsDSCAVoSAFKwNgIBehoqFEAAAAAAAAAABkRQ0BC0EAIQgDQCAIIgYgB0YiDQ0BIAZBAWoiCEEAIAcgCEcbIhAgCkYgBiAKRnIgBCAGRiAEIBBGcnINACAFQTBqIAkgBBDAASAFQSBqIAkgChDAASAFQRBqIAkgBhDAASAFIAkgEBDAASAFKwMwIhogBSsDICIVoSIWmiEbAkACQCAFKwM4IhwgBSsDKCIXoSIeIAUrAxAiHyAVoaIgBSsDGCIgIBehIBaioSIWRAAAAAAAAAAAZCAWRAAAAAAAAAAAYyIGciIQRQ0AIB4gBSsDACIWIBWhoiAFKwMIIhggF6EgG6KgIhlEAAAAAAAAAABkIBlEAAAAAAAAAABjIhJyRQ0AICAgGKEiGSAaIBahoiAcIBihIB8gFqEiHaKhIiFEAAAAAAAAAABkICFEAAAAAAAAAABjIhNyRQ0AIBkgFSAWoaIgFyAYoSAdmqKgIhZEAAAAAAAAAABkIBZEAAAAAAAAAABjIhRyDQELIBcgHKEhFiAVIBqhIRgCQCAQDQAgHyAaoSIZIBiiIBYgICAcoSIdoqBEAAAAAAAAAABmRQ0AIBkgGaIgHSAdoqAgGCAYoiAWIBaioGUNAwsCQCAeIAUrAwAiHiAVoaIgBSsDCCIZIBehIBuioCIbRAAAAAAAAAAAZCAbRAAAAAAAAAAAY3INACAeIBqhIhsgGKIgFiAZIByhIh2ioEQAAAAAAAAAAGZFDQAgGyAboiAdIB2ioCAYIBiiIBYgFqKgZQ0DCyAZICChIRYgHiAfoSEYAkAgICAZoSIbIBogHqGiIBwgGaEgHyAeoSIdoqEiIUQAAAAAAAAAAGQgIUQAAAAAAAAAAGNyDQAgGiAfoSIaIBiiIBwgIKEiHCAWoqBEAAAAAAAAAABmRQ0AIBogGqIgHCAcoqAgGCAYoiAWIBaioGUNAwsgGyAVIB6hoiAXIBmhIB2aoqAiGkQAAAAAAAAAAGQgGkQAAAAAAAAAAGNyDQEgFSAfoSIVIBiiIBcgIKEiFyAWoqBEAAAAAAAAAABmRSAVIBWiIBcgF6KgIBggGKIgFiAWoqBlRXINAQwCCyATIBRzRSAGIBJGcg0ACwsgBUGAAmokACANRQ0ACyAJIARBAnRqKAIAIAkgAEEAIAAgB0cbIgBBAnRqKAIAIAkgCkECdGooAgAQhg8NBCAAIAdBAWsiByAAIAdLGyEEA0AgACAERg0CIAkgAEECdGogCSAAQQFqIgBBAnRqKAIANgIADAALAAsLIAkoAgAgCSgCBCAJKAIIEIYPDQIMAQsgDEGFrQE2AgggDEHLAjYCBCAMQbu3ATYCAEGo8wgoAgBBwP4DIAwQHxoLQQAMAQtBfwshACAMQRBqJAACQCAARQRAQQAhDEHg+QooAgAhBEEAIQgDQCAEIAhNBEADQCAEIAxNDQQgDCABEIkPQeD5CigCACEEDQQgDEEBaiEMDAALAAsgCEEBaiIAIQoDQEEAIQYgBCAKTQRAIAAhCAwCCwNAQQAhBAJAIAZBA0cEQANAIARBA0YNAiADQeD5CikCADcDiAEgA0HY+QopAgA3A4ABQdj5CigCACEHIANBgAFqIAgQGSEFIANB4PkKKQIANwN4IANB2PkKKQIANwNwQdj5CigCACENIANB8ABqIAoQGSEQAkACQAJAIAcgBUEobGogBkEMbGoiBygCBCgCACISIA0gEEEobGogBEEMbGoiBSgCBCgCACIQRwRAIAUoAggoAgAhDQwBCyAFKAIIKAIAIg0gBygCCCgCAEYNAQsgDSASRw0BIAcoAggoAgAgEEcNAQsgByAKNgIMIAUgCDYCDAsgBEEBaiEEDAALAAsgCkEBaiEKQeD5CigCACEEDAILIAZBAWohBgwACwALAAsACyALEBgMAQsCQCAEIAxHBEAgAUEQaiEGQQAhAANAIAAgBE8NAiAAIAYQiQ9B4PkKKAIAIQQNAiAAQQFqIQAMAAsACyADQZKbATYCmAEgA0G0ATYClAEgA0G7twE2ApABQajzCCgCAEHA/gMgA0GQAWoQHxoMAwsgACAERgRAIANB7JoBNgKoASADQb8BNgKkASADQbu3ATYCoAFBqPMIKAIAQcD+AyADQaABahAfGgwDCyAMIAAQiA9FBEAgA0HQ+AA2AsgCIANByQE2AsQCIANBu7cBNgLAAkEAIQRBqPMIKAIAQcD+AyADQcACahAfGiALEBggCRAYIA4QGEECELAIDQUgAkECNgIEQZT6CigCACIAIAEpAwA3AwAgACABKQMINwMIIAAgBikDADcDECAAIAYpAwg3AxggAiAANgIADAYLIAAgDEYEQCALEBggCRAYIA4QGEECELAIDQUgAkECNgIEQQAhBEGU+gooAgAiACABKQMANwMAIAAgASkDCDcDCCAAIAYpAwA3AxAgACAGKQMINwMYIAIgADYCAAwGCyADQQA2AswDIAMgBjYCyAMgA0EANgLEAyADIAE2AsADIBFFBEAgAyALKAIANgLEAwsgA0HAA2oiAEEIciEIIAMgDzYCtAMgCyAPQQJ0aiAANgIAIAMgDzYCvAMgDyIHIQUgDCEKA0AgCkF/RwRAQQAhBCADQeD5CikCADcDuAIgA0HY+QopAgA3A7ACQdj5CigCACADQbACaiAKEBlBKGxqIgBBAjYCACAAQQxqIRECfwJAA0AgBEEDRwRAIBEgBEEMbCIBaigCACINQX9HBEAgA0Hg+QopAgA3A6gCIANB2PkKKQIANwOgAkHY+QooAgAgA0GgAmogDRAZQShsaigCAEEBRg0DCyAEQQFqIQQMAQsLIAsgB0ECdGoiBCgCACgCACEAIAsgBUECdGooAgAoAgAhASADIAYpAwg3A+gBIAMgBikDADcD4AEgAyABKQMINwPYASADIAEpAwA3A9ABIAMgACkDCDcDyAEgAyAAKQMANwPAASADQeABaiADQdABaiADQcABahCBBCEAIAggBCgCACIBIABBAUYiABshBCABIAggABsMAQsgAEEEaiINIAFqIgAoAgQoAgAhASANIARBAWpBA3BBDGxqKAIEKAIAIQQgAyAAKAIAKAIAIg0pAwg3A5gCIAMgDSkDADcDkAIgAyAEKQMINwOIAiADIAQpAwA3A4ACIAMgASkDCDcD+AEgAyABKQMANwPwASADQZACaiADQYACaiADQfABahCBBEEBRgRAIAAoAgAhBCAAKAIEDAELIAAoAgQhBCAAKAIACyEAAkAgCiAMRgRAIAUgB00EQCAAIAsgB0ECdGooAgA2AgQLIAMgB0EBaiIHNgK4AyALIAdBAnRqIAA2AgAgBSAHTQRAIAQgCyAFQQJ0aigCADYCBAsgAyAFQQFrIgU2ArQDIAsgBUECdGogBDYCAAwBCyADAn8CQCALIAVBAnRqKAIAIARGDQAgCyAHQQJ0aigCACAERg0AIANBrANqIAQQhw8iACAHTQRAIAQgCyAAQQJ0aigCADYCBAsgAyAAQQFrIgU2ArQDIAsgBUECdGogBDYCACAAIA8gACAPSxsMAQsgBSADQawDaiAAEIcPIgFNBEAgACALIAFBAnRqKAIANgIECyADIAFBAWoiBzYCuAMgCyAHQQJ0aiAANgIAIAEgDyABIA9JGwsiDzYCvAMLQQAhBANAIARBA0YEQEF/IQoMAwsCQCARIARBDGxqIgAoAgAiAUF/Rg0AIANB4PkKKQIANwO4ASADQdj5CikCADcDsAFB2PkKKAIAIANBsAFqIAEQGUEobGooAgBBAUcNACAAKAIAIQoMAwsgBEEBaiEEDAALAAsLIAsQGEEAIQAgCCEEA0AgBARAIABBAWohACAEKAIEIQQMAQsLIAAQsAhFDQELIAkQGAwCCyACIAA2AgRBlPoKKAIAIQEDQCAIBEAgASAAQQFrIgBBBHRqIgQgCCgCACIGKQMANwMAIAQgBikDCDcDCCAIKAIEIQgMAQsLIAIgATYCACAJEBggDhAYQQAhBAwDCyALEBggCRAYIA4QGEF/IQQMAgsgDhAYC0F+IQQLIANB0ANqJAAgBAuOBAIIfwF+IwBBMGsiAiQAAkACQCAABEAgAUUNASAAKAIEQeQAbCAAKAIABH9BASAAKAIIdAVBAAsiBUHGAGxJDQJBASAFBH8gACgCCEEBagVBCgsiA3RBBBAaIQQgAkIANwMYIAJCADcDKCACQgA3AyAgAiADNgIYIAJCADcDECACIAQ2AhBBACEDA0AgACgCACEEIAMgBUYEQCAEEBggACACKQMoNwMYIAAgAikDIDcDECAAIAIpAxg3AwggACACKQMQNwMADAQLIAQgA0ECdGooAgAiBEEBakECTwRAIAJBEGogBBCLDwsgA0EBaiEDDAALAAtBkdQBQau9AUGhA0HzrwEQAAALQfXTAUGrvQFBogNB868BEAAACyABKAIQKQMIIQoCQCAALQAMQQFGBEAgCiAAKQMQWg0BCyAAIAo3AxAgAEEBOgAMCyAAKQMYIApUBEAgACAKNwMYCwJAIAAoAgAiBARAQQEgACgCCHQiBSAAKAIEIgZLDQELQYeIAUGrvQFBzwNB868BEAAACyAFQQFrIQcgCqchCEEAIQMCQANAIAMgBUcEQCAEIAMgCGogB3FBAnRqIgkoAgBBAWpBAkkNAiADQQFqIQMMAQsLIAJB3gM2AgQgAkGrvQE2AgBBqPMIKAIAQea8BCACEB8aEDwACyAJIAE2AgAgACAGQQFqNgIEIAJBMGokAAtzAQF/IAAQJSAAEE5PBEAgAEEBEL0BCyAAECUhAQJAIAAQKARAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAlQRBJDQFBibQDQZ38AEGvAkH3sQEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLC7gBAgN/AXwjAEEwayIEJAADQCACIAVGBEAgAwRAIAErAwAhByAEIAErAwg5AwggBCAHOQMAIABBx6MDIAQQHgsgAEGSgAUQGxogBEEwaiQABQJAIAVFBEAgASsDACEHIAQgASsDCDkDGCAEIAc5AxAgAEGZowMgBEEQahAeDAELIAEgBUEEdGoiBisDACEHIAQgBisDCDkDKCAEIAc5AyAgAEHHowMgBEEgahAeCyAFQQFqIQUMAQsLC7sBAQJ/AkACQCAAKAIwELsDIAAoAiwQmgFGBEAgACgCMBC7AyEDIAAQOSAARgR/IAFBHGoFQSQQUgsiAiABNgIQIAAoAjAgAhCLDyAAKAIsIgEgAkEBIAEoAgARAwAaIAAoAjAQuwMgACgCLBCaAUcNASAAKAIwELsDIANBAWpHDQIPC0GsoQNBq70BQeAAQfyeARAAAAtBrKEDQau9AUHnAEH8ngEQAAALQcmMA0GrvQFB6ABB/J4BEAAAC4oBAQN/IwBBEGsiBCQAIABBhsgBQQAQHiABQQAgAUEAShshBUEAIQEDQCABIAVHBEAgAQRAIABB2J4DQQAQHgsgBCACIAFBBHRqIgYrAwA5AwAgAEHuyQMgBBAeIAYoAgggAyAAELwCIABB/QAQZSABQQFqIQEMAQsLIABBzsoEQQAQHiAEQRBqJAALIwAgACgCACgCAEEEdiIAIAEoAgAoAgBBBHYiAUsgACABSWsLNQAgACABQQAgAhCTDyAAEHghAANAIAAEQCABQcfqBBAbGiAAIAEgAhCRDyAAEHchAAwBCwsLnAIBBX8jAEEgayIEJAACQAJAAkAgABA5IABGDQAgAEHopgFBABBrIAE2AgggABAhIgNFDQEgAUEBaiEBIANB+zdBBxDpAQ0AIAAQISEDIABB6KYBQQAQaygCCCEGIAIgA0GABCACKAIAEQMAIgUEQCAFKAIMIAZGDQEgBCADNgIQQd/4BCAEQRBqECoMAQtBAUEQENYEIQUgAxClASIHRQ0CIAUgBjYCDCAFIAc2AgggAiAFQQEgAigCABEDABoLIAAQeCEAA0AgAARAIAAgASACEJIPIQEgABB3IQAMAQsLIARBIGokACABDwtB9NIBQej7AEEMQZv3ABAAAAsgBCADED9BAWo2AgBBqPMIKAIAQYPnAyAEEB8aECwAC9AOAQh/IwBBsAFrIgYkACACBEBBhLcKQbTrCSgCABCSASEKIABBAUHopgFBDEEAELQCIABBAkHopgFBDEEAELQCIABBAEHopgFBdEEAELQCIABBACAKEJIPIQsgABAcIQgDQCAIBEACQCAIKAIQLQCGAUEBRgRAIAogCBAhQYAEIAooAgARAwAiBUUEQEF/IQQMAgsgBSgCDCEEDAELIAkgC2ohBCAJQQFqIQkLIAhB6KYBQQAQayAENgIIIAAgCBAtIQQDQCAEBEAgBEHopgFBABBrIAc2AgggB0EBaiEHIAAgBBAwIQQMAQsLIAAgCBAdIQgMAQsLIAoQmQEaCyADIAMoAgAiBUEBajYCACABIAUQQyABQf7VAxAbGiAAECEgASADKAIAEEMgAUGIygMQGxogAyABELwCAkAgAgRAIAFBx+oEEBsaIAEgAygCABBDIAZBu4oBQeqTASAAEIECGzYCkAEgAUG45wQgBkGQAWoQHiABIAMoAgAQQyAGQbuKAUHqkwEgABDcBRs2AoABIAFBvjQgBkGAAWoQHiAAIAEgAxCBBiABQcfqBBAbGiABIAMoAgAQQyAGIAs2AnAgAUHMsQEgBkHwAGoQHgwBCyAAIAEgAxCBBiABQcfqBBAbGiABIAMoAgAQQyAGIABB6KYBQQAQaygCCDYCoAEgAUHgsQEgBkGgAWoQHgsCQCAAEHgiBUUNACABQcfqBBAbGiADIAMoAgAiBEEBajYCACABIAQQQwJAIAIEQCABQdnKBBAbGgwBCyABQefKBBAbGiABIAMoAgAQQwtBlYAFIQcgBSEEA0AgBARAIAEgBxAbGgJAIAIEQCAEIAEgAxCRDwwBCyAGIARB6KYBQQAQaygCCDYCYCABQfSxASAGQeAAahAeC0HH6gQhByAEEHchBAwBCwsgAg0AIAMgAygCAEEBazYCACABQZKABRAbGiABIAMoAgAQQyABQfXHARAbGgsgABAcIQQCQAJAAkADQCAEBEAgBCgCEC0AhgFBAUcNAiAAIAQQHSEEDAELCyACRSAFRXINAgwBCyABQcfqBBAbGgJAIAIEQCAFDQEgAyADKAIAIgVBAWo2AgAgASAFEEMgAUHZygQQGxoMAQsgAyADKAIAIgVBAWo2AgAgASAFEEMgAUGDywQQGxogASADKAIAEEMLQZWABSEHIAAQHCEEA0AgBEUNAQJAIAQoAhAtAIYBDQAgASAHEBsaIAIEQCADIAMoAgAiBUEBajYCACABIAUQQyABQf7VAxAbGiABIAMoAgAQQyAGIARB6KYBQQAQaygCCDYCQCABQffnBCAGQUBrEB4gASADKAIAEEMgAUGIygMQGxogBBAhIAMgARC8AiAEIAEgAxCBBiABQZKABRAbGiADIAMoAgBBAWsiBTYCACABIAUQQyABQa8IEBsaQcfqBCEHDAELIAYgBEHopgFBABBrKAIINgJQIAFB9LEBIAZB0ABqEB5B2J4DIQcLIAAgBBAdIQQMAAsACyADIAMoAgBBAWs2AgAgAUGSgAUQGxogASADKAIAEEMgAUH1xwEQGxoLQQAhByAAEBwhCANAAkAgCEUEQCAHRQ0BQQAhCCAHQQQQ1gQhCSAAEBwhBQNAIAVFBEAgCSAHQQRB6AIQqAEgAUHH6gQQGxogAyADKAIAIgBBAWo2AgAgASAAEEMgAUH3ygQQGxogAkUEQCABIAMoAgAQQwtBACEEA0AgBCAHRgRAIAkQGCADIAMoAgBBAWs2AgAgAUGSgAUQGxogASADKAIAEEMgAUH1xwEQGxoMBQUCQCAGAn8CQAJAIAQEQCAJIARBAnRqIQAgAkUNAiABQcfqBBAbGiAAKAIAIQAMAQsgCSgCACIAIAJFDQIaCyADIAMoAgAiBUEBajYCACABIAUQQyABQf7VAxAbGiABIAMoAgAQQyAGIABB6KYBQQAQaygCCDYCICABQffnBCAGQSBqEB4gASADKAIAEEMgBiAAQTBBACAAKAIAQQNxQQNHG2ooAihB6KYBQQAQaygCCDYCECABQernBCAGQRBqEB4gASADKAIAEEMgBiAAQVBBACAAKAIAQQNxQQJHG2ooAihB6KYBQQAQaygCCDYCACABQeyxASAGEB4gACABIAMQgQYgAUGSgAUQGxogAyADKAIAQQFrIgA2AgAgASAAEEMgAUGvCBAbGgwCCyABQdieAxAbGiAAKAIAC0HopgFBABBrKAIINgIwIAFB9LEBIAZBMGoQHgsgBEEBaiEEDAELAAsACyAAIAUQLSEEA0AgBARAIAkgCEECdGogBDYCACAIQQFqIQggACAEEDAhBAwBBSAAIAUQHSEFDAILAAsACwALIAAgCBAtIQQDQCAEBEAgB0EBaiEHIAAgBBAwIQQMAQUgACAIEB0hCAwDCwALAAsLIAFBkoAFEBsaIAMgAygCAEEBayIANgIAIAEgABBDIAFBpNUDQa8IIAIbEBsaIAZBsAFqJAALgwEBAX8gACAAKAIAQXdxNgIAIAAQeCECA0AgAgRAIAJBABCUDyACEHchAgwBCwsCQCABRQ0AIAAQHCEBA0AgAUUNASABIAEoAgBBd3E2AgAgACABEC0hAgNAIAIEQCACIAIoAgBBd3E2AgAgACACEDAhAgwBCwsgACABEB0hAQwACwALC78BAQN/IwBBIGsiAiQAAkACQAJAAkACQCABKAIgQQFrDgQBAgIAAgsgASgCACIBQanBCBBMDQIgAEGcwQgQGxoMAwsgAS0AA0UEQCAAQZzBCBAbGgwDCyABLQAAIQMgAS0AASEEIAIgAS0AAjYCGCACIAQ2AhQgAiADNgIQIABByxMgAkEQahAeDAILIAJBiAE2AgQgAkHduwE2AgBBqPMIKAIAQea8BCACEB8aEDwACyAAIAEQGxoLIAJBIGokAAvrAwEHfyMAQSBrIgMkAAJAIAAEQAJAAkACQCABQQFqDgIBAAILQcTTAUHBuQFBowFBgLABEAAAC0GE2gFBwbkBQaQBQYCwARAAAAsgACgCBEHkAGwgACgCACICBH9BASAAKAIIdAVBAAsiBUHGAGxJDQFBASAFBH8gACgCCEEBagVBCgsiAnRBBBAaIQQgAyACNgIcQQAhAiADQQA2AhggAyAENgIUA0AgACgCACEEIAIgBUYEQCAEEBggACADKAIcNgIIIAAgAykCFDcCACAAKAIAIQIMAwsgBCACQQJ0aigCACIEQQFqQQJPBEAgA0EUaiAEEJYPCyACQQFqIQIMAAsAC0Hb0gFBwbkBQaIBQYCwARAAAAsCQCACBEBBASAAKAIIdCIFIAAoAgRNDQEgBUEBayEEIAFBCGogASkDAEI/iKcQvgYhBiAAKAIAIQdBACECAkADQCACIAVHBEAgByACIAZqIARxQQJ0aiIIKAIAQQFqQQJJDQIgAkEBaiECDAELCyADQdgBNgIEIANBwbkBNgIAQajzCCgCAEHmvAQgAxAfGhA8AAsgCCABNgIAIAAgACgCBEEBajYCBCADQSBqJAAPC0Ho0gFBwbkBQcYBQYCwARAAAAtB8YcBQcG5AUHIAUGAsAEQAAALmwEBAX8CQAJAAkAgAkECaw4CAAECCyAAIAFBAhCEBiEDDAELIAAQgwYhAwsgAEH3kgEQGxogACACIAMQ1wQgAEHYwAMQGxogACABKwMAEHsgAEHEwAMQGxogACABKwMImhB7IABB0cADEBsaIAAgASsDECABKwMAoRB7IABBlcADEBsaIAAgASsDGCABKwMIoRB7IABB2tEEEBsaC/4HAgZ/AXwjAEHQAWsiAyQAIAAoAhAhBiAAQdy4AxAbGiAAQZGuA0GKvwNBiboDIAItADAiBEHyAEYbIARB7ABGGxAbGiACKwMYIAErAwigIQkgBi0AjQJBAnFFBEAgAEHewAMQGxogACABKwMAEHsgAEHLwAMQGxogACAJmhB7IABBocQDEBsaCwJ/AkAgAigCBCIEKAIIIgEEQEEQIQdBCCEFIAEhBAJAAkACQCAAKAIAKAKgASgCECgC9AFBAWsOAgIAAQsgAUEYaiEEQSAhB0EcIQUMAQsgAUEEaiEECyABIAVqKAIAIQUgASAHaigCACEHIAEoAgwhCCADIAQoAgAiBDYCwAEgAEHMMyADQcABahAeIAEoAhgiAUUgASAERnJFBEAgAyABNgKwASAAQcgzIANBsAFqEB4LIABBIhBlIAUEQCADIAU2AqABIABBnrMDIANBoAFqEB4LIAgEQCADIAg2ApABIABBu7MDIANBkAFqEB4LIAdFDQEgAyAHNgKAASAAQc6zAyADQYABahAeQQEMAgsgAyAEKAIANgJwIABBjLMDIANB8ABqEB4LQQALIQQCQCACKAIEKAIYIgFB/wBxRQ0AIAFBAXFFIAVyRQRAIABBnb8DEBsaCyAEIAFBAnFFckUEQCAAQbG/AxAbGgsgAUHkAHEEQCAAQYHBAxAbGkEAIQUgAUEEcSIEBEAgAEGElwEQGxpBASEFCyABQcAAcQRAIANB2J4DQZWABSAEGzYCYCAAQfmWASADQeAAahAeQQEhBQsgAUEgcQRAIANB2J4DQZWABSAFGzYCUCAAQZ76ACADQdAAahAeCyAAQSIQZQsgAUEIcQRAIABB8bMDEBsaCyABQRBxRQ0AIABBxr8DEBsaCyADIAIoAgQrAxA5A0AgAEG3uAMgA0FAaxAeAkACQAJAAkAgBigCMEEBaw4EAQMDAAMLIAYoAhAiAUGQwQgQL0UNASADIAE2AhAgAEGwswMgA0EQahAeDAELIAYtABAhASAGLQARIQQgAyAGLQASNgI4IAMgBDYCNCADIAE2AjAgAEHjqwMgA0EwahAeIAYtABMiAUH/AUYNACADIAG4RAAAAAAA4G9AozkDICAAQcm4AyADQSBqEB4LIABBPhBlIAYtAI0CQQJxBEAgAEG4qwMQGxogACAGKALcARCIASAAQZzAAxAbGiAAIAmaEHsgAEG53wEQGxoLIAIoAgAgA0GYwQgoAgA2AgwgA0EMakHSAiAAEKAEIAYtAI0CQQJxBEAgAEHx3QEQGxoLIABBu88EEBsaIANB0AFqJAAPCyADQZgENgIEIANB3bsBNgIAQajzCCgCAEHmvAQgAxAfGhA8AAsLACAAQYrQBBAbGgvmAQEBfyMAQRBrIgUkACAAQdmCARAbGiAEBEAgAEHaxAEQGxogACAEEIgBIABBIhBlCyAAQfrBARAbGgJAIAFFDQAgAS0AAEUNACAAQbPBAxAbGiAFQQA2AgggBUEANgIMIAEgBUEIakHSAiAAEKAEIABBIhBlCwJAIAJFDQAgAi0AAEUNACAAQeLBAxAbGiAFQZjBCCgCADYCBCACIAVBBGpB0gIgABCgBCAAQSIQZQsCQCADRQ0AIAMtAABFDQAgAEHjwAMQGxogACADEIgBIABBIhBlCyAAQaXTBBAbGiAFQRBqJAALSAEBfyAAIAAoAhAiASgC3AFBAEGinQEgASgCCBCDBCAAQaDeARAbGiAAQdTZASABKAIIEIABIgEQiAEgARAYIABB3dAEEBsaC14BA38gACAAKAIQIgEoAtwBIAAoAqABIgNBAk4EfyAAKAIAKAKsAiADQQJ0aigCAAVBAAtBm58BIAEoAggQgwQgAEGg3gEQGxogACABKAIIECEQiAEgAEHd0AQQGxoLPAEBfyAAIAAoAhAiASgC3AFBAEH7NyABKAIIEIMEIABBoN4BEBsaIAAgASgCCBAhEIgBIABB3dAEEBsaC9oBAgJ/AXwjAEEgayIBJAAgACAAKAIQIgIoAtwBQQBBhfoAIAIoAggQgwQgAEGrqgMQGxogACsD6AMhAyABIAArA/ADOQMYIAEgAzkDECAAQfqCASABQRBqEB4gAUEAIAAoAugCazYCACAAQZOqAyABEB4gACAAKwP4AxB7IABBIBBlIAAgACsDgASaEHsgAEHh0gQQGxoCQCACKAIIECEtAABFDQAgAigCCBAhLQAAQSVGDQAgAEGi3gEQGxogACACKAIIECEQiAEgAEHd0AQQGxoLIAFBIGokAAsfACAAIAFBAEHQNyAAKAIQKAIIEIMEIABBpdMEEBsaCwsAIABBgtAEEBsaC9IBAgJ/AX4jAEEwayIBJAAgACgCECECIABB0p4DEBsaAkAgAigCCBAhLQAARQ0AIAIoAggQIS0AAEElRg0AIABBr8kDEBsaIAAgAigCCBAhEIgBCyABIAAoAqgBIAAoAqQBbDYCICAAQd/RBCABQSBqEB4gASAAKQPAAzcDECAAQc71BCABQRBqEB4gACkDyAMhAyABIAApA9ADNwMIIAEgAzcDACAAQe7CAyABEB4gACgCQEECRwRAIABBqrUDEBsaCyAAQaXTBBAbGiABQTBqJAALrAEBAX8gACgCQEECRwRAIABB/NAEEBsaAkAgACgCACgCoAFBpCMQJiIBRQ0AIAEtAABFDQAgAEHBwQMQGxogACABEBsaIABB59AEEBsaCyAAQfzRBBAbGgsgAEHOxAMQGxogACAAKAIMKAIAKAIAEIgBIABB7MUDEBsaIAAgACgCDCgCACgCBBCIASAAQciqAxAbGiAAIAAoAgwoAgAoAggQiAEgAEHv0QQQGxoLiQIBAX8jAEFAaiIFJAACQCAERQ0AIAAoAhAiBCsDUEQAAAAAAADgP2RFDQAgACAEQThqEJUCIABBh8gDEBsaIAAgAiADEIsCIABBzMsDEBsaIAUgAikDCDcDOCAFIAIpAwA3AzAgACAFQTBqEOcBIAUgATYCJCAFIAM2AiAgAEG29gMgBUEgahAeCyAAKAIQKwMoRAAAAAAAAOA/ZARAIAAQhAQgACAAKAIQQRBqEJUCIABBh8gDEBsaIAAgAiADEIsCIABBzMsDEBsaIAUgAikDCDcDGCAFIAIpAwA3AxAgACAFQRBqEOcBIAUgATYCBCAFIAM2AgAgAEHW9gMgBRAeCyAFQUBrJAALGwAgAEGyygMQGxogACABEBsaIABBkoAFEBsaC8UBAQN/IwBBIGsiAyQAIAAoAhArAyhEAAAAAAAA4D9kBEAgABCEBCAAIAAoAhBBEGoQlQIgAEGxxgMQGxogAyABKQMINwMYIAMgASkDADcDECAAIANBEGoQ5wEgAEGnhwQQGxpBASACIAJBAU0bIQRBASECA0AgAiAERgRAIABB/a4EEBsaBSADIAEgAkEEdGoiBSkDCDcDCCADIAUpAwA3AwAgACADEOcBIABBuYcEEBsaIAJBAWohAgwBCwsLIANBIGokAAu1AgEBfyMAQSBrIgQkAAJAIANFDQAgACgCECIDKwNQRAAAAAAAAOA/ZEUNACAAIANBOGoQlQIgAEGxxgMQGxogBCABKQMINwMYIAQgASkDADcDECAAIARBEGoQ5wEgAEGnhwQQGxpBASEDA0AgAiADTQRAIABBp4sEEBsaBSAAIAEgA0EEdGpBAxCLAiAAQYyHBBAbGiADQQNqIQMMAQsLCyAAKAIQKwMoRAAAAAAAAOA/ZARAIAAQhAQgACAAKAIQQRBqEJUCIABBscYDEBsaIAQgASkDCDcDCCAEIAEpAwA3AwAgACAEEOcBIABBp4cEEBsaQQEhAwNAIAIgA00EQCAAQf2uBBAbGgUgACABIANBBHRqQQMQiwIgAEGMhwQQGxogA0EDaiEDDAELCwsgBEEgaiQAC/sCAQN/IwBBQGoiBCQAAkAgA0UNACAAKAIQIgMrA1BEAAAAAAAA4D9kRQ0AIAAgA0E4ahCVAiAAQbHGAxAbGiAEIAEpAwg3AzggBCABKQMANwMwIAAgBEEwahDnASAAQaeHBBAbGkEBIAIgAkEBTRshBUEBIQMDQCADIAVGBEAgAEGniwQQGxoFIAQgASADQQR0aiIGKQMINwMoIAQgBikDADcDICAAIARBIGoQ5wEgAEG5hwQQGxogA0EBaiEDDAELCwsgACgCECsDKEQAAAAAAADgP2QEQCAAEIQEIAAgACgCEEEQahCVAiAAQbHGAxAbGiAEIAEpAwg3AxggBCABKQMANwMQIAAgBEEQahDnASAAQaeHBBAbGkEBIAIgAkEBTRshAkEBIQMDQCACIANGBEAgAEHdrgQQGxoFIAQgASADQQR0aiIFKQMINwMIIAQgBSkDADcDACAAIAQQ5wEgAEG5hwQQGxogA0EBaiEDDAELCwsgBEFAayQAC7wBAQF/IwBBIGsiAyQAIAMgASkDADcDACADIAEpAwg3AwggAyABKwMQIAErAwChOQMQIAMgASsDGCABKwMIoTkDGAJAIAJFDQAgACgCECIBKwNQRAAAAAAAAOA/ZEUNACAAIAFBOGoQlQIgACADQQIQiwIgAEG3iwQQGxoLIAAoAhArAyhEAAAAAAAA4D9kBEAgABCEBCAAIAAoAhBBEGoQlQIgACADQQIQiwIgAEHvrgQQGxoLIANBIGokAAvuAgEEfyMAQdAAayIDJAAgACgCECIEKwMoRAAAAAAAAOA/Y0UEQCAAIARBEGoQlQIgACACKAIEKwMQEHsgAigCBCgCACIEED9BHk8EQCADIAQ2AkBBh+MDIANBQGsQKgsgBCEFAkADQCAFLQAAIgZFDQEgBkEgRiAGwEEASHIgBkEgSXJFBEAgBUEBaiEFIAZB/wBHDQELCyADIAQ2AjBBueIDIANBMGoQKgsgAyACKAIEKAIANgIgIABBwd4DIANBIGoQHiACKAIAQZT5CigCABDOBiEEIAItADAiBUHsAEcEQCABIAErAwACfCAFQfIARgRAIAIrAyAMAQsgAisDIEQAAAAAAADgP6ILoTkDAAsgASACKwMYIAErAwigOQMIIAMgASkDCDcDGCADIAEpAwA3AxAgACADQRBqEOcBIABB48UDEBsaIAAgAisDIBB7IAMgBDYCACAAQajbAyADEB4gBBAYCyADQdAAaiQAC2gAIwBBEGsiAiQAAkAgAUUNACAAKAIQIgMoApgCRQ0AIABB/8cDEBsaIAAgAygCmAJBAhCLAiAAQc3KBBAbGiACIAFBlPkKKAIAEM4GIgE2AgAgAEHqjwQgAhAeIAEQGAsgAkEQaiQACzYBAX8jAEEQayIBJAAgASAAKAIQKAIIECE2AgAgAEGkgAQgARAeIABB66kEEBsaIAFBEGokAAtjAQF/IwBBEGsiASQAIAAoAgwoAhQEQCAAQYaDBBAbGiAAQQAgACgCDCgCFEEEahDPBgsgAEHrrAQQGxogAEGjhgQQGxogASAAKAIMKAIcNgIAIABB68QEIAEQHiABQRBqJAALlAQDBn8BfgN8IwBBsAFrIgEkACAAKALUAyECIAAoAtADIQMgACgCzAMhBSAAKALIAyEGIAEgACgCDCgCHEEBaiIENgKkASABIAQ2AqABIABB98MEIAFBoAFqEB4gACgCDCgCFEUEQCABIAI2ApwBIAEgAzYCmAEgASAFNgKUASABIAY2ApABIABBt8MEIAFBkAFqEB4LIAFBkpYBQZIhIAAoAugCGzYCgAEgAEHR/AMgAUGAAWoQHiAAKAJAQQFGBEAgASACNgJ0IAEgAzYCcCAAQaiyBCABQfAAahAeCyAAKQLEASEHIAEgACgCzAE2AmggASAHNwNgIABBwLAEIAFB4ABqEB4gACgCDCgCFEUEQCABIAU2AlQgASACIAVrNgJcIAEgBjYCUCABIAMgBms2AlggAEGRkQQgAUHQAGoQHgsgACsD6AMhCCAAKwPwAyEJIAAoAugCIQQgACsD+AMhCiABQUBrIAArA4AEOQMAIAEgCjkDOCABIAQ2AjAgASAJOQMoIAEgCDkDICAAQa6rBCABQSBqEB4gACgCQEEBRgRAIAJBwPAASCADQb/wAExxRQRAIAAoAgwoAhAhBCABQcDwADYCGCABIAI2AhQgASADNgIQQabzBCABQRBqIAQRBAALIAEgAjYCDCABIAM2AgggASAFNgIEIAEgBjYCACAAQcGPBCABEB4LIAFBsAFqJAALKgAjAEEQayIBJAAgASADNgIEIAEgAjYCACAAQemDBCABEB4gAUEQaiQAC+gDAgV/AX4jAEEwayICJAAgACgCECEDQZD5CkEAOgAAAkAgACgCDCgCHA0AIAIgAygCCBAhNgIgIABBgP4DIAJBIGoQHiAAQdPZBEHH8QQgACgCQEECRhsQGxoCQCAAKAIMKAIUDQAgACgCQEECRwRAIABBr/EEEBsaDAELIAApA8gDIQYgAiAAKQPQAzcDGCACIAY3AxAgAEHZwwQgAkEQahAeCyAAQfKpBBAbGiAAIAAoAgwoAhhBgKwKEM8GIwBBEGsiBCQAAkBBiNwKKAIAIgFFDQAgAUEAQYABIAEoAgARAwAhAQNAIAFFDQEgAS0AEEUEQCAEIAEoAgw2AgAgAEHk1QMgBBAeIABBiNYEEBsaIAAgARDqCSAAQa/fAxAbGiAAQa2hBBAbGgtBiNwKKAIAIgUgAUEIIAUoAgARAwAhAQwACwALIARBEGokACAAKAIMKAIUIgFFDQAgASgCACEBIAJBADYCLCACIAE2AiggAEEAIAJBKGoQzwYLQZT5CkEBQX8gAygCCCgCEC0Ac0EBRhs2AgBBkPkKLQAARQRAIABBk9kEEBsaQZD5CkEBOgAACyADKALYASIBBEAgAiABQZT5CigCABDOBiIBNgIAIABBjY8EIAIQHiABEBgLIAJBMGokAAuRAQIBfwF+IwBBIGsiASQAIABBsoYEEBsaIAAoAkBBAkcEQCABIAAoAgwoAhw2AhAgAEHPxAQgAUEQahAeCwJAIAAoAgwoAhQNACAAKAJAQQJGDQAgACkD2AMhAiABIAApA+ADNwMIIAEgAjcDACAAQdnDBCABEB4LIABBhq0EEBsaIABB8MwEEBsaIAFBIGokAAtfAgJ/AX4jAEEQayIBJAAgAEHEkwMQGxogAEGD2gRBkoAFIAAoAkBBAkYbEBsaIAAoAgwoAgAiAikCACEDIAEgAigCCDYCCCABIAM3AwAgAEG37AQgARAeIAFBEGokAAsmACAAIAAoAhAiACgCkAIgACgCmAIgACgClAIgASACIAMgBBCGBguJAQEBfyAAKAIQIQECQAJAAkAgACgCQEECaw4CAAECCyAAIAEoApACIAEoApgCIAEoApQCIAEoAtgBIAEoAuwBIAEoAvwBIAEoAtwBEIYGDwsgACABKAKQAiABKAKYAiABKAKUAiABKALYASABKALsASABKAL8ASABKALcARCGBiAAQfrPBBAbGgsLagIBfwJ+QX8hAgJAIAAoAigpAwgiAyABKAIoKQMIIgRUDQAgAyAEVgRAQQEPCwJAIAAtAABBA3FFDQAgAS0AAEEDcUUNACAAKQMIIgMgASkDCCIEVA0BQQEhAiADIARWDQELQQAhAgsgAgvPAQECfyAAKAIQIQECQCAAAn8CQAJAAkAgACgCQA4EAAEEAgQLIABBlYYEEBsaIAEoAtgBIgJFDQMgAi0AAEUNAyAAQbbFAxAbGkGSgAUhAiABKALYAQwCCyABKALYASICRQ0CIAItAABFDQIgAEG2xQMQGxogACABKALYARCIASAAQczLAxAbGkGSgAUhAiABKAIIECEMAQsgAEG9wgMQGxogACABKAIIECEQiAEgAEHZwQMQGxpBn9MEIQIgASgCCBAhCxCIASAAIAIQGxoLC8QBAgN/AXwjAEHQAGsiAyQAIAAoAhAiBCgCmAEhBSAEKwOgASEGIAMgBCgCEDYCGCADQQA2AhwgA0GA4QooAgA2AiAgA0IANwIkIANBADYCOCADQgA3AjwgA0IANwJEIAMgAjYCTCADIAYQMTkDECADRAAAAAAAACRARAAAAAAAAAAAIAVBAWtBAkkiBBs5AzAgA0KCgICAEDcDACADIAVBACAEGzYCCCAAQeLZAyADEB4gACABIAJBABC5CCADQdAAaiQAC/wGAg1/BHwjAEHwAWsiBCQAQYDhCigCACEMIAAoAhAiBygCECENIAcrA6ABIARCADcDqAEgBEIANwOgARAxIRIgAkEDSwRAQX8hCCAHKAKYASIGQQFrQQJJIQVBBCELIAMEQCAHKAI4IQpBBSELQRQhCAtEAAAAAAAAJEBEAAAAAAAAAAAgBRshEyAGQQAgBRshDiAEIAErAwAiFDkD4AEgASsDCCERIAQgFDkDgAEgBCAROQPoASAEIBE5A4gBIARBoAFqIARBgAFqELgIQQEhBUEAIQMDQAJAAkAgAiADQQNqIgdNBEAgBCAFNgJ0IARBADYCcCAEQgA3A2ggBCATOQNgIAQgCDYCWCAEQQA2AlQgBCAMNgJQIAQgCjYCTCAEIA02AkggBEFAayASOQMAIAQgDjYCOCAEIAs2AjQgBEEDNgIwIABBiMMEIARBMGoQHgJAIARBoAFqIgEQKARAIAEQJUEPRg0BCyAEQaABaiIBECUgARBOTwRAIAFBARC9AQsgBEGgAWoiAhAlIQEgAhAoBEAgASACakEAOgAAIAQgBC0ArwFBAWo6AK8BIAIQJUEQSQ0BQYm0A0Gd/ABBrwJB97EBEAAACyAEKAKgASABakEAOgAAIAQgBCgCpAFBAWo2AqQBCwJAIARBoAFqECgEQCAEQQA6AK8BDAELIARBADYCpAELIARBoAFqIgIQKCEBIAQgAiAEKAKgASABGzYCICAAQbmABCAEQSBqEB4gBC0ArwFB/wFGBEAgBCgCoAEQGAsgBUEAIAVBAEobIQEgBUEBayECQQAhAwNAIAEgA0YNAiAEIAMgAm9BAEc2AhAgAEHzsQEgBEEQahAeIANBAWohAwwACwALIAQgBCkD4AE3A7ABIAQgBCkD6AE3A7gBIAEgA0EEdGohD0EBIQNBASEGA0AgBkEERkUEQCAGQQR0IgkgBEGwAWpqIhAgCSAPaiIJKwMAOQMAIBAgCSsDCDkDCCAGQQFqIQYMAQsLA0AgA0EHRg0CIARBkAFqIARBsAFqIAO4RAAAAAAAABhAo0EAQQAQoQEgBCAEKwOQATkDACAEIAQrA5gBOQMIIARBoAFqIAQQuAggA0EBaiEDDAALAAsgAEGSgAUQGxogBEHwAWokAA8LIAVBBmohBSAHIQMMAAsAC0HhtAJB8bsBQb8CQag5EAAAC9oBAgR/AXwjAEHQAGsiBCQAIAAoAhAiBSgCmAEhBiAFKwOgASEIIAUoAjghByAEIAUoAhA2AhggBCAHNgIcIARBgOEKKAIANgIgIARBADYCJCAEQRRBfyADGzYCKCAEQQA2AjggBEIANwI8IARCADcCRCAEIAJBAWo2AkwgBCAIEDE5AxAgBEQAAAAAAAAkQEQAAAAAAAAAACAGQQFrQQJJIgMbOQMwIARCgoCAgDA3AwAgBCAGQQAgAxs2AgggAEHi2QMgBBAeIAAgASACQQEQuQggBEHQAGokAAusAgIDfwd8IwBBkAFrIgMkACAAKAIQIgQoApgBIQUgBCsDoAEhCiABKwMYIQYgASsDECEHIAErAwghCCABKwMAIQkgBCgCOCEBIAMgBCgCEDYCGCADIAE2AhwgA0GA4QooAgA2AiAgA0EANgIkIANBFEF/IAIbNgIoIANBADYCOCADQUBrQgA3AwAgAyAJEDEiCzkDSCADIAgQMSIMOQNQIAMgCzkDaCADIAw5A3AgAyAHEDE5A3ggAyAGEDE5A4ABIAMgChAxOQMQIAMgByAJoRAxOQNYIAMgBiAIoRAxOQNgIANEAAAAAAAAJEBEAAAAAAAAAAAgBUEBa0ECSSIBGzkDMCADQoGAgIAQNwMAIAMgBUEAIAEbNgIIIABBkaQEIAMQHiADQZABaiQAC8YDAQt/IwBBMGsiAyQAQX8hBQJAAkACQAJAAkACQAJAIAEoAiBBAWsOBAECAgACCyABKAIAIQADQCACQQhGDQUgAEUNBiACQQJ0QdDACGooAgAgABBMRQ0EIAJBAWohAgwACwALQYThCigCACIGQQAgBkEAShshByABLQACIQggAS0AASEJIAEtAAAhCkGD9AshCwJAA0AgAiAHRwRAAkAgAkEBdCIMQZDpCmouAQAgCWsiBCAEbCAMQZDhCmouAQAgCmsiBCAEbGogDEGQ8QpqLgEAIAhrIgQgBGxqIgQgC04NACACIQUgBCILDQAMAwsgAkEBaiECDAELCyAGQYAERw0CCyAFQSBqIQIMAgsgA0H1ADYCBCADQfG7ATYCAEGo8wgoAgBB5rwEIAMQHxoQPAALQYThCiAGQQFqNgIAIAdBAXQiBUGQ4QpqIAo7AQAgBUGQ6QpqIAk7AQAgBUGQ8QpqIAg7AQAgAyAINgIgIAMgCTYCHCADIAo2AhggAyAHQSBqIgI2AhQgA0EANgIQIABBgdkDIANBEGoQHgsgASACNgIACyABQQU2AiAgA0EwaiQADwtBgNUBQdH7AEENQf47EAAAC8cCAgd/BHwjAEHQAGsiAyQAIAAoAugCIQYgACsD4AIhCkGA4QooAgAhByACKAIEIgQrAxAhCyAAKAIQKAIQIQggAigCABA/IQkgBCgCCCIEBH8gBCgCFAVBfwshBCACLQAwIQUgASsDCCEMIAErAwAhDSADIAsgCqIiCjkDMCADQQY2AiggA0QYLURU+yH5P0QAAAAAAAAAACAGGzkDICADIAo5AxggAyAENgIUIANBADYCECADQUBrIA0QMTkDACADIAxEAAAAAAAAUsCgEDE5A0ggAyAKIAqgRAAAAAAAAAhAoyAJuKJEAAAAAAAA4D+iOQM4IAMgBzYCDCADIAg2AgggA0EENgIAIANBAkEBIAVB8gBGG0EAIAVB7ABHGzYCBCAAQYXHAyADEB4gACACKAIAEMYKIABBoNkEEBsaIANB0ABqJAALggEBAn8CQAJAIABFIAFFckUEQAJAIAAoAigiAiABKAIoIgNHBEAgAigCAEEEdiIAIAMoAgBBBHYiAUkNBCAAIAFNDQEMAwsgACgCAEEEdiIAIAEoAgBBBHYiAUkNAyAAIAFLDQILQQAPC0H48QJB/7wBQYUDQZODARAAAAtBAQ8LQX8LCwBBgOEKQQA2AgALCwBBgOEKQQE2AgALCwAgAEHqrQQQGxoL2QECA38BfiMAQTBrIgEkACAAKAIQIQIgAEGW1wQQGxogACgCDCgCACIDKQIAIQQgASADKAIINgIoIAEgBDcDICAAQZTsBCABQSBqEB4gASACKAIIECE2AhAgAEGd/gMgAUEQahAeIAEgACgCqAEgACgCpAFsNgIAIABB3sQEIAEQHiAAQfnfAxAbGiAAQayFBBAbGiAAQYrpAxAbGiAAQeSEBBAbGiAAQfvZBBAbGiAAQf2tBBAbGiAAQaDXBBAbGiAAQZ6TAxAbGiAAQY/ZBBAbGiABQTBqJAALGAAgABCKBiAAENkEIABBzAAgASACELwICxMAIAAgASACIANBwgBB4gAQlAoLEwAgACABIAIgA0HwAEHQABCUCgujAQECfyMAQRBrIgMkACAAKAIQKAIMIAAQigYgABDZBCACBH8CQCACQX5xQQJGBEAgACACIAFBAhC9CAwBCyAAEIkGC0GcyAMFQdXHAwshAkECdEGQwAhqKAIAIgAgAhDyASADIAEpAwg3AwggAyABKQMANwMAIAAgAxDXAiAAIAErAxAgASsDAKEQlgIgACABKwMYIAErAwihEJYCIANBEGokAAu/AgEGfyMAQTBrIgMkACAAKAIQKAIMIgdBAnRBkMAIaigCACIEQZnIAxDyASAEIAIoAgQrAxAQlgIgAEGVgAUgAigCBCgCABDAAyAAENkEIAIoAgQiBgRAIAYoAhhB/wBxIQULIAItADAhBgJAQcDgCigCAC8BKCIIQQ9JDQAgCEEPayIIQQJLDQAgCEECdEHAwAhqKAIAIAVxIgUgB0ECdEHQ4ApqIgcoAgBGDQAgAyAFNgIgIARBmcUDIANBIGoQjgEgByAFNgIACyABIAIrAxggASsDCKA5AwggBEGKyAMQ8gEgAyABKQMINwMYIAMgASkDADcDECAEIANBEGoQ1wIgA0F/IAZB8gBGIAZB7ABGGzYCACAEQdjHAyADEI4BIAQgAisDIBCWAiAAQZWABSACKAIAEMADIANBMGokAAvLAgAgACgCECgCCCEAQdDfChAlBEAgAEHA4AooAgAoAhBB0N8KEMEBEHELQeDfChAlBEAgAEHA4AooAgAoAhhB4N8KEMEBEHELQfDfChAlBEAgAEHA4AooAgAoAhRB8N8KEMEBEHELQZDgChAlBEAgAEHA4AooAgAoAhxBkOAKEMEBEIsGC0Gg4AoQJQRAIABBwOAKKAIAKAIkQaDgChDBARBxC0Gw4AoQJQRAIABBwOAKKAIAKAIgQbDgChDBARBxC0GoogpCgICAgICAgPg/NwMAQZiiCkKAgICAgICA+D83AwBBiKIKQoCAgICAgID4PzcDAEGAogpCgICAgICAgPg/NwMAQeihCkKAgICAgICA+D83AwBB4KEKQoCAgICAgID4PzcDAEHo4ApCADcDAEHY4ApCADcDAEH84ApBADYCAEH04ApBADYCAAt9ACAAKAIQKAIIIQBB0N8KECUEQCAAQcDgCigCACgCCEHQ3woQwQEQcQtBkOAKECUEQCAAQcDgCigCACgCDEGQ4AoQwQEQiwYLQaCiCkKAgICAgICA+D83AwBBkKIKQoCAgICAgID4PzcDAEH44ApBADYCAEHw4ApBADYCAAtzACAAKAIQKAIIIgBBwOAKKAIAKAIAQdDfChDBARBxIAAoAhAoAgwEQCAAQcDgCigCACgCBEGQ4AoQwQEQcQtB+KEKQoCAgICAgID4PzcDAEHYoQpCgICAgICAgPg/NwMAQeTgCkEANgIAQdTgCkEANgIAC8QDAQR/IwBBEGsiAyQAIAAoAhAoAgghAUHE4AooAgBFBEBBzOAKQaACNgIAQcjgCkGhAjYCAEHE4ApBkO0JKAIANgIACyABKAJMIgIoAgQhBCACQcTgCjYCBAJAAkACQAJAAkACQCAAKAJADgcBAQQAAgICAwsgACABIABBARDECAwECyAALQCbAUEIcQ0DIAEgABDSCAwDC0HA3woQJQRAQcDgCigCACgCACICRQRAIAFBAEG4wgEQhgEhAkHA4AooAgAgAjYCAAsgASACQcDfChDBARBxCyABKAIQKAIMBEAgAUHA4AooAgAoAgRBgOAKEMEBEIsGC0EAIQIgAUHX4wBBwOAKKAIAKAIsEI8HA0AgAkEIRkUEQCACQQR0QcDfCmoQXCACQQFqIQIMAQsLQcDgCigCABAYQfChCkKAgICAgICA+D83AwBB0KEKQoCAgICAgID4PzcDAEHg4ApBADYCAEHQ4ApBADYCACAALQCbAUEIcQ0CIAEgABDSCAwCCyADQeUDNgIEIANB0LcBNgIAQajzCCgCAEHmvAQgAxAfGhA8AAsgACABIABBABDECAsgASgCTCAENgIEIANBEGokAAuSBgIHfwF8IwBBEGsiBCQAIAAoAhAoAgghAgJAAkACQAJAAkAgACgCQA4HAwAEBAEBAQILIAJBj98AQQAQa0UNAyACEPAJDAMLIAIgBEEOaiAEQQ9qEMIIIQggACgCQCEFIAQtAA8gBC0ADiEHQcDgCkEBQTgQGiIANgIAQd20AiEBQQ4hAwJAAkACQCAFQQVrDgIAAgELQeHsAiEBQQwhAwwBCwJAIAJB1+MAECYiAUUNACABLQAARQ0AIAEQvggiA0ELSQ0AQcDgCigCACEADAELQZ38ASEBQZ38ARC+CCEDQcDgCigCACEACyAAIAE2AiwgACADOwEoAkAgAigCECIBKAK0AQRAIAJBAEG4wgEQhgEhAUHA4AooAgAiACABNgIAIAIoAhAhAQwBCyAAQQA2AgALQQAhA0EAIQUgAS0AcUEIcQR/IAJBAEGowgEQhgEhBUHA4AooAgAFIAALIAU2AgQgAkEBQbjCARCGASEAQcDgCigCACAANgIIIAJBAUGowgEQhgEhAEHA4AooAgAgADYCDCACQQJBuMIBEIYBIQBBwOAKKAIAIgEgADYCEEEBcQRAIAJBAkGwwgEQhgEhA0HA4AooAgAhAQsgASADNgIUQQAhACAHQQFxBEAgAkECQY7CARCGASEAQcDgCigCACEBCyABIAA2AhgCQCACKAIQLQBxIgNBIXEEQCACQQJBqMIBEIYBIQBBwOAKKAIAIgEgADYCHCACKAIQLQBxIQMMAQsgAUEANgIcCwJAIANBAnEEQCACQQJBn8IBEIYBIQBBwOAKKAIAIgEgADYCICACKAIQLQBxIQMMAQsgAUEANgIgC0EAIQBBACEFIANBBHEEQCACQQJBlsIBEIYBIQVBwOAKKAIAIQELIAEgBTYCJANAIABBCEZFBEAgAEEEdCICQcjfCmpCADcDACACQcDfCmpCADcDACAAQQFqIQAMAQsLIAEgCDkDMAwCCyAEQacDNgIEIARB0LcBNgIAQajzCCgCAEHmvAQgBBAfGhA8AAsgAhC/CAsgBEEQaiQAC3kBAX8jAEEQayIDJAAgACgCECgCDEECdEGQwAhqKAIAIgRBlsgDEPIBIAMgAikDCDcDCCADIAIpAwA3AwAgBCADENcCIAQgAisDECACKwMAoRCWAiAEIAIrAxggAisDCKEQlgIgAEGVgAUgASgCCBDAAyADQRBqJAALFwAgACgCACIAIAEoAgAiAUsgACABSWsLDgAgAkQAAAAAAADgP6ILJQAgAiAAIAGjIgBEAAAAAAAA8D8gAKEgAEQAAAAAAADgP2UbogsUACAAIAGjIAKiRAAAAAAAAOA/ogseACACRAAAAAAAAPA/IAAgAaOhokQAAAAAAADgP6ILFwAgACgCAEEHRgRAIAAoAnBBARDyCAsL1wIBB38CQCAAKAIAIgMoApgBIgRFDQAgAygCnAENACADQQA2ApgBIAMoArgBIQggA0EANgK4ASAEIQcLIAMoAqABIQYjAEEQayIFJAACQCADIAEQxAZFBEAgBSADQQMgARCiBDYCBCAFIAE2AgBBoe0DIAUQNwwBCyADKAKcASIEIAQgBCgCNBDdBDYCOAJAIAZBkCZBAEEBEDUEQCAGKAIQKAIIDQELIAQtAJsBQQRxDQBBqK0EQQAQNwwBCwJAIAMoApgBIgFFBEAgAxD1BCIBNgKcASADIAE2ApgBDAELQazcCigCACIJRQ0AIAkoAgQiAQ0AEPUEIQFBrNwKKAIAIAE2AgQLQazcCiABNgIAIAEgAzYCACABIAI2AiAgAyAGEJ8GGiAEEIgEIAQQrwogAxCWBAsgBUEQaiQAIAcEQCAAKAIAIgAgCDYCuAEgACAHNgKYAQsLFQAgACgCACIAIAAoAqABIAEQlAYaC+UBAQN/IAAoAgAhAwJAAkAgAUUEQEGs8wgoAgBBABCKCCEBDAELIAFB/DsQoQQiBEUNASAEQQAQigghASAEEOsDCyABRQ0AIAMoAqABIgQEQAJAIAMoAqQBIgVFDQAgBSgCBCIFRQ0AIAQgBREBACADKAKgASEECyAEENEJIAMoAqABELkBCyABQQBBkCZBmAJBARC0AiABQQFBqiZBwAJBARC0AiABQQJBnSZBuAFBARC0AiADIAE2AqABIAEoAhAgAzYCkAEgAyABIAIQlAZBf0YNACAAQgA3A8AEIABBAToAmQQLC40CAgR8An8jAEEQayIGJAAgASsDACAAKwOwBKEgACsDiASjIgOZRC1DHOviNho/YyABKwMIIAArA7gEoSAAKwOQBKMiBJlELUMc6+I2Gj9jcUUEQCAAQbAEaiEHAkACQAJAIAAtAJ0EDgMAAgECCyAGIAEpAwg3AwggBiABKQMANwMAIAAgBhCoBgwBCyAAKwPQAiEFIAArA+ACIQICfCAAKALoAgRAIAAgBSAEIAKjoTkD0AIgAyACoyAAKwPYAqAMAQsgACAFIAMgAqOhOQPQAiAAKwPYAiAEIAKjoQshAiAAQQE6AJkEIAAgAjkD2AILIAcgASkDADcDACAHIAEpAwg3AwgLIAZBEGokAAsSACAAQQA6AJ0EIABBADoAmgQL0AgCA38CfCMAQSBrIgQkAAJAAkACQAJAAkACQAJAIAFBAWsOBQABAgMEBgsgBCACKQMINwMIIAQgAikDADcDACAAIAQQqAYCQCAAKALEBCIBRQ0AAkACQAJAIAEQkgIOAwABAgMLIAEoAhAiASABLQBwQfkBcUEEcjoAcAwCCyABKAIQIgEgAS0AhQFB+QFxQQRyOgCFAQwBCyABKAIQIgEgAS0AdEH5AXFBBHI6AHQLIAAoAswEEBggAEEANgLMBCAAIAAoAsAEIgE2AsQEAkAgAUUNAAJAAkACQCABEJICDgMAAQIDCyABKAIQIgMgAy0AcEECcjoAcCAAIAEQ7AgMAgsgASgCECIDIAMtAIUBQQJyOgCFASABEC5BAUGrhQFBABAiIgNFBEAgARAuQQFBltEBQQAQIiIDRQ0CCyAAIAEgAxBEIAEQgAE2AswEDAELIAEoAhAiAyADLQB0QQJyOgB0IAEgAUEwayIFIAEoAgBBA3FBAkYbKAIoEC5BAkGrhQFBABAiIgNFBEAgASAFIAEoAgBBA3FBAkYbKAIoEC5BAkGW0QFBABAiIgNFDQELIAAgASADEEQgARCAATYCzAQLIABBAToAnQQgAEEBOgCaBAwECyAAQQI6AJ0EIABBAToAmgQMAwsgBCACKQMINwMYIAQgAikDADcDECAAIARBEGoQqAYgAEEDOgCdBCAAQQE6AJoEDAILIABBADoAmAQCfCAAKALoAgRAIAAgACsD0AIgAisDCCAAKALEA7hEAAAAAAAA4D+ioUSgmZmZmZm5P6IgACsD4AIiBiAAKwOQBKKjoTkD0AIgAisDACAAKALAA7hEAAAAAAAA4D+ioUSgmZmZmZm5P6IgBiAAKwOIBKKjDAELIAAgACsD0AIgAisDACAAKALAA7hEAAAAAAAA4D+ioUSgmZmZmZm5P6IgACsD4AIiBiAAKwOIBKKjoDkD0AIgAisDCCAAKALEA7hEAAAAAAAA4D+ioUSgmZmZmZm5P6IgBiAAKwOQBKKjCyEHIAAgBkSamZmZmZnxP6I5A+ACIAAgACsD2AIgB6A5A9gCDAELIABBADoAmAQgACAAKwPgAkSamZmZmZnxP6MiBjkD4AICfyAAKALoAgRAIAAgACsD0AIgAisDCCAAKALEA7hEAAAAAAAA4D+ioUSgmZmZmZm5P6IgBiAAKwOQBKKjoDkD0AIgAisDACAAKALAA7hEAAAAAAAA4D+ioSEHIABBiARqDAELIAAgACsD0AIgAisDACAAKALAA7hEAAAAAAAA4D+ioUSgmZmZmZm5v6IgBiAAKwOIBKKjoDkD0AIgAisDCCAAKALEA7hEAAAAAAAA4D+ioSEHIABBkARqCyEBIAAgACsD2AIgB0SgmZmZmZm5v6IgBiABKwMAoqOgOQPYAgsgAEEBOgCZBAsgACACKQMANwOwBCAAIAIpAwg3A7gEIARBIGokAAtJAQJ/IAAoAgAoAqABIQEgACgCxARFBEAgACABNgLEBCABKAIQIgIgAi0AcEECcjoAcCAAIAEQ7AgLIAAgARDkCCAAQQE6AJwEC2ECAX8CfCAAIAAtAJgEIgFBAXM6AJgEIAFFBEAgAEIANwPQAiAAQQE6AJkEIABCADcD2AIgACAAKALAAyIBuCABt6MiAiAAKALEAyIAuCAAt6MiAyACIANjGzkD4AILQQALIwAgAEGAAjsBmAQgACAAKwPgAkSamZmZmZnxP6M5A+ACQQALIwAgAEGAAjsBmAQgACAAKwPgAkSamZmZmZnxP6I5A+ACQQALGAAgARAuIABHBH8gACABQQAQ1gIFIAELCyoAIABBgAI7AZgEIAAgACsD2AJEAAAAAAAAJEAgACsD4AKjoDkD2AJBAAsqACAAQYACOwGYBCAAIAArA9gCRAAAAAAAACTAIAArA+ACo6A5A9gCQQALKgAgAEGAAjsBmAQgACAAKwPQAkQAAAAAAAAkwCAAKwPgAqOgOQPQAkEACyoAIABBgAI7AZgEIAAgACsD0AJEAAAAAAAAJEAgACsD4AKjoDkD0AJBAAsYACABEC4gAEcEfyAAIAFBABCDAQUgAQsLBAAgAAtDAQJ/An9BASAAKAIAIgIgASgCACIDSg0AGkF/IAIgA0gNABpBASAAKAIEIgAgASgCBCIBSg0AGkF/QQAgACABSBsLCxwAQRQQUiIBIAApAgg3AgggASAAKAIQNgIQIAELQwECfAJ/QQEgACsDACICIAErAwAiA2QNABpBfyACIANjDQAaQQEgACsDCCICIAErAwgiA2QNABpBf0EAIAIgA2MbCws8AQJ/IAAoAgAhASAAKAIEIQJBACEAA0AgACACRgRAIAEQGAUgASAAQThsaigCABAYIABBAWohAAwBCwsLDgAgACABEKUBNgIgQQALDgAgACABEKUBNgIkQQALcAEBfyMAQRBrIgIkAAJ/IAFBt84BEC9FBEAgAEHyADYCAEEADAELIAFBxs4BEC9FBEAgAEHsADYCAEEADAELIAFBus8BEC9FBEAgAEHuADYCAEEADAELIAIgATYCAEHSuAQgAhAqQQELIAJBEGokAAtAAQJ/IwBBEGsiAiQAQQEhAyABQdfZAUEAQf8BIAJBDGoQmQJFBEAgACACKAIMtzkDEEEAIQMLIAJBEGokACADCwsAIAAgATYCAEEACwsAIAAgATYCBEEAC1MBAn8jAEEQayICJABBASEDAkAgAUHM0AFBAEH//wMgAkEMahCZAg0AIAIoAgwiAUUEQEGjugRBABAqDAELIAAgATsBUkEAIQMLIAJBEGokACADC1MBAn8jAEEQayICJABBASEDAkAgAUHU0AFBAEH//wMgAkEMahCZAg0AIAIoAgwiAUUEQEHIugRBABAqDAELIAAgATsBUEEAIQMLIAJBEGokACADCx8AIAAgAUHKuQRBus8BQYACQbfOAUGABEHGzgEQ4wYLjQEBAX8jAEEQayICJAACfwJAAkAgAUHGzgEQL0UEQCAAIAAvASRBBHI7ASQMAQsgAUG3zgEQL0UEQCAAIAAvASRBAnI7ASQMAQsgAUHGzQEQL0UEQCAAIAAvASRBBnI7ASQMAQsgAUG6zwEQLw0BC0EADAELIAIgATYCAEH3uQQgAhAqQQELIAJBEGokAAtAAQJ/IwBBEGsiAiQAQQEhAyABQc/XAUEAQf//AyACQQxqEJkCRQRAIAAgAigCDDsBJkEAIQMLIAJBEGokACADCx0AIAAgAUGruARBr9oBQQhBqdABQRBB49ABEOMGCw4AIAAgARClATYCDEEACw4AIAAgARClATYCCEEAC48EAQV/IwBB0ABrIgIkAAJAIAEEQAJAA0AgBUECRg0BIAVB154DaiAFQdieA2ohAyAFQQFqIQUtAAAhBANAIAMtAAAiBkUNASADQQFqIQMgBCAGRw0ACwtB8LADQbX8AEE1QYvzABAAAAtBACEFIAFB154DEPkCIQQgASEDA0AgA0UNAiACIAQ2AkwgAiADNgJIIAIgAikCSDcDQAJAIAJBQGtBktwBEJIDBEAgACAALQAqQQJyOgAqDAELIAIgAikCSDcDOCACQThqQbnWARCSAwRAIAAgAC0AKkEBcjoAKgwBCyACIAIpAkg3AzAgAkEwakH02wEQkgMEQCAAIAAtACpB5wFxOgAqDAELIAIgAikCSDcDKAJAIAJBKGpBttoBEJIDRQRAIAIgAikCSDcDICACQSBqQenOARCSA0UNAQsgACAALQAqQQRyOgAqDAELIAIgAikCSDcDGCACQRhqQYTcARCSAwRAIAAgAC0AKkEIcjoAKgwBCyACIAIpAkg3AxAgAkEQakGL3AEQkgMEQCAAIAAtACpBEHI6ACoMAQsgAiADNgIEIAIgBDYCAEGiuQQgAhAqQQEhBQsgAyAEaiEGQQAhA0EAIQQgBiABED8gAWpGDQAgBkHXngMQrAQgBmoiA0HXngMQ+QIhBAwACwALQa/SAUG1/ABBLUGL8wAQAAALIAJB0ABqJAAgBQu/AQEDfyMAQRBrIgQkAANAIAEtAAAiAwRAIAFBAWohAQJAAkACQAJAAkAgA0EgaiADIAPAIgNBwQBrQRpJG8BB4gBrQR93DgoDBAQEBAAEBAIBBAsgAkGACHIhAgwFCyACQYAQciECDAQLIAJBgCByIQIMAwsgAkGAwAByIQIMAgsgBCADNgIEIAQgAzYCAEGGqgQgBBAqDAELCyACQf//A3FBgPgARwRAIAAgAC8BJCACcjsBJAsgBEEQaiQAQQALDwAgACABQQFB3rcEEKcKCw4AIAAgARClATYCBEEACw4AIAAgARClATYCEEEACw4AIAAgARClATYCAEEAC0ABAn8jAEEQayICJABBASEDIAFBvc4BQQBB//8DIAJBDGoQmQJFBEAgACACKAIMOwEoQQAhAwsgAkEQaiQAIAMLPwECfyMAQRBrIgIkAEEBIQMgAUGY2gFBAEHoAiACQQxqEJkCRQRAIAAgAi8BDDYCHEEAIQMLIAJBEGokACADC1cBAX8jAEEQayICJAACfwJAAkAgAUHi2QEQL0UEQCAAIAAvASRBAXI7ASQMAQsgAUHt2QEQLw0BC0EADAELIAIgATYCAEH4uAQgAhAqQQELIAJBEGokAAsPACAAIAFBAkGDuAQQpwoLDgAgACABEKUBNgIYQQALTgECfyMAQRBrIgIkAEEBIQMgAUHm2AFBgH9B/wAgAkEMahCZAkUEQCAAIAIoAgw6ACAgACAALwEkQYABcjsBJEEAIQMLIAJBEGokACADC00BAn8jAEEQayICJABBASEDIAFB2tgBQQBB/wEgAkEMahCZAkUEQCAAIAIoAgw6ACIgACAALwEkQcAAcjsBJEEAIQMLIAJBEGokACADCz8BAn8jAEEQayICJABBASEDIAFBidABQQBB/wAgAkEMahCZAkUEQCAAIAIoAgw6AGxBACEDCyACQRBqJAAgAwtMAQJ/IwBBEGsiAiQAQQEhAyABQY3QAUEAQf8BIAJBDGoQmQJFBEAgACACKAIMOgAhIAAgAC8BJEEgcjsBJEEAIQMLIAJBEGokACADCw4AIAAgARClATYCFEEACx0AIAAgAUHSuARBus8BQQJBt84BQQRBxs4BEOMGC1MBAn8CQCAALQAoRQ0AA0AgAgRAIAEtAAAiBEEgTwRAIAAoAgwgBMAQ2QEgA0EBaiEDCyABQQFqIQEgAkEBayECDAELCyADRQ0AIABBiwI2AggLC8cDACABQcDaARAvRQRAIABBAToAKCAAQYgCNgIIDwsCQCABQfvOARAvBEAgAUHp1wEQLw0BCyAAQYUCNgIIDwsgAUGu2wEQL0UEQCAAQQA6ACggAEGJAjYCCA8LIAFBmtEBEC9FBEAgAEGHAjYCCA8LIAFBq84BEC9FBEAgAEGKAjYCCA8LIAFBs90BEC9FBEAgAEGOAjYCCA8LIAFBwc0BEC9FBEAgAEGPAjYCCA8LIAFBrdABEC9FBEAgAEGQAjYCCA8LIAFBxtcBEC9FBEAgAEGNAjYCCA8LIAFBpdABEC9FBEAgAEGRAjYCCA8LIAFB/dwBEC9FBEAgAEGSAjYCCA8LIAFB9s4BEC9FBEAgAEGTAjYCCA8LIAFBlNABEC9FBEAgACgCCEGbAkYEQCAAQZoCNgIIDwsgAEGCAjYCCA8LIAFBt88BEC9FBEAgACgCCEGVAkYEQCAAQZQCNgIIDwsgAEGWAjYCCA8LIAFB+M4BEC9FBEAgACgCCEGYAkYEQCAAQZcCNgIIDwsgAEGZAjYCCA8LIAFB99gBEC9FBEAgACgCCEGdAkYEQCAAQZwCNgIIDwsgAEGDAjYCCA8LIAAgARCQCQvdBQAgAUHA2gEQL0UEQEGIARBSIgFCADcCVCABQX82AnggAUH/AToAbCABQQA2AmggAUHhATYCZCABQgA3AlwgACABQdCYCkEWIAJB9t4BEJAEIAAoAkAgATYCACAAQZ4CNgIIIABBADoAKA8LAkAgAUH7zgEQLwRAIAFB6dcBEC8NAQsgAEGEAjYCCCAAQQA6ACgPCyABQa7bARAvRQRAIABBAToAKEHoABBSIgFBgYAENgJQIAAgAUGAmgpBFiACQbHfARCQBCAAKAJAIAE2AgAgAEGfAjYCCA8LIAFBq84BEC9FBEAgACACQQAQ3wIhASAAKAJAIAE2AgAgAEGgAjYCCA8LIAFBs90BEC9FBEAgAEEAQQEQ3wIhASAAKAJAIAE2AgAgAEGiAjYCCA8LIAFB9s4BEC9FBEAgAEEAQSAQ3wIhASAAKAJAIAE2AgAgAEGnAjYCCA8LIAFBwc0BEC9FBEAgAEEAQQQQ3wIhASAAKAJAIAE2AgAgAEGjAjYCCA8LIAFBrdABEC9FBEAgAEEAQcAAEN8CIQEgACgCQCABNgIAIABBpAI2AggPCyABQcbXARAvRQRAIABBAEECEN8CIQEgACgCQCABNgIAIABBoQI2AggPCyABQaXQARAvRQRAIABBAEEIEN8CIQEgACgCQCABNgIAIABBpQI2AggPCyABQf3cARAvRQRAIABBAEEQEN8CIQEgACgCQCABNgIAIABBpgI2AggPCyABQZTQARAvRQRAIAAoAkBBADYCACAAIAAoAkBByJsKQQEgAkGx3gEQkAQgAEGbAjYCCA8LIAFBt88BEC9FBEAgAEGVAjYCCA8LIAFB+M4BEC9FBEAgAEGYAjYCCA8LIAFB99gBEC9FBEAgAEEoEFIiAUHQmwpBAiACQcXeARCQBCAAKAJAIAE2AgAgAEGdAjYCCA8LIAFBmtEBEC9FBEAgAEGGAjYCCA8LIAAgARCQCQuGAQECfyMAQRBrIgQkACAEIAE2AgwCQCAAIAAoApwBIARBDGogAiADIAAtAPwDRUEAEJQJIgENAEEAIQEgBCgCDCIFRQ0AIAAoAvQDBEAgAEHdATYCoAIgACAFIAIgAxCTCSEBDAELIABB1gE2AqACIAAgBSACIAMQtgYhAQsgBEEQaiQAIAELrAMBBH8jAEEQayIDJAACQAJAIAAoArQCIgRFBEBBFyECDAELIAQoAgwiAS0AIQRAIAEoAgggAyABKAIEIgYgASgCDGoiAjYCDCAGaiEFAn8gAS0AIgRAIAAoAuwBIgYgAiAFIANBDGoiByAGKAIAEQYAIQYgACAAKALsASACIAUgBiADKAIMIAdBAEEAQQEQqwkMAQsgACAEKAIQIAAoAuwBIAIgBSADQQxqQQBBARCwBgsiAg0BAkAgBSADKAIMIgJGDQACQAJAIAAoAvgDQQFrDgMAAgECCyAALQDgBEUNAQsgASACIAEoAgRrNgIMQQAhAgwCC0EAIQIgAUEAOgAhAkAgAS0AIg0AIAQoAhAgACgC0AJGDQBBDSECDAILIABBAToA4AQMAQsgACABQb0yEJMDIAAoArQCIARHDQFBACECIAFBADoAICAAIAAoArQCKAIINgK0AiAEIAAoArgCNgIIIAAgBDYCuAIgACgCtAJFBEAgAEHQAUHWASABLQAiGzYCoAILIABBAToA4AQLIANBEGokACACDwtBlgtBvrwBQcMyQZM2EAAAC2YBAX8jAEEQayIEJAAgBCABNgIMAkAgACAAKAKcASAEQQxqIAIgAyAALQD8A0UQpAkiAQ0AIAQoAgwiAUUEQEEAIQEMAQsgAEHQATYCoAIgACABIAIgAxC4BiEBCyAEQRBqJAAgAQsIACAAKAKkAgtlAQR/IABBoAFqIQUgAEGcAWohBiAAKALwASEHIAAtAPQBBH8gBSAGIAcQywkFIAUgBiAHEMEGCwR/QQAFIAAgACgC8AEQrAkLIgQEfyAEBSAAQdABNgKgAiAAIAEgAiADELgGCwtsAEERIQICQAJAAkACQCABQQ9rDgMDAgEACyABQRtHDQEgAEERNgIIIABBswE2AgBBEw8LIABBoQFBtQEgACgCEBs2AgBBFA8LAkAgAUEcRw0AIAAoAhANAEE7DwsgAEGeATYCAEF/IQILIAILGAAgACABIAIgAyAEQcwBQRVBG0EREMQCC0UAIAFBD0YEQEERDwsgAUEbRgRAIABBETYCCCAAQbMBNgIAQRMPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBngE2AgBBfwtbAAJ/QScgAUEPRg0AGgJAIAFBFUcEQCABQSRHDQEgAEEnNgIIIABBswE2AgBBLg8LIABBygE2AgBBJw8LIAFBHEYEQEE7IAAoAhBFDQEaCyAAQZ4BNgIAQX8LCxYAIAAgASACIAMgBEEnQcsBQTMQ5gYLpAEAAkACQAJAAkACQAJAAkACQAJAIAFBF2sOCgEGBgYGBgYCAwQAC0EnIQIgAUEPaw4EBgUFBwQLIAAgACgCBEEBajYCBEEsDwsgAEHHATYCAEE1DwsgAEHHATYCAEE0DwsgAEHHATYCAEE2DwsgAUEpRg0CCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBngE2AgBBfyECCyACDwsgAEHHATYCAEEzC4ABAEEnIQICQAJAAkACQAJAIAFBFWsOBAECAgQACyABQQ9GDQIgAUEkRw0BIABBJzYCCCAAQbMBNgIAQS4PCyAAQcoBNgIAQScPCyABQRxGBEBBOyECIAAoAhBFDQELIABBngE2AgBBfyECCyACDwsgAEEnNgIIIABBswE2AgBBLQuWAgACfwJAAkACQAJAAkACQAJAIAFBI2sOBAIBAwQACwJAAkAgAUEVaw4EBgcHAQALIAFBD0cNBkEnDwsgACAAKAIEQQFrIgI2AgRBLSACDQYaIABBJzYCCCAAQbMBNgIAQS0PCyAAIAAoAgRBAWsiAjYCBEEuIAINBRogAEEnNgIIIABBswE2AgBBLg8LIAAgACgCBEEBayICNgIEQS8gAg0EGiAAQSc2AgggAEGzATYCAEEvDwsgACAAKAIEQQFrIgI2AgRBMCACDQMaIABBJzYCCCAAQbMBNgIAQTAPCyAAQckBNgIAQTIPCyAAQckBNgIAQTEPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBngE2AgBBfwsLvQEBAn9BMyEFQccBIQYCQAJAAkACQAJAAkACQAJAAkAgAUESaw4PCAcBBwcCBwcHBwcHAwQFAAsgAUEPRw0FQScPCyAEIAIgBCgCQGogA0GxqAggBCgCGBEGAEUNBUErIQVByAEhBgwGCyAAQQI2AgRBLCEFQckBIQYMBQtBNSEFDAQLQTQhBQwDC0E2IQUMAgsgAUEpRg0BC0F/IQVBngEhBiABQRxHDQAgACgCEA0AQTsPCyAAIAY2AgAgBQsSACAAIAEgAiADIARBxAEQqAoLEgAgACABIAIgAyAEQcIBEKgKCxYAIAAgASACIAMgBEEhQcYBQSAQpgoLGAAgACABIAIgAyAEQa0BQSZBG0EhEMQCC1YAQR8hAkHFASEEQSEhAwJAAkACQAJAIAFBD2sOBQMBAQICAAsgAUEpRg0BC0F/IQJBngEhBCABQRxHDQAgACgCEA0AQTsPCyAAIAQ2AgAgAiEDCyADC0cAQSEhAiABQQ9GBEBBIQ8LQcQBIQMCfwJAIAFBF0YNAEF/IQJBngEhAyABQRxHDQBBOyAAKAIQRQ0BGgsgACADNgIAIAILC7oBAQF/IAFBD0YEQEEhDwtBrQEhBQJAIAFBG0YEQEElIQQMAQsCQCABQRRHDQAgBCACIAQoAkBqIANBkKgIIAQoAhgRBgAEQEEjIQQMAgsgBCACIAQoAkBqIANBmKgIIAQoAhgRBgAEQEEkIQQMAgsgBCACIAQoAkBqIANBoagIIAQoAhgRBgBFDQBBISEEQcMBIQUMAQtBfyEEQZ4BIQUgAUEcRw0AIAAoAhANAEE7DwsgACAFNgIAIAQLvwEBAn9BISEFAkACQAJAAkACQCABQQ9rDgQDAgIAAQtBACEFAkADQCAEKAIYIQYgBUEIRg0BIAQgAiADIAVBAnRBwKcIaigCACAGEQYARQRAIAVBAWohBQwBCwsgAEHAATYCACAFQRdqDwsgBCACIANBnacIIAYRBgBFDQEgAEHBATYCAEEhDwsgAUEXRg0CCyABQRxGBEBBOyEFIAAoAhBFDQELIABBngE2AgBBfyEFCyAFDwsgAEHCATYCAEEhC08AQQshAgJAAkACQCABQQ9rDgQCAQEAAQsgAEELNgIIIABBswE2AgBBEA8LAkAgAUEcRw0AIAAoAhANAEE7DwsgAEGeATYCAEF/IQILIAILdAEBf0ELIQUCQAJAAkACQAJAIAFBD2sOBAQBAgABCyAEIAIgA0G1pwggBCgCGBEGAEUNAEG/ASEEDAILQX8hBUGeASEEIAFBHEcNASAAKAIQDQFBOw8LQaEBQbUBIAAoAhAbIQRBDyEFCyAAIAQ2AgALIAULGAAgACABIAIgAyAEQbUBQTpBGUEAEMQCC0wAAn9BACABQQ9GDQAaIAFBGUYEQCAAQbUBNgIAIAAgACgCDEEBajYCDEEADwsgAUEcRgRAQTsgACgCEEUNARoLIABBngE2AgBBfwsLewEBfwJAAkACQAJAIAFBD2sOBAIBAQABCyAEIAIgA0GmpwggBCgCGBEGAARAQb0BIQQMAwsgBCACIANBrqcIIAQoAhgRBgBFDQBBvgEhBAwCC0F/IQVBngEhBCABQRxHDQEgACgCEA0BQTshBQsgBQ8LIAAgBDYCACAFC1IAQQshAgJAAkACQAJAIAFBD2sOAwMAAQALQX8hAkGeASEDIAFBHEcNASAAKAIQDQFBOw8LQaEBQbUBIAAoAhAbIQNBDyECCyAAIAM2AgALIAILGAAgACABIAIgAyAEQbkBQQ5BG0ELEMQCCxgAIAAgASACIAMgBEG8AUENQRtBCxDEAgtNAAJAAkACQCABQQ9rDgMBAgACCyAAQaEBQbUBIAAoAhAbNgIACyAAKAIIDwsCfyABQRxGBEBBOyAAKAIQRQ0BGgsgAEGeATYCAEF/CwsYACAAIAEgAiADIARBsQFBDkEbQQsQxAILGAAgACABIAIgAyAEQbsBQQ1BG0ELEMQCCxUAIAAgASACIAMgBEG6AUG5ARClCgt/AQF/QREhBQJAAkACQAJAIAFBD2sOBAIBAQABCyAEIAIgA0H4pgggBCgCGBEGAARAQbcBIQQMAwsgBCACIANB/6YIIAQoAhgRBgBFDQBBuAEhBAwCC0F/IQVBngEhBCABQRxHDQEgACgCEA0BQTshBQsgBQ8LIAAgBDYCACAFC6wBAQF/QSchBQJAAkACQAJAAkAgAUEPaw4EAwICAAELIAQgAiADQaeoCCAEKAIYEQYABEAgAEEnNgIIIABBswE2AgBBKg8LIAQgAiADQa2oCCAEKAIYEQYARQ0BIABBJzYCCCAAQbMBNgIAQSkPCyABQRdGDQILAkAgAUEcRw0AIAAoAhANAEE7DwsgAEGeATYCAEF/IQULIAUPCyAAQQE2AgQgAEG2ATYCAEEsC2wAQRYhAkG0ASEEQSEhAwJAAkACQAJAAkAgAUEPaw4EBAIAAwELQaEBQbUBIAAoAhAbIQRBISECDAILIAFBKUYNAQtBfyECQZ4BIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAIhAwsgAwsVACAAIAEgAiADIARBsgFBsQEQpQoLFgAgACABIAIgAyAEQQtBsAFBChCmCgteAEEDIQICQAJAAkACQAJAIAFBD2sOAwQBAgALIAFBGUcNAEEHIQJBoQEhAwwCC0F/IQJBngEhAyABQRxHDQEgACgCEA0BQTsPC0EIIQJBpAEhAwsgACADNgIACyACC0oAQQghAkGkASEEQQMhAwJAAkACQCABQQ9rDgMCAAEAC0F/IQJBngEhBCABQRxHDQAgACgCEA0AQTsPCyAAIAQ2AgAgAiEDCyADC0cAQa8BIQNBESECAkACQAJAIAFBD2sOBAIAAAEACyABQRxHQX8hAUGeASEDDQAgACgCEA0AQTsPCyAAIAM2AgAgASECCyACCxYAIAAgASACIAMgBEEnQa4BQSgQ5gYLFgAgACABIAIgAyAEQSFBrQFBIhDmBgtgAEGrASEEQQshAgJ/AkACQAJAAkAgAUESaw4FAAICAgMBC0EJIQJBrAEhBAwCC0ELIAFBD0YNAhoLQX8hAkGeASEEIAFBHEcNAEE7IAAoAhBFDQEaCyAAIAQ2AgAgAgsLXQBBACECAkACQAJAAkACQCABQQtrQR93DgoAAQQDAwMDAwMCAwtBNw8LQTgPCyAAQZ4BNgIAQQIPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBngE2AgBBfyECCyACCxgAIAAgASACIAMgBEGiAUEGQRtBAxDEAgsYACAAIAEgAiADIARBqgFBBUEbQQMQxAILnAEBAX9BAyEFAkACQAJAAkACQAJAIAFBD2sOBAUCAwEACyABQRlHDQFBByEFQaEBIQQMAwsgBCACIANB+KYIIAQoAhgRBgAEQEGiASEEDAMLIAQgAiADQf+mCCAEKAIYEQYARQ0AQaMBIQQMAgtBfyEFQZ4BIQQgAUEcRw0BIAAoAhANAUE7DwtBCCEFQaQBIQQLIAAgBDYCAAsgBQt7AQF/AkACQAJAAkACQAJAIAFBIWsOAgECAAsgAUF8Rg0CIAFBD0YNBCABQRpGDQMgACABIAIgAyAEELUJDwsgAEGgATYCAEEADwsgACgCDCIBRQ0BIAAgAUEBazYCDEEADwsgACgCDEUNAQsgAEGeATYCAEF/IQULIAULVQBBAyECQQQhA0GfASEEAkACQAJAAkAgAUEPaw4EAwEBAgALIAFBKUYNAQtBfyEDQZ4BIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAMhAgsgAguKAQEBfwJAAkACQAJAAkACQAJAIAFBC2sOBgAEAQUFAgMLQTcPC0E4DwsgBCACIAQoAkBBAXRqIANB8KYIIAQoAhgRBgBFDQEgAEGdATYCAEEDDwsgAUEdRg0CCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBngE2AgBBfyEFCyAFDwsgAEGeATYCAEECC6gBAQN/QZwBIQYCQAJAAkACQAJAAkACQAJAAkAgAUELaw4GAQACCAcDBAtBASEFDAYLQTchBQwFC0E4IQUMBAsgBCACIAQoAkBBAXRqIANB8KYIIAQoAhgRBgBFDQFBAyEFQZ0BIQYMAwsgAUEdRg0BC0F/IQVBngEhBiABQRxHDQFBOyEHIAAoAhBFDQIMAQtBAiEFQZ4BIQYLIAAgBjYCACAFIQcLIAcLmgEBAn8gASgCACIAIAIgAGtBfnEiBWohAiAEIAMoAgBrIAVIBEAgAkECayIGIAIgBi0AAEH4AXFB2AFGIgYbIQILAkADQCAAIAJPDQEgBCADKAIAIgVLBEAgAC8AACEAIAMgBUECajYCACAFIABBCHQgAEEIdnI7AQAgASABKAIAQQJqIgA2AgAMAQsLIAQgBUcNAEECIQYLIAYLpgQBBH8gASgCACIAIAIgAGtBfnFqIQgCfwNAQQAgACAITw0BGiAALQABIgbAIQICQAJAAkACQAJAIAAtAAAiBQ4IAAEBAQEBAQECCyACQQBIDQAgAygCACIFIARGDQMgAyAFQQFqNgIAIAUgAjoAAAwCC0ECIAQgAygCACIHa0ECSA0EGiADIAdBAWo2AgAgByACQQZ2QQNxIAVBAnRyQcABcjoAACADIAMoAgAiBUEBajYCACAFIAJBP3FBgAFyOgAADAELIAVB2AFrQQRPBEAgBCADKAIAIgZrQQNIDQIgAyAGQQFqNgIAIAYgBUEEdkHgAXI6AAAgAyADKAIAIgZBAWo2AgAgBiAFQQJ0QTxxIAJBwAFxQQZ2ckGAAXI6AAAgAyADKAIAIgVBAWo2AgAgBSACQT9xQYABcjoAAAwBCyAEIAMoAgAiB2tBBEgNAUEBIAggAGtBBEgNAxogAyAHQQFqNgIAIAcgBUECdEEMcSAGQQZ2ckEBaiIFQQJ2QfABcjoAACADIAMoAgAiB0EBajYCACAHIAVBBHRBMHEgBkECdkEPcXJBgAFyOgAAIAAtAAIhBiAALQADIQUgAyADKAIAIgdBAWo2AgAgByAGQQJ0QQxxIAJBBHRBMHEgBUEGdnJyQYABcjoAACADIAMoAgAiAkEBajYCACACIAVBP3FBgAFyOgAAIABBAmohAAsgAEECaiEADAELC0ECCyABIAA2AgALzAEBB38gAEHIAGohCCACQQJrIQlBASEGAkADQCAJIAFBAmoiAGtBAkgNASABLQADIgTAIQUCQAJAAkACfyABLAACIgJFBEAgBCAIai0AAAwBCyACIAUQKwtB/wFxQQlrIgdBGksNACAAIQFBASAHdCIKQfOPlz9xDQMgCkGAwAhxRQRAIAdBDEcNASAFQQlHIAJyDQQMAwsgAg0CIAVBAE4NAwwBCyACDQELIAAhASAEQSRGIARBwABGcg0BCwsgAyAANgIAQQAhBgsgBgu3AgECfyAAQcgAaiEFA0AgAiABa0ECTgRAIAEtAAEhAAJAAkACQAJAAkACQAJ/IAEsAAAiBEUEQCAAIAVqLQAADAELIAQgAMAQKwtB/wFxQQVrDgYAAQIFBAMFCyADIAMoAgRBAWo2AgQgAUECaiEBDAYLIAMgAygCBEEBajYCBCABQQNqIQEMBQsgAyADKAIEQQFqNgIEIAFBBGohAQwECyADQQA2AgQgAyADKAIAQQFqNgIAIAFBAmohAQwDCyADIAMoAgBBAWo2AgACfyACIAFBAmoiAGtBAkgEQCAADAELIAEtAAMhBCABQQRqIAACfyABLAACIgBFBEAgBCAFai0AAAwBCyAAIATAECsLQQpGGwshASADQQA2AgQMAgsgAyADKAIEQQFqNgIEIAFBAmohAQwBCwsLnAIAAkACQAJAAkAgAiABa0ECbUECaw4DAAECAwsgAS0AAg0CIAEtAANB9ABHDQIgAS0AAA0CQTxBPkEAIAEtAAEiAEHnAEYbIABB7ABGGw8LIAEtAAANASABLQABQeEARw0BIAEtAAINASABLQADQe0ARw0BIAEtAAQNASABLQAFQfAARw0BQSYPCyABLQAADQAgAS0AASIAQeEARwRAIABB8QBHDQEgAS0AAg0BIAEtAANB9QBHDQEgAS0ABA0BIAEtAAVB7wBHDQEgAS0ABg0BIAEtAAdB9ABHDQFBIg8LIAEtAAINACABLQADQfAARw0AIAEtAAQNACABLQAFQe8ARw0AIAEtAAYNACABLQAHQfMARw0AQScPC0EAC50CAQJ/AkACQAJAIAEtAAQNACABLQAFQfgARw0AIAFBBmohAUEAIQADQAJAIAEtAAANACABLAABIgJB/wFxIgNBO0YNBAJ/AkACQAJAIANBMGsONwAAAAAAAAAAAAAEBAQEBAQEAQEBAQEBBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAgICAgIECyACQTBrIABBBHRyDAILIABBBHQgAmpBN2sMAQsgAEEEdCACakHXAGsLIgBB///DAEoNAwsgAUECaiEBDAALAAsgAUEEaiEBQQAhAANAQU8hAiABLQAARQRAIAEsAAEiAkE7Rg0DIAJBMGshAgsgAUECaiEBIAIgAEEKbGoiAEGAgMQASA0ACwtBfw8LIAAQkwQL0AUBCH8gAEHIAGohCkEBIQADQCAAIQUgASIGLQADIgDAIQgCfyAGLAACIglFBEAgACAKai0AAAwBCyAJIAgQKwshCyAGQQJqIQEgBSEAAkACQAJAAkACQAJAAkACQAJAAkACQCALQf8BcUEDaw4bBgsAAQILCAgJBAULCwsJCwsLBwMLAwsLCwsDCwsgBQ0KQQEhACACIARMDQogAyAEQQR0aiIFQQE6AAwgBSABNgIADAoLAkAgBQ0AQQEhACACIARMDQAgAyAEQQR0aiIFQQE6AAwgBSABNgIACyAGQQNqIQEMCQsCQCAFDQBBASEAIAIgBEwNACADIARBBHRqIgVBAToADCAFIAE2AgALIAZBBGohAQwICyAFDQdBASEAIAIgBEwNByADIARBBHRqIgVBAToADCAFIAE2AgAMBwsgBUECRwRAQQwhB0ECIQAgAiAETA0HIAMgBEEEdGogBkEEajYCBAwHC0ECIQAgB0EMRw0GIAIgBEoEQCADIARBBHRqIAE2AggLIARBAWohBEEMIQdBACEADAYLIAVBAkcEQEENIQdBAiEAIAIgBEwNBiADIARBBHRqIAZBBGo2AgQMBgtBAiEAIAdBDUcNBSACIARKBEAgAyAEQQR0aiABNgIICyAEQQFqIQRBDSEHQQAhAAwFCyACIARMDQQgAyAEQQR0akEAOgAMDAMLQQAhAAJAIAVBAWsOAgQAAwtBAiEAIAIgBEwNAyADIARBBHRqIgUtAAxFDQMCQCAJDQAgASAFKAIERiAIQSBHcg0AIAYtAAUiCcAhCAJ/IAYsAAQiBkUEQCAIQSBGDQIgCSAKai0AAAwBCyAGIAgQKwsgB0cNBAsgBUEAOgAMDAMLQQAhAAJAIAVBAWsOAgMAAgtBAiEAIAIgBEwNAiADIARBBHRqQQA6AAwMAgtBAiEAIAVBAkYNASAEDwsgBSEADAALAAtaAQJ/IABByABqIQIDQCABLQABIQACfyABLAAAIgNFBEAgACACai0AAAwBCyADIADAECsLQf8BcSIAQRVLQQEgAHRBgIyAAXFFckUEQCABQQJqIQEMAQsLIAELbwEDfyAAQcgAaiEDIAEhAANAIAAtAAEhAgJ/IAAsAAAiBEUEQCACIANqLQAADAELIAQgAsAQKwtBBWtB/wFxIgJBGU9Bh4D4CyACdkEBcUVyRQRAIAAgAkECdEGMpghqKAIAaiEADAELCyAAIAFrC0wBAX8CQANAIAMtAAAiBARAQQAhACACIAFrQQJIDQIgAS0AAA0CIAEtAAEgBEcNAiADQQFqIQMgAUECaiEBDAELCyABIAJGIQALIAAL1QIBBH8gASACTwRAQXwPCyACIAFrQQJIBEBBfw8LIABByABqIQcgASEEAkADQCACIARrQQJIDQEgBC0AASEFAn8gBCwAACIGRQRAIAUgB2otAAAMAQsgBiAFwBArCyEGQQIhBQJAAkACQAJAAkACQAJAAkAgBkH/AXEiBkEDaw4IAgYGAAEGBAMFC0EDIQUMBQtBBCEFDAQLIAEgBEcNBiAAIAFBAmogAiADEPAEDwsgASAERw0FIAMgAUECajYCAEEHDwsgASAERw0EIAIgAUECaiICa0ECSARAQX0PCyABLQADIQAgAyABQQRqIAICfyABLAACIgRFBEAgACAHai0AAAwBCyAEIADAECsLQQpGGzYCAEEHDwsgBkEeRg0BCyAEIAVqIQQMAQsLIAEgBEcNACAAIAFBAmogAiADELkJIgBBACAAQRZHGw8LIAMgBDYCAEEGC9cCAQR/IAEgAk8EQEF8DwsgAiABa0ECSARAQX8PCyAAQcgAaiEHIAEhBAJAA0AgAiAEa0ECSA0BIAQtAAEhBQJ/IAQsAAAiBkUEQCAFIAdqLQAADAELIAYgBcAQKwshBkECIQUCQAJAAkACQAJAAkACQAJAAkAgBkH/AXEiBkECaw4JAwIHBwABBwUEBgtBAyEFDAYLQQQhBQwFCyABIARHDQcgACABQQJqIAIgAxDwBA8LIAMgBDYCAEEADwsgASAERw0FIAMgAUECajYCAEEHDwsgASAERw0EIAIgAUECaiICa0ECSARAQX0PCyABLQADIQAgAyABQQRqIAICfyABLAACIgRFBEAgACAHai0AAAwBCyAEIADAECsLQQpGGzYCAEEHDwsgBkEVRg0BCyAEIAVqIQQMAQsLIAEgBEcNACADIAFBAmo2AgBBJw8LIAMgBDYCAEEGC/MCAQR/IAEgAiABayIEQX5xaiACIARBAXEbIQQgAEHIAGohBwJAA0AgBCABIgJrIgZBAkgNASACLQABIQACfyACLAAAIgFFBEAgACAHai0AAAwBCyABIADAECsLIQFBACEAAkACQAJAAkACQAJAAkACQCABQf8BcQ4JBAQCBgMGAAEEBgsgBkECRg0GIAJBA2ohAQwHCyAGQQRJDQUgAkEEaiEBDAYLIAQgAkECaiIBa0ECSA0GIAEtAAANBSACLQADQSFHDQUgBCACQQRqIgFrQQJIDQYgAS0AAA0FIAItAAVB2wBHDQUgAkEGaiEBIAVBAWohBQwFCyAEIAJBAmoiAWtBAkgNBSABLQAADQQgAi0AA0HdAEcNBCAEIAJBBGoiAWtBAkgNBSABLQAADQQgAi0ABUE+Rw0EIAJBBmohASAFDQFBKiEAIAEhAgsgAyACNgIAIAAPCyAFQQFrIQUMAgsgAkECaiEBDAELC0F+DwtBfwuYBAEEfyABIAJPBEBBfA8LAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgsCQAJAAn8gASwAACIERQRAIAAgAS0AAWotAEgMAQsgBCABLAABECsLQf8BcQ4LDAwHBwAEBQYMAQkHC0F/IQUgAiABQQJqIgRrQQJIDQwgBC0AAA0HIAEtAANB3QBHDQcgAiABQQRqa0ECSA0MIAEtAAQNByABLQAFQT5HDQcgAUEGaiEBQSghBQwLCyACIAFBAmoiBGtBAk4NAQtBfw8LIAFBBGogBAJ/IAQsAAAiAkUEQCAAIAEtAANqLQBIDAELIAIgASwAAxArC0EKRhsMBgsgAiABa0ECSA0JIAFBAmohBAwDCyACIAFrQQNIDQggAUEDaiEEDAILIAIgAWtBBEgNByABQQRqIQQMAQsgAUECaiEECyAAQcgAaiEHQQYhBQNAIAIgBGsiBkECSA0DIAQtAAEhAAJ/IAQsAAAiAUUEQCAAIAdqLQAADAELIAEgAMAQKwshAUECIQACQCABQf8BcSIBQQpLDQACQCABQQZHBEAgAUEHRg0BQQEgAXRBkw5xDQYMAgtBAyEAIAZBAkYNBQwBC0EEIQAgBkEESQ0ECyAAIARqIQQMAAsACyABQQJqCyEBQQchBQwBCyAEIQELIAMgATYCAAsgBQ8LQX4LzRoBCn8jAEEQayIMJAACQCABIAJPBEBBfCEHDAELAkACQAJAAkACQAJAAkACQCACIAFrIgVBAXEEQCAFQX5xIgJFDQEgASACaiECCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/IAEsAAAiBUUEQCAAIAEtAAFqLQBIDAELIAUgASwAARArC0H/AXEOCwgIAAEEBQYHCAIDCQtBfyEHIAIgAUECaiIJayIFQQJIDQ4CQAJAAkACQAJAAkACQAJ/IAEtAAIiBEUEQCAAIAEtAAMiBmotAEgMAQsgBMAgASwAAyIGECsLQf8BcSIIQQVrDhQcAQIcHBwcHBwcBAMFHBwcHAYcBgALIAhBHUcNGyAGQQN2QRxxIARBwIAIai0AAEEFdHJB0PMHaigCACAGdkEBcQ0FDBsLIAVBAkcNGgwZCyAFQQRPDRkMGAsgAiABQQRqIgVrQQJIDRkCQAJ/IAEsAAQiBEUEQCAAIAEtAAVqLQBIDAELIAQgASwABRArC0H/AXEiBEEURwRAIARBG0cNASAAIAFBBmogAiADELsJIQcMGwsgAiABQQZqIgRrQQxIDRogAUESaiECQQAhAQNAIAFBBkYEQEEIIQcMGQtBACEHIAQtAAANFyAELQABIAFB4JAIai0AAEcNFyAEQQJqIQQgAUEBaiEBDAALAAsgAyAFNgIAQQAhBwwZCyAAIAFBBGogAiADELoJIQcMGAsgAiABQQRqIgRrIgZBAkgND0EAIQcCQAJ/IAQtAAAiCEUEQCAAIAEtAAUiBWotAEgMAQsgCMAgASwABSIFECsLQf8BcSIBQQZrDgISEQALAkACQCABQRZrDgMBFAEACyABQR1HDRMgBUEDdkEccSAIQcCACGotAABBBXRyQdDzB2ooAgAgBXZBAXFFDRMLIABByABqIQYCfwJAAkACQANAIAIgBCIAQQJqIgRrIghBAkgNFCAALQADIQECQAJAAn8gAC0AAiIJRQRAIAEgBmotAAAMAQsgCcAgAcAQKwtB/wFxQQZrDhgBAxkEBAUZGRkZGRkZGRkEAgICAgICGQAZCyABQQN2QRxxIAlBwIIIai0AAEEFdHJB0PMHaigCACABdkEBcQ0BDBgLCyAIQQJGDRkMFgsgCEEESQ0YDBULA0AgAiAEIgFBAmoiBGtBAkgNEiABLQADIQACQAJAAn8gASwAAiIFRQRAIAAgBmotAAAMAQsgBSAAwBArC0H/AXEiAEEJaw4DAgIBAAsgAEEVRg0BDBYLCyABQQRqDAELIABBBGoLIQRBBSEHDBILIABByABqIQkgAUEEaiEBQQAhBgNAIAIgAWsiC0ECSA0XIAEtAAEhBEECIQUCQAJAAkACQAJAAkACQAJAAn8gAS0AACIKRQRAIAQgCWotAAAMAQsgCsAgBMAQKwtB/wFxQQZrDhgBAhYEBAUWFhYWFgYWFhYEBwMHBwcHFgAWCyAEQQN2QRxxIApBwIIIai0AAEEFdHJB0PMHaigCACAEdkEBcQ0GDBULIAtBAkYNGwwUCyALQQRJDRoMEwsgBg0SIAIgAUECaiINayILQQJIDRsgAS0AAyEEQQEhBkEEIQUCQAJ/IAEtAAIiCkUEQCAEIAlqLQAADAELIArAIATAECsLQf8BcSIIQRZrDgMEEgQACwJAAkAgCEEdRwRAIAhBBmsOAgECFAsgBEEDdkEccSAKQcCACGotAABBBXRyQdDzB2ooAgAgBHZBAXENBQwTCyALQQJGDRoMEgsgC0EESQ0ZDBELAkACQAJAA0AgAiABIgRBAmoiAWsiBkECSA0eIAQtAAMhBQJAAn8gBC0AAiILRQRAIAUgCWotAAAMAQsgC8AgBcAQKwtB/wFxQQZrDhgDBBYBAQUWFhYWFgYWFhYBAhYCFhYWFgAWCwsgBUEDdkEccSALQcCACGotAABBBXRyQdDzB2ooAgAgBXZBAXFFDRQLQQAhCwJAAkACQANAIARBBGohBAJAAkACQAJAAkACQANAIAwgBDYCDEF/IQcgAiAEayIKQQJIDScgBC0AASEBIAQhBUEAIQYCQAJAAkACfyAELQAAIg1FBEAgASAJai0AAAwBCyANwCABwBArC0H/AXFBBmsOGAIEHwgIHx8fCR8fHx8fHwgBBQEBAQEfAB8LIAFBA3ZBHHEgDUHAgghqLQAAQQV0ckHQ8wdqKAIAIAF2QQFxRQ0FCyAEQQJqIQQMAQsLIApBAkYNJAwbCyAKQQRJDSMMGgsgC0UNAQsgBCEFDBcLIAwgBEECaiIFNgIMIAIgBWsiCEECSA0iIAQtAAMhAUEBIQsCQAJ/IAQtAAIiCkUEQCABIAlqLQAADAELIArAIAHAECsLQf8BcSIHQRZrDgMDGAMACwJAAkAgB0EdRwRAIAdBBmsOAgECGgsgAUEDdkEccSAKQcCACGotAABBBXRyQdDzB2ooAgAgAXZBAXENBAwZCyAIQQJGDSEMGAsgCEEESQ0gDBcLA0AgAiAEQQJqIgVrQQJIDSIgBC0AAyEBAn8gBCwAAiIERQRAIAEgCWotAAAMAQsgBCABwBArCyIBQQ5HBEAgAUH/AXEiAUEVSw0XIAUhBEEBIAF0QYCMgAFxRQ0XDAELCyAMIAU2AgwgBSEECwNAIAIgBEECaiIFa0ECSA0hIAQtAAMhAQJ/IAQsAAIiBkUEQCABIAlqLQAADAELIAYgAcAQKwsiAUH+AXFBDEcEQCABQf8BcSIBQRVLDRYgBSEEQQEgAXRBgIyAAXFFDRYMAQsLIARBBGohBQNAIAwgBTYCDAJAAkADQCACIAVrIghBAkgNJCAFLQABIQQCfyAFLAAAIgZFBEAgBCAJai0AAAwBCyAGIATAECsLIgQgAUYNAkEAIQYCQAJAAkAgBEH/AXEOCRwcHAIEBAABHAQLIAhBAkYNJCAFQQNqIQUMBQsgCEEESQ0jIAVBBGohBQwECyAAIAVBAmogAiAMQQxqEPAEIgVBAEoEQCAMKAIMIQUMAQsLIAUiBw0jIAwoAgwhBQwXCyAFQQJqIQUMAQsLIAwgBUECaiIBNgIMIAIgAWtBAkgNICAFLQADIQQCfyAFLAACIgZFBEAgBCAJai0AAAwBCyAGIATAECsLIQggBSEEIAEhBUEAIQYCQAJAIAhB/wFxIgFBCWsOCQEBBBcXFxcXBQALIAFBFUYNAAwVCwJAA0AgAiAFIgRBAmoiBWsiCEECSA0iIAQtAAMhAUEAIQsCQAJ/IAQtAAIiCkUEQCABIAlqLQAADAELIArAIAHAECsLQf8BcUEGaw4YAgQYAQEFGBgYGBgGGBgYAQMYAxgYGBgAGAsLIAwgBTYCDCAELQADIgFBA3ZBHHEgCkHAgAhqLQAAQQV0ckHQ8wdqKAIAIAF2QQFxDQEMFgsLIAhBAkYNHQwUCyAIQQRJDRwMEwsgBEEEaiEFQQEhBgwSCyAMIAVBAmoiADYCDCACIABrQQJIDRwgAC0AAARAIAAhBQwRCyAFQQRqIAAgBS0AA0E+RiIAGyEFQQNBACAAGyEGDBELIAZBAkYNGQwSCyAGQQRJDRgMEQtBAiEHIAMgAUECajYCAAwZCyACIAFBAmoiAGtBAkgNGAJAIAEtAAJFBEAgAS0AA0E+Rg0BCyADIAA2AgBBACEHDBkLQQQhByADIAFBBGo2AgAMGAsgASAFaiEBDAALAAsgACABQQJqIAIgAxDwBCEHDBULIAIgAUECaiIFa0ECSARAQX0hBwwVCyADIAFBBGogBQJ/IAUsAAAiAkUEQCAAIAEtAANqLQBIDAELIAIgASwAAxArC0EKRhs2AgBBByEHDBQLIAMgAUECajYCAEEHIQcMEwtBeyEHIAIgAUECaiIEa0ECSA0SIAQtAAANBSABLQADQd0ARw0FIAIgAUEEaiIFa0ECSA0SIAEtAAQNBSABLQAFQT5HDQUgAyAFNgIAQQAhBwwSCyACIAFrQQJIDQ8gAUECaiEEDAQLIAIgAWtBA0gNDiABQQNqIQQMAwsgAiABa0EESA0NIAFBBGohBAwCCyADIAE2AgAMDgsgAUECaiEECyAAQcgAaiEHA0ACQCACIAQiAGsiAUECSA0AIAQtAAEhBQJAAkACQAJAAn8gBCwAACIERQRAIAUgB2otAAAMAQsgBCAFwBArC0H/AXEOCwQEBAQCAwABBAQEAwsgAUECRg0DIABBA2ohBAwECyABQQNNDQIgAEEEaiEEDAMLIAFBBEkNASAAQQJqIQQgAC0AAg0CIAAtAANB3QBHDQIgAUEGSQ0BIAAtAAQNAiAALQAFQT5HDQIgAyAAQQRqNgIAQQAhBwwPCyAAQQJqIQQMAQsLIAMgADYCAEEGIQcMDAtBACEGCyADIAU2AgAgBiEHDAoLIAMgDTYCAEEAIQcMCQsgAyABNgIAQQAhBwwIC0F/IQcMBwsgBkEESQ0EDAELIAZBAkYNAwsgAyAENgIADAQLIAQhAgsgAyACNgIADAILQX4hBwwBCyADIAk2AgBBACEHCyAMQRBqJAAgBwuyEQEGfyABIAJPBEBBfA8LAkACQAJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgtBfiEGQRIhBQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8gAS0AACIIRQRAIAAgAS0AASIHai0ASAwBCyAIwCABLAABIgcQKwtB/wFxQQJrDiMCGAgODxAYAwQMAAEYGBgYGA0HBBMSExISEhgRBQkKGBgGCxgLQQwgACABQQJqIAIgAxC8CQ8LQQ0gACABQQJqIAIgAxC8CQ8LQX8hBiACIAFBAmoiBWtBAkgNEQJAAkACQAJAAkACfyABLAACIgRFBEAgACABLQADai0ASAwBCyAEIAEsAAMQKwtB/wFxIgRBD2sOCgMCBAQEBAQBBAEACyAEQQVrQQNJDQAgBEEdRw0DCyADIAE2AgBBHQ8LIAIgAUEEaiIEa0ECSA0TAkACQAJAAkACfyAELAAAIgVFBEAgACABLQAFai0ASAwBCyAFIAEsAAUQKwtB/wFxQRRrDggBAwIDAgMDAAMLIAAgAUEGaiACIAMQuwkPCyADIAFBBmo2AgBBIQ8LIABByABqIQUCQANAIAIgBCIBQQJqIgRrIgdBAkgNFiABLQADIQACQAJ/IAEsAAIiCEUEQCAAIAVqLQAADAELIAggAMAQKwtB/wFxIgBBFWsOCiEBAwEDAwMDAwACCwsgB0EESQ0VIAEtAAUhAAJ/IAEsAAQiAUUEQCAAIAVqLQAADAELIAEgAMAQKwtB/wFxIgBBHksNH0EBIAB0QYCMgIEEcQ0BDB8LIABBCWtBAkkNHgsgAyAENgIADB4LIAAgAUEEaiACIAMQugkPCyADIAU2AgAMHAsgAUECaiACRw0AIAMgAjYCAEFxDwsgAEHIAGohBQNAAkAgAiABIgBBAmoiAWtBAkgNACAALQADIQQCQAJAAn8gACwAAiIGRQRAIAQgBWotAAAMAQsgBiAEwBArC0H/AXEiBEEJaw4CAQMACyAEQRVGDQIMAQsgAEEEaiACRw0BCwsgAyABNgIAQQ8PCyAAIAFBAmogAiADELkJDwsgAyABQQJqNgIAQSYPCyADIAFBAmo2AgBBGQ8LIAIgAUECaiIAayICQQJIBEBBZg8LAkAgAS0AAg0AIAEtAANB3QBHDQAgAkEESQ0OIAEtAAQNACABLQAFQT5HDQAgAyABQQZqNgIAQSIPCyADIAA2AgBBGg8LIAMgAUECajYCAEEXDwsgAiABQQJqIgRrQQJIBEBBaA8LAkACQAJAAkACQAJAAn8gASwAAiICRQRAIAAgAS0AA2otAEgMAQsgAiABLAADECsLQf8BcSIAQSBrDgUYAQMYGAALIABBCWsOBxcXFwQEBAEDCyADIAFBBGo2AgBBJA8LIAMgAUEEajYCAEEjDwsgAyABQQRqNgIAQSUPCyAAQRVGDRMLIAMgBDYCAAwUCyADIAFBAmo2AgBBFQ8LIAMgAUECajYCAEERDwsgAiABQQJqIgRrIgVBAkgNCAJAAn8gBC0AACIIRQRAIAAgAS0AAyIHai0ASAwBCyAIwCABLAADIgcQKwtB/wFxIgFBBmsOAg0MAAtBACEGAkACQAJAIAFBFmsOAwERAQALIAFBHUcNASAHQQN2QRxxIAhBwIAIai0AAEEFdHJB0PMHaigCACAHdkEBcUUNAQsgAEHIAGohCANAIAIgBCIAQQJqIgRrIgdBAkgEQEFsDwsgAC0AAyEFQRQhBgJAAkACQAJ/IAAtAAIiAEUEQCAFIAhqLQAADAELIADAIAXAECsLQf8BcUEGaw4fAAEEExMTBAQEBAQEBAQEEwMEAwMDAwQCEwQTBAQEEwQLQQAhBiAHQQJGDREMEgtBACEGIAdBBEkNEAwRCyAFQQN2QRxxIABBwIIIai0AAEEFdHJB0PMHaigCACAFdkEBcQ0ACwtBACEGDA4LIAIgAWtBAkgNBQwJCyACIAFrQQNODQgMBAsgAiABa0EETg0HDAMLQQEgB3QiBCAHQeABcUEFdkECdCIGIAhBwIAIai0AAEEFdHJB0PMHaigCAHENAUETIQUgCEHAgghqLQAAQQV0IAZyQdDzB2ooAgAgBHFFDQYMAQtBEyEFCyAAQcgAaiEGIAFBAmohAAJAAkACQAJAAkADQCAFQSlGIQkgBUESRyEEA0AgAiAAIgFrIgdBAkgNBiABLQABIQACQAJAAkACQAJAAkACfyABLQAAIghFBEAgACAGai0AAAwBCyAIwCAAwBArC0H/AXFBBmsOHwIDEAQEBBAQEAsQEBAQBAQBBQEBAQEQAAQQBAoJBAQQCyAAQQN2QRxxIAhBwIIIai0AAEEFdHJB0PMHaigCACAAdkEBcUUNDwsgAUECaiEADAQLIAdBAkYNEQwNCyAHQQRJDRAMDAsgAyABNgIAIAUPCyABQQJqIQAgCQRAQRMhBQwCCyAEDQALIAIgAGsiCEECSA0IIAEtAAMhBEETIQUCQAJAAkACQAJ/IAEtAAIiCUUEQCAEIAZqLQAADAELIAnAIATAECsLQf8BcSIHQRZrDggCBAICAgIEAQALIAdBBWsOAwoCBAMLIARBA3ZBHHEgCUHAgghqLQAAQQV0ckHQ8wdqKAIAIAR2QQFxRQ0JCyABQQRqIQBBKSEFDAELCyAIQQJGDQwMBgsgCEEESQ0LDAULIAVBE0YNBiADIAFBAmo2AgBBIA8LIAVBE0YNBSADIAFBAmo2AgBBHw8LIAVBE0YNBCADIAFBAmo2AgBBHg8LQQAgBWshBgsgBg8LIAMgADYCAAwJC0F/DwsgAyABNgIADAcLIAMgATYCAAwGC0EAIQYgBUEESQ0BDAILQQAhBiAFQQJHDQELQX4PCyADIAQ2AgAgBg8LIAMgBDYCAEEYDwsgAyAENgIAQRAPC0EAC1gBAX8CQANAIAEoAgAiACACTw0BIAQgAygCACIFSwRAIAEgAEEBajYCACAALQAAIQAgAyADKAIAIgVBAWo2AgAgBSAAOgAADAELCyAEIAVHDQBBAg8LQQALkgEBAn8gASgCACIAIAIgAGtBfnEiBWohAiAEIAMoAgBrIAVIBEAgAkF+QQAgAkEBay0AAEH4AXFB2AFGIgYbaiECCwJAA0AgACACTw0BIAQgAygCACIFSwRAIAAvAAAhACADIAVBAmo2AgAgBSAAOwEAIAEgASgCAEECaiIANgIADAELCyAEIAVHDQBBAiEGCyAGC6YEAQR/IAEoAgAiACACIABrQX5xaiEIAn8DQEEAIAAgCE8NARogAC0AACIGwCECAkACQAJAAkACQCAALQABIgUOCAABAQEBAQEBAgsgAkEASA0AIAMoAgAiBSAERg0DIAMgBUEBajYCACAFIAI6AAAMAgtBAiAEIAMoAgAiB2tBAkgNBBogAyAHQQFqNgIAIAcgAkEGdkEDcSAFQQJ0ckHAAXI6AAAgAyADKAIAIgVBAWo2AgAgBSACQT9xQYABcjoAAAwBCyAFQdgBa0EETwRAIAQgAygCACIGa0EDSA0CIAMgBkEBajYCACAGIAVBBHZB4AFyOgAAIAMgAygCACIGQQFqNgIAIAYgBUECdEE8cSACQcABcUEGdnJBgAFyOgAAIAMgAygCACIFQQFqNgIAIAUgAkE/cUGAAXI6AAAMAQsgBCADKAIAIgdrQQRIDQFBASAIIABrQQRIDQMaIAMgB0EBajYCACAHIAVBAnRBDHEgBkEGdnJBAWoiBUECdkHwAXI6AAAgAyADKAIAIgdBAWo2AgAgByAFQQR0QTBxIAZBAnZBD3FyQYABcjoAACAALQADIQYgAC0AAiEFIAMgAygCACIHQQFqNgIAIAcgBkECdEEMcSACQQR0QTBxIAVBBnZyckGAAXI6AAAgAyADKAIAIgJBAWo2AgAgAiAFQT9xQYABcjoAACAAQQJqIQALIABBAmohAAwBCwtBAgsgASAANgIAC8wBAQd/IABByABqIQggAkECayEJQQEhBgJAA0AgCSABQQJqIgBrQQJIDQEgAS0AAiIEwCEFAkACQAJAAn8gASwAAyICRQRAIAQgCGotAAAMAQsgAiAFECsLQf8BcUEJayIHQRpLDQAgACEBQQEgB3QiCkHzj5c/cQ0DIApBgMAIcUUEQCAHQQxHDQEgBUEJRyACcg0EDAMLIAINAiAFQQBODQMMAQsgAg0BCyAAIQEgBEEkRiAEQcAARnINAQsLIAMgADYCAEEAIQYLIAYLtwIBAn8gAEHIAGohBQNAIAIgAWtBAk4EQCABLQAAIQACQAJAAkACQAJAAkACfyABLAABIgRFBEAgACAFai0AAAwBCyAEIADAECsLQf8BcUEFaw4GAAECBQQDBQsgAyADKAIEQQFqNgIEIAFBAmohAQwGCyADIAMoAgRBAWo2AgQgAUEDaiEBDAULIAMgAygCBEEBajYCBCABQQRqIQEMBAsgA0EANgIEIAMgAygCAEEBajYCACABQQJqIQEMAwsgAyADKAIAQQFqNgIAAn8gAiABQQJqIgBrQQJIBEAgAAwBCyABLQACIQQgAUEEaiAAAn8gASwAAyIARQRAIAQgBWotAAAMAQsgACAEwBArC0EKRhsLIQEgA0EANgIEDAILIAMgAygCBEEBajYCBCABQQJqIQEMAQsLC5wCAAJAAkACQAJAIAIgAWtBAm1BAmsOAwABAgMLIAEtAAMNAiABLQACQfQARw0CIAEtAAENAkE8QT5BACABLQAAIgBB5wBGGyAAQewARhsPCyABLQABDQEgAS0AAEHhAEcNASABLQADDQEgAS0AAkHtAEcNASABLQAFDQEgAS0ABEHwAEcNAUEmDwsgAS0AAQ0AIAEtAAAiAEHhAEcEQCAAQfEARw0BIAEtAAMNASABLQACQfUARw0BIAEtAAUNASABLQAEQe8ARw0BIAEtAAcNASABLQAGQfQARw0BQSIPCyABLQADDQAgAS0AAkHwAEcNACABLQAFDQAgAS0ABEHvAEcNACABLQAHDQAgAS0ABkHzAEcNAEEnDwtBAAudAgECfyABQQRqIQACQAJAAkAgAS0ABQ0AIAAtAABB+ABHDQAgAUEGaiEAQQAhAQNAAkAgAC0AAQ0AIAAsAAAiAkH/AXEiA0E7Rg0EAn8CQAJAAkAgA0Ewaw43AAAAAAAAAAAAAAQEBAQEBAQBAQEBAQEEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAICAgICAgQLIAJBMGsgAUEEdHIMAgsgAUEEdCACakE3awwBCyABQQR0IAJqQdcAawsiAUH//8MASg0DCyAAQQJqIQAMAAsAC0EAIQEDQEFPIQIgAC0AAUUEQCAALAAAIgJBO0YNAyACQTBrIQILIABBAmohACACIAFBCmxqIgFBgIDEAEgNAAsLQX8PCyABEJMEC9QFAQl/IABByABqIQpBASEFA0AgBSEGIAEiBy0AAiIAwCEJAn8gBywAAyILRQRAIAAgCmotAAAMAQsgCyAJECsLIQwgB0ECaiIAIQECQAJAAkACQAJAAkACQAJAAkACQAJAAkAgDEH/AXFBA2sOGwYMAAECDAgICQQFDAwMCQwMDAcDDAMMDAwMAwwLIAYNC0EBIQUgAiAETA0LIAMgBEEEdGoiAEEBOgAMIAAgATYCAAwLCyAHQQNqIQEgBg0KQQEhBSACIARMDQogAyAEQQR0aiIGQQE6AAwgBiAANgIADAoLAkAgBg0AQQEhBSACIARMDQAgAyAEQQR0aiIBQQE6AAwgASAANgIACyAHQQRqIQEMCQsgBg0IQQEhBSACIARMDQggAyAEQQR0aiIAQQE6AAwgACABNgIADAgLIAZBAkcEQEEMIQhBAiEFIAIgBEwNCCADIARBBHRqIAdBBGo2AgQMCAtBAiEFIAhBDEcNByACIARKBEAgAyAEQQR0aiAANgIICyAEQQFqIQRBDCEIDAYLIAZBAkcEQEENIQhBAiEFIAIgBEwNByADIARBBHRqIAdBBGo2AgQMBwtBAiEFIAhBDUcNBiACIARKBEAgAyAEQQR0aiAANgIICyAEQQFqIQRBDSEIDAULIAIgBEwNBSADIARBBHRqQQA6AAwMAwtBACEFAkAgBkEBaw4CBQADC0ECIQUgAiAETA0EIAMgBEEEdGoiBi0ADEUNBAJAIAsNACAAIAYoAgRGIAlBIEdyDQAgBy0ABCIJwCEBAn8gBywABSIHRQRAIAFBIEYNAiAJIApqLQAADAELIAcgARArCyAAIQEgCEcNBQsgBkEAOgAMIAAhAQwEC0EAIQUCQCAGQQFrDgIEAAILQQIhBSACIARMDQMgAyAEQQR0akEAOgAMDAMLQQIhBSAGQQJGDQIgBA8LIAYhBQwBC0EAIQUMAAsAC1oBAn8gAEHIAGohAgNAIAEtAAAhAAJ/IAEsAAEiA0UEQCAAIAJqLQAADAELIAMgAMAQKwtB/wFxIgBBFUtBASAAdEGAjIABcUVyRQRAIAFBAmohAQwBCwsgAQtvAQN/IABByABqIQMgASEAA0AgAC0AACECAn8gACwAASIERQRAIAIgA2otAAAMAQsgBCACwBArC0EFa0H/AXEiAkEZT0GHgPgLIAJ2QQFxRXJFBEAgACACQQJ0QYymCGooAgBqIQAMAQsLIAAgAWsLTAEBfwJAA0AgAy0AACIEBEBBACEAIAIgAWtBAkgNAiABLQABDQIgAS0AACAERw0CIANBAWohAyABQQJqIQEMAQsLIAEgAkYhAAsgAAvVAgEEfyABIAJPBEBBfA8LIAIgAWtBAkgEQEF/DwsgAEHIAGohByABIQQCQANAIAIgBGtBAkgNASAELQAAIQUCfyAELAABIgZFBEAgBSAHai0AAAwBCyAGIAXAECsLIQZBAiEFAkACQAJAAkACQAJAAkACQCAGQf8BcSIGQQNrDggCBgYAAQYEAwULQQMhBQwFC0EEIQUMBAsgASAERw0GIAAgAUECaiACIAMQ8gQPCyABIARHDQUgAyABQQJqNgIAQQcPCyABIARHDQQgAiABQQJqIgJrQQJIBEBBfQ8LIAEtAAIhACADIAFBBGogAgJ/IAEsAAMiBEUEQCAAIAdqLQAADAELIAQgAMAQKwtBCkYbNgIAQQcPCyAGQR5GDQELIAQgBWohBAwBCwsgASAERw0AIAAgAUECaiACIAMQvwkiAEEAIABBFkcbDwsgAyAENgIAQQYL1wIBBH8gASACTwRAQXwPCyACIAFrQQJIBEBBfw8LIABByABqIQcgASEEAkADQCACIARrQQJIDQEgBC0AACEFAn8gBCwAASIGRQRAIAUgB2otAAAMAQsgBiAFwBArCyEGQQIhBQJAAkACQAJAAkACQAJAAkACQCAGQf8BcSIGQQJrDgkDAgcHAAEHBQQGC0EDIQUMBgtBBCEFDAULIAEgBEcNByAAIAFBAmogAiADEPIEDwsgAyAENgIAQQAPCyABIARHDQUgAyABQQJqNgIAQQcPCyABIARHDQQgAiABQQJqIgJrQQJIBEBBfQ8LIAEtAAIhACADIAFBBGogAgJ/IAEsAAMiBEUEQCAAIAdqLQAADAELIAQgAMAQKwtBCkYbNgIAQQcPCyAGQRVGDQELIAQgBWohBAwBCwsgASAERw0AIAMgAUECajYCAEEnDwsgAyAENgIAQQYL8wIBBH8gASACIAFrIgRBfnFqIAIgBEEBcRshBCAAQcgAaiEHAkADQCAEIAEiAmsiBkECSA0BIAItAAAhAAJ/IAIsAAEiAUUEQCAAIAdqLQAADAELIAEgAMAQKwshAUEAIQACQAJAAkACQAJAAkACQAJAIAFB/wFxDgkEBAIGAwYAAQQGCyAGQQJGDQYgAkEDaiEBDAcLIAZBBEkNBSACQQRqIQEMBgsgBCACQQJqIgFrQQJIDQYgAi0AAw0FIAEtAABBIUcNBSAEIAJBBGoiAWtBAkgNBiACLQAFDQUgAS0AAEHbAEcNBSACQQZqIQEgBUEBaiEFDAULIAQgAkECaiIBa0ECSA0FIAItAAMNBCABLQAAQd0ARw0EIAQgAkEEaiIBa0ECSA0FIAItAAUNBCABLQAAQT5HDQQgAkEGaiEBIAUNAUEqIQAgASECCyADIAI2AgAgAA8LIAVBAWshBQwCCyACQQJqIQEMAQsLQX4PC0F/C5gEAQR/IAEgAk8EQEF8DwsCQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQCACIAFrIgRBAXEEQCAEQX5xIgJFDQEgASACaiECCwJAAkACfyABLAABIgRFBEAgACABLQAAai0ASAwBCyAEIAEsAAAQKwtB/wFxDgsMDAcHAAQFBgwBCQcLQX8hBSACIAFBAmoiBGtBAkgNDCABLQADDQcgBC0AAEHdAEcNByACIAFBBGprQQJIDQwgAS0ABQ0HIAEtAARBPkcNByABQQZqIQFBKCEFDAsLIAIgAUECaiIEa0ECTg0BC0F/DwsgAUEEaiAEAn8gASwAAyICRQRAIAAgBC0AAGotAEgMAQsgAiAELAAAECsLQQpGGwwGCyACIAFrQQJIDQkgAUECaiEEDAMLIAIgAWtBA0gNCCABQQNqIQQMAgsgAiABa0EESA0HIAFBBGohBAwBCyABQQJqIQQLIABByABqIQdBBiEFA0AgAiAEayIGQQJIDQMgBC0AACEAAn8gBCwAASIBRQRAIAAgB2otAAAMAQsgASAAwBArCyEBQQIhAAJAIAFB/wFxIgFBCksNAAJAIAFBBkcEQCABQQdGDQFBASABdEGTDnENBgwCC0EDIQAgBkECRg0FDAELQQQhACAGQQRJDQQLIAAgBGohBAwACwALIAFBAmoLIQFBByEFDAELIAQhAQsgAyABNgIACyAFDwtBfgvXGgEKfyMAQRBrIgskAAJAIAEgAk8EQEF8IQcMAQsCQAJAAkACQAJAAkACQAJAIAIgAWsiBUEBcQRAIAVBfnEiAkUNASABIAJqIQILAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8gASwAASIFRQRAIAAgAS0AAGotAEgMAQsgBSABLAAAECsLQf8BcQ4LCAgAAQQFBgcIAgMJC0F/IQcgAiABQQJqIglrIgVBAkgNDgJAAkACQAJAAkACQAJAAn8gAS0AAyIERQRAIAAgAS0AAiIGai0ASAwBCyAEwCABLAACIgYQKwtB/wFxIghBBWsOFBwBAhwcHBwcHBwEAwUcHBwcBhwGAAsgCEEdRw0bIAZBA3ZBHHEgBEHAgAhqLQAAQQV0ckHQ8wdqKAIAIAZ2QQFxDQUMGwsgBUECRw0aDBkLIAVBBE8NGQwYCyACIAFBBGoiBWtBAkgNGQJAAn8gASwABSIERQRAIAAgAS0ABGotAEgMAQsgBCABLAAEECsLQf8BcSIEQRRHBEAgBEEbRw0BIAAgAUEGaiACIAMQwQkhBwwbCyACIAFBBmoiBGtBDEgNGiABQRJqIQJBACEBA0AgAUEGRgRAQQghBwwZC0EAIQcgBC0AAQ0XIAQtAAAgAUHgkAhqLQAARw0XIARBAmohBCABQQFqIQEMAAsACyADIAU2AgBBACEHDBkLIAAgAUEEaiACIAMQwAkhBwwYCyACIAFBBGoiBGsiBkECSA0PQQAhBwJAAn8gAS0ABSIIRQRAIAAgBC0AACIFai0ASAwBCyAIwCAELAAAIgUQKwtB/wFxIgFBBmsOAhIRAAsCQAJAIAFBFmsOAwEUAQALIAFBHUcNEyAFQQN2QRxxIAhBwIAIai0AAEEFdHJB0PMHaigCACAFdkEBcUUNEwsgAEHIAGohBgJ/AkACQAJAA0AgAiAEIgBBAmoiBGsiCEECSA0UIAAtAAIhAQJAAkACfyAALQADIglFBEAgASAGai0AAAwBCyAJwCABwBArC0H/AXFBBmsOGAEDGQQEBRkZGRkZGRkZGQQCAgICAgIZABkLIAFBA3ZBHHEgCUHAgghqLQAAQQV0ckHQ8wdqKAIAIAF2QQFxDQEMGAsLIAhBAkYNGQwWCyAIQQRJDRgMFQsDQCACIAQiAUECaiIEa0ECSA0SIAEtAAIhAAJAAkACfyABLAADIgVFBEAgACAGai0AAAwBCyAFIADAECsLQf8BcSIAQQlrDgMCAgEACyAAQRVGDQEMFgsLIAFBBGoMAQsgAEEEagshBEEFIQcMEgsgAEHIAGohCSABQQRqIQFBACEGA0AgAiABayIKQQJIDRcgAS0AACEEQQIhBQJAAkACQAJAAkACQAJAAkACfyABLQABIgxFBEAgBCAJai0AAAwBCyAMwCAEwBArC0H/AXFBBmsOGAECFgQEBRYWFhYWBhYWFgQHAwcHBwcWABYLIARBA3ZBHHEgDEHAgghqLQAAQQV0ckHQ8wdqKAIAIAR2QQFxDQYMFQsgCkECRg0bDBQLIApBBEkNGgwTCyAGDRIgAiABQQJqIg1rIgpBAkgNGyABLQACIQRBASEGQQQhBQJAAn8gAS0AAyIMRQRAIAQgCWotAAAMAQsgDMAgBMAQKwtB/wFxIghBFmsOAwQSBAALAkACQCAIQR1HBEAgCEEGaw4CAQIUCyAEQQN2QRxxIAxBwIAIai0AAEEFdHJB0PMHaigCACAEdkEBcQ0FDBMLIApBAkYNGgwSCyAKQQRJDRkMEQsCQAJAAkADQCACIAEiBEECaiIBayIGQQJIDR4gBC0AAiEFAkACfyAELQADIgpFBEAgBSAJai0AAAwBCyAKwCAFwBArC0H/AXFBBmsOGAMEFgEBBRYWFhYWBhYWFgECFgIWFhYWABYLCyAFQQN2QRxxIApBwIAIai0AAEEFdHJB0PMHaigCACAFdkEBcUUNFAtBACEKAkACQAJAA0AgBEEEaiEEAkACQAJAAkACQAJAA0AgCyAENgIMQX8hByACIARrIgxBAkgNJyAELQAAIQEgBCEFQQAhBgJAAkACQAJ/IAQtAAEiDUUEQCABIAlqLQAADAELIA3AIAHAECsLQf8BcUEGaw4YAgQfCAgfHx8JHx8fHx8fCAEFAQEBAR8AHwsgAUEDdkEccSANQcCCCGotAABBBXRyQdDzB2ooAgAgAXZBAXFFDQULIARBAmohBAwBCwsgDEECRg0kDBsLIAxBBEkNIwwaCyAKRQ0BCyAEIQUMFwsgCyAEQQJqIgU2AgwgAiAFayIIQQJIDSIgBC0AAiEBQQEhCgJAAn8gBC0AAyIMRQRAIAEgCWotAAAMAQsgDMAgAcAQKwtB/wFxIgdBFmsOAwMYAwALAkACQCAHQR1HBEAgB0EGaw4CAQIaCyABQQN2QRxxIAxBwIAIai0AAEEFdHJB0PMHaigCACABdkEBcQ0EDBkLIAhBAkYNIQwYCyAIQQRJDSAMFwsDQCACIARBAmoiBWtBAkgNIiAELQACIQECfyAELAADIgRFBEAgASAJai0AAAwBCyAEIAHAECsLIgFBDkcEQCABQf8BcSIBQRVLDRcgBSEEQQEgAXRBgIyAAXFFDRcMAQsLIAsgBTYCDCAFIQQLA0AgAiAEQQJqIgVrQQJIDSEgBC0AAiEBAn8gBCwAAyIGRQRAIAEgCWotAAAMAQsgBiABwBArCyIBQf4BcUEMRwRAIAFB/wFxIgFBFUsNFiAFIQRBASABdEGAjIABcUUNFgwBCwsgBEEEaiEFA0AgCyAFNgIMAkACQANAIAIgBWsiCEECSA0kIAUtAAAhBAJ/IAUsAAEiBkUEQCAEIAlqLQAADAELIAYgBMAQKwsiBCABRg0CQQAhBgJAAkACQCAEQf8BcQ4JHBwcAgQEAAEcBAsgCEECRg0kIAVBA2ohBQwFCyAIQQRJDSMgBUEEaiEFDAQLIAAgBUECaiACIAtBDGoQ8gQiBUEASgRAIAsoAgwhBQwBCwsgBSIHDSMgCygCDCEFDBcLIAVBAmohBQwBCwsgCyAFQQJqIgE2AgwgAiABa0ECSA0gIAUtAAIhBAJ/IAUsAAMiBkUEQCAEIAlqLQAADAELIAYgBMAQKwshCCAFIQQgASEFQQAhBgJAAkAgCEH/AXEiAUEJaw4JAQEEFxcXFxcFAAsgAUEVRg0ADBULAkADQCACIAUiBEECaiIFayIIQQJIDSIgBC0AAiEBAn8gBCwAAyIGRQRAIAEgCWotAAAMAQsgBiABwBArCyEBQQAhCkEAIQYCQCABQf8BcUEGaw4YAgQYAQEFGBgYGBgGGBgYAQMYAxgYGBgAGAsLIAsgBTYCDCAELQACIgFBA3ZBHHEgBC0AA0HAgAhqLQAAQQV0ckHQ8wdqKAIAIAF2QQFxDQEMFgsLIAhBAkYNHQwUCyAIQQRJDRwMEwsgBEEEaiEFQQEhBgwSCyALIAVBAmoiADYCDCACIABrQQJIDRwgBS0AAwRAIAAhBQwRCyAFQQRqIAAgBS0AAkE+RiIAGyEFQQNBACAAGyEGDBELIAZBAkYNGQwSCyAGQQRJDRgMEQtBAiEHIAMgAUECajYCAAwZCyACIAFBAmoiAGtBAkgNGAJAIAEtAANFBEAgAS0AAkE+Rg0BCyADIAA2AgBBACEHDBkLQQQhByADIAFBBGo2AgAMGAsgASAFaiEBDAALAAsgACABQQJqIAIgAxDyBCEHDBULIAIgAUECaiIFa0ECSARAQX0hBwwVCyADIAFBBGogBQJ/IAEsAAMiAkUEQCAAIAUtAABqLQBIDAELIAIgBSwAABArC0EKRhs2AgBBByEHDBQLIAMgAUECajYCAEEHIQcMEwtBeyEHIAIgAUECaiIEa0ECSA0SIAEtAAMNBSAELQAAQd0ARw0FIAIgAUEEaiIFa0ECSA0SIAEtAAUNBSABLQAEQT5HDQUgAyAFNgIAQQAhBwwSCyACIAFrQQJIDQ8gAUECaiEEDAQLIAIgAWtBA0gNDiABQQNqIQQMAwsgAiABa0EESA0NIAFBBGohBAwCCyADIAE2AgAMDgsgAUECaiEECyAAQcgAaiEHA0ACQCACIAQiAGsiAUECSA0AIAQtAAAhBQJAAkACQAJAAn8gBCwAASIERQRAIAUgB2otAAAMAQsgBCAFwBArC0H/AXEOCwQEBAQCAwABBAQEAwsgAUECRg0DIABBA2ohBAwECyABQQNNDQIgAEEEaiEEDAMLIAFBBEkNASAAQQJqIQQgAC0AAw0CIAQtAABB3QBHDQIgAUEGSQ0BIAAtAAUNAiAALQAEQT5HDQIgAyAAQQRqNgIAQQAhBwwPCyAAQQJqIQQMAQsLIAMgADYCAEEGIQcMDAtBACEGCyADIAU2AgAgBiEHDAoLIAMgDTYCAEEAIQcMCQsgAyABNgIAQQAhBwwIC0F/IQcMBwsgBkEESQ0EDAELIAZBAkYNAwsgAyAENgIADAQLIAQhAgsgAyACNgIADAILQX4hBwwBCyADIAk2AgBBACEHCyALQRBqJAAgBwuyEQEGfyABIAJPBEBBfA8LAkACQAJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgtBfiEGQRIhBQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8gAS0AASIIRQRAIAAgAS0AACIHai0ASAwBCyAIwCABLAAAIgcQKwtB/wFxQQJrDiMCGAgODxAYAwQMAAEYGBgYGA0HBBMSExISEhgRBQkKGBgGCxgLQQwgACABQQJqIAIgAxDCCQ8LQQ0gACABQQJqIAIgAxDCCQ8LQX8hBiACIAFBAmoiBWtBAkgNEQJAAkACQAJAAkACfyABLAADIgRFBEAgACABLQACai0ASAwBCyAEIAEsAAIQKwtB/wFxIgRBD2sOCgMCBAQEBAQBBAEACyAEQQVrQQNJDQAgBEEdRw0DCyADIAE2AgBBHQ8LIAIgAUEEaiIEa0ECSA0TAkACQAJAAkACfyABLAAFIgVFBEAgACAELQAAai0ASAwBCyAFIAQsAAAQKwtB/wFxQRRrDggBAwIDAgMDAAMLIAAgAUEGaiACIAMQwQkPCyADIAFBBmo2AgBBIQ8LIABByABqIQUCQANAIAIgBCIBQQJqIgRrIgdBAkgNFiABLQACIQACQAJ/IAEsAAMiCEUEQCAAIAVqLQAADAELIAggAMAQKwtB/wFxIgBBFWsOCiEBAwEDAwMDAwACCwsgB0EESQ0VIAEtAAQhAAJ/IAEsAAUiAUUEQCAAIAVqLQAADAELIAEgAMAQKwtB/wFxIgBBHksNH0EBIAB0QYCMgIEEcQ0BDB8LIABBCWtBAkkNHgsgAyAENgIADB4LIAAgAUEEaiACIAMQwAkPCyADIAU2AgAMHAsgAUECaiACRw0AIAMgAjYCAEFxDwsgAEHIAGohBQNAAkAgAiABIgBBAmoiAWtBAkgNACAALQACIQQCQAJAAn8gACwAAyIGRQRAIAQgBWotAAAMAQsgBiAEwBArC0H/AXEiBEEJaw4CAQMACyAEQRVGDQIMAQsgAEEEaiACRw0BCwsgAyABNgIAQQ8PCyAAIAFBAmogAiADEL8JDwsgAyABQQJqNgIAQSYPCyADIAFBAmo2AgBBGQ8LIAIgAUECaiIAayICQQJIBEBBZg8LAkAgAS0AAw0AIAEtAAJB3QBHDQAgAkEESQ0OIAEtAAUNACABLQAEQT5HDQAgAyABQQZqNgIAQSIPCyADIAA2AgBBGg8LIAMgAUECajYCAEEXDwsgAiABQQJqIgRrQQJIBEBBaA8LAkACQAJAAkACQAJAAn8gASwAAyICRQRAIAAgAS0AAmotAEgMAQsgAiABLAACECsLQf8BcSIAQSBrDgUYAQMYGAALIABBCWsOBxcXFwQEBAEDCyADIAFBBGo2AgBBJA8LIAMgAUEEajYCAEEjDwsgAyABQQRqNgIAQSUPCyAAQRVGDRMLIAMgBDYCAAwUCyADIAFBAmo2AgBBFQ8LIAMgAUECajYCAEERDwsgAiABQQJqIgRrIgVBAkgNCAJAAn8gAS0AAyIIRQRAIAAgBC0AACIHai0ASAwBCyAIwCAELAAAIgcQKwtB/wFxIgFBBmsOAg0MAAtBACEGAkACQAJAIAFBFmsOAwERAQALIAFBHUcNASAHQQN2QRxxIAhBwIAIai0AAEEFdHJB0PMHaigCACAHdkEBcUUNAQsgAEHIAGohCANAIAIgBCIAQQJqIgRrIgdBAkgEQEFsDwsgAC0AAiEFQRQhBgJAAkACQAJ/IAAtAAMiAEUEQCAFIAhqLQAADAELIADAIAXAECsLQf8BcUEGaw4fAAEEExMTBAQEBAQEBAQEEwMEAwMDAwQCEwQTBAQEEwQLQQAhBiAHQQJGDREMEgtBACEGIAdBBEkNEAwRCyAFQQN2QRxxIABBwIIIai0AAEEFdHJB0PMHaigCACAFdkEBcQ0ACwtBACEGDA4LIAIgAWtBAkgNBQwJCyACIAFrQQNODQgMBAsgAiABa0EETg0HDAMLQQEgB3QiBCAHQeABcUEFdkECdCIGIAhBwIAIai0AAEEFdHJB0PMHaigCAHENAUETIQUgCEHAgghqLQAAQQV0IAZyQdDzB2ooAgAgBHFFDQYMAQtBEyEFCyAAQcgAaiEGIAFBAmohAAJAAkACQAJAAkADQCAFQSlGIQkgBUESRyEEA0AgAiAAIgFrIgdBAkgNBiABLQAAIQACQAJAAkACQAJAAkACfyABLQABIghFBEAgACAGai0AAAwBCyAIwCAAwBArC0H/AXFBBmsOHwIDEAQEBBAQEAsQEBAQBAQBBQEBAQEQAAQQBAoJBAQQCyAAQQN2QRxxIAhBwIIIai0AAEEFdHJB0PMHaigCACAAdkEBcUUNDwsgAUECaiEADAQLIAdBAkYNEQwNCyAHQQRJDRAMDAsgAyABNgIAIAUPCyABQQJqIQAgCQRAQRMhBQwCCyAEDQALIAIgAGsiCEECSA0IIAEtAAIhBEETIQUCQAJAAkACQAJ/IAEtAAMiCUUEQCAEIAZqLQAADAELIAnAIATAECsLQf8BcSIHQRZrDggCBAICAgIEAQALIAdBBWsOAwoCBAMLIARBA3ZBHHEgCUHAgghqLQAAQQV0ckHQ8wdqKAIAIAR2QQFxRQ0JCyABQQRqIQBBKSEFDAELCyAIQQJGDQwMBgsgCEEESQ0LDAULIAVBE0YNBiADIAFBAmo2AgBBIA8LIAVBE0YNBSADIAFBAmo2AgBBHw8LIAVBE0YNBCADIAFBAmo2AgBBHg8LQQAgBWshBgsgBg8LIAMgADYCAAwJC0F/DwsgAyABNgIADAcLIAMgATYCAAwGC0EAIQYgBUEESQ0BDAILQQAhBiAFQQJHDQELQX4PCyADIAQ2AgAgBg8LIAMgBDYCAEEYDwsgAyAENgIAQRAPC0EAC2ABAX9BASEAAkAgASwAA0G/f0oNACABLAACQb9/Sg0AIAEtAAEhAiABLQAAIgFB8AFGBEAgAkFAa0H/AXFB0AFJDwsgAsBBAE4NACACQY8BQb8BIAFB9AFGG0shAAsgAAubAQEDf0EBIQICQCABLAACIgNBAE4NAAJAAkACQCABLQAAIgRB7wFGBEBBvwEhACABLQABIgFBvwFHDQEgA0G9f00NAwwECyADQb9/Sw0DIAEtAAEhACAEQeABRw0BIABBQGtB/wFxQeABSQ8LIAEhACADQb9/Sw0CCyAAwEEATg0BCyAAQf8BcUGfAUG/ASAEQe0BRhtLIQILIAILKgBBASEAAkAgAS0AAEHCAUkNACABLAABIgFBAE4NACABQb9/SyEACyAACw0AIAAgAUHAgAgQlQoLDQAgACABQcCACBCWCgsNACAAIAFBwIIIEJUKCw0AIAAgAUHAgggQlgoL5AIBBX8gAEHIAGohByABKAIAIQAgAygCACEFAn8CQANAIAQgBU0gACACT3JFBEACQAJAAkACQCAHIAAtAAAiBmotAABBBWsOAwABAgMLIAIgAGtBAkgNBSAFIAAtAAFBP3EgBkEfcUEGdHI7AQAgAEECaiEAIAVBAmohBQwECyACIABrQQNIDQQgBSAALQACQT9xIAAtAAFBP3FBBnQgBkEMdHJyOwEAIABBA2ohACAFQQJqIQUMAwtBAiAEIAVrQQNIDQQaIAIgAGtBBEgNAyAALQABIQggBSAALQACQT9xQQZ0IgkgAC0AA0E/cXJBgLgDcjsBAiAFIAZBB3FBEnQgCEE/cUEMdHIgCXJBgID8B2pBCnZBgLADcjsBACAAQQRqIQAgBUEEaiEFDAILIAUgBsA7AQAgBUECaiEFIABBAWohAAwBCwsgACACSUEBdAwBC0EBCyABIAA2AgAgAyAFNgIAC60CAQd/IwBBEGsiACQAIAAgAjYCDCACIAEoAgAiBmsiCiAEIAMoAgAiC2siCUoEQCAAIAYgCWoiAjYCDAsgBiEEIAAoAgwhBgNAAkACQAJAAkAgBiIFIARNDQACQCAFQQFrIgYtAAAiCEH4AXFB8AFGBEAgB0EDa0F7TQ0BDAMLIAhB8AFxQeABRgRAIAdBAmtBfEsNAyAFQQJqIQUMAgsgCEHgAXFBwAFGBEAgB0EBa0F9Sw0DIAVBAWohBQwCCyAIwEEATg0BDAMLIAVBA2ohBQsgACAFNgIMDAILQQAhBwsgB0EBaiEHDAELCyALIAQgACgCDCIGIARrIgQQIBogASABKAIAIARqNgIAIAMgAygCACAEajYCACAAQRBqJABBAiACIAZLIAkgCkgbC1gBAX8CQANAIAEoAgAiACACTw0BIAQgAygCACIFSwRAIAEgAEEBajYCACAALQAAIQAgAyADKAIAIgVBAmo2AgAgBSAAOwEADAELCyAEIAVHDQBBAg8LQQALtAEBAn8DQCACIAEoAgAiBUYEQEEADwsgAygCACEAAkACQCAFLAAAIgZBAEgEQCAEIABrQQJIDQEgAyAAQQFqNgIAIAAgBkHAAXFBBnZBwAFyOgAAIAMgAygCACIAQQFqNgIAIAAgBkG/AXE6AAAgASABKAIAQQFqNgIADAMLIAAgBEcNAQtBAg8LIAEgBUEBajYCACAFLQAAIQAgAyADKAIAIgVBAWo2AgAgBSAAOgAADAALAAuaAQEFfyAAQcgAaiEGIAJBAWshB0EBIQICQANAIAcgAUEBaiIBa0EATA0BAkACQCAGIAEtAAAiAGotAABBCWsiBEEaSw0AQQEgBHQiCEHzj5c/cQ0CIADAIQUgCEGAwAhxRQRAIARBDEcNASAFQQlHDQMMAgsgBUEATg0CCyAAQSRGIABBwABGcg0BCwsgAyABNgIAQQAhAgsgAgvFAQACQAJAAkACQCACIAFrQQJrDgMAAQIDCyABLQABQfQARw0CQTxBPkEAIAEtAAAiAEHnAEYbIABB7ABGGw8LIAEtAABB4QBHDQEgAS0AAUHtAEcNASABLQACQfAARw0BQSYPCyABLQAAIgBB4QBHBEAgAEHxAEcNASABLQABQfUARw0BIAEtAAJB7wBHDQEgAS0AA0H0AEcNAUEiDwsgAS0AAUHwAEcNACABLQACQe8ARw0AIAEtAANB8wBHDQBBJw8LQQALgAIBAn8CQAJAIAEtAAIiAEH4AEcEQCABQQJqIQJBACEBA0AgAEH/AXFBO0YNAiAAwCABQQpsakEwayIBQf//wwBKDQMgAi0AASEAIAJBAWohAgwACwALIAFBA2ohAEEAIQEDQCAALQAAIgPAIQICQAJ/AkACQAJAIANBMGsONwAAAAAAAAAAAAAEBgQEBAQEAQEBAQEBBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAgICAgIECyACQTBrIAFBBHRyDAILIAFBBHQgAmpBN2sMAQsgAUEEdCACakHXAGsLIgFB///DAEoNAwsgAEEBaiEADAALAAsgARCTBA8LQX8LlQUBBn8gAEHIAGohCEEBIQADQCAAIQUgASIGQQFqIQECQAJAAkACQAJAAkACQAJAAkACQAJAIAggBi0AASIJai0AAEEDaw4bBgsAAQILCAgJBAULCwsJCwsLBwMLAwsLCwsDCwsCQCAFDQBBASEAIAIgBEwNACADIARBBHRqIgVBAToADCAFIAE2AgALIAZBAmohAQwKCwJAIAUNAEEBIQAgAiAETA0AIAMgBEEEdGoiBUEBOgAMIAUgATYCAAsgBkEDaiEBDAkLAkAgBQ0AQQEhACACIARMDQAgAyAEQQR0aiIFQQE6AAwgBSABNgIACyAGQQRqIQEMCAsgBQ0HQQEhACACIARMDQcgAyAEQQR0aiIFQQE6AAwgBSABNgIADAcLIAVBAkcEQEEMIQdBAiEAIAIgBEwNByADIARBBHRqIAZBAmo2AgQMBwtBAiEAIAdBDEcNBiACIARKBEAgAyAEQQR0aiABNgIICyAEQQFqIQRBDCEHQQAhAAwGCyAFQQJHBEBBDSEHQQIhACACIARMDQYgAyAEQQR0aiAGQQJqNgIEDAYLQQIhACAHQQ1HDQUgAiAESgRAIAMgBEEEdGogATYCCAsgBEEBaiEEQQ0hB0EAIQAMBQsgAiAETA0EIAMgBEEEdGpBADoADAwDC0EAIQACQCAFQQFrDgIEAAMLQQIhACACIARMDQMgAyAEQQR0aiIFLQAMRQ0DAkAgCUEgRw0AIAEgBSgCBEYNACAGLQACIgZBIEYNACAHIAYgCGotAABHDQQLIAVBADoADAwDC0EAIQACQCAFQQFrDgIDAAILQQIhACACIARMDQIgAyAEQQR0akEAOgAMDAILQQIhACAFQQJGDQEgBA8LIAUhAAwACwALOwEBfyAAQcgAaiEAA0AgACABLQAAai0AACICQRVLQQEgAnRBgIyAAXFFckUEQCABQQFqIQEMAQsLIAELVAECfyAAQcgAaiEDIAEhAANAIAMgAC0AAGotAABBBWtB/wFxIgJBGU9Bh4D4CyACdkEBcUVyRQRAIAAgAkECdEGopQhqKAIAaiEADAELCyAAIAFrC0UBAX8CQANAIAMtAAAiBARAQQAhACACIAFrQQBMDQIgAS0AACAERw0CIANBAWohAyABQQFqIQEMAQsLIAEgAkYhAAsgAAueAgEEfyABIAJPBEBBfA8LIAIgAWtBAEwEQEF/DwsgAEHIAGohBiABIQQCQANAIAIgBGtBAEwNAUECIQUCQAJAAkACQAJAAkACQAJAAkAgBiAELQAAai0AACIHQQNrDggCBgcAAQYEAwULQQMhBQwGC0EEIQUMBQsgASAERw0HIAAgAUEBaiACIAMQ8wQPCyABIARHDQYgAyABQQFqNgIAQQcPCyABIARHDQUgAiABQQFqIgBrQQBMBEBBfQ8LIAMgAUECaiAAIAYgAS0AAWotAABBCkYbNgIAQQcPCyAHQR5GDQILQQEhBQsgBCAFaiEEDAELCyABIARHDQAgACABQQFqIAIgAxDFCSIAQQAgAEEWRxsPCyADIAQ2AgBBBgufAgEDfyABIAJPBEBBfA8LIAIgAWtBAEwEQEF/DwsgAEHIAGohBiABIQQDQAJAIAIgBGtBAEwNAEECIQUCQAJAAkACQAJAAkACQAJAAkAgBiAELQAAai0AAEECaw4UAwIHCAABBwUEBwcHBwcHBwcHBwYHC0EDIQUMBwtBBCEFDAYLIAEgBEcNBiAAIAFBAWogAiADEPMEDwsgAyAENgIAQQAPCyABIARHDQQgAyABQQFqNgIAQQcPCyABIARHDQMgAiABQQFqIgBrQQBMBEBBfQ8LIAMgAUECaiAAIAYgAS0AAWotAABBCkYbNgIAQQcPCyABIARHDQIgAyABQQFqNgIAQScPC0EBIQULIAQgBWohBAwBCwsgAyAENgIAQQYL2QIBBH8gAEHIAGohBwJAA0AgAiABIgRrIgFBAEwNAQJAAkACQAJAAkACQAJAAkACQCAHIAQtAABqLQAADgkFBQMHBAABAgUHCyABQQFGDQcgACAEIAAoAuACEQAADQQgBEECaiEBDAgLIAFBA0kNBiAAIAQgACgC5AIRAAANAyAEQQNqIQEMBwsgAUEESQ0FIAAgBCAAKALoAhEAAA0CIARBBGohAQwGCyACIARBAWoiAWtBAEwNBiABLQAAQSFHDQUgAiAEQQJqIgFrQQBMDQYgAS0AAEHbAEcNBSAEQQNqIQEgBUEBaiEFDAULIAIgBEEBaiIBa0EATA0FIAEtAABB3QBHDQQgAiAEQQJqIgFrQQBMDQUgAS0AAEE+Rw0EIARBA2ohASAFDQFBKiEGIAEhBAsgAyAENgIAIAYPCyAFQQFrIQUMAgsgBEEBaiEBDAELC0F+DwtBfwvhAwEEfyABIAJPBEBBfA8LAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkAgAEHIAGoiByABLQAAai0AAA4LCgoGBgADBAUKAQIGC0F/IQUgAiABQQFqIgRrQQBMDQogBC0AAEHdAEcNBiACIAFBAmprQQBMDQogAS0AAkE+Rw0GIAFBA2ohAUEoIQUMCQsgAiABQQFqIgBrQQBKDQZBfw8LIAFBAWoMBgsgAiABa0ECSA0IIAAgASAAKALgAhEAAA0GIAFBAmohBAwDCyACIAFrQQNIDQcgACABIAAoAuQCEQAADQUgAUEDaiEEDAILIAIgAWtBBEgNBiAAIAEgACgC6AIRAAANBCABQQRqIQQMAQsgAUEBaiEECyAEIQEDQEEGIQUgAiABayIGQQBMDQNBASEEAkACQAJAAkAgByABLQAAai0AAA4LBwcDAwcAAQIHBwcDCyAGQQFGDQYgACABIAAoAuACEQAADQZBAiEEDAILIAZBA0kNBSAAIAEgACgC5AIRAAANBUEDIQQMAQsgBkEESQ0EIAAgASAAKALoAhEAAA0EQQQhBAsgASAEaiEBDAALAAsgAUECaiAAIAcgAS0AAWotAABBCkYbCyEBQQchBQsgAyABNgIACyAFDwtBfguOHAEHfyMAQRBrIgkkAAJAIAEgAk8EQEF8IQYMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQcgAaiIIIAEtAABqLQAADgsFBQALBwQDAgUKCQELQQEhB0F/IQYgAiABQQFqIgRrIgVBAEwNEQJAAkACQAJAIAggBC0AAGotAABBBWsOFAABAhQUFBQUFBQQAw8UFBQUEhQSFAsgBUEBRg0SIAAgBCAAKALgAhEAAA0TIAAgBCAAKALUAhEAAEUNE0ECIQcMEQsgBUEDSQ0RIAAgBCAAKALkAhEAAA0SIAAgBCAAKALYAhEAAEUNEkEDIQcMEAsgBUEESQ0QIAAgBCAAKALoAhEAAA0RIAAgBCAAKALcAhEAAEUNEUEEIQcMDwsgAiABQQJqIgRrQQBMDRIgCCABLQACai0AACIGQRRHBEAgBkEbRw0OIAAgAUEDaiACIAMQxwkhBgwTC0F/IQYgAiABQQNqIgBrQQZIDRIgAUEJaiECQQAhAQNAAkAgAUEGRgR/QQgFIAAtAAAgAUHgkAhqLQAARg0BIAAhAkEACyEGIAMgAjYCAAwUCyAAQQFqIQAgAUEBaiEBDAALAAsgAUEBaiEEDAYLIAIgAWtBBEgNDSAAIAEgACgC6AIRAAANAiABQQRqIQQMBQsgAiABa0EDSA0MIAAgASAAKALkAhEAAA0BIAFBA2ohBAwECyACIAFrQQJIDQsgACABIAAoAuACEQAARQ0BCyADIAE2AgAMDQsgAUECaiEEDAELQXshBiACIAFBAWoiBGtBAEwNCyAELQAAQd0ARw0AIAIgAUECaiIHa0EATA0LIAEtAAJBPkcNACADIAc2AgBBACEGDAsLA0ACQCACIAQiAWsiBkEATA0AAkACQAJAAkACQCAIIAEtAABqLQAADgsFBQUFAwABAgUFBQQLIAZBAUYNBCAAIAEgACgC4AIRAAANBCABQQJqIQQMBQsgBkEDSQ0DIAAgASAAKALkAhEAAA0DIAFBA2ohBAwECyAGQQRJDQIgACABIAAoAugCEQAADQIgAUEEaiEEDAMLIAZBAUYNASABQQFqIQQgAS0AAUHdAEcNAiAGQQNJDQEgAS0AAkE+Rw0CIAMgAUECajYCAEEAIQYMDQsgAUEBaiEEDAELCyADIAE2AgBBBiEGDAoLIAMgAUEBajYCAEEHIQYMCQsgAiABQQFqIgBrQQBMBEBBfSEGDAkLIAMgAUECaiAAIAggAS0AAWotAABBCkYbNgIAQQchBgwICyAAIAFBAWogAiADEPMEIQYMBwtBASEEIAIgAUECaiIBayIHQQBMDQVBACEGAkACQAJAAkACQAJAIAggAS0AAGotAAAiBUEFaw4DAQIDAAsgBUEWaw4DAwQDBAsgB0EBRg0HIAAgASAAKALgAhEAAA0DIAAgASAAKALUAhEAAEUNA0ECIQQMAgsgB0EDSQ0GIAAgASAAKALkAhEAAA0CIAAgASAAKALYAhEAAEUNAkEDIQQMAQsgB0EESQ0FIAAgASAAKALoAhEAAA0BIAAgASAAKALcAhEAAEUNAUEEIQQLIAEgBGohAQNAIAIgAWsiB0EATA0HQQEhBAJAAn8CQAJAAkACQAJAAkAgCCABLQAAai0AAEEFaw4XAAECCQMDBAkJCQkJCQkJCQMHBwcHBwcJCyAHQQFGDQwgACABIAAoAuACEQAADQggACABIAAoAsgCEQAARQ0IQQIhBAwGCyAHQQNJDQsgACABIAAoAuQCEQAADQcgACABIAAoAswCEQAARQ0HQQMhBAwFCyAHQQRJDQogACABIAAoAugCEQAADQYgACABIAAoAtACEQAARQ0GQQQhBAwECwNAIAIgASIAQQFqIgFrQQBMDQwCQCAIIAEtAABqLQAAIgRBCWsOAwEBAwALIARBFUYNAAsMBQsgAUEBagwBCyAAQQJqCyEBQQUhBgwCCyABIARqIQEMAAsACyADIAE2AgAMBgsgACABQQJqIAIgAxDGCSEGDAULIAMgBDYCAEEAIQYMBAsgBCAHaiEBQQAhBwNAIAIgAWsiBUEATA0EQQEhBAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAIIAEtAABqLQAAQQVrDhcAAQIHBAQFBwcHBwcGBwcHBAsDCwsLCwcLIAVBAUYNDCAAIAEgACgC4AIRAAANBiAAIAEgACgCyAIRAABFDQZBAiEEDAoLIAVBA0kNCyAAIAEgACgC5AIRAAANBSAAIAEgACgCzAIRAABFDQUMCAsgBUEESQ0KIAAgASAAKALoAhEAAA0EIAAgASAAKALQAhEAAEUNBAwGCyAHDQMgAiABQQFqIgVrIgRBAEwNDEEBIQcCQAJAAkACQCAIIAUtAABqLQAAIgpBBWsOAwECAwALQQIhBAJAIApBFmsOAwsICwALDAcLIARBAUYNCyAAIAUgACgC4AIRAAANBiAAIAUgACgC1AIRAAANCAwGCyAEQQNJDQogACAFIAAoAuQCEQAADQUgACAFIAAoAtgCEQAADQYMBQsgBEEESQ0JIAAgBSAAKALoAhEAAA0EIAAgBSAAKALcAhEAAEUNBEEFIQQMBwsCQAJAAkADQCACIAEiBEEBaiIBayIFQQBMDQ9BAiEHAkAgCCABLQAAai0AAEEFaw4UAAIDBwEBBQcHBwcHBgcHBwEEBwQHCwsgBUEBRg0LIAAgASAAKALgAhEAAA0FIAAgASAAKALUAhEAAEUNBUEDIQcMAgsgBUEDSQ0KIAAgASAAKALkAhEAAA0EIAAgASAAKALYAhEAAEUNBEEEIQcMAQsgBUEESQ0JIAAgASAAKALoAhEAAA0DIAAgASAAKALcAhEAAEUNA0EFIQcLIAQgB2ohBEEAIQUCQAJAA0AgCSAENgIMQX8hBiACIARrIgpBAEwNDkEAIQcCQAJAAkACQAJAAkACQAJAAkAgCCAEIgEtAABqLQAAQQVrDhcBAgMLBwcLCwsICwsLCwsLBwAEAAAAAAsLIARBAWohBAwICyAKQQFGDRIgACAEIAAoAuACEQAADQMgACAEIAAoAsgCEQAARQ0DIARBAmohBAwHCyAKQQNJDREgACAEIAAoAuQCEQAADQIgACAEIAAoAswCEQAARQ0CIARBA2ohBAwGCyAKQQRJDRAgACAEIAAoAugCEQAADQEgACAEIAAoAtACEQAARQ0BIARBBGohBAwFCyAFRQ0BCwwFCyAJIARBAWoiATYCDCACIAFrIgVBAEwNEAJAAkACQAJAIAggAS0AAGotAAAiBkEFaw4DAQIDAAsCQCAGQRZrDgMACAAICyAEQQJqIQRBASEFDAULIAVBAUYNDyAAIAEgACgC4AIRAAANBiAAIAEgACgC1AIRAABFDQYgBEEDaiEEQQEhBQwECyAFQQNJDQ4gACABIAAoAuQCEQAADQUgACABIAAoAtgCEQAARQ0FIARBBGohBEEBIQUMAwsgBUEESQ0NIAAgASAAKALoAhEAAA0EIAAgASAAKALcAhEAAEUNBCAEQQVqIQRBASEFDAILA0AgAiABQQFqIgFrQQBMDRACQAJAIAggAS0AAGotAAAiBEEJaw4GAgIGBgYBAAsgBEEVRg0BDAULCyAJIAE2AgwgASEECwNAIAIgBEEBaiIBa0EATA0PIAggAS0AAGotAAAiBUH+AXFBDEcEQCAFQRVLDQQgASEEQQEgBXRBgIyAAXENAQwECwsgBEECaiEBA0AgCSABNgIMAkACQANAIAIgAWsiBEEATA0SIAggAS0AAGotAAAiCiAFRg0CAkACQAJAAkAgCg4JCgoKAwUAAQIKBQsgBEEBRg0SIAAgASAAKALgAhEAAA0JIAFBAmohAQwGCyAEQQNJDREgACABIAAoAuQCEQAADQggAUEDaiEBDAULIARBBEkNECAAIAEgACgC6AIRAAANByABQQRqIQEMBAsgACABQQFqIAIgCUEMahDzBCIBQQBKBEAgCSgCDCEBDAELCyABIgYNESAJKAIMIQEMBQsgAUEBaiEBDAELCyAJIAFBAWoiBTYCDCACIAVrQQBMDQ4gASEEAkACQAJAIAggBSIBLQAAai0AACIFQQlrDgkBAQIFBQUFBQQACyAFQRVGDQAMBAsCQAJAAkADQCACIAEiBEEBaiIBayIFQQBMDRMCQCAIIAEtAABqLQAAQQVrDhQCAwQIAQEFCAgICAgHCAgIAQAIAAgLCyAEQQJqIQRBACEFDAQLIAVBAUYNDiAAIAEgACgC4AIRAAANBSAAIAEgACgC1AIRAABFDQUgBEEDaiEEQQAhBQwDCyAFQQNJDQ0gACABIAAoAuQCEQAADQQgACABIAAoAtgCEQAARQ0EIARBBGohBEEAIQUMAgsgBUEESQ0MIAAgASAAKALoAhEAAA0DIAAgASAAKALcAhEAAEUNAyAEQQVqIQRBACEFDAELCyAEQQJqIQFBASEHDAELIAkgAUEBaiIANgIMIAIgAGtBAEwNDCABQQJqIAAgAS0AAUE+RiIAGyEBQQNBACAAGyEHCyADIAE2AgAgByEGDAsLIAMgAUEBajYCAEECIQYMCgsgAiABQQFqIgBrQQBMDQkgAS0AAUE+RwRAIAMgADYCAEEAIQYMCgsgAyABQQJqNgIAQQQhBgwJCyADIAE2AgBBACEGDAgLIAMgBTYCAEEAIQYMBwtBBCEEDAELQQMhBAsgASAEaiEBDAALAAtBfiEGDAILIAMgBDYCAEEAIQYMAQtBfyEGCyAJQRBqJAAgBgsCAAuhEQEFfyABIAJPBEBBfA8LQQEhBEESIQUCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABByABqIgcgAS0AAGotAABBAmsOIwIXCA4PEBcDBAwAARcXFxcXDQcEFRMVExMTFxcFCQoXFwYLFwtBDCAAIAFBAWogAiADEMgJDwtBDSAAIAFBAWogAiADEMgJDwtBfyEFIAIgAUEBaiIGa0EATA0TAkACQAJAAkACQCAHIAEtAAFqLQAAIgRBD2sOCgMCBAQEBAQBBAEACyAEQQVrQQNJDQAgBEEdRw0DCyADIAE2AgBBHQ8LIAIgAUECaiIEa0EATA0VAkACQAJAAkAgByAELQAAai0AAEEUaw4IAQMCAwIDAwADCyAAIAFBA2ogAiADEMcJDwsgAyABQQNqNgIAQSEPCwJAA0AgAiAEIgBBAWoiBGsiAUEATA0YAkAgByAELQAAai0AACIGQRVrDgoeAQMBAwMDAwMAAgsLIAFBAUYNFyAHIAAtAAJqLQAAIgBBHksNHEEBIAB0QYCMgIEEcQ0BDBwLIAZBCWtBAkkNGwsgAyAENgIADBsLIAAgAUECaiACIAMQxgkPCyADIAY2AgAMGQsgAUEBaiACRw0AIAMgAjYCAEFxDwsDQAJAIAIgASIAQQFqIgFrQQBMDQACQAJAIAcgAS0AAGotAAAiBEEJaw4CAQMACyAEQRVGDQIMAQsgAEECaiACRw0BCwsgAyABNgIAQQ8PCyAAIAFBAWogAiADEMUJDwsgAyABQQFqNgIAQSYPCyADIAFBAWo2AgBBGQ8LIAIgAUEBaiIAayICQQBMBEBBZg8LAkAgAS0AAUHdAEcNACACQQFGDRIgAS0AAkE+Rw0AIAMgAUEDajYCAEEiDwsgAyAANgIAQRoPCyADIAFBAWo2AgBBFw8LIAIgAUEBaiIAa0EATARAQWgPCwJAAkACQAJAAkACQCAHIAEtAAFqLQAAIgJBIGsOBRQBAxQUAAsgAkEJaw4HExMTBAQEAQMLIAMgAUECajYCAEEkDwsgAyABQQJqNgIAQSMPCyADIAFBAmo2AgBBJQ8LIAJBFUYNDwsgAyAANgIADBELIAMgAUEBajYCAEEVDwsgAyABQQFqNgIAQREPCyACIAFBAWoiAWsiBkEATA0MQQAhBQJAAkACQAJAAkACQCAHIAEtAABqLQAAIghBBWsOAwECAwALIAhBFmsOAwMEAwQLIAZBAUYNDiAAIAEgACgC4AIRAAANAyAAIAEgACgC1AIRAABFDQNBAiEEDAILIAZBA0kNDSAAIAEgACgC5AIRAAANAiAAIAEgACgC2AIRAABFDQJBAyEEDAELIAZBBEkNDCAAIAEgACgC6AIRAAANASAAIAEgACgC3AIRAABFDQFBBCEECyABIARqIQEDQCACIAFrIgZBAEwEQEFsDwtBASEEQRQhBQJAAkACQAJAAkAgByABLQAAai0AAEEFaw4gAAECBAYGBgQEBAQEBAQEBAYDBAMDAwMEBAYEBgQEBAYECyAGQQFGDRAgACABIAAoAuACEQAADQMgACABIAAoAsgCEQAARQ0DQQIhBAwCCyAGQQNJDQ8gACABIAAoAuQCEQAADQIgACABIAAoAswCEQAARQ0CQQMhBAwBCyAGQQRJDQ4gACABIAAoAugCEQAADQEgACABIAAoAtACEQAARQ0BQQQhBAsgASAEaiEBDAELC0EAIQULIAMgATYCACAFDwsgAiABa0ECSA0JIAAgASAAKALgAhEAAA0IQQIhBCAAIAEgACgC1AIRAAANAiAAIAEgACgCyAIRAABFDQgMBQsgAiABa0EDSA0IIAAgASAAKALkAhEAAA0HQQMhBCAAIAEgACgC2AIRAAANASAAIAEgACgCzAIRAABFDQcMBAsgAiABa0EESA0HIAAgASAAKALoAhEAAA0GQQQhBCAAIAEgACgC3AIRAABFDQELDAMLIAAgASAAKALQAhEAAEUNBAwBC0ETIQUMAQtBEyEFCyABIARqIQQCQAJAAkACQANAIAIgBCIBayIEQQBMDQQCQAJAAkACQAJAAkACQCAHIAEtAABqLQAAQQVrDiABAgMKBAQECgoKCQoKCgoEBAAFAAAAAAoKBAoECAYEBAoLIAFBAWohBAwGCyAEQQFGDQwgACABIAAoAuACEQAADQggACABIAAoAsgCEQAARQ0IIAFBAmohBAwFCyAEQQNJDQsgACABIAAoAuQCEQAADQcgACABIAAoAswCEQAARQ0HIAFBA2ohBAwECyAEQQRJDQogACABIAAoAugCEQAADQYgACABIAAoAtACEQAARQ0GIAFBBGohBAwDCyADIAE2AgAgBQ8LIAFBAWohBCAFQSlHBEAgBUESRw0CIAIgBGsiBkEATA0LQRMhBQJAAkACQAJAAkACQAJAIAcgBC0AAGotAAAi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QQA2AggDQAJAIABBvAJqIABBuAJqEFoNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABBvAJqIgIQgQFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDYAw0AIAIQlAEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABBvAJqIABBuAJqEFoEQCAEIAQoAgBBAnI2AgALIAAoArwCIAMQNBogBhA0GiAAQcACaiQAC9ADAQF+IwBBgANrIgAkACAAIAI2AvgCIAAgATYC/AIgAEHcAWogAyAAQfABaiAAQewBaiAAQegBahCEByAAQdABahBUIgEgARBVEEAgACABQQAQQiICNgLMASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQfwCaiAAQfgCahBaDQAgACgCzAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AswBCyAAQfwCaiIDEIEBIABBF2ogAEEWaiACIABBzAFqIAAoAuwBIAAoAugBIABB3AFqIABBIGogAEEcaiAAQRhqIABB8AFqEIMHDQAgAxCUARoMAQsLAkAgAEHcAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB3AFqIABBIGogACgCHCAEELEBIABB/AJqIABB+AJqEFoEQCAEIAQoAgBBAnI2AgALIAAoAvwCIAEQNBogAEHcAWoQNBogAEGAA2okAAu5AwAjAEHwAmsiACQAIAAgAjYC6AIgACABNgLsAiAAQcwBaiADIABB4AFqIABB3AFqIABB2AFqEIQHIABBwAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB7AJqIABB6AJqEFoNACAAKAK8ASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQ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QQA2AggDQAJAIABB/AFqIABB+AFqEFsNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABB/AFqIgIQggFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDaAw0AIAIQlQEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABB/AFqIABB+AFqEFsEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAMQNBogBhA0GiAAQYACaiQAC9ADAQF+IwBBkAJrIgAkACAAIAI2AogCIAAgATYCjAIgAEHQAWogAyAAQeABaiAAQd8BaiAAQd4BahCIByAAQcQBahBUIgEgARBVEEAgACABQQAQQiICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQYwCaiAAQYgCahBbDQAgACgCwAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AsABCyAAQYwCaiIDEIIBIABBF2ogAEEWaiACIABBwAFqIAAsAN8BIAAsAN4BIABB0AFqIABBIGogAEEcaiAAQRhqIABB4AFqEIcHDQAgAxCVARoMAQsLAkAgAEHQAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALAASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB0AFqIABBIGogACgCHCAEELEBIABBjAJqIABBiAJqEFsEQCAEIAQoAgBBAnI2AgALIAAoAowCIAEQNBogAEHQAWoQNBogAEGQAmokAAu5AwAjAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEIgHIABBtAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArABIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB/AFqIABB+AFqEFsNACAAKAKwASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQ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sAEgBEG+ogQgAkGwAWoQMiACIAEoAhA2AqABIARB+b4EIAJBoAFqEB8aIAIgASgCFDYClAEgAkEtNgKQASAEQeW/BCACQZABahAfGiACIAEoAhg2AoABIAJC/NPGl93JmKg/NwN4IAJCs+bMmbPmzPE/NwNwIARBkr8EIAJB8ABqEDIgASsDICEIIAIgBkEBdkEBcTYCYCACIAg5A1ggAkLNmbPmzJmz9j83A1AgBEGqwQQgAkHQAGoQMiACIAErA0g5A0ggAkEANgJEIAIgBkECdkEBcTYCQCAEQeyhBCACQUBrEDIgASgCMCEGIAEoAjQhByABKwNAIQggAiABLQA4NgIwIAIgCDkDKCACIAc2AiQgAiAGQQJ0QeDICGooAgA2AiAgBEHpwAQgAkEgahAyIAIgASgCPEECdEGAyQhqKAIANgIQIARB3PcDIAJBEGoQHxogAiABKAJQNgIAIARBt8IEIAIQHxogAkHgAWokAAsgACADQawBahCCCCEEAkAgAygCrAFBAUYEQCADIAMpA5ACNwMQIAMgAykDiAI3AwggACADQbABaiADQQhqEI8MIAVFBEAgACADQZgCahDxAxoLIAAQrAMMAQsgAEECQQggA0GIAWoQ+gMaIANBAToAlAFBACECA0AgAygCrAEiASACTQRAIAEgBCAAIANBiAFqEOsFDAILIAQgAkECdGooAgAiAUEAELIDGiADIAMpA5ACNwMgIAMgAykDiAI3AxggASADQbABaiADQRhqEI8MIAVFBEAgASADQZgCahDxAxoLIAFBAhCJAiABEKwDIAJBAWohAgwACwALQQAhAQNAIAMoAqwBIAFLBEAgACAEIAFBAnRqKAIAELcBIAFBAWohAQwBCwsgBBAYCyAAELgDIANBsAJqJAALCQAgASACEOEBC0MBAnwCf0EBIAArAwgiAiABKwMIIgNkDQAaQX8gAiADYw0AGkEBIAArAxAiAiABKwMQIgNkDQAaQX9BACACIANjGwsLyRQCEH8IfCMAQUBqIgkkAEGg2AorAwAhFkGg2AogABD/CTkDACAAQQIQiQJBOBBSIQEgACgCECABNgKMASAAIABBAEH77ABBABAiQQJBAhBhIQEgABA5KAIQIAE7AbABQQohASAAEDkoAhAvAbABQQlNBEAgABA5KAIQLwGwASEBCyAAEDkoAhAg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CS0AhgFBAUcEQCACIQkgBiECDAELIAMgAigCECgCjAEoAjAiCTYCmAELAkAgCC0AhgFBAUcEQCAFIQggBCEFDAELIAMgBSgCECgCjAEoAjAiCDYCzAELAkAgCSgCECgCjAEoAiwiBiAIKAIQKAKMASgCLCIESgRAIANBsAFqIAYgAiAEIANBmAFqIAEQqAwgAygCmAEiAigCECgCjAEoAjAhCQwBCyAEIAZMDQAgA0GwAWogBCAFIAYgA0HMAWogARCoDCADKALMASIFKAIQKAKMASgCMCEICwNAIAkiBCAIIgZGRQRAIANBsAFqIgggBEEAIAIgARDIBSAIIAYgBUEAIAEQyAUgBigCECgCjAEoAjAhCCAEKAIQKAKMASgCMCEJIAQhAiAGIQUMAQsLIANBsAFqIgQgBiAFIAIgARDIBSADKAK4AUEATgRAIARBBBCMAiADIAMpA7gBNwOQASADIAMpA7ABNwOIAQJAIAMoArABIANBiAFqQQAQGUECdGogAygCuAEQzAwEQCADIAMpA7gBNwOAASADIAMpA7ABNwN4IAchAiADKAKwASADQfgAakEAEBlBAnRqIAMoArgBEM8MIgsNAUEAIQtBsOkDQQAQKkEAIQIDQCACIAMoArgBTw0FIAMgAykDuAE3A1AgAyADKQOwATcDSCADQcgAaiACEBkhBAJAAkACQCADKALAASIFDgICAAELIAMoArABIARBAnRqKAIAEBgMAQsgAygCsAEgBEECdGooAgAgBREBAAsgAkEBaiECDAALAAsCQCAMDQAgA0GYAWogABD+AiAAQQhBCBDqBSECQdLqA0EAECogASsDACINIAK3Ig5mIA4gASsDCCIPZXIEQCADQUBrIA85AwAgAyANOQM4IAMgAjYCMEHx7QQgA0EwahB/DAELIAMrA5gBIg4gDWUgAysDoAEiECAPZXJFDQAgAyAPOQMoIAMgDTkDICADIBA5AxggAyAOOQMQQaPuBCADQRBqEH8LQQAhAgNAIAIgAygCuAFPDQQgAyADKQO4ATcDCCADIAMpA7ABNwMAIAMgAhAZIQQCQAJAAkAgAygCwAEiBQ4CAgABCyADKAKwASAEQQJ0aigCABAYDAELIAMoArABIARBAnRqKAIAIAURAQALIAJBAWohAgwACwALA0AgAkUEQEEAIQIDQCACIAMoArgB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AxABAAsgASgCCCgCICIDLQAoDQEgAxCjDQwBCwsCQCAFQQRqIgIoAghFDQAgAigCBCIAKAIAIgEgAigCACgCBCIDNgIEIAMgATYCACACQQA2AggDQCAAIAJGDQEgACgCBCAAEBghAAwACwALIAVBEGokAAu6AQICfwJ8RP///////+//IQQCfET////////v/yABKAIAKAIgIgIoAiwgASgCGEoNABpE////////7/8gAiABKAIEKAIgRg0AGiABELYCCyEFAkAgACgCACgCICICKAIsIAAoAhhKDQAgAiAAKAIEKAIgRg0AIAAQtgIhBAsgBCAFYQRAIAEoAgAoAgAiAiAAKAIAKAIAIgNGBEAgASgCBCgCACAAKAIEKAIASA8LIAIgA0gPCyAEIAVkCzMAIAAQng0gACABKAIANgIAIAAgASgCBDYCBCAAIAEoAgg2AgggAUEANgIIIAFCADcCAAvKAQEHfyMAQRBrIgUkACAAQQA2AgggAEIANwIAQShBNCACGyEHIAEoAgQhCCABKAIAIQQDQCAEIAhHBEAgBCgCACAHaiIDKAIEIQkgAygCACEDA0AgAyAJRgRAIARBBGohBAwDBSAFIAMoAgAiBjYCDCAGQej7CigCADYCGAJAAkAgAgRAIAYoAgAoAiAgAUcNAQsgAg0BIAYoAgQoAiAgAUYNAQsgACAFQQxqEL8BCyADQQRqIQMMAQsACwALCyAAEK4NIAVBEGokAAs+AQJ8An9BfyAAKwMAIgIgASsDACIDYw0AGkEBIAIgA2QNABpBfyAAKwMIIgIgASsDCCIDYw0AGiACIANkCwscACAAKAIMIAEoAgxqIAAoAgQgASgCBGprQQJtCxwAIAAoAgggASgCCGogACgCACABKAIAamtBAm0LjAEBB38CQCAAKAIgIgMgASgCKCIESg0AIAEoAiAiBSAAKAIoIgZKDQBBASECIAAoAiwiByABKAIkIghIDQAgACgCECABKAIQayAHIAEoAixqIAAoAiQgCGprQQJtaiAGIAMgBWprIARqQQJtIAEoAgwiASAAKAIMIgBrIAAgAWsgACABShtqTCECCyACC4wBAQd/AkAgACgCJCIDIAEoAiwiBEoNACABKAIkIgUgACgCLCIGSg0AQQEhAiAAKAIoIgcgASgCICIISA0AIAAoAgwgASgCDGsgASgC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AAAAAADQP6I5A4gCIAMgBTkDgAIgBEG50AQgA0GAAmoQcyADIAAoAugCsrs5A/ABIANCADcD6AEgA0KAgICAgICgq8AANwPgASAEQZXQBCADQeABahBzIANB1PkKKAIANgLQASADIAYgByANoKIiBjkDwAEgAyAKIAsgDKCiIgc5A8gBIARBtNEEIANBwAFqEHMgAyABNgKwASAEQc7LAyADQbABahBzIAAgBBCABhAbGiABEBggAgRAIANBiAFqIgEgACgCEEE4akEoECAaIAFDAAAAABC8AyEBIANCADcDgAEgA0IANwN4IANCADcDcCAAQcHaBCADQfAAahAeIANCgICAgICAgPg/NwNgIAMgCDkDWCADIAU5A1AgAEG50AQgA0HQAGoQHiADQUBrIAAoAugCsrs5AwAgA0IANwM4IANCADcDMCAAQZXQBCADQTBqEB4gA0HU+QooAgA2AiAgAyAGOQMQIAMgBzkDGCAAQbTRBCADQRBqEB4gAyABNgIAIABBzssDIAMQHiABEBgLIANB4AJqEFwgA0HwAmokAAvoAwIDfwZ8IwBB0AFrIgMkACACKAIAIQQgAigCBCIFKwMQIQYgAyAFKAIANgKwASADIAY5A6gBIAMgBDYCoAEgAEGd+wMgA0GgAWoQHkHU+QpB0PkKKAIAQQlrNgIAAnwgASsDACIGIAItADAiBEHsAEYNABogBEHyAEYEQCAGIAIrAyChDAELIAYgAisDIEQAAAAAAADgv6KgCyEGIAArA/ADIQcgACsDgAQhCCABKwMIIQkgACsD6AMhCiAAKwP4AyELIANB+ABqIgEgACgCEEEQakEoECAaIAFDAAAAABC8AyEBIANCADcDyAEgA0IANwPAASACKAIEKAIAIQQgAigCACEFIANCADcDcCADQoCAgICAgIDoPzcDaCADIAU2AmQgAyAENgJgIANBwAFqIgRBpdkDIANB4ABqEHMgAyACKAIEKwMQIAArA+gDojkDUCAEQfqiBCADQdAAahBzIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIARBldAEIANBMGoQcyADQdT5CigCADYCICADIAogBiALoKI5AxAgAyAHIAkgCKCiOQMYIARBtNEEIANBEGoQcyADIAE2AgAgBEHOywMgAxBzIAAgBBCABhAbGiAEEFwgARAYIANB0AFqJAALHAAgAEGXrwQQGxpB0PkKQdD5CigCAEEFajYCAAscACAAQYWvBBAbGkHQ+QpB0PkKKAIAQQVrNgIACwsAIABBsLEEEBsaCy0BAX8jAEEQayIBJAAgASAAKAIQKAIIECE2AgAgAEGq/gMgARAeIAFBEGokAAsLACAAQYGFBBAbGgscACAAQeyEBBAbGkHQ+QpB0PkKKAIAQQJrNgIAC6YCAgd/AX4jAEEwayIEJAAgBEEMakEAQSQQNhogBCABNgIcIAAgARBuIQIDQCACBEAgACACIAEQciAAIAJBABDKCCECDAELCyABKQMIIQpBACEBQQAhAwJAIAAoAjAiAgRAIAqnIQUgAigCACIGBEBBASACKAIIdCEDCyADQQFrIQcDQCABIANGDQICQAJAIAYgASAFaiAHcUECdGoiCCgCACIJQQFqDgIBBAALIAkoAhApAwggClINACACKAIEIgEEQCAIQX82AgAgAiABQQFrNgIEDAQLQcuVA0GrvQFBmARBmokBEAAACyABQQFqIQEMAAsAC0GR1AFBq70BQYUEQZqJARAAAAsgACgCLCIAIARBDGpBAiAAKAIAEQMAGiAEQTBqJAALCwAgAEHmsAQQGxoLCwAgAEHUsAQQGxoLCwAgAEH5gwQQGxoLPwEBfyMAQRBrIgQkACAEIAM2AgggBCABNgIAIAQgAjYCBCAAQbe+BCAEEB5B0PkKIAJBdmw2AgAgBEEQaiQACwsAIABB2JEEEBsaC4UCAgF/BHwjAEFAaiIBJAAgASAAKAIQKAIIECE2AjAgAEHL9AMgAUEwahAeIAArA+gDIQMgACsD8AIhAiABIAArA/gCRAAAAAAAAOA/oiAAKwPwA6IiBDkDGCABIAMgAkQAAAAAAADgP6KiIgM5AxAgBEQAAAAAAEB/QKMQwAUhAiABIANEAAAAAABAf0CjEMAFRAAAAAAAgGZAokQYLURU+yEJQKMiBSAFoCACRAAAAAAAgGZAokQYLURU+yEJQKMiAiACoBAjRDMzMzMzM/M/ojkDICABIAQ5AwggASADOQMAIABBj9QDIAEQHiAAQdHNAxAbGiAAQczMAxAbGiABQUBrJAALcwEBfyMAQSBrIgEkACAAQbPVBBAbGiAAQfzMAxAbGiAAQYXMAxAbGiAAQaj7BBAbGiABQZ71ADYCFCABQZj1ADYCECAAQajTBCABQRBqEB4gAUHJkQE2AgQgAUHDkQE2AgAgAEGo0wQgARAeIAFBIGokAAsuAQF/IwBBEGsiAiQAIAIgATYCBCACQZ3CCDYCACAAQfXvAyACEB4gAkEQaiQACw0AIAAgASACQQAQjQ8LowICBn8CfCMAQfAAayIEJAAgBCABKwMAIgs5A2AgASsDCCEKIAQgCzkDECAEIAo5A2ggBCAKOQMYIABBmaMDIARBEGoQHkEAIQMDQCADQQNqIgcgAk9FBEAgBCAEKQNgNwMwIAQgBCkDaDcDOCABIANBBHRqIQhBASEDQQEhBQNAIAVBBEZFBEAgBUEEdCIGIARBMGpqIgkgBiAIaiIGKwMAOQMAIAkgBisDCDkDCCAFQQFqIQUMAQsLA0AgA0EHRkUEQCAEQSBqIARBMGogA7hEAAAAAAAAGECjQQBBABChASAEIAQrAyA5AwAgBCAEKwMoOQMIIABBrqMDIAQQHiADQQFqIQMMAQsLIAchAwwBCwsgAEGSgAUQGxogBEHwAGokAAsNACAAIAEgAkEBEI0PC54BAgF/BHwjAEEwayIDJAAgASsDECEGIAErAxghBSABKwMAIQQgAyABKwMIIgdEAAAAAAAAUkCjOQMgIAMgBEQAAAAAAABSQKM5AxggAyAFIAehIgUgBaBEAAAAAAAAUkCjOQMQIANBlMYDQZWABSACGzYCACADIAYgBKEiBCAEoEQAAAAAAABSQKM5AwggAEHC1QQgAxAeIANBMGokAAuHBAIFfwZ8IwBBQGoiAyQAIAIrAyAhCQJ8AkAgAi0AMCIEQfIARwRAIARB7ABHDQEgASsDAAwCCyABKwMAIAmhDAELIAErAwAgCUQAAAAAAADgv6KgCyELIAErAwghDCACKAIEIgErAxAiCiEIAkAgASgCACIERQ0AQcD5CigCACIBBEAgASAEEExFDQELIAQQPyEFA0BBACEBAkACQCADAn8CQANAIAFBIUYNASABQQN0IgdBxMIIaigCACIGRQ0DIAFBAWohASAEIAYgBSAGED8iBiAFIAZJGxDpASAFIAZHcg0ACyAHQcDCCGoMAQsgAyAENgI4IAMgBTYCNCADQaDCCDYCMEHQ3gMgA0EwahA3IARBLSAFEOILIgENAkGY0AELNgIgIABBie4DIANBIGoQHkHA+QogAigCBCIBKAIANgIAIAErAxAhCAwDC0GA1QFBhvsAQeUAQY88EAAACyABIARrIQUMAAsAC0HI+QorAwAhDSAIRAAAAAAAAPA/ECMiCCANoZlEAAAAAAAA4D9kBEAgAyAIOQMQIANBuPkKKwMAOQMYIABB1toDIANBEGoQHkHI+QogCDkDAAsgAEEiEGUgACACKAIAEMYKIAMgDCAKRAAAAAAAAGtAo6A5AwggAyALIAlEAAAAAAAAYkCjoDkDACAAQfXVBCADEB4gA0FAayQACwwAIABBq80EQQAQHgvoCwMGfwl8An4jAEHgA2siASQAIAAoAtQDIQIgACgC0AMhAyAAKALMAyEEIAAoAsgDIQUCQEGw+QotAAANACAAKALoAiIGRSAGQdoARnINACABQZTjADYC1AMgAUGgwgg2AtADQaq0BCABQdADahAqQbD5CkEBOgAACyABIAO3IAW3oUQAAAAAAABSQKMiByACtyAEt6FEAAAAAAAAUkCjIgkgACgC6AJB2gBGIgIbIg05A8gDIAEgCSAHIAIbIgk5A8ADIABBuaEEIAFBwANqEB4gAUGdwgg2ArADIABBsYEEIAFBsANqEB5BuPkKRAAAAAAAACRAIAlEAAAAAAAAAABkBHwCfwJ8AkACfwJAIAkiB70iEEL/////////B1cEQEQAAAAAAADwvyAHIAeioyAHRAAAAAAAAAAAYQ0EGiAQQgBZDQEgByAHoUQAAAAAAAAAAKMMBAsgEEL/////////9/8AVg0CQYF4IQIgEEIgiCIRQoCAwP8DUgRAIBGnDAILQYCAwP8DIBCnDQEaRAAAAAAAAAAADAMLQct3IQIgB0QAAAAAAABQQ6K9IhBCIIinC0HiviVqIgNBFHYgAmq3Ig5EAGCfUBNE0z+iIgggEEL/////D4MgA0H//z9xQZ7Bmv8Daq1CIIaEv0QAAAAAAADwv6AiByAHIAdEAAAAAAAA4D+ioiILob1CgICAgHCDvyIMRAAAIBV7y9s/oiIKoCIPIAogCCAPoaAgByAHRAAAAAAAAABAoKMiCCALIAggCKIiCiAKoiIIIAggCESfxnjQCZrDP6JEr3iOHcVxzD+gokQE+peZmZnZP6CiIAogCCAIIAhERFI+3xLxwj+iRN4Dy5ZkRsc/oKJEWZMilCRJ0j+gokSTVVVVVVXlP6CioKCiIAcgDKEgC6GgIgdEAAAgFXvL2z+iIA5ENivxEfP+WT2iIAcgDKBE1a2ayjiUuz2ioKCgoCEHCyAHCyIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAshAiAHRAAAAAAAAAhAIAK3oaAFRAAAAAAAAAhACxCdASIHOQMAIAEgBzkDoAMgASAHOQOoAyAAQeSlBCABQaADahAeIAFBncIINgKQAyAAQeGSBCABQZADahAeIAFBncIINgKAAyAAQaTXBCABQYADahAeIAFBncIINgLwAiAAQdDYAyABQfACahAeIAFBncIINgLgAiAAQe/jAyABQeACahAeIAFBncIINgLQAiAAQY7aBCABQdACahAeIAFBncIINgLAAiAAQabFBCABQcACahAeIAFBncIINgKwAiAAQeDXBCABQbACahAeIAFBncIINgKgAiAAQfXXAyABQaACahAeIAFBncIINgKQAiAAQdeOBCABQZACahAeIAFBncIINgKAAiAAQc7YBCABQYACahAeIAFBncIINgLwASAAQbHkAyABQfABahAeIABB6MsEQQAQHiABQZ3CCDYC4AEgAEGRqwQgAUHgAWoQHiABQZ3CCDYC0AEgAEHpqgQgAUHQAWoQHiAAQdbUBEEAEB4gAUGdwgg2AsABIABBwukEIAFBwAFqEB4gAUGdwgg2ArABIABBgdQEIAFBsAFqEB4gAUGdwgg2AqABIABBu9MEIAFBoAFqEB4gAEGPywRBABAeIAFBncIINgKQASAAQduIBCABQZABahAeIAFBncIINgKAASAAQcSJBCABQYABahAeIAFBncIINgJwIABBgdYDIAFB8ABqEB4gAUGdwgg2AmAgAEHe3QMgAUHgAGoQHiABQZ3CCDYCUCAAQajWAyABQdAAahAeIAFBncIINgJAIABBhd0DIAFBQGsQHiAAQdmQBEEAEB4gAUGdwgg2AjAgAEGy3AMgAUEwahAeIAFBncIINgIgIABB9ocEIAFBIGoQHiABQZ3CCDYCECAAQeTFBCABQRBqEB4gASAJOQMIIAEgDTkDACAAQY+pBCABEB4gAEHRygRBABAeIABB9PQEQQAQHiABQeADaiQACycBAX8jAEEQayIBJAAgAUGYwgg2AgAgAEH3zAQgARAeIAFBEGokAAuIAQIDfwF+IwBBMGsiASQAIAAoAhAhAiAAKAIMKAIA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ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAcmVmZXJlbmNlIHRvIGJpbmFyeSBlbnRpdHkAYXN5bmNocm9ub3VzIGVudGl0eQBpbmNvbXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5AGVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5AGNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkAWE1MIG9yIHRleHQgZGVjbGFyYXRpb24gbm90IGF0IHN0YXJ0IG9mIGVudGl0eQB1bmRlZmluZWQgZW50aXR5AHBhcnNlci0+bV9vcGVuSW50ZXJuYWxFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuVmFsdWVFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuQXR0cmlidXRlRW50aXRpZXMgPT0gb3BlbkVudGl0eQBpbmZpbml0eQBsaXN0LT5zaXplIDwgbGlzdC0+Y2FwYWNpdHkAcmV0LnNpemUgPCByZXQuY2FwYWNpdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbWF4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AG4gJiYgbmV3AHNrZXcAc3RydmlldwAvc3ZnL2hvbmV5ZGV3ACAtYW5jaG9yIHcAc29ydHYAcG92OnBvdgBOb3YAaW52AGVxdWl2AHBpdgBub25hbWUuZ3YAR0RfcmFuayhnKVtyXS5hdiA9PSBHRF9yYW5rKGcpW3JdLnYAY2Mlc18lenUAY2MlcyslenUAL3N2Zy9wZXJ1AG51AG11ACVjJWxsdQBUaHUAdGF1AFRhdQBOdQBNdQBfcG9ydF8lc18oJWQpXyglZClfJXUATnVtYmVyIG9mIGl0ZXJhdGlvbnMgPSAldQBOdW1iZXIgb2YgaW5jcmVhc2VzID0gJXUAcGxhaW50ZXh0AHN0cmVzc3d0AGlucHV0AHRleHRsYXlvdXQAZG90X2xheW91dABuZWF0b19sYXlvdXQAaW5pdExheW91dABjbHVzdABtYXBDbHVzdABsYWJlbGp1c3QAc2NBZGp1c3QAQXVndXN0AGVkZ2VzZmlyc3QAbm9kZXNmaXJzdABtYXhpbWFsX2luZGVwZW5kZW50X2VkZ2Vfc2V0X2hlYXZlc3RfZWRnZV9wZXJub2RlX3N1cGVybm9kZXNfZmlyc3QAZXhpc3QAcmVhbGlnbk5vZGVsaXN0AGFwcGVuZE5vZGVsaXN0AHNsb3RfZnJvbV9jb25zdF9saXN0AHNsb3RfZnJvbV9saXN0AGRlZmF1bHRkaXN0AG1pbmRpc3QAcG93ZXJfZGlzdABncmFwaF9kaXN0AGF2Z19kaXN0AGdldEVkZ2VMaXN0AGlxdWVzdABsb3dhc3QAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX2Zhc3QAZ3Zfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABodG1sX3BvcnQAaW5zZXJ0AFJUcmVlSW5zZXJ0AGZpbmRTVmVydABzdGFydABwYXJ0AGVzdGltYXRlX3RleHRfd2lkdGhfMXB0AHF1b3QAf3Jvb3QAbm90AG1ha2Vfdm5fc2xvdABlbWl0X3hkb3QAeGRvdDp4ZG90AGVwczp4ZG90AHN2Zzp4ZG90AGpwZzp4ZG90AHBuZzp4ZG90AGpwZWc6eGRvdABnaWY6eGRvdABqcGU6eGRvdAB4ZG90MS40Onhkb3QAeGRvdDEuMjp4ZG90AHNkb3QAbWlkZG90AGd2OmRvdABwbGFpbi1leHQ6ZG90AGRvdDpkb3QAZXBzOmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHN2Zzpkb3QAanBnOmRvdABwbmc6ZG90AGpwZWc6ZG90AGdpZjpkb3QAanBlOmRvdAB/Ym90AGRvRG90AHNwYW4tPmZvbnQAdmFneGJwcmludABlbmRwb2ludAB4ZG90X3BvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAZ2V0X2hhc2hfc2VjcmV0X3NhbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABjaGFyc2V0AGluc2V0AGJpdGFycmF5X3Jlc2V0AGd2X2FyZW5hX3Jlc2V0AHN1YnNldABiaXRhcnJheV9zZXQAbWF0cml4X3NldABzY2FybGV0AC9zdmcvZGFya3Zpb2xldAAvc3ZnL2JsdWV2aW9sZXQAL3N2Zy92aW9sZXQAVHJlYnVjaGV0AGFneGdldAB0YWlsdGFyZ2V0AGxhYmVsdGFyZ2V0AGVkZ2V0YXJnZXQAaGVhZHRhcmdldABiaXRhcnJheV9nZXQAc3R5bGVzaGVldABzdHJpY3QAYWdjb3B5ZGljdABhZ21ha2VkYXRhZGljdAByZWMtPmRpY3QgPT0gZGF0YWRpY3QAd3JpdGVfZGljdABoaW50ZXJzZWN0AGd2YmlzZWN0AGVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5jb3JyZWN0AGFzcGVjdABsYXllcnNlbGVjdABLUF9TdWJ0cmFjdABRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfaW50ZXJhY3QAY29tcGFjdABPY3QAcmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0AGxhYmVsZmxvYXQAbGFiZWxfZmxvYXQAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9mb3JtYXQAL3N2Zy93aGVhdABtb25jaGFpbnNfYXQAU2F0AEFncmFwaGluZm9fdABBZ2VkZ2VpbmZvX3QAQWdub2RlaW5mb190AFx0AHJvdyA8IG1lLT5ucm93cwBtaW51cwBvcGx1cwByYWRpdXMAaGVhcnRzAHNhbXBsZXBvaW50cwBkaXJlZGdlY29uc3RyYWludHMAbGV2ZWwgYXNzaWdubWVudCBjb25zdHJhaW50cwB4eSBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB5eCBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB4eSBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IG9ydGhvZ29uYWwgY29uc3RyYWludHMAbGluZSBzZWdtZW50cwBzZXRfY2VsbF9oZWlnaHRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBjb2wgPCBtZS0+bmNvbHMAY2Fubm90IHJlYWxsb2MgZHEucG5scwBjYW5ub3QgcmVhbGxvYyBwbmxzAGxldmVscwBmb3JjZWxhYmVscwBkaWFnb25hbHMAbWVyZ2VfcmFua3MAc3BsaXRCbG9ja3MAaW52aXMAY2Fubm90IHJlYWxsb2MgdHJpcwBzZXRfY2VsbF93aWR0aHMAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHMAeWVzAHNob3dib3hlcwBiZWF1dGlmeV9sZWF2ZXMAYXR0YWNoX2VkZ2VfbGFiZWxfY29vcmRpbmF0ZXMAcG9seWxpbmVzAHNwbGluZXMAb3J0aG9nb25hbCBsaW5lcwB0ZXhneXJldGVybWVzAG90aW1lcwBUaW1lcwBmb250bmFtZXMAcHJlZml4IG11c3Qgbm90IGJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlIG5hbWVzAFNwYXJzZU1hdHJpeF9zdW1fcmVwZWF0X2VudHJpZXMAcGVyaXBoZXJpZXMAR2V0QnJhbmNoZXMAZiA8IGdyYXBoW2pdLm5lZGdlcwBtaW5tYXhfZWRnZXMAZXhjaGFuZ2VfdHJlZV9lZGdlcwBtYWtlU3RyYWlnaHRFZGdlcwB1bmRvQ2x1c3RlckVkZ2VzAGNvbXBvdW5kRWRnZXMAbWVyZ2VfdHJlZXMAX19jbHVzdGVybm9kZXMAYWdubm9kZXMATkRfaWQobnApID09IG5fbm9kZXMATG9hZE5vZGVzAHNpZGVzAHNwYWRlcwB2ZXJ0aWNlcwBjb29yZHMAc2V0Ym91bmRzAG1kcwBjZHMAbWFrZVNlbGZBcmNzAGVtaXRfZWRnZV9ncmFwaGljcwBjbHVicwBjb25zb2xhcwAlbGYlMnMAClN0cmluZyBzdGFydGluZzo8JS44MHMAClN0cmluZyBzdGFydGluZzoiJS44MHMAICUuKnMAJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACUuKnMlYyVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAcm9vdCA9ICVzACBUaXRsZTogJXMAInN0cmljdCI6ICVzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBmc3RyAHN0cnZpZXdfc3RyAHBvdl9jb2xvcl9hc19zdHIAdnBzYyE9bnVsbHB0cgBiZW5kVG9TdHIAdWFycgBjcmFycgBsYXJyAGhhcnIAZGFycgB1QXJyAHJBcnIAbEFycgBoQXJyAGRBcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIAdXBwZXIgPj0gbG93ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBpb3NfYmFzZTo6Y2xlYXIAYnJ2YmFyAE1hcgBccgBORF9yYW5rKHYpID09IHIAc3RyZXEAc3Rydmlld19lcQBzdHJ2aWV3X3N0cl9lcQBzdHJ2aWV3X2Nhc2Vfc3RyX2VxAHN0cnZpZXdfY2FzZV9lcQB2cAAlJUJlZ2luUHJvbG9nCi9Eb3REaWN0IDIwMCBkaWN0IGRlZgpEb3REaWN0IGJlZ2luCgovc2V0dXBMYXRpbjEgewptYXJrCi9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmCiBFbmNvZGluZ1ZlY3RvciAwCgpJU09MYXRpbjFFbmNvZGluZyAwIDI1NSBnZXRpbnRlcnZhbCBwdXRpbnRlcnZhbApFbmNvZGluZ1ZlY3RvciA0NSAvaHlwaGVuIHB1dAoKJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nCi9zdGFybmV0SVNPIHsKICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgogICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UKICAgICAgICB9IGZvcmFsbAogICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYKICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAp9IGRlZgovVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllciBzdGFybmV0SVNPIGRlZgovQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKY2xlYXJ0b21hcmsKfSBiaW5kIGRlZgoKJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAovY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmCi9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmCgovSW52U2NhbGVGYWN0b3IgMS4wIGRlZgovc2V0X3NjYWxlIHsKICAgICAgIGR1cCAxIGV4Y2ggZGl2IC9JbnZTY2FsZUZhY3RvciBleGNoIGRlZgogICAgICAgc2NhbGUKfSBiaW5kIGRlZgoKJSBzdHlsZXMKL3NvbGlkIHsgW10gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2Rhc2hlZCB7IFs5IEludlNjYWxlRmFjdG9yIG11bCBkdXAgXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovZG90dGVkIHsgWzEgSW52U2NhbGVGYWN0b3IgbXVsIDYgSW52U2NhbGVGYWN0b3IgbXVsXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovaW52aXMgey9maWxsIHtuZXdwYXRofSBkZWYgL3N0cm9rZSB7bmV3cGF0aH0gZGVmIC9zaG93IHtwb3AgbmV3cGF0aH0gZGVmfSBiaW5kIGRlZgovYm9sZCB7IDIgc2V0bGluZXdpZHRoIH0gYmluZCBkZWYKL2ZpbGxlZCB7IH0gYmluZCBkZWYKL3VuZmlsbGVkIHsgfSBiaW5kIGRlZgovcm91bmRlZCB7IH0gYmluZCBkZWYKL2RpYWdvbmFscyB7IH0gYmluZCBkZWYKL3RhcGVyZWQgeyB9IGJpbmQgZGVmCgolIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAovbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYKCi9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMKCS9ucGFnZXMgZXhjaCBkZWYKCS9qIGV4Y2ggZGVmCgkvaSBleGNoIGRlZgoJL3N0ciAxMCBzdHJpbmcgZGVmCglucGFnZXMgMSBndCB7CgkJZ3NhdmUKCQkJY29vcmRmb250IHNldGZvbnQKCQkJMCAwIG1vdmV0bwoJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93CgkJZ3Jlc3RvcmUKCX0gaWYKfSBiaW5kIGRlZgoKL3NldF9mb250IHsKCWZpbmRmb250IGV4Y2gKCXNjYWxlZm9udCBzZXRmb250Cn0gZGVmCgolIGRyYXcgdGV4dCBmaXR0ZWQgdG8gaXRzIGV4cGVjdGVkIHdpZHRoCi9hbGlnbmVkdGV4dCB7CQkJJSB3aWR0aCB0ZXh0CgkvdGV4dCBleGNoIGRlZgoJL3dpZHRoIGV4Y2ggZGVmCglnc2F2ZQoJCXdpZHRoIDAgZ3QgewoJCQlbXSAwIHNldGRhc2gKCQkJdGV4dCBzdHJpbmd3aWR0aCBwb3Agd2lkdGggZXhjaCBzdWIgdGV4dCBsZW5ndGggZGl2IDAgdGV4dCBhc2hvdwoJCX0gaWYKCWdyZXN0b3JlCn0gZGVmCgovYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplCgkJNCAyIHJvbGwKCQltb3ZldG8KCQkyIGNvcHkKCQlleGNoIDAgcmxpbmV0bwoJCTAgZXhjaCBybGluZXRvCgkJcG9wIG5lZyAwIHJsaW5ldG8KCQljbG9zZXBhdGgKfSBiaW5kIGRlZgoKL2VsbGlwc2VfcGF0aCB7CgkvcnkgZXhjaCBkZWYKCS9yeCBleGNoIGRlZgoJL3kgZXhjaCBkZWYKCS94IGV4Y2ggZGVmCgltYXRyaXggY3VycmVudG1hdHJpeAoJbmV3cGF0aAoJeCB5IHRyYW5zbGF0ZQoJcnggcnkgc2NhbGUKCTAgMCAxIDAgMzYwIGFyYwoJc2V0bWF0cml4Cn0gYmluZCBkZWYKCi9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgovc2hvd3BhZ2UgeyB9IGRlZgoKL2xheWVyY29sb3JzZXEKCVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QKCQlbMCAwIDBdCgkJWy4yIC44IC44XQoJCVsuNCAuOCAuOF0KCQlbLjYgLjggLjhdCgkJWy44IC44IC44XQoJXQpkZWYKCi9sYXllcmxlbiBsYXllcmNvbG9yc2VxIGxlbmd0aCBkZWYKCi9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgoJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0CglhbG9hZCBwb3Agc2V0aHNiY29sb3IKCS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmCn0gYmluZCBkZWYKCi9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgoKL29ubGF5ZXJzIHsKCS9teXVwcGVyIGV4Y2ggZGVmCgkvbXlsb3dlciBleGNoIGRlZgoJY3VybGF5ZXIgbXlsb3dlciBsdAoJY3VybGF5ZXIgbXl1cHBlciBndAoJb3IKCXtpbnZpc30gaWYKfSBkZWYKCi9jdXJsYXllciAwIGRlZgoKJSVFbmRSZXNvdXJjZQolJUVuZFByb2xvZwolJUJlZ2luU2V0dXAKMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAolIC9hcnJvd2xlbmd0aCAxMCBkZWYKJSAvYXJyb3d3aWR0aCA1IGRlZgoKJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyCi9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQolIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcwovbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQoyIGx0IHsKICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQKICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQKfSBpZgoKJSVFbmRTZXR1cABzdXAAZ3JvdXAAY3VwAHRoaW5zcABlbnNwAGVtc3AAbmJzcABwZXJwAHdlaWVycABnZW5lcmF0ZS1jb25zdHJhaW50cy5jcHAAYmxvY2suY3BwAGNzb2x2ZV9WUFNDLmNwcAB/dG9wAHByb3AAYWd4YnBvcABub3AAYXN5bXAAY29tcABmaW5kQ0NvbXAAYm1wAHNjYWxlX2NsYW1wAHhscABscCAhPSBjbHAAdGFpbF9scABoZWFkX2xwAHRhaWx0b29sdGlwAGxhYmVsdG9vbHRpcABlZGdldG9vbHRpcABoZWFkdG9vbHRpcABoZWxsaXAAdGFpbGNsaXAAaGVhZGNsaXAAL3N2Zy9wYXBheWF3aGlwAGhwAHRyYW5zcG9zZV9zdGVwAGNvbXB1dGVTdGVwAGxheWVybGlzdHNlcABsYXllcnNlcABpcHNlcAByYW5rc2VwAG5vZGVzZXAAc3ViZ3JhcGhzIG5lc3RlZCBtb3JlIHRoYW4gJWQgZGVlcABTZXAAc2ZkcABjcAB3ZWJwAGlkbWFwAGNsdXN0ZXJfbWFwAGNtYXB4Om1hcABlcHM6bWFwAGNtYXB4X25wOm1hcABpbWFwX25wOm1hcABpc21hcDptYXAAaW1hcDptYXAAY21hcDptYXAAc3ZnOm1hcABqcGc6bWFwAHBuZzptYXAAanBlZzptYXAAZ2lmOm1hcABqcGU6bWFwAG92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAHBhcnRpdGlvbgBkb3RfcG9zaXRpb24AU2V0dGluZyB1cCBzdHJlc3MgZnVuY3Rpb24AdW5jbG9zZWQgQ0RBVEEgc2VjdGlvbgBwb3N0YWN0aW9uAHJvdGF0aW9uAG9yaWVudGF0aW9uAGFib21pbmF0aW9uAGFjY291bnRpbmdHZXRDdXJyZW50QW1wbGlmaWNhdGlvbgB4ZG90dmVyc2lvbgBTVHNldFVuaW9uADxwb2x5Z29uAGhleGFnb24Ac2VwdGFnb24AcGVudGFnb24AdHJpcGxlb2N0YWdvbgBkb3VibGVvY3RhZ29uAC9zdmcvbGVtb25jaGlmZm9uAE1vbgBwbHVzbW4Abm90aW4AaXNpbgAvc3ZnL21vY2Nhc2luAHBpbgBtaW4Adm9yb19tYXJnaW4AaW5maW4Ab25lZF9vcHRpbWl6ZXJfdHJhaW4AcGxhaW4AbWFrZV9jaGFpbgBtZXJnZV9jaGFpbgBkZWxldGVNaW4AZmluZE1pbgB2YWxpZ24AYmFsaWduAHllbgBNdWx0aWxldmVsX2NvYXJzZW4AY3VycmVuAFBvYnNvcGVuAGd2X2ZvcGVuAGd2dXNlcnNoYXBlX29wZW4AZW50aXR5VHJhY2tpbmdPbk9wZW4AL3N2Zy9saW5lbgBkaW1lbgBtaW5sZW4Ac3R5bGVfdG9rZW4AdW5jbG9zZWQgdG9rZW4AL3N2Zy95ZWxsb3dncmVlbgBtZWRpdW1mb3Jlc3RncmVlbgAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvbGlnaHRncmVlbgBodW50ZXJzZ3JlZW4AL3N2Zy9sYXduZ3JlZW4AL3N2Zy9kYXJrZ3JlZW4AL3N2Zy9tZWRpdW1zcHJpbmdncmVlbgAvc3ZnL3NwcmluZ2dyZWVuAC9zdmcvZGFya29saXZlZ3JlZW4AL3N2Zy9saW1lZ3JlZW4AL3N2Zy9wYWxlZ3JlZW4Ad2ViZ3JlZW4AL3N2Zy9saWdodHNlYWdyZWVuAC9zdmcvbWVkaXVtc2VhZ3JlZW4AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9zZWFncmVlbgB4MTFncmVlbgAvc3ZnL2dyZWVuAEdyZWVuAC9zdmcvbGlnaHRjeWFuAC9zdmcvZGFya2N5YW4AL3N2Zy9jeWFuAG5ld3RhbgBkYXJrdGFuAC9zdmcvdGFuAHJvd3NwYW4AY29sc3BhbgBuYW4AdGltZXNuZXdyb21hbgBuaW1idXNyb21hbgB0aW1lc3JvbWFuAFRpbWVzLVJvbWFuAFBhbGF0aW5vLVJvbWFuAE5ld0NlbnR1cnlTY2hsYmstUm9tYW4ASmFuAEdEX3JhbmsoZylbcl0ubiA8PSBHRF9yYW5rKGcpW3JdLmFuAGFneGJwdXRfbgBcbgBuX25vZGVzID09IGdyYXBoLT5uAEEtPm0gPT0gQS0+bgBqb2ItPm9iai0+dS5uAG56YyA9PSAoc2l6ZV90KW4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHBzeW0AYWxlZnN5bQB0aGV0YXN5bQBxdWFudHVtAHN1bQAvc3ZnL3BsdW0AaW52dHJhcGV6aXVtAG1lZGl1bQA5OnByaXNtAGxybQBjdXN0b20AYXB0ci0+dGFnID09IFRfYXRvbQAvZGV2L3VyYW5kb20AZ3ZfcmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAc3RyZXNzX21ham9yaXphdGlvbl9rRF9ta2VybmVsAGlzX3BhcmFsbGVsAENhbGN1bGF0aW5nIGNpcmN1aXQgbW9kZWwAQ2FsY3VsYXRpbmcgc3Vic2V0IG1vZGVsAENhbGN1bGF0aW5nIE1EUyBtb2RlbAB4bGFiZWwAdGFpbGxhYmVsAGhlYWRsYWJlbABncmFwaCBsYWJlbABpZXhjbABvYmpwLT5sYmwAb3ZhbABtZXJnZXZpcnR1YWwAL3N2Zy9saWdodGNvcmFsAC9zdmcvY29yYWwAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9hcnJheXNfaW50ZXJuYWwATXVsdGlsZXZlbF9jb2Fyc2VuX2ludGVybmFsAFF1YWRUcmVlX2FkZF9pbnRlcm5hbABhcnJvd19sZW5ndGhfbm9ybWFsAGFyaWFsAHJhZGlhbAAvc3ZnL3RlYWwAcmVhbABsb2NhbABlc3RpbWF0ZV9jaGFyYWN0ZXJfd2lkdGhfY2Fub25pY2FsAGdsb2JhbABxLT5sAC4uLy4uL2xpYi9jZ3JhcGgvc2Nhbi5sAHRrOnRrAGdpZjp0awBwYXRjaHdvcmsAdG9rAGJvb2sAQXZhbnRHYXJkZS1Cb29rAHNpbmsAb3ZlcmxhcF9zaHJpbmsAc3BpY3lwaW5rAC9zdmcvaG90cGluawAvc3ZnL2xpZ2h0cGluawAvc3ZnL2RlZXBwaW5rAG5lb25waW5rAC9zdmcvcGluawBuZXdyYW5rAGNsdXN0ZXJyYW5rAF9uZXdfcmFuawBpbnN0YWxsX2luX3JhbmsAcmVtb3ZlX2Zyb21fcmFuawAvc3ZnL2Nvcm5zaWxrAG9uZWJsb2NrAHYtPmxlZnQtPmJsb2NrID09IHYtPnJpZ2h0LT5ibG9jawAvc3ZnL2ZpcmVicmljawBQUWNoZWNrAHBhY2sAL3N2Zy9ibGFjawBCbGFjawBiYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAc2hvcnRwYXRoAGZvbnRwYXRoAFBvYnNwYXRoAGJlZ2lucGF0aABpbWFnZXBhdGgAZW5kcGF0aABzdHJhaWdodF9wYXRoAG1hcF9wYXRoADxwYXRoAGNhbm5vdCBmaW5kIHRyaWFuZ2xlIHBhdGgAL3N2Zy9sYXZlbmRlcmJsdXNoAGZsZXNoAG9zbGFzaABPc2xhc2gAZHRzdHJoYXNoAHN0cmRpY3RfaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL3V0aWwvYml0YXJyYXkuaAAuLi8uLi9saWIvdXRpbC9zdHJ2aWV3LmgALi4vLi4vbGliL3V0aWwvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvdXRpbC9zdHJlcS5oAC4uLy4uL2xpYi91dGlsL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvdXRpbC9ndl9tYXRoLmgALi4vLi4vbGliL3V0aWwvYWd4YnVmLmgALi4vLi4vbGliL3V0aWwvdG9rZW5pemUuaAAuLi8uLi9saWIvdXRpbC9hbGxvYy5oAGF1eGcAY29yZV9sb2FkaW1hZ2Vfc3ZnAHN2ZzpzdmcAanBnOnN2ZwBwbmc6c3ZnAGpwZWc6c3ZnAGdpZjpzdmcAanBlOnN2ZwBzdmdfaW5saW5lOnN2ZwBBdWcAZG9Qcm9sb2cAcG93ZXJfaXRlcmF0aW9uX29ydGhvZwBwbmcAaWRlYWxfZGlzdF9zY2hlbWUgdmFsdWUgd3JvbmcAeGRvdCB2ZXJzaW9uICIlcyIgdG9vIGxvbmcAY29uZwBsYmxlbmNsb3NpbmcAYmFzaWNfc3RyaW5nAGZhaWx1cmUgbWFsbG9jJ2luZyBmb3IgcmVzdWx0IHN0cmluZwBzcHJpbmcAb3JkZXJpbmcAZ2VuZXJhdGVSYW5kb21PcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGxnAG9yaWcAc3psaWcAb2VsaWcAYWVsaWcAT0VsaWcAQUVsaWcAY29yZV9sb2FkaW1hZ2VfZmlnAGpwZzpmaWcAcG5nOmZpZwBmaWc6ZmlnAGpwZWc6ZmlnAGdpZjpmaWcAanBlOmZpZwBlZ2cAbmV4dF9zZWcAcmVnAGpwZWcAaSA9PSBkZWcAZGcAY2cAY2xvc2VzdWJnAG1pc21hdGNoZWQgdGFnAGJlei0+c2ZsYWcAYmV6LT5lZmxhZwAhKmZsYWcAIWZsYWcAPGcAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjVnICUuNWcAJWcgJWcAYm94SW50ZXJzZWN0ZgBlcHNmAGFnZWRnZXNlcWNtcGYAY2N3cm90YXRlcGYAZm5vZgBpbmYAc2VsZgBoYWxmACVsZiVsZiVsZiVsZgAlbGYsJWxmLCVsZiwlbGYsJWxmACUqZiAlKmYgJWxmICVsZgBsaWJlcmF0aW9uc2VyaWYAZnJlZXNlcmlmAHNhbnMtU2VyaWYAZ2lmAC9zdmcvcGVhY2hwdWZmAHJpZmYAYWNjb3VudGluZ1JlcG9ydERpZmYAKFhtbEJpZ0NvdW50KS0xIC0gcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGFic0RpZmYAdGFpbGhyZWYAbGFiZWxocmVmAGVkZ2VocmVmAGhlYWRocmVmAG9yZGYAcGRmAHNpZ21hZgBcZgAlLjBMZgAlTGYAdXMtPmYAJS4wM2YAJXMgdHJhbnNtaXQgJS4zZgByZ2I8JTkuM2YsICU5LjNmLCAlOS4zZj4gdHJhbnNtaXQgJS4zZgAlLjAyZgAlLjJmACUuMGYsJS4wZiwlLjBmLCUuMGYAICUuMGYsJS4wZgAlLjBmICUuMGYgJS4wZiAlLjBmACIgZmlsbC1vcGFjaXR5PSIlZgAiIHN0cm9rZS1vcGFjaXR5PSIlZgAKZmluYWwgZSA9ICVmAGJyb256ZQBhcnJvd3NpemUAbGFiZWxmb250c2l6ZQBzZWFyY2hzaXplAGZpeGVkc2l6ZQBub2RlX3NldF9zaXplAHRleHRzcGFuX3NpemUAc3ZnX3NpemUAaW5kZXggPCBsaXN0LT5zaXplAGNhcGFjaXR5ID4gZGljdC0+c2l6ZQBjYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAFNJWkVfTUFYIC0gc2l6ZW9mKHNpemVfdCkgLSBFWFBBVF9NQUxMT0NfUEFERElORyA+PSBzaXplAG5vcm1hbGl6ZQBFTGluaXRpYWxpemUAbWtNYXplAGljdXJ2ZQB0cnlfcmVzZXJ2ZQBub2RlX3NldF9yZW1vdmUAc3RyZGljdF9yZW1vdmUAc29sdmUAIXYtPmFjdGl2ZQAtYWN0aXZlAGZvbnRfaW5fbGlzdF9wZXJtaXNzaXZlAC9zdmcvb2xpdmUAdWdyYXZlAG9ncmF2ZQBpZ3JhdmUAZWdyYXZlAGFncmF2ZQBVZ3JhdmUAT2dyYXZlAElncmF2ZQBFZ3JhdmUAQWdyYXZlAHRydWUAL3N2Zy9iaXNxdWUAb2JsaXF1ZQBBdmFudEdhcmRlLUJvb2tPYmxpcXVlAEF2YW50R2FyZGUtRGVtaU9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZQBDb3VyaWVyLUJvbGRPYmxpcXVlAEhlbHZldGljYS1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LU9ibGlxdWUAQ291cmllci1PYmxpcXVlAEhlbHZldGljYS1PYmxpcXVlAG5hdnlibHVlAC9zdmcvbGlnaHRza3libHVlAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9za3libHVlAG5ld21pZG5pZ2h0Ymx1ZQAvc3ZnL21pZG5pZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2NhZGV0Ymx1ZQAvc3ZnL2Nvcm5mbG93ZXJibHVlAC9zdmcvZG9kZ2VyYmx1ZQAvc3ZnL3Bvd2RlcmJsdWUAbmVvbmJsdWUAL3N2Zy9tZWRpdW1ibHVlAC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9zdGVlbGJsdWUAL3N2Zy9yb3lhbGJsdWUAL3N2Zy9kYXJrYmx1ZQByaWNoYmx1ZQBsaWdodHNsYXRlYmx1ZQAvc3ZnL21lZGl1bXNsYXRlYmx1ZQAvc3ZnL2RhcmtzbGF0ZWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9hbGljZWJsdWUAL3N2Zy9ibHVlAGNhbGxTdG9yZUVudGl0eVZhbHVlAHN0b3JlQXR0cmlidXRlVmFsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQB5YWN1dGUAdWFjdXRlAG9hY3V0ZQBpYWN1dGUAZWFjdXRlAGFhY3V0ZQBZYWN1dGUAVWFjdXRlAE9hY3V0ZQBJYWN1dGUARWFjdXRlAEFhY3V0ZQByZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZQBkdXBsaWNhdGUgYXR0cmlidXRlAG5vdGUAcHJpbWVyc2l0ZQByaWJvc2l0ZQByZXN0cmljdGlvbnNpdGUAcHJvdGVhc2VzaXRlAC9zdmcvZ2hvc3R3aGl0ZQAvc3ZnL25hdmFqb3doaXRlAC9zdmcvZmxvcmFsd2hpdGUAL3N2Zy9hbnRpcXVld2hpdGUAL3N2Zy93aGl0ZQBXaGl0ZQBwb3Bfb2JqX3N0YXRlAHBjcF9yb3RhdGUAY29uY2VudHJhdGUAZGVjb3JhdGUAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2FjY3VtdWxhdGUAbm90cmFuc2xhdGUAL3N2Zy9jaG9jb2xhdGUAcGFyc2VyQ3JlYXRlAGdlb21VcGRhdGUAaW52aG91c2UAL3N2Zy9jaGFydHJldXNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQBTSVpFX01BWCAtIHJvb3RQYXJzZXItPm1fYWxsb2NfdHJhY2tlci5ieXRlc0FsbG9jYXRlZCA+PSBpbmNyZWFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtb3JlX2NvcmUATXNxdWFyZQBQYWxhdGlubyBMaW5vdHlwZQBBLT50eXBlID09IEItPnR5cGUAc3VwZQBlbGxpcHNlX3RhbmdlbnRfc2xvcGUAZ3ZyZW5kZXJfdXNlcnNoYXBlAG1pdGVyX3NoYXBlAGxhbmRzY2FwZQBMYW5kc2NhcGUASnVuZQBub25lAGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGNvdXNpbmUAL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvYXF1YW1hcmluZQA8cG9seWxpbmUAJXNvdmVybGluZQB1bmRlcmxpbmUAcmVhbGx5cm91dGVzcGxpbmUAUHJvdXRlc3BsaW5lAGxpbmVhcl9zcGxpbmUAYl9zcGxpbmUAb2xpbmUAYWd4YnVmX2lzX2lubGluZQBzdmdfaW5saW5lAHJlZmluZQBwcmltZQBQcmltZQAvc3ZnL2xpbWUAY29sb3JzY2hlbWUAbGFiZWxfc2NoZW1lAHNhbWUAbGFiZWxmb250bmFtZQBVRl9zZXRuYW1lAGZvbnRfbmFtZQBmb250LT5uYW1lAHVzLT5uYW1lAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAc3R5bGUAL3N2Zy90aGlzdGxlAHRpdGxlAC9zdmcvbWVkaXVtcHVycGxlAGRhcmtwdXJwbGUAd2VicHVycGxlAHJlYmVjY2FwdXJwbGUAdmVyeV9saWdodF9wdXJwbGUAbWVkX3B1cnBsZQB4MTFwdXJwbGUAL3N2Zy9wdXJwbGUAc2hhcGVmaWxlAGdyYWRpZW50YW5nbGUAcmVjdGFuZ2xlAFJlY3RhbmdsZQBsYWJlbGFuZ2xlAGludnRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGZzQ3ljbGUAZG91YmxlY2lyY2xlAE1jaXJjbGUAaW52aXNpYmxlAGV4cGF0X2hlYXBfaW5jcmVhc2VfdG9sZXJhYmxlAHRob3JuZGFsZQBpbnB1dHNjYWxlAG9zY2FsZQBpbWFnZXNjYWxlAC9zdmcvd2hpdGVzbW9rZQBtYW5kYXJpbm9yYW5nZQAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9vcmFuZ2UAZXhjaGFuZ2UAL3N2Zy9iZWlnZQBuZXdlZGdlAGRlbGV0ZV9mYXN0X2VkZ2UAZGVsZXRlX2ZsYXRfZWRnZQBhZGRfdHJlZV9lZGdlAG1ha2VTdHJhaWdodEVkZ2UAbWFrZVNlbGZFZGdlAG1ha2VDb21wb3VuZEVkZ2UAIXVzZV9zdGFnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBub2RlX3NldF9mcmVlAGV4cGF0X2ZyZWUAZ3ZfYXJlbmFfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAHN0cmRpY3RfZmluZABndnVzZXJzaGFwZV9maW5kAEVMbGVmdGJuZABleHBhbmQAY3VtYmVybGFuZABicmlnaHRnb2xkAG9sZGdvbGQAL3N2Zy9nb2xkAGJvbGQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkAFRpbWVzLUJvbGQAQ291cmllci1Cb2xkAFBhbGF0aW5vLUJvbGQATmV3Q2VudHVyeVNjaGxiay1Cb2xkAEhlbHZldGljYS1Cb2xkACUwKmxsZAAlKmxsZAArJWxsZABuLT5icmFuY2hbaV0uY2hpbGQAJSsuNGxkACVzJWxkAHNvbGlkAC9zdmcvbWVkaXVtb3JjaGlkAC9zdmcvZGFya29yY2hpZAAvc3ZnL29yY2hpZABpbGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQAZGlqa3N0cmFfc2dkAGZpeGVkAGN1cnZlZABkZXJpdmVkAGRvdHRlZABtZW1vcnkgZXhoYXVzdGVkAGxvY2FsZSBub3Qgc3VwcG9ydGVkAHBhcnNpbmcgYWJvcnRlZABwYXJzZXIgbm90IHN0YXJ0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGJ5dGVzQWxsb2NhdGVkAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQAY29uZGVuc2VkAC9zdmcvbWVkaXVtdmlvbGV0cmVkAC9zdmcvcGFsZXZpb2xldHJlZABJbXByb3BlciAlcyB2YWx1ZSAlcyAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPCAlZCAtIHRvbyBzbWFsbCAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPiAlZCAtIHRvbyBsYXJnZSAtIGlnbm9yZWQAL3N2Zy9pbmRpYW5yZWQAL3N2Zy9kYXJrcmVkAGEgc3VjY2Vzc2Z1bCBwcmlvciBjYWxsIHRvIGZ1bmN0aW9uIFhNTF9HZXRCdWZmZXIgaXMgcmVxdWlyZWQAdGFwZXJlZAAvc3ZnL29yYW5nZXJlZAByZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkAC9zdmcvcmVkAHN0cmlwZWQAaWxsLWNvbmRpdGlvbmVkAHVuZGVmaW5lZABub3QgY29uc3RyYWluZWQAbGFiZWxhbGlnbmVkAHRleHQgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAFhNTCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAdW5maWxsZWQAaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZAB0cmlhbmd1bGF0aW9uIGZhaWxlZABwYXJzaW5nIGZpbmlzaGVkAGRhc2hlZABsaW1pdCBvbiBpbnB1dCBhbXBsaWZpY2F0aW9uIGZhY3RvciAoZnJvbSBEVEQgYW5kIGVudGl0aWVzKSBicmVhY2hlZAB3ZWRnZWQAc2l6ZSA9PSBmcmVlZAByb3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyBob3Jpem9udGFsOyB3aWxsIGJlIHRyaXZpYWxseSBib3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyB2ZXJ0aWNhbDsgd2lsbCBiZSB0cml2aWFsbHkgYm91bmRlZABwYXJzZXIgbm90IHN1c3BlbmRlZABwYXJzZXIgc3VzcGVuZGVkAFdlZABSZWQAU3BhcnNlTWF0cml4X2FkZABub2RlX3NldF9hZGQAc3RyZGljdF9hZGQAZGQgIT0gcGFyZW50X2RkAEtQX0FkZABwYWQAeGxoZHhsb2FkAHhsaGR4dW5sb2FkAHJlYWQAYXJyb3doZWFkAGxoZWFkAHNhbWVoZWFkAGJveDNkACVzXyVkAF9zcGFuXyVkAF9ibG9ja18lZABfd2Vha18lZABfY2xvbmVfJWQALiVkACVZLSVtLSVkACVsZiwlZAAlcyBpbiBsaW5lICVkACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiaGVhZCI6ICVkAGFneGJwdXRjAHZwc2MAY3AtPnNyYwB1Y2lyYwBvY2lyYwBpY2lyYwBlY2lyYwBhY2lyYwBVY2lyYwBPY2lyYwBJY2lyYwBFY2lyYwBBY2lyYwBsYWJlbGxvYwBleHBhdF9tYWxsb2MAZXhwYXRfcmVhbGxvYwBndl9yZWNhbGxvYwBzdGQ6OmJhZF9hbGxvYwBndl9hcmVuYV9hbGxvYwBiYWtlcnNjaG9jAHNlbWlTd2VldENob2MAbWMAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYwBBLT5pc19wYXR0ZXJuX3N5bW1ldHJpYwBwaWM6cGljAGl0YWxpYwBCb29rbWFuLUxpZ2h0SXRhbGljAFphcGZDaGFuY2VyeS1NZWRpdW1JdGFsaWMAQm9va21hbi1EZW1pSXRhbGljAFRpbWVzLUJvbGRJdGFsaWMAUGFsYXRpbm8tQm9sZEl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUJvbGRJdGFsaWMAVGltZXMtSXRhbGljAFBhbGF0aW5vLUl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYwByYWRpYwAjZmNmY2ZjAHJvdXRlc3BsaW5lczogJWQgZWRnZXMsICV6dSBib3hlcyAlLjJmIHNlYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAGd2cmVuZGVyX2NvcmVfZG90LmMAY29uc3RyYWludC5jAGRvdGluaXQuYwBuZWF0b2luaXQuYwBwYXRjaHdvcmtpbml0LmMAb3NhZ2Vpbml0LmMAZW1pdC5jAGZsYXQuYwBhcnJvd3MuYwBtaW5jcm9zcy5jAHN0cmVzcy5jAHBvc3RfcHJvY2Vzcy5jAGNjb21wcy5jAG5zLmMAdXRpbHMuYwB4bGFiZWxzLmMAc2hhcGVzLmMAZG90c3BsaW5lcy5jAG5lYXRvc3BsaW5lcy5jAGNsdXN0ZXJlZGdlcy5jAGhlZGdlcy5jAGF0dHIuYwByZWZzdHIuYwBmYXN0Z3IuYwBjbHVzdGVyLmMAdGFwZXIuYwBndnJlbmRlci5jAHNwbGl0LnEuYwBjb21wLmMAZ3ZyZW5kZXJfY29yZV9tYXAuYwBoZWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwYXJ0aXRpb24uYwBwb3NpdGlvbi5jAGd2X2ZvcGVuLmMAdGV4dHNwYW4uYwBnZW9tLmMAcmFuZG9tLmMAcm91dGVzcGwuYwB4bWwuYwBNdWx0aWxldmVsLmMAc3ByaW5nX2VsZWN0cmljYWwuYwBndnJlbmRlcl9jb3JlX3RrLmMAcmFuay5jAHBhY2suYwBkdHN0cmhhc2guYwBncmFwaC5jAGd2cmVuZGVyX2NvcmVfc3ZnLmMAZ3ZyZW5kZXJfY29yZV9maWcuYwBzdHVmZi5jAG1hemUuYwBzcGFyc2Vfc29sdmUuYwByb3V0ZS5jAHdyaXRlLmMAY29seGxhdGUuYwB4bWxwYXJzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGFyZW5hLmMAZlBRLmMAY2xhc3MyLmMAJWxmLCVsZiwlbGYsJWxmJWMAJWxmLCVsZiwlbGYsJVteLF0lYwBcJWMAJGMAd2IAbnN1YgBzZXRoc2IAcmIAcHJvdGVjdF9yc3FiAGpvYgBjb3JlX2xvYWRpbWFnZV9wc2xpYgBGZWIAb2RiAGluaXRfc3BsaW5lc19iYgBiZXppZXJfYmIAcHJvdGVpbnN0YWIAcm5hc3RhYgAvc3ZnL29saXZlZHJhYgBcYgByd2EAL3N2Zy9hcXVhAGlvdGEASW90YQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvbWFnZW50YQBkZWx0YQBEZWx0YQB6ZXRhAHRoZXRhAFRoZXRhAGJldGEAWmV0YQBCZXRhAHByZXYgIT0gb2JqLT5kYXRhAG1ha2VHcmFwaERhdGEARXRhAG5pbWJ1c3NhbnNhAHBhcmEAa2FwcGEAS2FwcGEAL3N2Zy9zaWVubmEAVmVyZGFuYQBnYW1tYQBHYW1tYQBzaWdtYQBTaWdtYQBjb25zb2xhAG5hYmxhAC9zdmcvZnVjaHNpYQBHZW9yZ2lhAGFscGhhAEFscGhhAG9tZWdhAE9tZWdhAGFyZWEAbGFtYmRhAExhbWJkYQBoZWx2ZXRpY2EASGVsdmV0aWNhAG1pY2EAPjxhAGAAZ3ZfbGlzdF9jb3B5XwBfdGRyYXdfAF90bGRyYXdfAF9obGRyYXdfAF9sZHJhd18AX2hkcmF3XwBfZHJhd18AZ3ZfbGlzdF9zb3J0XwBndl9saXN0X2FwcGVuZF9zbG90XwBndl9saXN0X3ByZXBlbmRfc2xvdF8AZ3ZfbGlzdF9wb3BfZnJvbnRfAGd2X2xpc3Rfc2hyaW5rX3RvX2ZpdF8AYWd4c2V0XwBndl9saXN0X2dldF8AZG90X3NwbGluZXNfACVzXwBndl9saXN0X2NsZWFyXwBndl9saXN0X3BvcF9iYWNrXwBndl9saXN0X2RldGFjaF8AZ3ZfbGlzdF9yZW1vdmVfAGd2X2xpc3RfcmV2ZXJzZV8AZ3ZfbGlzdF9mcmVlXwBndl9saXN0X3RyeV9hcHBlbmRfAHBhZ2UlZCwlZF8AZ3ZfbGlzdF9zeW5jXwBfY2NfACBpZD0iYV8AXgBTdGFydGluZyBwaGFzZSAyIFtkb3RfbWluY3Jvc3NdAFN0YXJ0aW5nIHBoYXNlIDMgW2RvdF9wb3NpdGlvbl0Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AU3RhcnRpbmcgcGhhc2UgMSBbZG90X3JhbmtdAGpkW21hc2tbamNba11dXSA9PSBqY1trXQBqY1ttYXNrW2piW2tdXV0gPT0gamJba10AbmVlZGxlW2ldICE9IG5lZWRsZVtqXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHIuYm91bmRhcnlbaV0gPD0gci5ib3VuZGFyeVtOVU1ESU1TICsgaV0AWyUuMDNmLCUuMDNmXQBbaW50ZXJuYWwgaGFyZC1jb2RlZF0AbnAtPmNlbGxzWzFdAG5wLT5jZWxsc1swXQB1cy0+bmFtZVswXQBjcC0+c3JjWzBdAFsuLl0AXFwAInBvaW50cyI6IFsAInN0b3BzIjogWwAJWwBaAGNvbXB1dGVTY2FsZVhZAHk8PVkAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAbnogPD0gSU5UX01BWAB5ID49IElOVF9NSU4gJiYgeSA8PSBJTlRfTUFYAHggPj0gSU5UX01JTiAmJiB4IDw9IElOVF9NQVgAdyA+PSAwICYmIHcgPD0gSU5UX01BWABlX2NudCA8PSBJTlRfTUFYAHBhaXIucmlnaHQgPD0gSU5UX01BWABwYWlyLmxlZnQgPD0gSU5UX01BWAB0YXJnZXQgPD0gSU5UX01BWABuc2VncyA8PSBJTlRfTUFYAG5fZWRnZXMgPD0gSU5UX01BWABzdHAubnZlcnRpY2VzIDw9IElOVF9NQVgAb2JzW3BvbHlfaV0tPnBuIDw9IElOVF9NQVgAaW5wdXRfcm91dGUucG4gPD0gSU5UX01BWABncmFwaC0+biA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAZV9jbnQgLSAxIDw9IElOVF9NQVgATElTVF9TSVpFKCZsaXN0KSAtIDEgPD0gSU5UX01BWABMSVNUX1NJWkUoJmxheWVySURzKSAtIDEgPD0gSU5UX01BWABzdHJsZW4oYXJncykgPD0gSU5UX01BWABMSVNUX1NJWkUoJm9iamwpIDw9IElOVF9NQVgATElTVF9TSVpFKCZjdHgtPlRyZWVfZWRnZSkgPD0gSU5UX01BWABub2RlX3NldF9zaXplKGctPm5faWQpIDw9IElOVF9NQVgAaSA8IElOVF9NQVgAcmVzdWx0IDw9IChpbnQpVUNIQVJfTUFYAHNzeiA8PSBVQ0hBUl9NQVgAY29sID49IDAgJiYgY29sIDw9IFVJTlQxNl9NQVgAeDw9WABXAFYAVQBcVABURVhUAFNUUkVTU19NQUpPUklaQVRJT05fUE9XRVJfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0dSQVBIX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9BVkdfRElTVABGQVNUAEZPTlQAYiA9PSBCX1JJR0hUAEhFSUdIVABCX0xFRlQAXyVsbHVfU1VTUEVDVABCVABUcmVidWNoZXQgTVMASU5WSVMAJUg6JU06JVMAVlIAVFIAQS0+Zm9ybWF0ID09IEItPmZvcm1hdCAmJiBBLT5mb3JtYXQgPT0gRk9STUFUX0NTUgBMUgBESVIASFIAQ0VOVEVSACUlVFJBSUxFUgBBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwgfHwgQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9JTlRFR0VSAENFTExCT1JERVIAQlIAKlIAUQBFWFAAQl9VUABTVVAAVE9QAE8AbWFwTgBcTgBCX0RPV04AVEhPUk4AJSVCRUdJTgBST1dTUEFOAENPTFNQQU4ATkFOAFBNAEJPVFRPTQBCTQBBTQAlSDolTQBcTAB0YWlsVVJMAGxhYmVsVVJMAGVkZ2VVUkwAaGVhZFVSTABIVE1MAHghPU5VTEwAcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIgPT0gTlVMTABFRF90b192aXJ0KG9yaWcpID09IE5VTEwARURfdG9fdmlydChlKSA9PSBOVUxMAHByZWZpeCAhPSBOVUxMAGR0ZC0+c2NhZmZJbmRleCAhPSBOVUxMAHNtLT5MdyAhPSBOVUxMAGlucHV0ICE9IE5VTEwAbGlzdCAhPSBOVUxMAHJlZmVyZW50ICE9IE5VTEwAZGljdCAhPSBOVUxMAGRpY3QtPmJ1Y2tldHMgIT0gTlVMTABhdHRyICE9IE5VTEwAYWxsb2NhdG9yICE9IE5VTEwAcGFyc2VyICE9IE5VTEwAcm9vdFBhcnNlciAhPSBOVUxMAGxlYWRlciAhPSBOVUxMAGNtcCAhPSBOVUxMAGRhdGFwICE9IE5VTEwAaW50byAhPSBOVUxMAGl0ZW0gIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABmaWxlbmFtZSAhPSBOVUxMAGpvYi0+b3V0cHV0X2ZpbGUgIT0gTlVMTABtb2RlICE9IE5VTEwAeGQgIT0gTlVMTABzbS0+THdkICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABhcmVuYSAhPSBOVUxMAGxpc3QgJiYgbGlzdFswXSAhPSBOVUxMAEFGICE9IE5VTEwAc20tPkQgIT0gTlVMTABFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATENfQUxMAEJMAGJlc3Rjb3N0IDwgSFVHRV9WQUwATk9STUFMAFJBRElBTABBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwAVVJXIENoYW5jZXJ5IEwAVVJXIEJvb2ttYW4gTABDZW50dXJ5IFNjaG9vbGJvb2sgTABVUlcgR290aGljIEwAS0sASgBpIDwgTUFYX0kAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAQVNDSUkAXEgARVRIAFdJRFRIAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAbWtOQ29uc3RyYWludEcAXEcARVhQQVRfRU5USVRZX0RFQlVHAEVYUEFUX0VOVFJPUFlfREVCVUcARVhQQVRfQUNDT1VOVElOR19ERUJVRwBFWFBBVF9NQUxMT0NfREVCVUcAUk5HAFNQUklORwBDRUxMUEFERElORwBDRUxMU1BBQ0lORwBMQU5HAElNRwBceEYAJSVFT0YASU5GAFx4RkYAUklGRgBkZWx0YSA8PSAweEZGRkYAXHhFRgBceERGAFx4Q0YAXHhCRgBceEFGAFx4OUYAXHg4RgBceDdGAFx4MUYAXHhFAFxFAFBPSU5ULVNJWkUAVFJVRQBDTE9TRQBGQUxTRQBrZXkgIT0gVE9NQlNUT05FAHIgIT0gVE9NQlNUT05FAE5PTkUAR1JBRElFTlRBTkdMRQBUUklBTkdMRQBNSURETEUASU5WSVNJQkxFAFRBQkxFAEFHVFlQRShvYmopID09IEFHSU5FREdFIHx8IEFHVFlQRShvYmopID09IEFHT1VURURHRQBceEZFAFx4RUUAXHhERQBCX05PREUAXHhDRQBceEJFAFx4QUUAXHg5RQBceDhFAFx4MUUAVEQAQS0+Zm9ybWF0ID09IEZPUk1BVF9DT09SRABuICYmIGkgPj0gMCAmJiBpIDwgTk9ERUNBUkQAJSVFTkQASFlCUklEAFNPTElEAFx4RkQAXHhFRABET1RURUQAREFTSEVEAFJPVU5ERUQAXHhERABceENEAFx4QkQAXHhBRABceDlEAFx4OEQAXHgxRABceEMAZGVsZXRlVlBTQwBceEZDAFx4RUMAXHhEQwBceENDAFx4QkMAXHhBQwBceDlDAFx4OEMAXHgxQwBceEIAU1VCAFx4RkIAXHhFQgBceERCAFx4Q0IAXHhCQgBceEFCAFx4OUIAXHg4QgBceDFCAEEgJiYgQgBceEZBAFx4RUEAXHhEQQBceENBAFx4QkEAXHhBQQBceDlBAFx4OEEAXHgxQQBAAD8APCVzPgA8bmlsPgA8L3RzcGFuPjwvdGV4dFBhdGg+AAogICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+AD4KPHRpdGxlPgA8Rk9OVD4APEJSPgA8SFRNTD4APC9IVE1MPgA8SU1HPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgA8VEQ+AC0+ACI+AAlba2V5PQA8PQA8ACYjeCV4OwAmcXVvdDsAJmx0OwAmZ3Q7ACZhbXA7ACMlZDsAJiMzOTsAJiM0NTsAJiM5MzsAJiMxMzsAJiMxNjA7ACYjMTA7ADtzdG9wLW9wYWNpdHk6ACUlQm91bmRpbmdCb3g6AGNhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzIGFuZCBzZXR0aW5nIHVwIHN0cmVzcyB0ZXJtczoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6AHNvbHZpbmcgbW9kZWw6AC9cOgBncmV5OQBncmF5OQBceEY5AFx4RTkAXHhEOQBceEM5AFx4QjkAXHhBOQBncmV5OTkAZ3JheTk5AFx4OTkAZ3JleTg5AGdyYXk4OQBceDg5ADAxMjM0NTY3ODkAZ3JleTc5AGdyYXk3OQBncmV5NjkAZ3JheTY5AGdyZXk1OQBncmF5NTkAZ3JleTQ5AGdyYXk0OQBncmV5MzkAZ3JheTM5AGdyZXkyOQBncmF5MjkAZ3JleTE5AGdyYXkxOQBceDE5AC9yZGd5OS85AC9idXB1OS85AC9yZHB1OS85AC9wdWJ1OS85AC95bGduYnU5LzkAL2duYnU5LzkAL3JkeWxidTkvOQAvcmRidTkvOQAvZ3JleXM5LzkAL2dyZWVuczkvOQAvYmx1ZXM5LzkAL3B1cnBsZXM5LzkAL29yYW5nZXM5LzkAL3JlZHM5LzkAL3B1b3I5LzkAL3lsb3JicjkvOQAvcHVidWduOS85AC9idWduOS85AC9wcmduOS85AC9yZHlsZ245LzkAL3lsZ245LzkAL3NwZWN0cmFsOS85AC9waXlnOS85AC9icmJnOS85AC9wdXJkOS85AC95bG9ycmQ5LzkAL29ycmQ5LzkAL3BhaXJlZDkvOQAvc2V0MzkvOQAvc2V0MTkvOQAvcGFzdGVsMTkvOQAvcGFpcmVkMTIvOQAvc2V0MzEyLzkAL3JkZ3kxMS85AC9yZHlsYnUxMS85AC9yZGJ1MTEvOQAvcHVvcjExLzkAL3ByZ24xMS85AC9yZHlsZ24xMS85AC9zcGVjdHJhbDExLzkAL3BpeWcxMS85AC9icmJnMTEvOQAvcGFpcmVkMTEvOQAvc2V0MzExLzkAL3JkZ3kxMC85AC9yZHlsYnUxMC85AC9yZGJ1MTAvOQAvcHVvcjEwLzkAL3ByZ24xMC85AC9yZHlsZ24xMC85AC9zcGVjdHJhbDEwLzkAL3BpeWcxMC85AC9icmJnMTAvOQAvcGFpcmVkMTAvOQAvc2V0MzEwLzkAZ3JleTgAZ3JheTgAXHg4AHV0ZjgAI2Y4ZjhmOAAjZThlOGU4AFx4RjgAR0lGOABceEU4AFx4RDgAXHhDOABceEI4AFx4QTgAZ3JleTk4AGdyYXk5OABceDk4AGdyZXk4OABncmF5ODgAXHg4OABncmV5NzgAZ3JheTc4AGdyZXk2OABncmF5NjgAZ3JleTU4AGdyYXk1OABncmV5NDgAZ3JheTQ4AGdyZXkzOABncmF5MzgAZ3JleTI4AGdyYXkyOABncmV5MTgAZ3JheTE4AFx4MTgAL3JkZ3k5LzgAL2J1cHU5LzgAL3JkcHU5LzgAL3B1YnU5LzgAL3lsZ25idTkvOAAvZ25idTkvOAAvcmR5bGJ1OS84AC9yZGJ1OS84AC9ncmV5czkvOAAvZ3JlZW5zOS84AC9ibHVlczkvOAAvcHVycGxlczkvOAAvb3JhbmdlczkvOAAvcmVkczkvOAAvcHVvcjkvOAAveWxvcmJyOS84AC9wdWJ1Z245LzgAL2J1Z245LzgAL3ByZ245LzgAL3JkeWxnbjkvOAAveWxnbjkvOAAvc3BlY3RyYWw5LzgAL3BpeWc5LzgAL2JyYmc5LzgAL3B1cmQ5LzgAL3lsb3JyZDkvOAAvb3JyZDkvOAAvcGFpcmVkOS84AC9zZXQzOS84AC9zZXQxOS84AC9wYXN0ZWwxOS84AC9yZGd5OC84AC9idXB1OC84AC9yZHB1OC84AC9wdWJ1OC84AC95bGduYnU4LzgAL2duYnU4LzgAL3JkeWxidTgvOAAvcmRidTgvOAAvYWNjZW50OC84AC9ncmV5czgvOAAvZ3JlZW5zOC84AC9ibHVlczgvOAAvcHVycGxlczgvOAAvb3JhbmdlczgvOAAvcmVkczgvOAAvcHVvcjgvOAAveWxvcmJyOC84AC9wdWJ1Z244LzgAL2J1Z244LzgAL3ByZ244LzgAL3JkeWxnbjgvOAAveWxnbjgvOAAvc3BlY3RyYWw4LzgAL3BpeWc4LzgAL2JyYmc4LzgAL3B1cmQ4LzgAL3lsb3JyZDgvOAAvb3JyZDgvOAAvcGFpcmVkOC84AC9zZXQzOC84AC9zZXQyOC84AC9wYXN0ZWwyOC84AC9kYXJrMjgvOAAvc2V0MTgvOAAvcGFzdGVsMTgvOAAvcGFpcmVkMTIvOAAvc2V0MzEyLzgAL3JkZ3kxMS84AC9yZHlsYnUxMS84AC9yZGJ1MTEvOAAvcHVvcjExLzgAL3ByZ24xMS84AC9yZHlsZ24xMS84AC9zcGVjdHJhbDExLzgAL3BpeWcxMS84AC9icmJnMTEvOAAvcGFpcmVkMTEvOAAvc2V0MzExLzgAL3JkZ3kxMC84AC9yZHlsYnUxMC84AC9yZGJ1MTAvOAAvcHVvcjEwLzgAL3ByZ24xMC84AC9yZHlsZ24xMC84AC9zcGVjdHJhbDEwLzgAL3BpeWcxMC84AC9icmJnMTAvOAAvcGFpcmVkMTAvOAAvc2V0MzEwLzgAdXRmLTgAQy5VVEYtOABncmV5NwBncmF5NwBceDcAXHhGNwBceEU3AFx4RDcAXHhDNwBceEI3AFx4QTcAZ3JleTk3AGdyYXk5NwBceDk3AGdyZXk4NwBncmF5ODcAXHg4NwBncmV5NzcAZ3JheTc3AGdyZXk2NwBncmF5NjcAZ3JleTU3AGdyYXk1NwBncmV5NDcAZ3JheTQ3AGdyZXkzNwBncmF5MzcAZ3JleTI3AGdyYXkyNwBncmV5MTcAZ3JheTE3AFx4MTcAL3JkZ3k5LzcAL2J1cHU5LzcAL3JkcHU5LzcAL3B1YnU5LzcAL3lsZ25idTkvNwAvZ25idTkvNwAvcmR5bGJ1OS83AC9yZGJ1OS83AC9ncmV5czkvNwAvZ3JlZW5zOS83AC9ibHVlczkvNwAvcHVycGxlczkvNwAvb3JhbmdlczkvNwAvcmVkczkvNwAvcHVvcjkvNwAveWxvcmJyOS83AC9wdWJ1Z245LzcAL2J1Z245LzcAL3ByZ245LzcAL3JkeWxnbjkvNwAveWxnbjkvNwAvc3BlY3RyYWw5LzcAL3BpeWc5LzcAL2JyYmc5LzcAL3B1cmQ5LzcAL3lsb3JyZDkvNwAvb3JyZDkvNwAvcGFpcmVkOS83AC9zZXQzOS83AC9zZXQxOS83AC9wYXN0ZWwxOS83AC9yZGd5OC83AC9idXB1OC83AC9yZHB1OC83AC9wdWJ1OC83AC95bGduYnU4LzcAL2duYnU4LzcAL3JkeWxidTgvNwAvcmRidTgvNwAvYWNjZW50OC83AC9ncmV5czgvNwAvZ3JlZW5zOC83AC9ibHVlczgvNwAvcHVycGxlczgvNwAvb3JhbmdlczgvNwAvcmVkczgvNwAvcHVvcjgvNwAveWxvcmJyOC83AC9wdWJ1Z244LzcAL2J1Z244LzcAL3ByZ244LzcAL3JkeWxnbjgvNwAveWxnbjgvNwAvc3BlY3RyYWw4LzcAL3BpeWc4LzcAL2JyYmc4LzcAL3B1cmQ4LzcAL3lsb3JyZDgvNwAvb3JyZDgvNwAvcGFpcmVkOC83AC9zZXQzOC83AC9zZXQyOC83AC9wYXN0ZWwyOC83AC9kYXJrMjgvNwAvc2V0MTgvNwAvcGFzdGVsMTgvNwAvcmRneTcvNwAvYnVwdTcvNwAvcmRwdTcvNwAvcHVidTcvNwAveWxnbmJ1Ny83AC9nbmJ1Ny83AC9yZHlsYnU3LzcAL3JkYnU3LzcAL2FjY2VudDcvNwAvZ3JleXM3LzcAL2dyZWVuczcvNwAvYmx1ZXM3LzcAL3B1cnBsZXM3LzcAL29yYW5nZXM3LzcAL3JlZHM3LzcAL3B1b3I3LzcAL3lsb3JicjcvNwAvcHVidWduNy83AC9idWduNy83AC9wcmduNy83AC9yZHlsZ243LzcAL3lsZ243LzcAL3NwZWN0cmFsNy83AC9waXlnNy83AC9icmJnNy83AC9wdXJkNy83AC95bG9ycmQ3LzcAL29ycmQ3LzcAL3BhaXJlZDcvNwAvc2V0MzcvNwAvc2V0MjcvNwAvcGFzdGVsMjcvNwAvZGFyazI3LzcAL3NldDE3LzcAL3Bhc3RlbDE3LzcAL3BhaXJlZDEyLzcAL3NldDMxMi83AC9yZGd5MTEvNwAvcmR5bGJ1MTEvNwAvcmRidTExLzcAL3B1b3IxMS83AC9wcmduMTEvNwAvcmR5bGduMTEvNwAvc3BlY3RyYWwxMS83AC9waXlnMTEvNwAvYnJiZzExLzcAL3BhaXJlZDExLzcAL3NldDMxMS83AC9yZGd5MTAvNwAvcmR5bGJ1MTAvNwAvcmRidTEwLzcAL3B1b3IxMC83AC9wcmduMTAvNwAvcmR5bGduMTAvNwAvc3BlY3RyYWwxMC83AC9waXlnMTAvNwAvYnJiZzEwLzcAL3BhaXJlZDEwLzcAL3NldDMxMC83ADEuNwBncmV5NgBncmF5NgBceDYAXHhGNgBceEU2AFx4RDYAXHhDNgBceEI2AFx4QTYAZ3JleTk2AGdyYXk5NgBceDk2AGdyZXk4NgBncmF5ODYAXHg4NgBncmV5NzYAZ3JheTc2AGdyZXk2NgBncmF5NjYAZ3JleTU2AGdyYXk1NgBncmV5NDYAZ3JheTQ2AGdyZXkzNgBncmF5MzYAZ3JleTI2AGdyYXkyNgBncmV5MTYAZ3JheTE2AFx4MTYAL3JkZ3k5LzYAL2J1cHU5LzYAL3JkcHU5LzYAL3B1YnU5LzYAL3lsZ25idTkvNgAvZ25idTkvNgAvcmR5bGJ1OS82AC9yZGJ1OS82AC9ncmV5czkvNgAvZ3JlZW5zOS82AC9ibHVlczkvNgAvcHVycGxlczkvNgAvb3JhbmdlczkvNgAvcmVkczkvNgAvcHVvcjkvNgAveWxvcmJyOS82AC9wdWJ1Z245LzYAL2J1Z245LzYAL3ByZ245LzYAL3JkeWxnbjkvNgAveWxnbjkvNgAvc3BlY3RyYWw5LzYAL3BpeWc5LzYAL2JyYmc5LzYAL3B1cmQ5LzYAL3lsb3JyZDkvNgAvb3JyZDkvNgAvcGFpcmVkOS82AC9zZXQzOS82AC9zZXQxOS82AC9wYXN0ZWwxOS82AC9yZGd5OC82AC9idXB1OC82AC9yZHB1OC82AC9wdWJ1OC82AC95bGduYnU4LzYAL2duYnU4LzYAL3JkeWxidTgvNgAvcmRidTgvNgAvYWNjZW50OC82AC9ncmV5czgvNgAvZ3JlZW5zOC82AC9ibHVlczgvNgAvcHVycGxlczgvNgAvb3JhbmdlczgvNgAvcmVkczgvNgAvcHVvcjgvNgAveWxvcmJyOC82AC9wdWJ1Z244LzYAL2J1Z244LzYAL3ByZ244LzYAL3JkeWxnbjgvNgAveWxnbjgvNgAvc3BlY3RyYWw4LzYAL3BpeWc4LzYAL2JyYmc4LzYAL3B1cmQ4LzYAL3lsb3JyZDgvNgAvb3JyZDgvNgAvcGFpcmVkOC82AC9zZXQzOC82AC9zZXQyOC82AC9wYXN0ZWwyOC82AC9kYXJrMjgvNgAvc2V0MTgvNgAvcGFzdGVsMTgvNgAvcmRneTcvNgAvYnVwdTcvNgAvcmRwdTcvNgAvcHVidTcvNgAveWxnbmJ1Ny82AC9nbmJ1Ny82AC9yZHlsYnU3LzYAL3JkYnU3LzYAL2FjY2VudDcvNgAvZ3JleXM3LzYAL2dyZWVuczcvNgAvYmx1ZXM3LzYAL3B1cnBsZXM3LzYAL29yYW5nZXM3LzYAL3JlZHM3LzYAL3B1b3I3LzYAL3lsb3JicjcvNgAvcHVidWduNy82AC9idWduNy82AC9wcmduNy82AC9yZHlsZ243LzYAL3lsZ243LzYAL3NwZWN0cmFsNy82AC9waXlnNy82AC9icmJnNy82AC9wdXJkNy82AC95bG9ycmQ3LzYAL29ycmQ3LzYAL3BhaXJlZDcvNgAvc2V0MzcvNgAvc2V0MjcvNgAvcGFzdGVsMjcvNgAvZGFyazI3LzYAL3NldDE3LzYAL3Bhc3RlbDE3LzYAL3JkZ3k2LzYAL2J1cHU2LzYAL3JkcHU2LzYAL3B1YnU2LzYAL3lsZ25idTYvNgAvZ25idTYvNgAvcmR5bGJ1Ni82AC9yZGJ1Ni82AC9hY2NlbnQ2LzYAL2dyZXlzNi82AC9ncmVlbnM2LzYAL2JsdWVzNi82AC9wdXJwbGVzNi82AC9vcmFuZ2VzNi82AC9yZWRzNi82AC9wdW9yNi82AC95bG9yYnI2LzYAL3B1YnVnbjYvNgAvYnVnbjYvNgAvcHJnbjYvNgAvcmR5bGduNi82AC95bGduNi82AC9zcGVjdHJhbDYvNgAvcGl5ZzYvNgAvYnJiZzYvNgAvcHVyZDYvNgAveWxvcnJkNi82AC9vcnJkNi82AC9wYWlyZWQ2LzYAL3NldDM2LzYAL3NldDI2LzYAL3Bhc3RlbDI2LzYAL2RhcmsyNi82AC9zZXQxNi82AC9wYXN0ZWwxNi82AC9wYWlyZWQxMi82AC9zZXQzMTIvNgAvcmRneTExLzYAL3JkeWxidTExLzYAL3JkYnUxMS82AC9wdW9yMTEvNgAvcHJnbjExLzYAL3JkeWxnbjExLzYAL3NwZWN0cmFsMTEvNgAvcGl5ZzExLzYAL2JyYmcxMS82AC9wYWlyZWQxMS82AC9zZXQzMTEvNgAvcmRneTEwLzYAL3JkeWxidTEwLzYAL3JkYnUxMC82AC9wdW9yMTAvNgAvcHJnbjEwLzYAL3JkeWxnbjEwLzYAL3NwZWN0cmFsMTAvNgAvcGl5ZzEwLzYAL2JyYmcxMC82AC9wYWlyZWQxMC82AC9zZXQzMTAvNgBncmV5NQBncmF5NQBceDUAYmlnNQBceEY1AFx4RTUAXHhENQBceEM1AFx4QjUAXHhBNQBncmV5OTUAZ3JheTk1AFx4OTUAZ3JleTg1AGdyYXk4NQBceDg1AGdyZXk3NQBncmF5NzUAZ3JleTY1AGdyYXk2NQBncmV5NTUAZ3JheTU1AGdyZXk0NQBncmF5NDUAZ3JleTM1AGdyYXkzNQBncmV5MjUAZ3JheTI1ADIwMjUxMjEzLjE5MjUAZ3JleTE1AGdyYXkxNQBceDE1AGdyYXkwNQAvcmRneTkvNQAvYnVwdTkvNQAvcmRwdTkvNQAvcHVidTkvNQAveWxnbmJ1OS81AC9nbmJ1OS81AC9yZHlsYnU5LzUAL3JkYnU5LzUAL2dyZXlzOS81AC9ncmVlbnM5LzUAL2JsdWVzOS81AC9wdXJwbGVzOS81AC9vcmFuZ2VzOS81AC9yZWRzOS81AC9wdW9yOS81AC95bG9yYnI5LzUAL3B1YnVnbjkvNQAvYnVnbjkvNQAvcHJnbjkvNQAvcmR5bGduOS81AC95bGduOS81AC9zcGVjdHJhbDkvNQAvcGl5ZzkvNQAvYnJiZzkvNQAvcHVyZDkvNQAveWxvcnJkOS81AC9vcnJkOS81AC9wYWlyZWQ5LzUAL3NldDM5LzUAL3NldDE5LzUAL3Bhc3RlbDE5LzUAL3JkZ3k4LzUAL2J1cHU4LzUAL3JkcHU4LzUAL3B1YnU4LzUAL3lsZ25idTgvNQAvZ25idTgvNQAvcmR5bGJ1OC81AC9yZGJ1OC81AC9hY2NlbnQ4LzUAL2dyZXlzOC81AC9ncmVlbnM4LzUAL2JsdWVzOC81AC9wdXJwbGVzOC81AC9vcmFuZ2VzOC81AC9yZWRzOC81AC9wdW9yOC81AC95bG9yYnI4LzUAL3B1YnVnbjgvNQAvYnVnbjgvNQAvcHJnbjgvNQAvcmR5bGduOC81AC95bGduOC81AC9zcGVjdHJhbDgvNQAvcGl5ZzgvNQAvYnJiZzgvNQAvcHVyZDgvNQAveWxvcnJkOC81AC9vcnJkOC81AC9wYWlyZWQ4LzUAL3NldDM4LzUAL3NldDI4LzUAL3Bhc3RlbDI4LzUAL2RhcmsyOC81AC9zZXQxOC81AC9wYXN0ZWwxOC81AC9yZGd5Ny81AC9idXB1Ny81AC9yZHB1Ny81AC9wdWJ1Ny81AC95bGduYnU3LzUAL2duYnU3LzUAL3JkeWxidTcvNQAvcmRidTcvNQAvYWNjZW50Ny81AC9ncmV5czcvNQAvZ3JlZW5zNy81AC9ibHVlczcvNQAvcHVycGxlczcvNQAvb3JhbmdlczcvNQAvcmVkczcvNQAvcHVvcjcvNQAveWxvcmJyNy81AC9wdWJ1Z243LzUAL2J1Z243LzUAL3ByZ243LzUAL3JkeWxnbjcvNQAveWxnbjcvNQAvc3BlY3RyYWw3LzUAL3BpeWc3LzUAL2JyYmc3LzUAL3B1cmQ3LzUAL3lsb3JyZDcvNQAvb3JyZDcvNQAvcGFpcmVkNy81AC9zZXQzNy81AC9zZXQyNy81AC9wYXN0ZWwyNy81AC9kYXJrMjcvNQAvc2V0MTcvNQAvcGFzdGVsMTcvNQAvcmRneTYvNQAvYnVwdTYvNQAvcmRwdTYvNQAvcHVidTYvNQAveWxnbmJ1Ni81AC9nbmJ1Ni81AC9yZHlsYnU2LzUAL3JkYnU2LzUAL2FjY2VudDYvNQAvZ3JleXM2LzUAL2dyZWVuczYvNQAvYmx1ZXM2LzUAL3B1cnBsZXM2LzUAL29yYW5nZXM2LzUAL3JlZHM2LzUAL3B1b3I2LzUAL3lsb3JicjYvNQAvcHVidWduNi81AC9idWduNi81AC9wcmduNi81AC9yZHlsZ242LzUAL3lsZ242LzUAL3NwZWN0cmFsNi81AC9waXlnNi81AC9icmJnNi81AC9wdXJkNi81AC95bG9ycmQ2LzUAL29ycmQ2LzUAL3BhaXJlZDYvNQAvc2V0MzYvNQAvc2V0MjYvNQAvcGFzdGVsMjYvNQAvZGFyazI2LzUAL3NldDE2LzUAL3Bhc3RlbDE2LzUAL3JkZ3k1LzUAL2J1cHU1LzUAL3JkcHU1LzUAL3B1YnU1LzUAL3lsZ25idTUvNQAvZ25idTUvNQAvcmR5bGJ1NS81AC9yZGJ1NS81AC9hY2NlbnQ1LzUAL2dyZXlzNS81AC9ncmVlbnM1LzUAL2JsdWVzNS81AC9wdXJwbGVzNS81AC9vcmFuZ2VzNS81AC9yZWRzNS81AC9wdW9yNS81AC95bG9yYnI1LzUAL3B1YnVnbjUvNQAvYnVnbjUvNQAvcHJnbjUvNQAvcmR5bGduNS81AC95bGduNS81AC9zcGVjdHJhbDUvNQAvcGl5ZzUvNQAvYnJiZzUvNQAvcHVyZDUvNQAveWxvcnJkNS81AC9vcnJkNS81AC9wYWlyZWQ1LzUAL3NldDM1LzUAL3NldDI1LzUAL3Bhc3RlbDI1LzUAL2RhcmsyNS81AC9zZXQxNS81AC9wYXN0ZWwxNS81AC9wYWlyZWQxMi81AC9zZXQzMTIvNQAvcmRneTExLzUAL3JkeWxidTExLzUAL3JkYnUxMS81AC9wdW9yMTEvNQAvcHJnbjExLzUAL3JkeWxnbjExLzUAL3NwZWN0cmFsMTEvNQAvcGl5ZzExLzUAL2JyYmcxMS81AC9wYWlyZWQxMS81AC9zZXQzMTEvNQAvcmRneTEwLzUAL3JkeWxidTEwLzUAL3JkYnUxMC81AC9wdW9yMTAvNQAvcHJnbjEwLzUAL3JkeWxnbjEwLzUAL3NwZWN0cmFsMTAvNQAvcGl5ZzEwLzUAL2JyYmcxMC81AC9wYWlyZWQxMC81AC9zZXQzMTAvNQBiaWctNQBCSUctNQAgLWRhc2ggNQBpdm9yeTQAZ3JleTQAZGFya3NsYXRlZ3JheTQAXHg0AHNub3c0AGxpZ2h0eWVsbG93NABob25leWRldzQAd2hlYXQ0AHRvbWF0bzQAcm9zeWJyb3duNABtYXJvb240AGxpZ2h0c2FsbW9uNABsZW1vbmNoaWZmb240AHNwcmluZ2dyZWVuNABkYXJrb2xpdmVncmVlbjQAcGFsZWdyZWVuNABkYXJrc2VhZ3JlZW40AGxpZ2h0Y3lhbjQAdGFuNABwbHVtNABzZWFzaGVsbDQAY29yYWw0AGhvdHBpbms0AGxpZ2h0cGluazQAZGVlcHBpbms0AGNvcm5zaWxrNABmaXJlYnJpY2s0AGtoYWtpNABsYXZlbmRlcmJsdXNoNABwZWFjaHB1ZmY0AGJpc3F1ZTQAbGlnaHRza3libHVlNABkZWVwc2t5Ymx1ZTQAbGlnaHRibHVlNABjYWRldGJsdWU0AGRvZGdlcmJsdWU0AGxpZ2h0c3RlZWxibHVlNAByb3lhbGJsdWU0AHNsYXRlYmx1ZTQAbmF2YWpvd2hpdGU0AGFudGlxdWV3aGl0ZTQAY2hvY29sYXRlNABjaGFydHJldXNlNABtaXN0eXJvc2U0AHBhbGV0dXJxdW9pc2U0AGF6dXJlNAB0aGVyZTQAYXF1YW1hcmluZTQAdGhpc3RsZTQAbWVkaXVtcHVycGxlNABkYXJrb3JhbmdlNABsaWdodGdvbGRlbnJvZDQAZGFya2dvbGRlbnJvZDQAYnVybHl3b29kNABnb2xkNABtZWRpdW1vcmNoaWQ0AGRhcmtvcmNoaWQ0AHBhbGV2aW9sZXRyZWQ0AGluZGlhbnJlZDQAb3JhbmdlcmVkNABvbGl2ZWRyYWI0AG1hZ2VudGE0AHNpZW5uYTQAXHhGNABceEU0AFx4RDQAXHhDNABceEI0AFx4QTQAZ3JleTk0AGdyYXk5NABceDk0AGdyZXk4NABncmF5ODQAXHg4NABncmV5NzQAZ3JheTc0AGdyZXk2NABncmF5NjQAZ3JleTU0AGdyYXk1NABncmV5NDQAZ3JheTQ0AGdyZXkzNABncmF5MzQAZnJhYzM0AGdyZXkyNABncmF5MjQAZ3JleTE0AGdyYXkxNABceDE0AGZyYWMxNAAvcmRneTkvNAAvYnVwdTkvNAAvcmRwdTkvNAAvcHVidTkvNAAveWxnbmJ1OS80AC9nbmJ1OS80AC9yZHlsYnU5LzQAL3JkYnU5LzQAL2dyZXlzOS80AC9ncmVlbnM5LzQAL2JsdWVzOS80AC9wdXJwbGVzOS80AC9vcmFuZ2VzOS80AC9yZWRzOS80AC9wdW9yOS80AC95bG9yYnI5LzQAL3B1YnVnbjkvNAAvYnVnbjkvNAAvcHJnbjkvNAAvcmR5bGduOS80AC95bGduOS80AC9zcGVjdHJhbDkvNAAvcGl5ZzkvNAAvYnJiZzkvNAAvcHVyZDkvNAAveWxvcnJkOS80AC9vcnJkOS80AC9wYWlyZWQ5LzQAL3NldDM5LzQAL3NldDE5LzQAL3Bhc3RlbDE5LzQAL3JkZ3k4LzQAL2J1cHU4LzQAL3JkcHU4LzQAL3B1YnU4LzQAL3lsZ25idTgvNAAvZ25idTgvNAAvcmR5bGJ1OC80AC9yZGJ1OC80AC9hY2NlbnQ4LzQAL2dyZXlzOC80AC9ncmVlbnM4LzQAL2JsdWVzOC80AC9wdXJwbGVzOC80AC9vcmFuZ2VzOC80AC9yZWRzOC80AC9wdW9yOC80AC95bG9yYnI4LzQAL3B1YnVnbjgvNAAvYnVnbjgvNAAvcHJnbjgvNAAvcmR5bGduOC80AC95bGduOC80AC9zcGVjdHJhbDgvNAAvcGl5ZzgvNAAvYnJiZzgvNAAvcHVyZDgvNAAveWxvcnJkOC80AC9vcnJkOC80AC9wYWlyZWQ4LzQAL3NldDM4LzQAL3NldDI4LzQAL3Bhc3RlbDI4LzQAL2RhcmsyOC80AC9zZXQxOC80AC9wYXN0ZWwxOC80AC9yZGd5Ny80AC9idXB1Ny80AC9yZHB1Ny80AC9wdWJ1Ny80AC95bGduYnU3LzQAL2duYnU3LzQAL3JkeWxidTcvNAAvcmRidTcvNAAvYWNjZW50Ny80AC9ncmV5czcvNAAvZ3JlZW5zNy80AC9ibHVlczcvNAAvcHVycGxlczcvNAAvb3JhbmdlczcvNAAvcmVkczcvNAAvcHVvcjcvNAAveWxvcmJyNy80AC9wdWJ1Z243LzQAL2J1Z243LzQAL3ByZ243LzQAL3JkeWxnbjcvNAAveWxnbjcvNAAvc3BlY3RyYWw3LzQAL3BpeWc3LzQAL2JyYmc3LzQAL3B1cmQ3LzQAL3lsb3JyZDcvNAAvb3JyZDcvNAAvcGFpcmVkNy80AC9zZXQzNy80AC9zZXQyNy80AC9wYXN0ZWwyNy80AC9kYXJrMjcvNAAvc2V0MTcvNAAvcGFzdGVsMTcvNAAvcmRneTYvNAAvYnVwdTYvNAAvcmRwdTYvNAAvcHVidTYvNAAveWxnbmJ1Ni80AC9nbmJ1Ni80AC9yZHlsYnU2LzQAL3JkYnU2LzQAL2FjY2VudDYvNAAvZ3JleXM2LzQAL2dyZWVuczYvNAAvYmx1ZXM2LzQAL3B1cnBsZXM2LzQAL29yYW5nZXM2LzQAL3JlZHM2LzQAL3B1b3I2LzQAL3lsb3JicjYvNAAvcHVidWduNi80AC9idWduNi80AC9wcmduNi80AC9yZHlsZ242LzQAL3lsZ242LzQAL3NwZWN0cmFsNi80AC9waXlnNi80AC9icmJnNi80AC9wdXJkNi80AC95bG9ycmQ2LzQAL29ycmQ2LzQAL3BhaXJlZDYvNAAvc2V0MzYvNAAvc2V0MjYvNAAvcGFzdGVsMjYvNAAvZGFyazI2LzQAL3NldDE2LzQAL3Bhc3RlbDE2LzQAL3JkZ3k1LzQAL2J1cHU1LzQAL3JkcHU1LzQAL3B1YnU1LzQAL3lsZ25idTUvNAAvZ25idTUvNAAvcmR5bGJ1NS80AC9yZGJ1NS80AC9hY2NlbnQ1LzQAL2dyZXlzNS80AC9ncmVlbnM1LzQAL2JsdWVzNS80AC9wdXJwbGVzNS80AC9vcmFuZ2VzNS80AC9yZWRzNS80AC9wdW9yNS80AC95bG9yYnI1LzQAL3B1YnVnbjUvNAAvYnVnbjUvNAAvcHJnbjUvNAAvcmR5bGduNS80AC95bGduNS80AC9zcGVjdHJhbDUvNAAvcGl5ZzUvNAAvYnJiZzUvNAAvcHVyZDUvNAAveWxvcnJkNS80AC9vcnJkNS80AC9wYWlyZWQ1LzQAL3NldDM1LzQAL3NldDI1LzQAL3Bhc3RlbDI1LzQAL2RhcmsyNS80AC9zZXQxNS80AC9wYXN0ZWwxNS80AC9yZGd5NC80AC9idXB1NC80AC9yZHB1NC80AC9wdWJ1NC80AC95bGduYnU0LzQAL2duYnU0LzQAL3JkeWxidTQvNAAvcmRidTQvNAAvYWNjZW50NC80AC9ncmV5czQvNAAvZ3JlZW5zNC80AC9ibHVlczQvNAAvcHVycGxlczQvNAAvb3JhbmdlczQvNAAvcmVkczQvNAAvcHVvcjQvNAAveWxvcmJyNC80AC9wdWJ1Z240LzQAL2J1Z240LzQAL3ByZ240LzQAL3JkeWxnbjQvNAAveWxnbjQvNAAvc3BlY3RyYWw0LzQAL3BpeWc0LzQAL2JyYmc0LzQAL3B1cmQ0LzQAL3lsb3JyZDQvNAAvb3JyZDQvNAAvcGFpcmVkNC80AC9zZXQzNC80AC9zZXQyNC80AC9wYXN0ZWwyNC80AC9kYXJrMjQvNAAvc2V0MTQvNAAvcGFzdGVsMTQvNAAvcGFpcmVkMTIvNAAvc2V0MzEyLzQAL3JkZ3kxMS80AC9yZHlsYnUxMS80AC9yZGJ1MTEvNAAvcHVvcjExLzQAL3ByZ24xMS80AC9yZHlsZ24xMS80AC9zcGVjdHJhbDExLzQAL3BpeWcxMS80AC9icmJnMTEvNAAvcGFpcmVkMTEvNAAvc2V0MzExLzQAL3JkZ3kxMC80AC9yZHlsYnUxMC80AC9yZGJ1MTAvNAAvcHVvcjEwLzQAL3ByZ24xMC80AC9yZHlsZ24xMC80AC9zcGVjdHJhbDEwLzQAL3BpeWcxMC80AC9icmJnMTAvNAAvcGFpcmVkMTAvNAAvc2V0MzEwLzQAMS40AG4gPj0gNABzaWRlcyA9PSA0AGl2b3J5MwBTcGFyc2VNYXRyaXhfbXVsdGlwbHkzAGdyZXkzAGRhcmtzbGF0ZWdyYXkzAFx4MwBzbm93MwBsaWdodHllbGxvdzMAaG9uZXlkZXczAHdoZWF0MwBzdXAzAHRvbWF0bzMAcm9zeWJyb3duMwBtYXJvb24zAGxpZ2h0c2FsbW9uMwBsZW1vbmNoaWZmb24zAHNwcmluZ2dyZWVuMwBkYXJrb2xpdmVncmVlbjMAcGFsZWdyZWVuMwBkYXJrc2VhZ3JlZW4zAGxpZ2h0Y3lhbjMAdGFuMwBwbHVtMwBzZWFzaGVsbDMAY29yYWwzAGhvdHBpbmszAGxpZ2h0cGluazMAZGVlcHBpbmszAGNvcm5zaWxrMwBmaXJlYnJpY2szAGtoYWtpMwBsYXZlbmRlcmJsdXNoMwBwZWFjaHB1ZmYzAGJpc3F1ZTMAbGlnaHRza3libHVlMwBkZWVwc2t5Ymx1ZTMAbGlnaHRibHVlMwBjYWRldGJsdWUzAGRvZGdlcmJsdWUzAGxpZ2h0c3RlZWxibHVlMwByb3lhbGJsdWUzAHNsYXRlYmx1ZTMAbmF2YWpvd2hpdGUzAGFudGlxdWV3aGl0ZTMAY2hvY29sYXRlMwBjaGFydHJldXNlMwBtaXN0eXJvc2UzAHBhbGV0dXJxdW9pc2UzAGF6dXJlMwBhcXVhbWFyaW5lMwB0aGlzdGxlMwBtZWRpdW1wdXJwbGUzAGRhcmtvcmFuZ2UzAGxpZ2h0Z29sZGVucm9kMwBkYXJrZ29sZGVucm9kMwBidXJseXdvb2QzAGdvbGQzAG1lZGl1bW9yY2hpZDMAZGFya29yY2hpZDMAcGFsZXZpb2xldHJlZDMAaW5kaWFucmVkMwBvcmFuZ2VyZWQzAG9saXZlZHJhYjMAbWFnZW50YTMAc2llbm5hMwBceEYzAFx4RTMAXHhEMwBceEMzAFx4QjMAXHhBMwBncmV5OTMAZ3JheTkzAFx4OTMAZ3JleTgzAGdyYXk4MwBceDgzAGdyZXk3MwBncmF5NzMAZ3JleTYzAGdyYXk2MwBncmV5NTMAZ3JheTUzAGdyZXk0MwBncmF5NDMAZ3JleTMzAGdyYXkzMwBncmV5MjMAZ3JheTIzAGdyZXkxMwBncmF5MTMAXHgxMwAvcmRneTkvMwAvYnVwdTkvMwAvcmRwdTkvMwAvcHVidTkvMwAveWxnbmJ1OS8zAC9nbmJ1OS8zAC9yZHlsYnU5LzMAL3JkYnU5LzMAL2dyZXlzOS8zAC9ncmVlbnM5LzMAL2JsdWVzOS8zAC9wdXJwbGVzOS8zAC9vcmFuZ2VzOS8zAC9yZWRzOS8zAC9wdW9yOS8zAC95bG9yYnI5LzMAL3B1YnVnbjkvMwAvYnVnbjkvMwAvcHJnbjkvMwAvcmR5bGduOS8zAC95bGduOS8zAC9zcGVjdHJhbDkvMwAvcGl5ZzkvMwAvYnJiZzkvMwAvcHVyZDkvMwAveWxvcnJkOS8zAC9vcnJkOS8zAC9wYWlyZWQ5LzMAL3NldDM5LzMAL3NldDE5LzMAL3Bhc3RlbDE5LzMAL3JkZ3k4LzMAL2J1cHU4LzMAL3JkcHU4LzMAL3B1YnU4LzMAL3lsZ25idTgvMwAvZ25idTgvMwAvcmR5bGJ1OC8zAC9yZGJ1OC8zAC9hY2NlbnQ4LzMAL2dyZXlzOC8zAC9ncmVlbnM4LzMAL2JsdWVzOC8zAC9wdXJwbGVzOC8zAC9vcmFuZ2VzOC8zAC9yZWRzOC8zAC9wdW9yOC8zAC95bG9yYnI4LzMAL3B1YnVnbjgvMwAvYnVnbjgvMwAvcHJnbjgvMwAvcmR5bGduOC8zAC95bGduOC8zAC9zcGVjdHJhbDgvMwAvcGl5ZzgvMwAvYnJiZzgvMwAvcHVyZDgvMwAveWxvcnJkOC8zAC9vcnJkOC8zAC9wYWlyZWQ4LzMAL3NldDM4LzMAL3NldDI4LzMAL3Bhc3RlbDI4LzMAL2RhcmsyOC8zAC9zZXQxOC8zAC9wYXN0ZWwxOC8zAC9yZGd5Ny8zAC9idXB1Ny8zAC9yZHB1Ny8zAC9wdWJ1Ny8zAC95bGduYnU3LzMAL2duYnU3LzMAL3JkeWxidTcvMwAvcmRidTcvMwAvYWNjZW50Ny8zAC9ncmV5czcvMwAvZ3JlZW5zNy8zAC9ibHVlczcvMwAvcHVycGxlczcvMwAvb3JhbmdlczcvMwAvcmVkczcvMwAvcHVvcjcvMwAveWxvcmJyNy8zAC9wdWJ1Z243LzMAL2J1Z243LzMAL3ByZ243LzMAL3JkeWxnbjcvMwAveWxnbjcvMwAvc3BlY3RyYWw3LzMAL3BpeWc3LzMAL2JyYmc3LzMAL3B1cmQ3LzMAL3lsb3JyZDcvMwAvb3JyZDcvMwAvcGFpcmVkNy8zAC9zZXQzNy8zAC9zZXQyNy8zAC9wYXN0ZWwyNy8zAC9kYXJrMjcvMwAvc2V0MTcvMwAvcGFzdGVsMTcvMwAvcmRneTYvMwAvYnVwdTYvMwAvcmRwdTYvMwAvcHVidTYvMwAveWxnbmJ1Ni8zAC9nbmJ1Ni8zAC9yZHlsYnU2LzMAL3JkYnU2LzMAL2FjY2VudDYvMwAvZ3JleXM2LzMAL2dyZWVuczYvMwAvYmx1ZXM2LzMAL3B1cnBsZXM2LzMAL29yYW5nZXM2LzMAL3JlZHM2LzMAL3B1b3I2LzMAL3lsb3JicjYvMwAvcHVidWduNi8zAC9idWduNi8zAC9wcmduNi8zAC9yZHlsZ242LzMAL3lsZ242LzMAL3NwZWN0cmFsNi8zAC9waXlnNi8zAC9icmJnNi8zAC9wdXJkNi8zAC95bG9ycmQ2LzMAL29ycmQ2LzMAL3BhaXJlZDYvMwAvc2V0MzYvMwAvc2V0MjYvMwAvcGFzdGVsMjYvMwAvZGFyazI2LzMAL3NldDE2LzMAL3Bhc3RlbDE2LzMAL3JkZ3k1LzMAL2J1cHU1LzMAL3JkcHU1LzMAL3B1YnU1LzMAL3lsZ25idTUvMwAvZ25idTUvMwAvcmR5bGJ1NS8zAC9yZGJ1NS8zAC9hY2NlbnQ1LzMAL2dyZXlzNS8zAC9ncmVlbnM1LzMAL2JsdWVzNS8zAC9wdXJwbGVzNS8zAC9vcmFuZ2VzNS8zAC9yZWRzNS8zAC9wdW9yNS8zAC95bG9yYnI1LzMAL3B1YnVnbjUvMwAvYnVnbjUvMwAvcHJnbjUvMwAvcmR5bGduNS8zAC95bGduNS8zAC9zcGVjdHJhbDUvMwAvcGl5ZzUvMwAvYnJiZzUvMwAvcHVyZDUvMwAveWxvcnJkNS8zAC9vcnJkNS8zAC9wYWlyZWQ1LzMAL3NldDM1LzMAL3NldDI1LzMAL3Bhc3RlbDI1LzMAL2RhcmsyNS8zAC9zZXQxNS8zAC9wYXN0ZWwxNS8zAC9yZGd5NC8zAC9idXB1NC8zAC9yZHB1NC8zAC9wdWJ1NC8zAC95bGduYnU0LzMAL2duYnU0LzMAL3JkeWxidTQvMwAvcmRidTQvMwAvYWNjZW50NC8zAC9ncmV5czQvMwAvZ3JlZW5zNC8zAC9ibHVlczQvMwAvcHVycGxlczQvMwAvb3JhbmdlczQvMwAvcmVkczQvMwAvcHVvcjQvMwAveWxvcmJyNC8zAC9wdWJ1Z240LzMAL2J1Z240LzMAL3ByZ240LzMAL3JkeWxnbjQvMwAveWxnbjQvMwAvc3BlY3RyYWw0LzMAL3BpeWc0LzMAL2JyYmc0LzMAL3B1cmQ0LzMAL3lsb3JyZDQvMwAvb3JyZDQvMwAvcGFpcmVkNC8zAC9zZXQzNC8zAC9zZXQyNC8zAC9wYXN0ZWwyNC8zAC9kYXJrMjQvMwAvc2V0MTQvMwAvcGFzdGVsMTQvMwAvcmRneTMvMwAvYnVwdTMvMwAvcmRwdTMvMwAvcHVidTMvMwAveWxnbmJ1My8zAC9nbmJ1My8zAC9yZHlsYnUzLzMAL3JkYnUzLzMAL2FjY2VudDMvMwAvZ3JleXMzLzMAL2dyZWVuczMvMwAvYmx1ZXMzLzMAL3B1cnBsZXMzLzMAL29yYW5nZXMzLzMAL3JlZHMzLzMAL3B1b3IzLzMAL3lsb3JicjMvMwAvcHVidWduMy8zAC9idWduMy8zAC9wcmduMy8zAC9yZHlsZ24zLzMAL3lsZ24zLzMAL3NwZWN0cmFsMy8zAC9waXlnMy8zAC9icmJnMy8zAC9wdXJkMy8zAC95bG9ycmQzLzMAL29ycmQzLzMAL3BhaXJlZDMvMwAvc2V0MzMvMwAvc2V0MjMvMwAvcGFzdGVsMjMvMwAvZGFyazIzLzMAL3NldDEzLzMAL3Bhc3RlbDEzLzMAL3BhaXJlZDEyLzMAL3NldDMxMi8zAC9yZGd5MTEvMwAvcmR5bGJ1MTEvMwAvcmRidTExLzMAL3B1b3IxMS8zAC9wcmduMTEvMwAvcmR5bGduMTEvMwAvc3BlY3RyYWwxMS8zAC9waXlnMTEvMwAvYnJiZzExLzMAL3BhaXJlZDExLzMAL3NldDMxMS8zAC9yZGd5MTAvMwAvcmR5bGJ1MTAvMwAvcmRidTEwLzMAL3B1b3IxMC8zAC9wcmduMTAvMwAvcmR5bGduMTAvMwAvc3BlY3RyYWwxMC8zAC9waXlnMTAvMwAvYnJiZzEwLzMAL3BhaXJlZDEwLzMAL3NldDMxMC8zAGl2b3J5MgBncmV5MgBkYXJrc2xhdGVncmF5MgBceDIAc25vdzIAbGlnaHR5ZWxsb3cyAGhvbmV5ZGV3MgBSVHJlZUluc2VydDIAd2hlYXQyAHN1cDIAbm9wMgB0b21hdG8yAHJvc3licm93bjIAbWFyb29uMgBsaWdodHNhbG1vbjIAbGVtb25jaGlmZm9uMgBzcHJpbmdncmVlbjIAZGFya29saXZlZ3JlZW4yAHBhbGVncmVlbjIAZGFya3NlYWdyZWVuMgBsaWdodGN5YW4yAHRhbjIAcGx1bTIAc2Vhc2hlbGwyAGNvcmFsMgBob3RwaW5rMgBsaWdodHBpbmsyAGRlZXBwaW5rMgBjb3Juc2lsazIAZmlyZWJyaWNrMgBraGFraTIAbGF2ZW5kZXJibHVzaDIAcGVhY2hwdWZmMgBicm9uemUyAGJpc3F1ZTIAbGlnaHRza3libHVlMgBkZWVwc2t5Ymx1ZTIAbGlnaHRibHVlMgBjYWRldGJsdWUyAGRvZGdlcmJsdWUyAGxpZ2h0c3RlZWxibHVlMgByb3lhbGJsdWUyAHNsYXRlYmx1ZTIAbmF2YWpvd2hpdGUyAGFudGlxdWV3aGl0ZTIAY2hvY29sYXRlMgBjaGFydHJldXNlMgBtaXN0eXJvc2UyAHBhbGV0dXJxdW9pc2UyAGF6dXJlMgBhcXVhbWFyaW5lMgB0aGlzdGxlMgBtZWRpdW1wdXJwbGUyAGRhcmtvcmFuZ2UyAGxpZ2h0Z29sZGVucm9kMgBkYXJrZ29sZGVucm9kMgBidXJseXdvb2QyAGdvbGQyAG1lZGl1bW9yY2hpZDIAZGFya29yY2hpZDIAcGFsZXZpb2xldHJlZDIAaW5kaWFucmVkMgBvcmFuZ2VyZWQyAG9saXZlZHJhYjIAbWFnZW50YTIAc2llbm5hMgBceEYyAFx4RTIAXHhEMgBceEMyAFx4QjIAXHhBMgBncmV5OTIAZ3JheTkyAFx4OTIAZ3JleTgyAGdyYXk4MgBceDgyAGdyZXk3MgBncmF5NzIAZ3JleTYyAGdyYXk2MgBncmV5NTIAZ3JheTUyAGdyZXk0MgBncmF5NDIAZ3JleTMyAGdyYXkzMgBncmV5MjIAZ3JheTIyAGdyZXkxMgBncmF5MTIAXHgxMgBmcmFjMTIAL3BhaXJlZDEyLzEyAC9zZXQzMTIvMTIAL3JkZ3k5LzIAL2J1cHU5LzIAL3JkcHU5LzIAL3B1YnU5LzIAL3lsZ25idTkvMgAvZ25idTkvMgAvcmR5bGJ1OS8yAC9yZGJ1OS8yAC9ncmV5czkvMgAvZ3JlZW5zOS8yAC9ibHVlczkvMgAvcHVycGxlczkvMgAvb3JhbmdlczkvMgAvcmVkczkvMgAvcHVvcjkvMgAveWxvcmJyOS8yAC9wdWJ1Z245LzIAL2J1Z245LzIAL3ByZ245LzIAL3JkeWxnbjkvMgAveWxnbjkvMgAvc3BlY3RyYWw5LzIAL3BpeWc5LzIAL2JyYmc5LzIAL3B1cmQ5LzIAL3lsb3JyZDkvMgAvb3JyZDkvMgAvcGFpcmVkOS8yAC9zZXQzOS8yAC9zZXQxOS8yAC9wYXN0ZWwxOS8yAC9yZGd5OC8yAC9idXB1OC8yAC9yZHB1OC8yAC9wdWJ1OC8yAC95bGduYnU4LzIAL2duYnU4LzIAL3JkeWxidTgvMgAvcmRidTgvMgAvYWNjZW50OC8yAC9ncmV5czgvMgAvZ3JlZW5zOC8yAC9ibHVlczgvMgAvcHVycGxlczgvMgAvb3JhbmdlczgvMgAvcmVkczgvMgAvcHVvcjgvMgAveWxvcmJyOC8yAC9wdWJ1Z244LzIAL2J1Z244LzIAL3ByZ244LzIAL3JkeWxnbjgvMgAveWxnbjgvMgAvc3BlY3RyYWw4LzIAL3BpeWc4LzIAL2JyYmc4LzIAL3B1cmQ4LzIAL3lsb3JyZDgvMgAvb3JyZDgvMgAvcGFpcmVkOC8yAC9zZXQzOC8yAC9zZXQyOC8yAC9wYXN0ZWwyOC8yAC9kYXJrMjgvMgAvc2V0MTgvMgAvcGFzdGVsMTgvMgAvcmRneTcvMgAvYnVwdTcvMgAvcmRwdTcvMgAvcHVidTcvMgAveWxnbmJ1Ny8yAC9nbmJ1Ny8yAC9yZHlsYnU3LzIAL3JkYnU3LzIAL2FjY2VudDcvMgAvZ3JleXM3LzIAL2dyZWVuczcvMgAvYmx1ZXM3LzIAL3B1cnBsZXM3LzIAL29yYW5nZXM3LzIAL3JlZHM3LzIAL3B1b3I3LzIAL3lsb3JicjcvMgAvcHVidWduNy8yAC9idWduNy8yAC9wcmduNy8yAC9yZHlsZ243LzIAL3lsZ243LzIAL3NwZWN0cmFsNy8yAC9waXlnNy8yAC9icmJnNy8yAC9wdXJkNy8yAC95bG9ycmQ3LzIAL29ycmQ3LzIAL3BhaXJlZDcvMgAvc2V0MzcvMgAvc2V0MjcvMgAvcGFzdGVsMjcvMgAvZGFyazI3LzIAL3NldDE3LzIAL3Bhc3RlbDE3LzIAL3JkZ3k2LzIAL2J1cHU2LzIAL3JkcHU2LzIAL3B1YnU2LzIAL3lsZ25idTYvMgAvZ25idTYvMgAvcmR5bGJ1Ni8yAC9yZGJ1Ni8yAC9hY2NlbnQ2LzIAL2dyZXlzNi8yAC9ncmVlbnM2LzIAL2JsdWVzNi8yAC9wdXJwbGVzNi8yAC9vcmFuZ2VzNi8yAC9yZWRzNi8yAC9wdW9yNi8yAC95bG9yYnI2LzIAL3B1YnVnbjYvMgAvYnVnbjYvMgAvcHJnbjYvMgAvcmR5bGduNi8yAC95bGduNi8yAC9zcGVjdHJhbDYvMgAvcGl5ZzYvMgAvYnJiZzYvMgAvcHVyZDYvMgAveWxvcnJkNi8yAC9vcnJkNi8yAC9wYWlyZWQ2LzIAL3NldDM2LzIAL3NldDI2LzIAL3Bhc3RlbDI2LzIAL2RhcmsyNi8yAC9zZXQxNi8yAC9wYXN0ZWwxNi8yAC9yZGd5NS8yAC9idXB1NS8yAC9yZHB1NS8yAC9wdWJ1NS8yAC95bGduYnU1LzIAL2duYnU1LzIAL3JkeWxidTUvMgAvcmRidTUvMgAvYWNjZW50NS8yAC9ncmV5czUvMgAvZ3JlZW5zNS8yAC9ibHVlczUvMgAvcHVycGxlczUvMgAvb3JhbmdlczUvMgAvcmVkczUvMgAvcHVvcjUvMgAveWxvcmJyNS8yAC9wdWJ1Z241LzIAL2J1Z241LzIAL3ByZ241LzIAL3JkeWxnbjUvMgAveWxnbjUvMgAvc3BlY3RyYWw1LzIAL3BpeWc1LzIAL2JyYmc1LzIAL3B1cmQ1LzIAL3lsb3JyZDUvMgAvb3JyZDUvMgAvcGFpcmVkNS8yAC9zZXQzNS8yAC9zZXQyNS8yAC9wYXN0ZWwyNS8yAC9kYXJrMjUvMgAvc2V0MTUvMgAvcGFzdGVsMTUvMgAvcmRneTQvMgAvYnVwdTQvMgAvcmRwdTQvMgAvcHVidTQvMgAveWxnbmJ1NC8yAC9nbmJ1NC8yAC9yZHlsYnU0LzIAL3JkYnU0LzIAL2FjY2VudDQvMgAvZ3JleXM0LzIAL2dyZWVuczQvMgAvYmx1ZXM0LzIAL3B1cnBsZXM0LzIAL29yYW5nZXM0LzIAL3JlZHM0LzIAL3B1b3I0LzIAL3lsb3JicjQvMgAvcHVidWduNC8yAC9idWduNC8yAC9wcmduNC8yAC9yZHlsZ240LzIAL3lsZ240LzIAL3NwZWN0cmFsNC8yAC9waXlnNC8yAC9icmJnNC8yAC9wdXJkNC8yAC95bG9ycmQ0LzIAL29ycmQ0LzIAL3BhaXJlZDQvMgAvc2V0MzQvMgAvc2V0MjQvMgAvcGFzdGVsMjQvMgAvZGFyazI0LzIAL3NldDE0LzIAL3Bhc3RlbDE0LzIAL3JkZ3kzLzIAL2J1cHUzLzIAL3JkcHUzLzIAL3B1YnUzLzIAL3lsZ25idTMvMgAvZ25idTMvMgAvcmR5bGJ1My8yAC9yZGJ1My8yAC9hY2NlbnQzLzIAL2dyZXlzMy8yAC9ncmVlbnMzLzIAL2JsdWVzMy8yAC9wdXJwbGVzMy8yAC9vcmFuZ2VzMy8yAC9yZWRzMy8yAC9wdW9yMy8yAC95bG9yYnIzLzIAL3B1YnVnbjMvMgAvYnVnbjMvMgAvcHJnbjMvMgAvcmR5bGduMy8yAC95bGduMy8yAC9zcGVjdHJhbDMvMgAvcGl5ZzMvMgAvYnJiZzMvMgAvcHVyZDMvMgAveWxvcnJkMy8yAC9vcnJkMy8yAC9wYWlyZWQzLzIAL3NldDMzLzIAL3NldDIzLzIAL3Bhc3RlbDIzLzIAL2RhcmsyMy8yAC9zZXQxMy8yAC9wYXN0ZWwxMy8yAC9wYWlyZWQxMi8yAC9zZXQzMTIvMgAvcmRneTExLzIAL3JkeWxidTExLzIAL3JkYnUxMS8yAC9wdW9yMTEvMgAvcHJnbjExLzIAL3JkeWxnbjExLzIAL3NwZWN0cmFsMTEvMgAvcGl5ZzExLzIAL2JyYmcxMS8yAC9wYWlyZWQxMS8yAC9zZXQzMTEvMgAvcmRneTEwLzIAL3JkeWxidTEwLzIAL3JkYnUxMC8yAC9wdW9yMTAvMgAvcHJnbjEwLzIAL3JkeWxnbjEwLzIAL3NwZWN0cmFsMTAvMgAvcGl5ZzEwLzIAL2JyYmcxMC8yAC9wYWlyZWQxMC8yAC9zZXQzMTAvMgAxLjIAIC1kYXNoIDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQAxNC4xLjEAbGF0aW4tMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tODg1OS0xAGkgPj0gMQBxLT5uID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAwIHx8IHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMQBiei5zaXplICUgMyA9PSAxAExJU1RfU0laRSgmY3R4LT5UcmVlX2VkZ2UpID09IGN0eC0+Tl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT5sb2NhdGVkID4gQUdYQlVGX0lOTElORV9TSVpFXzAAXDAAVDAAXHhGMABceEUwAFx4RDAAXHhDMABceEIwAFx4QTAAZ3JleTkwAGdyYXk5MABceDkwAGdyZXk4MABncmF5ODAAXHg4MAAjODA4MDgwAGdyZXk3MABncmF5NzAAY2N3cm90ID09IDAgfHwgY2N3cm90ID09IDkwIHx8IGNjd3JvdCA9PSAxODAgfHwgY2N3cm90ID09IDI3MABjd3JvdCA9PSAwIHx8IGN3cm90ID09IDkwIHx8IGN3cm90ID09IDE4MCB8fCBjd3JvdCA9PSAyNzAAZ3JleTYwAGdyYXk2MABncmV5NTAAZ3JheTUwAGdyZXk0MABncmF5NDAAci53aWR0aCgpPDFlNDAAZ3JleTMwAGdyYXkzMAAjMzAzMDMwAGdyZXkyMABncmF5MjAAZ3JleTEwAGdyYXkxMABceDEwACMxMDEwMTAAL3BhaXJlZDEyLzEwAC9zZXQzMTIvMTAAL3JkZ3kxMS8xMAAvcmR5bGJ1MTEvMTAAL3JkYnUxMS8xMAAvcHVvcjExLzEwAC9wcmduMTEvMTAAL3JkeWxnbjExLzEwAC9zcGVjdHJhbDExLzEwAC9waXlnMTEvMTAAL2JyYmcxMS8xMAAvcGFpcmVkMTEvMTAAL3NldDMxMS8xMAAvcmRneTEwLzEwAC9yZHlsYnUxMC8xMAAvcmRidTEwLzEwAC9wdW9yMTAvMTAAL3ByZ24xMC8xMAAvcmR5bGduMTAvMTAAL3NwZWN0cmFsMTAvMTAAL3BpeWcxMC8xMAAvYnJiZzEwLzEwAC9wYWlyZWQxMC8xMAAvc2V0MzEwLzEwADEyMDAAZ3JleTEwMABncmF5MTAwAElTTy1JUi0xMDAAMTAwMDAAJSFQUy1BZG9iZS0zLjAAbnogPiAwAGxpc3QtPmNhcGFjaXR5ID4gMABkaXN0ID4gMABwYXRoY291bnQgPiAwAHdndCA+IDAAbnNpdGVzID4gMABzaWRlcyA+IDAAcnYgPT0gMCB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGlucG4gPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAG0gPiAwICYmIG4gPiAwAG5ld1RvdGFsID4gMAB3aWR0aCA+IDAAbGlzdC0+c2l6ZSA+IDAAZGljdC0+c2l6ZSA+IDAAc3BsLT5zaXplID4gMABzZWxmLT5zaXplID4gMABiei5zaXplID4gMABpbmNyZWFzZSA+IDAAYm91bmQgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAaW5kZXggPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMABvcmlnaW5hbCA+PSAwAE1heHJhbmsgPj0gMABQYWNrID49IDAAaWkgPCAxPDxkaW0gJiYgaWkgPj0gMAB3aWR0aCA+PSAwAGpkaWFnID49IDAAaWRpYWcgPj0gMABkID49IDAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IDAgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IDAAViA+PSAwAGFnbm5vZGVzKGdyYXBoKSA+PSAwAGFnbm5vZGVzKGcpID49IDAARURfdHJlZV9pbmRleChlKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABsaXN0LT5iYXNlICE9IE5VTEwgfHwgaW5kZXggPT0gMCB8fCBzdHJpZGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAY29zeCAhPSAwIHx8IHNpbnggIT0gMAByZXFfYWxpZ25tZW50ICE9IDAAbWVtY21wKCZzdHlsZSwgJihncmFwaHZpel9wb2x5Z29uX3N0eWxlX3QpezB9LCBzaXplb2Yoc3R5bGUpKSAhPSAwAHJlc3VsdCA9PSAoaW50KShzaXplIC0gMSkgfHwgcmVzdWx0IDwgMABtYXNrW2lpXSA8IDAATkRfaGVhcGluZGV4KHYpIDwgMABcLwBYMTEvAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhTElTVF9JU19FTVBUWShwbGlzdCkAZ3ZfbGlzdF9pc19jb250aWd1b3VzXygqbGlzdCkAb25lIDw9IExJU1RfU0laRShsaXN0KQBucCA8IExJU1RfU0laRShsaXN0KQBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhTElTVF9JU19FTVBUWSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQAhdXNlX3N0YWdlIHx8IHNpemUgPD0gc2l6ZW9mKHN0YWdlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHN0cmVxKG1vZGUsICJyIikgfHwgc3RyZXEobW9kZSwgInJiIikgfHwgc3RyZXEobW9kZSwgInciKSB8fCBzdHJlcShtb2RlLCAid2IiKQBwbmFtZSAhPSBOVUxMICYmICFzdHJlcShwbmFtZSwgIiIpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LnNpemUgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZsZCBieXRlcyAlc3wldSwgeG1scGFyc2UuYzolZCkgJSpzIgAgZm9udC1mYW1pbHk9IiVzIgAgZm9udC13ZWlnaHQ9IiVzIgAgZmlsbD0iJXMiACBmb250LXN0cmV0Y2g9IiVzIgAgZm9udC1zdHlsZT0iJXMiAGJhZCBlZGdlIGxlbiAiJXMiACBiYXNlbGluZS1zaGlmdD0ic3VwZXIiAGFneGJsZW4oeGIpIDw9IHNpemVvZih4Yi0+c3RvcmUpICYmICJhZ3hidWYgY29ycnVwdGlvbiIAY2VsbC5yb3cgPCB0YWJsZS0+cm93X2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAY2VsbC5jb2wgPCB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiAGZ1bGxfbGVuZ3RoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgbGVuZ3RoIgBmdWxsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgZnVsbCBiYXNlIHdpZHRoIgBub21pbmFsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgbm9taW5hbCBiYXNlIHdpZHRoIgAiIHdpZHRoPSIlZ3B4IiBoZWlnaHQ9IiVncHgiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHg9IiVnIiB5PSIlZyIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACBmb250LXNpemU9IiUuMmYiACBmaWxsLW9wYWNpdHk9IiVmIgA8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIgBpc2Zpbml0ZShtKSAmJiAiZWxsaXBzZSB0YW5nZW50IHNsb3BlIGlzIGluZmluaXRlIgAoeGItPmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPmxvY2F0ZWQgPD0gc2l6ZW9mKHhiLT5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBjZWxsLT5yb3cgKyBjZWxsLT5yb3dzcGFuIDw9IHRhYmxlLT5yb3dfY291bnQgJiYgImNlbGwgc3BhbnMgaGlnaGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAY2VsbC5yb3cgKyBjZWxsLnJvd3NwYW4gPD0gdGFibGUtPnJvd19jb3VudCAmJiAiY2VsbCBzcGFucyBoaWdoZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLT5jb2wgKyBjZWxsLT5jb2xzcGFuIDw9IHRhYmxlLT5jb2x1bW5fY291bnQgJiYgImNlbGwgc3BhbnMgd2lkZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLmNvbCArIGNlbGwuY29sc3BhbiA8PSB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJjZWxsIHNwYW5zIHdpZGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAb2xkX25tZW1iIDwgU0laRV9NQVggLyBzaXplICYmICJjbGFpbWVkIHByZXZpb3VzIGV4dGVudCBpcyB0b28gbGFyZ2UiAHRoZXRhID49IDAgJiYgdGhldGEgPD0gTV9QSSAmJiAidGhldGEgb3V0IG9mIHJhbmdlIgB0YWJsZS0+aGVpZ2h0cyA9PSBOVUxMICYmICJ0YWJsZSBoZWlnaHRzIGNvbXB1dGVkIHR3aWNlIgB0YWJsZS0+d2lkdGhzID09IE5VTEwgJiYgInRhYmxlIHdpZHRocyBjb21wdXRlZCB0d2ljZSIAIHRleHQtYW5jaG9yPSJlbmQiACBmb250LXdlaWdodD0iYm9sZCIAIGZvbnQtc3R5bGU9Iml0YWxpYyIAIGJhc2VsaW5lLXNoaWZ0PSJzdWIiAFwiAGxsZW4gPD0gSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB2aWV3Qm94PSIlZC4wMCAlZC4wMCAlZC4wMCAlZC4wMCIAIHRyYW5zZm9ybT0icm90YXRlKCVkICVnICVnKSIAYWd4YmxlbigmY3R4LT5TYnVmKSA9PSAwICYmICJwZW5kaW5nIHN0cmluZyBkYXRhIHRoYXQgd2FzIG5vdCBjb25zdW1lZCAobWlzc2luZyAiICJlbmRzdHIoKS9lbmRodG1sc3RyKCk/KSIAIGFsdD0iIgBDeWNsZSBFcnJvciEAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAPCEtLSBHZW5lcmF0ZWQgYnkgACVzJXp1IC0jJTAyeCUwMnglMDJ4JTAyeCAAJXMlenUgLSMlMDJ4JTAyeCUwMnggACVjICV6dSAAdCAldSAAIGNyZWF0ZSB0ZXh0IAB4TGF5b3V0IABkZWZhdWx0IABzdHJpY3QgACVzJXp1IC0lcyAAIC1zbW9vdGggYmV6aWVyIAAgbW92ZXRvIAAgdmVyc2lvbiAAIGNyZWF0ZSBwb2x5Z29uIAAgLXRleHQgeyVzfSAtZmlsbCAAIGNyZWF0ZSBvdmFsIAAgLXdpZHRoIABuZXdwYXRoIABncmFwaCAAcywlLjVnLCUuNWcgACUuNWcsJS41ZywlLjVnLCUuNWcgAGUsJS41ZywlLjVnIAAlZyAlZyAAJS4wM2xmIAAlLjNmIAAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICUuNGYgJWQgJS4xZiAlLjFmICUuMGYgJS4wZiAAIC1vdXRsaW5lIAAgY3JlYXRlIGxpbmUgAG5vZGUgACVkIABUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAFsgL1JlY3QgWyAAVCAAUyAAT1BFTiAASSAARiAARSAAQyAAIC0+IABSYW5rIHNlcGFyYXRpb24gPSAAVW5zYXRpc2ZpZWQgY29uc3RyYWludDogAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzOiAAJXM6IABTb2x2aW5nIG1vZGVsOiAAU2V0dGluZyB1cCBzcHJpbmcgbW9kZWw6IABjb252ZXJ0IGdyYXBoOiAAIFRpdGxlOiAAW0dyYXBodml6XSAlczolZDogJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiAAInRleHQiOiAAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6IAAibmFtZSI6IAAic3R5bGUiOiAAImZhY2UiOiAAMiAAPCEtLSAAIC0tIAAlIABfcCIgAGxfJWQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJXp1ICBLID0gJWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAogICAgADoJIAAgICAgJXN9CgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAI2RlZmF1bHQgeyBmaW5pc2ggeyBhbWJpZW50IDAuMSBkaWZmdXNlIDAuOSB9IH0KAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAgICAgdGV4dHVyZSBJbWFnZVRleHR1cmUgeyB1cmwgIiVzIiB9CgAgICAgfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBjb2xvciByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+ICog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aWR0aCBvciBoZWlnaHQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKSBkb2Vzbid0IGhhdmUgM24rMSBwb2ludHMKACAgZ2VuZXJhdGVkICVkIGNvbnN0cmFpbnRzCgBzcGxpbmVzIGFuZCBjbHVzdGVyIGVkZ2VzIG5vdCBzdXBwb3J0ZWQgLSB1c2luZyBsaW5lIHNlZ21lbnRzCgBvYmplY3RzCgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAZm9udCBuYW1lICVzIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIGFjY2VwdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAZm9udCBuYW1lICVzIGlzIGxvbmdlciB0aGFuIDI5IGNoYXJhY3RlcnMgd2hpY2ggbWF5IGJlIHJlamVjdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAY2Fubm90IGFsbG9jYXRlIHBzCgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBhcnJheSBwYWNraW5nOiAlcyAlenUgcm93cyAlenUgY29sdW1ucwoAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJyVzJyBpbiBsaW5lICVkIG9mICVzIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKAG91dCBvZiBtZW1vcnkgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzCgBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdHJ5aW5nIHRvIGFsbG9jYXRlICV6dSAqICV6dSBieXRlcwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoARm91bmQgJWQgRGlHLUNvTGEgYm91bmRhcmllcwoASW5jaGVzCgAoJTR6dSkgJTd6dSBub2RlcyAlN3p1IGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBjb3VsZCBub3QgY29uc3RydWN0IG9ic3RhY2xlcyAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBTY2FubmluZyBncmFwaCAlcywgJWQgbm9kZXMKAFdhcm5pbmc6IG5vIGhhcmQtY29kZWQgbWV0cmljcyBmb3IgJyVzJy4gIEZhbGxpbmcgYmFjayB0byAnVGltZXMnIG1ldHJpY3MKAGluIGVkZ2UgJXMlcyVzCgBVc2luZyAlczogJXM6JXMKAEZvcm1hdDogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGxheW91dCAlcwoALmZ0ICVzCgBiYWQgbGFiZWwgZm9ybWF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN3p1IGNvbXBvbmVudHMgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKACAgRWRnZSAlcyAlcyAlcwoAb3J0aG8gJXMgJXMKAHBvbHlsaW5lICVzICVzCgBzcGxpbmUgJXMgJXMKAHJlY3RhbmdsZSAoJS4wZiwlLjBmKSAoJS4wZiwlLjBmKSAlcyAlcwoAaW4gY2x1c3RlciAlcwoAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgY2x1c3RlciAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAVW5oYW5kbGVkIGFkanVzdCBvcHRpb24gJXMKAHJlcG9zaXRpb24gJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggeGxhYmVsICVzCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHRhaWwgbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwoALy8qKiogYmVnaW5fZ3JhcGggJXMKAE1heC4gaXRlcmF0aW9ucyAoJWQpIHJlYWNoZWQgb24gZ3JhcGggJXMKAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKACVzIHdoaWxlIG9wZW5pbmcgJXMKAGRlcml2ZSBncmFwaCBfZGdfJWQgb2YgJXMKACBdICAlenUgdHJ1ZSAlcwoAXSAgJWQgdHJ1ZSAlcwoAIF0gICV6dSBmYWxzZSAlcwoAXSAgJWQgZmFsc2UgJXMKAG1ha2VQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAG1ha2VBZGRQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgAgIG9jdHJlZSBzY2hlbWUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBjYW4ndCBmaW5kIGxpYnJhcnkgZmlsZSAlcwoAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY291bGRuJ3Qgb3BlbiBlcHNmIGZpbGUgJXMKAGNvdWxkbid0IHJlYWQgZnJvbSBlcHNmIGZpbGUgJXMKAGluIG5vZGUgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBpbiBsYWJlbCBvZiBub2RlICVzCgBlbmQgJXMKAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgB0cmllcyA9ICVkLCBtb2RlID0gJXMKAC8vKioqIGNvbW1lbnQ6ICVzCgBmYWlsZWQgdG8gcmVzZXJ2ZSAlenUgZWxlbWVudHMgb2Ygc2l6ZSAlenUgYnl0ZXM6ICVzCgBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgBkZWxhdW5heV90cmlhbmd1bGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpOiAlcwoAZ3ZwcmludGY6ICVzCgBuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgAlJSUlVGl0bGU6ICVzCgAlcyBUaXRsZTogJXMKACMgVGl0bGU6ICVzCgAvLyoqKiBiZWdpbl9ub2RlOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBsaXN0IGVsZW1lbnQgdHlwZSBpcyBub3QgYSBwb2ludGVyLCBidXQgYGZyZWVgIHVzZWQgYXMgZGVzdHJ1Y3RvcgoAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAGFkZF9zZWdtZW50OiBlcnJvcgoAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAMCAwIDAgZWRnZWNvbG9yCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAMCAwIDEgc2V0cmdiY29sb3IKADEgMCAwIHNldHJnYmNvbG9yCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWQgJWQgc2V0bGF5ZXIKAC8vKioqIGVuZF9sYXllcgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoATGV0dGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfY2x1c3RlcgoAcmVtb3ZpbmcgZW1wdHkgY2x1c3RlcgoAQ2VudGVyCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIHdpZHRoIG9mIHNwYWNlIGNoYXJhY3RlcgoAYmFzZSByZWZlcmVyCgAlJVBhZ2VUcmFpbGVyCgAlJVRyYWlsZXIKAC8vKioqIGJlemllcgoAIiVzIiB3YXMgbm90IGZvdW5kIGFzIGEgZmlsZSBvciBhcyBhIHNoYXBlIGxpYnJhcnkgbWVtYmVyCgBzdG9wCgAgY3VydmV0bwoAbmV3cGF0aCAlLjBmICUuMGYgbW92ZXRvCgAlLjBmICUuMGYgbGluZXRvCgAgbGF5b3V0PW5lYXRvCgBub2RlICVzIGluIGdyYXBoICVzIGhhcyBubyBwb3NpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgaGF2ZSBubyBtZWFuaW5nIGluIERXQiAyLjAsIHNldCBwYWdlIGJvdW5kYXJpZXMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAbWFqb3JpemF0aW9uCgAvLyoqKiBwb2x5Z29uCgBvdmVyZmxvdyB3aGVuIGNvbXB1dGluZyBlZGdlIHdlaWdodCBzdW0KAHNmZHAgb25seSBzdXBwb3J0cyBzdGFydD1yYW5kb20KAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGNsb3NlcGF0aCBmaWxsCgAgZWxsaXBzZV9wYXRoIGZpbGwKACAgJS4wZiAlLjBmIGNlbGwKACVmICVmICVmICVmIGNlbGwKAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAZWRnZXMgaW4gZ3JhcGggJXMgaGF2ZSBubyBsZW4gYXR0cmlidXRlLiBIZW5jZSwgdGhlIG1kcyBtb2RlbAoAY2lyY3VpdCBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG1kcyBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG5vZGUgJyVzJywgZ3JhcGggJyVzJyBzaXplIHRvbyBzbWFsbCBmb3IgbGFiZWwKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAIHNldGxpbmV3aWR0aAoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgAvLyoqKiBlbmRfZ3JhcGgKAGxheW91dCBhdHRyaWJ1dGUgaXMgaW52YWxpZCBleGNlcHQgb24gdGhlIHJvb3QgZ3JhcGgKAGluIGNoZWNrcGF0aCwgYm94ZXMgJXp1IGFuZCAlenUgZG9uJ3QgdG91Y2gKAG1lcmdlX29uZXdheSBnbGl0Y2gKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgBOb2RlIG5vdCBhZGphY2VudCB0byBjZWxsIC0tIEFib3J0aW5nCgBpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAGxhYmVsX3NjaGVtZSA9ICVkID4gNCA6IGlnbm9yaW5nCgBndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAEFycm93IHR5cGUgIiVzIiB1bmtub3duIC0gaWdub3JpbmcKAGZkcCBkb2VzIG5vdCBzdXBwb3J0IHN0YXJ0PXNlbGYgLSBpZ25vcmluZwoAJXMgYXR0cmlidXRlIHZhbHVlIG11c3QgYmUgMSBvciAyIC0gaWdub3JpbmcKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBiYlslc10gJS41ZyAlLjVnICUuNWcgJS41ZwoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAfSBiaW5kIGRlZgoALlBTICUuNWYgJS41ZgoAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAICBiZWF1dGlmeV9sZWF2ZXMgJWQgbm9kZSB3ZWlnaHRzICVkIHJvdGF0aW9uICUuMDNmCgAgIHJlcHVsc2l2ZSBleHBvbmVudDogJS4wM2YKACAgSyA6ICUuMDNmIEMgOiAlLjAzZgoAJXMgJS4zZgoACmludGVyc2VjdGlvbiBhdCAlLjNmICUuM2YKACAgICBzY2FsZSAlLjNmCgB0b3J1cyB7ICUuM2YsICUuM2YKACAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGNpcmNsZSAlcyAlLjBmLCUuMGYsJS4wZgoAcmVjdCAlcyAlLjBmLCUuMGYgJS4wZiwlLjBmCgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmCgAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICUuMGYgJS4wZiAlLjBmICUuMGYKAHBvc1slenVdICUuMGYgJS4wZgoALm5yIFNGICUuMGYKc2NhbGV0aGlja25lc3MgPSAlLjBmCgAlcyBzYXZlIHBvaW50IHNpemUgYW5kIGZvbnQKLm5yIC5TIFxuKC5zCi5uciBERiBcbiguZgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlLmYgJS5mICUuZiAlLmYKAGFkZGluZyAlenUgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGdhcD0lZiwlZgoAICBhc3BlY3QgJWYKAGEgJWYgYiAlZiBjICVmIGQgJWYgciAlZgoAbW9kZWwgJWQgc21hcnRfaW5pdCAlZCBzdHJlc3N3dCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgByZWMgJWYgJWYgJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACVzIDogJWYgJWYKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBtZHNNb2RlbDogZGVsdGEgPSAlZgoAIHIxICVmIHIyICVmCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAZ3NhdmUKACUlRW5kQ29tbWVudHMKc2F2ZQoAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJWcgJWcgc2V0X3NjYWxlICVkIHJvdGF0ZSAlZyAlZyB0cmFuc2xhdGUKACVmICVmIHRyYW5zbGF0ZQoAJWQgJWQgdHJhbnNsYXRlCgAvLyoqKiBlbGxpcHNlCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKACVzOiB2c25wcmludGYgZmFpbHVyZQoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAZW5kCnJlc3RvcmUKAGxheW91dCB3YXMgbm90IGRvbmUKAExheW91dCB3YXMgbm90IGRvbmUKAC8vKioqIHBvbHlsaW5lCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKACMgZW5kIG9mIEZJRyBmaWxlCgBTaW5nbGUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKACUuMGYgJS4wZiBsaW5ldG8gc3Ryb2tlCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIHN0cm9rZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX2VkZ2UKAGxvc3QgJXMgJXMgZWRnZQoAb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB2aXJ0dWFsIHdlaWdodCBvZiBlZGdlCgBhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAc2hvd3BhZ2UKACVkICVkICVkIGJlZ2lucGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX3BhZ2UKAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgBsYWJlbDogYXJlYSB0b28gbGFyZ2UgZm9yIHJ0cmVlCgAvLyoqKiBlbmRfbm9kZQoAVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgBjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgAlZiAlZiAlZiAlZiBub2RlCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgBpbiBjaGVja3BhdGgsIGJveCAlenUgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWxsZCBiZXN0X2Nyb3NzICVsbGQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAUGFyc2luZyBvZiAiJXMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICV6dSBub2RlcyAlenUgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgAgIG1heCBsZXZlbHMgJWQKAAklcyAlZAoAICBCYXJuZXMtSHV0dCBjb25zdGFudCAlLjAzZiB0b2xlcmFuY2UgICUuMDNmIG1heGl0ZXIgJWQKAGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgByZWJ1aWxkX3ZsaXN0czogbGVhZCBpcyBudWxsIGZvciByYW5rICVkCgByZWJ1aWxkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgAgIHNtb290aGluZyAlcyBvdmVybGFwICVkIGluaXRpYWxfc2NhbGluZyAlLjAzZiBkb19zaHJpbmtpbmcgJWQKACAgY29vbGluZyAlLjAzZiBzdGVwIHNpemUgICUuMDNmIGFkYXB0aXZlICVkCgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKACAgZWRnZV9sYWJlbGluZ19zY2hlbWUgJWQKAGFnZGljdG9mOiB1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bCBpcyAwLjMgaW4gMTB0aCBFZGl0aW9uIChmaWxsIDAgbWVhbnMgYmxhY2spLCAwLjUgaW4gZ3BpYyAoZmlsbCAwIG1lYW5zIHdoaXRlKSwgdW5kZWZpbmVkIGluIERXQiAyCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgBzZXR1cExhdGluMQoAXDAwMQoAJXMgICAgICAgIHRvbGVyYW5jZSAwLjAxCgAgICAgdG9sZXJhbmNlIDAuMQoAJSVQYWdlczogMQoAICAgICAgICBkaWZmdXNlQ29sb3IgMSAxIDEKADEwMC4wMAoAIEVQU0YtMy4wCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2YgQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gMAoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAE5vIGxpYnogc3VwcG9ydC4KAHR3b3BpOiB1c2Ugb2Ygd2VpZ2h0PTAgY3JlYXRlcyBkaXNjb25uZWN0ZWQgY29tcG9uZW50LgoAdGhlIGdyYXBoIGludG8gY29ubmVjdGVkIGNvbXBvbmVudHMuCgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG1pbmNyb3NzICVzOiAlbGxkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBFcnJvciBkdXJpbmcgY29udmVyc2lvbiB0byAiVVRGLTgiLiBRdWl0aW5nLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgAgIGluaXRDTWFqVlBTQyBkb25lOiAlZCBnbG9iYWwgY29uc3RyYWludHMgZ2VuZXJhdGVkLgoAVGhlIGNoYXJhY3RlciAnJWMnIGFwcGVhcnMgaW4gYm90aCB0aGUgbGF5ZXJzZXAgYW5kIGxheWVybGlzdHNlcCBhdHRyaWJ1dGVzIC0gbGF5ZXJsaXN0c2VwIGlnbm9yZWQuCgB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAZWRnZSAlcyAtPiAlcyA6IHNldCBtb3JlIHRoYW4gb25lIHNwbGluZS4gRmlyc3QgdXNlZCwgb3RoZXIgZHJvcHBlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0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ZWUgZG90KDEpKQoAZXJyb3IgaW4gY29sb3J4bGF0ZSgpCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAElsbGVnYWwgdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGU7IGZsb2F0IGV4cGVjdGVkIGFmdGVyICc7JwoAZGVmaW5lIGF0dHJzMCAlJSAlJTsgZGVmaW5lIHVuZmlsbGVkICUlICUlOyBkZWZpbmUgcm91bmRlZCAlJSAlJTsgZGVmaW5lIGRpYWdvbmFscyAlJSAlJQoAPHN2ZyB3aWR0aD0iJWRwdCIgaGVpZ2h0PSIlZHB0IgoAIyBkZXBlbmRlbmNpZXMgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAjIHR5cGUgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgBObyBvciBpbXByb3BlciBpbWFnZSBmaWxlPSIlcyIKAGZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgAgWyV6dV0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHVucmVjb2duaXplZCBhcGkgbmFtZSAiJXMiCgBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgBObyBvciBpbXByb3BlciBzaGFwZWZpbGU9IiVzIiBmb3Igbm9kZSAiJXMiCgBObyBvciBpbXByb3BlciBpbWFnZT0iJXMiIGZvciBub2RlICIlcyIKAG5vZGUgIiVzIiBpcyBjb250YWluZWQgaW4gdHdvIG5vbi1jb21wYXJhYmxlIGNsdXN0ZXJzICIlcyIgYW5kICIlcyIKAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgAgICIlcyIKACNpbmNsdWRlICJjb2xvcnMuaW5jIgojaW5jbHVkZSAidGV4dHVyZXMuaW5jIgojaW5jbHVkZSAic2hhcGVzLmluYyIKAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlbHUgCgAlcyBpbiBsaW5lICVsdSAKAHNjYWxlIGJ5ICVnLCVnIAoAY29tcHJlc3MgJWcgCgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgCJUE5HDQoaCgAlJSFQUy1BZG9iZS0yLjAKJSUlJUJvdW5kaW5nQm94OiAoYXRlbmQpCi9wb2ludCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIG5ld3BhdGgKICBYIFkgMyAwIDM2MCBhcmMgZmlsbAp9IGRlZgovY2VsbCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKL25vZGUgewogL3UgZXhjaCBkZWYKIC9yIGV4Y2ggZGVmCiAvZCBleGNoIGRlZgogL2wgZXhjaCBkZWYKIG5ld3BhdGggbCBkIG1vdmV0bwogciBkIGxpbmV0byByIHUgbGluZXRvIGwgdSBsaW5ldG8KIGNsb3NlcGF0aCBmaWxsCn0gZGVmCgoACQBBoYAFC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEHigwULlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBhIgFC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBB4okFC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHBiwULMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBgowFC6MECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgBcAFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwADAAAAA0AAAAOAAAADgBBsJAFC9EFEe7u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APX//wBPqgAAgf/uAOXu/wBmnAAAgf/NAMXN/wC1jwAAgf+LAIaL/wBSEQAA1HPu7oLu/wCzVAAA49fQ0CCQ/wBXuQAA68H//z6W/wDeqgAA68Du7jqM/wD1nAAA68DNzTJ4/wBLkAAA68CLiyJS/wC2CAAAAACAgICA/wAhNAAAVf+AAIAA/wDrBwAAAACAgICA/wCuMAAAAP+AgAAA/wDeTAAA1P+AgACA/wD5EgAAG0T19d6z/wDvtgAAG0X//+e6/wCjqAAAG0Tu7tiu/wDHmgAAG0TNzbqW/wAbjgAAG0OLi35m/wDDSAAAAAD//////wAlTgAAAAD19fX1/wC+CAAAAAC+vr6+/wBxNAAAVf//AP8A/wDzBwAAAAC+vr6+/wC4MAAA77mwsDBg/wATTQAAxN3woCDw/wCsCgAAKv////8A/wDUtgAAKv////8A/wCEqAAAKv/u7u4A/wC1mgAAKv/Nzc0A/wAJjgAAKv+Li4sA/wBdMwAAOMDNms0y/wBB4IIHCwM0dwIAQe6CBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////wACqgJEAwAEAASqBjkGcQGqAqoCAASDBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAAQ5AjkCgwSDBIMEjQNeB8cFVgVWBccF4wRzBMcFxwWqAh0DxwXjBB0HxwXHBXMExwVWBXME4wTHBccFjQfHBccF4wSqAjkCqgLBAwAEqgKNAwAEjQMABI0DqgIABAAEOQI5AgAEOQI5BgAEAAQABAAEqgIdAzkCAAQABMcFAAQABI0D1wOaAdcDVAT///////////////////////////////////////////////////////////////////////////////////////8AAqoCcQQABAAEAAiqBjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEcQfHBVYFxwXHBVYF4wQ5BjkGHQMABDkGVgWNB8cFOQbjBDkGxwVzBFYFxwXHBQAIxwXHBVYFqgI5AqoCpgQABKoCAARzBI0DcwSNA6oCAARzBDkCqgJzBDkCqgZzBAAEcwRzBI0DHQOqAnMEAATHBQAEAASNAycDwwEnAykE////////////////////////////////////////////////////////////////////////////////////////AAKqAlwDAAQABKoGOQa2AaoCqgIABGYFAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgJmBWYFZgUABFwH4wTjBFYFxwXjBOMExwXHBaoCjQNWBXMEqgZWBccF4wTHBeMEAARzBMcF4wSqBuMEcwRzBB0DOQIdA2ADAASqAgAEAASNAwAEjQM5AgAEAAQ5AjkCjQM5AscFAAQABAAEAAQdAx0DOQIABI0DVgWNA40DHQMzAzMCMwNUBP///////////////////////////////////////////////////////////////////////////////////////wACHQNxBAAEAASqBjkGOQKqAqoCAASPBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCjwSPBI8EAASoBlYFVgVWBccFVgVWBccFOQYdAwAEVgXjBB0HxwXHBeMExwVWBXME4wTHBVYFHQdWBeME4wSqAjkCqgKPBAAEqgIABAAEjQMABI0DqgIABHMEOQI5AgAEOQI5BnMEAAQABAAEHQMdAzkCcwSNA1YFAASNAx0DyQLDAckCjwT//1x3AgBB/ooHC4UIoED/////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT///////////////////////////////////////////////////////////////////////////////////////85AjkC1wJzBHMEHQdWBYcBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEOQI5AqwErASsBHMEHwhWBVYFxwXHBVYF4wQ5BscFOQIABFYFcwSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEOQI5AjkCwQNzBKoCcwRzBAAEcwRzBDkCcwRzBMcBxwEABMcBqgZzBHMEcwRzBKoCAAQ5AnMEAATHBQAEAAQABKwCFAKsAqwE////////////////////////////////////////////////////////////////////////////////////////OQKqAssDcwRzBB0HxwXnAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBKoCqgKsBKwErATjBM0HxwXHBccFxwVWBeMEOQbHBTkCcwTHBeMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBKoCOQKqAqwEcwSqAnME4wRzBOMEcwSqAuME4wQ5AjkCcwQ5Ah0H4wTjBOME4wQdA3MEqgLjBHMEOQZzBHMEAAQdAz0CHQOsBP//kHcCAEGOkwcLhQigQP/////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E//+4dwIAQZ2bBwuGCECPQAAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJXA+QC/wJ5Av8CnQJnAloC2AKxAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGZAjICZAPsAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//AAD///////////////////////////////8CAf///////////////////////////////////////////////wIB5ACIAVgCWAKiA7UC3QA9AT0BwgFYAuQAqAHkABsBWAJYAlgCWAJYAlgCWAJYAlgCWALkAOQAWAJYAlgCuwGyA9kCpAKhAuYCRwIkAtYC+QIBAUQBcQIfAlgD4wL/AnkC/wKdAmcCWgLYArACTQSKAlQCTQI7ARsBOwFYAvQB9AESAkcCzwFHAhQCTQFKAjgC6ADsAPQBKAFYAzgCLAJHAkcCZgHhAV4BMQIDAkkDDQICAs8BYAEJAWABWAL//wAA////////////////////////////////DwH///////////////////////////////////////////////8PAfgAwAFYAlgCsQPWAvMAZgFmAcUBWAL4ALIB+AA5AVgCWAJYAlgCWAJYAlgCWAJYAlgC+AD4AFgCWAJYAssBtgPoArACqAL6AlUCMgLgAgUDGgFiAZgCMgJlA+sCEQOMAhEDrgJ3Am0C4gLJAlkEoAJqAl0CYgE5AWIBWAL0AfQBIwJYAtgBWAIeAmwBXAJJAv8AAwEYAj8BbQNJAkACWAJYAogB6AGAAUMCDwJVAyICDgLaAYcBIAGHAVgC///AdwIAQa6jBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwS0BpEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG////////////////////////////////////////////////////////////////////////////////////////iwI1A64DtAYXBZoHPQYzAh8DHwMABLQGiwLjAosCsgIXBRcFFwUXBRcFFwUXBRcFFwUXBbICsgK0BrQGtAY/BAAIeQV9BZYFKQYOBZoEMwYEBlwCXAI/BXUE5wb8BUwG0wRMBo8FFAXjBNsFeQXpB3sF4wR7BR8DsgIfA7QGAAQABOcEFAVmBBQF7ATRAhQFEgU5AjkCogQ5AssHEgXlBBQFFAVKAysEIwMSBbwEiwa8BLwEMwQXBbICFwW0Bv///////////////////////////////////////////////////////////////////////////////////////8kCpgMrBJEFkQUECPoGcwKoA6gDLwS0BgoDUgMKA+wCkQWRBZEFkQWRBZEFkQWRBZEFkQUzAzMDtAa0BrQGpAQACDEGGQbfBaQGdwV3BZEGsgb6AvoCMwYZBfYHsgbNBt0FzQYpBsMFdQV/BjEG0wgrBssFzQWoA+wCqAO0BgAEAARmBboFvgS6BW0FewO6BbIFvgK+AlIFvgJWCLIFfwW6BboF8gPDBNMDsgU3BWQHKQU3BagEsgXsArIFtAb//8h3AgBBvqsHC4UIoEBmBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//ZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE////////////////////////////////////////////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//1HcCAEHOswcLhQigQP////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBDIEzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKga4BIcEyQToBEkEMwRpBTwFOgLQA5sEDQStBRsFZAV2BGgFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BPYDdQRdBPUCBARfBEgC7wIJBFwCpAZfBEsEdQR1BBwDPQMsA18E6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAu8CsASwBHkFpgXWAfAC8AJ1A7AE8ALwAvACHwOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsASBAyoGEQXDBOUEJAWNBKsEXwV4BToCQwTwBGwE9gVXBaAFsgSsBeMEFwTlBGwF+QQSB84E6AR7BDcD2AI3A7AEsASwBEMEpwQYBKUEmQT1AgQEvgRjAu8CYgRcAuAGuQSHBKkErARrA3IDLAO6BDgERQZrBEUEOgR4A7AEeAOwBP///////////////////////////////////////////////////////////////////////////////////////2kC8AKZAjIE2QPNBKYFRwHwAvAC8AIyBPAC8ALwAjIEMgQyBDIEMgQyBDIEMgQyBDIEMgTwAvACMgQyBDIE8AIqBuMEhwTJBOgESQQzBGkFPAU6AtADmwQNBBcGGwVkBVkEZAWoBNkDpQQwBbME0QZ0BJAEZwTwAtgC8AIyBDIEMgQ0BHUErgN1BEwENgMEBHUEdALvAgkEkAKkBl8ESwR1BHUEVQM9A1wDdATrA/QFAgTyA8wD8AIyBPACMgT///////////////////////////////////////////////////////////////////////////////////////9pAvACIAOwBLAE3AWmBWkC8ALwAnUDsATwAvAC8AItA7AEsASwBLAEsASwBLAEsASwBLAE8ALwArAEsASwBC0DKgbpBLgE5wQPBb8ErwRpBW0FOgL9AzMFOgRKBkgFngWrBCgG/QQDBHsFSwV3BWkHQQV4BeQE4gPSA+IDsASwBLAEvgS/BPEDvwRqBEgDSAR/BJ0CGgNRBI8CpAZ/BI8EygTKBJMDrAOBA3UEawQwBpsEgwRDBOIDsATiA7AE///gdwIAQd67BwuFCKBA/////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHgFfAWWBSoGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXgF6Qd7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL8BBAFMgLBArwEMgLIBxAF2wT8BPwEagMrBCcDEAW8BIwGvAS8BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBX4FmAWYBfoDvwSlA7MFMwXWB1oFNQXGBLAFWQSwBfAG////////////////////////////////////////////////////////////////////////////////////////0AImA6wDjAYWBZwI0AUmAqIDogMWBYwG6QKiA+kCogMWBRYFFgUWBRYFFgUWBRYFFgUWBaIDogOMBowGjAZdBAAIdgV8BZYFIAYPBZkENAYDBl4DowOLBXQEvgb8BUwG0wRMBpAFeAXuBNsFdgXsB3sF7AR7BaIDogOiA4wGFgUWBc4E/AQrBPwExATQAvkEEAUyAsECsgQyAskHEAXbBPwE/ARqAysEJwMQBboEjAa8BLoENAQUBaIDFAWMBv///////////////////////////////////////////////////////////////////////////////////////7wCOAOzBPAGsAUtCuYGqAJZBFkEsAXwBuQC1wPkAoQFsAWwBbAFsAWwBbAFsAWwBbAFsAU4AzgD8AbwBvAG7wS2BzYGGAbKBaQGdwU0BX0GswZeBHEEKwYZBZUHxgbNBt0FzQZCBq8FdAV/BhwGBwkcBuUFiQVZBIQFWQTwBrAFsAVYBZgFtQSYBVAFYQOYBbMFvAI5A14FvAJ3CLMFfAWYBZgF+gO/BKUDswUxBdYHWgU1BcYEsAVZBLAF8Ab//+h3AgBB7sMHC4UIoED/////////////////////////////////////////////////////////////////////////////////////FAIjAjUDKwWTBJYG1wXFAV4CXgJqBJME9gGTAiEC8AKTBJMEkwSTBJMEkwSTBJMEkwSTBCECIQKTBJMEkwRvAzEHEAUvBQwF1QVzBCEE0wXnBTsCIwLpBCcEOQcIBjsG0QQ7BvIEZARtBNMFwwRoB54EewSRBKIC8AKiAlYElgOeBHME5wTPA+cEfQS2AmIE6QQGAgYCMwQGAnEH6QTVBOcE5wREA9ED0wLpBAIEOQYxBAgEvgMIA2gECAOTBP///////////////////////////////////////////////////////////////////////////////////////xQCSgLHAysFkQQ1BwAGIQK2ArYCXASRBFICkwJIAk4DkQSRBJEEkQSRBJEEkQSRBJEEkQRIAlICkQSRBJEE0QMtB4UFYAUZBewFewRkBMsFHwamAqYCUAWFBIsHgQZeBgYFXgZIBWgEogQMBjMFvAdWBf4EogSmAk4DpgJCBEoD2wTVBBAFHQQQBboEGQOFBEIFcQJxAvYEcQLbB0IF9AQQBRAFogP6A3kDQgWNBNkGoASNBOcDJwNoBCcDkQT///////////////////////////////////////////////////////////////////////////////////////8UAhICFwMrBWgEWAZcBbwBSAJIAmoEaATsAX8CBgLNAmgEaARoBGgEaARoBGgEaARoBGgEBgIGAmgEaARoBGoDxwZxBMkErgRUBRcExwNqBW0FLwIjAnUEywOyBp4FwwWHBMMFjQQEBPwDaAViBNEGJwQGBD8ESgLNAkoCIwQnA28EhQSeBJoDngTyA4ECAgSeBAgCCALnAwgC+gaeBH0EngSeBCsDbQOYAp4EsgO8BdMDsgONA8sCaATLAmgE////////////////////////////////////////////////////////////////////////////////////////FAJKAqADKwVoBNkGqgUKArYCtgJcBGgEOQKTAkgCXgNoBGgEaARoBGgEaARoBGgEaARoBEgCSAJoBGgEaASsA9kGBgX2BOUEagVWBD8EhQWaBZMCpgLnBCUECgcKBtcFpATXBd8EPQQ/BIcFuAQnB9kEgwRKBKYCXgOmAjkEMwNvBMEEwwTdA8EEdQT8AlQE1QRgAmACiwRgAj0H1QSuBMMEwQReA8kDSAPVBBkETgY/BCcEpAPXAmgE1wJoBP//8HcCAEH+ywcLhQigQP/////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcEBQTFBIcEgAKAAiUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG9AXhBPQFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAECAR7BKIDmATeA5oCEwSoBFgCVgJJBEoCDAe6BFAEkgR6BEcDdQPDApoE+QPmBQoE8AONA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBW8EaQUvBfAC8AKgBaAFoAVjBLwHEQYPBrkFrAbFBV8FdQZOB5EDwwSJBnwFMAi3Bo8GnAWPBmEGMQV5BasGGQYDCXgG2wWEBZMDxgOTA6AFoAUABMQEKgVABE4FkwQlA50EcAXUAsUCDgXBAiAIhQUWBUMFMAUpBBoELgNqBYkE6Aa0BH8ENAQABBoDAASgBf///////////////////////////////////////////////////////////////////////////////////////+4BpgJLAyUF4QSKBq8FuQEAAwADxwMlBSgC/gIoAsAD6QRwA3gEagSFBDoEhwT5A8UEhwQSAxIDJQUlBSUF1ANuB14FOwUjBf4FOgXLBM0FhQYeAyQEjgXUBGsHIwbYBeEE2AWdBX0E8wQNBlUFzgevBewE0AQAA8ADAAMlBSUFAASVBG4EoQOaBMYDoQKVBIAEYQJUAjkESAIJB7gETASgBHEEsQNzA8cCmgROBJQGAgR6BI0DcQMAA3EDJQX///////////////////////////////////////////////////////////////////////////////////////8IAgMDFASgBSAFCQdlBicCkwOTA9sDoAWgAggDoALGA5wF6wMDBf8EMgXLBC8FiARpBS8F8ALwAqAFoAWgBWMEvAcRBhMGuQWsBsUFXwV1Bk4HmwPDBIkGfAVECKMGjwamBY8GYQY5BXkFqwYZBgMJawbbBYQFkwPGA5MDoAWgBQAESAUxBUkETQV1BAwDMgVnBe0C6wIhBdYCBAiFBRYFTQUzBUUEIwRWA3sF5gR4B6sEWwUjBAAEGgMABKAF///4dwIAQY7UBwvICqBA/////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhcDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgREBOwE6AOtAwwF/AQEAo0CKARdA9cGKgVMBSIEYgVYBK0D5gMiBYoEHgcnBOYDvwN0AhcDdAL8A/wDVALVAzQEYgM0BPsDcQLEAzQE1gHqAaMD1gFkBjQEOAQ0BDQEygIhA64CNASdA7gFdwOfAykDhAKvA4QC/AP//wAA////////////////////////////////AAD////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJwAw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEPAQLBecDrAMZBQwFIgKmAmAEYgP+BkUFaQVCBH0FgQTIA/YDOQW7BEAHaAQoBNMDmQJwA5kC/AP8A2cC8wNLBFkDSwQHBIgCywNLBPcBCwLXA/cBggZLBE0ESwRLBNgCMQPGAksEyQP2Ba0DygMuA8ACzQPAAvwD////////////////////////////////////////////////////////////////////////////////////////zwGbAjUD/AMOBLgFdQXEAW0CbQL8A/wD/wFzAgUCGgMOBA4EDgQOBA4EDgQOBA4EDgQOBCQCJAL8A/wD/AO1AycHoQRaBC4E7AToA60DDAX8BAQCjQIoBF0D1wYoBTwFIgRQBVgEngPmAyIFigQfBycE5gO/A3QCEwN0AvwD/ANUAh0EHQRUAx0E0gNxAh0EHQTWAeoBowPWAVQGHQQbBB0EHQS+Ah0DrgIdBJEDuAV3A5QDKQOEAq8DhAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwKCA/wDDgTVBaMF3gF+An4C/AP8AxACcwIjAnkDDgQOBA4EDgQOBA4EDgQOBA4EDgQ1AjUC/AP8A/wDtQMwB9kEfAQmBAsF5wOsAxkFDAUiAqYCYARi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AMg2AAD8AAAAfiwAABghAADDOgAAvgMAALJHAAD9AAAAzzIAAKUAAADDNgAA/wAAAAZgAAC2AwAAqToAAA0gAACtOgAADCAAAHU+AQAIAAAAAwAAAOI+AABAzwAACwAAAAYAAACFFQAAamgAAAIAAAABAAAA4ywAABF0AAAEAAAAAgAAABZCAAAABAAAAwAAAAQAAAAJQQAATM8AAAUAAAAFAAAAtUIAAAQEAAAEAAAABwAAAFsVAAC9NgAABQAAAAkAAAC/NgAAjmwAAAQAAAAKAAAAKUIAAGD5AQAEAAAADAAAAMkvAAAAAAEAAAHQ0dLT1NXW19jZAEGG8wcLCfC/AAAAAAAAAQBBmPMHCw1pbnZpcwAAZmlsbGVkAEGw8wcLGkkaAADVUAAA6DUAAJwLAABgeAAAlMUAAM+NAEHw8wcLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYD1BwtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcr1BwuzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQ9wcLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbj3BwsG//7///8DAEHk9wcLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4PgHCwEHAEHw+AcLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGw+QcLFf//////////////////////////PwBB0PkHCxX//////////////////////////w8AQfX5BwvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQ/AcLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGq/QcLZ/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93YAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAAEAQaH+BwsFFQoAAAkAQbj+BwvgARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHAgAgLEgIDBAUGBwgAAAkKCwwNDg8QEQBB3oAICwQSEwAUAEHwgAgLAhUWAEGOgQgLUgEBAQEBAQEBAQEBAQEB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sQQAAAZIAABWBQAA3D8AAAUSAAByMQAAOFAAACZLAAAKDgAABgUAAIUSAAAkMAAAsAkAAJYJAADgBAAAP1YAAB5WAABJUwAAyVcAALRXAAC6UwAAmlYAACoFAABYTAAAm1UAAJUXAAD/DwAARlUAALJWAADKUwAAdccAANO5AABaqwAAcZ0AAMeQAACMhQAAcH4AALV4AABQdAAANHEAANhuAACkbgAAb24AADNuAACkbQAAwWwAAGLHAADAuQAAR6sAAF6dAAC0kAAAeYUAAF1+AACieAAAPXQAACFxAADTbgAAn24AAGpuAAAubgAAn20AALxsAABPxwAArbkAADSrAABLnQAAoZAAAGaFAABKfgAAj3gAACp0AAAOcQAAzm4AAJpuAABlbgAAKW4AAJptAAC3bAAASscAAKi5AAAvqwAARp0AAJyQAABhhQAARX4AAIp4AAAldAAACXEAAMluAACVbgAAYG4AACRuAACVbQAAsmwAAEXHAACjuQAAKqsAAEGdAACXkAAAXIUAAEB+AACFeAAAIHQAAARxAADEbgAAkG4AAFtuAAAfbgAAkG0AAK1sAABAxwAAnrkAACWrAAA8nQAAkpAAAFeFAAA7fgAAgHgAABt0AAD/cAAAv24AAItuAABWbgAAGm4AAIRtAACobAAAO8cAAJm5AAAgqwAAN50AAI2QAABShQAANn4AAHt4AAAWdAAA+nAAALpuAACGbgAAUW4AAP9tAAB/bQAAo2wAADbHAACUuQAAG6sAADKdAACIkAAATYUAADF+AAB2eAAADHQAAPVwAAC1bgAAgW4AAExuAAD6bQAAem0AAIlsAAAwxwAAxbYAAHWoAACmmgAA+o0AAESFAAAtfgAAcngAAPNzAAA3EwAAZzUAAHluAAA9bgAA6x0AANBsAAB7bAAAc8gAADq6AADBqwAA2J0AADWRAAABhgAA134AABx5AAC3dAAApnEAAN1uAACpbgAAdG4AADhuAACpbQAAy2wAAMzlAABM4gAA3N8AADgUAgCw1QAArtUAAKzVAACq1QAASdUAAAPVAABczwAAWs8AAFjPAABVzwAAPs8AAJrOAACSzgAA6cYAAKe2AABXqAAAcZoAANyNAAA2hQAAH34AAGR4AADlcwAA53AAAA5wAADGbwAAxG8AALpvAADkbgAA4m4AAOBuAACzbgAAd24AADtuAACsbQAAzmwAAHlsAADqawAAxmsAAJ5rAACcawAAmWsAAHRoAABeaAAALWgAACtoAAAaaAAAGGgAAHZnAABaZwAAwWYAAL9mAAC9ZgAAu2YAAD1kAAAUZAAAEmQAAPdjAAD1YwAAYmIAAGBiAAD+YAAA/GAAAMJfAABCXwAA9VgAANVQAACDQwAAfkEAAGQ+AABcOwAAuToAAKc6AAByOQAAnzYAAOg1AADRLwAApC4AAEAeAAD8HQAASRoAADgTAABuDAAA6gsAAJwLAAANCgAALwkAAHkEAABEBAAAOwQAAC8EAAAJBAAAxmwAAAAAAAAIAK7/0QAKAK7/rv8LAK7/rv+u/67/rv+u/67/rv8FANEArv/RANEA0QDRANEA0QDRANEArv/7/67/DgDs/67/rv+u/67/0QDRANEA0QDRAA0AJQAMAEIAEABQABMAbQB7ABQAmAAPAKYAwwCu/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv8XAK7/dwCu/wcALgCu/yYArv8XABEAIwCu/w0Arv+u/67/rv86AK7/rv81AK7/rv+u/ygArv8HAK7/OwBFAK7/SACu/67/rv+u/67/AEGhtQgLwQYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAAAAAAAAAAACAgICAgIQDFkBAB9QCAMHEhMUVxYXCAtpDB8KBQwOKRErDy0QLzAgMgY0NRscHR4LDCEiIyQlJicoDBgZFwQKGxwaICoKISIjJCUmJygMCg5TCixYMVhYWFhYWAwbHA8uWDMhIiMkJSYnKBsc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X05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEGQ8wgLB0MuVVRGLTgAQajzCAugENCpAgBoqgIA+KoCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQfiDCQsMIQQAAAAAAAAAAC8CAEGYhAkLBjUERwRWBABBroQJCwKgBABBwoQJCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEHwhAkLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEGRhgkLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBy4YJCwEMAEHXhgkLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBhYcJCwEQAEGRhwkLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBv4cJCwESAEHLhwkLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBgogJCw4aAAAAGhoaAAAAAAAACQBBs4gJCwEUAEG/iAkLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABB7YgJCwEWAEH5iAkLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBxIkJCwILAgBB7IkJCwj//////////wBBsIoJC/UI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA9EcCAA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAABAAAAAAAAAAwSAIAGwIAABwCAAD8/////P///zBIAgAdAgAAHgIAAFhHAgBsRwIAAAAAAHhIAgAfAgAAIAIAAA8CAAAQAgAAIQIAACICAAATAgAAFAIAABUCAAAjAgAAFwIAACQCAAAZAgAAJQIAAGhzAgDIRwIAjEkCAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAQHMCAPxHAgBOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAAxHMCAEhIAgAAAAAAAQAAALxHAgAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAaHMCAIRIAgD0RwIATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAA4AAAAAAAAAChJAgAmAgAAJwIAAMj////I////KEkCACgCAAApAgAA1EgCAAxJAgAgSQIA6EgCADgAAAAAAAAAMEgCABsCAAAcAgAAyP///8j///8wSAIAHQIAAB4CAABocwIANEkCADBIAgBOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAAAAAAjEkCACoCAAArAgAAQHMCAJRJAgBOU3QzX18yOGlvc19iYXNlRQBBtJMJCy2A3igAgMhNAACndgAANJ4AgBLHAICf7gAAfhcBgFxAAYDpZwEAyJABAFW4AS4AQfCTCQvXAlN1bgBNb24AVHVlAFdlZABUaHUARnJpAFNhdABTdW5kYXkATW9uZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFRodXJzZGF5AEZyaWRheQBTYXR1cmRheQBKYW4ARmViAE1hcgBBcHIATWF5AEp1bgBKdWwAQXVnAFNlcABPY3QATm92AERlYwBKYW51YXJ5AEZlYnJ1YXJ5AE1hcmNoAEFwcmlsAE1heQBKdW5lAEp1bHkAQXVndXN0AFNlcHRlbWJlcgBPY3RvYmVyAE5vdmVtYmVyAERlY2VtYmVyAEFNAFBNACVhICViICVlICVUICVZACVtLyVkLyV5ACVIOiVNOiVTACVJOiVNOiVTICVwAAAAJW0vJWQvJXkAMDEyMzQ1Njc4OQAlYSAlYiAlZSAlVCAlWQAlSDolTTolUwAAAAAAXlt5WV0AXltuTl0AeWVzAG5vAABQTQIAQdSaCQv5AwEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAewAAAHwAAAB9AAAAfgAAAH8AQdCiCQsDYFMCAEHkpgkL+QMBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AEHgrgkLMTAxMjM0NTY3ODlhYmNkZWZBQkNERUZ4WCstcFBpSW5OACVJOiVNOiVTICVwJUg6JU0AQaCvCQuBASUAAABtAAAALwAAACUAAABkAAAALwAAACUAAAB5AAAAJQAAAFkAAAAtAAAAJQAAAG0AAAAtAAAAJQAAAGQAAAAlAAAASQAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAcAAAAAAAAAAlAAAASAAAADoAAAAlAAAATQBBsLAJC2YlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAAAAAAACQYQIAPwIAAEACAABBAgAAAAAAAPRhAgBCAgAAQwIAAEECAABEAgAARQIAAEYCAABHAgAASAIAAEkCAABKAgAASwIAQaCxCQv9AwQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAUCAAAFAAAABQAAAAUAAAAFAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAwIAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAKgEAACoBAAAqAQAAKgEAACoBAAAqAQAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAAAyAQAAMgEAADIBAAAyAQAAMgEAADIBAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAAIIAAACCAAAAggAAAIIAAAAEAEGkuQkL7QJMYQIATAIAAE0CAABBAgAATgIAAE8CAABQAgAAUQIAAFICAABTAgAAVAIAAAAAAAAoYgIAVQIAAFYCAABBAgAAVwIAAFgCAABZAgAAWgIAAFsCAAAAAAAATGICAFwCAABdAgAAQQIAAF4CAABfAgAAYAIAAGECAABiAgAAdAAAAHIAAAB1AAAAZQAAAAAAAABmAAAAYQAAAGwAAABzAAAAZQAAAAAAAAAlAAAAbQAAAC8AAAAlAAAAZAAAAC8AAAAlAAAAeQAAAAAAAAAlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAAAAAAAAlAAAAYQAAACAAAAAlAAAAYgAAACAAAAAlAAAAZAAAACAAAAAlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAWQAAAAAAAAAlAAAASQAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAcABBnLwJC8QbLF4CAGMCAABkAgAAQQIAAGhzAgA4XgIAfHICAE5TdDNfXzI2bG9jYWxlNWZhY2V0RQAAAAAAAACUXgIAYwIAAGUCAABBAgAAZgIAAGcCAABoAgAAaQIAAGoCAABrAgAAbAIAAG0CAABuAgAAbwIAAHACAABxAgAAxHMCALReAgAAAAAAAgAAACxeAgACAAAAyF4CAAIAAABOU3QzX18yNWN0eXBlSXdFRQAAAEBzAgDQXgIATlN0M19fMjEwY3R5cGVfYmFzZUUAAAAAAAAAABhfAgBjAgAAcgIAAEECAABzAgAAdAIAAHUCAAB2AgAAdwIAAHgCAAB5AgAAxHMCADhfAgAAAAAAAgAAACxeAgACAAAAXF8CAAIAAABOU3QzX18yN2NvZGVjdnRJY2MxMV9fbWJzdGF0ZV90RUUAAABAcwIAZF8CAE5TdDNfXzIxMmNvZGVjdnRfYmFzZUUAAAAAAACsXwIAYwIAAHoCAABBAgAAewIAAHwCAAB9AgAAfgIAAH8CAACAAgAAgQIAAMRzAgDMXwIAAAAAAAIAAAAsXgIAAgAAAFxfAgACAAAATlN0M19fMjdjb2RlY3Z0SURzYzExX19tYnN0YXRlX3RFRQAAAAAAACBgAgBjAgAAggIAAEECAACDAgAAhAIAAIUCAACGAgAAhwIAAIgCAACJAgAAxHMCAEBgAgAAAAAAAgAAACxeAgACAAAAXF8CAAIAAABOU3QzX18yN2NvZGVjdnRJRHNEdTExX19tYnN0YXRlX3RFRQAAAAAAlGACAGMCAACKAgAAQQIAAIsCAACMAgAAjQIAAI4CAACPAgAAkAIAAJECAADEcwIAtGACAAAAAAACAAAALF4CAAIAAABcXwIAAgAAAE5TdDNfXzI3Y29kZWN2dElEaWMxMV9fbWJzdGF0ZV90RUUAAAAAAAAIYQIAYwIAAJICAABBAgAAkwIAAJQCAACVAgAAlgIAAJcCAACYAgAAmQIAAMRzAgAoYQIAAAAAAAIAAAAsXgIAAgAAAFxfAgACAAAATlN0M19fMjdjb2RlY3Z0SURpRHUxMV9fbWJzdGF0ZV90RUUAxHMCAGxhAgAAAAAAAgAAACxeAgACAAAAXF8CAAIAAABOU3QzX18yN2NvZGVjdnRJd2MxMV9fbWJzdGF0ZV90RUUAAABocwIAnGECACxeAgBOU3QzX18yNmxvY2FsZTVfX2ltcEUAAABocwIAwGECACxeAgBOU3QzX18yN2NvbGxhdGVJY0VFAGhzAgDgYQIALF4CAE5TdDNfXzI3Y29sbGF0ZUl3RUUAxHMCABRiAgAAAAAAAgAAACxeAgACAAAAyF4CAAIAAABOU3QzX18yNWN0eXBlSWNFRQAAAGhzAgA0YgIALF4CAE5TdDNfXzI4bnVtcHVuY3RJY0VFAAAAAGhzAgBYYgIALF4CAE5TdDNfXzI4bnVtcHVuY3RJd0VFAAAAAAAAAAC0YQIAmgIAAJsCAABBAgAAnAIAAJ0CAACeAgAAAAAAANRhAgCfAgAAoAIAAEECAAChAgAAogIAAKMCAAAAAAAA8GICAGMCAACkAgAAQQIAAKUCAACmAgAApwIAAKgCAACpAgAAqgIAAKsCAACsAgAArQIAAK4CAACvAgAAxHMCABBjAgAAAAAAAgAAACxeAgACAAAAVGMCAAAAAABOU3QzX18yN251bV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAMRzAgBsYwIAAAAAAAEAAACEYwIAAAAAAE5TdDNfXzI5X19udW1fZ2V0SWNFRQAAAEBzAgCMYwIATlN0M19fMjE0X19udW1fZ2V0X2Jhc2VFAAAAAAAAAADoYwIAYwIAALACAABBAgAAsQIAALICAACzAgAAtAIAALUCAAC2AgAAtwIAALgCAAC5AgAAugIAALsCAADEcwIACGQCAAAAAAACAAAALF4CAAIAAABMZAIAAAAAAE5TdDNfXzI3bnVtX2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAxHMCAGRkAgAAAAAAAQAAAIRjAgAAAAAATlN0M19fMjlfX251bV9nZXRJd0VFAAAAAAAAALBkAgBjAgAAvAIAAEECAAC9AgAAvgIAAL8CAADAAgAAwQIAAMICAADDAgAAxAIAAMRzAgDQZAIAAAAAAAIAAAAsXgIAAgAAABRlAgAAAAAATlN0M19fMjdudW1fcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQDEcwIALGUCAAAAAAABAAAARGUCAAAAAABOU3QzX18yOV9fbnVtX3B1dEljRUUAAABAcwIATGUCAE5TdDNfXzIxNF9fbnVtX3B1dF9iYXNlRQAAAAAAAAAAnGUCAGMCAADFAgAAQQIAAMYCAADHAgAAyAIAAMkCAADKAgAAywIAAMwCAADNAgAAxHMCALxlAgAAAAAAAgAAACxeAgACAAAAAGYCAAAAAABOU3QzX18yN251bV9wdXRJd05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAMRzAgAYZgIAAAAAAAEAAABEZQIAAAAAAE5TdDNfXzI5X19udW1fcHV0SXdFRQAAAAAAAACEZgIAzgIAAM8CAABBAgAA0AIAANECAADSAgAA0wIAANQCAADVAgAA1gIAAPj///+EZgIA1wIAANgCAADZAgAA2gIAANsCAADcAgAA3QIAAMRzAgCsZgIAAAAAAAMAAAAsXgIAAgAAAPRmAgACAAAAEGcCAAAIAABOU3QzX18yOHRpbWVfZ2V0SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQAAAABAcwIA/GYCAE5TdDNfXzI5dGltZV9iYXNlRQAAQHMCABhnAgBOU3QzX18yMjBfX3RpbWVfZ2V0X2Nfc3RvcmFnZUljRUUAAAAAAAAAkGcCAN4CAADfAgAAQQIAAOACAADhAgAA4gIAAOMCAADkAgAA5QIAAOYCAAD4////kGcCAOcCAADoAgAA6QIAAOoCAADrAgAA7AIAAO0CAADEcwIAuGcCAAAAAAADAAAALF4CAAIAAAD0ZgIAAgAAAABoAgAACAAATlN0M19fMjh0aW1lX2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAAAAAQHMCAAhoAgBOU3QzX18yMjBfX3RpbWVfZ2V0X2Nfc3RvcmFnZUl3RUUAAAAAAAAARGgCAO4CAADvAgAAQQIAAPACAADEcwIAZGgCAAAAAAACAAAALF4CAAIAAACsaAIAAAgAAE5TdDNfXzI4dGltZV9wdXRJY05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAAAAAEBzAgC0aAIATlN0M19fMjEwX190aW1lX3B1dEUAAAAAAAAAAORoAgDxAgAA8gIAAEECAADzAgAAxHMCAARpAgAAAAAAAgAAACxeAgACAAAArGgCAAAIAABOU3QzX18yOHRpbWVfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAAAAAAAAhGkCAGMCAAD0AgAAQQIAAPUCAAD2AgAA9wIAAPgCAAD5AgAA+gIAAPsCAAD8AgAA/QIAAMRzAgCkaQIAAAAAAAIAAAAsXgIAAgAAAMBpAgACAAAATlN0M19fMjEwbW9uZXlwdW5jdEljTGIwRUVFAEBzAgDIaQIATlN0M19fMjEwbW9uZXlfYmFzZUUAAAAAAAAAABhqAgBjAgAA/gIAAEECAAD/AgAAAAMAAAEDAAACAwAAAwMAAAQDAAAFAwAABgMAAAcDAADEcwIAOGoCAAAAAAACAAAALF4CAAIAAADAaQIAAgAAAE5TdDNfXzIxMG1vbmV5cHVuY3RJY0xiMUVFRQAAAAAAjGoCAGMCAAAIAwAAQQIAAAkDAAAKAwAACwMAAAwDAAANAwAADgMAAA8DAAAQAwAAEQMAAMRzAgCsagIAAAAAAAIAAAAsXgIAAgAAAMBpAgACAAAATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIwRUVFAAAAAAAAawIAYwIAABIDAABBAgAAEwMAABQDAAAVAwAAFgMAABcDAAAYAwAAGQMAABoDAAAbAwAAxHMCACBrAgAAAAAAAgAAACxeAgACAAAAwGkCAAIAAABOU3QzX18yMTBtb25leXB1bmN0SXdMYjFFRUUAAAAAAFhrAgBjAgAAHAMAAEECAAAdAwAAHgMAAMRzAgB4awIAAAAAAAIAAAAsXgIAAgAAAMBrAgAAAAAATlN0M19fMjltb25leV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAAAAQHMCAMhrAgBOU3QzX18yMTFfX21vbmV5X2dldEljRUUAQenXCQuwDGwCAGMCAAAfAwAAQQIAACADAAAhAwAAxHMCACBsAgAAAAAAAgAAACxeAgACAAAAaGwCAAAAAABOU3QzX18yOW1vbmV5X2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAAABAcwIAcGwCAE5TdDNfXzIxMV9fbW9uZXlfZ2V0SXdFRQAAAAAAAAAAqGwCAGMCAAAiAwAAQQIAACMDAAAkAwAAxHMCAMhsAgAAAAAAAgAAACxeAgACAAAAEG0CAAAAAABOU3QzX18yOW1vbmV5X3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUAAABAcwIAGG0CAE5TdDNfXzIxMV9fbW9uZXlfcHV0SWNFRQAAAAAAAAAAUG0CAGMCAAAlAwAAQQIAACYDAAAnAwAAxHMCAHBtAgAAAAAAAgAAACxeAgACAAAAuG0CAAAAAABOU3QzX18yOW1vbmV5X3B1dEl3TlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUAAABAcwIAwG0CAE5TdDNfXzIxMV9fbW9uZXlfcHV0SXdFRQAAAAAAAAAA/G0CAGMCAAAoAwAAQQIAACkDAAAqAwAAKwMAAMRzAgAcbgIAAAAAAAIAAAAsXgIAAgAAADRuAgACAAAATlN0M19fMjhtZXNzYWdlc0ljRUUAAAAAQHMCADxuAgBOU3QzX18yMTNtZXNzYWdlc19iYXNlRQAAAAAAdG4CAGMCAAAsAwAAQQIAAC0DAAAuAwAALwMAAMRzAgCUbgIAAAAAAAIAAAAsXgIAAgAAADRuAgACAAAATlN0M19fMjhtZXNzYWdlc0l3RUUAAAAAUwAAAHUAAABuAAAAZAAAAGEAAAB5AAAAAAAAAE0AAABvAAAAbgAAAGQAAABhAAAAeQAAAAAAAABUAAAAdQAAAGUAAABzAAAAZAAAAGEAAAB5AAAAAAAAAFcAAABlAAAAZAAAAG4AAABlAAAAcwAAAGQAAABhAAAAeQAAAAAAAABUAAAAaAAAAHUAAAByAAAAcwAAAGQAAABhAAAAeQAAAAAAAABGAAAAcgAAAGkAAABkAAAAYQAAAHkAAAAAAAAAUwAAAGEAAAB0AAAAdQAAAHIAAABkAAAAYQAAAHkAAAAAAAAAUwAAAHUAAABuAAAAAAAAAE0AAABvAAAAbgAAAAAAAABUAAAAdQAAAGUAAAAAAAAAVwAAAGUAAABkAAAAAAAAAFQAAABoAAAAdQAAAAAAAABGAAAAcgAAAGkAAAAAAAAAUwAAAGEAAAB0AAAAAAAAAEoAAABhAAAAbgAAAHUAAABhAAAAcgAAAHkAAAAAAAAARgAAAGUAAABiAAAAcgAAAHUAAABhAAAAcgAAAHkAAAAAAAAATQAAAGEAAAByAAAAYwAAAGgAAAAAAAAAQQAAAHAAAAByAAAAaQAAAGwAAAAAAAAATQAAAGEAAAB5AAAAAAAAAEoAAAB1AAAAbgAAAGUAAAAAAAAASgAAAHUAAABsAAAAeQAAAAAAAABBAAAAdQAAAGcAAAB1AAAAcwAAAHQAAAAAAAAAUwAAAGUAAABwAAAAdAAAAGUAAABtAAAAYgAAAGUAAAByAAAAAAAAAE8AAABjAAAAdAAAAG8AAABiAAAAZQAAAHIAAAAAAAAATgAAAG8AAAB2AAAAZQAAAG0AAABiAAAAZQAAAHIAAAAAAAAARAAAAGUAAABjAAAAZQAAAG0AAABiAAAAZQAAAHIAAAAAAAAASgAAAGEAAABuAAAAAAAAAEYAAABlAAAAYgAAAAAAAABNAAAAYQAAAHIAAAAAAAAAQQAAAHAAAAByAAAAAAAAAEoAAAB1AAAAbgAAAAAAAABKAAAAdQAAAGwAAAAAAAAAQQAAAHUAAABnAAAAAAAAAFMAAABlAAAAcAAAAAAAAABPAAAAYwAAAHQAAAAAAAAATgAAAG8AAAB2AAAAAAAAAEQAAABlAAAAYwAAAAAAAABBAAAATQAAAAAAAABQAAAATQBBpOQJC7gGEGcCANcCAADYAgAA2QIAANoCAADbAgAA3AIAAN0CAAAAAAAAAGgCAOcCAADoAgAA6QIAAOoCAADrAgAA7AIAAO0CAAAAAAAAfHICADADAAAxAwAAMgMAAEBzAgCEcgIATlN0M19fMjE0X19zaGFyZWRfY291bnRFAAAAAMRzAgC4cgIAAAAAAAEAAAB8cgIAAAAAAE5TdDNfXzIxOV9fc2hhcmVkX3dlYWtfY291bnRFAAAAaHMCAORyAgBIdQIATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAAAAAaHMCABRzAgDYcgIATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAAAAAAAAAAhzAgAzAwAANAMAADUDAAA2AwAANwMAADgDAAA5AwAAOgMAAAAAAACIcwIAMwMAADsDAAA1AwAANgMAADcDAAA8AwAAPQMAAD4DAABocwIAlHMCAAhzAgBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UAAAAAAAAAAORzAgAzAwAAPwMAADUDAAA2AwAANwMAAEADAABBAwAAQgMAAGhzAgDwcwIACHMCAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAAAAAAAAAbHQCANgBAABDAwAARAMAAAAAAACIdAIA2AEAAEUDAABGAwAAAAAAAFR0AgDYAQAARwMAAEgDAABAcwIAXHQCAFN0OWV4Y2VwdGlvbgAAAABocwIAeHQCAFR0AgBTdDliYWRfYWxsb2MAAAAAaHMCAJR0AgBsdAIAU3QyMGJhZF9hcnJheV9uZXdfbGVuZ3RoAAAAAAAAAADYdAIA1wEAAEkDAABKAwAAAAAAACh1AgDIAQAASwMAAEwDAABocwIA5HQCAFR0AgBTdDExbG9naWNfZXJyb3IAAAAAAAh1AgDXAQAATQMAAEoDAABocwIAFHUCANh0AgBTdDEybGVuZ3RoX2Vycm9yAAAAAGhzAgA0dQIAVHQCAFN0MTNydW50aW1lX2Vycm9yAAAAQHMCAFB1AgBTdDl0eXBlX2luZm8AQfDqCQsVAQAAAAAAAAABAAAAAQAAAP////8yAEGW6wkLOfA/AAAAAAAA8L8AAAAAAADwv3h1AgACAAAABAAAAKx1AgACAAAACAAAALh1AgACAAAABAAAAMR1AgBB5OsJCwEEAEHw6wkLAQgAQfzrCQsZBQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwBBoOwJCwEgAEGs7AkLARAAQbjsCQsN/////wAAAAAAAAAAEABB0OwJCwEYAEHc7AkLAREAQejsCQsN/////wAAAAAAAAAAEQBBiO0JCxUTAAAAFAAAABUAAAAWAAAAFwAAABgAQbDtCQsBHABBvO0JCwEZAEHI7QkLASQAQdTtCQu2AhoAAAAJAAAACwAAAAgAAAAKAAAAAHYCAJB2AgAIAAAA/////wAAAAAAAAAAHwAAAAAAAABfQUdfZGF0YWRpY3QAAAAAFQAAAAAAAAAtOTk5OTk5OTk5OTk5OTk5Ljk5AH8XAAD4NAAA3jQAAAFCAADxQQAA7DQAAHAXAAC+FQAA+U0AAAAAAADhYAAACzkAAEMQAAArFgAAHBYAAEovAAAmBwAAERYAAEpgAACoFQAAJgcAAEovAAAAAAAASxoAALMcAAD/CgAAJy8AACsbAABBLwAAMi8AAEFLAABUUgAAAAAAAOkuAAAAAAAABhYAAAAAAACTYAAACxkAAAAAAABcZwAAWREAAAAAAABzYAAAAAAAADQWAAAAAAAArmAAAAAAAADOOgAAAAAAAJQ5AACOawAAjzkAQZTwCQsGBAAAAAtCAEGk8AkLLlRFAACOawAAjzkAAAAAAABMRQAABQAAAAtCAAAAAAAA7VkAAAw7AACOawAA+joAQdzwCQs+BgAAAAtCAAB8UgAAAAAAAGtFAACOawAA+joAAAAAAABMRQAABwAAAAtCAAB8UgAA7VkAAP86AABrawAA+joAQaTxCQs+CgAAAAVCAAB8UgAAAAAAACJaAABrawAA+joAAAAAAADtWQAACwAAAAVCAAB8UgAA7VkAAMEQAABrawAAmxAAQezxCQsGCAAAAAVCAEH88QkLKvRZAABrawAAmxAAAAAAAADtWQAACQAAAAVCAAAAAAAA7VkAALscAAC7HABBtPIJCwYMAAAAq1AAQcTyCQsKolIAALscAAB8UgBB2PIJCzoOAAAAq1AAAHxSAAAAAAAAn0UAALscAAB8UgAAAAAAAExFAAAPAAAAq1AAAHxSAADtWQAA4kUAALscAEGc8wkLGkxFAAANAAAAq1AAAAAAAADtWQAA62AAAOtgAEHE8wkLBhAAAAALQgBB1PMJCwrTUgAA62AAAHxSAEHo8wkLThIAAAALQgAAfFIAAAAAAACzRQAA62AAAHxSAAAAAAAATEUAABMAAAALQgAAfFIAAO1ZAAAdCgAA62AAAAAAAACLVAAAAAAAABQAAAALQgBBwPQJC3KBUgAA62AAAHxSAACLVAAAAAAAABYAAAALQgAAfFIAAAAAAACCRQAA62AAAHxSAACLVAAATEUAABcAAAALQgAAfFIAAO1ZAADJRQAA62AAAAAAAACLVAAATEUAABUAAAALQgAAAAAAAO1ZAADyRQAA62AAQbz1CQseTEUAABEAAAALQgAAAAAAAO1ZAAC9UgAAeWsAAHxSAEHk9QkLOhoAAAAFQgAAfFIAAAAAAABaWgAAeWsAAHxSAAAAAAAA7VkAABsAAAAFQgAAfFIAAO1ZAACTWgAAeWsAQaj2CQse7VkAABkAAAAFQgAAAAAAAO1ZAAAeNQAAeWsAAP00AEHQ9gkLBhgAAAAFQgBB4PYJCwqvUgAAqUoAAHxSAEH09gkLOh4AAAAFQgAAfFIAAAAAAABGWgAAqUoAAHxSAAAAAAAA7VkAAB8AAAAFQgAAfFIAAO1ZAACDWgAAqUoAQbj3CQse7VkAAB0AAAAFQgAAAAAAAO1ZAAAPNQAAqUoAAP00AEHg9wkLBhwAAAAFQgBB8PcJCwauNgAArjYAQYT4CQsGIAAAAFgGAEGU+AkLCpdSAACFFwAAfFIAQaj4CQs6AgAAAAVCAAB8UgAAAAAAADVaAACFFwAAfFIAAAAAAADtWQAAAwAAAAVCAAB8UgAA7VkAAHZaAACFFwBB7PgJCxrtWQAAAQAAAAVCAAAAAAAA7VkAAAM1AACFFwBBmPkJCwIFQgBBpPkJCyoIWgAAXGsAACM2AAAAAAAA7VkAACEAAAAFQgAAAAAAAO1ZAABsFAAAcBQAQdz5CQsGIgAAAFgGAEHs+QkLWQgAAAAEAAAAAAAAADgAAAAKAAAAOQAAAAgAAAD/////AAAAAAAAAAAKAAAAAAAAAAgAAAD/////AAAAAAAAAAA6AAAAAAAAAAgAAAD/////AAAAAAAAAAA7AEHY+gkLAQQAQYD7CQu3CDwAAABAAAAAQQAAAEIAAABDAAAARAAAAD4AAABAAAAAQQAAAEUAAAAAAAAARgAAADwAAABAAAAAQQAAAEIAAABDAAAARAAAAD0AAABHAAAASAAAAEkAAABKAAAASwAAAD8AAABMAAAAQQAAAE0AAAAAAAAATgAAADwAAABAAAAAQQAAAE8AAABDAAAARAAAAEgJAACAfQIAAIICAAAAAADvMQAAgH0CADCCAgAAAAAAeEkAAIB9AgBgggIAAAAAAGs4AACAfQIAYIICAAAAAADKTQAAgH0CAJCCAgAAAAAAzA8AAJh9AgCQggIAAAAAAPhAAACAfQIA0IICAAAAAACqTQAAgH0CAACDAgAAAAAAIUsAAIB9AgAwgwIAAAAAAHAMAACAfQIAMIMCAAAAAACSMgAAgH0CAFB9AgAAAAAAD1IAAIB9AgBggwIAAAAAABk2AACAfQIAkIMCAAAAAACENgAAgH0CAMCDAgAAAAAAV0kAAIB9AgDwgwIAAAAAAAgyAACAfQIAIIQCAAAAAAD3MQAAgH0CAFCEAgAAAAAA/zEAAIB9AgCAhAIAAAAAACUyAACAfQIAsIQCAAAAAABESAAAgH0CAOCEAgAAAAAArl8AAIB9AgAQhQIAAAAAADAdAACAfQIAQIUCAAAAAABbWAAAgH0CAHCFAgAAAAAA9Q8AAIB9AgCghQIAAAAAABIdAACwfQIA2IUCAAAAAAAzEgAAgH0CAACCAgAAAAAAQU0AAIB9AgAAggIAAAAAAKJKAACAfQIACIYCAAAAAAC8TQAAgH0CADiGAgAAAAAAHzIAAIB9AgBohgIAAAAAABEyAACAfQIAmIYCAAAAAABgTQAAgH0CAMiGAgAAAAAAFjYAAIB9AgD4hgIAAAAAAFRJAACAfQIAKIcCAAAAAACESwAAgH0CAFiHAgAAAAAADlIAAIB9AgCIhwIAAAAAAKFKAACAfQIAuIcCAAAAAADJTQAAgH0CAOiHAgAAAAAAHBwAAIB9AgAYiAIAAAAAAOEYAACAfQIASIgCAAAAAAD+GgAAgH0CAHiIAgAAAAAAUBoAAIB9AgCoiAIAAAAAAAkbAACAfQIA2IgCAAAAAABUSAAAgH0CAAiJAgAAAAAAql8AAIB9AgA4iQIAAAAAAG1IAACAfQIAaIkCAAAAAACeXwAAgH0CAJiJAgAAAAAASUgAAIB9AgDIiQIAAAAAAF1IAACAfQIA+IkCAAAAAABZQAAAgH0CACiKAgAAAAAAZ0AAAIB9AgBYigIAAAAAAHZAAACAfQIAiIoCAAAAAABQBwAAgH0CALiKAgAAAAAAjUoAAIB9AgDoigIAAAAAABEcAACAfQIAGIsCAAAAAAAWCgAAgH0CAEiLAgAAAAAADwoAAIB9AgB4iwIAAAAAABscAACAfQIAqIsCAAAAAAD3UAAAyH0CAEHAgwoLB/ZQAADIfQIAQdCDCgsHjkEAAOB9AgBB4IMKCwu6HQAA+H0CAOCLAgBBhIQKCwUBAAAABABBtIQKCwEBAEHkhAoLBQEAAAABAEGQhQoLCQEAAAABAAAAAQBBwIUKCweY+QEAn/kBAEHUhQoLBQEAAAABAEHohQoLCDMzMzMzM9O/AEGEhgoLBQEAAAADAEG4hgoLAQQAQeSGCgsFAQAAAAQAQfWGCgsDgEZAAEGUhwoLBQEAAAAEAEGohwoLCJqZmZmZmdm/AEHEhwoLBQEAAAAEAEHghwoLCDMzMzMzM+M/AEH0hwoLBQEAAAAFAEGIiAoLCHsUrkfheuS/AEGkiAoLBQEAAAAFAEHUiAoLBQEAAAAGAEGEiQoLBQEAAAAHAEG0iQoLBQEAAAAIAEHkiQoLBQEAAAAEAEGJigoLARAAQZSKCgsFAQAAAAQAQbmKCgsBIABBxIoKCwUBAAAABABB6YoKCwEwAEH0igoLBQEAAAAEAEGZiwoLAUAAQaSLCgsFAQAAAAQAQcmLCgsYUAAAAAAAAFAAAABRAAAAAAAAAAEAAAATAEGBjAoLEKABANCFAgABAAAAAQAAAAQAQbiMCgsJAQAAAAIAAAABAEHsjAoLBQIAAAAIAEGcjQoLBQMAAAAIAEHMjQoLBQEAAAADAEHdjQoLA4BmQABB/I0KCwUBAAAABABBjY4KCwuAZkCamZmZmZnZvwBBrI4KCwUBAAAABQBBvY4KCwuAZkB7FK5H4XrkvwBB3I4KCwUBAAAABABBgY8KCwEEAEGMjwoLBQEAAAAEAEGdjwoLA4BGQABBsI8KCxEYAAAAAAAAAAEAAAABAAAABABB4I8KCxEIAAAAAAAAAAEAAAABAAAAAQBBkJAKCwEYAEGckAoLBQEAAAAEAEHBkAoLAWAAQcyQCgsFAQAAAAQAQfGQCgsBcABB/JAKCwUBAAAABABBoZEKCwGAAEGskQoLBQEAAAAEAEHRkQoLAZAAQdyRCgsFAQAAAAQAQYGSCgsCEAEAQYySCgsFAQAAAAQAQbGSCgsCIAEAQbySCgsFAQAAAAQAQeGSCgsCMAEAQeySCgsFAQAAAAQAQZGTCgsCQAEAQZyTCgsFAQAAAAQAQcGTCgsCUAEAQcyTCgsFAQAAAAQAQfGTCgsBoABB/JMKCwUBAAAABABBoZQKCwGwAEGslAoLBQEAAAAEAEHRlAoLAcAAQdyUCgsFAQAAAAQAQYGVCgsB0ABBjJUKCwUBAAAABABBsZUKCwHgAEG8lQoLBQEAAAAEAEHhlQoLAfAAQeyVCgsFAQAAAAQAQZKWCgsBAQBBnJYKCwUBAAAABABBwZYKCwJgAQBBzJYKCwUBAAAABABB8ZYKCwKAAQBB/JYKCwUBAAAABABBoZcKCwJwAQBBrJcKCwUBAAAABABB0ZcKCxiQAQAAAAAAUgAAAFMAAAAAAAAAAQAAAAoAQYyYCgsu2IsCACc5AABQOQAAIUsAAAAAAABkAAAAZQAAAGYAAABkAAAAdVMAAIUVAAC6PgBBxJgKC6EDAQAAAAIAAAD/////yTIAAOMAAACMGwAA5AAAAP0cAADlAAAA+RwAAOYAAAA3QAAA5wAAAENAAADoAAAAjhsAAOkAAAD+FQAA6gAAAK9DAADrAAAAM00AAOwAAACxEAAA7QAAAKtCAADuAAAAaFMAAO8AAABLDgAA8AAAAEUTAADxAAAAthgAAPIAAACoTAAA8wAAAJARAAD0AAAAu0wAAPUAAAA6LQAA9QAAAMEyAAD2AAAA9TsAAPcAAADJMgAA+AAAAMgyAAD5AAAAjBsAAOQAAAD9HAAA5QAAADdAAADnAAAAQ0AAAOgAAACOGwAA6QAAANI0AAD6AAAAr0MAAOsAAAAzTQAA7AAAALEQAADtAAAAq0IAAO4AAABoUwAA7wAAAEsOAADwAAAAyjQAAPsAAAC2GAAA8gAAAKhMAADzAAAAkBEAAPQAAAC7TAAA9QAAADotAAD1AAAAwTIAAPYAAAD1OwAA9wAAAI4bAAD8AAAAwlAAAP0AAAAlRAAA/gAAAMkyAAD/AAAAGk4AAAABAAAJWQAAAQEAAAgAAAAQAEHwmwoLngEKAAAABQEAAAgAAAAIAAAAAAAAAAYBAAAKAAAABwEAABpoAAAIAQAA1RAAAAkBAADSEAAACQEAALsQAAAKAQAAuBAAAAoBAACMLgAACwEAAIkuAAALAQAAHzAAAAwBAAAcMAAADAEAAFETAAANAQAAHFgAAA0BAABKEwAADgEAAEsSAAAOAQAAzmwAAA8BAAAQAQAAEQEAABIBAAATAQBBmJ0KCwoUAQAAFQEAABYBAEGsnQoLKf////8AAAAACgAAAAAAAADYHwIA3x8CAAAAAABlBAAAcMUAAOWFAACAAEHgnQoLBiIBAAAjAQBB2J4KCwYiAQAAIwEAQfSeCgsCJAEAQYyfCgsKJQEAAAAAAAAmAQBBqJ8KCxYnAQAAAAAAACgBAAApAQAAKgEAACsBAEHUnwoLI4wPAAABAAAA2I4CADCRAgAEAAAAFQ8AAAEAAABQjwIAUJECAEGUoAoLmwE7DwAAAQAAAAAAAABwkQIAAAAAACYPAAABAAAAAAAAAHCRAgABAAAASw8AAAEAAAAAAAAAqJECAAIAAABVDwAAAQAAAAAAAABwkQIAAwAAAC0PAAABAAAAAAAAAHCRAgAEAAAAtg4AAAEAAAAAAAAAcJECAAUAAAANDwAAAQAAAAAAAABwkQIABgAAAAAPAAABAAAAAAAAAHCRAgBB1qEKC1zwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AIABByKIKCwsEAAAAAAAAAAAgwQBB6KIKCwEBAEGeowoLDlJAAAAAAAAAUkAAAAAEAEHWowoLGFJAAAAAAAAAUkAAAAAAAAAAACwBAAAtAQBB+KMKCwIuAQBBmKQKCw4vAQAAMAEAADEBAAAyAQBBuKQKCxozAQAANAEAADUBAAA2AQAANwEAADgBAAA5AQBB5KQKCw/0QAAAAQAAAOCRAgDgkgIAQZSlCgsP10AAAAEAAAAAAAAAAJMCAEHApQoLIpg6AABtRwAArTQAAH80AADyXwAA21UAAMNIAACsCgAAAhAAQe6lCgsUEEDAkgIACAAAAAEAAAAAAAAAAhAAQa2mCgsLgJZAAAAAAACAlkAAQdCmCgsGOwEAADwBAEGApwoLAj0BAEGwpwoLEwEAAABvLgAAAQAAADiTAgBwlAIAQeCnCgt3AQAAACYuAAABAAAAAAAAAJCUAgACAAAAOS4AAAEAAAAAAAAAyJQCAAAAAAAwLgAAAQAAAAAAAADIlAIAAwAAAPstAAABAAAAAAAAAMiUAgAAAAAAGi4AAAEAAAAAAAAAkJQCAAMAAAANLgAAAQAAAAAAAACQlAIAQfCoCgsDBJDDAEH+qAoLAhBAAEG+qQoLDVhAAAAAAAAAWEAAAAwAQfapCgswWEAAAAAAAABYQD4BAAA/AQAAQAEAAAAAAABBAQAAAAAAAEIBAABDAQAARAEAAEUBAEG4qgoLEkYBAABHAQAASAEAAEkBAABKAQBB2KoKCx5LAQAAAAAAAEwBAABNAQAATgEAAE8BAABQAQAAUQEAQYSrCgsPhRUAAAEAAAAAlQIACJYCAEG0qwoLN3IVAAABAAAAAAAAACiWAgABAAAAeBUAAAEAAAAAAAAAKJYCAAIAAABxFQAAAQAAAAAAAABglgIAQYCsCgsMRR4AAAAAAAAAIAMCAEGWrAoLAhBAAEGorAoLAWAAQbasCgsqQkAAAAAAAABCQAAAAAAAIINAAAAAAADAiEAAAAAAAABSQAAAAAAAAFJAAEHurAoLUEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQFMBAAAAAAAAVAEAAFUBAABWAQAAVwEAAFgBAABZAQAAWgEAAFsBAEHQrQoLFlwBAABdAQAAXgEAAF8BAABgAQAAYQEAQfCtCgsaYgEAAAAAAABjAQAAZAEAAGUBAABmAQAAZwEAQZSuCgsjuj4AAAEAAACYlgIA4JkCAAIAAADbSwAAAQAAAJiWAgDgmQIAQdSuCgsjfj4AAAEAAAAAAAAAAJoCAAIAAACvPgAAAQAAAAAAAAAAmgIAQZCvCgvTBF5HAACxSAAAzV8AAGRLAACHSgAAaU4AAEVFAACQIAIA6lEAAG1HAABCEQAAFjAAAGRRAABzRgAAYkkAADJJAACSOAAAgkYAAEM6AABkMAAArTQAAAFHAACfNAAAL1EAAHcIAAC9MwAArAcAACE7AADhXwAA9DMAAEROAAAyUwAAPlUAAOQwAABWNAAAPEcAAJkIAADOBwAACkoAADIRAADjOQAAJEYAAGoIAACfBwAAlkYAAHw6AACgSAAAgDMAAKZgAAAMLwAAf0gAAHdSAABVUQAAywgAAH80AACBCgAAAAgAAIoLAADHOQAAL1UAAGovAACMBgAAMDsAACAdAABvPAAArjMAADIyAABkRgAAgjgAAJA0AACSCgAAWwgAAJEzAACQBwAA1DkAANMwAAAvNAAAEkYAAIUIAAC6BwAAz0YAAHAKAAD+SwAACDQAACozAADyXwAAxzAAAE5LAAC/RgAAIFMAAMZMAABCNAAAJ0cAAMwzAAD1SQAAmlQAAFJGAACXNgAAj0kAAFoyAACPSAAAkQQAALpQAADvRAAAt18AAFROAACRVQAAQlMAAEJRAAAXNAAAHUoAAK9UAABgLQAAH0IAAAMMAAD6OQAAETYAAKZGAAAiTQAA21UAANgvAADyRgAABTAAAPQwAADnLwAAaDQAAFA3AABsYAAA9BsAADVGAABPRwAArAgAAOEHAABFCgAA4zMAAONGAADGNAAAHTkAALNMAAD1LgAAqSACADBKAABSEQAA+RIAAMNIAAAlTgAArAoAAF0zAAAAsMEAQe6zCgsUEECQlwIAlAAAAAEAAAAAAAAAQAEAQa60CgsYUkAAAAAAAABSQAAAAAAAAAAAaQEAAGoBAEG0tQoLS4swAAABAAAAOJoCAKCbAgABAAAA98YAAAEAAAA4mgIAoJsCAAIAAABtMAAAAQAAADiaAgCgmwIAAwAAAGwwAAABAAAAOJoCAKCbAgBBpLYKC0t7MAAAAQAAAAAAAADAmwIAAQAAAIUwAAABAAAAAAAAAMCbAgACAAAAdzAAAAEAAAAAAAAA+JsCAAMAAAB2MAAAAQAAAAAAAAD4mwIAQYS3CgsSCAAAAP////8AAAAAAAAAAGsBAEGhtwoLAiDBAEG4twoLAQQAQe63CgsOUkAAAAAAAABSQAAAAAQAQaa4CgsUUkAAAAAAAABSQGwBAAAAAAAAbQEAQei4CgsKbgEAAAAAAABvAQBBiLkKCxpwAQAAAAAAAHEBAAByAQAAcwEAAHQBAAB1AQBBtLkKCw9+OQAAAQAAADCcAgAInQIAQeS5CgsPdDkAAAEAAAAAAAAAKJ0CAEGJugoLAxAAAgBBlroKCwsQQAAAAAAAAAAABABB1roKCxhYQAAAAAAAAFhAAAAAAAAAAAB2AQAAdwEAQfi6CgsGeAEAAHkBAEG4uwoLGnoBAAAAAAAAewEAAHwBAAB9AQAAfgEAAH8BAEHkuwoLD+lZAAD/////YJ0CADieAgBBlLwKCw/lWQAA/////wAAAABYngIAQca8CgsCEEAAQYa9CgswUkAAAAAAAABSQIABAAAAAAAAgQEAAIIBAACDAQAAhAEAAIUBAACGAQAAhwEAAIgBAEHIvQoLDokBAACKAQAAiwEAAIwBAEHovQoLGo0BAAAAAAAAjgEAAI8BAACQAQAAkQEAAJIBAEGUvgoLD6gLAAABAAAAkJ4CAFihAgBBxL4KCw+kCwAAAQAAAAAAAAB4oQIAQfC+CgvsA2RLAACXWQAAmDoAAG1HAABCEQAApRQAAF9SAACFQwAAm6kAABYwAABzRgAA2h0AAHEcAAB1HAAAkjgAAIJGAACtNAAA9i8AAL0zAAD0MwAAMlMAANNMAAA8RwAAmQgAAM4HAAC5NAAACkoAAINRAABjHAAAgEkAAL8dAAB8OgAAfTwAAIAzAAB3UgAAVVEAAAaGAABsyAAA+oUAAF7IAADehQAASMgAANCFAAAryAAAwoUAAB3IAAC0hQAAD8gAAKaFAACJxwAAmIUAAG7HAACFhQAAW8cAAHKFAAB/NAAAZRwAAIEKAACcMwAAL1UAADA7AABkRgAA+0wAAM9GAABuUQAACDQAAPJfAAAwTgAAxzAAAE5LAAC/RgAAaTMAABpRAAAgUwAAQjQAACdHAADMMwAA9UkAAJpUAAB4UQAACE0AAPVgAABSRgAAkQQAAARGAACxRgAA7DkAAD1GAACyNAAAalIAAFROAACRVQAAQlMAABc0AAD6OQAAETYAAEYEAADbVQAACkcAAPQwAAAlEQAAaDQAAKJZAABsYAAA9BsAADVGAABPRwAAuDkAAOMzAADjRgAAWQcAAMY0AACzTAAAMEoAAPIvAAD2TAAAUhEAALNUAAD5EgAAw0gAAKwKAABdMwAAQCA+AwBB5sIKCxQQQHCfAgB6AAAAAQAAAAAAAAAAAQBBpsMKC80FUkAAAAAAAABSQJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAADwAAAI4+AAABAAAAsKECAAAAAAAQAAAAnz4AAAEAAACwoQIAAAAAABEAAACWPgAAAQAAALChAgAAAAAAEQAAAKc+AAABAAAAsKECAAAAAAARAAAAhj4AAAEAAACwoQIAAAAAABMAAADPQAAAAQAAALShAgAAAAAAFAAAAOhAAAABAAAAtKECAAAAAAAVAAAA30AAAAEAAAC0oQIAAAAAABUAAADwQAAAAQAAALShAgAAAAAAFQAAAMdAAAABAAAAtKECAAAAAAAWAAAAHDcAAAEAAAC4oQIAAAAAABcAAAAvNwAAAQAAALihAgAAAAAAGAAAACU3AAABAAAAuKECAAAAAAAYAAAAODcAAAEAAAC4oQIAAAAAABgAAAATNwAAAQAAALihAgAAAAAAGQAAAHEVAAABAAAAvKECAAAAAAAZAAAAchUAAAEAAAC8oQIAAAAAABoAAAB/FQAAAQAAAMChAgAAAAAACgAAAFIuAAABAAAAxKECAAAAAAALAAAAYy4AAAEAAADEoQIAAAAAAAwAAABaLgAAAQAAAMShAgAAAAAADAAAAGsuAAABAAAAxKECAAAAAAAMAAAASi4AAAEAAADEoQIAAAAAAA4AAAAGLgAAAQAAAMShAgAAAAAADgAAAAUuAAABAAAAxKECAAAAAAANAAAAQi4AAAEAAADEoQIAAAAAAAUAAABvDwAAAQAAAMShAgAAAAAABgAAAIAPAAABAAAAxKECAAAAAAAHAAAAdw8AAAEAAADEoQIAAAAAAAcAAACIDwAAAQAAAMShAgAAAAAABwAAAGcPAAABAAAAxKECAAAAAAAJAAAARA8AAAEAAADEoQIAAAAAAAkAAABDDwAAAQAAAMShAgAAAAAACAAAAF8PAAABAAAAxKECAEH8yAoLvwHbDgAAAQAAAMihAgAAAAAAAQAAAO4OAAABAAAAyKECAAAAAAACAAAA5A4AAAEAAADIoQIAAAAAAAIAAAD3DgAAAQAAAMihAgAAAAAAAgAAANIOAAABAAAAyKECAAAAAAAEAAAAwQ4AAAEAAADIoQIAAAAAAAQAAADADgAAAQAAAMihAgAAAAAAAwAAAMkOAAABAAAAyKECAAAAAAASAAAAfj4AAAEAAACwoQIAAAAAABsAAAB6OQAAAQAAAMyhAgBB4MoKC5cBAwAAABCQAgADAAAAkJICAAMAAADgkwIAAwAAALCVAgADAAAAUJcCAAMAAAAgmwIAAwAAAOCcAgADAAAAEJ4CAAMAAABAnwIAAAAAANCPAgAAAAAAYJICAAAAAACwkwIAAAAAAICVAgAAAAAAEJcCAAAAAACwmgIAAAAAALCcAgAAAAAA4J0CAAAAAAAQnwIABAAAANChAgBBgMwKCxGcSgAAYKUCABgBAABAAQAAuABBoMwKCxIcTAAAZzIAAP9PAADHCQAApDkAQcDMCgsaAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAoQEAQeTMCgsCogEAQfDMCgsCowEAQfzMCgspCAAAAAQAAAD/////AAAAAAAAAACoAQAAcQ8BADYYAQAIAAAAEAAAABgAQbDNCgsNqQEAAAgAAAAQAAAAGABByM0KCwmqAQAACAAAAAgAQdzNCgsNrAEAAK0BAAAIAAAAEABB9M0KCz+uAQAArwEAALABAACxAQAAAQEAALQBAAC1AQAAAAAAAL0BAAC+AQAAAQAAAAAAAACMDwAAAAAAABSnAgAcpwIAQdDOCgsHAQAAACCnAgBB4M4KCw2UDAAAUKcCAAgAAAAEAEH8zgoLjgHGAQAAAAAAALinAgDJAQAAygEAAMsBAADMAQAAAAAAALCnAgDNAQAAzgEAAM8BAADQAQAAQHMCABwjAgBocwIAIiMCALCnAgAAAAAA4KcCANIBAADTAQAA1AEAANUBAADWAQAAaHMCACsjAgCgcgIACAAAADAAAAAAAAAA4gEAAAoAAADjAQAA5AEAAOUBAEGU0AoL0wIIAAAADAAAAOgBAAAAAAAA6QEAADwAAAAAAAAAMzMzMzMz0z8AAAAAAAD4PwgAAAAEAAAAAAAAAO0BAAAKAAAA7gEAAPEBAADyAQAA8wEAAPQBAAD1AQAA9gEAAPcBAAD4AQAA+QEAAPoBAAD7AQAA/AEAAP0BAAD+AQAA/wEAAPIBAAAAAgAA8gEAAAAAAAD8LgAAAAAAAFioAgAMwwIAAQAAAN0tAAAAAAAAYKgCAAzDAgACAAAA3C0AAAAAAABoqAIADMMCAAMAAADaOgAAAAAAAHCoAgAMwwIABAAAAMMvAAAAAAAAeKgCAAzDAgAFAAAAgTkAAAAAAACAqAIADMMCAAYAAADhTgAAAAAAAIioAgAMwwIABwAAAMosAAAAAAAAkKgCAAzDAgAHAAAA+7YAAAAAAACQqAIADMMCAAgAAACvqAAAAAAAAJioAgAMwwIAQYDTCgsHAQAAAKCoAgBBkNMKCwefDAAAgKkCAEGg0woLF/MGAAAApgIAsQYAAGCnAgDRBgAAkKkCAEHG0woLC23m7N4FAAsAAAAFAEHc0woLAgUCAEH00woLCwMCAAACAgAATsUCAEGM1AoLAQIAQZzUCgsI//////////8AQeDUCgsJ0KkCAAAAAAAJAEH01AoLAgUCAEGI1QoLEgQCAAAAAAAAAgIAAFjFAgAABABBtNUKCwT/////AEH41QoLAQUAQYTWCgsCBwIAQZzWCgsOAwIAAAgCAABoyQIAAAQAQbTWCgsBAQBBxNYKCwX/////CgBBiNcKCyD4qgIAUNcDACVtLyVkLyV5AAAACCVIOiVNOiVTAAAACA==";return u}var uA;function ZA(u){if(u==uA&&E)return new Uint8Array(E);var y=f(u);if(y)return y;throw"both async and sync fetching of the wasm failed"}function QA(u){return Promise.resolve().then(()=>ZA(u))}function WA(u,y,x){return QA(u).then(H=>WebAssembly.instantiate(H,y)).then(x,H=>{B(`failed to asynchronously prepare wasm: ${H}`),KA(H)})}function MA(u,y,x,H){return WA(y,x,H)}function be(){return{a:Lt}}function LA(){var u=be();function y(H,k){return gt=H.exports,b=gt.y,O(),sA(gt.z),mA(),gt}UA();function x(H){y(H.instance)}return uA??=HA(),MA(E,uA,u,x).catch(o),{}}function pA(u){return i.agerrMessages.push(Me(u)),0}function Ft(u){this.name="ExitStatus",this.message=`Program terminated with exit(${u})`,this.status=u}var ht=u=>{u.forEach(y=>y(i))};function Ee(u,y="i8"){switch(y.endsWith("*")&&(y="*"),y){case"i1":return M[u];case"i8":return M[u];case"i16":return F[u>>1];case"i32":return _[u>>2];case"i64":return j[u>>3];case"float":return J[u>>2];case"double":return AA[u>>3];case"*":return U[u>>2];default:KA(`invalid type for getValue: ${y}`)}}var Kt=u=>Oi(u),Ye=()=>hn(),ze=typeof TextDecoder<"u"?new TextDecoder:void 0,ut=(u,y=0,x=NaN)=>{for(var H=y+x,k=y;u[k]&&!(k>=H);)++k;if(k-y>16&&u.buffer&&ze)return ze.decode(u.subarray(y,k));for(var T="";y>10,56320|Ae&1023)}}return T},Me=(u,y)=>u?ut(D,u,y):"",ei=(u,y,x,H)=>{KA(`Assertion failed: ${Me(u)}, at: `+[y?Me(y):"unknown filename",x,H?Me(H):"unknown function"])};class Y{constructor(y){this.excPtr=y,this.ptr=y-24}set_type(y){U[this.ptr+4>>2]=y}get_type(){return U[this.ptr+4>>2]}set_destructor(y){U[this.ptr+8>>2]=y}get_destructor(){return U[this.ptr+8>>2]}set_caught(y){y=y?1:0,M[this.ptr+12]=y}get_caught(){return M[this.ptr+12]!=0}set_rethrown(y){y=y?1:0,M[this.ptr+13]=y}get_rethrown(){return M[this.ptr+13]!=0}init(y,x){this.set_adjusted_ptr(0),this.set_type(y),this.set_destructor(x)}set_adjusted_ptr(y){U[this.ptr+16>>2]=y}get_adjusted_ptr(){return U[this.ptr+16>>2]}}var z=0,nA=(u,y,x)=>{var H=new Y(u);throw H.init(y,x),z=u,z},rA={isAbs:u=>u.charAt(0)==="/",splitPath:u=>{var y=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return y.exec(u).slice(1)},normalizeArray:(u,y)=>{for(var x=0,H=u.length-1;H>=0;H--){var k=u[H];k==="."?u.splice(H,1):k===".."?(u.splice(H,1),x++):x&&(u.splice(H,1),x--)}if(y)for(;x;x--)u.unshift("..");return u},normalize:u=>{var y=rA.isAbs(u),x=u.substr(-1)==="/";return u=rA.normalizeArray(u.split("/").filter(H=>!!H),!y).join("/"),!u&&!y&&(u="."),u&&x&&(u+="/"),(y?"/":"")+u},dirname:u=>{var y=rA.splitPath(u),x=y[0],H=y[1];return!x&&!H?".":(H&&(H=H.substr(0,H.length-1)),x+H)},basename:u=>{if(u==="/")return"/";u=rA.normalize(u),u=u.replace(/\/$/,"");var y=u.lastIndexOf("/");return y===-1?u:u.substr(y+1)},join:(...u)=>rA.normalize(u.join("/")),join2:(u,y)=>rA.normalize(u+"/"+y)},NA=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return u=>crypto.getRandomValues(u);KA("initRandomDevice")},Ie=u=>(Ie=NA())(u),Qe={resolve:(...u)=>{for(var y="",x=!1,H=u.length-1;H>=-1&&!x;H--){var k=H>=0?u[H]:L.cwd();if(typeof k!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!k)return"";y=k+"/"+y,x=rA.isAbs(k)}return y=rA.normalizeArray(y.split("/").filter(T=>!!T),!x).join("/"),(x?"/":"")+y||"."},relative:(u,y)=>{u=Qe.resolve(u).substr(1),y=Qe.resolve(y).substr(1);function x(Ae){for(var oe=0;oe=0&&Ae[Be]==="";Be--);return oe>Be?[]:Ae.slice(oe,Be-oe+1)}for(var H=x(u.split("/")),k=x(y.split("/")),T=Math.min(H.length,k.length),eA=T,gA=0;gA{for(var y=0,x=0;x=55296&&H<=57343?(y+=4,++x):y+=3}return y},Et=(u,y,x,H)=>{if(!(H>0))return 0;for(var k=x,T=x+H-1,eA=0;eA=55296&&gA<=57343){var wA=u.charCodeAt(++eA);gA=65536+((gA&1023)<<10)|wA&1023}if(gA<=127){if(x>=T)break;y[x++]=gA}else if(gA<=2047){if(x+1>=T)break;y[x++]=192|gA>>6,y[x++]=128|gA&63}else if(gA<=65535){if(x+2>=T)break;y[x++]=224|gA>>12,y[x++]=128|gA>>6&63,y[x++]=128|gA&63}else{if(x+3>=T)break;y[x++]=240|gA>>18,y[x++]=128|gA>>12&63,y[x++]=128|gA>>6&63,y[x++]=128|gA&63}}return y[x]=0,x-k};function et(u,y,x){var H=x>0?x:_A(u)+1,k=new Array(H),T=Et(u,k,0,k.length);return y&&(k.length=T),k}var Te=()=>{if(!xA.length){var u=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(u=window.prompt("Input: "),u!==null&&(u+=` -`)),!u)return null;xA=et(u,!0)}return xA.shift()},Le={ttys:[],init(){},shutdown(){},register(u,y){Le.ttys[u]={input:[],output:[],ops:y},L.registerDevice(u,Le.stream_ops)},stream_ops:{open(u){var y=Le.ttys[u.node.rdev];if(!y)throw new L.ErrnoError(43);u.tty=y,u.seekable=!1},close(u){u.tty.ops.fsync(u.tty)},fsync(u){u.tty.ops.fsync(u.tty)},read(u,y,x,H,k){if(!u.tty||!u.tty.ops.get_char)throw new L.ErrnoError(60);for(var T=0,eA=0;eA0&&(d(ut(u.output)),u.output=[])},ioctl_tcgets(u){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(u,y,x){return 0},ioctl_tiocgwinsz(u){return[24,80]}},default_tty1_ops:{put_char(u,y){y===null||y===10?(B(ut(u.output)),u.output=[]):y!=0&&u.output.push(y)},fsync(u){u.output&&u.output.length>0&&(B(ut(u.output)),u.output=[])}}},si=(u,y)=>{D.fill(0,u,u+y)},gn=(u,y)=>Math.ceil(u/y)*y,dn=u=>{u=gn(u,65536);var y=Fi(65536,u);return y&&si(y,u),y},_e={ops_table:null,mount(u){return _e.createNode(null,"/",16895,0)},createNode(u,y,x,H){if(L.isBlkdev(x)||L.isFIFO(x))throw new L.ErrnoError(63);_e.ops_table||={dir:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,lookup:_e.node_ops.lookup,mknod:_e.node_ops.mknod,rename:_e.node_ops.rename,unlink:_e.node_ops.unlink,rmdir:_e.node_ops.rmdir,readdir:_e.node_ops.readdir,symlink:_e.node_ops.symlink},stream:{llseek:_e.stream_ops.llseek}},file:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:{llseek:_e.stream_ops.llseek,read:_e.stream_ops.read,write:_e.stream_ops.write,allocate:_e.stream_ops.allocate,mmap:_e.stream_ops.mmap,msync:_e.stream_ops.msync}},link:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,readlink:_e.node_ops.readlink},stream:{}},chrdev:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:L.chrdev_stream_ops}};var k=L.createNode(u,y,x,H);return L.isDir(k.mode)?(k.node_ops=_e.ops_table.dir.node,k.stream_ops=_e.ops_table.dir.stream,k.contents={}):L.isFile(k.mode)?(k.node_ops=_e.ops_table.file.node,k.stream_ops=_e.ops_table.file.stream,k.usedBytes=0,k.contents=null):L.isLink(k.mode)?(k.node_ops=_e.ops_table.link.node,k.stream_ops=_e.ops_table.link.stream):L.isChrdev(k.mode)&&(k.node_ops=_e.ops_table.chrdev.node,k.stream_ops=_e.ops_table.chrdev.stream),k.timestamp=Date.now(),u&&(u.contents[y]=k,u.timestamp=k.timestamp),k},getFileDataAsTypedArray(u){return u.contents?u.contents.subarray?u.contents.subarray(0,u.usedBytes):new Uint8Array(u.contents):new Uint8Array(0)},expandFileStorage(u,y){var x=u.contents?u.contents.length:0;if(!(x>=y)){var H=1024*1024;y=Math.max(y,x*(x>>0),x!=0&&(y=Math.max(y,256));var k=u.contents;u.contents=new Uint8Array(y),u.usedBytes>0&&u.contents.set(k.subarray(0,u.usedBytes),0)}},resizeFileStorage(u,y){if(u.usedBytes!=y)if(y==0)u.contents=null,u.usedBytes=0;else{var x=u.contents;u.contents=new Uint8Array(y),x&&u.contents.set(x.subarray(0,Math.min(y,u.usedBytes))),u.usedBytes=y}},node_ops:{getattr(u){var y={};return y.dev=L.isChrdev(u.mode)?u.id:1,y.ino=u.id,y.mode=u.mode,y.nlink=1,y.uid=0,y.gid=0,y.rdev=u.rdev,L.isDir(u.mode)?y.size=4096:L.isFile(u.mode)?y.size=u.usedBytes:L.isLink(u.mode)?y.size=u.link.length:y.size=0,y.atime=new Date(u.timestamp),y.mtime=new Date(u.timestamp),y.ctime=new Date(u.timestamp),y.blksize=4096,y.blocks=Math.ceil(y.size/y.blksize),y},setattr(u,y){y.mode!==void 0&&(u.mode=y.mode),y.timestamp!==void 0&&(u.timestamp=y.timestamp),y.size!==void 0&&_e.resizeFileStorage(u,y.size)},lookup(u,y){throw L.genericErrors[44]},mknod(u,y,x,H){return _e.createNode(u,y,x,H)},rename(u,y,x){if(L.isDir(u.mode)){var H;try{H=L.lookupNode(y,x)}catch{}if(H)for(var k in H.contents)throw new L.ErrnoError(55)}delete u.parent.contents[u.name],u.parent.timestamp=Date.now(),u.name=x,y.contents[x]=u,y.timestamp=u.parent.timestamp},unlink(u,y){delete u.contents[y],u.timestamp=Date.now()},rmdir(u,y){var x=L.lookupNode(u,y);for(var H in x.contents)throw new L.ErrnoError(55);delete u.contents[y],u.timestamp=Date.now()},readdir(u){var y=[".",".."];for(var x of Object.keys(u.contents))y.push(x);return y},symlink(u,y,x){var H=_e.createNode(u,y,41471,0);return H.link=x,H},readlink(u){if(!L.isLink(u.mode))throw new L.ErrnoError(28);return u.link}},stream_ops:{read(u,y,x,H,k){var T=u.node.contents;if(k>=u.node.usedBytes)return 0;var eA=Math.min(u.node.usedBytes-k,H);if(eA>8&&T.subarray)y.set(T.subarray(k,k+eA),x);else for(var gA=0;gA0||x+y{var k=H?"":`al ${u}`;C(u).then(T=>{y(new Uint8Array(T)),k&&mA()},T=>{if(x)x();else throw`Loading data file "${u}" failed.`}),k&&UA()},ui=(u,y,x,H,k,T)=>{L.createDataFile(u,y,x,H,k,T)},Mi=[],zi=(u,y,x,H)=>{typeof Browser<"u"&&Browser.init();var k=!1;return Mi.forEach(T=>{k||T.canHandle(y)&&(T.handle(u,y,x,H),k=!0)}),k},vt=(u,y,x,H,k,T,eA,gA,wA,Ae)=>{var oe=y?Qe.resolve(rA.join2(u,y)):u;function Be(He){function ke(Ne){Ae?.(),gA||ui(u,y,Ne,H,k,wA),T?.(),mA()}zi(He,oe,ke,()=>{eA?.(),mA()})||ke(He)}UA(),typeof x=="string"?Wi(x,Be,eA):Be(x)},Zi=u=>{var y={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},x=y[u];if(typeof x>"u")throw new Error(`Unknown file open mode: ${u}`);return x},_t=(u,y)=>{var x=0;return u&&(x|=365),y&&(x|=146),x},L={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(u){this.name="ErrnoError",this.errno=u}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(u){this.node=u}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(u){this.shared.flags=u}get position(){return this.shared.position}set position(u){this.shared.position=u}},FSNode:class{constructor(u,y,x,H){u||(u=this),this.parent=u,this.mount=u.mount,this.mounted=null,this.id=L.nextInode++,this.name=y,this.mode=x,this.node_ops={},this.stream_ops={},this.rdev=H,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(u){u?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(u){u?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return L.isDir(this.mode)}get isDevice(){return L.isChrdev(this.mode)}},lookupPath(u,y={}){if(u=Qe.resolve(u),!u)return{path:"",node:null};var x={follow_mount:!0,recurse_count:0};if(y=Object.assign(x,y),y.recurse_count>8)throw new L.ErrnoError(32);for(var H=u.split("/").filter(Be=>!!Be),k=L.root,T="/",eA=0;eA40)throw new L.ErrnoError(32)}}return{path:T,node:k}},getPath(u){for(var y;;){if(L.isRoot(u)){var x=u.mount.mountpoint;return y?x[x.length-1]!=="/"?`${x}/${y}`:x+y:x}y=y?`${u.name}/${y}`:u.name,u=u.parent}},hashName(u,y){for(var x=0,H=0;H>>0)%L.nameTable.length},hashAddNode(u){var y=L.hashName(u.parent.id,u.name);u.name_next=L.nameTable[y],L.nameTable[y]=u},hashRemoveNode(u){var y=L.hashName(u.parent.id,u.name);if(L.nameTable[y]===u)L.nameTable[y]=u.name_next;else for(var x=L.nameTable[y];x;){if(x.name_next===u){x.name_next=u.name_next;break}x=x.name_next}},lookupNode(u,y){var x=L.mayLookup(u);if(x)throw new L.ErrnoError(x);for(var H=L.hashName(u.id,y),k=L.nameTable[H];k;k=k.name_next){var T=k.name;if(k.parent.id===u.id&&T===y)return k}return L.lookup(u,y)},createNode(u,y,x,H){var k=new L.FSNode(u,y,x,H);return L.hashAddNode(k),k},destroyNode(u){L.hashRemoveNode(u)},isRoot(u){return u===u.parent},isMountpoint(u){return!!u.mounted},isFile(u){return(u&61440)===32768},isDir(u){return(u&61440)===16384},isLink(u){return(u&61440)===40960},isChrdev(u){return(u&61440)===8192},isBlkdev(u){return(u&61440)===24576},isFIFO(u){return(u&61440)===4096},isSocket(u){return(u&49152)===49152},flagsToPermissionString(u){var y=["r","w","rw"][u&3];return u&512&&(y+="w"),y},nodePermissions(u,y){return L.ignorePermissions?0:y.includes("r")&&!(u.mode&292)||y.includes("w")&&!(u.mode&146)||y.includes("x")&&!(u.mode&73)?2:0},mayLookup(u){if(!L.isDir(u.mode))return 54;var y=L.nodePermissions(u,"x");return y||(u.node_ops.lookup?0:2)},mayCreate(u,y){try{var x=L.lookupNode(u,y);return 20}catch{}return L.nodePermissions(u,"wx")},mayDelete(u,y,x){var H;try{H=L.lookupNode(u,y)}catch(T){return T.errno}var k=L.nodePermissions(u,"wx");if(k)return k;if(x){if(!L.isDir(H.mode))return 54;if(L.isRoot(H)||L.getPath(H)===L.cwd())return 10}else if(L.isDir(H.mode))return 31;return 0},mayOpen(u,y){return u?L.isLink(u.mode)?32:L.isDir(u.mode)&&(L.flagsToPermissionString(y)!=="r"||y&512)?31:L.nodePermissions(u,L.flagsToPermissionString(y)):44},MAX_OPEN_FDS:4096,nextfd(){for(var u=0;u<=L.MAX_OPEN_FDS;u++)if(!L.streams[u])return u;throw new L.ErrnoError(33)},getStreamChecked(u){var y=L.getStream(u);if(!y)throw new L.ErrnoError(8);return y},getStream:u=>L.streams[u],createStream(u,y=-1){return u=Object.assign(new L.FSStream,u),y==-1&&(y=L.nextfd()),u.fd=y,L.streams[y]=u,u},closeStream(u){L.streams[u]=null},dupStream(u,y=-1){var x=L.createStream(u,y);return x.stream_ops?.dup?.(x),x},chrdev_stream_ops:{open(u){var y=L.getDevice(u.node.rdev);u.stream_ops=y.stream_ops,u.stream_ops.open?.(u)},llseek(){throw new L.ErrnoError(70)}},major:u=>u>>8,minor:u=>u&255,makedev:(u,y)=>u<<8|y,registerDevice(u,y){L.devices[u]={stream_ops:y}},getDevice:u=>L.devices[u],getMounts(u){for(var y=[],x=[u];x.length;){var H=x.pop();y.push(H),x.push(...H.mounts)}return y},syncfs(u,y){typeof u=="function"&&(y=u,u=!1),L.syncFSRequests++,L.syncFSRequests>1&&B(`warning: ${L.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var x=L.getMounts(L.root.mount),H=0;function k(eA){return L.syncFSRequests--,y(eA)}function T(eA){if(eA)return T.errored?void 0:(T.errored=!0,k(eA));++H>=x.length&&k(null)}x.forEach(eA=>{if(!eA.type.syncfs)return T(null);eA.type.syncfs(eA,u,T)})},mount(u,y,x){var H=x==="/",k=!x,T;if(H&&L.root)throw new L.ErrnoError(10);if(!H&&!k){var eA=L.lookupPath(x,{follow_mount:!1});if(x=eA.path,T=eA.node,L.isMountpoint(T))throw new L.ErrnoError(10);if(!L.isDir(T.mode))throw new L.ErrnoError(54)}var gA={type:u,opts:y,mountpoint:x,mounts:[]},wA=u.mount(gA);return wA.mount=gA,gA.root=wA,H?L.root=wA:T&&(T.mounted=gA,T.mount&&T.mount.mounts.push(gA)),wA},unmount(u){var y=L.lookupPath(u,{follow_mount:!1});if(!L.isMountpoint(y.node))throw new L.ErrnoError(28);var x=y.node,H=x.mounted,k=L.getMounts(H);Object.keys(L.nameTable).forEach(eA=>{for(var gA=L.nameTable[eA];gA;){var wA=gA.name_next;k.includes(gA.mount)&&L.destroyNode(gA),gA=wA}}),x.mounted=null;var T=x.mount.mounts.indexOf(H);x.mount.mounts.splice(T,1)},lookup(u,y){return u.node_ops.lookup(u,y)},mknod(u,y,x){var H=L.lookupPath(u,{parent:!0}),k=H.node,T=rA.basename(u);if(!T||T==="."||T==="..")throw new L.ErrnoError(28);var eA=L.mayCreate(k,T);if(eA)throw new L.ErrnoError(eA);if(!k.node_ops.mknod)throw new L.ErrnoError(63);return k.node_ops.mknod(k,T,y,x)},create(u,y){return y=y!==void 0?y:438,y&=4095,y|=32768,L.mknod(u,y,0)},mkdir(u,y){return y=y!==void 0?y:511,y&=1023,y|=16384,L.mknod(u,y,0)},mkdirTree(u,y){for(var x=u.split("/"),H="",k=0;k"u"&&(x=y,y=438),y|=8192,L.mknod(u,y,x)},symlink(u,y){if(!Qe.resolve(u))throw new L.ErrnoError(44);var x=L.lookupPath(y,{parent:!0}),H=x.node;if(!H)throw new L.ErrnoError(44);var k=rA.basename(y),T=L.mayCreate(H,k);if(T)throw new L.ErrnoError(T);if(!H.node_ops.symlink)throw new L.ErrnoError(63);return H.node_ops.symlink(H,k,u)},rename(u,y){var x=rA.dirname(u),H=rA.dirname(y),k=rA.basename(u),T=rA.basename(y),eA,gA,wA;if(eA=L.lookupPath(u,{parent:!0}),gA=eA.node,eA=L.lookupPath(y,{parent:!0}),wA=eA.node,!gA||!wA)throw new L.ErrnoError(44);if(gA.mount!==wA.mount)throw new L.ErrnoError(75);var Ae=L.lookupNode(gA,k),oe=Qe.relative(u,H);if(oe.charAt(0)!==".")throw new L.ErrnoError(28);if(oe=Qe.relative(y,x),oe.charAt(0)!==".")throw new L.ErrnoError(55);var Be;try{Be=L.lookupNode(wA,T)}catch{}if(Ae!==Be){var He=L.isDir(Ae.mode),ke=L.mayDelete(gA,k,He);if(ke)throw new L.ErrnoError(ke);if(ke=Be?L.mayDelete(wA,T,He):L.mayCreate(wA,T),ke)throw new L.ErrnoError(ke);if(!gA.node_ops.rename)throw new L.ErrnoError(63);if(L.isMountpoint(Ae)||Be&&L.isMountpoint(Be))throw new L.ErrnoError(10);if(wA!==gA&&(ke=L.nodePermissions(gA,"w"),ke))throw new L.ErrnoError(ke);L.hashRemoveNode(Ae);try{gA.node_ops.rename(Ae,wA,T),Ae.parent=wA}catch(Ne){throw Ne}finally{L.hashAddNode(Ae)}}},rmdir(u){var y=L.lookupPath(u,{parent:!0}),x=y.node,H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!0);if(T)throw new L.ErrnoError(T);if(!x.node_ops.rmdir)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.rmdir(x,H),L.destroyNode(k)},readdir(u){var y=L.lookupPath(u,{follow:!0}),x=y.node;if(!x.node_ops.readdir)throw new L.ErrnoError(54);return x.node_ops.readdir(x)},unlink(u){var y=L.lookupPath(u,{parent:!0}),x=y.node;if(!x)throw new L.ErrnoError(44);var H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!1);if(T)throw new L.ErrnoError(T);if(!x.node_ops.unlink)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.unlink(x,H),L.destroyNode(k)},readlink(u){var y=L.lookupPath(u),x=y.node;if(!x)throw new L.ErrnoError(44);if(!x.node_ops.readlink)throw new L.ErrnoError(28);return Qe.resolve(L.getPath(x.parent),x.node_ops.readlink(x))},stat(u,y){var x=L.lookupPath(u,{follow:!y}),H=x.node;if(!H)throw new L.ErrnoError(44);if(!H.node_ops.getattr)throw new L.ErrnoError(63);return H.node_ops.getattr(H)},lstat(u){return L.stat(u,!0)},chmod(u,y,x){var H;if(typeof u=="string"){var k=L.lookupPath(u,{follow:!x});H=k.node}else H=u;if(!H.node_ops.setattr)throw new L.ErrnoError(63);H.node_ops.setattr(H,{mode:y&4095|H.mode&-4096,timestamp:Date.now()})},lchmod(u,y){L.chmod(u,y,!0)},fchmod(u,y){var x=L.getStreamChecked(u);L.chmod(x.node,y)},chown(u,y,x,H){var k;if(typeof u=="string"){var T=L.lookupPath(u,{follow:!H});k=T.node}else k=u;if(!k.node_ops.setattr)throw new L.ErrnoError(63);k.node_ops.setattr(k,{timestamp:Date.now()})},lchown(u,y,x){L.chown(u,y,x,!0)},fchown(u,y,x){var H=L.getStreamChecked(u);L.chown(H.node,y,x)},truncate(u,y){if(y<0)throw new L.ErrnoError(28);var x;if(typeof u=="string"){var H=L.lookupPath(u,{follow:!0});x=H.node}else x=u;if(!x.node_ops.setattr)throw new L.ErrnoError(63);if(L.isDir(x.mode))throw new L.ErrnoError(31);if(!L.isFile(x.mode))throw new L.ErrnoError(28);var k=L.nodePermissions(x,"w");if(k)throw new L.ErrnoError(k);x.node_ops.setattr(x,{size:y,timestamp:Date.now()})},ftruncate(u,y){var x=L.getStreamChecked(u);if((x.flags&2097155)===0)throw new L.ErrnoError(28);L.truncate(x.node,y)},utime(u,y,x){var H=L.lookupPath(u,{follow:!0}),k=H.node;k.node_ops.setattr(k,{timestamp:Math.max(y,x)})},open(u,y,x){if(u==="")throw new L.ErrnoError(44);y=typeof y=="string"?Zi(y):y,y&64?(x=typeof x>"u"?438:x,x=x&4095|32768):x=0;var H;if(typeof u=="object")H=u;else{u=rA.normalize(u);try{var k=L.lookupPath(u,{follow:!(y&131072)});H=k.node}catch{}}var T=!1;if(y&64)if(H){if(y&128)throw new L.ErrnoError(20)}else H=L.mknod(u,x,0),T=!0;if(!H)throw new L.ErrnoError(44);if(L.isChrdev(H.mode)&&(y&=-513),y&65536&&!L.isDir(H.mode))throw new L.ErrnoError(54);if(!T){var eA=L.mayOpen(H,y);if(eA)throw new L.ErrnoError(eA)}y&512&&!T&&L.truncate(H,0),y&=-131713;var gA=L.createStream({node:H,path:L.getPath(H),flags:y,seekable:!0,position:0,stream_ops:H.stream_ops,ungotten:[],error:!1});return gA.stream_ops.open&&gA.stream_ops.open(gA),gA},close(u){if(L.isClosed(u))throw new L.ErrnoError(8);u.getdents&&(u.getdents=null);try{u.stream_ops.close&&u.stream_ops.close(u)}catch(y){throw y}finally{L.closeStream(u.fd)}u.fd=null},isClosed(u){return u.fd===null},llseek(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(!u.seekable||!u.stream_ops.llseek)throw new L.ErrnoError(70);if(x!=0&&x!=1&&x!=2)throw new L.ErrnoError(28);return u.position=u.stream_ops.llseek(u,y,x),u.ungotten=[],u.position},read(u,y,x,H,k){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===1)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.read)throw new L.ErrnoError(28);var T=typeof k<"u";if(!T)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var eA=u.stream_ops.read(u,y,x,H,k);return T||(u.position+=eA),eA},write(u,y,x,H,k,T){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.write)throw new L.ErrnoError(28);u.seekable&&u.flags&1024&&L.llseek(u,0,2);var eA=typeof k<"u";if(!eA)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var gA=u.stream_ops.write(u,y,x,H,k,T);return eA||(u.position+=gA),gA},allocate(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(y<0||x<=0)throw new L.ErrnoError(28);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(!L.isFile(u.node.mode)&&!L.isDir(u.node.mode))throw new L.ErrnoError(43);if(!u.stream_ops.allocate)throw new L.ErrnoError(138);u.stream_ops.allocate(u,y,x)},mmap(u,y,x,H,k){if((H&2)!==0&&(k&2)===0&&(u.flags&2097155)!==2)throw new L.ErrnoError(2);if((u.flags&2097155)===1)throw new L.ErrnoError(2);if(!u.stream_ops.mmap)throw new L.ErrnoError(43);if(!y)throw new L.ErrnoError(28);return u.stream_ops.mmap(u,y,x,H,k)},msync(u,y,x,H,k){return u.stream_ops.msync?u.stream_ops.msync(u,y,x,H,k):0},ioctl(u,y,x){if(!u.stream_ops.ioctl)throw new L.ErrnoError(59);return u.stream_ops.ioctl(u,y,x)},readFile(u,y={}){if(y.flags=y.flags||0,y.encoding=y.encoding||"binary",y.encoding!=="utf8"&&y.encoding!=="binary")throw new Error(`Invalid encoding type "${y.encoding}"`);var x,H=L.open(u,y.flags),k=L.stat(u),T=k.size,eA=new Uint8Array(T);return L.read(H,eA,0,T,0),y.encoding==="utf8"?x=ut(eA):y.encoding==="binary"&&(x=eA),L.close(H),x},writeFile(u,y,x={}){x.flags=x.flags||577;var H=L.open(u,x.flags,x.mode);if(typeof y=="string"){var k=new Uint8Array(_A(y)+1),T=Et(y,k,0,k.length);L.write(H,k,0,T,void 0,x.canOwn)}else if(ArrayBuffer.isView(y))L.write(H,y,0,y.byteLength,void 0,x.canOwn);else throw new Error("Unsupported data type");L.close(H)},cwd:()=>L.currentPath,chdir(u){var y=L.lookupPath(u,{follow:!0});if(y.node===null)throw new L.ErrnoError(44);if(!L.isDir(y.node.mode))throw new L.ErrnoError(54);var x=L.nodePermissions(y.node,"x");if(x)throw new L.ErrnoError(x);L.currentPath=y.path},createDefaultDirectories(){L.mkdir("/tmp"),L.mkdir("/home"),L.mkdir("/home/web_user")},createDefaultDevices(){L.mkdir("/dev"),L.registerDevice(L.makedev(1,3),{read:()=>0,write:(H,k,T,eA,gA)=>eA}),L.mkdev("/dev/null",L.makedev(1,3)),Le.register(L.makedev(5,0),Le.default_tty_ops),Le.register(L.makedev(6,0),Le.default_tty1_ops),L.mkdev("/dev/tty",L.makedev(5,0)),L.mkdev("/dev/tty1",L.makedev(6,0));var u=new Uint8Array(1024),y=0,x=()=>(y===0&&(y=Ie(u).byteLength),u[--y]);L.createDevice("/dev","random",x),L.createDevice("/dev","urandom",x),L.mkdir("/dev/shm"),L.mkdir("/dev/shm/tmp")},createSpecialDirectories(){L.mkdir("/proc");var u=L.mkdir("/proc/self");L.mkdir("/proc/self/fd"),L.mount({mount(){var y=L.createNode(u,"fd",16895,73);return y.node_ops={lookup(x,H){var k=+H,T=L.getStreamChecked(k),eA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>T.path}};return eA.parent=eA,eA}},y}},{},"/proc/self/fd")},createStandardStreams(u,y,x){u?L.createDevice("/dev","stdin",u):L.symlink("/dev/tty","/dev/stdin"),y?L.createDevice("/dev","stdout",null,y):L.symlink("/dev/tty","/dev/stdout"),x?L.createDevice("/dev","stderr",null,x):L.symlink("/dev/tty1","/dev/stderr"),L.open("/dev/stdin",0),L.open("/dev/stdout",1),L.open("/dev/stderr",1)},staticInit(){[44].forEach(u=>{L.genericErrors[u]=new L.ErrnoError(u),L.genericErrors[u].stack=""}),L.nameTable=new Array(4096),L.mount(_e,{},"/"),L.createDefaultDirectories(),L.createDefaultDevices(),L.createSpecialDirectories(),L.filesystems={MEMFS:_e}},init(u,y,x){L.initialized=!0,L.createStandardStreams(u,y,x)},quit(){L.initialized=!1;for(var u=0;uthis.length-1||ke<0)){var Ne=ke%this.chunkSize,ni=ke/this.chunkSize|0;return this.getter(ni)[Ne]}}setDataGetter(ke){this.getter=ke}cacheLength(){var ke=new XMLHttpRequest;if(ke.open("HEAD",x,!1),ke.send(null),!(ke.status>=200&&ke.status<300||ke.status===304))throw new Error("Couldn't load "+x+". Status: "+ke.status);var Ne=Number(ke.getResponseHeader("Content-length")),ni,Un=(ni=ke.getResponseHeader("Accept-Ranges"))&&ni==="bytes",q=(ni=ke.getResponseHeader("Content-Encoding"))&&ni==="gzip",fA=1024*1024;Un||(fA=Ne);var PA=(pe,De)=>{if(pe>De)throw new Error("invalid range ("+pe+", "+De+") or no bytes requested!");if(De>Ne-1)throw new Error("only "+Ne+" bytes available! programmer error!");var ot=new XMLHttpRequest;if(ot.open("GET",x,!1),Ne!==fA&&ot.setRequestHeader("Range","bytes="+pe+"-"+De),ot.responseType="arraybuffer",ot.overrideMimeType&&ot.overrideMimeType("text/plain; charset=x-user-defined"),ot.send(null),!(ot.status>=200&&ot.status<300||ot.status===304))throw new Error("Couldn't load "+x+". Status: "+ot.status);return ot.response!==void 0?new Uint8Array(ot.response||[]):et(ot.responseText||"",!0)},Fe=this;Fe.setDataGetter(pe=>{var De=pe*fA,ot=(pe+1)*fA-1;if(ot=Math.min(ot,Ne-1),typeof Fe.chunks[pe]>"u"&&(Fe.chunks[pe]=PA(De,ot)),typeof Fe.chunks[pe]>"u")throw new Error("doXHR failed!");return Fe.chunks[pe]}),(q||!Ne)&&(fA=Ne=1,Ne=this.getter(0).length,fA=Ne,d("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=Ne,this._chunkSize=fA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var eA,gA}else var gA={isDevice:!1,url:x};var wA=L.createFile(u,y,gA,H,k);gA.contents?wA.contents=gA.contents:gA.url&&(wA.contents=null,wA.url=gA.url),Object.defineProperties(wA,{usedBytes:{get:function(){return this.contents.length}}});var Ae={},oe=Object.keys(wA.stream_ops);oe.forEach(He=>{var ke=wA.stream_ops[He];Ae[He]=(...Ne)=>(L.forceLoadFile(wA),ke(...Ne))});function Be(He,ke,Ne,ni,Un){var q=He.node.contents;if(Un>=q.length)return 0;var fA=Math.min(q.length-Un,ni);if(q.slice)for(var PA=0;PA(L.forceLoadFile(wA),Be(He,ke,Ne,ni,Un)),Ae.mmap=(He,ke,Ne,ni,Un)=>{L.forceLoadFile(wA);var q=dn(ke);if(!q)throw new L.ErrnoError(48);return Be(He,M,q,ke,Ne),{ptr:q,allocated:!0}},wA.stream_ops=Ae,wA}},Ct={DEFAULT_POLLMASK:5,calculateAt(u,y,x){if(rA.isAbs(y))return y;var H;if(u===-100)H=L.cwd();else{var k=Ct.getStreamFromFD(u);H=k.path}if(y.length==0){if(!x)throw new L.ErrnoError(44);return H}return rA.join2(H,y)},doStat(u,y,x){var H=u(y);_[x>>2]=H.dev,_[x+4>>2]=H.mode,U[x+8>>2]=H.nlink,_[x+12>>2]=H.uid,_[x+16>>2]=H.gid,_[x+20>>2]=H.rdev,j[x+24>>3]=BigInt(H.size),_[x+32>>2]=4096,_[x+36>>2]=H.blocks;var k=H.atime.getTime(),T=H.mtime.getTime(),eA=H.ctime.getTime();return j[x+40>>3]=BigInt(Math.floor(k/1e3)),U[x+48>>2]=k%1e3*1e3*1e3,j[x+56>>3]=BigInt(Math.floor(T/1e3)),U[x+64>>2]=T%1e3*1e3*1e3,j[x+72>>3]=BigInt(Math.floor(eA/1e3)),U[x+80>>2]=eA%1e3*1e3*1e3,j[x+88>>3]=BigInt(H.ino),0},doMsync(u,y,x,H,k){if(!L.isFile(y.node.mode))throw new L.ErrnoError(43);if(H&2)return 0;var T=D.slice(u,u+x);L.msync(y,T,k,x,H)},getStreamFromFD(u){var y=L.getStreamChecked(u);return y},varargs:void 0,getStr(u){var y=Me(u);return y}};function ci(u,y,x,H){try{if(y=Ct.getStr(y),y=Ct.calculateAt(u,y),x&-8)return-28;var k=L.lookupPath(y,{follow:!0}),T=k.node;if(!T)return-44;var eA="";return x&4&&(eA+="r"),x&2&&(eA+="w"),x&1&&(eA+="x"),eA&&L.nodePermissions(T,eA)?-2:0}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}function Bn(){var u=_[+Ct.varargs>>2];return Ct.varargs+=4,u}var En=Bn;function qn(u,y,x){Ct.varargs=x;try{var H=Ct.getStreamFromFD(u);switch(y){case 0:{var k=Bn();if(k<0)return-28;for(;L.streams[k];)k++;var T;return T=L.dupStream(H,k),T.fd}case 1:case 2:return 0;case 3:return H.flags;case 4:{var k=Bn();return H.flags|=k,0}case 12:{var k=En(),eA=0;return F[k+eA>>1]=2,0}case 13:case 14:return 0}return-28}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}function Yo(u,y){try{var x=Ct.getStreamFromFD(u);return Ct.doStat(L.stat,x.path,y)}catch(H){if(typeof L>"u"||H.name!=="ErrnoError")throw H;return-H.errno}}function Co(u,y,x){Ct.varargs=x;try{var H=Ct.getStreamFromFD(u);switch(y){case 21509:return H.tty?0:-59;case 21505:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcgets){var k=H.tty.ops.ioctl_tcgets(H),T=En();_[T>>2]=k.c_iflag||0,_[T+4>>2]=k.c_oflag||0,_[T+8>>2]=k.c_cflag||0,_[T+12>>2]=k.c_lflag||0;for(var eA=0;eA<32;eA++)M[T+eA+17]=k.c_cc[eA]||0;return 0}return 0}case 21510:case 21511:case 21512:return H.tty?0:-59;case 21506:case 21507:case 21508:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcsets){for(var T=En(),gA=_[T>>2],wA=_[T+4>>2],Ae=_[T+8>>2],oe=_[T+12>>2],Be=[],eA=0;eA<32;eA++)Be.push(M[T+eA+17]);return H.tty.ops.ioctl_tcsets(H.tty,y,{c_iflag:gA,c_oflag:wA,c_cflag:Ae,c_lflag:oe,c_cc:Be})}return 0}case 21519:{if(!H.tty)return-59;var T=En();return _[T>>2]=0,0}case 21520:return H.tty?-28:-59;case 21531:{var T=En();return L.ioctl(H,y,T)}case 21523:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tiocgwinsz){var He=H.tty.ops.ioctl_tiocgwinsz(H.tty),T=En();F[T>>1]=He[0],F[T+2>>1]=He[1]}return 0}case 21524:return H.tty?0:-59;case 21515:return H.tty?0:-59;default:return-28}}catch(ke){if(typeof L>"u"||ke.name!=="ErrnoError")throw ke;return-ke.errno}}function ko(u,y,x,H){try{y=Ct.getStr(y);var k=H&256,T=H&4096;return H=H&-6401,y=Ct.calculateAt(u,y,T),Ct.doStat(k?L.lstat:L.stat,y,x)}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return-eA.errno}}function Zo(u,y,x,H){Ct.varargs=H;try{y=Ct.getStr(y),y=Ct.calculateAt(u,y);var k=H?Bn():0;return L.open(y,x,k).fd}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return-T.errno}}function wo(u,y){try{return u=Ct.getStr(u),Ct.doStat(L.stat,u,y)}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return-x.errno}}var ha=()=>{KA("")},Xo=u=>u%4===0&&(u%100!==0||u%400===0),ra=[0,31,60,91,121,152,182,213,244,274,305,335],Do=[0,31,59,90,120,151,181,212,243,273,304,334],re=u=>{var y=Xo(u.getFullYear()),x=y?ra:Do,H=x[u.getMonth()]+u.getDate()-1;return H},di=9007199254740992,ln=-9007199254740992,Qn=u=>udi?NaN:Number(u);function To(u,y){u=Qn(u);var x=new Date(u*1e3);_[y>>2]=x.getSeconds(),_[y+4>>2]=x.getMinutes(),_[y+8>>2]=x.getHours(),_[y+12>>2]=x.getDate(),_[y+16>>2]=x.getMonth(),_[y+20>>2]=x.getFullYear()-1900,_[y+24>>2]=x.getDay();var H=re(x)|0;_[y+28>>2]=H,_[y+36>>2]=-(x.getTimezoneOffset()*60);var k=new Date(x.getFullYear(),0,1),T=new Date(x.getFullYear(),6,1).getTimezoneOffset(),eA=k.getTimezoneOffset(),gA=(T!=eA&&x.getTimezoneOffset()==Math.min(eA,T))|0;_[y+32>>2]=gA}function Ma(u,y,x,H,k,T,eA){k=Qn(k);try{if(isNaN(k))return 61;var gA=Ct.getStreamFromFD(H),wA=L.mmap(gA,u,k,y,x),Ae=wA.ptr;return _[T>>2]=wA.allocated,U[eA>>2]=Ae,0}catch(oe){if(typeof L>"u"||oe.name!=="ErrnoError")throw oe;return-oe.errno}}function wi(u,y,x,H,k,T){T=Qn(T);try{var eA=Ct.getStreamFromFD(k);x&2&&Ct.doMsync(u,eA,y,H,T)}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}var Io=(u,y,x)=>Et(u,D,y,x),nr=(u,y,x,H)=>{var k=new Date().getFullYear(),T=new Date(k,0,1),eA=new Date(k,6,1),gA=T.getTimezoneOffset(),wA=eA.getTimezoneOffset(),Ae=Math.max(gA,wA);U[u>>2]=Ae*60,_[y>>2]=+(gA!=wA);var oe=ke=>{var Ne=ke>=0?"-":"+",ni=Math.abs(ke),Un=String(Math.floor(ni/60)).padStart(2,"0"),q=String(ni%60).padStart(2,"0");return`UTC${Ne}${Un}${q}`},Be=oe(gA),He=oe(wA);wADate.now(),Pa=()=>2147483648,Gn=u=>{var y=b.buffer,x=(u-y.byteLength+65535)/65536|0;try{return b.grow(x),O(),1}catch{}},xi=u=>{var y=D.length;u>>>=0;var x=Pa();if(u>x)return!1;for(var H=1;H<=4;H*=2){var k=y*(1+.2/H);k=Math.min(k,u+100663296);var T=Math.min(x,gn(Math.max(u,k),65536)),eA=Gn(T);if(eA)return!0}return!1},Pt={},Sn=()=>s,Bo=()=>{if(!Bo.strings){var u=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",y={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:u,_:Sn()};for(var x in Pt)Pt[x]===void 0?delete y[x]:y[x]=Pt[x];var H=[];for(var x in y)H.push(`${x}=${y[x]}`);Bo.strings=H}return Bo.strings},So=(u,y)=>{for(var x=0;x{var x=0;return Bo().forEach((H,k)=>{var T=y+x;U[u+k*4>>2]=T,So(H,T),x+=H.length+1}),0},VA=(u,y)=>{var x=Bo();U[u>>2]=x.length;var H=0;return x.forEach(k=>H+=k.length+1),U[y>>2]=H,0},me=u=>{g(u,new Ft(u))},dA=(u,y)=>{me(u)},SA=dA;function ae(u){try{var y=Ct.getStreamFromFD(u);return L.close(y),0}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return x.errno}}var xe=(u,y,x,H)=>{for(var k=0,T=0;T>2],gA=U[y+4>>2];y+=8;var wA=L.read(u,M,eA,gA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return eA.errno}}function st(u,y,x,H){y=Qn(y);try{if(isNaN(y))return 61;var k=Ct.getStreamFromFD(u);return L.llseek(k,y,x),j[H>>3]=BigInt(k.position),k.getdents&&y===0&&x===0&&(k.getdents=null),0}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return T.errno}}var bt=(u,y,x,H)=>{for(var k=0,T=0;T>2],gA=U[y+4>>2];y+=8;var wA=L.write(u,M,eA,gA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return eA.errno}}var Ri=u=>{var y=i["_"+u];return y},Ji=(u,y)=>{M.set(u,y)},Vt=u=>Vn(u),Ni=u=>{var y=_A(u)+1,x=Vt(y);return Io(u,x,y),x},ka=(u,y,x,H,k)=>{var T={string:Ne=>{var ni=0;return Ne!=null&&Ne!==0&&(ni=Ni(Ne)),ni},array:Ne=>{var ni=Vt(Ne.length);return Ji(Ne,ni),ni}};function eA(Ne){return y==="string"?Me(Ne):y==="boolean"?!!Ne:Ne}var gA=Ri(u),wA=[],Ae=0;if(H)for(var oe=0;oe(i._viz_set_y_invert=gt.A)(u),i._viz_set_reduce=u=>(i._viz_set_reduce=gt.B)(u),i._viz_get_graphviz_version=()=>(i._viz_get_graphviz_version=gt.C)(),i._free=u=>(i._free=gt.D)(u),i._malloc=u=>(i._malloc=gt.E)(u),i._viz_get_plugin_list=u=>(i._viz_get_plugin_list=gt.G)(u),i._viz_create_graph=(u,y,x)=>(i._viz_create_graph=gt.H)(u,y,x),i._viz_read_one_graph=u=>(i._viz_read_one_graph=gt.I)(u),i._viz_string_dup=(u,y)=>(i._viz_string_dup=gt.J)(u,y),i._viz_string_dup_html=(u,y)=>(i._viz_string_dup_html=gt.K)(u,y),i._viz_string_free=(u,y)=>(i._viz_string_free=gt.L)(u,y),i._viz_string_free_html=(u,y)=>(i._viz_string_free_html=gt.M)(u,y),i._viz_add_node=(u,y)=>(i._viz_add_node=gt.N)(u,y),i._viz_add_edge=(u,y,x)=>(i._viz_add_edge=gt.O)(u,y,x),i._viz_add_subgraph=(u,y)=>(i._viz_add_subgraph=gt.P)(u,y),i._viz_set_default_graph_attribute=(u,y,x)=>(i._viz_set_default_graph_attribute=gt.Q)(u,y,x),i._viz_set_default_node_attribute=(u,y,x)=>(i._viz_set_default_node_attribute=gt.R)(u,y,x),i._viz_set_default_edge_attribute=(u,y,x)=>(i._viz_set_default_edge_attribute=gt.S)(u,y,x),i._viz_set_attribute=(u,y,x)=>(i._viz_set_attribute=gt.T)(u,y,x),i._viz_free_graph=u=>(i._viz_free_graph=gt.U)(u),i._viz_create_context=()=>(i._viz_create_context=gt.V)(),i._viz_free_context=u=>(i._viz_free_context=gt.W)(u),i._viz_layout=(u,y,x)=>(i._viz_layout=gt.X)(u,y,x),i._viz_free_layout=(u,y)=>(i._viz_free_layout=gt.Y)(u,y),i._viz_reset_errors=()=>(i._viz_reset_errors=gt.Z)(),i._viz_render=(u,y,x)=>(i._viz_render=gt._)(u,y,x);var Fi=(u,y)=>(Fi=gt.$)(u,y),Oi=u=>(Oi=gt.aa)(u),Vn=u=>(Vn=gt.ba)(u),hn=()=>(hn=gt.ca)();i.ccall=ka,i.getValue=Ee,i.PATH=rA,i.UTF8ToString=Me,i.stringToUTF8=Io,i.lengthBytesUTF8=_A,i.FS=L;var Mt,sa;YA=function u(){Mt||Ho(),Mt||(YA=u)};function Ho(){if(hA>0||!sa&&(sa=1,iA(),hA>0))return;function u(){Mt||(Mt=1,i.calledRun=1,!S&&(BA(),n(i),oA()))}u()}return Ho(),A=a,A}})(),GgA=[[/^Error: (.*)/,"error"],[/^Warning: (.*)/,"warning"]];function ijA(t){return t.map(e=>{for(let A=0;A{if(typeof A.name!="string")throw new Error("image name must be a string");if(typeof A.width!="number"&&typeof A.width!="string")throw new Error("image width must be a number or string");if(typeof A.height!="number"&&typeof A.height!="string")throw new Error("image height must be a number or string");let i=t.PATH.join("/",A.name),n=` - -`;return t.FS.createPath("/",t.PATH.dirname(i)),t.FS.writeFile(i,n),i}):[]}function rjA(t,e){for(let A of e)t.FS.analyzePath(A).exists&&t.FS.unlink(A)}function sjA(t,e,A){let i;try{let n=t.lengthBytesUTF8(e);return i=t.ccall("malloc","number",["number"],[n+1]),t.stringToUTF8(e,i,n+1),t.ccall("viz_read_one_graph","number",["number"],[i])}finally{i&&t.ccall("free","number",["number"],[i])}}function gjA(t,e,A){let i=t.ccall("viz_create_graph","number",["string","number","number"],[e.name,typeof e.directed<"u"?e.directed:!0,typeof e.strict<"u"?e.strict:!1]);return YgA(t,i,e),i}function YgA(t,e,A){TgA(t,e,A),A.nodes&&A.nodes.forEach(i=>{if(typeof i.name>"u")throw new Error("nodes must have a name");let n=t.ccall("viz_add_node","number",["number","string"],[e,String(i.name)]);i.attributes&&JgA(t,e,n,i.attributes)}),A.edges&&A.edges.forEach(i=>{if(typeof i.tail>"u")throw new Error("edges must have a tail");if(typeof i.head>"u")throw new Error("edges must have a head");let n=t.ccall("viz_add_edge","number",["number","string","string"],[e,String(i.tail),String(i.head)]);i.attributes&&JgA(t,e,n,i.attributes)}),A.subgraphs&&A.subgraphs.forEach(i=>{let n=t.ccall("viz_add_subgraph","number",["number","string"],[e,typeof i.name<"u"?String(i.name):0]);YgA(t,n,i)})}function TgA(t,e,A){if(A.graphAttributes)for(let[i,n]of Object.entries(A.graphAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_graph_attribute","number",["number","string","number"],[e,i,o])});if(A.nodeAttributes)for(let[i,n]of Object.entries(A.nodeAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_node_attribute","number",["number","string","number"],[e,i,o])});if(A.edgeAttributes)for(let[i,n]of Object.entries(A.edgeAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_edge_attribute","number",["number","string","number"],[e,i,o])})}function JgA(t,e,A,i){for(let[n,o]of Object.entries(i))hb(t,e,o,a=>{t.ccall("viz_set_attribute","number",["number","string","number"],[A,n,a])})}function hb(t,e,A,i){let n;if(typeof A=="object"&&"html"in A?n=t.ccall("viz_string_dup_html","number",["number","string"],[e,String(A.html)]):n=t.ccall("viz_string_dup","number",["number","string"],[e,String(A)]),n==0)throw new Error("couldn't dup string");i(n),typeof A=="object"&&"html"in A?t.ccall("viz_string_free_html","number",["number","number"],[e,n]):t.ccall("viz_string_free","number",["number","number"],[e,n])}var JK=class{constructor(e){this.module=e}get graphvizVersion(){return ojA(this.module)}get formats(){return KgA(this.module,"device")}get engines(){return KgA(this.module,"layout")}renderFormats(e,A,i={}){return UgA(this.module,e,A,cA({engine:"dot"},i))}render(e,A={}){let i;A.format===void 0?i="dot":i=A.format;let n=UgA(this.module,e,[i],cA({engine:"dot"},A));return n.status==="success"&&(n.output=n.output[i]),n}renderString(e,A={}){let i=this.render(e,A);if(i.status!=="success")throw new Error(i.errors.find(n=>n.level=="error")?.message||"render failed");return i.output}renderSVGElement(e,A={}){let i=this.renderString(e,Ge(cA({},A),{format:"svg"})),n;return typeof A.trustedTypePolicy<"u"?n=A.trustedTypePolicy.createHTML(i):n=i,new DOMParser().parseFromString(n,"image/svg+xml").documentElement}renderJSON(e,A={}){let i=this.renderString(e,Ge(cA({},A),{format:"json"}));return JSON.parse(i)}};function HgA(){return tjA().then(t=>new JK(t))}var ub=class t{render(e){return nt(this,null,function*(){let A={format:"svg",engine:"dot"};return(yield HgA()).renderString(e,A)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var fb=class t{sendFeedback(e,A,i){return se(void 0)}getFeedback(e,A){return se(void 0)}deleteFeedback(e,A){return se(void 0)}getPositiveFeedbackReasons(){return se([])}getNegativeFeedbackReasons(){return se([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var mb=new yA("AudioPlayingService");var pb=new yA("VideoService");var wb=new yA("WebSocketService");var Db=class t{createMessagePartFromFile(e){return nt(this,null,function*(){return{inlineData:{displayName:e.name,data:yield this.readFileAsBytes(e),mimeType:e.type}}})}readFileAsBytes(e){return new Promise((A,i)=>{let n=new FileReader;n.onload=o=>{let a=o.target.result.split(",")[1];A(a)},n.onerror=i,n.readAsDataURL(e)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var yb=class t extends j7{createFunctionResponse(e,A,i){return{function_response:{id:e,name:A,response:i}}}static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var vb=class t extends m8{sanitizer=h($s);windowOpen(e,A,i,n){return e.open(A,i,n)}createObjectUrl(e){return URL.createObjectURL(e)}openBlobUrl(e){let A=this.createObjectUrl(e);return this.windowOpen(window,A,"_blank")}setAnchorHref(e,A){e.href=A}bypassSecurityTrustHtml(e){return this.sanitizer.bypassSecurityTrustHtml(e)}bypassSecurityTrustUrl(e){return this.sanitizer.bypassSecurityTrustUrl(e)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var bb=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();createSession(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(i,null)}return new $i}listSessions(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.get(i).pipe(fe(n=>({items:n,nextPageToken:""})))}return se({items:[],nextPageToken:""})}deleteSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.delete(n)}getSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.get(n)}importSession(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(n,{appName:A,userId:e,events:i})}return new $i}canEdit(e,A){return se(!0)}static \u0275fac=function(A){return new(A||t)(xo(Xs))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Mb=class t{audioRecordingService=h(cb);videoService=h(pb);webSocketService=h(wb);audioIntervalId=void 0;videoIntervalId=void 0;constructor(){}startAudioChat(n){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i}){let o=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${o}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming()})}stopAudioChat(){this.stopAudioStreaming(),this.webSocketService.closeConnection()}startAudioStreaming(){return nt(this,null,function*(){try{yield this.audioRecordingService.startRecording(),this.audioIntervalId=setInterval(()=>this.sendBufferedAudio(),250)}catch(e){console.error("Error accessing microphone:",e)}})}stopAudioStreaming(){clearInterval(this.audioIntervalId),this.audioIntervalId=void 0,this.audioRecordingService.stopRecording()}sendBufferedAudio(){let e=this.audioRecordingService.getCombinedAudioBuffer();if(!e)return;let A={blob:{mime_type:"audio/pcm",data:e}};this.webSocketService.sendMessage(A),this.audioRecordingService.cleanAudioBuffer()}startVideoChat(o){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i,videoContainer:n}){let a=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${a}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming(),yield this.startVideoStreaming(n)})}stopVideoChat(e){this.stopAudioStreaming(),this.stopVideoStreaming(e),this.webSocketService.closeConnection()}startVideoStreaming(e){return nt(this,null,function*(){try{yield this.videoService.startRecording(e),this.videoIntervalId=setInterval(()=>nt(this,null,function*(){return yield this.sendCapturedFrame()}),1e3)}catch(A){console.error("Error accessing camera:",A)}})}sendCapturedFrame(){return nt(this,null,function*(){let e=yield this.videoService.getCapturedFrame();if(!e)return;let A={blob:{mime_type:"image/jpeg",data:e}};this.webSocketService.sendMessage(A)})}stopVideoStreaming(e){clearInterval(this.videoIntervalId),this.videoIntervalId=void 0,this.videoService.stopRecording(e)}onStreamClose(){return this.webSocketService.onCloseReason()}closeStream(){this.webSocketService.closeConnection()}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var acA=su(ocA());var Sb=class t{stc(e){return(0,acA.default)(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var xb=class t{THEME_STORAGE_KEY="adk-theme-preference";currentTheme=jA(this.getInitialTheme());constructor(){Ga(()=>{this.applyTheme(this.currentTheme())})}getInitialTheme(){let e=window.localStorage.getItem(this.THEME_STORAGE_KEY);return e==="light"||e==="dark"?e:"dark"}applyTheme(e){let A=document.documentElement;A.classList.remove("light-theme","dark-theme"),A.classList.add(`${e}-theme`),A.style.colorScheme=e,window.localStorage.setItem(this.THEME_STORAGE_KEY,e)}toggleTheme(){this.currentTheme.update(e=>e==="light"?"dark":"light")}setTheme(e){this.currentTheme.set(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Rb=class t{selectedTraceRowSource=new Ht(void 0);selectedTraceRow$=this.selectedTraceRowSource.asObservable();eventDataSource=new Ht(void 0);eventData$=this.eventDataSource.asObservable();hoveredMessageIndicesSource=new Ht([]);hoveredMessageIndices$=this.hoveredMessageIndicesSource.asObservable();messagesSource=new Ht([]);messages$=this.messagesSource.asObservable();selectedRow(e){this.selectedTraceRowSource.next(e)}setEventData(e){this.eventDataSource.next(e)}setMessages(e){this.messagesSource.next(e)}setHoveredMessages(e,A){if(!e){this.hoveredMessageIndicesSource.next([]);return}let i=e.attributes,n=i&&i["gcp.vertex.agent.event_id"],o=[];for(let[a,r]of this.messagesSource.value.entries())r.role!=="user"&&this.eventDataSource.value?.get(r.eventId)?.invocationId===A&&(!n||i["gcp.vertex.agent.event_id"]===r.eventId)&&o.push(a);this.hoveredMessageIndicesSource.next(o)}resetTraceService(){this.eventDataSource.next(void 0),this.messagesSource.next([]),this.hoveredMessageIndicesSource.next([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Nb=class t{_isSessionLoading=new Ht(!1);_isSessionListLoading=new Ht(!1);_isEventRequestResponseLoading=new Ht(!1);_isMessagesLoading=new Ht(!1);_newMessagesLoadedResponse=new XA;_newMessagesLoadingFailedResponse=new XA;featureFlagService=h(vr);isSessionLoading(){return this._isSessionLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsSessionLoading(e){this._isSessionLoading.next(e)}isSessionListLoading(){return this._isSessionListLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsSessionListLoading(e){this._isSessionListLoading.next(e)}isEventRequestResponseLoading(){return this._isEventRequestResponseLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsEventRequestResponseLoading(e){this._isEventRequestResponseLoading.next(e)}setIsMessagesLoading(e){this._isMessagesLoading.next(e)}isMessagesLoading(){return this._isMessagesLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}lazyLoadMessages(e,A,i){throw new Error("Not implemented")}onNewMessagesLoaded(){return this._newMessagesLoadedResponse}onNewMessagesLoadingFailed(){return this._newMessagesLoadingFailedResponse}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Fb=class t{mediaRecorder;stream;renderer;videoElement;videoBuffer=[];constructor(e){this.renderer=e.createRenderer(null,null)}createVideoElement(e){e?.nativeElement&&(this.clearVideoElement(e),this.videoElement=this.renderer.createElement("video"),this.renderer.setAttribute(this.videoElement,"width","400"),this.renderer.setAttribute(this.videoElement,"height","300"),this.renderer.setAttribute(this.videoElement,"autoplay","true"),this.renderer.setAttribute(this.videoElement,"muted","true"),this.renderer.appendChild(e.nativeElement,this.videoElement))}startRecording(e){return nt(this,null,function*(){this.createVideoElement(e);try{this.stream=yield navigator.mediaDevices.getUserMedia({video:!0}),this.videoElement&&(this.videoElement.srcObject=this.stream),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm"}),this.mediaRecorder.start(1e3)}catch(A){console.error("Error accessing camera/microphone:",A)}})}getCapturedFrame(){return nt(this,null,function*(){try{let e=yield this.captureFrame();return this.blobToUint8Array(e)}catch(e){console.error("Error capturing frame:",e);return}})}blobToUint8Array(e){return nt(this,null,function*(){let A=yield e.arrayBuffer();return new Uint8Array(A)})}captureFrame(){return nt(this,null,function*(){return new Promise((e,A)=>{try{if(!this.videoElement){A(new Error("Video element not available"));return}let i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;let n=i.getContext("2d");if(!n){A(new Error("Canvas context not supported"));return}n.drawImage(this.videoElement,0,0,i.width,i.height),i.toBlob(o=>{o?e(o):A(new Error("Failed to create image blob"))},"image/png")}catch(i){A(i)}})})}stopRecording(e){this.mediaRecorder&&this.mediaRecorder.stop(),this.stream&&this.stream.getTracks().forEach(A=>A.stop()),this.clearVideoElement(e)}clearVideoElement(e){let A=e.nativeElement.querySelector("video");A&&this.renderer.removeChild(e.nativeElement,A)}static \u0275fac=function(A){return new(A||t)(xo(Kr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var dVA={url:"",deserializer:t=>JSON.parse(t.data),serializer:t=>JSON.stringify(t)},BVA="WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }",qm=class t extends aU{constructor(e,A){if(super(),this._socket=null,e instanceof $i)this.destination=A,this.source=e;else{let i=this._config=Object.assign({},dVA);if(this._output=new XA,typeof e=="string")i.url=e;else for(let n in e)e.hasOwnProperty(n)&&(i[n]=e[n]);if(!i.WebSocketCtor&&WebSocket)i.WebSocketCtor=WebSocket;else if(!i.WebSocketCtor)throw new Error("no WebSocket constructor can be found");this.destination=new ql}}lift(e){let A=new t(this._config,this.destination);return A.operator=e,A.source=this,A}_resetState(){this._socket=null,this.source||(this.destination=new ql),this._output=new XA}multiplex(e,A,i){let n=this;return new $i(o=>{try{n.next(e())}catch(r){o.error(r)}let a=n.subscribe({next:r=>{try{i(r)&&o.next(r)}catch(s){o.error(s)}},error:r=>o.error(r),complete:()=>o.complete()});return()=>{try{n.next(A())}catch(r){o.error(r)}a.unsubscribe()}})}_connectSocket(){let{WebSocketCtor:e,protocol:A,url:i,binaryType:n}=this._config,o=this._output,a=null;try{a=A?new e(i,A):new e(i),this._socket=a,n&&(this._socket.binaryType=n)}catch(s){o.error(s);return}let r=new Jn(()=>{this._socket=null,a&&a.readyState===1&&a.close()});a.onopen=s=>{let{_socket:g}=this;if(!g){a.close(),this._resetState();return}let{openObserver:l}=this._config;l&&l.next(s);let C=this.destination;this.destination=iU.create(I=>{if(a.readyState===1)try{let{serializer:d}=this._config;a.send(d(I))}catch(d){this.destination.error(d)}},I=>{let{closingObserver:d}=this._config;d&&d.next(void 0),I&&I.code?a.close(I.code,I.reason):o.error(new TypeError(BVA)),this._resetState()},()=>{let{closingObserver:I}=this._config;I&&I.next(void 0),a.close(),this._resetState()}),C&&C instanceof ql&&r.add(C.subscribe(this.destination))},a.onerror=s=>{this._resetState(),o.error(s)},a.onclose=s=>{a===this._socket&&this._resetState();let{closeObserver:g}=this._config;g&&g.next(s),s.wasClean?o.complete():o.error(s)},a.onmessage=s=>{try{let{deserializer:g}=this._config;o.next(g(s))}catch(g){o.error(g)}}}_subscribe(e){let{source:A}=this;return A?A.subscribe(e):(this._socket||this._connectSocket(),this._output.subscribe(e),e.add(()=>{let{_socket:i}=this;this._output.observers.length===0&&(i&&(i.readyState===1||i.readyState===0)&&i.close(),this._resetState())}),e)}unsubscribe(){let{_socket:e}=this;e&&(e.readyState===1||e.readyState===0)&&e.close(),this._resetState(),super.unsubscribe()}};var _b=class t{audioPlayingService=h(mb);socket$;messages$=new Ht("");audioBuffer=[];audioIntervalId=null;closeReasonSubject=new XA;connect(e){this.socket$=new qm({url:e,serializer:A=>JSON.stringify(A),deserializer:A=>A.data,closeObserver:{next:A=>{this.emitWsCloseReason(A.reason)}}}),this.socket$.subscribe(A=>{this.handleIncomingAudio(A),this.messages$.next(A)},A=>{console.error("WebSocket error:",A)}),this.audioIntervalId=setInterval(()=>this.playIncomingAudio(),250)}playIncomingAudio(){this.audioPlayingService.playAudio(this.audioBuffer),this.audioBuffer=[]}sendMessage(e){if(e.blob.data=this.arrayBufferToBase64(e.blob.data.buffer),!this.socket$||this.socket$.closed){console.error("WebSocket is not open.");return}this.socket$.next(e)}closeConnection(){clearInterval(this.audioIntervalId),this.audioIntervalId=null,this.socket$&&this.socket$.complete()}getMessages(){return this.messages$.asObservable()}arrayBufferToBase64(e){let A="",i=new Uint8Array(e),n=i.byteLength;for(let o=0;ot.json()).then(t=>{window.runtimeConfig=t,KU(Au,{providers:[dU(UU,Nn,JU,nb,gl,Yr,Ns),{provide:El,useClass:bb},{provide:sg,useClass:Kh},{provide:S7,useClass:fb},{provide:wb,useClass:_b},{provide:Cb,useValue:"./assets/audio-processor.js"},{provide:cb,useClass:Ib},{provide:mb,useClass:lb},{provide:pb,useClass:Fb},{provide:p8,useClass:Mb},{provide:CE,useClass:Eb},{provide:h0,useClass:Bb},{provide:u8,useClass:gb},{provide:cE,useClass:db},{provide:T2,useClass:Rb},{provide:vr,useClass:Qb},{provide:IE,useClass:ub},{provide:dE,useClass:Sb},{provide:u0,useClass:vb},{provide:f8,useClass:Db},{provide:TU,useValue:OU},{provide:zU,useValue:LgA},{provide:q7,useClass:yb},{provide:Gh,useValue:rb},...t.logo?[{provide:Z7,useValue:ab}]:[],{provide:Q0,useClass:sb},{provide:P7,useValue:$c},mT(),e4(),{provide:w8,useClass:o0},{provide:Ql,useClass:Nb},{provide:Fv,useClass:xb}]}).catch(e=>console.error(e))}); diff --git a/src/google/adk/cli/browser/prism-dark.css b/src/google/adk/cli/browser/prism-dark.css new file mode 100644 index 0000000000..df29f887f3 --- /dev/null +++ b/src/google/adk/cli/browser/prism-dark.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green} diff --git a/src/google/adk/cli/browser/prism-light.css b/src/google/adk/cli/browser/prism-light.css new file mode 100644 index 0000000000..8252e476e4 --- /dev/null +++ b/src/google/adk/cli/browser/prism-light.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{color:#000;background:none;text-shadow:0 1px white;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#905}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#690}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function,.token.class-name{color:#dd4a68}.token.regex,.token.important,.token.variable{color:#e90}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} diff --git a/src/google/adk/cli/browser/styles-2ORK6PRA.css b/src/google/adk/cli/browser/styles-2ORK6PRA.css new file mode 100644 index 0000000000..09d3d4823f --- /dev/null +++ b/src/google/adk/cli/browser/styles-2ORK6PRA.css @@ -0,0 +1 @@ +html{--mat-sys-background: #151316;--mat-sys-error: #ffb4ab;--mat-sys-error-container: #93000a;--mat-sys-inverse-on-surface: #323033;--mat-sys-inverse-primary: #7d00fa;--mat-sys-inverse-surface: #e6e1e6;--mat-sys-on-background: #e6e1e6;--mat-sys-on-error: #690005;--mat-sys-on-error-container: #ffdad6;--mat-sys-on-primary: #42008a;--mat-sys-on-primary-container: #ecdcff;--mat-sys-on-primary-fixed: #270057;--mat-sys-on-primary-fixed-variant: #5f00c0;--mat-sys-on-secondary: #352d40;--mat-sys-on-secondary-container: #eadef7;--mat-sys-on-secondary-fixed: #1f182a;--mat-sys-on-secondary-fixed-variant: #4b4357;--mat-sys-on-surface: #e6e1e6;--mat-sys-on-surface-variant: #e8e0eb;--mat-sys-on-tertiary: #42008a;--mat-sys-on-tertiary-container: #ecdcff;--mat-sys-on-tertiary-fixed: #270057;--mat-sys-on-tertiary-fixed-variant: #5f00c0;--mat-sys-outline: #958e99;--mat-sys-outline-variant: #49454e;--mat-sys-primary: #d5baff;--mat-sys-primary-container: #5f00c0;--mat-sys-primary-fixed: #ecdcff;--mat-sys-primary-fixed-dim: #d5baff;--mat-sys-scrim: #000000;--mat-sys-secondary: #cec2db;--mat-sys-secondary-container: #4b4357;--mat-sys-secondary-fixed: #eadef7;--mat-sys-secondary-fixed-dim: #cec2db;--mat-sys-shadow: #000000;--mat-sys-surface: #151316;--mat-sys-surface-bright: #3b383c;--mat-sys-surface-container: #211f22;--mat-sys-surface-container-high: #2b292d;--mat-sys-surface-container-highest: #363437;--mat-sys-surface-container-low: #1d1b1e;--mat-sys-surface-container-lowest: #0f0d11;--mat-sys-surface-dim: #151316;--mat-sys-surface-tint: #d5baff;--mat-sys-surface-variant: #49454e;--mat-sys-tertiary: #d5baff;--mat-sys-tertiary-container: #5f00c0;--mat-sys-tertiary-fixed: #ecdcff;--mat-sys-tertiary-fixed-dim: #d5baff;--mat-sys-neutral-variant20: #332f37;--mat-sys-neutral10: #1d1b1e;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Google Sans;--mat-sys-body-large-font: Google Sans;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Google Sans;--mat-sys-body-medium-font: Google Sans;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;--mat-sys-body-small: 400 .75rem / 1rem Google Sans;--mat-sys-body-small-font: Google Sans;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Google Sans;--mat-sys-display-large-font: Google Sans;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Google Sans;--mat-sys-display-medium-font: Google Sans;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Google Sans;--mat-sys-display-small-font: Google Sans;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Google Sans;--mat-sys-headline-large-font: Google Sans;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Google Sans;--mat-sys-headline-medium-font: Google Sans;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Google Sans;--mat-sys-headline-small-font: Google Sans;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Google Sans;--mat-sys-label-large-font: Google Sans;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Google Sans;--mat-sys-label-medium-font: Google Sans;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Google Sans;--mat-sys-label-small-font: Google Sans;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Google Sans;--mat-sys-title-large-font: Google Sans;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Google Sans;--mat-sys-title-medium-font: Google Sans;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Google Sans;--mat-sys-title-small-font: Google Sans;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12;color-scheme:dark;--mat-sys-primary: #7cc4ff;--mat-sys-on-primary: #003366;--mat-sys-primary-container: #004b8d;--mat-sys-on-primary-container: #d1e4ff;--mat-sys-secondary: #b5c9e2;--mat-sys-on-secondary: #203246;--mat-sys-secondary-container: #3a485a;--mat-sys-on-secondary-container: #d7e3f7}html.light-theme{--mat-sys-background: #fef8fc;--mat-sys-error: #ba1a1a;--mat-sys-error-container: #ffdad6;--mat-sys-inverse-on-surface: #f5eff4;--mat-sys-inverse-primary: #d5baff;--mat-sys-inverse-surface: #323033;--mat-sys-on-background: #1d1b1e;--mat-sys-on-error: #ffffff;--mat-sys-on-error-container: #93000a;--mat-sys-on-primary-container: #5f00c0;--mat-sys-on-primary-fixed: #270057;--mat-sys-on-primary-fixed-variant: #5f00c0;--mat-sys-on-secondary-container: #4b4357;--mat-sys-on-secondary-fixed: #1f182a;--mat-sys-on-secondary-fixed-variant: #4b4357;--mat-sys-on-surface: #1d1b1e;--mat-sys-on-surface-variant: #49454e;--mat-sys-on-tertiary: #ffffff;--mat-sys-on-tertiary-container: #5f00c0;--mat-sys-on-tertiary-fixed: #270057;--mat-sys-on-tertiary-fixed-variant: #5f00c0;--mat-sys-outline: #7b757f;--mat-sys-outline-variant: #cbc4cf;--mat-sys-primary: #7d00fa;--mat-sys-primary-container: #ecdcff;--mat-sys-primary-fixed: #ecdcff;--mat-sys-primary-fixed-dim: #d5baff;--mat-sys-scrim: #000000;--mat-sys-secondary: #645b70;--mat-sys-secondary-container: #eadef7;--mat-sys-secondary-fixed: #eadef7;--mat-sys-secondary-fixed-dim: #cec2db;--mat-sys-shadow: #000000;--mat-sys-surface: #fef8fc;--mat-sys-surface-bright: #fef8fc;--mat-sys-surface-container: #f2ecf1;--mat-sys-surface-container-high: #ede6eb;--mat-sys-surface-container-highest: #e6e1e6;--mat-sys-surface-container-low: #f8f2f6;--mat-sys-surface-container-lowest: #ffffff;--mat-sys-surface-dim: #ded8dd;--mat-sys-surface-tint: #7d00fa;--mat-sys-surface-variant: #e8e0eb;--mat-sys-tertiary: #7d00fa;--mat-sys-tertiary-container: #ecdcff;--mat-sys-tertiary-fixed: #ecdcff;--mat-sys-tertiary-fixed-dim: #d5baff;--mat-sys-neutral-variant20: #332f37;--mat-sys-neutral10: #1d1b1e;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Google Sans;--mat-sys-body-large-font: Google Sans;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Google Sans;--mat-sys-body-medium-font: Google Sans;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;--mat-sys-body-small: 400 .75rem / 1rem Google Sans;--mat-sys-body-small-font: Google Sans;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Google Sans;--mat-sys-display-large-font: Google Sans;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Google Sans;--mat-sys-display-medium-font: Google Sans;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Google Sans;--mat-sys-display-small-font: Google Sans;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Google Sans;--mat-sys-headline-large-font: Google Sans;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Google Sans;--mat-sys-headline-medium-font: Google Sans;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Google Sans;--mat-sys-headline-small-font: Google Sans;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Google Sans;--mat-sys-label-large-font: Google Sans;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Google Sans;--mat-sys-label-medium-font: Google Sans;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Google Sans;--mat-sys-label-small-font: Google Sans;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Google Sans;--mat-sys-title-large-font: Google Sans;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Google Sans;--mat-sys-title-medium-font: Google Sans;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Google Sans;--mat-sys-title-small-font: Google Sans;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12;color-scheme:light;--mat-sys-primary: #005fb7;--mat-sys-on-primary: #ffffff;--mat-sys-primary-container: #d1e4ff;--mat-sys-on-primary-container: #001c37;--mat-sys-secondary: #535f70;--mat-sys-on-secondary: #ffffff;--mat-sys-secondary-container: #d7e3f7;--mat-sys-on-secondary-container: #101c2b}html.dark-theme{--mat-sys-background: #151316;--mat-sys-error: #ffb4ab;--mat-sys-error-container: #93000a;--mat-sys-inverse-on-surface: #323033;--mat-sys-inverse-primary: #7d00fa;--mat-sys-inverse-surface: #e6e1e6;--mat-sys-on-background: #e6e1e6;--mat-sys-on-error: #690005;--mat-sys-on-error-container: #ffdad6;--mat-sys-on-primary: #42008a;--mat-sys-on-primary-container: #ecdcff;--mat-sys-on-primary-fixed: #270057;--mat-sys-on-primary-fixed-variant: #5f00c0;--mat-sys-on-secondary: #352d40;--mat-sys-on-secondary-container: #eadef7;--mat-sys-on-secondary-fixed: #1f182a;--mat-sys-on-secondary-fixed-variant: #4b4357;--mat-sys-on-surface: #e6e1e6;--mat-sys-on-surface-variant: #e8e0eb;--mat-sys-on-tertiary: #42008a;--mat-sys-on-tertiary-container: #ecdcff;--mat-sys-on-tertiary-fixed: #270057;--mat-sys-on-tertiary-fixed-variant: #5f00c0;--mat-sys-outline: #958e99;--mat-sys-outline-variant: #49454e;--mat-sys-primary: #d5baff;--mat-sys-primary-container: #5f00c0;--mat-sys-primary-fixed: #ecdcff;--mat-sys-primary-fixed-dim: #d5baff;--mat-sys-scrim: #000000;--mat-sys-secondary: #cec2db;--mat-sys-secondary-container: #4b4357;--mat-sys-secondary-fixed: #eadef7;--mat-sys-secondary-fixed-dim: #cec2db;--mat-sys-shadow: #000000;--mat-sys-surface: #151316;--mat-sys-surface-bright: #3b383c;--mat-sys-surface-container: #211f22;--mat-sys-surface-container-high: #2b292d;--mat-sys-surface-container-highest: #363437;--mat-sys-surface-container-low: #1d1b1e;--mat-sys-surface-container-lowest: #0f0d11;--mat-sys-surface-dim: #151316;--mat-sys-surface-tint: #d5baff;--mat-sys-surface-variant: #49454e;--mat-sys-tertiary: #d5baff;--mat-sys-tertiary-container: #5f00c0;--mat-sys-tertiary-fixed: #ecdcff;--mat-sys-tertiary-fixed-dim: #d5baff;--mat-sys-neutral-variant20: #332f37;--mat-sys-neutral10: #1d1b1e;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Google Sans;--mat-sys-body-large-font: Google Sans;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Google Sans;--mat-sys-body-medium-font: Google Sans;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;--mat-sys-body-small: 400 .75rem / 1rem Google Sans;--mat-sys-body-small-font: Google Sans;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Google Sans;--mat-sys-display-large-font: Google Sans;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Google Sans;--mat-sys-display-medium-font: Google Sans;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Google Sans;--mat-sys-display-small-font: Google Sans;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Google Sans;--mat-sys-headline-large-font: Google Sans;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Google Sans;--mat-sys-headline-medium-font: Google Sans;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Google Sans;--mat-sys-headline-small-font: Google Sans;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Google Sans;--mat-sys-label-large-font: Google Sans;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Google Sans;--mat-sys-label-medium-font: Google Sans;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Google Sans;--mat-sys-label-small-font: Google Sans;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Google Sans;--mat-sys-title-large-font: Google Sans;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Google Sans;--mat-sys-title-medium-font: Google Sans;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Google Sans;--mat-sys-title-small-font: Google Sans;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12;color-scheme:dark;--mat-sys-primary: #7cc4ff;--mat-sys-on-primary: #003366;--mat-sys-primary-container: #004b8d;--mat-sys-on-primary-container: #d1e4ff;--mat-sys-secondary: #b5c9e2;--mat-sys-on-secondary: #203246;--mat-sys-secondary-container: #3a485a;--mat-sys-on-secondary-container: #d7e3f7}body{height:100vh;margin:0;font-family:Roboto,Helvetica Neue,sans-serif}markdown p{margin-block-start:.5em;margin-block-end:.5em}markdown pre{border-radius:8px!important}markdown code{border-radius:4px!important}.json-tooltip-panel{color:var(--mat-sys-on-surface)!important;border:1px solid var(--mat-sys-outline-variant)!important;border-radius:8px!important;padding:12px 16px!important;box-shadow:0 4px 12px #00000026!important;max-width:800px!important;overflow:hidden!important;background-color:var(--mat-sys-surface-container-high)!important}ngx-json-viewer .segment-key{color:var(--mat-sys-primary)!important}ngx-json-viewer .segment-value{color:inherit}ngx-json-viewer .segment-type-string{color:var(--mat-sys-tertiary)!important}ngx-json-viewer .segment-type-number{color:var(--mat-sys-error)!important}ngx-json-viewer .segment-type-boolean{color:var(--mat-sys-secondary)!important}ngx-json-viewer .segment-type-null{color:var(--mat-sys-outline)!important}.user-avatar-menu .mat-mdc-menu-content{padding:0}.html-tooltip-panel .content-bubble{max-width:100%!important}.html-tooltip-panel .message-text p{white-space:pre-line;word-break:break-word;overflow-wrap:break-word} diff --git a/src/google/adk/cli/browser/styles-SI5RXIFC.css b/src/google/adk/cli/browser/styles-SI5RXIFC.css deleted file mode 100644 index d69c02fdf5..0000000000 --- a/src/google/adk/cli/browser/styles-SI5RXIFC.css +++ /dev/null @@ -1 +0,0 @@ -html,html.light-theme,html.dark-theme{--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}html{font-family:Google Sans,Helvetica Neue,sans-serif!important}body{height:100vh;margin:0}markdown p{margin-block-start:.5em;margin-block-end:.5em}.cdk-overlay-container{z-index:9999!important}.mat-mdc-menu-panel{z-index:10000!important}.mat-mdc-menu-panel,.mat-mdc-menu-panel .mat-mdc-menu-content{background-color:var(--mdc-dialog-container-color)!important}.mat-mdc-menu-item,.mat-mdc-menu-item .mdc-list-item__primary-text{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-menu-item:hover,.mat-mdc-menu-item:focus{background-color:var(--builder-tool-item-hover-background-color)!important}.mat-mdc-menu-item .mat-icon{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-container{--mdc-snackbar-container-color: var(--mdc-dialog-container-color) !important;--mdc-snackbar-supporting-text-color: var(--mdc-dialog-supporting-text-color) !important;--mat-snack-bar-button-color: var(--builder-text-link-color) !important}.mdc-snackbar__surface{background-color:var(--mdc-dialog-container-color)!important}.mdc-snackbar__label,.mat-mdc-snack-bar-label{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-action{color:var(--builder-text-link-color)!important}html.dark-theme{--mat-sys-primary: black;--mdc-checkbox-selected-icon-color: white;--mat-sys-background: #131314;--mat-tab-header-active-label-text-color: #8ab4f8;--mat-tab-header-active-hover-label-text-color: #8ab4f8;--mat-tab-header-active-focus-label-text-color: #8ab4f8;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #89b4f8;--mat-select-trigger-text-color: #8ab4f8;--mat-select-panel-background-color: #2b2b2f;--mat-option-label-text-color: #e8eaed;--mat-option-hover-state-layer-color: rgba(255, 255, 255, .08);--mat-option-focus-state-layer-color: rgba(255, 255, 255, .08);--mat-option-selected-state-layer-color: rgba(138, 180, 248, .24);--mat-form-field-container-text-color: white;--mdc-filled-text-field-input-text-color: white;--mdc-filled-text-field-label-text-color: #9aa0a6;--mdc-filled-text-field-container-color: #303030;--mdc-outlined-text-field-input-text-color: white;--mdc-outlined-text-field-label-text-color: #9aa0a6;--mat-form-field-state-layer-color: white;--mdc-dialog-supporting-text-color: #e8eaed;--mat-dialog-content-text-color: #e8eaed;--mat-expansion-container-text-color: #e8eaed;--mat-expansion-header-text-color: #e8eaed;--adk-web-text-color-light-gray: #c4c7c5}html.light-theme{--mat-sys-primary: #9AA0A6;--mdc-checkbox-selected-icon-color: #305f9d;--mat-sys-background: #ffffff;--mat-tab-header-active-label-text-color: #305f9d;--mat-tab-header-active-hover-label-text-color: #305f9d;--mat-tab-header-active-focus-label-text-color: #305f9d;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #305f9d;--mat-select-trigger-text-color: #202124;--mat-select-panel-background-color: #ffffff;--mat-option-label-text-color: #202124;--mat-option-hover-state-layer-color: rgba(0, 0, 0, .04);--mat-option-focus-state-layer-color: rgba(0, 0, 0, .04);--mat-option-selected-state-layer-color: rgba(48, 95, 157, .12);--mat-form-field-container-text-color: #202124;--mdc-filled-text-field-input-text-color: #202124;--mdc-filled-text-field-label-text-color: #5f5e5e;--mdc-filled-text-field-container-color: #f3f0f0;--mdc-outlined-text-field-input-text-color: #202124;--mdc-outlined-text-field-label-text-color: #5f5e5e;--mat-form-field-state-layer-color: #202124;--mdc-dialog-supporting-text-color: #202124;--mat-dialog-content-text-color: #202124;--mat-expansion-container-text-color: #202124;--mat-expansion-header-text-color: #202124;--adk-web-text-color-light-gray: #c4c7c5}html.dark-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #e3e3e3;--mat-dialog-container-color: #2b2b2f;--mat-dialog-subhead-color: white}html.light-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #202124;--mat-dialog-container-color: #ffffff;--mat-dialog-subhead-color: #202124}.mat-mdc-dialog-container .mat-mdc-dialog-title.mdc-dialog__title{font-family:var(--mdc-dialog-subhead-font-family);font-style:var(--mdc-dialog-subhead-font-style);font-weight:var(--mdc-dialog-subhead-font-weight);font-size:var(--mdc-dialog-subhead-font-size);line-height:var(--mdc-dialog-subhead-line-height);color:var(--mdc-dialog-subhead-color)}html.dark-theme{--chat-panel-function-event-button-background-color: white;--chat-panel-function-event-button-highlight-background-color: rgb( 15, 82, 35 );--chat-panel-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-panel-function-event-button-highlight-color: white;--chat-panel-user-message-message-card-background-color: #004a77;--chat-panel-user-message-message-card-color: white;--chat-panel-bot-message-message-card-background-color: #303030;--chat-panel-bot-message-message-card-color: white;--chat-panel-bot-message-focus-within-message-card-background-color: #131314;--chat-panel-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-panel-message-textarea-background-color: #303030;--chat-panel-message-textarea-focus-background-color: #131314;--chat-panel-eval-compare-container-background-color: #484848;--chat-panel-actual-result-border-right-color: #8a8686;--chat-panel-eval-response-header-border-bottom-color: #8a8686;--chat-panel-header-expected-color: #44c265;--chat-panel-header-actual-color: #ff8983;--chat-panel-eval-pass-color: #44c265;--chat-panel-eval-fail-color: #ff8983;--chat-panel-input-field-textarea-color: white;--chat-panel-input-field-textarea-placeholder-color: #8e918f;--chat-panel-input-field-textarea-caret-color: white;--chat-panel-input-field-button-color: white;--chat-panel-input-field-button-background-color: rgb(51, 53, 55);--chat-panel-mat-mdc-mini-fab-background-color: white;--chat-panel-mat-mdc-mini-fab-mat-icon-color: black;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-panel-delete-button-background-color: rgba(0, 0, 0, .7);--chat-panel-delete-button-color: white;--chat-panel-file-container-background-color: #1e1e1e;--chat-panel-thought-chip-background-color: #8ab4f8;--chat-panel-link-style-button-color: #007bff;--artifact-tab-download-button-background-color: #8ab4f8;--artifact-tab-white-separator-border-top-color: white;--artifact-tab-version-select-container-background-color: #212123;--artifact-tab-link-style-button-color: #007bff;--artifact-tab-link-style-button-hover-color: #0056b3;--artifact-tab-link-style-button-focus-outline-color: #007bff;--artifact-tab-link-style-button-active-color: #004085;--artifact-tab-link-style-button-disabled-color: #6c757d;--audio-player-container-background-color: #f0f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #007bff;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0056b3;--chat-drawer-container-background-color: #131314;--chat-event-container-color: white;--chat-card-background-color: #131314;--chat-function-event-button-background-color: white;--chat-function-event-button-highlight-background-color: rgb(15, 82, 35);--chat-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #004a77;--chat-user-message-message-card-color: white;--chat-bot-message-message-card-background-color: #303030;--chat-bot-message-message-card-color: white;--chat-bot-message-focus-within-message-card-background-color: #131314;--chat-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-message-textarea-background-color: #303030;--chat-message-textarea-focus-background-color: #131314;--chat-eval-compare-container-background-color: #484848;--chat-actual-result-border-right-color: #8a8686;--chat-eval-response-header-border-bottom-color: #8a8686;--chat-header-expected-color: #44c265;--chat-header-actual-color: #ff8983;--chat-eval-pass-color: #44c265;--chat-eval-fail-color: #ff8983;--chat-side-drawer-background-color: #1b1b1b;--chat-side-drawer-color: white;--chat-file-item-background-color: #eee;--chat-empty-state-container-color: #eee;--chat-warning-color: #ffc185;--chat-error-color: #ff4545;--chat-mat-mdc-unelevated-button-color: #202124;--chat-mat-mdc-unelevated-button-background-color: #8ab4f8;--chat-mdc-linear-progress-buffer-dots-background-color: white;--chat-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-segment-key-color: lightgray;--chat-bottom-resize-handler-background-color: #5f6368;--chat-readonly-badge-background-color: #ff8983;--chat-readonly-badge-color: #202124;--chat-trace-detail-container-background-color: #1b1b1b;--chat-toolbar-background-color: #1b1b1b;--chat-toolbar-edit-mode-background-color: #44c2651a;--chat-toolbar-session-text-color: #fdfdfd;--chat-toolbar-session-id-color: #9aa0a6;--chat-toolbar-icon-color: #c4c7c5;--chat-toolbar-new-session-color: #9aa0a6;--chat-toolbar-sse-toggle-label-text-color: #e8eaed;--chat-toolbar-sse-toggle-unselected-track-color: #5f6368;--chat-toolbar-sse-toggle-unselected-handle-color: #9aa0a6;--chat-toolbar-sse-toggle-selected-track-color: #8ab4f9;--chat-toolbar-sse-toggle-selected-handle-color: #1b73e8;--chat-toolbar-sse-toggle-track-outline-color: #1b73e8;--chat-mat-drawer-border-right-color: #444746;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--eval-tab-eval-set-actions-color: #9aa0a6;--eval-tab-empty-eval-info-background-color: #202124;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .15);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .3);--eval-tab-info-title-color: #e8eaed;--eval-tab-info-detail-color: #e8eaed;--eval-tab-info-create-color: #8ab4f8;--eval-tab-selected-eval-case-color: #8ab4f8;--eval-tab-save-session-btn-background-color1: rgba(138, 180, 248, .24);--eval-tab-save-session-btn-background-color2: #202124;--eval-tab-save-session-btn-text-color: #d2e3fc;--eval-tab-run-eval-btn-border-color: #5f6368;--eval-tab-run-eval-btn-color: #8ab4f8;--eval-tab-run-eval-btn-hover-background-color: #202124;--eval-tab-result-btn-border-color: #5f6368;--eval-tab-result-btn-hover-background-color: #202124;--eval-tab-result-btn-pass-color: #44c265;--eval-tab-result-btn-fail-color: #ff8983;--eval-tab-status-card-background-color: #2d2d2d;--eval-tab-status-card-timestamp-color: #e0e0e0;--eval-tab-status-card-metric-color: #bbb;--eval-tab-status-card-failed-color: #ff6b6b;--eval-tab-status-card-separator-color: #666;--eval-tab-status-card-passed-color: #63e6be;--eval-tab-status-card-action-mat-icon-color: #bdbdbd;--eval-tab-status-card-icon-color: #bdbdbd;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--run-eval-config-dialog-threshold-slider-active-track-color: #4285f4;--run-eval-config-dialog-threshold-slider-inactive-track-color: #616161;--run-eval-config-dialog-threshold-slider-handle-color: #4285f4;--run-eval-config-dialog-threshold-slider-ripple-color: #4285f4;--run-eval-config-dialog-mdc-slider-thumb-background-color: black;--event-tab-events-wrapper-color: #9aa0a6;--event-tab-event-index-color: #80868b;--event-tab-event-list-active-indicator-color: orange;--event-tab-event-list-list-item-container-color: #2b2b2f;--event-tab-mdc-list-item-border-color: #5f6368;--event-tab-mdc-list-item-hover-background-color: #1c1b1c;--trace-chart-trace-label-color: #e3e3e3;--trace-chart-trace-bar-background-color: #2f4d65;--trace-chart-trace-bar-color: #8dabbf;--trace-chart-trace-duration-color: #888;--trace-chart-vertical-line-background-color: #ccc;--trace-chart-horizontal-line-background-color: #ccc;--session-tab-session-wrapper-color: #9aa0a6;--session-tab-session-item-background-color: #303030;--session-tab-session-item-hover-background-color: #141414;--session-tab-session-item-current-background-color: #004a77;--session-tab-session-id-color: #e8eaed;--session-tab-session-date-color: #9aa0a6;--side-panel-button-filled-container-color: #89b4f8;--side-panel-button-filled-label-text-color: black;--side-panel-mat-icon-color: #bdc1c6;--side-panel-resize-handler-background-color: #5f6368;--side-panel-details-panel-container-background-color: #242424;--side-panel-details-content-color: white;--side-panel-powered-by-adk-color: grey;--side-panel-app-select-container-background-color: #212123;--side-panel-select-placeholder-text-color: #8ab4f8;--side-panel-select-enabled-trigger-text-color: #8ab4f8;--side-panel-select-enabled-arrow-color: #8ab4f8;--side-panel-app-name-option-color: #9aa0a6;--trace-tab-trace-title-color: #9aa0a6;--trace-tab-trace-label-color: #e3e3e3;--trace-tab-trace-bar-background-color: #2f4d65;--trace-tab-trace-bar-color: #8dabbf;--trace-tab-trace-duration-color: #888;--trace-tab-vertical-line-background-color: #ccc;--trace-tab-horizontal-line-background-color: #ccc;--trace-tab-trace-item-container-background-color: #333537;--trace-tab-trace-item-header-focus-state-layer-color: rgba(138, 180, 248, .12);--trace-tab-trace-item-header-description-color: #8e918f;--trace-tab-mat-expansion-panel-header-focus-background-color: #444746;--trace-tab-mat-expansion-panel-header-background-color: #444746;--trace-tab-mat-expansion-panel-header-hover-background-color: #444746;--trace-event-json-viewer-container-background-color: #1b1b1b;--trace-tree-trace-label-color: #e3e3e3;--trace-tree-trace-bar-background-color: #2f4d65;--trace-tree-trace-bar-color: #8dabbf;--trace-tree-short-trace-bar-duration-color: #8dabbf;--trace-tree-trace-duration-color: #888;--trace-tree-trace-row-hover-background-color: #3b3d3c;--trace-tree-trace-row-selected-background-color: #3b3d3c;--trace-tree-vertical-line-background-color: #ccc;--trace-tree-horizontal-line-background-color: #ccc;--trace-tree-invocation-id-container-color: #9aa0a6;--trace-tree-trace-row-left-span-div-color: white;--trace-tree-trace-row-left-is-event-row-color: #8ab4f8;--builder-container-background-color: #131314;--builder-panel-background-color: #202124;--builder-tabs-background-color: #202124;--builder-card-background-color: #303030;--builder-secondary-background-color: #333537;--builder-tertiary-background-color: #1b1b1b;--builder-hover-background-color: #141414;--builder-border-color: #444746;--builder-text-primary-color: #e8eaed;--builder-text-secondary-color: #9aa0a6;--builder-text-tertiary-color: #c4c7c5;--builder-text-muted-color: #5c5f5e;--builder-text-link-color: #aecbfa;--builder-breadcrumb-separator-color: #666;--builder-form-field-background-color: #333537;--builder-tool-chip-background-color: #303030;--builder-tool-chip-hover-color: #3c4043;--builder-callback-chip-background-color: #333537;--builder-callback-chip-text-color: #f1f3f4;--builder-callback-chip-type-color: #8f9aa6;--builder-callback-chip-name-color: #f5f7f9;--builder-expansion-background-color: #333537;--builder-expansion-header-description-color: #8e918f;--builder-expansion-hover-color: #444746;--builder-menu-background-color: #303030;--builder-menu-item-hover-color: #444746;--builder-menu-divider-color: #444746;--builder-button-primary-background-color: #8ab4f8;--builder-button-primary-text-color: #202124;--builder-button-primary-hover-color: #aecbfa;--builder-button-secondary-text-color: #9aa0a6;--builder-button-secondary-border-color: rgba(154, 160, 166, .3);--builder-button-secondary-hover-background-color: rgba(154, 160, 166, .1);--builder-button-secondary-hover-text-color: #e8eaed;--builder-add-button-background-color: rgba(138, 180, 248, .24);--builder-add-button-text-color: #d2e3fc;--builder-icon-color: #f1f3f4;--builder-assistant-panel-background-color: #2b2b2b;--builder-assistant-panel-header-background-color: #292929;--builder-assistant-panel-border-color: #3c3c3c;--builder-assistant-input-background-color: #1a1a1a;--builder-assistant-input-text-color: #e0e0e0;--builder-assistant-input-placeholder-color: #808080;--builder-assistant-user-message-background-color: #1a1a1a;--builder-assistant-user-message-border-color: #404040;--builder-assistant-user-message-text-color: #e3e3e3;--builder-assistant-bot-message-text-color: #d4d4d4;--builder-assistant-send-button-color: #888888;--builder-assistant-send-button-hover-color: #b0b0b0;--builder-assistant-send-button-disabled-color: #4a4a4a;--builder-canvas-container-background: linear-gradient(135deg, #0f0f0f 0%, #1a1a1a 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .4);--builder-canvas-header-background: linear-gradient(90deg, #1e1e1e 0%, #2a2a2a 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #8ab4f8, #4285f4);--builder-canvas-workspace-background: #131314;--builder-canvas-instruction-background: rgba(19, 19, 20, .9);--builder-canvas-instruction-border: rgba(138, 180, 248, .2);--builder-canvas-node-background: rgba(85, 107, 116, .4);--builder-canvas-node-border: #474747;--builder-canvas-node-hover-border: #666;--builder-canvas-node-chip-outline: rgba(255, 255, 255, .1);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(0, 187, 234, .2), rgba(0, 78, 122, .4));--builder-canvas-group-background: #1c1c1c;--builder-canvas-group-border: #3e3e3e;--builder-canvas-handle-fill: rgba(0, 0, 0, 1);--builder-canvas-reconnect-handle-fill: rgba(0, 187, 234, .15);--builder-canvas-workflow-chip-background: rgba(0, 187, 234, .2);--builder-canvas-workflow-chip-border: rgba(0, 187, 234, .4);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #1f2330 0%, #131314 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #222a3a 0%, #16181d 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(0, 187, 234, .35);--builder-canvas-empty-group-background: rgba(255, 255, 255, .02);--builder-canvas-empty-group-border: rgba(0, 187, 234, .3);--builder-canvas-empty-group-hover-background: rgba(255, 255, 255, .04);--builder-canvas-empty-group-hover-border: rgba(0, 187, 234, .5);--builder-canvas-empty-group-btn-background: rgba(0, 187, 234, .1);--builder-canvas-empty-group-btn-hover-background: rgba(0, 187, 234, .2);--builder-button-background-color: rgba(138, 180, 248, .1);--builder-button-border-color: rgba(138, 180, 248, .3);--builder-button-text-color: #8ab4f8;--builder-button-hover-background-color: rgba(138, 180, 248, .2);--builder-button-hover-border-color: #8ab4f8;--builder-item-hover-color: rgba(138, 180, 248, .1);--builder-chip-background-color: rgba(138, 180, 248, .2);--builder-accent-color: #00bbea;--builder-tool-item-background-color: rgba(255, 255, 255, .05);--builder-tool-item-border-color: rgba(255, 255, 255, .1);--builder-tool-item-hover-background-color: rgba(255, 255, 255, .1);--mat-table-row-item-label-text-color: #fff;--mat-table-header-headline-color: #fff;--mat-progress-spinner-active-indicator-color: #a8c7fa;--mat-progress-spinner-size: 80}html.light-theme{--chat-panel-function-event-button-background-color: #202124;--chat-panel-function-event-button-highlight-background-color: #0f5223;--chat-panel-function-event-button-highlight-border-color: #0f5223;--chat-panel-function-event-button-highlight-color: white;--chat-panel-user-message-message-card-background-color: #d5e3ff;--chat-panel-user-message-message-card-color: #202124;--chat-panel-bot-message-message-card-background-color: #f3f0f0;--chat-panel-bot-message-message-card-color: #202124;--chat-panel-bot-message-focus-within-message-card-background-color: #ffffff;--chat-panel-bot-message-focus-within-message-card-border-color: #305f9d;--chat-panel-message-textarea-background-color: #f3f0f0;--chat-panel-message-textarea-focus-background-color: #ffffff;--chat-panel-eval-compare-container-background-color: #e5e2e2;--chat-panel-actual-result-border-right-color: #c8c6c6;--chat-panel-eval-response-header-border-bottom-color: #c8c6c6;--chat-panel-header-expected-color: #0f5223;--chat-panel-header-actual-color: #ba1a1a;--chat-panel-eval-pass-color: #0f5223;--chat-panel-eval-fail-color: #ba1a1a;--chat-panel-input-field-textarea-color: #202124;--chat-panel-input-field-textarea-placeholder-color: #5f5e5e;--chat-panel-input-field-textarea-caret-color: #202124;--chat-panel-input-field-button-color: #202124;--chat-panel-input-field-button-background-color: #e5e2e2;--chat-panel-mat-mdc-mini-fab-background-color: #305f9d;--chat-panel-mat-mdc-mini-fab-mat-icon-color: white;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-panel-delete-button-background-color: rgba(255, 255, 255, .9);--chat-panel-delete-button-color: #202124;--chat-panel-file-container-background-color: #f3f0f0;--chat-panel-thought-chip-background-color: #305f9d;--chat-panel-link-style-button-color: #305f9d;--artifact-tab-download-button-background-color: #305f9d;--artifact-tab-white-separator-border-top-color: #202124;--artifact-tab-version-select-container-background-color: #f3f0f0;--artifact-tab-link-style-button-color: #305f9d;--artifact-tab-link-style-button-hover-color: #0f4784;--artifact-tab-link-style-button-focus-outline-color: #305f9d;--artifact-tab-link-style-button-active-color: #003061;--artifact-tab-link-style-button-disabled-color: #929090;--audio-player-container-background-color: #f3f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #305f9d;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0f4784;--chat-drawer-container-background-color: #ffffff;--chat-event-container-color: #202124;--chat-card-background-color: #ffffff;--chat-function-event-button-background-color: #202124;--chat-function-event-button-highlight-background-color: #0f5223;--chat-function-event-button-highlight-border-color: #0f5223;--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #d5e3ff;--chat-user-message-message-card-color: #202124;--chat-bot-message-message-card-background-color: #f3f0f0;--chat-bot-message-message-card-color: #202124;--chat-bot-message-focus-within-message-card-background-color: #ffffff;--chat-bot-message-focus-within-message-card-border-color: #305f9d;--chat-message-textarea-background-color: #f3f0f0;--chat-message-textarea-focus-background-color: #ffffff;--chat-eval-compare-container-background-color: #e5e2e2;--chat-actual-result-border-right-color: #c8c6c6;--chat-eval-response-header-border-bottom-color: #c8c6c6;--chat-header-expected-color: #0f5223;--chat-header-actual-color: #ba1a1a;--chat-eval-pass-color: #0f5223;--chat-eval-fail-color: #ba1a1a;--chat-side-drawer-background-color: #f3f0f0;--chat-side-drawer-color: #202124;--chat-file-item-background-color: #e5e2e2;--chat-empty-state-container-color: #202124;--chat-warning-color: #93000a;--chat-error-color: #ba1a1a;--chat-mat-mdc-unelevated-button-color: white;--chat-mat-mdc-unelevated-button-background-color: #305f9d;--chat-mdc-linear-progress-buffer-dots-background-color: #202124;--chat-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-segment-key-color: #5f5e5e;--chat-bottom-resize-handler-background-color: #adabab;--chat-readonly-badge-background-color: #ba1a1a;--chat-readonly-badge-color: white;--chat-trace-detail-container-background-color: #f3f0f0;--chat-toolbar-background-color: #f3f0f0;--chat-toolbar-edit-mode-background-color: rgba(15, 82, 35, .1);--chat-toolbar-session-text-color: #202124;--chat-toolbar-session-id-color: #5f5e5e;--chat-toolbar-icon-color: #5f5e5e;--chat-toolbar-new-session-color: #5f5e5e;--chat-toolbar-sse-toggle-label-text-color: #202124;--chat-toolbar-sse-toggle-unselected-track-color: #c8c6c6;--chat-toolbar-sse-toggle-unselected-handle-color: #5f5e5e;--chat-toolbar-sse-toggle-selected-track-color: #82adf0;--chat-toolbar-sse-toggle-selected-handle-color: #305f9d;--chat-toolbar-sse-toggle-track-outline-color: #305f9d;--chat-mat-drawer-border-right-color: #c8c6c6;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--eval-tab-eval-set-actions-color: #5f5e5e;--eval-tab-empty-eval-info-background-color: #f3f0f0;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .08);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .15);--eval-tab-info-title-color: #202124;--eval-tab-info-detail-color: #202124;--eval-tab-info-create-color: #305f9d;--eval-tab-selected-eval-case-color: #305f9d;--eval-tab-save-session-btn-background-color1: rgba(48, 95, 157, .12);--eval-tab-save-session-btn-background-color2: #f3f0f0;--eval-tab-save-session-btn-text-color: #0f4784;--eval-tab-run-eval-btn-border-color: #adabab;--eval-tab-run-eval-btn-color: #305f9d;--eval-tab-run-eval-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-border-color: #adabab;--eval-tab-result-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-pass-color: #0f5223;--eval-tab-result-btn-fail-color: #ba1a1a;--eval-tab-status-card-background-color: #f3f0f0;--eval-tab-status-card-timestamp-color: #5f5e5e;--eval-tab-status-card-metric-color: #787777;--eval-tab-status-card-failed-color: #ba1a1a;--eval-tab-status-card-separator-color: #c8c6c6;--eval-tab-status-card-passed-color: #0f5223;--eval-tab-status-card-action-mat-icon-color: #5f5e5e;--eval-tab-status-card-icon-color: #5f5e5e;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--run-eval-config-dialog-threshold-slider-active-track-color: #305f9d;--run-eval-config-dialog-threshold-slider-inactive-track-color: #c8c6c6;--run-eval-config-dialog-threshold-slider-handle-color: #305f9d;--run-eval-config-dialog-threshold-slider-ripple-color: #305f9d;--run-eval-config-dialog-mdc-slider-thumb-background-color: white;--event-tab-events-wrapper-color: #5f5e5e;--event-tab-event-index-color: #787777;--event-tab-event-list-active-indicator-color: #ff5449;--event-tab-event-list-list-item-container-color: #f3f0f0;--event-tab-mdc-list-item-border-color: #c8c6c6;--event-tab-mdc-list-item-hover-background-color: #e5e2e2;--trace-chart-trace-label-color: #202124;--trace-chart-trace-bar-background-color: #a7c8ff;--trace-chart-trace-bar-color: #305f9d;--trace-chart-trace-duration-color: #787777;--trace-chart-vertical-line-background-color: #c8c6c6;--trace-chart-horizontal-line-background-color: #c8c6c6;--session-tab-session-wrapper-color: #5f5e5e;--session-tab-session-item-background-color: #f3f0f0;--session-tab-session-item-hover-background-color: #e5e2e2;--session-tab-session-item-current-background-color: #d5e3ff;--session-tab-session-id-color: #202124;--session-tab-session-date-color: #5f5e5e;--side-panel-button-filled-container-color: #305f9d;--side-panel-button-filled-label-text-color: white;--side-panel-mat-icon-color: #5f5e5e;--side-panel-resize-handler-background-color: #adabab;--side-panel-details-panel-container-background-color: #f3f0f0;--side-panel-details-content-color: #202124;--side-panel-powered-by-adk-color: #787777;--side-panel-app-select-container-background-color: #ffffff;--side-panel-select-placeholder-text-color: #305f9d;--side-panel-select-enabled-trigger-text-color: #305f9d;--side-panel-select-enabled-arrow-color: #305f9d;--side-panel-app-name-option-color: #5f5e5e;--trace-tab-trace-title-color: #5f5e5e;--trace-tab-trace-label-color: #202124;--trace-tab-trace-bar-background-color: #a7c8ff;--trace-tab-trace-bar-color: #305f9d;--trace-tab-trace-duration-color: #787777;--trace-tab-vertical-line-background-color: #c8c6c6;--trace-tab-horizontal-line-background-color: #c8c6c6;--trace-tab-trace-item-container-background-color: #f3f0f0;--trace-tab-trace-item-header-focus-state-layer-color: rgba(48, 95, 157, .12);--trace-tab-trace-item-header-description-color: #787777;--trace-tab-mat-expansion-panel-header-focus-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-hover-background-color: #e5e2e2;--trace-event-json-viewer-container-background-color: #ffffff;--trace-tree-trace-label-color: #202124;--trace-tree-trace-bar-background-color: #a7c8ff;--trace-tree-trace-bar-color: #305f9d;--trace-tree-short-trace-bar-duration-color: #305f9d;--trace-tree-trace-duration-color: #787777;--trace-tree-trace-row-hover-background-color: #e5e2e2;--trace-tree-trace-row-selected-background-color: #e5e2e2;--trace-tree-vertical-line-background-color: #c8c6c6;--trace-tree-horizontal-line-background-color: #c8c6c6;--trace-tree-invocation-id-container-color: #5f5e5e;--trace-tree-trace-row-left-span-div-color: #202124;--trace-tree-trace-row-left-is-event-row-color: #305f9d;--builder-container-background-color: #ffffff;--builder-panel-background-color: #f3f0f0;--builder-tabs-background-color: #f3f0f0;--builder-card-background-color: #ffffff;--builder-secondary-background-color: #e5e2e2;--builder-tertiary-background-color: #f3f0f0;--builder-hover-background-color: #dcd9d9;--builder-border-color: #c8c6c6;--builder-text-primary-color: #202124;--builder-text-secondary-color: #5f5e5e;--builder-text-tertiary-color: #787777;--builder-text-muted-color: #929090;--builder-text-link-color: #305f9d;--builder-breadcrumb-separator-color: #c8c6c6;--builder-form-field-background-color: #e5e2e2;--builder-tool-chip-background-color: #ffffff;--builder-tool-chip-hover-color: #e5e2e2;--builder-callback-chip-background-color: #e5e2e2;--builder-callback-chip-text-color: #202124;--builder-callback-chip-type-color: #5f5e5e;--builder-callback-chip-name-color: #202124;--builder-expansion-background-color: #e5e2e2;--builder-expansion-header-description-color: #787777;--builder-expansion-hover-color: #dcd9d9;--builder-menu-background-color: #ffffff;--builder-menu-item-hover-color: #e5e2e2;--builder-menu-divider-color: #c8c6c6;--builder-button-primary-background-color: #305f9d;--builder-button-primary-text-color: #ffffff;--builder-button-primary-hover-color: #0f4784;--builder-button-secondary-text-color: #5f5e5e;--builder-button-secondary-border-color: rgba(95, 94, 94, .3);--builder-button-secondary-hover-background-color: rgba(95, 94, 94, .1);--builder-button-secondary-hover-text-color: #202124;--builder-add-button-background-color: rgba(48, 95, 157, .12);--builder-add-button-text-color: #0f4784;--builder-icon-color: #202124;--builder-assistant-panel-background-color: #f3f0f0;--builder-assistant-panel-header-background-color: #e5e2e2;--builder-assistant-panel-border-color: #c8c6c6;--builder-assistant-input-background-color: #ffffff;--builder-assistant-input-text-color: #202124;--builder-assistant-input-placeholder-color: #929090;--builder-assistant-user-message-background-color: #d5e3ff;--builder-assistant-user-message-border-color: #a7c8ff;--builder-assistant-user-message-text-color: #202124;--builder-assistant-bot-message-text-color: #202124;--builder-assistant-send-button-color: #5f5e5e;--builder-assistant-send-button-hover-color: #305f9d;--builder-assistant-send-button-disabled-color: #c8c6c6;--builder-canvas-container-background: linear-gradient(135deg, #f8f9fa 0%, #e8eaed 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .1);--builder-canvas-header-background: linear-gradient(90deg, #ffffff 0%, #f3f0f0 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #305f9d, #0f4784);--builder-canvas-workspace-background: #ffffff;--builder-canvas-instruction-background: rgba(255, 255, 255, .95);--builder-canvas-instruction-border: rgba(48, 95, 157, .3);--builder-canvas-node-background: rgba(229, 226, 226, .6);--builder-canvas-node-border: #c8c6c6;--builder-canvas-node-hover-border: #adabab;--builder-canvas-node-chip-outline: rgba(200, 198, 198, .3);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(48, 95, 157, .15), rgba(15, 71, 132, .2));--builder-canvas-group-background: #f3f0f0;--builder-canvas-group-border: #c8c6c6;--builder-canvas-handle-fill: rgba(255, 255, 255, 1);--builder-canvas-reconnect-handle-fill: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-background: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-border: rgba(48, 95, 157, .3);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #ffffff 0%, #f8f9fa 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #f3f0f0 0%, #e8eaed 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(48, 95, 157, .25);--builder-canvas-empty-group-background: rgba(48, 95, 157, .03);--builder-canvas-empty-group-border: rgba(48, 95, 157, .3);--builder-canvas-empty-group-hover-background: rgba(48, 95, 157, .06);--builder-canvas-empty-group-hover-border: rgba(48, 95, 157, .5);--builder-canvas-empty-group-btn-background: rgba(48, 95, 157, .1);--builder-canvas-empty-group-btn-hover-background: rgba(48, 95, 157, .2);--builder-button-background-color: rgba(48, 95, 157, .1);--builder-button-border-color: rgba(48, 95, 157, .3);--builder-button-text-color: #305f9d;--builder-button-hover-background-color: rgba(48, 95, 157, .2);--builder-button-hover-border-color: #305f9d;--builder-item-hover-color: rgba(48, 95, 157, .1);--builder-chip-background-color: rgba(48, 95, 157, .15);--builder-accent-color: #305f9d;--builder-tool-item-background-color: #f6f3f3;--builder-tool-item-border-color: #c8c6c6;--builder-tool-item-hover-background-color: #dcd9d9;--mat-progress-spinner-active-indicator-color: #305f9d;--mat-progress-spinner-size: 80}html.dark-theme{--mat-form-field-disabled-input-text-placeholder-color: orange;--mat-form-field-filled-active-indicator-color: red;--mat-form-field-outlined-outline-color: #cccccc;--mat-form-field-outlined-input-text-color: #cccccc;--mat-form-field-outlined-label-text-color: #cccccc;--mat-form-field-outlined-hover-label-text-color: #cccccc;--mat-form-field-outlined-focus-label-text-color: #cccccc;--mat-form-field-outlined-disabled-label-text-color: #cccccc;--mat-form-field-outlined-disabled-input-text-color: #cccccc;--mat-form-field-outlined-disabled-outline-color: #cccccc;--mat-form-field-outlined-caret-color: #cccccc}html.light-theme{--mat-form-field-disabled-input-text-placeholder-color: #ff8983;--mat-form-field-filled-active-indicator-color: #ba1a1a;--mat-form-field-outlined-outline-color: #787777;--mat-form-field-outlined-input-text-color: #202124;--mat-form-field-outlined-label-text-color: #5f5e5e;--mat-form-field-outlined-hover-label-text-color: #202124;--mat-form-field-outlined-focus-label-text-color: #305f9d;--mat-form-field-outlined-disabled-label-text-color: #929090;--mat-form-field-outlined-disabled-input-text-color: #929090;--mat-form-field-outlined-disabled-outline-color: #c8c6c6;--mat-form-field-outlined-caret-color: #305f9d}.mdc-line-ripple{display:none}.mat-mdc-tooltip{z-index:10000!important;max-width:300px}.mat-mdc-select-panel{background-color:var(--mat-select-panel-background-color)!important}html.light-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #e0e0e0;border-radius:4px!important}html.light-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.light-theme .mat-expansion-panel-header{border-bottom:none!important}html.dark-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #444746;border-radius:4px!important}html.dark-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.dark-theme .mat-expansion-panel-header{border-bottom:none!important}.wide-agent-dropdown-panel{padding:0!important}.wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;opacity:1!important;padding-top:8px;padding-bottom:8px}.wide-agent-dropdown-panel span{width:100%}html.dark-theme .wide-agent-dropdown-panel .search-option{background-color:#2b2b2f!important}html.dark-theme .wide-agent-dropdown-panel .search-option input{caret-color:#fff!important}html.light-theme .wide-agent-dropdown-panel .search-option{background-color:#fff!important}.function-args-tooltip .mdc-tooltip__surface{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:2px!important;padding:8px 12px!important;font-family:Courier New,monospace!important;font-size:12px!important;white-space:pre-wrap!important;max-width:800px!important;line-height:1.2!important;box-shadow:0 2px 8px #0000004d!important}html.dark-theme{--chat-panel-event-number-label-color: rgba(255, 255, 255, .8)}html.light-theme{--chat-panel-event-number-label-color: #5f6368}.json-key{color:#9876aa;font-weight:600}.json-string{color:#6a8759}.json-number{color:#6897bb}.json-boolean{color:#cc7832}.json-null{color:gray}.json-tooltip-panel{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 8px #0000004d!important;max-width:800px!important} diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index a1be9a0273..e3dc3a1d30 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -22,6 +22,7 @@ import click from ..apps.app import validate_app_name +from .utils import gcp_utils _INIT_PY_TEMPLATE = """\ from . import agent @@ -61,11 +62,27 @@ https://google.github.io/adk-docs/agents/models """ +_EXPRESS_TOS_MSG = """ +Google Cloud Express Mode Terms of Service: https://cloud.google.com/terms/google-cloud-express +By using this application, you agree to the Google Cloud Express Mode terms of service and any +applicable services and APIs: https://console.cloud.google.com/terms. You also agree to only use +this application for your trade, business, craft, or profession. +""" + +_NOT_ELIGIBLE_MSG = """ +You are not eligible for Express Mode. +Please follow these instructions to set up a full Google Cloud project: +https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai +""" + _SUCCESS_MSG_CODE = """ Agent created in {agent_folder}: - .env - __init__.py - agent.py + +⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. +Please ensure .env is added to your .gitignore to avoid committing secrets to version control. """ _SUCCESS_MSG_CONFIG = """ @@ -73,6 +90,9 @@ - .env - __init__.py - root_agent.yaml + +⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. +Please ensure .env is added to your .gitignore to avoid committing secrets to version control. """ @@ -187,10 +207,10 @@ def _generate_files( with open(dotenv_file_path, "w", encoding="utf-8") as f: lines = [] - if google_api_key: - lines.append("GOOGLE_GENAI_USE_VERTEXAI=0") - elif google_cloud_project and google_cloud_region: + if google_cloud_project and google_cloud_region: lines.append("GOOGLE_GENAI_USE_VERTEXAI=1") + elif google_api_key: + lines.append("GOOGLE_GENAI_USE_VERTEXAI=0") if google_api_key: lines.append(f"GOOGLE_API_KEY={google_api_key}") if google_cloud_project: @@ -247,8 +267,8 @@ def _prompt_to_choose_backend( A tuple of (google_api_key, google_cloud_project, google_cloud_region). """ backend_choice = click.prompt( - "1. Google AI\n2. Vertex AI\nChoose a backend", - type=click.Choice(["1", "2"]), + "1. Google AI\n2. Vertex AI\n3. Login with Google\nChoose a backend", + type=click.Choice(["1", "2", "3"]), ) if backend_choice == "1": google_api_key = _prompt_for_google_api_key(google_api_key) @@ -256,9 +276,135 @@ def _prompt_to_choose_backend( click.secho(_GOOGLE_CLOUD_SETUP_MSG, fg="green") google_cloud_project = _prompt_for_google_cloud(google_cloud_project) google_cloud_region = _prompt_for_google_cloud_region(google_cloud_region) + elif backend_choice == "3": + google_api_key, google_cloud_project, google_cloud_region = ( + _handle_login_with_google() + ) return google_api_key, google_cloud_project, google_cloud_region +def _handle_login_with_google() -> ( + Tuple[Optional[str], Optional[str], Optional[str]] +): + """Handles the "Login with Google" flow.""" + if not gcp_utils.check_adc(): + click.secho( + "No Application Default Credentials found. " + "Opening browser for login...", + fg="yellow", + ) + try: + gcp_utils.login_adc() + except RuntimeError as e: + click.secho(str(e), fg="red") + raise click.Abort() + + # Check for existing Express project + express_project = gcp_utils.retrieve_express_project() + if express_project: + api_key = express_project.get("api_key") + project_id = express_project.get("project_id") + region = express_project.get("region", "us-central1") + if project_id: + click.secho(f"Using existing Express project: {project_id}", fg="green") + return api_key, project_id, region + + # Check for existing full GCP projects + projects = gcp_utils.list_gcp_projects(limit=20) + if projects: + click.secho("Recently created Google Cloud projects found:", fg="green") + click.echo("0. Enter project ID manually") + for i, (p_id, p_name) in enumerate(projects, 1): + click.echo(f"{i}. {p_name} ({p_id})") + + project_index = click.prompt( + "Select a project", + type=click.IntRange(0, len(projects)), + ) + if project_index == 0: + selected_project_id = _prompt_for_google_cloud(None) + else: + selected_project_id = projects[project_index - 1][0] + region = _prompt_for_google_cloud_region(None) + return None, selected_project_id, region + + click.secho( + "A Google Cloud project is required to continue. You can enter an" + " existing project ID or create an Express Mode project. Learn more:" + " https://cloud.google.com/resources/cloud-express-faqs", + fg="green", + ) + action = click.prompt( + "1. Enter an existing Google Cloud project ID\n" + "2. Create a new project (Express Mode)\n" + "3. Abandon\n" + "Choose an action", + type=click.Choice(["1", "2", "3"]), + ) + + if action == "3": + raise click.Abort() + + if action == "1": + google_cloud_project = _prompt_for_google_cloud(None) + google_cloud_region = _prompt_for_google_cloud_region(None) + return None, google_cloud_project, google_cloud_region + + elif action == "2": + if gcp_utils.check_express_eligibility(): + click.secho(_EXPRESS_TOS_MSG, fg="yellow") + if click.confirm("Do you accept the Terms of Service?", default=False): + selected_region = click.prompt( + """\ +Choose a region for Express Mode: +1. us-central1 +2. europe-west1 +3. asia-southeast1 +Choose region""", + type=click.Choice(["1", "2", "3"]), + default="1", + ) + region_map = { + "1": "us-central1", + "2": "europe-west1", + "3": "asia-southeast1", + } + region = region_map[selected_region] + express_info = gcp_utils.sign_up_express(location=region) + api_key = express_info.get("api_key") + project_id = express_info.get("project_id") + region = express_info.get("region", region) + click.secho( + f"Express Mode project created: {project_id}", + fg="green", + ) + current_proj = _get_gcp_project_from_gcloud() + if current_proj and current_proj != project_id: + click.secho( + "Warning: Your default gcloud project is set to" + f" '{current_proj}'. This might conflict with or override your" + f" Express Mode project '{project_id}'. We recommend" + " unsetting it.", + fg="yellow", + ) + if click.confirm("Run 'gcloud config unset project'?", default=True): + try: + subprocess.run( + ["gcloud", "config", "unset", "project"], + check=True, + capture_output=True, + ) + click.secho("Unset default gcloud project.", fg="green") + except Exception: + click.secho( + "Failed to unset project. Please do it manually.", fg="red" + ) + return api_key, project_id, region + + click.secho(_NOT_ELIGIBLE_MSG, fg="red") + raise click.Abort() + + def _prompt_to_choose_type() -> str: """Prompts user to choose type of agent to create.""" type_choice = click.prompt( diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index 465ca6c3e1..bda96497b0 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -22,6 +22,7 @@ import sys import traceback from typing import Final +from typing import Literal from typing import Optional import warnings @@ -98,7 +99,7 @@ def _ensure_agent_engine_dependency(requirements_txt_path: str) -> None: EXPOSE {port} -CMD adk {command} --port={port} {host_option} {service_option} {trace_to_cloud_option} {otel_to_cloud_option} {allow_origins_option} {a2a_option} "/app/agents" +CMD adk {command} --port={port} {host_option} {service_option} {trace_to_cloud_option} {otel_to_cloud_option} {allow_origins_option} {a2a_option} {trigger_sources_option} "/app/agents" """ _AGENT_ENGINE_APP_TEMPLATE: Final[str] = """ @@ -644,6 +645,7 @@ def to_cloud_run( memory_service_uri: Optional[str] = None, use_local_storage: bool = False, a2a: bool = False, + trigger_sources: Optional[str] = None, extra_gcloud_args: Optional[tuple[str, ...]] = None, ): """Deploys an agent to Google Cloud Run. @@ -714,6 +716,9 @@ def to_cloud_run( f'--allow_origins={",".join(allow_origins)}' if allow_origins else '' ) a2a_option = '--a2a' if a2a else '' + trigger_sources_option = ( + f'--trigger_sources={trigger_sources}' if trigger_sources else '' + ) dockerfile_content = _DOCKERFILE_TEMPLATE.format( gcp_project_id=project, gcp_region=region, @@ -734,6 +739,7 @@ def to_cloud_run( adk_version=adk_version, host_option=host_option, a2a_option=a2a_option, + trigger_sources_option=trigger_sources_option, ) dockerfile_path = os.path.join(temp_folder, 'Dockerfile') os.makedirs(temp_folder, exist_ok=True) @@ -802,6 +808,24 @@ def to_cloud_run( shutil.rmtree(temp_folder) +def _print_agent_engine_url(resource_name: str) -> None: + """Prints the Google Cloud Console URL for the deployed agent.""" + parts = resource_name.split('/') + if len(parts) >= 6 and parts[0] == 'projects' and parts[2] == 'locations': + project_id = parts[1] + region = parts[3] + engine_id = parts[5] + + url = ( + 'https://console.cloud.google.com/vertex-ai/agents/agent-engines' + f'/locations/{region}/agent-engines/{engine_id}/playground' + f'?project={project_id}' + ) + click.secho( + f'\n🎉 View your deployed agent here:\n{url}\n', fg='cyan', bold=True + ) + + def to_agent_engine( *, agent_folder: str, @@ -948,6 +972,13 @@ def to_agent_engine( click.echo('Resolving files and dependencies...') agent_config = {} + if agent_engine_config_file and not os.path.exists( + agent_engine_config_file + ): + raise click.ClickException( + 'Agent engine config file not found: ' + f'{parent_folder}/{agent_engine_config_file}' + ) if not agent_engine_config_file: # Attempt to read the agent engine config from .agent_engine_config.json in the dir (if any). agent_engine_config_file = os.path.join( @@ -1061,12 +1092,20 @@ def to_agent_engine( import vertexai + from ..utils._google_client_headers import get_tracking_headers + if project and region: click.echo('Initializing Vertex AI...') - client = vertexai.Client(project=project, location=region) + client = vertexai.Client( + project=project, + location=region, + http_options={'headers': get_tracking_headers()}, + ) elif api_key: click.echo('Initializing Vertex AI in Express Mode with API key...') - client = vertexai.Client(api_key=api_key) + client = vertexai.Client( + api_key=api_key, http_options={'headers': get_tracking_headers()} + ) else: click.echo( 'No project/region or api_key provided. ' @@ -1129,11 +1168,13 @@ def to_agent_engine( f'✅ Created agent engine: {agent_engine.api_resource.name}', fg='green', ) + _print_agent_engine_url(agent_engine.api_resource.name) else: if project and region and not agent_engine_id.startswith('projects/'): agent_engine_id = f'projects/{project}/locations/{region}/reasoningEngines/{agent_engine_id}' client.agent_engines.update(name=agent_engine_id, config=agent_config) click.secho(f'✅ Updated agent engine: {agent_engine_id}', fg='green') + _print_agent_engine_url(agent_engine_id) finally: click.echo(f'Cleaning up the temp folder: {temp_folder}') shutil.rmtree(agent_src_path) @@ -1162,6 +1203,10 @@ def to_gke( memory_service_uri: Optional[str] = None, use_local_storage: bool = False, a2a: bool = False, + trigger_sources: Optional[str] = None, + service_type: Literal[ + 'ClusterIP', 'NodePort', 'LoadBalancer' + ] = 'ClusterIP', ): """Deploys an agent to Google Kubernetes Engine(GKE). @@ -1189,6 +1234,7 @@ def to_gke( artifact_service_uri: The URI of the artifact service. memory_service_uri: The URI of the memory service. use_local_storage: Whether to use local .adk storage in the container. + service_type: The Kubernetes Service type (default: ClusterIP). """ click.secho( '\n🚀 Starting ADK Agent Deployment to GKE...', fg='cyan', bold=True @@ -1255,6 +1301,9 @@ def to_gke( adk_version=adk_version, host_option=host_option, a2a_option='--a2a' if a2a else '', + trigger_sources_option=( + f'--trigger_sources={trigger_sources}' if trigger_sources else '' + ), ) dockerfile_path = os.path.join(temp_folder, 'Dockerfile') os.makedirs(temp_folder, exist_ok=True) @@ -1326,7 +1375,7 @@ def to_gke( metadata: name: {service_name} spec: - type: LoadBalancer + type: {service_type} selector: app: {service_name} ports: @@ -1380,3 +1429,11 @@ def to_gke( click.secho( '\n🎉 Deployment to GKE finished successfully!', fg='cyan', bold=True ) + if service_type == 'ClusterIP': + click.echo( + '\nThe service is only reachable from within the cluster.' + ' To access it locally, run:' + f'\n kubectl port-forward svc/{service_name} {port}:{port}' + '\n\nTo expose the service externally, add a Gateway or' + ' re-deploy with --service_type=LoadBalancer.' + ) diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index 3565714139..07ccc15892 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -35,6 +35,7 @@ from . import cli_create from . import cli_deploy from .. import version +from ..agents.run_config import StreamingMode from ..evaluation.constants import MISSING_EVAL_DEPENDENCIES_MESSAGE from ..features import FeatureName from ..features import override_feature_enabled @@ -230,10 +231,21 @@ def conformance(): exists=True, dir_okay=True, file_okay=False, resolve_path=True ), ) +@click.argument( + "streaming-mode", + type=click.Choice( + [str(m.value) for m in StreamingMode], case_sensitive=False + ), + callback=lambda ctx, param, value: next( + (m for m in StreamingMode if str(m.value).lower() == value.lower()), + value, + ), +) @click.pass_context def cli_conformance_record( ctx, paths: tuple[str, ...], + streaming_mode: StreamingMode, ): """Generate ADK conformance test YAML files from TestCaseInput specifications. @@ -273,7 +285,7 @@ def cli_conformance_record( # Default to tests/ directory if no paths provided test_paths = [Path(p) for p in paths] if paths else [Path("tests").resolve()] - asyncio.run(run_conformance_record(test_paths)) + asyncio.run(run_conformance_record(test_paths, streaming_mode)) @conformance.command("test", cls=HelpfulCommand) @@ -309,6 +321,20 @@ def cli_conformance_record( " directory." ), ) +@click.option( + "--streaming-mode", + type=click.Choice( + [str(m.value) for m in StreamingMode], case_sensitive=False + ), + callback=lambda ctx, param, value: next( + (m for m in StreamingMode if str(m.value).lower() == value.lower()), + value, + ) + if value is not None + else None, + required=False, + default=None, +) @click.pass_context def cli_conformance_test( ctx, @@ -316,6 +342,7 @@ def cli_conformance_test( mode: str, generate_report: bool, report_dir: Optional[str] = None, + streaming_mode: Optional[StreamingMode] = None, ): """Run conformance tests to verify agent behavior consistency. @@ -342,9 +369,11 @@ def cli_conformance_test( \b category/ test_name/ - spec.yaml # Test specification - generated-recordings.yaml # Recorded interactions (replay mode) - generated-session.yaml # Session data (replay mode) + spec.yaml # Test specification + generated-recordings.yaml # Recorded interactions (replay mode) + generated-session.yaml # Session data (replay mode) + generated-recordings-sse.yaml # Recorded SSE interactions (replay mode) + generated-session-sse.yaml # SSE Session data (replay mode) REPORT GENERATION: @@ -377,7 +406,6 @@ def cli_conformance_test( # Generate a test report in a specific directory adk conformance test --generate_report --report_dir=reports """ - try: from .conformance.cli_test import run_conformance_test except ImportError as e: @@ -403,6 +431,7 @@ def cli_conformance_test( mode=mode.lower(), generate_report=generate_report, report_dir=report_dir, + streaming_mode=streaming_mode, ) ) @@ -1035,6 +1064,7 @@ def cli_optimize( from .cli_eval import _collect_eval_results from .cli_eval import _collect_inferences from .cli_eval import get_root_agent + except ModuleNotFoundError as mnf: raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf @@ -1170,6 +1200,7 @@ def cli_add_eval_case( from ..evaluation.eval_case import EvalCase from ..evaluation.eval_case import SessionInput from .cli_eval import get_eval_sets_manager + except ModuleNotFoundError as mnf: raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf @@ -1218,6 +1249,127 @@ def cli_add_eval_case( raise click.ClickException(f"Failed to add eval case(s): {e}") from e +@eval_set.command("generate_eval_cases", cls=HelpfulCommand) +@click.argument( + "agent_module_file_path", + type=click.Path( + exists=True, dir_okay=True, file_okay=False, resolve_path=True + ), +) +@click.argument("eval_set_id", type=str, required=True) +@click.option( + "--user_simulation_config_file", + type=click.Path( + exists=True, dir_okay=False, file_okay=True, resolve_path=True + ), + help=( + "A path to file containing JSON serialized " + "UserScenarioGenerationConfig dict." + ), + required=True, +) +@eval_options() +def cli_generate_eval_cases( + agent_module_file_path: str, + eval_set_id: str, + user_simulation_config_file: str, + eval_storage_uri: Optional[str] = None, + log_level: str = "INFO", +): + """Generates eval cases dynamically and adds them to the given eval set. + + Uses Vertex AI Eval SDK to generate conversation scenarios based on an + Agent's info and definitions. It will automatically create the empty eval_set + if it has not been created in advance. + + Args: + agent_module_file_path: The path to the agent module file. + eval_set_id: The id of the eval set to generate cases for. + user_simulation_config_file: The path to the user simulation config file. + eval_storage_uri: The eval storage uri. + log_level: The log level. + """ + logs.setup_adk_logger(getattr(logging, log_level.upper())) + try: + from ..evaluation._vertex_ai_scenario_generation_facade import ScenarioGenerator + from ..evaluation.conversation_scenarios import ConversationGenerationConfig + from ..evaluation.eval_case import EvalCase + from ..evaluation.eval_case import SessionInput + from .cli_eval import get_eval_sets_manager + from .cli_eval import get_root_agent + from .utils.state import create_empty_state + + except ModuleNotFoundError as mnf: + raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf + + app_name = os.path.basename(agent_module_file_path) + agents_dir = os.path.dirname(agent_module_file_path) + + try: + eval_sets_manager = get_eval_sets_manager(eval_storage_uri, agents_dir) + root_agent = get_root_agent(agent_module_file_path) + + # Try to create if it doesn't already exist. + if ( + eval_sets_manager.get_eval_set( + app_name=app_name, eval_set_id=eval_set_id + ) + is None + ): + eval_sets_manager.create_eval_set( + app_name=app_name, eval_set_id=eval_set_id + ) + click.echo(f"Eval set '{eval_set_id}' created for app '{app_name}'.") + else: + click.echo(f"Eval set '{eval_set_id}' already exists.") + + with open(user_simulation_config_file, "r") as f: + config = ConversationGenerationConfig.model_validate_json(f.read()) + + generator = ScenarioGenerator() + click.echo("Generating scenarios utilizing Vertex AI Eval SDK...") + scenarios = generator.generate_scenarios(root_agent, config) + + # TODO(pthodoroff): Expose initial session state when simulation library + # supports it. + initial_session_state = create_empty_state(root_agent) + + session_input = SessionInput( + app_name=app_name, user_id="test_user_id", state=initial_session_state + ) + + for scenario in scenarios: + scenario_str = json.dumps(scenario.model_dump(), sort_keys=True) + eval_id = hashlib.sha256(scenario_str.encode("utf-8")).hexdigest()[:8] + eval_case = EvalCase( + eval_id=eval_id, + conversation_scenario=scenario, + session_input=session_input, + creation_timestamp=datetime.now().timestamp(), + ) + + if ( + eval_sets_manager.get_eval_case( + app_name=app_name, eval_set_id=eval_set_id, eval_case_id=eval_id + ) + is None + ): + eval_sets_manager.add_eval_case( + app_name=app_name, eval_set_id=eval_set_id, eval_case=eval_case + ) + click.echo( + f"Eval case '{eval_case.eval_id}' added to eval set" + f" '{eval_set_id}'." + ) + else: + click.echo( + f"Eval case '{eval_case.eval_id}' already exists in eval set" + f" '{eval_set_id}', skipped adding." + ) + except Exception as e: + raise click.ClickException(f"Failed to generate eval case(s): {e}") from e + + def web_options(): """Decorator to add web UI options to click commands.""" @@ -1300,6 +1452,7 @@ def fast_api_common_options(): """Decorator to add common fast api options to click commands.""" def decorator(func): + @click.option( "--host", type=str, @@ -1404,6 +1557,17 @@ def decorator(func): ), default=None, ) + # Parsed into list[str] by the wrapper below (server commands need a list). + @click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /apps/{app_name}/trigger/*" + " endpoints for batch and event-driven agent invocations." + ), + default=None, + ) @functools.wraps(func) @click.pass_context def wrapper(ctx, *args, **kwargs): @@ -1415,6 +1579,13 @@ def wrapper(ctx, *args, **kwargs): ): kwargs["log_level"] = "DEBUG" + # Parse comma-separated trigger_sources into a list. + trigger_sources = kwargs.get("trigger_sources") + if trigger_sources is not None: + kwargs["trigger_sources"] = [ + s.strip() for s in trigger_sources.split(",") if s.strip() + ] + return func(*args, **kwargs) return wrapper @@ -1457,6 +1628,7 @@ def cli_web( extra_plugins: Optional[list[str]] = None, logo_text: Optional[str] = None, logo_image_url: Optional[str] = None, + trigger_sources: Optional[list[str]] = None, ): """Starts a FastAPI server with Web UI for agents. @@ -1513,6 +1685,7 @@ async def _lifespan(app: FastAPI): extra_plugins=extra_plugins, logo_text=logo_text, logo_image_url=logo_image_url, + trigger_sources=trigger_sources, ) config = uvicorn.Config( app, @@ -1568,6 +1741,7 @@ def cli_api_server( reload_agents: bool = False, extra_plugins: Optional[list[str]] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[str]] = None, ): """Starts a FastAPI server for agents. @@ -1601,6 +1775,7 @@ def cli_api_server( reload_agents=reload_agents, extra_plugins=extra_plugins, auto_create_session=auto_create_session, + trigger_sources=trigger_sources, ), host=host, port=port, @@ -1684,7 +1859,8 @@ def cli_api_server( default=False, help=( "Optional. Deploy ADK Web UI if set. (default: deploy ADK API server" - " only)" + " only). WARNING: The web UI is for development and testing only — do" + " not use in production." ), ) @click.option( @@ -1734,6 +1910,17 @@ def cli_api_server( default=False, help="Optional. Whether to enable A2A endpoint.", ) +# Kept as raw str (not parsed to list) — interpolated directly into Dockerfile CMD. +@click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /trigger/* endpoints" + " for batch and event-driven agent invocations." + ), + default=None, +) @click.option( "--allow_origins", help=( @@ -1770,6 +1957,7 @@ def cli_deploy_cloud_run( session_db_url: Optional[str] = None, # Deprecated artifact_storage_uri: Optional[str] = None, # Deprecated a2a: bool = False, + trigger_sources: Optional[str] = None, ): """Deploys an agent to Cloud Run. @@ -1847,6 +2035,7 @@ def cli_deploy_cloud_run( memory_service_uri=memory_service_uri, use_local_storage=use_local_storage, a2a=a2a, + trigger_sources=trigger_sources, extra_gcloud_args=tuple(gcloud_args), ) except Exception as e: @@ -2200,7 +2389,8 @@ def cli_deploy_agent_engine( default=False, help=( "Optional. Deploy ADK Web UI if set. (default: deploy ADK API server" - " only)" + " only). WARNING: The web UI is for development and testing only — do" + " not use in production." ), ) @click.option( @@ -2209,6 +2399,17 @@ def cli_deploy_agent_engine( default="INFO", help="Optional. Set the logging level", ) +@click.option( + "--service_type", + type=click.Choice(["ClusterIP", "LoadBalancer"], case_sensitive=True), + default="ClusterIP", + show_default=True, + help=( + "Optional. The Kubernetes Service type for the deployed agent." + " ClusterIP (default) keeps the service cluster-internal;" + " use LoadBalancer to expose a public IP." + ), +) @click.option( "--temp_folder", type=str, @@ -2232,6 +2433,17 @@ def cli_deploy_agent_engine( " version in the dev environment)" ), ) +# Kept as raw str (not parsed to list) — interpolated directly into Dockerfile CMD. +@click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /trigger/* endpoints" + " for batch and event-driven agent invocations." + ), + default=None, +) @adk_services_options(default_use_local_storage=False) @click.argument( "agent", @@ -2252,11 +2464,13 @@ def cli_deploy_gke( otel_to_cloud: bool, with_ui: bool, adk_version: str, + service_type: str, log_level: Optional[str] = None, session_service_uri: Optional[str] = None, artifact_service_uri: Optional[str] = None, memory_service_uri: Optional[str] = None, use_local_storage: bool = False, + trigger_sources: Optional[str] = None, ): """Deploys an agent to GKE. @@ -2283,10 +2497,12 @@ def cli_deploy_gke( with_ui=with_ui, log_level=log_level, adk_version=adk_version, + service_type=service_type, session_service_uri=session_service_uri, artifact_service_uri=artifact_service_uri, memory_service_uri=memory_service_uri, use_local_storage=use_local_storage, + trigger_sources=trigger_sources, ) except Exception as e: click.secho(f"Deploy failed: {e}", fg="red", err=True) diff --git a/src/google/adk/cli/conformance/_conformance_test_google_llm.py b/src/google/adk/cli/conformance/_conformance_test_google_llm.py new file mode 100644 index 0000000000..cf32e2f076 --- /dev/null +++ b/src/google/adk/cli/conformance/_conformance_test_google_llm.py @@ -0,0 +1,122 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from __future__ import annotations + +import logging +from typing import Any +from typing import AsyncGenerator +from typing import TYPE_CHECKING + +from ...models.google_llm import Gemini + +if TYPE_CHECKING: + from ...models.llm_request import LlmRequest + from ...models.llm_response import LlmResponse + +logger = logging.getLogger('google_adk.' + __name__) + + +class ReplayVerificationError(Exception): + """Exception raised when replay verification fails.""" + + +class _ConformanceTestGemini(Gemini): + """A mocked Gemini model for conformance test replay mode. + + This class is used to mock the Gemini model in conformance test replay mode. + It is a subclass of Gemini and overrides the `generate_content_async`` method to + return a mocked response from the provided recordingss. + """ + + def __init__( + self, + *, + config: dict[str, Any], + **kwargs: Any, + ) -> None: + super().__init__(**kwargs) + recordings = config.get('_adk_replay_recordings') + self._user_message_index = config.get('user_message_index') + self._agent_name = config.get('agent_name') + self._replay_index = config.get('current_replay_index') + # Pre-filter LLM recordings for this agent and message index + self._agent_llm_recordings = [ + recording.llm_recording + for recording in recordings.recordings + if recording.agent_name == self._agent_name + and recording.user_message_index == self._user_message_index + and recording.llm_recording + ] + + async def generate_content_async( + self, llm_request: LlmRequest, stream: bool = False + ) -> AsyncGenerator[LlmResponse, None]: + """Replay LLM response from recordings instead of making real call.""" + logger.debug( + 'Replaying LLM response for agent %s (index %d)', + self._agent_name, + self._replay_index, + ) + + if self._replay_index >= len(self._agent_llm_recordings): + raise ReplayVerificationError( + 'Runtime sent more LLM requests than expected for agent' + f" '{self._agent_name}' at user_message_index" + f' {self._user_message_index}. Expected' + f' {len(self._agent_llm_recordings)}, but got request at index' + f' {self._replay_index}' + ) + + recording = self._agent_llm_recordings[self._replay_index] + + # Verify request matches + self._verify_llm_request_match( + recording.llm_request, llm_request, self._replay_index + ) + + for response in recording.llm_responses: + yield response + + def _verify_llm_request_match( + self, + recorded_request: LlmRequest, + current_request: LlmRequest, + replay_index: int, + ) -> None: + """Verify that the current LLM request exactly matches the recorded one.""" + # Comprehensive exclude dict for all fields that can differ between runs + excluded_fields = { + 'live_connect_config': True, + 'config': { # some config fields can vary per run + 'http_options': True, + 'labels': True, + }, + } + + # Compare using model dumps with nested exclude dict + recorded_dict = recorded_request.model_dump( + exclude_none=True, exclude=excluded_fields, exclude_defaults=True + ) + current_dict = current_request.model_dump( + exclude_none=True, exclude=excluded_fields, exclude_defaults=True + ) + + if recorded_dict != current_dict: + raise ReplayVerificationError( + f"""LLM request mismatch in turn {self._user_message_index} for agent '{self._agent_name}' (index {replay_index}): +recorded: {recorded_dict} +current: {current_dict}""" + ) diff --git a/src/google/adk/cli/conformance/_generate_markdown_utils.py b/src/google/adk/cli/conformance/_generate_markdown_utils.py index ced3afbb5f..dd45d0ad2a 100644 --- a/src/google/adk/cli/conformance/_generate_markdown_utils.py +++ b/src/google/adk/cli/conformance/_generate_markdown_utils.py @@ -29,7 +29,7 @@ def generate_markdown_report( version_data: dict[str, Any], - summary: _ConformanceTestSummary, + summaries: list[_ConformanceTestSummary], report_dir: Optional[str], ) -> None: """Generates a Markdown report of the test results.""" @@ -44,46 +44,94 @@ def generate_markdown_report( report_path = Path(report_dir) / report_name report_path.parent.mkdir(parents=True, exist_ok=True) + # Collect all test results + test_results = {} + test_descriptions = {} + streaming_modes = [] + + for summary in summaries: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" + ) + streaming_modes.append(mode_name) + for result in summary.results: + key = (result.category, result.name) + if key not in test_results: + test_results[key] = {} + test_results[key][mode_name] = result + if result.description: + test_descriptions[key] = result.description + + streaming_modes.sort() + with open(report_path, "w") as f: f.write("# ADK Python Conformance Test Report\n\n") - - # Summary f.write("## Summary\n\n") f.write(f"- **ADK Version**: {server_version}\n") - f.write(f"- **Language**: {language} {language_version}\n") - f.write(f"- **Total Tests**: {summary.total_tests}\n") - f.write(f"- **Passed**: {summary.passed_tests}\n") - f.write(f"- **Failed**: {summary.failed_tests}\n") - f.write(f"- **Success Rate**: {summary.success_rate:.1f}%\n\n") + f.write(f"- **Language**: {language} {language_version}\n\n") - # Table - f.write("## Test Results\n\n") - f.write("| Status | Category | Test Name | Description |\n") - f.write("| :--- | :--- | :--- | :--- |\n") + f.write( + "| Streaming Mode | Total Tests | Passed | Failed | Success Rate |\n" + ) + f.write("| :--- | :--- | :--- | :--- | :--- |\n") - for result in summary.results: - status_icon = "✅ PASS" if result.success else "❌ FAIL" - description = ( - result.description.replace("\n", " ") if result.description else "" + for summary in summaries: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" ) f.write( - f"| {status_icon} | {result.category} | {result.name} |" - f" {description} |\n" + f"| {mode_name} | {summary.total_tests} |" + f" {summary.passed_tests} | {summary.failed_tests} |" + f" {summary.success_rate:.1f}% |\n" + ) + f.write("\n") + + # Table + f.write("## Test Results\n\n") + headers = ["Category", "Test Name", "Description"] + streaming_modes + f.write("| " + " | ".join(headers) + " |\n") + f.write("| " + " | ".join([":---"] * len(headers)) + " |\n") + + sorted_keys = sorted(test_results.keys()) + for category, name in sorted_keys: + description = test_descriptions.get((category, name), "").replace( + "\n", " " ) + row = [category, name, description] + for mode in streaming_modes: + result = test_results[(category, name)].get(mode) + if result: + status_icon = "✅ PASS" if result.success else "❌ FAIL" + else: + status_icon = "N/A" + row.append(status_icon) + f.write("| " + " | ".join(row) + " |\n") f.write("\n") # Failed Tests Details - if summary.failed_tests > 0: + has_failures = any(s.failed_tests > 0 for s in summaries) + if has_failures: f.write("## Failed Tests Details\n\n") - for result in summary.results: - if not result.success: - f.write(f"### {result.category}/{result.name}\n\n") - if result.description: - f.write(f"**Description**: {result.description}\n\n") - f.write("**Error**:\n") - f.write("```\n") - f.write(f"{result.error_message}\n") - f.write("```\n\n") + for summary in summaries: + if summary.failed_tests > 0: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" + ) + for result in summary.results: + if not result.success: + f.write(f"### {result.category}/{result.name} ({mode_name})\n\n") + if result.description: + f.write(f"**Description**: {result.description}\n\n") + f.write("**Error**:\n") + f.write("```\n") + f.write(f"{result.error_message}\n") + f.write("```\n\n") click.secho(f"\nReport generated at: {report_path.resolve()}", fg="blue") diff --git a/src/google/adk/cli/conformance/_generated_file_utils.py b/src/google/adk/cli/conformance/_generated_file_utils.py index 3d3996082d..e6aad7fdb1 100644 --- a/src/google/adk/cli/conformance/_generated_file_utils.py +++ b/src/google/adk/cli/conformance/_generated_file_utils.py @@ -23,6 +23,7 @@ import click import yaml +from ...agents.run_config import StreamingMode from ...sessions.session import Session from .test_case import TestSpec @@ -35,9 +36,17 @@ def load_test_case(test_case_dir: Path) -> TestSpec: return TestSpec.model_validate(data) -def load_recorded_session(test_case_dir: Path) -> Optional[Session]: - """Load recorded session data from generated-session.yaml file.""" - session_file = test_case_dir / "generated-session.yaml" +def load_recorded_session( + test_case_dir: Path, streaming_mode: StreamingMode +) -> Optional[Session]: + """Load recorded session data from YAML file.""" + if streaming_mode == StreamingMode.SSE: + session_file = test_case_dir / "generated-session-sse.yaml" + elif streaming_mode == StreamingMode.NONE: + session_file = test_case_dir / "generated-session.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") + if not session_file.exists(): return None diff --git a/src/google/adk/cli/conformance/adk_web_server_client.py b/src/google/adk/cli/conformance/adk_web_server_client.py index 10bf82d1fc..1d5dd3e0f3 100644 --- a/src/google/adk/cli/conformance/adk_web_server_client.py +++ b/src/google/adk/cli/conformance/adk_web_server_client.py @@ -237,7 +237,8 @@ async def run_agent( Event objects streamed from the agent execution Raises: - ValueError: If mode is provided but test_case_dir or user_message_index is None + ValueError: If mode is not supported, or if mode is provided but + test_case_dir or user_message_index is None httpx.HTTPStatusError: If the request fails json.JSONDecodeError: If event data cannot be parsed RuntimeError: If the server streams an error payload @@ -259,11 +260,25 @@ async def run_agent( "dir": str(test_case_dir), "user_message_index": user_message_index, } - else: # record mode + if request.streaming: + request.state_delta["_adk_replay_config"]["streaming_mode"] = "sse" + else: + request.state_delta["_adk_replay_config"]["streaming_mode"] = "none" + elif mode == "record": request.state_delta["_adk_recordings_config"] = { "dir": str(test_case_dir), "user_message_index": user_message_index, } + if request.streaming: + request.state_delta["_adk_recordings_config"][ + "streaming_mode" + ] = "sse" + else: + request.state_delta["_adk_recordings_config"][ + "streaming_mode" + ] = "none" + else: + raise ValueError(f"Unsupported mode: {mode}") async with self._get_client() as client: async with client.stream( diff --git a/src/google/adk/cli/conformance/cli_record.py b/src/google/adk/cli/conformance/cli_record.py index 7d3849493d..eb38c99478 100644 --- a/src/google/adk/cli/conformance/cli_record.py +++ b/src/google/adk/cli/conformance/cli_record.py @@ -21,6 +21,7 @@ import click from google.genai import types +from ...agents.run_config import StreamingMode from ...utils.yaml_utils import dump_pydantic_to_yaml from ..adk_web_server import RunAgentRequest from ._generated_file_utils import load_test_case @@ -31,14 +32,21 @@ async def _create_conformance_test_files( test_case: TestCase, user_id: str = "adk_conformance_test_user", + streaming_mode: StreamingMode = StreamingMode.NONE, ) -> Path: """Generate conformance test files from TestCase.""" # Clean existing generated files test_case_dir = test_case.dir # Remove existing generated files to ensure clean state - generated_session_file = test_case_dir / "generated-session.yaml" - generated_recordings_file = test_case_dir / "generated-recordings.yaml" + if streaming_mode == StreamingMode.SSE: + generated_session_file = test_case_dir / "generated-session-sse.yaml" + generated_recordings_file = test_case_dir / "generated-recordings-sse.yaml" + elif streaming_mode == StreamingMode.NONE: + generated_session_file = test_case_dir / "generated-session.yaml" + generated_recordings_file = test_case_dir / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") generated_session_file.unlink(missing_ok=True) generated_recordings_file.unlink(missing_ok=True) @@ -96,6 +104,7 @@ async def _create_conformance_test_files( session_id=session.id, new_message=content, state_delta=user_message.state_delta, + streaming=(streaming_mode == StreamingMode.SSE), ), mode="record", test_case_dir=str(test_case_dir), @@ -133,7 +142,9 @@ async def _create_conformance_test_files( return generated_session_file -async def run_conformance_record(paths: list[Path]) -> None: +async def run_conformance_record( + paths: list[Path], streaming_mode: StreamingMode +) -> None: """Generate conformance tests from TestCaseInput files. Args: @@ -171,7 +182,9 @@ async def run_conformance_record(paths: list[Path]) -> None: for test_case in test_cases.values(): try: - await _create_conformance_test_files(test_case) + await _create_conformance_test_files( + test_case, streaming_mode=streaming_mode + ) click.secho( "Generated conformance test files for:" f" {test_case.category}/{test_case.name}", diff --git a/src/google/adk/cli/conformance/cli_test.py b/src/google/adk/cli/conformance/cli_test.py index 70fbe5547b..df51199cdc 100644 --- a/src/google/adk/cli/conformance/cli_test.py +++ b/src/google/adk/cli/conformance/cli_test.py @@ -17,6 +17,7 @@ from __future__ import annotations from dataclasses import dataclass +from enum import Enum from pathlib import Path import textwrap from typing import Optional @@ -24,6 +25,7 @@ import click from google.genai import types +from ...agents.run_config import StreamingMode from ..adk_web_server import RunAgentRequest from ._generate_markdown_utils import generate_markdown_report from ._generated_file_utils import load_recorded_session @@ -33,6 +35,8 @@ from .adk_web_server_client import AdkWebServerClient from .test_case import TestCase +_SUPPORTED_STREAMING_MODES = [StreamingMode.NONE, StreamingMode.SSE] + @dataclass class _TestResult: @@ -53,6 +57,7 @@ class _ConformanceTestSummary: passed_tests: int failed_tests: int results: list[_TestResult] + streaming_mode: StreamingMode @property def success_rate(self) -> float: @@ -71,11 +76,13 @@ def __init__( client: AdkWebServerClient, mode: str = "replay", user_id: str = "adk_conformance_test_user", + streaming_mode: StreamingMode = StreamingMode.NONE, ): self.test_paths = test_paths self.mode = mode self.client = client self.user_id = user_id + self.streaming_mode = streaming_mode def _discover_test_cases(self) -> list[TestCase]: """Discover test cases from specified folder paths.""" @@ -90,11 +97,15 @@ def _discover_test_cases(self) -> list[TestCase]: category = test_case_dir.parent.name name = test_case_dir.name + if self.streaming_mode == StreamingMode.SSE: + recordings_file = test_case_dir / "generated-recordings-sse.yaml" + elif self.streaming_mode == StreamingMode.NONE: + recordings_file = test_case_dir / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self.streaming_mode}") + # Skip if recordings missing in replay mode - if ( - self.mode == "replay" - and not (test_case_dir / "generated-recordings.yaml").exists() - ): + if self.mode == "replay" and not recordings_file.exists(): click.secho( f"Skipping {category}/{name}: no recordings", fg="yellow", @@ -115,7 +126,9 @@ def _discover_test_cases(self) -> list[TestCase]: return sorted(test_cases, key=lambda tc: (tc.category, tc.name)) async def _run_user_messages( - self, session_id: str, test_case: TestCase + self, + session_id: str, + test_case: TestCase, ) -> None: """Run all user messages for a test case.""" function_call_name_to_id_map = {} @@ -160,7 +173,7 @@ async def _run_user_messages( user_id=self.user_id, session_id=session_id, new_message=content, - streaming=False, + streaming=self.streaming_mode == StreamingMode.SSE, state_delta=user_message.state_delta, ) @@ -198,7 +211,7 @@ async def _validate_test_results( ) # Load recorded session data for comparison - recorded_session = load_recorded_session(test_case.dir) + recorded_session = load_recorded_session(test_case.dir, self.streaming_mode) if not recorded_session: return _TestResult( category=test_case.category, @@ -283,10 +296,11 @@ async def run_all_tests(self) -> _ConformanceTestSummary: passed_tests=0, failed_tests=0, results=[], + streaming_mode=self.streaming_mode, ) click.echo(f""" -Found {len(test_cases)} test cases to run in {self.mode} mode +Found {len(test_cases)} test cases to run in {self.mode} mode for streaming mode {self.streaming_mode}. """) results: list[_TestResult] = [] @@ -300,7 +314,7 @@ async def run_all_tests(self) -> _ConformanceTestSummary: category=test_case.category, name=test_case.name, success=False, - error_message="Live mode not yet implemented", + error_message="Live mode is not implemented yet", description=test_case.test_spec.description, ) results.append(result) @@ -312,6 +326,7 @@ async def run_all_tests(self) -> _ConformanceTestSummary: passed_tests=passed, failed_tests=len(results) - passed, results=results, + streaming_mode=self.streaming_mode, ) @@ -320,19 +335,27 @@ async def run_conformance_test( mode: str = "replay", generate_report: bool = False, report_dir: Optional[str] = None, + streaming_mode: Optional[StreamingMode] = None, ) -> None: """Run conformance tests.""" _print_test_header(mode) + test_summaries: list[_ConformanceTestSummary] = [] async with AdkWebServerClient() as client: - runner = ConformanceTestRunner(test_paths, client, mode) - summary = await runner.run_all_tests() + modes_to_run = _SUPPORTED_STREAMING_MODES + if streaming_mode and streaming_mode in _SUPPORTED_STREAMING_MODES: + modes_to_run = [streaming_mode] + for current_streaming_mode in modes_to_run: + runner = ConformanceTestRunner( + test_paths, client, mode, streaming_mode=current_streaming_mode + ) + test_summaries.append(await runner.run_all_tests()) if generate_report: version_data = await client.get_version_data() - generate_markdown_report(version_data, summary, report_dir) + generate_markdown_report(version_data, test_summaries, report_dir) - _print_test_summary(summary) + _print_test_summary(test_summaries) def _print_test_header(mode: str) -> None: @@ -360,36 +383,38 @@ def _print_test_result_details(result: _TestResult) -> None: click.secho(indented_message, fg="red", err=True) -def _print_test_summary(summary: _ConformanceTestSummary) -> None: +def _print_test_summary(summaries: list[_ConformanceTestSummary]) -> None: """Print the conformance test summary results.""" - # Print summary - click.echo("\n" + "=" * 50) - click.echo("CONFORMANCE TEST SUMMARY") - click.echo("=" * 50) - - if summary.total_tests == 0: - click.secho("No tests were run.", fg="yellow") - return - - click.echo(f"Total tests: {summary.total_tests}") - click.secho(f"Passed: {summary.passed_tests}", fg="green") - - if summary.failed_tests > 0: - click.secho(f"Failed: {summary.failed_tests}", fg="red") - else: - click.echo(f"Failed: {summary.failed_tests}") - - click.echo(f"Success rate: {summary.success_rate:.1f}%") - - # List failed tests - failed_tests = [r for r in summary.results if not r.success] - if failed_tests: - click.echo("\nFailed tests:") - for result in failed_tests: - _print_test_result_details(result) - - # Exit with error code if any tests failed - if summary.failed_tests > 0: - raise click.ClickException(f"{summary.failed_tests} test(s) failed") - else: - click.secho("\nAll tests passed! 🎉", fg="green") + for summary in summaries: + click.echo("\n" + "=" * 50) + click.echo( + f"CONFORMANCE TEST SUMMARY FOR STREAMING MODE: {summary.streaming_mode}" + ) + click.echo("=" * 50) + + if summary.total_tests == 0: + click.secho("No tests were run.", fg="yellow") + return + + click.echo(f"Total tests: {summary.total_tests}") + click.secho(f"Passed: {summary.passed_tests}", fg="green") + + if summary.failed_tests > 0: + click.secho(f"Failed: {summary.failed_tests}", fg="red") + else: + click.echo(f"Failed: {summary.failed_tests}") + + click.echo(f"Success rate: {summary.success_rate:.1f}%") + + # List failed tests + failed_tests = [r for r in summary.results if not r.success] + if failed_tests: + click.echo("\nFailed tests:") + for result in failed_tests: + _print_test_result_details(result) + + # Exit with error code if any tests failed + if summary.failed_tests > 0: + raise click.ClickException(f"{summary.failed_tests} test(s) failed") + else: + click.secho("\nAll tests passed! 🎉", fg="green") diff --git a/src/google/adk/cli/fast_api.py b/src/google/adk/cli/fast_api.py index 8f78c15f9b..199791f7da 100644 --- a/src/google/adk/cli/fast_api.py +++ b/src/google/adk/cli/fast_api.py @@ -22,11 +22,13 @@ import shutil import sys from typing import Any +from typing import Literal from typing import Mapping from typing import Optional import click from fastapi import FastAPI +from fastapi import HTTPException from fastapi import UploadFile from fastapi.responses import FileResponse from fastapi.responses import PlainTextResponse @@ -94,6 +96,7 @@ def get_fast_api_app( logo_text: Optional[str] = None, logo_image_url: Optional[str] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[Literal["pubsub", "eventarc"]]] = None, ) -> FastAPI: """Constructs and returns a FastAPI application for serving ADK agents. @@ -135,8 +138,11 @@ def get_fast_api_app( extra_plugins: List of extra plugin names to load. logo_text: Text to display in the web UI logo area. logo_image_url: URL for an image to display in the web UI logo area. - auto_create_session: Whether to automatically create a session when - not found. + auto_create_session: Whether to automatically create a session when not + found. + trigger_sources: List of trigger sources to enable (e.g. ["pubsub", + "eventarc"]). When set, registers /trigger/* endpoints for batch and + event-driven agent invocations. None disables all trigger endpoints. Returns: The configured FastAPI application instance. @@ -205,6 +211,7 @@ def get_fast_api_app( logo_image_url=logo_image_url, url_prefix=url_prefix, auto_create_session=auto_create_session, + trigger_sources=trigger_sources, ) # Callbacks & other optional args for when constructing the FastAPI instance @@ -266,261 +273,310 @@ def tear_down_observer(observer: Observer, _: AdkWebServer): **extra_fast_api_args, ) - agents_base_path = (Path.cwd() / agents_dir).resolve() - - def _get_app_root(app_name: str) -> Path: - if app_name in ("", ".", ".."): - raise ValueError(f"Invalid app name: {app_name!r}") - if Path(app_name).name != app_name or "\\" in app_name: - raise ValueError(f"Invalid app name: {app_name!r}") - app_root = (agents_base_path / app_name).resolve() - if not app_root.is_relative_to(agents_base_path): - raise ValueError(f"Invalid app name: {app_name!r}") - return app_root - - def _normalize_relative_path(path: str) -> str: - return path.replace("\\", "/").lstrip("/") - - def _has_parent_reference(path: str) -> bool: - return any(part == ".." for part in path.split("/")) - - def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: - if not filename: - raise ValueError("Upload filename is missing.") - filename = _normalize_relative_path(filename) - if "/" not in filename: - raise ValueError(f"Invalid upload filename: {filename!r}") - app_name, rel_path = filename.split("/", 1) - if not app_name or not rel_path: - raise ValueError(f"Invalid upload filename: {filename!r}") - if rel_path.startswith("/"): - raise ValueError(f"Absolute upload path rejected: {filename!r}") - if _has_parent_reference(rel_path): - raise ValueError(f"Path traversal rejected: {filename!r}") - return app_name, rel_path - - def _parse_file_path(file_path: str) -> str: - file_path = _normalize_relative_path(file_path) - if not file_path: - raise ValueError("file_path is missing.") - if file_path.startswith("/"): - raise ValueError(f"Absolute file_path rejected: {file_path!r}") - if _has_parent_reference(file_path): - raise ValueError(f"Path traversal rejected: {file_path!r}") - return file_path - - def _resolve_under_dir(root_dir: Path, rel_path: str) -> Path: - file_path = root_dir / rel_path - resolved_root_dir = root_dir.resolve() - resolved_file_path = file_path.resolve() - if not resolved_file_path.is_relative_to(resolved_root_dir): - raise ValueError(f"Path escapes root_dir: {rel_path!r}") - return file_path - - def _get_tmp_agent_root(app_root: Path, app_name: str) -> Path: - tmp_agent_root = app_root / "tmp" / app_name - resolved_tmp_agent_root = tmp_agent_root.resolve() - if not resolved_tmp_agent_root.is_relative_to(app_root): - raise ValueError(f"Invalid tmp path for app: {app_name!r}") - return tmp_agent_root - - def copy_dir_contents(source_dir: Path, dest_dir: Path) -> None: - dest_dir.mkdir(parents=True, exist_ok=True) - for source_path in source_dir.iterdir(): - if source_path.name == "tmp": - continue - - dest_path = dest_dir / source_path.name - if source_path.is_dir(): - if dest_path.exists() and dest_path.is_file(): - dest_path.unlink() - shutil.copytree(source_path, dest_path, dirs_exist_ok=True) - elif source_path.is_file(): - if dest_path.exists() and dest_path.is_dir(): - shutil.rmtree(dest_path) - shutil.copy2(source_path, dest_path) - - def cleanup_tmp(app_name: str) -> bool: - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in cleanup_tmp: %s", exc) - return False - - try: - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - except ValueError as exc: - logger.exception("Error in cleanup_tmp: %s", exc) - return False - - try: - shutil.rmtree(tmp_agent_root) - except FileNotFoundError: - pass - except OSError as exc: - logger.exception("Error deleting tmp agent root: %s", exc) - return False - - tmp_dir = app_root / "tmp" - resolved_tmp_dir = tmp_dir.resolve() - if not resolved_tmp_dir.is_relative_to(app_root): - logger.error( - "Refusing to delete tmp outside app_root: %s", resolved_tmp_dir - ) - return False + # --- Builder endpoints (agent editor UI) --- + # Only register when the web UI is enabled. In headless / production + # deployments (e.g. `adk deploy cloud_run`) these endpoints are unnecessary + # and expose an attack surface that allows arbitrary file writes under the + # agents directory. + # See https://github.com/google/adk-python/issues/4947 + if web: + agents_base_path = (Path.cwd() / agents_dir).resolve() + + def _get_app_root(app_name: str) -> Path: + if app_name in ("", ".", ".."): + raise ValueError(f"Invalid app name: {app_name!r}") + if Path(app_name).name != app_name or "\\" in app_name: + raise ValueError(f"Invalid app name: {app_name!r}") + app_root = (agents_base_path / app_name).resolve() + if not app_root.is_relative_to(agents_base_path): + raise ValueError(f"Invalid app name: {app_name!r}") + return app_root + + def _normalize_relative_path(path: str) -> str: + return path.replace("\\", "/").lstrip("/") + + def _has_parent_reference(path: str) -> bool: + return any(part == ".." for part in path.split("/")) - try: - tmp_dir.rmdir() - except OSError: - pass + _ALLOWED_EXTENSIONS = frozenset({".yaml", ".yml"}) - return True + # --- YAML content security --- + # The `args` key in agent YAML configs (CodeConfig.args, ToolConfig.args) + # allows callers to pass arbitrary arguments to Python constructors and + # functions, which is an RCE vector when exposed through the builder UI. + # Block any upload that contains an `args` key anywhere in the document. + _BLOCKED_YAML_KEYS = frozenset({"args"}) - def ensure_tmp_exists(app_name: str) -> bool: - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + def _check_yaml_for_blocked_keys(content: bytes, filename: str) -> None: + """Raise if the YAML document contains any blocked keys.""" + import yaml + + try: + docs = list(yaml.safe_load_all(content)) + except yaml.YAMLError as exc: + raise ValueError(f"Invalid YAML in {filename!r}: {exc}") from exc + + def _walk(node: Any) -> None: + if isinstance(node, dict): + for key, value in node.items(): + if key in _BLOCKED_YAML_KEYS: + raise ValueError( + f"Blocked key {key!r} found in {filename!r}. " + f"The '{key}' field is not allowed in builder uploads " + "because it can execute arbitrary code." + ) + _walk(value) + elif isinstance(node, list): + for item in node: + _walk(item) + + for doc in docs: + _walk(doc) + + def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: + if not filename: + raise ValueError("Upload filename is missing.") + filename = _normalize_relative_path(filename) + if "/" not in filename: + raise ValueError(f"Invalid upload filename: {filename!r}") + app_name, rel_path = filename.split("/", 1) + if not app_name or not rel_path: + raise ValueError(f"Invalid upload filename: {filename!r}") + if rel_path.startswith("/"): + raise ValueError(f"Absolute upload path rejected: {filename!r}") + if _has_parent_reference(rel_path): + raise ValueError(f"Path traversal rejected: {filename!r}") + ext = os.path.splitext(rel_path)[1].lower() + if ext not in _ALLOWED_EXTENSIONS: + raise ValueError( + f"File type not allowed: {rel_path!r}" + f" (allowed: {', '.join(sorted(_ALLOWED_EXTENSIONS))})" + ) + return app_name, rel_path + + def _parse_file_path(file_path: str) -> str: + file_path = _normalize_relative_path(file_path) + if not file_path: + raise ValueError("file_path is missing.") + if file_path.startswith("/"): + raise ValueError(f"Absolute file_path rejected: {file_path!r}") + if _has_parent_reference(file_path): + raise ValueError(f"Path traversal rejected: {file_path!r}") + ext = os.path.splitext(file_path)[1].lower() + if ext not in _ALLOWED_EXTENSIONS: + raise ValueError( + f"File type not allowed: {file_path!r}" + f" (allowed: {', '.join(sorted(_ALLOWED_EXTENSIONS))})" + ) + return file_path + + def _resolve_under_dir(root_dir: Path, rel_path: str) -> Path: + file_path = root_dir / rel_path + resolved_root_dir = root_dir.resolve() + resolved_file_path = file_path.resolve() + if not resolved_file_path.is_relative_to(resolved_root_dir): + raise ValueError(f"Path escapes root_dir: {rel_path!r}") + return file_path + + def _get_tmp_agent_root(app_root: Path, app_name: str) -> Path: + tmp_agent_root = app_root / "tmp" / app_name + resolved_tmp_agent_root = tmp_agent_root.resolve() + if not resolved_tmp_agent_root.is_relative_to(app_root): + raise ValueError(f"Invalid tmp path for app: {app_name!r}") + return tmp_agent_root + + def copy_dir_contents(source_dir: Path, dest_dir: Path) -> None: + dest_dir.mkdir(parents=True, exist_ok=True) + for source_path in source_dir.iterdir(): + if source_path.name == "tmp": + continue - if not app_root.is_dir(): - return False + dest_path = dest_dir / source_path.name + if source_path.is_dir(): + if dest_path.exists() and dest_path.is_file(): + dest_path.unlink() + shutil.copytree(source_path, dest_path, dirs_exist_ok=True) + elif source_path.is_file(): + if dest_path.exists() and dest_path.is_dir(): + shutil.rmtree(dest_path) + shutil.copy2(source_path, dest_path) + + def cleanup_tmp(app_name: str) -> bool: + try: + app_root = _get_app_root(app_name) + except ValueError as exc: + logger.exception("Error in cleanup_tmp: %s", exc) + return False - try: - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - except ValueError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + try: + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + except ValueError as exc: + logger.exception("Error in cleanup_tmp: %s", exc) + return False + + try: + shutil.rmtree(tmp_agent_root) + except FileNotFoundError: + pass + except OSError as exc: + logger.exception("Error deleting tmp agent root: %s", exc) + return False + + tmp_dir = app_root / "tmp" + resolved_tmp_dir = tmp_dir.resolve() + if not resolved_tmp_dir.is_relative_to(app_root): + logger.error( + "Refusing to delete tmp outside app_root: %s", resolved_tmp_dir + ) + return False + + try: + tmp_dir.rmdir() + except OSError: + pass - if tmp_agent_root.exists(): return True - try: - tmp_agent_root.mkdir(parents=True, exist_ok=True) - copy_dir_contents(app_root, tmp_agent_root) - except OSError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + def ensure_tmp_exists(app_name: str) -> bool: + try: + app_root = _get_app_root(app_name) + except ValueError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False - return True + if not app_root.is_dir(): + return False - @app.post("/builder/save", response_model_exclude_none=True) - async def builder_build( - files: list[UploadFile], tmp: Optional[bool] = False - ) -> bool: - try: - if tmp: - app_names = set() - uploads = [] + try: + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + except ValueError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False + + if tmp_agent_root.exists(): + return True + + try: + tmp_agent_root.mkdir(parents=True, exist_ok=True) + copy_dir_contents(app_root, tmp_agent_root) + except OSError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False + + return True + + @app.post("/builder/save", response_model_exclude_none=True) + async def builder_build( + files: list[UploadFile], tmp: Optional[bool] = False + ) -> bool: + try: + # Phase 1: parse filenames and read content into memory. + app_names: set[str] = set() + uploads: list[tuple[str, bytes]] = [] for file in files: app_name, rel_path = _parse_upload_filename(file.filename) app_names.add(app_name) - uploads.append((rel_path, file)) + content = await file.read() + uploads.append((rel_path, content)) if len(app_names) != 1: logger.error( - "Exactly one app name is required, found: %s", sorted(app_names) + "Exactly one app name is required, found: %s", + sorted(app_names), ) return False app_name = next(iter(app_names)) - app_root = _get_app_root(app_name) - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - tmp_agent_root.mkdir(parents=True, exist_ok=True) - for rel_path, file in uploads: - destination_path = _resolve_under_dir(tmp_agent_root, rel_path) - destination_path.parent.mkdir(parents=True, exist_ok=True) - with destination_path.open("wb") as buffer: - shutil.copyfileobj(file.file, buffer) + # Phase 2: validate every file *before* writing anything to disk. + for rel_path, content in uploads: + _check_yaml_for_blocked_keys(content, f"{app_name}/{rel_path}") - return True + # Phase 3: write validated files to disk. + if tmp: + app_root = _get_app_root(app_name) + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + tmp_agent_root.mkdir(parents=True, exist_ok=True) - app_names = set() - uploads = [] - for file in files: - app_name, rel_path = _parse_upload_filename(file.filename) - app_names.add(app_name) - uploads.append((rel_path, file)) + for rel_path, content in uploads: + destination_path = _resolve_under_dir(tmp_agent_root, rel_path) + destination_path.parent.mkdir(parents=True, exist_ok=True) + destination_path.write_bytes(content) - if len(app_names) != 1: - logger.error( - "Exactly one app name is required, found: %s", sorted(app_names) - ) - return False + return True - app_name = next(iter(app_names)) - app_root = _get_app_root(app_name) - app_root.mkdir(parents=True, exist_ok=True) + app_root = _get_app_root(app_name) + app_root.mkdir(parents=True, exist_ok=True) - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - if tmp_agent_root.is_dir(): - copy_dir_contents(tmp_agent_root, app_root) + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + if tmp_agent_root.is_dir(): + copy_dir_contents(tmp_agent_root, app_root) - for rel_path, file in uploads: - destination_path = _resolve_under_dir(app_root, rel_path) - destination_path.parent.mkdir(parents=True, exist_ok=True) - with destination_path.open("wb") as buffer: - shutil.copyfileobj(file.file, buffer) + for rel_path, content in uploads: + destination_path = _resolve_under_dir(app_root, rel_path) + destination_path.parent.mkdir(parents=True, exist_ok=True) + destination_path.write_bytes(content) + return cleanup_tmp(app_name) + except ValueError as exc: + logger.exception("Error in builder_build: %s", exc) + raise HTTPException(status_code=400, detail=str(exc)) + except OSError as exc: + logger.exception("Error in builder_build: %s", exc) + return False + + @app.post( + "/builder/app/{app_name}/cancel", response_model_exclude_none=True + ) + async def builder_cancel(app_name: str) -> bool: return cleanup_tmp(app_name) - except ValueError as exc: - logger.exception("Error in builder_build: %s", exc) - return False - except OSError as exc: - logger.exception("Error in builder_build: %s", exc) - return False - - @app.post("/builder/app/{app_name}/cancel", response_model_exclude_none=True) - async def builder_cancel(app_name: str) -> bool: - return cleanup_tmp(app_name) - - @app.get( - "/builder/app/{app_name}", - response_model_exclude_none=True, - response_class=PlainTextResponse, - ) - async def get_agent_builder( - app_name: str, - file_path: Optional[str] = None, - tmp: Optional[bool] = False, - ): - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in get_agent_builder: %s", exc) - return "" - - agent_dir = app_root - if tmp: - if not ensure_tmp_exists(app_name): - return "" - agent_dir = app_root / "tmp" / app_name - if not file_path: - rel_path = "root_agent.yaml" - else: + @app.get( + "/builder/app/{app_name}", + response_model_exclude_none=True, + response_class=PlainTextResponse, + ) + async def get_agent_builder( + app_name: str, + file_path: Optional[str] = None, + tmp: Optional[bool] = False, + ): try: - rel_path = _parse_file_path(file_path) + app_root = _get_app_root(app_name) except ValueError as exc: logger.exception("Error in get_agent_builder: %s", exc) return "" - try: - agent_file_path = _resolve_under_dir(agent_dir, rel_path) - except ValueError as exc: - logger.exception("Error in get_agent_builder: %s", exc) - return "" + agent_dir = app_root + if tmp: + if not ensure_tmp_exists(app_name): + return "" + agent_dir = app_root / "tmp" / app_name - if not agent_file_path.is_file(): - return "" + if not file_path: + rel_path = "root_agent.yaml" + else: + try: + rel_path = _parse_file_path(file_path) + except ValueError as exc: + logger.exception("Error in get_agent_builder: %s", exc) + return "" - return FileResponse( - path=agent_file_path, - media_type="application/x-yaml", - filename=file_path or f"{app_name}.yaml", - headers={"Cache-Control": "no-store"}, - ) + try: + agent_file_path = _resolve_under_dir(agent_dir, rel_path) + except ValueError as exc: + logger.exception("Error in get_agent_builder: %s", exc) + return "" + + if not agent_file_path.is_file(): + return "" + + return FileResponse( + path=agent_file_path, + media_type="application/x-yaml", + filename=file_path or f"{app_name}.yaml", + headers={"Cache-Control": "no-store"}, + ) if a2a: from a2a.server.apps import A2AStarletteApplication diff --git a/src/google/adk/cli/plugins/recordings_plugin.py b/src/google/adk/cli/plugins/recordings_plugin.py index fd4ca67fba..d7bd70e513 100644 --- a/src/google/adk/cli/plugins/recordings_plugin.py +++ b/src/google/adk/cli/plugins/recordings_plugin.py @@ -98,7 +98,8 @@ async def before_model_callback( if (state := self._get_invocation_state(callback_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) pending_recording = Recording( @@ -106,7 +107,7 @@ async def before_model_callback( agent_name=callback_context.agent_name, llm_recording=LlmRecording( llm_request=llm_request, - llm_response=None, + llm_responses=[], ), ) @@ -132,17 +133,25 @@ async def after_model_callback( """Complete pending LLM recording for the invocation specified in session state.""" if not self._is_record_mode_on(callback_context): return None - if (state := self._get_invocation_state(callback_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) agent_name = callback_context.agent_name - if pending_recording := state.pending_llm_recordings.pop(agent_name, None): - if pending_recording.llm_recording is not None: - pending_recording.llm_recording.llm_response = llm_response - logger.debug("Completed LLM recording for agent %s", agent_name) + if pending_recording := state.pending_llm_recordings.get(agent_name, None): + if ( + pending_recording.llm_recording is not None + and pending_recording.llm_recording.llm_responses is not None + ): + pending_recording.llm_recording.llm_responses.append(llm_response) + logger.debug( + "Appended LLM response to recording for agent %s", agent_name + ) + # Only remove from pending dict when response is complete + if not llm_response.partial: + state.pending_llm_recordings.pop(agent_name) else: logger.warning( "No pending LLM recording found for agent %s, skipping response", @@ -172,7 +181,8 @@ async def before_tool_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) pending_recording = Recording( @@ -222,7 +232,8 @@ async def after_tool_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) if pending_recording := state.pending_tool_recordings.pop( @@ -266,7 +277,8 @@ async def on_tool_error_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) logger.debug( @@ -289,13 +301,14 @@ async def after_run_callback( if (state := self._get_invocation_state(ctx)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) try: for pending in state.pending_recordings_order: if pending.llm_recording is not None: - if pending.llm_recording.llm_response is not None: + if pending.llm_recording.llm_responses: state.records.recordings.append(pending) else: logger.warning( @@ -310,16 +323,24 @@ async def after_run_callback( "Incomplete tool recording for agent %s, skipping", pending.agent_name, ) + if self._streaming_mode == "sse": + recordings_file = ( + f"{state.test_case_path}/generated-recordings-sse.yaml" + ) + elif self._streaming_mode == "none": + recordings_file = f"{state.test_case_path}/generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self._streaming_mode}") dump_pydantic_to_yaml( state.records, - f"{state.test_case_path}/generated-recordings.yaml", + recordings_file, sort_keys=False, ) logger.info( - "Saved %d recordings to %s/generated-recordings.yaml", + "Saved %d recordings to %s", len(state.records.recordings), - state.test_case_path, + recordings_file, ) except Exception as e: logger.error("Failed to save interactions: %s", e) @@ -364,12 +385,18 @@ def _create_invocation_state( config = session_state.get("_adk_recordings_config", {}) case_dir = config.get("dir") msg_index = config.get("user_message_index") + self._streaming_mode = config.get("streaming_mode", "") if not case_dir or msg_index is None: raise ValueError("Recording parameters are missing from session state") # Load or create recordings - recordings_file = Path(case_dir) / "generated-recordings.yaml" + if self._streaming_mode == "sse": + recordings_file = Path(case_dir) / "generated-recordings-sse.yaml" + elif self._streaming_mode == "none": + recordings_file = Path(case_dir) / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self._streaming_mode}") if recordings_file.exists(): try: diff --git a/src/google/adk/cli/plugins/recordings_schema.py b/src/google/adk/cli/plugins/recordings_schema.py index d0f20d55cf..ab255ff60d 100644 --- a/src/google/adk/cli/plugins/recordings_schema.py +++ b/src/google/adk/cli/plugins/recordings_schema.py @@ -37,8 +37,8 @@ class LlmRecording(BaseModel): llm_request: Optional[LlmRequest] = None """Required. The LLM request.""" - llm_response: Optional[LlmResponse] = None - """Required. The LLM response.""" + llm_responses: Optional[list[LlmResponse]] = None + """Required. The list of LLM responses.""" class ToolRecording(BaseModel): diff --git a/src/google/adk/cli/plugins/replay_plugin.py b/src/google/adk/cli/plugins/replay_plugin.py index f382947291..c80248dc0d 100644 --- a/src/google/adk/cli/plugins/replay_plugin.py +++ b/src/google/adk/cli/plugins/replay_plugin.py @@ -29,11 +29,7 @@ import yaml from ...agents.callback_context import CallbackContext -from ...models.llm_request import LlmRequest -from ...models.llm_response import LlmResponse from ...plugins.base_plugin import BasePlugin -from .recordings_schema import LlmRecording -from .recordings_schema import Recording from .recordings_schema import Recordings from .recordings_schema import ToolRecording @@ -65,8 +61,8 @@ class _InvocationReplayState(BaseModel): recordings: Recordings # Per-agent replay indices for parallel execution - # key: agent_name -> current replay index for that agent - agent_replay_indices: dict[str, int] = Field(default_factory=dict) + # key: agent_name -> current tool replay index for that agent + agent_tool_replay_indices: dict[str, int] = Field(default_factory=dict) class ReplayPlugin(BasePlugin): @@ -90,31 +86,6 @@ async def before_run_callback( self._load_invocation_state(ctx) return None - @override - async def before_model_callback( - self, *, callback_context: CallbackContext, llm_request: LlmRequest - ) -> Optional[LlmResponse]: - """Replay LLM response from recordings instead of making real call.""" - if not self._is_replay_mode_on(callback_context): - return None - - if (state := self._get_invocation_state(callback_context)) is None: - raise ReplayConfigError( - "Replay state not initialized. Ensure before_run created it." - ) - - agent_name = callback_context.agent_name - - # Verify and get the next LLM recording for this specific agent - recording = self._verify_and_get_next_llm_recording_for_agent( - state, agent_name, llm_request - ) - - logger.debug("Verified and replaying LLM response for agent %s", agent_name) - - # Return the recorded response - return recording.llm_response - @override async def before_tool_callback( self, @@ -196,6 +167,7 @@ def _load_invocation_state( config = session_state.get("_adk_replay_config", {}) case_dir = config.get("dir") msg_index = config.get("user_message_index") + streaming_mode = config.get("streaming_mode") if not case_dir or msg_index is None: raise ReplayConfigError( @@ -203,7 +175,12 @@ def _load_invocation_state( ) # Load recordings - recordings_file = Path(case_dir) / "generated-recordings.yaml" + if streaming_mode == "sse": + recordings_file = Path(case_dir) / "generated-recordings-sse.yaml" + elif streaming_mode == "none": + recordings_file = Path(case_dir) / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") if not recordings_file.exists(): raise ReplayConfigError(f"Recordings file not found: {recordings_file}") @@ -217,6 +194,9 @@ def _load_invocation_state( f"Failed to load recordings from {recordings_file}: {e}" ) from e + # Store recordings in session state for BaseLlmFlow to access + config["_adk_replay_recordings"] = recordings + # Load and store invocation state state = _InvocationReplayState( test_case_path=case_dir, @@ -234,31 +214,32 @@ def _load_invocation_state( ) return state - def _get_next_recording_for_agent( + def _get_next_tool_recording_for_agent( self, state: _InvocationReplayState, agent_name: str, - ) -> Recording: - """Get the next recording for the specific agent in strict order.""" + ) -> ToolRecording: + """Get the next tool recording for the specific agent.""" # Get current agent index - current_agent_index = state.agent_replay_indices.get(agent_name, 0) + current_agent_index = state.agent_tool_replay_indices.get(agent_name, 0) - # Filter ALL recordings for this agent and user message index (strict order) + # Filter tool recordings for this agent and user message index agent_recordings = [ - recording + recording.tool_recording for recording in state.recordings.recordings if ( recording.agent_name == agent_name and recording.user_message_index == state.user_message_index + and recording.tool_recording ) ] # Check if we have enough recordings for this agent if current_agent_index >= len(agent_recordings): raise ReplayVerificationError( - f"Runtime sent more requests than expected for agent '{agent_name}'" - f" at user_message_index {state.user_message_index}. Expected" - f" {len(agent_recordings)}, but got request at index" + "Runtime sent more tool requests than expected for agent" + f" '{agent_name}' at user_message_index {state.user_message_index}." + f" Expected {len(agent_recordings)}, but got request at index" f" {current_agent_index}" ) @@ -266,37 +247,10 @@ def _get_next_recording_for_agent( expected_recording = agent_recordings[current_agent_index] # Advance agent index - state.agent_replay_indices[agent_name] = current_agent_index + 1 + state.agent_tool_replay_indices[agent_name] = current_agent_index + 1 return expected_recording - def _verify_and_get_next_llm_recording_for_agent( - self, - state: _InvocationReplayState, - agent_name: str, - llm_request: LlmRequest, - ) -> LlmRecording: - """Verify and get the next LLM recording for the specific agent.""" - current_agent_index = state.agent_replay_indices.get(agent_name, 0) - expected_recording = self._get_next_recording_for_agent(state, agent_name) - - # Verify this is an LLM recording - if not expected_recording.llm_recording: - raise ReplayVerificationError( - f"Expected LLM recording for agent '{agent_name}' at index " - f"{current_agent_index}, but found tool recording" - ) - - # Strict verification of LLM request - self._verify_llm_request_match( - expected_recording.llm_recording.llm_request, - llm_request, - agent_name, - current_agent_index, - ) - - return expected_recording.llm_recording - def _verify_and_get_next_tool_recording_for_agent( self, state: _InvocationReplayState, @@ -305,58 +259,21 @@ def _verify_and_get_next_tool_recording_for_agent( tool_args: dict[str, Any], ) -> ToolRecording: """Verify and get the next tool recording for the specific agent.""" - current_agent_index = state.agent_replay_indices.get(agent_name, 0) - expected_recording = self._get_next_recording_for_agent(state, agent_name) - - # Verify this is a tool recording - if not expected_recording.tool_recording: - raise ReplayVerificationError( - f"Expected tool recording for agent '{agent_name}' at index " - f"{current_agent_index}, but found LLM recording" - ) + current_agent_index = state.agent_tool_replay_indices.get(agent_name, 0) + expected_recording = self._get_next_tool_recording_for_agent( + state, agent_name + ) # Strict verification of tool call self._verify_tool_call_match( - expected_recording.tool_recording.tool_call, + expected_recording.tool_call, tool_name, tool_args, agent_name, current_agent_index, ) - return expected_recording.tool_recording - - def _verify_llm_request_match( - self, - recorded_request: LlmRequest, - current_request: LlmRequest, - agent_name: str, - agent_index: int, - ) -> None: - """Verify that the current LLM request exactly matches the recorded one.""" - # Comprehensive exclude dict for all fields that can differ between runs - excluded_fields = { - "live_connect_config": True, - "config": { # some config fields can vary per run - "http_options": True, - "labels": True, - }, - } - - # Compare using model dumps with nested exclude dict - recorded_dict = recorded_request.model_dump( - exclude_none=True, exclude=excluded_fields, exclude_defaults=True - ) - current_dict = current_request.model_dump( - exclude_none=True, exclude=excluded_fields, exclude_defaults=True - ) - - if recorded_dict != current_dict: - raise ReplayVerificationError( - f"""LLM request mismatch for agent '{agent_name}' (index {agent_index}): -recorded: {recorded_dict} -current: {current_dict}""" - ) + return expected_recording def _verify_tool_call_match( self, diff --git a/src/google/adk/cli/trigger_routes.py b/src/google/adk/cli/trigger_routes.py new file mode 100644 index 0000000000..ee82c5cee2 --- /dev/null +++ b/src/google/adk/cli/trigger_routes.py @@ -0,0 +1,578 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Trigger endpoints for batch and event-driven agent invocations. + +Provides /trigger/pubsub and /trigger/eventarc endpoints +that enable ADK agents to process Pub/Sub push messages and Eventarc events +without requiring +pre-created sessions. + +Features include: + - Semaphore-based concurrency control to stay within LLM model quota + - Automatic retry with exponential backoff on 429 / RESOURCE_EXHAUSTED + - Transient error detection to signal upstream services to retry +""" + +from __future__ import annotations + +import asyncio +import base64 +import json +import logging +import os +import random +from typing import Any +from typing import Literal +from typing import Optional +from typing import TYPE_CHECKING +import uuid + +from fastapi import FastAPI +from fastapi import HTTPException +from fastapi import Request +from google.genai import types +from pydantic import BaseModel +from pydantic import Field + +from ..events.event import Event +from ..utils.context_utils import Aclosing + +if TYPE_CHECKING: + from .adk_web_server import AdkWebServer + +logger = logging.getLogger("google_adk." + __name__) + +TAG_TRIGGERS = "Triggers" + +# --------------------------------------------------------------------------- +# Concurrency & retry defaults +# --------------------------------------------------------------------------- + +DEFAULT_MAX_CONCURRENT = int(os.environ.get("ADK_TRIGGER_MAX_CONCURRENT", "10")) +"""Maximum concurrent agent invocations across all trigger requests.""" + +DEFAULT_MAX_RETRIES = int(os.environ.get("ADK_TRIGGER_MAX_RETRIES", "3")) +"""Maximum retry attempts for transient (429) errors per row.""" + +DEFAULT_RETRY_BASE_DELAY = float( + os.environ.get("ADK_TRIGGER_RETRY_BASE_DELAY", "1.0") +) +"""Base delay in seconds for exponential backoff.""" + +DEFAULT_RETRY_MAX_DELAY = float( + os.environ.get("ADK_TRIGGER_RETRY_MAX_DELAY", "30.0") +) +"""Maximum delay in seconds for exponential backoff.""" + + +# --------------------------------------------------------------------------- +# Transient error detection +# --------------------------------------------------------------------------- + + +class TransientError(Exception): + """A transient or retryable error (e.g., a 429 status code).""" + + +def _is_transient_error(error: Exception) -> bool: + """Check if an exception represents a transient rate-limit error. + + Checks both the exception type (for google-api-core exceptions) and + the error message string as a fallback for wrapped or generic errors. + """ + # Check google.api_core exception types when available. + try: + from google.api_core import exceptions as api_exceptions + + if isinstance(error, api_exceptions.ResourceExhausted): + return True + if isinstance(error, api_exceptions.TooManyRequests): + return True + except ImportError: + pass + + err_msg = str(error).lower() + return ( + "429" in err_msg + or "resource_exhausted" in err_msg + or "rate limit" in err_msg + or "quota" in err_msg + ) + + +# --------------------------------------------------------------------------- +# Request / Response Models +# --------------------------------------------------------------------------- + + +class PubSubMessage(BaseModel): + """Inner message payload from a Pub/Sub push subscription.""" + + data: Optional[str] = Field( + default=None, description="Base64-encoded message data." + ) + attributes: Optional[dict[str, str]] = Field( + default=None, description="Message attributes." + ) + messageId: Optional[str] = Field( + default=None, description="Pub/Sub message ID." + ) + publishTime: Optional[str] = Field( + default=None, description="Publish timestamp." + ) + + +class PubSubTriggerRequest(BaseModel): + """Pub/Sub push subscription request format. + + See: https://cloud.google.com/pubsub/docs/push#receive_push + """ + + message: PubSubMessage + subscription: Optional[str] = Field( + default=None, + description="Full subscription name (e.g. projects/p/subscriptions/s).", + ) + + +class EventarcTriggerRequest(BaseModel): + """Eventarc / CloudEvents request format. + + Eventarc delivers events as CloudEvents over HTTP in two modes: + + 1. **Structured content mode** (JSON body): All CloudEvents attributes + and the event data are in the JSON body. Used by direct HTTP callers. + 2. **Binary content mode** (Eventarc default): CloudEvents attributes are + sent as ``ce-*`` HTTP headers, and the body contains only the event + data — typically a Pub/Sub message wrapper for Pub/Sub-sourced events: + ``{"message": {"data": "", ...}, "subscription": "..."}``. + + See: https://cloud.google.com/eventarc/docs/cloudevents + """ + + # In structured mode, ``data`` is always present. + # In binary mode, the entire body is the data (often a Pub/Sub wrapper). + data: Optional[dict[str, Any]] = Field( + default=None, description="Event payload data (structured mode)." + ) + source: Optional[str] = Field( + default=None, description="CloudEvents source attribute." + ) + type: Optional[str] = Field( + default=None, description="CloudEvents type attribute." + ) + id: Optional[str] = Field( + default=None, description="CloudEvents id attribute." + ) + time: Optional[str] = Field( + default=None, description="CloudEvents time attribute." + ) + specversion: Optional[str] = Field( + default=None, description="CloudEvents specversion attribute." + ) + + # Binary mode: Pub/Sub message wrapper fields. + message: Optional[PubSubMessage] = Field( + default=None, + description=( + "Pub/Sub message wrapper (binary content mode from Eventarc)." + ), + ) + subscription: Optional[str] = Field( + default=None, + description=( + "Pub/Sub subscription name (binary content mode from Eventarc)." + ), + ) + + model_config = {"extra": "allow"} + + +class TriggerResponse(BaseModel): + """Standard response for Pub/Sub and Eventarc triggers.""" + + status: Literal["success", "error"] = Field( + description="Processing status: 'success' or error." + ) + + +# --------------------------------------------------------------------------- +# Trigger Router +# --------------------------------------------------------------------------- + + +class TriggerRouter: + """A router that registers /trigger/* routes on a FastAPI application. + + Each trigger endpoint auto-creates an ephemeral session, runs the agent, + and returns the result in the format expected by the calling service. + + Features include: + - Semaphore limits concurrent agent calls (default: 10) + - Transient errors (429 / RESOURCE_EXHAUSTED) are retried with + exponential backoff + jitter + """ + + DEFAULT_TRIGGER_SOURCES = [] + """Trigger sources registered when ``trigger_sources`` is not specified. + By default, no triggers are registered to require explicit opt-in via CLI. + """ + VALID_TRIGGER_SOURCES = ["pubsub", "eventarc"] + """All trigger sources supported by this router.""" + + def __init__( + self, + adk_web_server: "AdkWebServer", + *, + trigger_sources: Optional[list[str]] = None, + max_concurrent: int = DEFAULT_MAX_CONCURRENT, + max_retries: int = DEFAULT_MAX_RETRIES, + retry_base_delay: float = DEFAULT_RETRY_BASE_DELAY, + retry_max_delay: float = DEFAULT_RETRY_MAX_DELAY, + ): + self._server = adk_web_server + resolved_sources = ( + trigger_sources + if trigger_sources is not None + else self.DEFAULT_TRIGGER_SOURCES + ) + unknown = set(resolved_sources) - set(self.VALID_TRIGGER_SOURCES) + if unknown: + logger.warning( + "Unknown trigger source(s) ignored: %s. Valid sources: %s", + ", ".join(sorted(unknown)), + ", ".join(self.VALID_TRIGGER_SOURCES), + ) + self._trigger_sources = [ + s for s in resolved_sources if s in self.VALID_TRIGGER_SOURCES + ] + self._semaphore = asyncio.Semaphore(max_concurrent) + self._max_retries = max_retries + self._retry_base_delay = retry_base_delay + self._retry_max_delay = retry_max_delay + + async def _run_agent( + self, + *, + app_name: str, + user_id: str, + message_text: str, + session_id: str, + ) -> list[Event]: + """Run the agent with an auto-created ephemeral session. + + Acquires the concurrency semaphore before execution to prevent + overwhelming the LLM model quota. + + Args: + app_name: The target application / agent name. + user_id: Identifier for observability (derived from trigger metadata). + message_text: The text input to send to the agent. + session_id: The session ID to use. + + Returns: + List of events produced by the agent invocation. + """ + async with self._semaphore: + + runner = await self._server.get_runner_async(app_name) + + session = await self._server.session_service.get_session( + app_name=app_name, + user_id=user_id, + session_id=session_id, + ) + if not session: + session = await self._server.session_service.create_session( + app_name=app_name, + user_id=user_id, + session_id=session_id, + ) + + new_message = types.Content( + role="user", + parts=[types.Part(text=message_text)], + ) + + events: list[Event] = [] + async with Aclosing( + runner.run_async( + user_id=user_id, + session_id=session.id, + new_message=new_message, + ) + ) as agen: + async for event in agen: + events.append(event) + + return events + + async def _run_agent_with_retry( + self, + *, + app_name: str, + user_id: str, + message_text: str, + ) -> list[Event]: + """Run the agent with retry on transient errors. + + Uses exponential backoff with jitter to handle 429 rate-limit errors. + After max_retries exhausted, raises TransientError to signal the + upstream service (Pub/Sub, Eventarc) to retry at a higher level. + + Args: + app_name: The target application / agent name. + user_id: Identifier for observability. + message_text: The text input to send to the agent. + + Returns: + List of events produced by the agent invocation. + + Raises: + TransientError: When retries are exhausted on a transient error. + Exception: For non-transient errors, re-raised immediately. + """ + last_error: Optional[Exception] = None + session_id = str(uuid.uuid4()) + + for attempt in range(self._max_retries + 1): + try: + return await self._run_agent( + app_name=app_name, + user_id=user_id, + message_text=message_text, + session_id=session_id, + ) + except Exception as e: + if not _is_transient_error(e): + raise + + last_error = e + if attempt < self._max_retries: + # Exponential backoff with jitter + delay = min( + self._retry_base_delay * (2**attempt), + self._retry_max_delay, + ) + jitter = random.uniform(0, delay * 0.5) + total_delay = delay + jitter + logger.warning( + "Transient error (attempt %d/%d), retrying in %.1fs: %s", + attempt + 1, + self._max_retries + 1, + total_delay, + e, + ) + await asyncio.sleep(total_delay) + else: + logger.exception( + "Transient error persisted after %d attempts: %s", + self._max_retries + 1, + e, + ) + + raise TransientError( + f"Rate limit exceeded after {self._max_retries + 1} attempts:" + f" {last_error}" + ) + + def register(self, app: FastAPI) -> None: + """Register /trigger/* routes on the FastAPI app. + + Only endpoints whose source name appears in ``self._trigger_sources`` + are registered. + """ + + if "pubsub" in self._trigger_sources: + + @app.post( + "/apps/{app_name}/trigger/pubsub", + response_model=TriggerResponse, + tags=[TAG_TRIGGERS], + summary="Pub/Sub push subscription trigger", + description=( + "Processes a message from a Pub/Sub push subscription." + " Returns 200 on success; errors trigger Pub/Sub retry." + " Includes automatic retry with backoff on 429 errors." + ), + ) + async def trigger_pubsub( + app_name: str, req: PubSubTriggerRequest, request: Request + ) -> TriggerResponse: + user_id = req.subscription or "pubsub-caller" + + decoded_data = None + data_payload = None + if req.message.data: + try: + decoded_data = base64.b64decode(req.message.data).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception as e: + logger.exception("Failed to decode Pub/Sub message data") + raise HTTPException( + status_code=400, + detail=f"Invalid base64 message data: {e}", + ) from e + + message_text = json.dumps( + {"data": data_payload, "attributes": req.message.attributes or {}} + ) + + logger.info( + "Pub/Sub trigger: subscription=%s, messageId=%s", + req.subscription, + req.message.messageId, + ) + + try: + await self._run_agent_with_retry( + app_name=app_name, + user_id=user_id, + message_text=message_text, + ) + except TransientError as te: + logger.exception("Pub/Sub: transient error after retries: %s", te) + raise HTTPException( + status_code=500, + detail=f"Rate limit exceeded (429). Retryable. {te}", + ) from te + except Exception as e: + logger.exception("Error processing Pub/Sub message: %s", e) + raise HTTPException( + status_code=500, + detail=f"Agent processing failed: {e}", + ) from e + + return TriggerResponse(status="success") + + if "eventarc" in self._trigger_sources: + + @app.post( + "/apps/{app_name}/trigger/eventarc", + response_model=TriggerResponse, + tags=[TAG_TRIGGERS], + summary="Eventarc / CloudEvents trigger", + description=( + "Processes a CloudEvent delivered by Eventarc." + " Returns 200 on success; errors trigger Eventarc retry." + " Includes automatic retry with backoff on 429 errors." + ), + ) + async def trigger_eventarc( + app_name: str, req: EventarcTriggerRequest, request: Request + ) -> TriggerResponse: + + user_id = ( + req.source or request.headers.get("ce-source") or "eventarc-caller" + ) + + logger.info( + "Eventarc trigger: source=%s, type=%s, id=%s", + user_id, + req.type or request.headers.get("ce-type"), + req.id or request.headers.get("ce-id"), + ) + + # Extract message text — support both structured and binary modes. + if req.message: + # Binary content mode (Eventarc default): body is a Pub/Sub + # message wrapper with base64-encoded data. + data_payload = None + if req.message.data: + try: + decoded_data = base64.b64decode(req.message.data).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception: + data_payload = req.message.data + + message_text = json.dumps( + {"data": data_payload, "attributes": req.message.attributes or {}} + ) + elif req.data is not None: + # Structured content mode: ``data`` dict in body. + if ( + isinstance(req.data, dict) + and "message" in req.data + and isinstance(req.data["message"], dict) + and "data" in req.data["message"] + ): + try: + decoded_data = base64.b64decode( + req.data["message"]["data"] + ).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception: + data_payload = req.data["message"]["data"] + + message_text = json.dumps({ + "data": data_payload, + "attributes": req.data["message"].get("attributes") or {}, + }) + else: + # Direct CloudEvent + message_text = json.dumps({ + "data": req.data, + "attributes": { + "ce-id": req.id or request.headers.get("ce-id"), + "ce-type": req.type or request.headers.get("ce-type"), + "ce-source": req.source or request.headers.get("ce-source"), + "ce-specversion": ( + req.specversion or request.headers.get("ce-specversion") + ), + }, + }) + else: + # Fallback: serialize whatever we got. + message_text = json.dumps({ + "data": req.model_dump(exclude_unset=True), + "attributes": { + "ce-id": req.id or request.headers.get("ce-id"), + "ce-type": req.type or request.headers.get("ce-type"), + "ce-source": req.source or request.headers.get("ce-source"), + "ce-specversion": ( + req.specversion or request.headers.get("ce-specversion") + ), + }, + }) + + try: + await self._run_agent_with_retry( + app_name=app_name, + user_id=user_id, + message_text=message_text, + ) + except TransientError as te: + logger.exception("Eventarc: transient error after retries: %s", te) + raise HTTPException( + status_code=500, + detail=f"Rate limit exceeded (429). Retryable. {te}", + ) from te + except Exception as e: + logger.exception("Error processing Eventarc event: %s", e) + raise HTTPException( + status_code=500, + detail=f"Agent processing failed: {e}", + ) from e + + return TriggerResponse(status="success") diff --git a/src/google/adk/cli/utils/agent_loader.py b/src/google/adk/cli/utils/agent_loader.py index efd24648dc..a7bbcbc2a6 100644 --- a/src/google/adk/cli/utils/agent_loader.py +++ b/src/google/adk/cli/utils/agent_loader.py @@ -19,6 +19,7 @@ import logging import os from pathlib import Path +import re import sys from typing import Any from typing import Literal @@ -187,8 +188,36 @@ def _load_from_yaml_config( ) + e.args[1:] raise e + _VALID_AGENT_NAME_RE = re.compile(r"^[a-zA-Z0-9_]+$") + + def _validate_agent_name(self, agent_name: str) -> None: + """Validate agent name to prevent arbitrary module imports.""" + # Strip the special agent prefix for validation + if agent_name.startswith("__"): + name_to_check = agent_name[2:] + check_dir = os.path.abspath(SPECIAL_AGENTS_DIR) + else: + name_to_check = agent_name + check_dir = self.agents_dir + + if not self._VALID_AGENT_NAME_RE.match(name_to_check): + raise ValueError( + f"Invalid agent name: {agent_name!r}. Agent names must be valid" + " Python identifiers (letters, digits, and underscores only)." + ) + + # Verify the agent exists on disk before allowing import + agent_path = Path(check_dir) / name_to_check + agent_file = Path(check_dir) / f"{name_to_check}.py" + if not (agent_path.is_dir() or agent_file.is_file()): + raise ValueError( + f"Agent not found: {agent_name!r}. No matching directory or module" + f" exists in '{os.path.join(check_dir, name_to_check)}'." + ) + def _perform_load(self, agent_name: str) -> Union[BaseAgent, App]: """Internal logic to load an agent""" + self._validate_agent_name(agent_name) # Determine the directory to use for loading if agent_name.startswith("__"): # Special agent: use special agents directory @@ -335,18 +364,13 @@ def load_agent(self, agent_name: str) -> Union[BaseAgent, App]: def list_agents(self) -> list[str]: """Lists all agents available in the agent loader (sorted alphabetically).""" base_path = Path.cwd() / self.agents_dir - agent_names = [] - for x in os.listdir(base_path): - if ( - os.path.isdir(os.path.join(base_path, x)) - and not x.startswith(".") - and x != "__pycache__" - ): - try: - self._determine_agent_language(x) - agent_names.append(x) - except ValueError: - continue + agent_names = [ + x + for x in os.listdir(base_path) + if os.path.isdir(os.path.join(base_path, x)) + and not x.startswith(".") + and x != "__pycache__" + ] agent_names.sort() return agent_names diff --git a/src/google/adk/cli/utils/gcp_utils.py b/src/google/adk/cli/utils/gcp_utils.py new file mode 100644 index 0000000000..70f603e4e9 --- /dev/null +++ b/src/google/adk/cli/utils/gcp_utils.py @@ -0,0 +1,173 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for GCP authentication and Vertex AI Express Mode.""" + +from __future__ import annotations + +import subprocess +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import Tuple + +import google.auth +import google.auth.exceptions +from google.auth.transport.requests import AuthorizedSession +from google.auth.transport.requests import Request +from google.cloud import resourcemanager_v3 +import requests + +_VERTEX_AI_ENDPOINT = "https://{location}-aiplatform.googleapis.com/v1beta1" + + +def check_adc() -> bool: + """Checks if Application Default Credentials exist.""" + try: + google.auth.default() + return True + except google.auth.exceptions.DefaultCredentialsError: + return False + + +def login_adc() -> None: + """Prompts user to login via gcloud ADC.""" + try: + subprocess.run( + ["gcloud", "auth", "application-default", "login"], check=True + ) + except (subprocess.CalledProcessError, FileNotFoundError): + raise RuntimeError( + "gcloud is not installed or failed to run. " + "Please install gcloud to login to Application Default Credentials." + ) + + +def get_access_token() -> str: + """Gets the ADC access token.""" + try: + credentials, _ = google.auth.default() + if not credentials.valid: + credentials.refresh(Request()) + return credentials.token or "" + except google.auth.exceptions.DefaultCredentialsError: + raise RuntimeError("Application Default Credentials not found.") + + +def _call_vertex_express_api( + method: str, + action: str, + location: str = "us-central1", + data: Optional[Dict[str, Any]] = None, + params: Optional[Dict[str, Any]] = None, +) -> Dict[str, Any]: + """Calls a Vertex AI Express API.""" + credentials, _ = google.auth.default() + session = AuthorizedSession(credentials) + url = f"{_VERTEX_AI_ENDPOINT.format(location=location)}/vertexExpress{action}" + headers = { + "Content-Type": "application/json", + } + + if method == "GET": + response = session.get(url, headers=headers, params=params) + elif method == "POST": + response = session.post(url, headers=headers, json=data, params=params) + else: + raise ValueError(f"Unsupported method: {method}") + + response.raise_for_status() + return response.json() + + +def retrieve_express_project( + location: str = "us-central1", +) -> Optional[Dict[str, Any]]: + """Retrieves existing Express project info.""" + try: + response = _call_vertex_express_api( + "GET", + ":retrieveExpressProject", + location=location, + params={"get_default_api_key": True}, + ) + project = response.get("expressProject") + if not project: + return None + + return { + "project_id": project.get("projectId"), + "api_key": project.get("defaultApiKey"), + "region": project.get("region", location), + } + except requests.exceptions.HTTPError as e: + if e.response.status_code == 404: + return None + raise + + +def check_express_eligibility( + location: str = "us-central1", +) -> bool: + """Checks if user is eligible for Express Mode.""" + try: + result = _call_vertex_express_api( + "GET", "/Eligibility:check", location=location + ) + return result.get("eligibility") in ("ELIGIBLE", "IN_SCOPE") + except (requests.exceptions.HTTPError, KeyError) as e: + return False + + +def sign_up_express( + location: str = "us-central1", +) -> Dict[str, Any]: + """Signs up for Express Mode.""" + project = _call_vertex_express_api( + "POST", + ":signUp", + location=location, + data={"region": location, "tos_accepted": True}, + ) + return { + "project_id": project.get("projectId"), + "api_key": project.get("defaultApiKey"), + "region": project.get("region", location), + } + + +def list_gcp_projects(limit: int = 20) -> List[Tuple[str, str]]: + """Lists GCP projects available to the user. + + Args: + limit: The maximum number of projects to return. + + Returns: + A list of (project_id, name) tuples. + """ + try: + client = resourcemanager_v3.ProjectsClient() + search_results = client.search_projects() + + projects = [] + for project in search_results: + if len(projects) >= limit: + break + projects.append( + (project.project_id, project.display_name or project.project_id) + ) + return projects + except Exception: + return [] diff --git a/src/google/adk/cli/utils/service_factory.py b/src/google/adk/cli/utils/service_factory.py index 8098555dfa..f0ffcbe9eb 100644 --- a/src/google/adk/cli/utils/service_factory.py +++ b/src/google/adk/cli/utils/service_factory.py @@ -202,7 +202,7 @@ def create_session_service_from_options( fallback_kwargs = dict(kwargs) fallback_kwargs.pop("agents_dir", None) logger.info( - "Falling back to DatabaseSessionService for URI: %s", + "Using DatabaseSessionService for URI: %s", _redact_uri_for_log(session_service_uri), ) return DatabaseSessionService(db_url=session_service_uri, **fallback_kwargs) diff --git a/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py b/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py index 071d59dc2a..6634847271 100644 --- a/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py +++ b/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py @@ -17,7 +17,9 @@ import json import logging import mimetypes +import os import re +import threading from typing import Optional from typing_extensions import override @@ -46,6 +48,7 @@ class AgentEngineSandboxCodeExecutor(BaseCodeExecutor): sandbox_resource_name: str = None agent_engine_resource_name: str = None + _agent_engine_creation_lock: Optional[threading.Lock] = None def __init__( self, @@ -61,16 +64,19 @@ def __init__( projects/123/locations/us-central1/reasoningEngines/456/ sandboxEnvironments/789 agent_engine_resource_name: The resource name of the agent engine to use - to create the code execution sandbox. Format: + to create the code execution sandbox. If not set, a new Agent Engine + will be created automatically. Format: projects/123/locations/us-central1/reasoningEngines/456, when both sandbox_resource_name and agent_engine_resource_name are set, agent_engine_resource_name will be ignored. **data: Additional keyword arguments to be passed to the base class. """ super().__init__(**data) + self._agent_engine_creation_lock = threading.Lock() sandbox_resource_name_pattern = r'^projects/([a-zA-Z0-9-_]+)/locations/([a-zA-Z0-9-_]+)/reasoningEngines/(\d+)/sandboxEnvironments/(\d+)$' agent_engine_resource_name_pattern = r'^projects/([a-zA-Z0-9-_]+)/locations/([a-zA-Z0-9-_]+)/reasoningEngines/(\d+)$' + # Case 1: sandbox_resource_name is provided. if sandbox_resource_name is not None: self._project_id, self._location = ( self._get_project_id_and_location_from_resource_name( @@ -78,18 +84,23 @@ def __init__( ) ) self.sandbox_resource_name = sandbox_resource_name - elif agent_engine_resource_name is not None: + + # Case 2: Agent Engine resource name is not provided. + elif agent_engine_resource_name is None: + # The Agent Engine will be auto-created lazily within execute_code(). + self._project_id = os.environ.get('GOOGLE_CLOUD_PROJECT') + self._location = os.environ.get('GOOGLE_CLOUD_LOCATION', 'us-central1') + self.agent_engine_resource_name = None + + # Case 3: Use the provided agent_engine_resource_name. + else: self._project_id, self._location = ( self._get_project_id_and_location_from_resource_name( - agent_engine_resource_name, agent_engine_resource_name_pattern + agent_engine_resource_name, + agent_engine_resource_name_pattern, ) ) self.agent_engine_resource_name = agent_engine_resource_name - else: - raise ValueError( - 'Either sandbox_resource_name or agent_engine_resource_name must be' - ' set.' - ) @override def execute_code( @@ -97,6 +108,25 @@ def execute_code( invocation_context: InvocationContext, code_execution_input: CodeExecutionInput, ) -> CodeExecutionResult: + if ( + self.sandbox_resource_name is None + and self.agent_engine_resource_name is None + ): + with self._agent_engine_creation_lock: + if self.agent_engine_resource_name is None: + logger.info( + 'No Agent Engine resource name provided. Creating a new one...' + ) + try: + # Create a default Agent Engine. + created_engine = self._get_api_client().agent_engines.create() + self.agent_engine_resource_name = created_engine.api_resource.name + logger.info( + 'Created Agent Engine: %s', self.agent_engine_resource_name + ) + except Exception as e: + logger.error('Failed to auto-create Agent Engine: %s', e) + raise # default to the sandbox resource name if set. sandbox_name = self.sandbox_resource_name if self.sandbox_resource_name is None: diff --git a/src/google/adk/code_executors/base_code_executor.py b/src/google/adk/code_executors/base_code_executor.py index 8afd0d14aa..bafe7b8b2d 100644 --- a/src/google/adk/code_executors/base_code_executor.py +++ b/src/google/adk/code_executors/base_code_executor.py @@ -16,6 +16,7 @@ import abc from typing import List +from typing import Optional from pydantic import BaseModel @@ -41,6 +42,7 @@ class BaseCodeExecutor(BaseModel): code blocks. execution_result_delimiters: The delimiters to format the code execution result. + timeout_seconds: The fallback timeout in seconds for the code execution. """ optimize_data_file: bool = False @@ -74,6 +76,9 @@ class BaseCodeExecutor(BaseModel): execution_result_delimiters: tuple[str, str] = ('```tool_output\n', '\n```') """The delimiters to format the code execution result.""" + timeout_seconds: Optional[int] = None + """The timeout in seconds for the code execution.""" + @abc.abstractmethod def execute_code( self, diff --git a/src/google/adk/code_executors/gke_code_executor.py b/src/google/adk/code_executors/gke_code_executor.py index b44aa19357..3336eed6d9 100644 --- a/src/google/adk/code_executors/gke_code_executor.py +++ b/src/google/adk/code_executors/gke_code_executor.py @@ -30,12 +30,12 @@ from .code_execution_utils import CodeExecutionResult try: - from agentic_sandbox import SandboxClient + from k8s_agent_sandbox import SandboxClient except ImportError: SandboxClient = None if TYPE_CHECKING: - from agentic_sandbox import SandboxClient + from k8s_agent_sandbox import SandboxClient # Expose these for tests to monkeypatch. client = k8s.client diff --git a/src/google/adk/code_executors/unsafe_local_code_executor.py b/src/google/adk/code_executors/unsafe_local_code_executor.py index e91a54bb24..64752fffd5 100644 --- a/src/google/adk/code_executors/unsafe_local_code_executor.py +++ b/src/google/adk/code_executors/unsafe_local_code_executor.py @@ -17,7 +17,10 @@ from contextlib import redirect_stdout import io import logging +import multiprocessing +import queue import re +import traceback from typing import Any from pydantic import Field @@ -31,6 +34,20 @@ logger = logging.getLogger('google_adk.' + __name__) +def _execute_in_process( + code: str, globals_: dict[str, Any], result_queue: multiprocessing.Queue +) -> None: + """Executes code in a separate process and puts result in queue.""" + stdout = io.StringIO() + error = None + try: + with redirect_stdout(stdout): + exec(code, globals_, globals_) + except BaseException: + error = traceback.format_exc() + result_queue.put((stdout.getvalue(), error)) + + def _prepare_globals(code: str, globals_: dict[str, Any]) -> None: """Prepare globals for code execution, injecting __name__ if needed.""" if re.search(r"if\s+__name__\s*==\s*['\"]__main__['\"]", code): @@ -65,19 +82,33 @@ def execute_code( ) -> CodeExecutionResult: logger.debug('Executing code:\n```\n%s\n```', code_execution_input.code) # Execute the code. + globals_ = {} + _prepare_globals(code_execution_input.code, globals_) + + ctx = multiprocessing.get_context('spawn') + result_queue = ctx.Queue() + process = ctx.Process( + target=_execute_in_process, + args=(code_execution_input.code, globals_, result_queue), + daemon=True, + ) + process.start() + output = '' error = '' try: - globals_ = {} - _prepare_globals(code_execution_input.code, globals_) - stdout = io.StringIO() - with redirect_stdout(stdout): - exec(code_execution_input.code, globals_, globals_) - output = stdout.getvalue() - except Exception as e: - error = str(e) + output, err = result_queue.get(timeout=self.timeout_seconds) + process.join() + if err: + error = err + except queue.Empty: + process.terminate() + process.join() + error = f'Code execution timed out after {self.timeout_seconds} seconds.' # Collect the final result. + result_queue.close() + result_queue.join_thread() return CodeExecutionResult( stdout=output, stderr=error, diff --git a/src/google/adk/environment/__init__.py b/src/google/adk/environment/__init__.py new file mode 100644 index 0000000000..97232937ec --- /dev/null +++ b/src/google/adk/environment/__init__.py @@ -0,0 +1,27 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Agent environments.""" + +from __future__ import annotations + +from ._base_environment import BaseEnvironment +from ._base_environment import ExecutionResult +from ._local_environment import LocalEnvironment + +__all__ = [ + 'BaseEnvironment', + 'ExecutionResult', + 'LocalEnvironment', +] diff --git a/src/google/adk/environment/_base_environment.py b/src/google/adk/environment/_base_environment.py new file mode 100644 index 0000000000..6b27232471 --- /dev/null +++ b/src/google/adk/environment/_base_environment.py @@ -0,0 +1,124 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for agent environments.""" + +from __future__ import annotations + +from abc import ABC +from abc import abstractmethod +import dataclasses +from pathlib import Path +from typing import Optional + +from ..utils.feature_decorator import experimental + + +@dataclasses.dataclass +class ExecutionResult: + """Result of a command execution.""" + + exit_code: int = 0 + """The exit code of the process.""" + + stdout: str = "" + """Standard output captured from the process.""" + + stderr: str = "" + """Standard error captured from the process.""" + + timed_out: bool = False + """Whether the execution exceeded the timeout.""" + + +@experimental +class BaseEnvironment(ABC): + """Abstract base class for code execution environments. + + An environment provides the ability to execute shell commands, + read files, and write files within a working directory. Concrete + implementations include local subprocess execution, sandboxed + execution, container environments, and cloud-hosted environments. + + Lifecycle: + 1. Construct the environment (``__init__``). + 2. Call ``initialize()`` before first use. + 3. Use ``execute``, ``read_file``, ``write_file``. + 4. Call ``close()`` when done. + """ + + async def initialize(self) -> None: + """Initialize the environment (e.g. create working directory). + + Called before first use. The default implementation is a + no-op. Sub-classes should ensure this method is idempotent. + """ + + async def close(self) -> None: + """Release resources held by the environment. + + Called when the environment is no longer needed. The default + implementation is a no-op. Sub-classes should ensure this method is + idempotent. + """ + + @property + @abstractmethod + def working_dir(self) -> Path: + """The absolute path to the environment's working directory.""" + + @abstractmethod + async def execute( + self, + command: str, + *, + timeout: Optional[float] = None, + ) -> ExecutionResult: + """Execute a shell command in the working directory. + + Args: + command: The shell command string to execute. + timeout: Maximum execution time in seconds. ``None`` means + no limit. + + Returns: + An ``ExecutionResult`` with exit code, stdout, stderr, and + timeout status. + """ + + @abstractmethod + async def read_file(self, path: Path) -> bytes: + """Read a file from the environment filesystem. + + Args: + path: Absolute or working-dir-relative path to the file. + + Returns: + The raw file contents as bytes. + + Raises: + FileNotFoundError: If the file does not exist. + """ + + @abstractmethod + async def write_file(self, path: Path, content: str | bytes) -> None: + """Write content to a file in the environment's filesystem. + + Parent directories are created automatically if they do not + exist. + + Args: + path: Absolute or working-dir-relative path to the file. + content: The string or raw bytes to write. + """ diff --git a/src/google/adk/environment/_local_environment.py b/src/google/adk/environment/_local_environment.py new file mode 100644 index 0000000000..0283b17965 --- /dev/null +++ b/src/google/adk/environment/_local_environment.py @@ -0,0 +1,158 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Local subprocess code execution environment.""" + +from __future__ import annotations + +import asyncio +import logging +import os +from pathlib import Path +import shutil +import tempfile +from typing import Optional + +from typing_extensions import override + +from ..utils.feature_decorator import experimental +from ._base_environment import BaseEnvironment +from ._base_environment import ExecutionResult + +logger = logging.getLogger('google_adk.' + __name__) + + +@experimental +class LocalEnvironment(BaseEnvironment): + """Execute commands via local ``asyncio`` subprocesses. + + When ``working_dir`` is not specified, a temporary directory is + created on ``initialize()`` and removed on ``close()``. + """ + + def __init__( + self, + *, + working_dir: Optional[Path] = None, + env_vars: Optional[dict[str, str]] = None, + ): + """Create a local environment. + + Args: + working_dir: Absolute path to the workspace directory. If + ``None``, a temporary directory is created during + ``initialize()``. + env_vars: Extra environment variables merged into the subprocess + environment. + """ + self._working_dir = working_dir + self._env_vars = env_vars + self._auto_created = False + + @property + @override + def working_dir(self) -> Path: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + return self._working_dir + + @override + async def initialize(self) -> None: + if self._working_dir is None: + self._working_dir = Path(tempfile.mkdtemp(prefix='adk_workspace_')) + self._auto_created = True + logger.debug('Created temporary folder: %s', self._working_dir) + else: + os.makedirs(self._working_dir, exist_ok=True) + + @override + async def close(self) -> None: + if self._auto_created and self._working_dir: + shutil.rmtree(self._working_dir, ignore_errors=True) + logger.debug('Removed temporary workspace: %s', self._working_dir) + self._working_dir = None + + @override + async def execute( + self, + command: str, + *, + timeout: Optional[float] = None, + ) -> ExecutionResult: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + proc_env = os.environ.copy() + if self._env_vars: + proc_env.update(self._env_vars) + + proc = await asyncio.create_subprocess_shell( + command, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + cwd=self._working_dir, + env=proc_env, + ) + + timed_out = False + try: + stdout_bytes, stderr_bytes = await asyncio.wait_for( + proc.communicate(), timeout=timeout + ) + except asyncio.TimeoutError: + timed_out = True + proc.kill() + stdout_bytes, stderr_bytes = await proc.communicate() + + return ExecutionResult( + exit_code=proc.returncode or 0, + stdout=stdout_bytes.decode('utf-8', errors='replace'), + stderr=stderr_bytes.decode('utf-8', errors='replace'), + timed_out=timed_out, + ) + + @override + async def read_file(self, path: str) -> bytes: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + path = self._resolve_path(path) + return await asyncio.to_thread(self._sync_read, path) + + @override + async def write_file(self, path: str, content: str | bytes) -> None: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + path = self._resolve_path(path) + return await asyncio.to_thread(self._sync_write, path, content) + + def _resolve_path(self, path: str) -> str: + """Resolve a relative path against the working directory.""" + if os.path.isabs(path): + return path + return os.path.join(self._working_dir, path) + + @staticmethod + def _sync_read(path: str) -> bytes: + with open(path, 'rb') as f: + return f.read() + + @staticmethod + def _sync_write(path: str, content: str | bytes) -> None: + os.makedirs(os.path.dirname(path), exist_ok=True) + mode = 'w' if isinstance(content, str) else 'wb' + kwargs = {'encoding': 'utf-8'} if isinstance(content, str) else {} + with open(path, mode, **kwargs) as f: + f.write(content) diff --git a/src/google/adk/errors/already_exists_error.py b/src/google/adk/errors/already_exists_error.py index 8bd14f9ad6..bf8d357a81 100644 --- a/src/google/adk/errors/already_exists_error.py +++ b/src/google/adk/errors/already_exists_error.py @@ -18,7 +18,7 @@ class AlreadyExistsError(Exception): """Represents an error that occurs when an entity already exists.""" - def __init__(self, message="The resource already exists."): + def __init__(self, message: str = "The resource already exists."): """Initializes the AlreadyExistsError exception. Args: diff --git a/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py b/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py new file mode 100644 index 0000000000..18426e4226 --- /dev/null +++ b/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py @@ -0,0 +1,108 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vertex AI Scenario Generation Facade.""" + +from __future__ import annotations + +import logging +import os + +from . import conversation_scenarios +from ..agents import base_agent +from ..dependencies.vertexai import vertexai + +types = vertexai.types + + +logger = logging.getLogger("google_adk." + __name__) + +_ERROR_MESSAGE_SUFFIX = """ +You should specify both project id and location. This metric uses Vertex Gen AI +Eval SDK, and it requires google cloud credentials. + +If using an .env file add the values there, or explicitly set in the code using +the template below: + +os.environ['GOOGLE_CLOUD_LOCATION'] = +os.environ['GOOGLE_CLOUD_PROJECT'] = +""" + + +class ScenarioGenerator: + """Facade for generating eval scenarios using Vertex Gen AI Eval SDK. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + """ + + def __init__(self): + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + location = os.environ.get("GOOGLE_CLOUD_LOCATION") + api_key = os.environ.get("GOOGLE_API_KEY") + + if api_key: + self._client = vertexai.Client(api_key=api_key) + elif project_id or location: + if not project_id: + raise ValueError("Missing project id." + _ERROR_MESSAGE_SUFFIX) + if not location: + raise ValueError("Missing location." + _ERROR_MESSAGE_SUFFIX) + self._client = vertexai.Client(project=project_id, location=location) + else: + raise ValueError( + "Either API Key or Google cloud Project id and location should be" + " specified." + ) + + def generate_scenarios( + self, + agent: base_agent.BaseAgent, + config: conversation_scenarios.ConversationGenerationConfig, + ) -> list[conversation_scenarios.ConversationScenario]: + """Generates conversation scenarios for the specified agent. + + Args: + agent: The root agent representing the system under test. + config: The configuration for ConversationGenerationConfig. + + Returns: + A list of ADK ConversationScenario objects. + """ + agent_info = types.evals.AgentInfo.load_from_agent(agent=agent) + + vertex_config = types.evals.UserScenarioGenerationConfig( + count=config.count, + generation_instruction=config.generation_instruction, + environment_context=config.environment_context, + model_name=config.model_name, + ) + + eval_dataset = self._client.evals.generate_conversation_scenarios( + agent_info=agent_info, + config=vertex_config, + ) + + scenarios = [] + for eval_case in eval_dataset.eval_cases: + if not eval_case.user_scenario: + continue + scenarios.append( + conversation_scenarios.ConversationScenario( + starting_prompt=eval_case.user_scenario.starting_prompt, + conversation_plan=eval_case.user_scenario.conversation_plan, + ) + ) + + return scenarios diff --git a/src/google/adk/evaluation/conversation_scenarios.py b/src/google/adk/evaluation/conversation_scenarios.py index dc2d09b783..ec29804867 100644 --- a/src/google/adk/evaluation/conversation_scenarios.py +++ b/src/google/adk/evaluation/conversation_scenarios.py @@ -75,3 +75,33 @@ class ConversationScenarios(EvalBaseModel): scenarios: list[ConversationScenario] = Field( default_factory=list, description="""A list of ConversationScenario.""" ) + + +class ConversationGenerationConfig(EvalBaseModel): + """Configuration for generating conversation scenarios.""" + + count: int = Field( + description="The number of conversation scenarios to generate." + ) + generation_instruction: Optional[str] = Field( + default=None, + description=( + "Optional natural language goal to guide the EvalSet generation." + ), + ) + environment_context: Optional[str] = Field( + default=None, + description=( + "Context describing the backend data or state accessible to the" + " agent's tools. This acts as the 'ground truth' for the simulation," + " ensuring generated queries reference data that actually exists" + " (e.g., a list of available models so the generator knows what the" + " 'get_model_available' tool will return)." + ), + ) + model_name: str = Field( + description=( + "The name of the Gemini model to use for generating the scenarios" + " (e.g., 'gemini-2.5-flash')." + ) + ) diff --git a/src/google/adk/evaluation/eval_metrics.py b/src/google/adk/evaluation/eval_metrics.py index eb7c7e36cb..50c3473c3a 100644 --- a/src/google/adk/evaluation/eval_metrics.py +++ b/src/google/adk/evaluation/eval_metrics.py @@ -61,6 +61,12 @@ class PrebuiltMetrics(Enum): PER_TURN_USER_SIMULATOR_QUALITY_V1 = "per_turn_user_simulator_quality_v1" + MULTI_TURN_TASK_SUCCESS_V1 = "multi_turn_task_success_v1" + + MULTI_TURN_TRAJECTORY_QUALITY_V1 = "multi_turn_trajectory_quality_v1" + + MULTI_TURN_TOOL_USE_QUALITY_V1 = "multi_turn_tool_use_quality_v1" + MetricName: TypeAlias = Union[str, PrebuiltMetrics] Threshold: TypeAlias = float diff --git a/src/google/adk/evaluation/evaluation_generator.py b/src/google/adk/evaluation/evaluation_generator.py index 725bddc11c..f8fb6795aa 100644 --- a/src/google/adk/evaluation/evaluation_generator.py +++ b/src/google/adk/evaluation/evaluation_generator.py @@ -280,6 +280,7 @@ def convert_events_to_eval_invocations( invocations = [] for invocation_id, events in events_by_invocation_id.items(): final_response = None + final_event = None user_content = Content(parts=[]) invocation_timestamp = 0 app_details = None @@ -304,15 +305,17 @@ def convert_events_to_eval_invocations( if event.content and event.content.parts: if event.is_final_response(): final_response = event.content - else: - for p in event.content.parts: - if p.function_call or p.function_response or p.text: - events_to_add.append(event) - break + final_event = event + + for p in event.content.parts: + if p.function_call or p.function_response or p.text: + events_to_add.append(event) + break invocation_events = [ InvocationEvent(author=e.author, content=e.content) for e in events_to_add + if e is not final_event ] invocations.append( Invocation( diff --git a/src/google/adk/evaluation/metric_evaluator_registry.py b/src/google/adk/evaluation/metric_evaluator_registry.py index 775d5c2d7a..b005bd36e6 100644 --- a/src/google/adk/evaluation/metric_evaluator_registry.py +++ b/src/google/adk/evaluation/metric_evaluator_registry.py @@ -27,12 +27,18 @@ from .hallucinations_v1 import HallucinationsV1Evaluator from .metric_info_providers import FinalResponseMatchV2EvaluatorMetricInfoProvider from .metric_info_providers import HallucinationsV1EvaluatorMetricInfoProvider +from .metric_info_providers import MultiTurnTaskSuccessV1MetricInfoProvider +from .metric_info_providers import MultiTurnToolUseQualityV1MetricInfoProvider +from .metric_info_providers import MultiTurnTrajectoryQualityV1MetricInfoProvider from .metric_info_providers import PerTurnUserSimulatorQualityV1MetricInfoProvider from .metric_info_providers import ResponseEvaluatorMetricInfoProvider from .metric_info_providers import RubricBasedFinalResponseQualityV1EvaluatorMetricInfoProvider from .metric_info_providers import RubricBasedToolUseV1EvaluatorMetricInfoProvider from .metric_info_providers import SafetyEvaluatorV1MetricInfoProvider from .metric_info_providers import TrajectoryEvaluatorMetricInfoProvider +from .multi_turn_task_success_evaluator import MultiTurnTaskSuccessV1Evaluator +from .multi_turn_tool_use_quality_evaluator import MultiTurnToolUseQualityV1Evaluator +from .multi_turn_trajectory_quality_evaluator import MultiTurnTrajectoryQualityV1Evaluator from .response_evaluator import ResponseEvaluator from .rubric_based_final_response_quality_v1 import RubricBasedFinalResponseQualityV1Evaluator from .rubric_based_tool_use_quality_v1 import RubricBasedToolUseV1Evaluator @@ -126,6 +132,18 @@ def _get_default_metric_evaluator_registry() -> MetricEvaluatorRegistry: metric_info=SafetyEvaluatorV1MetricInfoProvider().get_metric_info(), evaluator=SafetyEvaluatorV1, ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnTaskSuccessV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnTaskSuccessV1Evaluator, + ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnTrajectoryQualityV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnTrajectoryQualityV1Evaluator, + ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnToolUseQualityV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnToolUseQualityV1Evaluator, + ) metric_evaluator_registry.register_evaluator( metric_info=FinalResponseMatchV2EvaluatorMetricInfoProvider().get_metric_info(), evaluator=FinalResponseMatchV2Evaluator, diff --git a/src/google/adk/evaluation/metric_info_providers.py b/src/google/adk/evaluation/metric_info_providers.py index 638e817289..f887aacad2 100644 --- a/src/google/adk/evaluation/metric_info_providers.py +++ b/src/google/adk/evaluation/metric_info_providers.py @@ -94,6 +94,65 @@ def get_metric_info(self) -> MetricInfo: ) +class MultiTurnTaskSuccessV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnTaskSuccessV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TASK_SUCCESS_V1.value, + description=( + "Evaluates if the agent was able to achieve the goal or goals of" + " the conversation." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + +class MultiTurnTrajectoryQualityV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnTrajectoryQualityV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TRAJECTORY_QUALITY_V1.value, + description=( + "Evaluates the overall trajectory of the conversation. Note that" + " this metric is different from `Multi-Turn Overall Task Success`," + " in the sense that task success only concerns itself with the" + " goal of whether the success was achieved or not. How that was" + " achieved is not its concern. This metric on the other hand does" + " care about the path that agent took to achieve the goal. This is" + " a reference free metric." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + +class MultiTurnToolUseQualityV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnToolUseQualityV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TOOL_USE_QUALITY_V1.value, + description=( + "Evaluates the function calls made during a multi-turn" + " conversation. This is a reference free metric." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + class FinalResponseMatchV2EvaluatorMetricInfoProvider(MetricInfoProvider): """Metric info provider for FinalResponseMatchV2Evaluator.""" diff --git a/src/google/adk/evaluation/multi_turn_task_success_evaluator.py b/src/google/adk/evaluation/multi_turn_task_success_evaluator.py new file mode 100644 index 0000000000..015bff39e3 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_task_success_evaluator.py @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnTaskSuccessV1Evaluator(Evaluator): + """Evaluates if the agent was able to achieve the goal or goals of the conversation. + + The metric takes into account all the turns of the multi-turn conversation. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TASK_SUCCESS, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py b/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py new file mode 100644 index 0000000000..5d2d876569 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnToolUseQualityV1Evaluator(Evaluator): + """Evaluates the function calls made during a multi-turn conversation. + + This is a reference free metric. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TOOL_USE_QUALITY, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py b/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py new file mode 100644 index 0000000000..a9f042a852 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py @@ -0,0 +1,69 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnTrajectoryQualityV1Evaluator(Evaluator): + """Evaluates the overall trajectory of the conversation. + + Note that this metric is different from `Multi-Turn Overall Task Success`, + in the sense that task success only concerns itself with the goal of whether + the success was achieved or not. How that was achieved is not its concern. + This metric on the other hand does care about the path that agent took to + achieve the goal. + + This is a reference free metric. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TRAJECTORY_QUALITY, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/src/google/adk/evaluation/vertex_ai_eval_facade.py b/src/google/adk/evaluation/vertex_ai_eval_facade.py index 93b54a7534..9205c96c91 100644 --- a/src/google/adk/evaluation/vertex_ai_eval_facade.py +++ b/src/google/adk/evaluation/vertex_ai_eval_facade.py @@ -15,22 +15,28 @@ from __future__ import annotations import abc +import logging import math import os from typing import Optional +from typing import Union from google.genai import types as genai_types import pandas as pd from typing_extensions import override from ..dependencies.vertexai import vertexai +from .app_details import AgentDetails from .eval_case import ConversationScenario from .eval_case import Invocation +from .eval_case import InvocationEvent from .evaluator import EvalStatus from .evaluator import EvaluationResult from .evaluator import Evaluator from .evaluator import PerInvocationResult +logger = logging.getLogger("google_adk." + __name__) + _ERROR_MESSAGE_SUFFIX = """ You should specify both project id and location. This metric uses Vertex Gen AI Eval SDK, and it requires google cloud credentials. @@ -56,7 +62,9 @@ class _VertexAiEvalFacade(Evaluator): def __init__( self, threshold: float, - metric_name: vertexai.types.PrebuiltMetric, + metric_name: Union[ + vertexai.types.PrebuiltMetric, vertexai.types.RubricMetric + ], expected_invocations_required=False, ): self._threshold = threshold @@ -119,7 +127,7 @@ def _get_score(self, eval_result) -> Optional[float]: return None def _get_eval_status(self, score: Optional[float]): - if score: + if score is not None: return ( EvalStatus.PASSED if score >= self._threshold else EvalStatus.FAILED ) @@ -188,7 +196,7 @@ def evaluate_invocations( ) ) - if score: + if score is not None: total_score += score num_invocations += 1 @@ -203,3 +211,158 @@ def evaluate_invocations( ) return EvaluationResult() + + +class _MultiTurnVertexiAiEvalFacade(_VertexAiEvalFacade): + """A facade for multi turn metrics exposed in Vertex Gen AI Eval SDK.""" + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + del conversation_scenario + + per_invocation_results = [] + # If expected_invocation are not required by the metric and if they are not + # supplied, we provide a list of None. + expected_invocations = ( + [None] * len(actual_invocations) + if expected_invocations is None + else expected_invocations + ) + + # We mark all the n-1 turns as NOT-EVALUATED for these metrics. + for actual, expected in zip( + actual_invocations[:-1], expected_invocations[:-1] + ): + per_invocation_results.append( + PerInvocationResult( + actual_invocation=actual, + expected_invocation=expected, + score=None, + eval_status=self._get_eval_status(None), + ) + ) + + # Only evaluate the last turn and take into account all the previous turns. + eval_case = vertexai.types.EvalCase( + agent_data=_MultiTurnVertexiAiEvalFacade._get_agent_data( + actual_invocations + ) + ) + dataset = vertexai.types.EvaluationDataset(eval_cases=[eval_case]) + + eval_case_result = self._perform_eval( + dataset=dataset, metrics=[self._metric_name] + ) + + score = self._get_score(eval_case_result) + per_invocation_results.append( + PerInvocationResult( + actual_invocation=actual_invocations[-1], + expected_invocation=expected_invocations[-1], + score=score, + eval_status=self._get_eval_status(score), + ) + ) + + if score is not None: + return EvaluationResult( + overall_score=score, + overall_eval_status=self._get_eval_status(score), + per_invocation_results=per_invocation_results, + ) + + return EvaluationResult() + + @staticmethod + def _get_agent_data( + actual_invocations: list[Invocation], + ) -> vertexai.types.evals.AgentData: + return vertexai.types.evals.AgentData( + agents=_MultiTurnVertexiAiEvalFacade._get_agent_details( + actual_invocations + ), + turns=_MultiTurnVertexiAiEvalFacade._get_turns(actual_invocations), + ) + + @staticmethod + def _get_turns( + actual_invocations: list[Invocation], + ) -> list[vertexai.types.evals.ConversationTurn]: + return [ + _MultiTurnVertexiAiEvalFacade._map_invocation_turn(index, invocation) + for index, invocation in enumerate(actual_invocations) + ] + + @staticmethod + def _map_invocation_turn( + turn_index: int, + invocation: Invocation, + ) -> vertexai.types.evals.ConversationTurn: + agent_events = [] + agent_events.append( + vertexai.types.evals.AgentEvent( + author="user", content=invocation.user_content + ) + ) + + for invocation_event in invocation.intermediate_data.invocation_events: + agent_events.append( + _MultiTurnVertexiAiEvalFacade._map_inovcation_event_to_agent_event( + invocation_event + ) + ) + + agent_events.append( + vertexai.types.evals.AgentEvent( + author="agent", content=invocation.final_response + ) + ) + + return vertexai.types.evals.ConversationTurn( + turn_index=turn_index, + events=agent_events, + turn_id=invocation.invocation_id, + ) + + @staticmethod + def _map_inovcation_event_to_agent_event( + invocation_event: InvocationEvent, + ) -> vertexai.types.evals.AgentEvent: + return vertexai.types.evals.AgentEvent( + author=invocation_event.author, content=invocation_event.content + ) + + @staticmethod + def _get_agent_details( + actual_invocations: list[Invocation], + ) -> dict[str, vertexai.types.evals.AgentConfig]: + agent_configs = {} + for invocation in actual_invocations: + if invocation.app_details and invocation.app_details.agent_details: + for ( + agent_name, + agent_details, + ) in invocation.app_details.agent_details.items(): + if agent_name not in agent_configs: + agent_configs[agent_name] = ( + _MultiTurnVertexiAiEvalFacade._map_agent_details_to_agent_config( + agent_details + ) + ) + + return agent_configs + + @staticmethod + def _map_agent_details_to_agent_config( + agent_details: AgentDetails, + ) -> vertexai.types.evals.AgentConfig: + return vertexai.types.evals.AgentConfig( + agent_id=agent_details.name, + instruction=agent_details.instructions, + tools=agent_details.tool_declarations, + ) diff --git a/src/google/adk/events/event.py b/src/google/adk/events/event.py index ddc40f0432..fb3e9093f3 100644 --- a/src/google/adk/events/event.py +++ b/src/google/adk/events/event.py @@ -36,7 +36,7 @@ class Event(LlmResponse): """ model_config = ConfigDict( - extra='forbid', + extra='ignore', ser_json_bytes='base64', val_json_bytes='base64', alias_generator=alias_generators.to_camel, diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 9b633c2d34..5c3ba7f6e3 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -37,6 +37,7 @@ class FeatureName(str, Enum): COMPUTER_USE = "COMPUTER_USE" DATA_AGENT_TOOL_CONFIG = "DATA_AGENT_TOOL_CONFIG" DATA_AGENT_TOOLSET = "DATA_AGENT_TOOLSET" + ENVIRONMENT_SIMULATION = "ENVIRONMENT_SIMULATION" GOOGLE_CREDENTIALS_CONFIG = "GOOGLE_CREDENTIALS_CONFIG" GOOGLE_TOOL = "GOOGLE_TOOL" JSON_SCHEMA_FOR_FUNC_DECL = "JSON_SCHEMA_FOR_FUNC_DECL" @@ -45,10 +46,14 @@ class FeatureName(str, Enum): PUBSUB_TOOLSET = "PUBSUB_TOOLSET" SKILL_TOOLSET = "SKILL_TOOLSET" SPANNER_TOOLSET = "SPANNER_TOOLSET" + SPANNER_ADMIN_TOOLSET = "SPANNER_ADMIN_TOOLSET" SPANNER_TOOL_SETTINGS = "SPANNER_TOOL_SETTINGS" SPANNER_VECTOR_STORE = "SPANNER_VECTOR_STORE" TOOL_CONFIG = "TOOL_CONFIG" TOOL_CONFIRMATION = "TOOL_CONFIRMATION" + PLUGGABLE_AUTH = "PLUGGABLE_AUTH" + SNAKE_CASE_SKILL_NAME = "SNAKE_CASE_SKILL_NAME" + IN_MEMORY_SESSION_SERVICE_LIGHT_COPY = "IN_MEMORY_SESSION_SERVICE_LIGHT_COPY" class FeatureStage(Enum): @@ -94,10 +99,10 @@ class FeatureConfig: FeatureStage.EXPERIMENTAL, default_on=True ), FeatureName.BIG_QUERY_TOOLSET: FeatureConfig( - FeatureStage.EXPERIMENTAL, default_on=True + FeatureStage.STABLE, default_on=True ), FeatureName.BIG_QUERY_TOOL_CONFIG: FeatureConfig( - FeatureStage.EXPERIMENTAL, default_on=True + FeatureStage.STABLE, default_on=True ), FeatureName.BIGTABLE_TOOL_SETTINGS: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True @@ -114,6 +119,9 @@ class FeatureConfig: FeatureName.DATA_AGENT_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.ENVIRONMENT_SIMULATION: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), FeatureName.GOOGLE_CREDENTIALS_CONFIG: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), @@ -135,6 +143,9 @@ class FeatureConfig: FeatureName.SKILL_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.SPANNER_ADMIN_TOOLSET: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), FeatureName.SPANNER_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), @@ -150,6 +161,15 @@ class FeatureConfig: FeatureName.TOOL_CONFIRMATION: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.PLUGGABLE_AUTH: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), + FeatureName.SNAKE_CASE_SKILL_NAME: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=False + ), + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY: FeatureConfig( + FeatureStage.WIP, default_on=False + ), } # Track which experimental features have already warned (warn only once) diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index 5203ea4fe8..7a98315a54 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -19,12 +19,12 @@ import inspect import logging from typing import AsyncGenerator -from typing import cast from typing import Optional from typing import TYPE_CHECKING from google.adk.platform import time as platform_time from google.genai import types +from opentelemetry import trace from websockets.exceptions import ConnectionClosed from websockets.exceptions import ConnectionClosedOK @@ -36,7 +36,6 @@ from ...agents.live_request_queue import LiveRequestQueue from ...agents.readonly_context import ReadonlyContext from ...agents.run_config import StreamingMode -from ...agents.transcription_entry import TranscriptionEntry from ...auth.auth_handler import AuthHandler from ...auth.auth_tool import AuthConfig from ...auth.credential_manager import CredentialManager @@ -49,12 +48,10 @@ from ...telemetry.tracing import trace_send_data from ...telemetry.tracing import tracer from ...tools.base_toolset import BaseToolset -from ...tools.google_search_tool import google_search from ...tools.tool_context import ToolContext from ...utils.context_utils import Aclosing from .audio_cache_manager import AudioCacheManager from .functions import build_auth_request_event -from .functions import REQUEST_EUC_FUNCTION_CALL_NAME # Prefix used by toolset auth credential IDs TOOLSET_AUTH_CREDENTIAL_ID_PREFIX = '_adk_toolset_auth_' @@ -73,6 +70,8 @@ DEFAULT_TRANSFER_AGENT_DELAY = 1.0 DEFAULT_TASK_COMPLETION_DELAY = 1.0 +DEFAULT_MAX_RECONNECT_ATTEMPTS = 5 + # Statistics configuration DEFAULT_ENABLE_CACHE_STATISTICS = False @@ -310,6 +309,7 @@ async def _run_and_handle_error( invocation_context: InvocationContext, llm_request: LlmRequest, model_response_event: Event, + call_llm_span: Optional[trace.Span] = None, ) -> AsyncGenerator[LlmResponse, None]: """Wraps an LLM response generator with error callback handling. @@ -323,6 +323,9 @@ async def _run_and_handle_error( invocation_context: The invocation context. llm_request: The LLM request. model_response_event: The model response event. + call_llm_span: The call_llm span to rebind error callbacks to. When + provided, on_model_error callbacks run under this span so plugins observe + the same span as before/after model callbacks. Yields: LlmResponse objects from the generator. @@ -384,11 +387,19 @@ async def _run_on_model_error_callbacks( callback_context = CallbackContext( invocation_context, event_actions=model_response_event.actions ) - error_response = await _run_on_model_error_callbacks( - callback_context=callback_context, - llm_request=llm_request, - error=model_error, - ) + if call_llm_span is not None: + with trace.use_span(call_llm_span, end_on_exit=False): + error_response = await _run_on_model_error_callbacks( + callback_context=callback_context, + llm_request=llm_request, + error=model_error, + ) + else: + error_response = await _run_on_model_error_callbacks( + callback_context=callback_context, + llm_request=llm_request, + error=model_error, + ) if error_response is not None: yield error_response else: @@ -462,6 +473,8 @@ async def run_live( invocation_context: InvocationContext, ) -> AsyncGenerator[Event, None]: """Runs the flow using live api.""" + from google.genai import errors + llm_request = LlmRequest() event_id = Event.new_id() @@ -504,7 +517,12 @@ async def run_live( invocation_context.agent.name, ) async with llm.connect(llm_request) as llm_connection: - if llm_request.contents: + # Skip sending history if we are resuming a session. The server + # already has the state associated with the resumption handle. + if ( + llm_request.contents + and not invocation_context.live_session_resumption_handle + ): # Sends the conversation history to the model. with tracer.start_as_current_span('send_data'): # Combine regular contents with audio/transcription from session @@ -528,6 +546,8 @@ async def run_live( ) ) as agen: async for event in agen: + # Reset attempt counter on successful communication. + attempt = 1 # Empty event means the queue is closed. if not event: break @@ -597,10 +617,32 @@ async def run_live( except asyncio.CancelledError: pass except (ConnectionClosed, ConnectionClosedOK) as e: - # when the session timeout, it will just close and not throw exception. - # so this is for bad cases + # If we have a session resumption handle, we attempt to reconnect. + # This handle is updated dynamically during the session. + if invocation_context.live_session_resumption_handle: + if attempt > DEFAULT_MAX_RECONNECT_ATTEMPTS: + logger.error('Max reconnection attempts reached (%s).', e) + raise + logger.info( + 'Connection closed (%s), reconnecting with session handle.', e + ) + continue logger.error('Connection closed: %s.', e) raise + except errors.APIError as e: + # Error code 1000 and 1006 indicates a recoverable connection drop. + # In that case, we attempt to reconnect with session handle if available. + if e.code in [1000, 1006]: + if invocation_context.live_session_resumption_handle: + if attempt > DEFAULT_MAX_RECONNECT_ATTEMPTS: + logger.error('Max reconnection attempts reached (%s).', e) + raise + logger.info( + 'Connection lost (%s), reconnecting with session handle.', e + ) + continue + logger.error('APIError in live flow: %s', e) + raise except Exception as e: logger.error( 'An unexpected error occurred in live flow: %s', e, exc_info=True @@ -678,75 +720,81 @@ async def _receive_from_model( ) -> AsyncGenerator[Event, None]: """Receive data from model and process events using BaseLlmConnection.""" - def get_author_for_event(llm_response): + def get_author_for_event(llm_response: LlmResponse) -> str: """Get the author of the event. - When the model returns transcription, the author is "user". Otherwise, the - author is the agent name(not 'model'). + When the model returns input transcription, the author is set to "user". + Otherwise, the author is the agent name (not 'model'). Args: llm_response: The LLM response from the LLM call. + + Returns: + The author of the event as a string, either "user" or the agent's name. """ - if ( - llm_response - and llm_response.content - and llm_response.content.role == 'user' + if llm_response and ( + llm_response.input_transcription + or (llm_response.content and llm_response.content.role == 'user') ): return 'user' else: return invocation_context.agent.name - try: - while True: - async with Aclosing(llm_connection.receive()) as agen: - async for llm_response in agen: - if llm_response.live_session_resumption_update: - logger.info( - 'Update session resumption handle:' - f' {llm_response.live_session_resumption_update}.' - ) - invocation_context.live_session_resumption_handle = ( - llm_response.live_session_resumption_update.new_handle - ) - model_response_event = Event( - id=Event.new_id(), - invocation_id=invocation_context.invocation_id, - author=get_author_for_event(llm_response), + while True: + async with Aclosing(llm_connection.receive()) as agen: + async for llm_response in agen: + if llm_response.live_session_resumption_update: + logger.info( + 'Update session resumption handle:' + f' {llm_response.live_session_resumption_update}.' + ) + invocation_context.live_session_resumption_handle = ( + llm_response.live_session_resumption_update.new_handle ) + if llm_response.go_away: + logger.info(f'Received go away signal: {llm_response.go_away}') + # The server signals that it will close the connection soon. + # We proactively raise ConnectionClosed to trigger the reconnection + # logic in run_live, which will use the latest session handle. + raise ConnectionClosed(None, None) + + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author=get_author_for_event(llm_response), + ) - async with Aclosing( - self._postprocess_live( - invocation_context, - llm_request, - llm_response, - model_response_event, - ) - ) as agen: - async for event in agen: - # Cache output audio chunks from model responses - # TODO: support video data - if ( - invocation_context.run_config.save_live_blob - and event.content - and event.content.parts - and event.content.parts[0].inline_data - and event.content.parts[0].inline_data.mime_type.startswith( - 'audio/' - ) - ): - audio_blob = types.Blob( - data=event.content.parts[0].inline_data.data, - mime_type=event.content.parts[0].inline_data.mime_type, - ) - self.audio_cache_manager.cache_audio( - invocation_context, audio_blob, cache_type='output' + async with Aclosing( + self._postprocess_live( + invocation_context, + llm_request, + llm_response, + model_response_event, + ) + ) as agen: + async for event in agen: + # Cache output audio chunks from model responses + # TODO: support video data + if ( + invocation_context.run_config.save_live_blob + and event.content + and event.content.parts + and event.content.parts[0].inline_data + and event.content.parts[0].inline_data.mime_type.startswith( + 'audio/' ) + ): + audio_blob = types.Blob( + data=event.content.parts[0].inline_data.data, + mime_type=event.content.parts[0].inline_data.mime_type, + ) + self.audio_cache_manager.cache_audio( + invocation_context, audio_blob, cache_type='output' + ) - yield event - # Give opportunity for other tasks to run. - await asyncio.sleep(0) - except ConnectionClosedOK: - pass + yield event + # Give opportunity for other tasks to run. + await asyncio.sleep(0) async def run_async( self, invocation_context: InvocationContext @@ -975,9 +1023,18 @@ async def _postprocess_live( and not llm_response.input_transcription and not llm_response.output_transcription and not llm_response.usage_metadata + and not llm_response.live_session_resumption_update ): return + # Handle session resumption updates for cross-connection resumption + if llm_response.live_session_resumption_update: + model_response_event.live_session_resumption_update = ( + llm_response.live_session_resumption_update + ) + yield model_response_event + return + # Handle transcription events ONCE per llm_response, outside the event loop if llm_response.input_transcription: model_response_event.input_transcription = ( @@ -1106,28 +1163,30 @@ async def _call_llm_async( llm_request: LlmRequest, model_response_event: Event, ) -> AsyncGenerator[LlmResponse, None]: - # Runs before_model_callback if it exists. - if response := await self._handle_before_model_callback( - invocation_context, llm_request, model_response_event - ): - yield response - return - - llm_request.config = llm_request.config or types.GenerateContentConfig() - llm_request.config.labels = llm_request.config.labels or {} - - # Add agent name as a label to the llm_request. This will help with slicing - # the billing reports on a per-agent basis. - if _ADK_AGENT_NAME_LABEL_KEY not in llm_request.config.labels: - llm_request.config.labels[_ADK_AGENT_NAME_LABEL_KEY] = ( - invocation_context.agent.name - ) - - # Calls the LLM. - llm = self.__get_llm(invocation_context) async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: with tracer.start_as_current_span('call_llm') as span: + # Runs before_model_callback inside the call_llm span so + # plugins observe the same span as after/error callbacks. + if response := await self._handle_before_model_callback( + invocation_context, llm_request, model_response_event + ): + yield response + return + + llm_request.config = llm_request.config or types.GenerateContentConfig() + llm_request.config.labels = llm_request.config.labels or {} + + # Add agent name as a label to the llm_request. This will help + # with slicing billing reports on a per-agent basis. + if _ADK_AGENT_NAME_LABEL_KEY not in llm_request.config.labels: + llm_request.config.labels[_ADK_AGENT_NAME_LABEL_KEY] = ( + invocation_context.agent.name + ) + + # Calls the LLM. + llm = self.__get_llm(invocation_context) + if invocation_context.run_config.support_cfc: invocation_context.live_request_queue = LiveRequestQueue() responses_generator = self.run_live(invocation_context) @@ -1137,14 +1196,20 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: invocation_context, llm_request, model_response_event, + call_llm_span=span, ) ) as agen: async for llm_response in agen: - # Runs after_model_callback if it exists. - if altered_llm_response := await self._handle_after_model_callback( - invocation_context, llm_response, model_response_event - ): - llm_response = altered_llm_response + # Rebind to call_llm span for after_model_callback. + with trace.use_span(span, end_on_exit=False): + if altered := ( + await self._handle_after_model_callback( + invocation_context, + llm_response, + model_response_event, + ) + ): + llm_response = altered # only yield partial response in SSE streaming mode if ( invocation_context.run_config.streaming_mode @@ -1155,9 +1220,9 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: if llm_response.turn_complete: invocation_context.live_request_queue.close() else: - # Check if we can make this llm call or not. If the current call - # pushes the counter beyond the max set value, then the execution is - # stopped right here, and exception is thrown. + # Check if we can make this llm call or not. If the current + # call pushes the counter beyond the max set value, then the + # execution is stopped right here, and exception is thrown. invocation_context.increment_llm_call_count() responses_generator = llm.generate_content_async( llm_request, @@ -1170,6 +1235,7 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: invocation_context, llm_request, model_response_event, + call_llm_span=span, ) ) as agen: async for llm_response in agen: @@ -1180,11 +1246,16 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: llm_response, span, ) - # Runs after_model_callback if it exists. - if altered_llm_response := await self._handle_after_model_callback( - invocation_context, llm_response, model_response_event - ): - llm_response = altered_llm_response + # Rebind to call_llm span for after_model_callback. + with trace.use_span(span, end_on_exit=False): + if altered := ( + await self._handle_after_model_callback( + invocation_context, + llm_response, + model_response_event, + ) + ): + llm_response = altered yield llm_response @@ -1239,6 +1310,7 @@ async def _run_and_handle_error( invocation_context: InvocationContext, llm_request: LlmRequest, model_response_event: Event, + call_llm_span: Optional[trace.Span] = None, ) -> AsyncGenerator[LlmResponse, None]: async with Aclosing( _run_and_handle_error( @@ -1246,6 +1318,7 @@ async def _run_and_handle_error( invocation_context, llm_request, model_response_event, + call_llm_span=call_llm_span, ) ) as agen: async for response in agen: @@ -1289,6 +1362,33 @@ async def _handle_control_event_flush( def __get_llm(self, invocation_context: InvocationContext) -> BaseLlm: agent = invocation_context.agent + + # Check for conformance test replay mode + if config := invocation_context.session.state.get('_adk_replay_config'): + from ...cli.conformance._conformance_test_google_llm import _ConformanceTestGemini + + # Models are stateless, so the current replay state is cached in the + # session state to maintain the state across model calls + # key: (agent_name, user_message_index) + # value: replay index + user_message_index = config.get('user_message_index') + replay_indexes = config.get('_adk_replay_indexes', {}) + if (agent.name, user_message_index) not in replay_indexes: + replay_indexes[(agent.name, user_message_index)] = 0 + current_replay_index = replay_indexes[(agent.name, user_message_index)] + + config['current_replay_index'] = current_replay_index + config['agent_name'] = agent.name + model = _ConformanceTestGemini( + config=config, + ) + + replay_indexes[(agent.name, user_message_index)] = ( + current_replay_index + 1 + ) + config['_adk_replay_indexes'] = replay_indexes + return model + if not hasattr(agent, 'canonical_model'): raise TypeError( 'Expected agent to have canonical_model attribute,' diff --git a/src/google/adk/flows/llm_flows/basic.py b/src/google/adk/flows/llm_flows/basic.py index 4a296734a5..8e9bfa514c 100644 --- a/src/google/adk/flows/llm_flows/basic.py +++ b/src/google/adk/flows/llm_flows/basic.py @@ -59,7 +59,12 @@ def _build_basic_request( llm_request.set_output_schema(agent.output_schema) llm_request.live_connect_config.response_modalities = ( - invocation_context.run_config.response_modalities + [ + types.Modality(m) + for m in invocation_context.run_config.response_modalities + ] + if invocation_context.run_config.response_modalities is not None + else None ) llm_request.live_connect_config.speech_config = ( invocation_context.run_config.speech_config @@ -85,6 +90,9 @@ def _build_basic_request( llm_request.live_connect_config.context_window_compression = ( invocation_context.run_config.context_window_compression ) + llm_request.live_connect_config.avatar_config = ( + invocation_context.run_config.avatar_config + ) class _BasicLlmRequestProcessor(BaseLlmRequestProcessor): diff --git a/src/google/adk/flows/llm_flows/contents.py b/src/google/adk/flows/llm_flows/contents.py index 9b7ef9e121..f4223c41a5 100644 --- a/src/google/adk/flows/llm_flows/contents.py +++ b/src/google/adk/flows/llm_flows/contents.py @@ -572,6 +572,28 @@ def _get_current_turn_contents( def _is_other_agent_reply(current_agent_name: str, event: Event) -> bool: """Whether the event is a reply from another agent.""" + # In live/bidi mode, all events from any agents, including the current + # agent, will be marked as other agent's reply. When agent transfers, + # the conversation history will be sent to the Live API. If the current + # agent previously used `transfer_to_agent` to transfer to another agent, + # when the conversation is sent back to the current agent, the history will + # contain a `transfer_to_agent` function call event from the current agent. + # The Live API marks anything after the function response as model response. + # This will confuse the model and cause the model to not respond. + # + # E.g. when the conversation is transferred from agent A to agent B, then + # back to agent A, the history in the last transfer will be: + # User: "Some message that triggers transfer to agent B" + # Model: transfer_to_agent(B) + # User: transfer_to_agent(B) response + # User: "Some message that triggers transfer to agent A" + # User: "For context: [agent B] called transfer_to_agent(A)" + # User: "For context: [agent B] tool transfer_to_agent(A) returned result:" + # + # In this case, the last three events are marked as model response by the + # Live API, instead of user input. + if event.live_session_id: + return event.author != 'user' return bool( current_agent_name and event.author != current_agent_name diff --git a/src/google/adk/flows/llm_flows/functions.py b/src/google/adk/flows/llm_flows/functions.py index d2e1d61032..eda8474c01 100644 --- a/src/google/adk/flows/llm_flows/functions.py +++ b/src/google/adk/flows/llm_flows/functions.py @@ -20,6 +20,7 @@ import base64 import binascii from concurrent.futures import ThreadPoolExecutor +import contextvars import copy import functools import inspect @@ -140,6 +141,7 @@ async def _call_tool_in_thread_pool( """ from ...tools.function_tool import FunctionTool + ctx = contextvars.copy_context() loop = asyncio.get_running_loop() executor = _get_tool_thread_pool(max_workers) @@ -160,7 +162,9 @@ def run_sync_tool(): # For other sync tool types, we can't easily run them in thread pool return None - result = await loop.run_in_executor(executor, run_sync_tool) + result = await loop.run_in_executor( + executor, lambda: ctx.run(run_sync_tool) + ) if result is not None: return result else: @@ -171,7 +175,9 @@ def run_async_tool_in_new_loop(): # Create a new event loop for this thread return asyncio.run(tool.run_async(args=args, tool_context=tool_context)) - return await loop.run_in_executor(executor, run_async_tool_in_new_loop) + return await loop.run_in_executor( + executor, lambda: ctx.run(run_async_tool_in_new_loop) + ) # Fall back to normal async execution for non-FunctionTool sync tools return await tool.run_async(args=args, tool_context=tool_context) @@ -1179,14 +1185,25 @@ def merge_parallel_function_response_events( # Merge actions from all events merged_actions_data: dict[str, Any] = {} + aggregated_ui_widgets = [] for event in function_response_events: if event.actions: + actions_dict = event.actions.model_dump(exclude_none=True, by_alias=True) + ui_widgets = actions_dict.pop( + 'renderUiWidgets', None + ) or actions_dict.pop('render_ui_widgets', None) + if ui_widgets: + aggregated_ui_widgets.extend(ui_widgets) + # Use `by_alias=True` because it converts the model to a dictionary while respecting field aliases, ensuring that the enum fields are correctly handled without creating a duplicate. merged_actions_data = deep_merge_dicts( merged_actions_data, - event.actions.model_dump(exclude_none=True, by_alias=True), + actions_dict, ) + if aggregated_ui_widgets: + merged_actions_data['renderUiWidgets'] = aggregated_ui_widgets + merged_actions = EventActions.model_validate(merged_actions_data) # Create the new merged event @@ -1195,7 +1212,7 @@ def merge_parallel_function_response_events( author=base_event.author, branch=base_event.branch, content=types.Content(role='user', parts=merged_parts), - actions=merged_actions, # Optionally merge actions if required + actions=merged_actions, # Aggregated from all parallel events ) # Use the base_event as the timestamp diff --git a/src/google/adk/integrations/agent_identity/README.md b/src/google/adk/integrations/agent_identity/README.md new file mode 100644 index 0000000000..26c8fe7fe9 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/README.md @@ -0,0 +1,35 @@ +# GCP IAM Connector Auth + +Manages the complete lifecycle of an access token using the Google Cloud +Platform Agent Identity Credentials service. + +## Usage + +1. **Install Dependencies:** + ```bash + pip install "google-adk[agent-identity]" + ``` + +2. **Register the provider:** + Register the `GcpAuthProvider` with the `CredentialManager`. This is to be + done one time. + + ``` py + # user_agent_app.py + from google.adk.auth.credential_manager import CredentialManager + from google.adk.integrations.agent_identity import GcpAuthProvider + + CredentialManager.register_auth_provider(GcpAuthProvider()) + ``` + +3. **Configure the Auth provider:** + Specify the Agent Identity provider configuration using the + `GcpAuthProviderScheme`. + ``` py + # user_agent_app.py + from google.adk.integrations.agent_identity import GcpAuthProviderScheme + + # Configures Toolset + auth_scheme = GcpAuthProviderScheme(name="my-jira-auth_provider") + mcp_toolset_jira = McpToolset(..., auth_scheme=auth_scheme) + ``` diff --git a/src/google/adk/integrations/agent_identity/__init__.py b/src/google/adk/integrations/agent_identity/__init__.py new file mode 100644 index 0000000000..1025735236 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/__init__.py @@ -0,0 +1,21 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .gcp_auth_provider import GcpAuthProvider +from .gcp_auth_provider_scheme import GcpAuthProviderScheme + +__all__ = [ + "GcpAuthProvider", + "GcpAuthProviderScheme", +] diff --git a/src/google/adk/integrations/agent_identity/gcp_auth_provider.py b/src/google/adk/integrations/agent_identity/gcp_auth_provider.py new file mode 100644 index 0000000000..1a1aaec8f8 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/gcp_auth_provider.py @@ -0,0 +1,284 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import logging +import os +import time + +from google.adk.agents.callback_context import CallbackContext +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_credential import HttpAuth +from google.adk.auth.auth_credential import HttpCredentials +from google.adk.auth.auth_credential import OAuth2Auth +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.base_auth_provider import BaseAuthProvider +from google.adk.flows.llm_flows.functions import REQUEST_EUC_FUNCTION_CALL_NAME +from google.api_core.client_options import ClientOptions +from google.cloud.iamconnectorcredentials_v1alpha import IAMConnectorCredentialsServiceClient as Client +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.longrunning.operations_pb2 import Operation +from typing_extensions import override + +from .gcp_auth_provider_scheme import GcpAuthProviderScheme + +# Notes on the current Agent Identity Credentials service implementation: +# 1. The service does not yet support LROs, so even though the +# retrieve_credentials method returns an Operation object, the methods like +# operation.done() and operation.result() will not work yet. +# 2. For API key flows, the returned Operation contains the credentials. +# 3. For 2-legged OAuth flows, the returned Operation contains pending status, +# client needs to retry the request until response with credentials is +# returned or timeout occurs. +# 4. For 3-legged OAuth flows, the returned Operation contains consent pending +# status along with the authorization URI. + +# TODO: Catch specific exceptions instead of generic ones. + +logger = logging.getLogger("google_adk." + __name__) + +NON_INTERACTIVE_TOKEN_POLL_INTERVAL_SEC: float = 1.0 +NON_INTERACTIVE_TOKEN_POLL_TIMEOUT_SEC: float = 10.0 + + +def _construct_auth_credential( + response: RetrieveCredentialsResponse, +) -> AuthCredential: + """Constructs a simplified HTTP auth credential from the header-token tuple returned by the upstream service.""" + if not response.header or not response.token: + raise ValueError( + "Received either empty header or token from Agent Identity Credentials" + " service." + ) + + header_name, _, header_value = response.header.partition(":") + if ( + header_name.strip().lower() == "authorization" + and header_value.strip().lower().startswith("bearer") + ): + return AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + scheme="bearer", + credentials=HttpCredentials(token=response.token), + ), + ) + + # Handle custom header. + return AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + # For custom headers, scheme and credentials fields are not used. + scheme="", + credentials=HttpCredentials(), + additional_headers={ + response.header: response.token, + "X-GOOG-API-KEY": response.token, + }, + ), + ) + + +class GcpAuthProvider(BaseAuthProvider): + """An auth provider that uses the Agent Identity Credentials service to generate access tokens.""" + + _client: Client | None = None + + def __init__(self, client: Client | None = None): + self._client = client + + @property + @override + def supported_auth_schemes(self) -> tuple[type[GcpAuthProviderScheme], ...]: + return (GcpAuthProviderScheme,) + + def _get_client(self) -> Client: + """Lazy loads the client to avoid unnecessary setup on startup.""" + if self._client is None: + client_options = None + if host := os.environ.get("IAM_CONNECTOR_CREDENTIALS_TARGET_HOST"): + client_options = ClientOptions(api_endpoint=host) + self._client = Client(client_options=client_options, transport="rest") + return self._client + + async def _retrieve_credentials( + self, + user_id: str, + auth_scheme: GcpAuthProviderScheme, + ) -> Operation: + request = RetrieveCredentialsRequest( + connector=auth_scheme.name, + user_id=user_id, + scopes=auth_scheme.scopes, + continue_uri=auth_scheme.continue_uri or "", + force_refresh=False, + ) + # TODO: Use async client once available. Temporarily using threading to + # prevent blocking the event loop. + operation = await asyncio.to_thread( + self._get_client().retrieve_credentials, request + ) + return operation.operation + + def _unpack_operation( + self, operation: Operation + ) -> tuple[ + RetrieveCredentialsResponse | None, RetrieveCredentialsMetadata | None + ]: + """Deserializes the response and metadata from the operation.""" + response = None + metadata = None + if operation.response: + response = RetrieveCredentialsResponse.deserialize( + operation.response.value + ) + if operation.metadata: + metadata = RetrieveCredentialsMetadata.deserialize( + operation.metadata.value + ) + return response, metadata + + async def _poll_credentials( + self, user_id: str, auth_scheme: GcpAuthProviderScheme, timeout: float + ) -> Operation: + end_time = time.time() + timeout + while time.time() < end_time: + operation = await self._retrieve_credentials(user_id, auth_scheme) + if operation.done: + return operation + await asyncio.sleep(NON_INTERACTIVE_TOKEN_POLL_INTERVAL_SEC) + raise TimeoutError("Timeout waiting for credentials.") + + @staticmethod + def _is_consent_completed(context: CallbackContext) -> bool: + """Checks if the user consent flow is completed for the current function call.""" + if not context.function_call_id: + return False + + if not context.session: + return False + + events = context.session.events + target_tool_call_id = context.function_call_id + + # Find all relevant function calls and responses + euc_calls = {} + euc_responses = {} + + for event in events: + for call in event.get_function_calls(): + if call.name == REQUEST_EUC_FUNCTION_CALL_NAME: + euc_calls[call.id] = call + for response in event.get_function_responses(): + if response.name == REQUEST_EUC_FUNCTION_CALL_NAME: + euc_responses[response.id] = response + + # Check for a response that matches a call for the current tool invocation + for call_id, _ in euc_responses.items(): + if call_id in euc_calls: + call = euc_calls[call_id] + if ( + call.args + and call.args.get("function_call_id") == target_tool_call_id + ): + return True + return False + + @override + async def get_auth_credential( + self, + auth_config: AuthConfig, + context: CallbackContext | None = None, + ) -> AuthCredential: + """Retrieves credentials using the Agent Identity Credentials service. + + Args: + auth_config: The authentication configuration. + context: Optional context for the callback. + + Returns: + An AuthCredential instance. + + Raises: + ValueError: If auth_scheme is not a GcpAuthProviderScheme. + RuntimeError: If credential retrieval or polling fails. + """ + + auth_scheme = auth_config.auth_scheme + if not isinstance(auth_scheme, GcpAuthProviderScheme): + raise ValueError( + f"Expected GcpAuthProviderScheme, got {type(auth_scheme)}" + ) + + if context is None or context.user_id is None: + raise ValueError( + "GcpAuthProvider requires a context with a valid user_id." + ) + + user_id = context.user_id + + try: + operation = await self._retrieve_credentials(user_id, auth_scheme) + except Exception as e: + raise RuntimeError( + f"Failed to retrieve credential for user '{user_id}' on connector" + f" '{auth_scheme.name}'." + ) from e + + response, metadata = self._unpack_operation(operation) + + if operation.HasField("error"): + raise RuntimeError(f"Operation failed: {operation.error.message}") + + if operation.done: + logger.debug("Auth credential obtained immediately.") + return _construct_auth_credential(response) + + if metadata and metadata.consent_pending: + # Get 2-legged OAuth token. Allow enough time for token exchange. + try: + operation = await self._poll_credentials( + user_id, + auth_scheme, + timeout=NON_INTERACTIVE_TOKEN_POLL_TIMEOUT_SEC, + ) + if operation.HasField("error"): + raise RuntimeError(f"Operation failed: {operation.error.message}") + if operation.done: + logger.debug("Auth credential obtained after polling.") + response, _ = self._unpack_operation(operation) + return _construct_auth_credential(response) + except Exception as e: + raise RuntimeError( + f"Failed to retrieve credential for user '{user_id}' on connector" + f" '{auth_scheme.name}'." + ) from e + + if metadata is not None and metadata.uri_consent_required: + if self._is_consent_completed(context): + raise RuntimeError("Failed to retrieve consent based credential.") + + # Return AuthCredential with only auth_uri to trigger user consent flow. + return AuthCredential( + auth_type=AuthCredentialTypes.OAUTH2, + oauth2=OAuth2Auth( + auth_uri=metadata.uri_consent_required.authorization_uri, + nonce=metadata.uri_consent_required.consent_nonce, + ), + ) diff --git a/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py b/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py new file mode 100644 index 0000000000..e5ac769cca --- /dev/null +++ b/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py @@ -0,0 +1,48 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import List +from typing import Literal +from typing import Optional + +from google.adk.auth.auth_schemes import CustomAuthScheme +from pydantic import Field + + +class GcpAuthProviderScheme(CustomAuthScheme): + """The Agent Identity authentication scheme for Google Cloud Platform. + + Attributes: + name: The name of the GCP Auth Provider resource to use. + scopes: Optional. A list of OAuth2 scopes to request. + continue_uri: Optional. A type of redirect URI. It is distinct from the + standard OAuth2 redirect URI. Its purpose is to reauthenticate the user to + prevent phishing attacks and to finalize the managed OAuth flow. The + standard, Google-hosted OAuth2 redirect URI will redirect the user to this + continue URI. The agent will include this URI in every 3-legged OAuth + request sent to the upstream Agent Identity Credential service. Developers + must ensure this URI is hosted (e.g. on GCP, a third-party cloud, + on-prem), preferably alongside the agent client's web server. + TODO: Add public documentation link for more information once available. + type_: The type of the security scheme, always "gcpAuthProviderScheme". + """ + + type_: Literal["gcpAuthProviderScheme"] = Field( + default="gcpAuthProviderScheme", alias="type" + ) + name: str + scopes: Optional[List[str]] = None + continue_uri: Optional[str] = None diff --git a/src/google/adk/integrations/agent_registry/__init__.py b/src/google/adk/integrations/agent_registry/__init__.py index 995ad046f2..18a30b3211 100644 --- a/src/google/adk/integrations/agent_registry/__init__.py +++ b/src/google/adk/integrations/agent_registry/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2026 Google LLC +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 93a91df432..1726b1179e 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -16,37 +16,100 @@ from __future__ import annotations +from collections.abc import Generator from enum import Enum import logging -import os import re from typing import Any from typing import Callable from typing import Dict from typing import List -from typing import Optional -from typing import Sequence -from typing import Union -from urllib.parse import parse_qs +from typing import Mapping +from typing import TypedDict from urllib.parse import urlparse -from a2a.client.client_factory import minimal_agent_card from a2a.types import AgentCapabilities from a2a.types import AgentCard from a2a.types import AgentSkill from a2a.types import TransportProtocol as A2ATransport from google.adk.agents.readonly_context import ReadonlyContext from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_schemes import AuthScheme +from google.adk.integrations.agent_identity.gcp_auth_provider_scheme import GcpAuthProviderScheme +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams +from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import McpToolset import google.auth import google.auth.transport.requests import httpx +from mcp import StdioServerParameters +from typing_extensions import override logger = logging.getLogger("google_adk." + __name__) AGENT_REGISTRY_BASE_URL = "https://agentregistry.googleapis.com/v1alpha" +_TRANSPORT_MAPPING = { + "HTTP_JSON": A2ATransport.http_json, + "JSONRPC": A2ATransport.jsonrpc, + "GRPC": A2ATransport.grpc, +} + + +# An MCPToolset for a single registered MCP server. Adds the special +# gcp.mcp.server.destination.id custom_metadata key on each returned tool. This special key is +# added to execute_tool spans in google.adk.telemetry.tracing +class AgentRegistrySingleMcpToolset(McpToolset): + + def __init__( + self, + *, + destination_resource_id: str | None, + connection_params: ( + StdioServerParameters + | StdioConnectionParams + | SseConnectionParams + | StreamableHTTPConnectionParams + ), + tool_name_prefix: str | None = None, + header_provider: ( + Callable[[ReadonlyContext], Dict[str, str]] | None + ) = None, + auth_scheme: AuthScheme | None = None, + auth_credential: AuthCredential | None = None, + ): + super().__init__( + connection_params=connection_params, + tool_name_prefix=tool_name_prefix, + header_provider=header_provider, + auth_scheme=auth_scheme, + auth_credential=auth_credential, + ) + self.destination_resource_id = destination_resource_id + + @override + async def get_tools( + self, readonly_context: ReadonlyContext | None = None + ) -> List[BaseTool]: + tools = await super().get_tools(readonly_context) + + # Noop if there is no destination_resource_id + if self.destination_resource_id is None: + return tools + + for tool in tools: + if not tool.custom_metadata: + tool.custom_metadata = {} + + tool.custom_metadata[GCP_MCP_SERVER_DESTINATION_ID] = ( + self.destination_resource_id + ) + return tools + class _ProtocolType(str, Enum): """Supported agent protocol types.""" @@ -56,6 +119,37 @@ class _ProtocolType(str, Enum): CUSTOM = "CUSTOM" +class Interface(TypedDict, total=False): + """Details for a single connection interface.""" + + url: str + protocolBinding: str + + +class Endpoint(TypedDict, total=False): + """Full metadata for a registered Endpoint.""" + + name: str + endpointId: str + displayName: str + description: str + interfaces: List[Interface] + createTime: str + updateTime: str + attributes: Dict[str, Any] + + +def _is_google_api(url: str) -> bool: + """Checks if the given URL points to a Google API endpoint.""" + parsed_url = urlparse(url) + if not parsed_url.hostname: + return False + return ( + parsed_url.hostname == "googleapis.com" + or parsed_url.hostname.endswith(".googleapis.com") + ) + + class AgentRegistry: """Client for interacting with the Google Cloud Agent Registry service. @@ -68,11 +162,11 @@ class AgentRegistry: def __init__( self, - project_id: Optional[str] = None, - location: Optional[str] = None, - header_provider: Optional[ - Callable[[ReadonlyContext], Dict[str, str]] - ] = None, + project_id: str | None = None, + location: str | None = None, + header_provider: ( + Callable[[ReadonlyContext], Dict[str, str]] | None + ) = None, ): """Initializes the AgentRegistry client. @@ -115,7 +209,7 @@ def _get_auth_headers(self) -> Dict[str, str]: ) from e def _make_request( - self, path: str, params: Optional[Dict[str, Any]] = None + self, path: str, params: Dict[str, Any] | None = None ) -> Dict[str, Any]: """Helper function to make GET requests to the Agent Registry API.""" if path.startswith("projects/"): @@ -141,10 +235,10 @@ def _make_request( def _get_connection_uri( self, - resource_details: Dict[str, Any], - protocol_type: Optional[_ProtocolType] = None, - protocol_binding: Optional[A2ATransport] = None, - ) -> Optional[str]: + resource_details: Mapping[str, Any], + protocol_type: _ProtocolType | None = None, + protocol_binding: A2ATransport | None = None, + ) -> str | None: """Extracts the first matching URI based on type and binding filters.""" protocols = list(resource_details.get("protocols", [])) if "interfaces" in resource_details: @@ -153,13 +247,15 @@ def _get_connection_uri( for p in protocols: if protocol_type and p.get("type") != protocol_type: continue + protocol_version = p.get("protocolVersion") for i in p.get("interfaces", []): - if protocol_binding and i.get("protocolBinding") != protocol_binding: + mapped_binding = _TRANSPORT_MAPPING.get(i.get("protocolBinding")) + if protocol_binding and mapped_binding != protocol_binding: continue if url := i.get("url"): - return url + return url, protocol_version, mapped_binding - return None + return None, None, None def _clean_name(self, name: str) -> str: """Cleans a string to be a valid Python identifier for agent names.""" @@ -174,9 +270,9 @@ def _clean_name(self, name: str) -> str: def list_mcp_servers( self, - filter_str: Optional[str] = None, - page_size: Optional[int] = None, - page_token: Optional[str] = None, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, ) -> Dict[str, Any]: """Fetches a list of MCP Servers.""" params = {} @@ -192,37 +288,146 @@ def get_mcp_server(self, name: str) -> Dict[str, Any]: """Retrieves details of a specific MCP Server.""" return self._make_request(name) - def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: - """Constructs an McpToolset instance from a registered MCP Server.""" + def get_mcp_toolset( + self, + mcp_server_name: str, + auth_scheme: AuthScheme | None = None, + auth_credential: AuthCredential | None = None, + *, + continue_uri: str | None = None, + ) -> McpToolset: + """Constructs an McpToolset from a registered MCP Server. + + If `auth_scheme` is omitted, it is automatically resolved from the server's + IAM bindings via `GcpAuthProviderScheme`. + + Args: + mcp_server_name: Resource name of the MCP Server. + auth_scheme: Optional auth scheme. Resolved via bindings if omitted. + auth_credential: Optional auth credential. + continue_uri: Optional continue URI to override what is in the auth + provider. + + Returns: + An McpToolset for the MCP server. + """ server_details = self.get_mcp_server(mcp_server_name) name = self._clean_name(server_details.get("displayName", mcp_server_name)) + mcp_server_id = server_details.get("mcpServerId") + if not isinstance(mcp_server_id, str): + mcp_server_id = None - endpoint_uri = self._get_connection_uri( + endpoint_uri, _, _ = self._get_connection_uri( server_details, protocol_binding=A2ATransport.jsonrpc - ) or self._get_connection_uri( - server_details, protocol_binding=A2ATransport.http_json ) + if not endpoint_uri: + endpoint_uri, _, _ = self._get_connection_uri( + server_details, protocol_binding=A2ATransport.http_json + ) if not endpoint_uri: raise ValueError( f"MCP Server endpoint URI not found for: {mcp_server_name}" ) + if mcp_server_id and not auth_scheme: + try: + bindings_data = self._make_request("bindings") + for b in bindings_data.get("bindings", []): + target_id = b.get("target", {}).get("identifier", "") + if target_id.endswith(mcp_server_id): + auth_provider = b.get("authProviderBinding", {}).get("authProvider") + if auth_provider: + auth_scheme = GcpAuthProviderScheme( + name=auth_provider, continue_uri=continue_uri + ) + break + except Exception as e: + logger.warning( + f"Failed to fetch bindings for MCP Server {mcp_server_name}: {e}" + ) + connection_params = StreamableHTTPConnectionParams( - url=endpoint_uri, headers=self._get_auth_headers() + url=endpoint_uri, ) - return McpToolset( + + def combined_header_provider(context: ReadonlyContext) -> Dict[str, str]: + headers = {} + if ( + not auth_scheme + and not auth_credential + and _is_google_api(endpoint_uri) + ): + headers.update(self._get_auth_headers()) + if self._header_provider: + headers.update(self._header_provider(context)) + return headers + + return AgentRegistrySingleMcpToolset( + destination_resource_id=mcp_server_id, connection_params=connection_params, tool_name_prefix=name, - header_provider=self._header_provider, + header_provider=combined_header_provider, + auth_scheme=auth_scheme, + auth_credential=auth_credential, ) + # --- Endpoint Methods --- + + def list_endpoints( + self, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, + ) -> Dict[str, Any]: + """Fetches a list of Endpoints.""" + params = {} + if filter_str: + params["filter"] = filter_str + if page_size: + params["pageSize"] = str(page_size) + if page_token: + params["pageToken"] = page_token + return self._make_request("endpoints", params=params) + + def get_endpoint(self, name: str) -> Endpoint: + """Retrieves details of a specific Endpoint.""" + return self._make_request(name) # type: ignore + + def get_model_name(self, endpoint_name: str) -> str: + """Retrieves and parses an endpoint into a model resource name. + + Args: + endpoint_name: The full resource name of the endpoint. + + Returns: + The resolved model resource name string (e.g. + projects/.../locations/.../publishers/google/models/...). + """ + endpoint_details = self.get_endpoint(endpoint_name) + uri, _, _ = self._get_connection_uri(endpoint_details) + if not uri: + raise ValueError( + f"Connection URI not found for endpoint: {endpoint_name}" + ) + + uri = re.sub(r":\w+$", "", uri) + + if uri.startswith("projects/"): + return uri + + match = re.search(r"(projects/.+)", uri) + if match: + return match.group(1) + + return uri + # --- Agent Methods --- def list_agents( self, - filter_str: Optional[str] = None, - page_size: Optional[int] = None, - page_token: Optional[str] = None, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, ) -> Dict[str, Any]: """Fetches a list of registered A2A Agents.""" params = {} @@ -238,14 +443,35 @@ def get_agent_info(self, name: str) -> Dict[str, Any]: """Retrieves detailed metadata of a specific A2A Agent.""" return self._make_request(name) - def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: + def get_remote_a2a_agent( + self, + agent_name: str, + *, + httpx_client: httpx.AsyncClient | None = None, + ) -> RemoteA2aAgent: """Creates a RemoteA2aAgent instance for a registered A2A Agent.""" agent_info = self.get_agent_info(agent_name) + + # Try to use the full agent card if available + card = agent_info.get("card", {}) + card_content = card.get("content") + if card.get("type") == "A2A_AGENT_CARD" and card_content: + agent_card = AgentCard(**card_content) + # Clean the name to be a valid identifier + name = self._clean_name(agent_card.name) + + return RemoteA2aAgent( + name=name, + agent_card=agent_card, + description=agent_card.description, + httpx_client=httpx_client, + ) + name = self._clean_name(agent_info.get("displayName", agent_name)) description = agent_info.get("description", "") version = agent_info.get("version", "") - url = self._get_connection_uri( + url, protocol_version, protocol_binding = self._get_connection_uri( agent_info, protocol_type=_ProtocolType.A2A_AGENT ) if not url: @@ -267,6 +493,8 @@ def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: name=name, description=description, version=version, + preferredTransport=protocol_binding or A2ATransport.http_json, + protocolVersion=protocol_version or "0.3.0", url=url, skills=skills, capabilities=AgentCapabilities(streaming=False, polling=False), @@ -278,4 +506,5 @@ def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: name=name, agent_card=agent_card, description=description, + httpx_client=httpx_client, ) diff --git a/src/google/adk/integrations/api_registry/__init__.py b/src/google/adk/integrations/api_registry/__init__.py index 1179bc8616..e1aded4b12 100644 --- a/src/google/adk/integrations/api_registry/__init__.py +++ b/src/google/adk/integrations/api_registry/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2026 Google LLC +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at diff --git a/src/google/adk/integrations/crewai/__init__.py b/src/google/adk/integrations/crewai/__init__.py new file mode 100644 index 0000000000..a463c453df --- /dev/null +++ b/src/google/adk/integrations/crewai/__init__.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .crewai_tool import CrewaiTool +from .crewai_tool import CrewaiToolConfig + +__all__ = [ + 'CrewaiTool', + 'CrewaiToolConfig', +] diff --git a/src/google/adk/integrations/crewai/crewai_tool.py b/src/google/adk/integrations/crewai/crewai_tool.py new file mode 100644 index 0000000000..3f47d7e5c9 --- /dev/null +++ b/src/google/adk/integrations/crewai/crewai_tool.py @@ -0,0 +1,158 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import inspect +from typing import Any +from typing import Callable + +from google.genai import types +from typing_extensions import override + +from ...tools import _automatic_function_calling_util +from ...tools.function_tool import FunctionTool +from ...tools.tool_configs import BaseToolConfig +from ...tools.tool_configs import ToolArgsConfig +from ...tools.tool_context import ToolContext + +try: + from crewai.tools import BaseTool as CrewaiBaseTool +except ImportError as e: + raise ImportError( + "Crewai Tools require pip install 'google-adk[extensions]'." + ) from e + + +class CrewaiTool(FunctionTool): + """Use this class to wrap a CrewAI tool. + + If the original tool name and description are not suitable, you can override + them in the constructor. + """ + + tool: CrewaiBaseTool + """The wrapped CrewAI tool.""" + + def __init__(self, tool: CrewaiBaseTool, *, name: str, description: str = ''): + super().__init__(tool.run) + self.tool = tool + if name: + self.name = name + elif tool.name: + # Right now, CrewAI tool name contains white spaces. White spaces are + # not supported in our framework. So we replace them with "_". + self.name = tool.name.replace(' ', '_').lower() + if description: + self.description = description + elif tool.description: + self.description = tool.description + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + """Override run_async to handle CrewAI-specific parameter filtering. + + CrewAI tools use **kwargs pattern, so we need special parameter filtering + logic that allows all parameters to pass through while removing only + reserved parameters like 'self' and 'tool_context'. + + Note: 'tool_context' is removed from the initial args dictionary to prevent + duplicates, but is re-added if the function signature explicitly requires it + as a parameter. + """ + # Preprocess arguments (includes Pydantic model conversion) + args_to_call = self._preprocess_args(args) + + signature = inspect.signature(self.func) + valid_params = {param for param in signature.parameters} + + # Check if function accepts **kwargs + has_kwargs = any( + param.kind == inspect.Parameter.VAR_KEYWORD + for param in signature.parameters.values() + ) + + if has_kwargs: + # For functions with **kwargs, we pass all arguments. We defensively + # remove arguments like `self` that are managed by the framework and not + # intended to be passed through **kwargs. + args_to_call.pop('self', None) + # We also remove context param that might have been passed in `args`, + # as it will be explicitly injected later if it's a valid parameter. + args_to_call.pop(self._context_param_name, None) + else: + # For functions without **kwargs, use the original filtering. + args_to_call = { + k: v for k, v in args_to_call.items() if k in valid_params + } + + # Inject context if it's an explicit parameter. This will add it + # or overwrite any value that might have been passed in `args`. + if self._context_param_name in valid_params: + args_to_call[self._context_param_name] = tool_context + + # Check for missing mandatory arguments + mandatory_args = self._get_mandatory_args() + missing_mandatory_args = [ + arg for arg in mandatory_args if arg not in args_to_call + ] + + if missing_mandatory_args: + missing_mandatory_args_str = '\n'.join(missing_mandatory_args) + error_str = f"""Invoking `{self.name}()` failed as the following mandatory input parameters are not present: +{missing_mandatory_args_str} +You could retry calling this tool, but it is IMPORTANT for you to provide all the mandatory parameters.""" + return {'error': error_str} + + return await self._invoke_callable(self.func, args_to_call) + + @override + def _get_declaration(self) -> types.FunctionDeclaration: + """Build the function declaration for the tool.""" + function_declaration = _automatic_function_calling_util.build_function_declaration_for_params_for_crewai( + False, + self.name, + self.description, + self.func, + self.tool.args_schema.model_json_schema(), + ) + return function_declaration + + @override + @classmethod + def from_config( + cls: type[CrewaiTool], config: ToolArgsConfig, config_abs_path: str + ) -> CrewaiTool: + from ...agents import config_agent_utils + + crewai_tool_config = CrewaiToolConfig.model_validate(config.model_dump()) + tool = config_agent_utils.resolve_fully_qualified_name( + crewai_tool_config.tool + ) + name = crewai_tool_config.name + description = crewai_tool_config.description + return cls(tool, name=name, description=description) + + +class CrewaiToolConfig(BaseToolConfig): + tool: str + """The fully qualified path of the CrewAI tool instance.""" + + name: str = '' + """The name of the tool.""" + + description: str = '' + """The description of the tool.""" diff --git a/src/google/adk/integrations/firestore/__init__.py b/src/google/adk/integrations/firestore/__init__.py new file mode 100644 index 0000000000..7c76d28c93 --- /dev/null +++ b/src/google/adk/integrations/firestore/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +"""Firestore integrations for ADK.""" diff --git a/src/google/adk/integrations/firestore/_stop_words.py b/src/google/adk/integrations/firestore/_stop_words.py new file mode 100644 index 0000000000..b72cc5b6cc --- /dev/null +++ b/src/google/adk/integrations/firestore/_stop_words.py @@ -0,0 +1,151 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +DEFAULT_STOP_WORDS = { + "a", + "about", + "above", + "after", + "again", + "against", + "all", + "am", + "an", + "and", + "any", + "are", + "as", + "at", + "be", + "because", + "been", + "before", + "being", + "below", + "between", + "both", + "but", + "by", + "can", + "could", + "did", + "do", + "does", + "doing", + "don", + "down", + "during", + "each", + "else", + "few", + "for", + "from", + "further", + "had", + "has", + "have", + "having", + "he", + "her", + "here", + "hers", + "herself", + "him", + "himself", + "his", + "how", + "i", + "if", + "in", + "into", + "is", + "it", + "its", + "itself", + "just", + "may", + "me", + "might", + "more", + "most", + "must", + "my", + "myself", + "no", + "nor", + "not", + "now", + "of", + "off", + "on", + "once", + "only", + "or", + "other", + "our", + "ours", + "ourselves", + "out", + "over", + "own", + "s", + "same", + "shall", + "she", + "should", + "so", + "some", + "such", + "t", + "than", + "that", + "the", + "their", + "theirs", + "them", + "themselves", + "then", + "there", + "these", + "they", + "this", + "those", + "through", + "to", + "too", + "under", + "until", + "up", + "very", + "was", + "we", + "were", + "what", + "when", + "where", + "which", + "who", + "whom", + "why", + "will", + "with", + "would", + "you", + "your", + "yours", + "yourself", + "yourselves", +} diff --git a/src/google/adk/integrations/firestore/firestore_memory_service.py b/src/google/adk/integrations/firestore/firestore_memory_service.py new file mode 100644 index 0000000000..1d711c35cd --- /dev/null +++ b/src/google/adk/integrations/firestore/firestore_memory_service.py @@ -0,0 +1,195 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import logging +import os +import re +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from google.cloud.firestore_v1.base_query import FieldFilter +from typing_extensions import override + +from ...events.event import Event +from ...memory import _utils +from ...memory.base_memory_service import BaseMemoryService +from ...memory.base_memory_service import SearchMemoryResponse +from ...memory.memory_entry import MemoryEntry +from ._stop_words import DEFAULT_STOP_WORDS + +if TYPE_CHECKING: + from google.cloud import firestore + + from ...sessions.session import Session + +logger = logging.getLogger("google_adk." + __name__) + +DEFAULT_EVENTS_COLLECTION = "events" +DEFAULT_MEMORIES_COLLECTION = "memories" + + +class FirestoreMemoryService(BaseMemoryService): # type: ignore[misc] + """Memory service that uses Google Cloud Firestore as the backend. + + It uses the existing session data to create memories in a top-level memory collection. + """ + + def __init__( + self, + client: Optional[firestore.AsyncClient] = None, + events_collection: Optional[str] = None, + stop_words: Optional[set[str]] = None, + memories_collection: Optional[str] = None, + ): + """Initializes the Firestore memory service. + + Args: + client: An optional Firestore AsyncClient. If not provided, a new one + will be created. + events_collection: The name of the events collection or collection group. + Defaults to 'events'. + stop_words: A set of words to ignore when extracting keywords. Defaults to + a standard English stop words list. + memories_collection: The name of the memories collection. Defaults to + 'memories'. + """ + if client is None: + from google.cloud import firestore + + self.client = firestore.AsyncClient() + else: + self.client = client + self.events_collection = events_collection or DEFAULT_EVENTS_COLLECTION + self.memories_collection = ( + memories_collection or DEFAULT_MEMORIES_COLLECTION + ) + self.stop_words = ( + stop_words if stop_words is not None else DEFAULT_STOP_WORDS + ) + + @override + async def add_session_to_memory(self, session: Session) -> None: + """Extracts keywords from session events and stores them in the memories collection.""" + batch = self.client.batch() + count = 0 + + for event in session.events: + if not event.content or not event.content.parts: + continue + + text = " ".join([part.text for part in event.content.parts if part.text]) + if not text: + continue + + keywords = self._extract_keywords(text) + if not keywords: + continue + + doc_ref = self.client.collection(self.memories_collection).document() + batch.set( + doc_ref, + { + "appName": session.app_name, + "userId": session.user_id, + "keywords": list(keywords), + "author": event.author, + "content": event.content.model_dump( + exclude_none=True, mode="json" + ), + "timestamp": event.timestamp, + }, + ) + count += 1 + if count >= 500: + await batch.commit() + batch = self.client.batch() + count = 0 + + if count > 0: + await batch.commit() + + def _extract_keywords(self, text: str) -> set[str]: + """Extracts keywords from text, ignoring stop words.""" + words = re.findall(r"[A-Za-z]+", text.lower()) + return {word for word in words if word not in self.stop_words} + + async def _search_by_keyword( + self, app_name: str, user_id: str, keyword: str + ) -> list[MemoryEntry]: + """Searches for events matching a single keyword.""" + query = ( + self.client.collection(self.memories_collection) + .where(filter=FieldFilter("appName", "==", app_name)) + .where(filter=FieldFilter("userId", "==", user_id)) + .where(filter=FieldFilter("keywords", "array_contains", keyword)) + ) + + docs = await query.get() + entries = [] + for doc in docs: + data = doc.to_dict() + if data and "content" in data: + try: + from google.genai import types + + content = types.Content.model_validate(data["content"]) + entries.append( + MemoryEntry( + content=content, + author=data.get("author", ""), + timestamp=_utils.format_timestamp(data.get("timestamp", 0.0)), + ) + ) + except Exception as e: + logger.warning(f"Failed to parse memory entry: {e}") + + return entries + + @override + async def search_memory( + self, *, app_name: str, user_id: str, query: str + ) -> SearchMemoryResponse: + """Searches memory for events matching the query.""" + keywords = self._extract_keywords(query) + if not keywords: + return SearchMemoryResponse() + + tasks = [ + self._search_by_keyword(app_name, user_id, keyword) + for keyword in keywords + ] + results = await asyncio.gather(*tasks, return_exceptions=True) + + seen = set() + memories = [] + for result_list in results: + if isinstance(result_list, BaseException): + logger.warning(f"Memory keyword search partial failure: {result_list}") + continue + for entry in result_list: + content_text = "" + if entry.content and entry.content.parts: + content_text = " ".join( + [part.text for part in entry.content.parts if part.text] + ) + key = (entry.author, content_text, entry.timestamp) + if key not in seen: + seen.add(key) + memories.append(entry) + + return SearchMemoryResponse(memories=memories) diff --git a/src/google/adk/integrations/firestore/firestore_session_service.py b/src/google/adk/integrations/firestore/firestore_session_service.py new file mode 100644 index 0000000000..83b97c33c2 --- /dev/null +++ b/src/google/adk/integrations/firestore/firestore_session_service.py @@ -0,0 +1,586 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +from contextlib import asynccontextmanager +from datetime import datetime +from datetime import timezone +import logging +import os +from typing import Any +from typing import AsyncIterator +from typing import cast +from typing import Optional +from typing import TYPE_CHECKING + +_SessionLockKey = tuple[str, str, str] + +if TYPE_CHECKING: + from google.cloud import firestore + +from pydantic import BaseModel + +from ...events.event import Event +from ...sessions import _session_util +from ...sessions.base_session_service import BaseSessionService +from ...sessions.base_session_service import GetSessionConfig +from ...sessions.base_session_service import ListSessionsResponse +from ...sessions.session import Session +from ...sessions.state import State + +logger = logging.getLogger("google_adk." + __name__) + +DEFAULT_ROOT_COLLECTION = "adk-session" +DEFAULT_SESSIONS_COLLECTION = "sessions" +DEFAULT_EVENTS_COLLECTION = "events" +DEFAULT_APP_STATE_COLLECTION = "app_states" +DEFAULT_USER_STATE_COLLECTION = "user_states" + + +class FirestoreSessionService(BaseSessionService): # type: ignore[misc] + """Session service that uses Google Cloud Firestore as the backend. + + Hierarchy for sessions: + adk-session + ↳ + ↳ users + ↳ + ↳ sessions + ↳ + ↳ events + ↳ + + Hierarchy for shared App/User state configurations: + app_states + ↳ + + user_states + ↳ + ↳ users + ↳ + """ + + def __init__( + self, + client: Optional[firestore.AsyncClient] = None, + root_collection: Optional[str] = None, + ): + """Initializes the Firestore session service. + + Args: + client: An optional Firestore AsyncClient. If not provided, a new one + will be created. + root_collection: The root collection name. Defaults to 'adk-session' or + the value of ADK_FIRESTORE_ROOT_COLLECTION env var. + """ + try: + from google.cloud import firestore + except ImportError as e: + raise ImportError( + "FirestoreSessionService requires google-cloud-firestore. " + "Install it with: pip install google-cloud-firestore" + ) from e + + self.client = client or firestore.AsyncClient() + self.root_collection = ( + root_collection + or os.environ.get("ADK_FIRESTORE_ROOT_COLLECTION") + or DEFAULT_ROOT_COLLECTION + ) + self.sessions_collection = DEFAULT_SESSIONS_COLLECTION + + # Per-session locks used to serialize append_event calls in this process. + self._session_locks: dict[_SessionLockKey, asyncio.Lock] = {} + self._session_lock_ref_count: dict[_SessionLockKey, int] = {} + self._session_locks_guard = asyncio.Lock() + self.events_collection = DEFAULT_EVENTS_COLLECTION + self.app_state_collection = DEFAULT_APP_STATE_COLLECTION + self.user_state_collection = DEFAULT_USER_STATE_COLLECTION + + @asynccontextmanager + async def _with_session_lock( + self, *, app_name: str, user_id: str, session_id: str + ) -> AsyncIterator[None]: + """Serializes event appends for the same session within this process.""" + lock_key = (app_name, user_id, session_id) + async with self._session_locks_guard: + lock = self._session_locks.get(lock_key, asyncio.Lock()) + self._session_locks[lock_key] = lock + self._session_lock_ref_count[lock_key] = ( + self._session_lock_ref_count.get(lock_key, 0) + 1 + ) + + try: + async with lock: + yield + finally: + async with self._session_locks_guard: + remaining = self._session_lock_ref_count.get(lock_key, 0) - 1 + if remaining <= 0 and not lock.locked(): + self._session_lock_ref_count.pop(lock_key, None) + self._session_locks.pop(lock_key, None) + else: + self._session_lock_ref_count[lock_key] = remaining + + @staticmethod + def _merge_state( + app_state: dict[str, Any], + user_state: dict[str, Any], + session_state: dict[str, Any], + ) -> dict[str, Any]: + """Merge app, user, and session states into a single state dictionary.""" + import copy + + merged_state = copy.deepcopy(session_state) + for key, value in app_state.items(): + merged_state[State.APP_PREFIX + key] = value + for key, value in user_state.items(): + merged_state[State.USER_PREFIX + key] = value + return merged_state + + def _get_sessions_ref( + self, app_name: str, user_id: str + ) -> firestore.AsyncCollectionReference: + return ( + self.client.collection(self.root_collection) + .document(app_name) + .collection("users") + .document(user_id) + .collection(self.sessions_collection) + ) + + async def create_session( + self, + *, + app_name: str, + user_id: str, + state: Optional[dict[str, Any]] = None, + session_id: Optional[str] = None, + ) -> Session: + """Creates a new session in Firestore.""" + from google.cloud import firestore + + if not session_id: + from ...platform import uuid as platform_uuid + + session_id = platform_uuid.new_uuid() + + initial_state = state or {} + now = firestore.SERVER_TIMESTAMP + + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + + # Extract state deltas + state_deltas = _session_util.extract_state_delta(initial_state) + app_state_delta = state_deltas["app"] + user_state_delta = state_deltas["user"] + session_state = state_deltas["session"] + + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + + session_data = { + "id": session_id, + "appName": app_name, + "userId": user_id, + "state": session_state, + "createTime": now, + "updateTime": now, + "revision": 1, + } + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _create_txn(transaction: firestore.AsyncTransaction) -> None: + # 1. Reads + snap = await session_ref.get(transaction=transaction) + if snap.exists: + from ...errors.already_exists_error import AlreadyExistsError + + raise AlreadyExistsError(f"Session {session_id} already exists.") + + app_snap = ( + await app_ref.get(transaction=transaction) + if app_state_delta + else None + ) + user_snap = ( + await user_ref.get(transaction=transaction) + if user_state_delta + else None + ) + + # 2. Writes + if app_state_delta: + current_app = ( + app_snap.to_dict() if (app_snap and app_snap.exists) else {} + ) + current_app.update(app_state_delta) + transaction.set(app_ref, current_app, merge=True) + + if user_state_delta: + current_user = ( + user_snap.to_dict() if (user_snap and user_snap.exists) else {} + ) + current_user.update(user_state_delta) + transaction.set(user_ref, current_user, merge=True) + + transaction.set(session_ref, session_data) + + transaction_obj = self.client.transaction() + await _create_txn(transaction_obj) + + storage_app_doc = await app_ref.get() + storage_app_state = ( + storage_app_doc.to_dict() if storage_app_doc.exists else {} + ) + storage_user_doc = await user_ref.get() + storage_user_state = ( + storage_user_doc.to_dict() if storage_user_doc.exists else {} + ) + + merged_state = self._merge_state( + storage_app_state, storage_user_state, session_state + ) + + local_now = datetime.now(timezone.utc).timestamp() + + session = Session( + id=session_id, + app_name=app_name, + user_id=user_id, + state=merged_state, + events=[], + last_update_time=local_now, + ) + session._storage_update_marker = "1" + return session + + async def get_session( + self, + *, + app_name: str, + user_id: str, + session_id: str, + config: Optional[GetSessionConfig] = None, + ) -> Optional[Session]: + """Gets a session from Firestore.""" + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + doc = await session_ref.get() + + if not doc.exists: + return None + + data = doc.to_dict() + if not data: + return None + + # Fetch events + events_ref = session_ref.collection(self.events_collection) + query = events_ref.order_by("timestamp") + + if config: + if config.after_timestamp: + after_dt = datetime.fromtimestamp(config.after_timestamp) + query = query.where("timestamp", ">=", after_dt) + if config.num_recent_events: + query = query.limit_to_last(config.num_recent_events) + + events_docs = await query.get() + events = [] + for event_doc in events_docs: + event_data = event_doc.to_dict() + if event_data and "event_data" in event_data: + ed = event_data["event_data"] + events.append(Event.model_validate(ed)) + + # Let's continue getting session. + session_state = data.get("state", {}) + + # Fetch shared state + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + app_doc = await app_ref.get() + app_state = app_doc.to_dict() if app_doc.exists else {} + user_doc = await user_ref.get() + user_state = user_doc.to_dict() if user_doc.exists else {} + + merged_state = self._merge_state(app_state, user_state, session_state) + + # Convert timestamp + update_time = data.get("updateTime") + last_update_time = 0.0 + if update_time: + if isinstance(update_time, datetime): + last_update_time = update_time.timestamp() + else: + try: + last_update_time = float(update_time) + except (ValueError, TypeError): + pass + + current_revision = data.get("revision", 0) + session = Session( + id=session_id, + app_name=app_name, + user_id=user_id, + state=merged_state, + events=events, + last_update_time=last_update_time, + ) + session._storage_update_marker = ( + str(current_revision) if current_revision > 0 else None + ) + return session + + async def list_sessions( + self, *, app_name: str, user_id: Optional[str] = None + ) -> ListSessionsResponse: + """Lists sessions from Firestore.""" + if user_id: + query = self._get_sessions_ref(app_name, user_id).where( + "appName", "==", app_name + ) + docs = await query.get() + else: + query = self.client.collection_group(self.sessions_collection).where( + "appName", "==", app_name + ) + docs = await query.get() + + # Fetch shared state once + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + app_doc = await app_ref.get() + app_state = app_doc.to_dict() if app_doc.exists else {} + + user_states_map = {} + if user_id: + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + user_doc = await user_ref.get() + if user_doc.exists: + user_states_map[user_id] = user_doc.to_dict() + else: + users_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + ) + users_docs = await users_ref.get() + for u_doc in users_docs: + user_states_map[u_doc.id] = u_doc.to_dict() + + sessions = [] + for doc in docs: + data = doc.to_dict() + if data: + u_id = data["userId"] + s_state = data.get("state", {}) + u_state = user_states_map.get(u_id, {}) + merged = self._merge_state(app_state, u_state, s_state) + + sessions.append( + Session( + id=data["id"], + app_name=data["appName"], + user_id=data["userId"], + state=merged, + events=[], + last_update_time=0.0, + ) + ) + + return ListSessionsResponse(sessions=sessions) + + async def delete_session( + self, *, app_name: str, user_id: str, session_id: str + ) -> None: + """Deletes a session and its events from Firestore.""" + from google.cloud import firestore + + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _mark_deleting_txn( + transaction: firestore.AsyncTransaction, + ) -> None: + snap = await session_ref.get(transaction=transaction) + if snap.exists: + transaction.update(session_ref, {"status": "DELETING"}) + + try: + transaction_obj = self.client.transaction() + await _mark_deleting_txn(transaction_obj) + except Exception: + pass + + events_ref = session_ref.collection(self.events_collection) + + batch = self.client.batch() + count = 0 + async for event_doc in events_ref.stream(): + batch.delete(event_doc.reference) + count += 1 + if count >= 500: + await batch.commit() + batch = self.client.batch() + count = 0 + if count > 0: + await batch.commit() + + await session_ref.delete() + + async def append_event(self, session: Session, event: Event) -> Event: + """Appends an event to a session in Firestore.""" + from google.cloud import firestore + + if event.partial: + return event + + self._apply_temp_state(session, event) + event = self._trim_temp_delta_state(event) + + session_ref = self._get_sessions_ref( + session.app_name, session.user_id + ).document(session.id) + + state_delta = ( + event.actions.state_delta + if event.actions and event.actions.state_delta + else {} + ) + state_deltas = _session_util.extract_state_delta(state_delta) + app_updates = state_deltas["app"] + user_updates = state_deltas["user"] + session_updates = state_deltas["session"] + + app_ref = self.client.collection(self.app_state_collection).document( + session.app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(session.app_name) + .collection("users") + .document(session.user_id) + ) + + async with self._with_session_lock( + app_name=session.app_name, + user_id=session.user_id, + session_id=session.id, + ): + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _append_txn(transaction: firestore.AsyncTransaction) -> int: + # 1. Reads + session_snap = await session_ref.get(transaction=transaction) + if not session_snap.exists: + raise ValueError(f"Session {session.id} not found.") + + session_doc = session_snap.to_dict() or {} + if session_doc.get("status") == "DELETING": + raise ValueError(f"Session {session.id} is currently being deleted.") + + current_revision = session_doc.get("revision", 0) + + if session._storage_update_marker is not None: + if session._storage_update_marker != str(current_revision): + raise ValueError( + "The session has been modified in storage since it was loaded. " + "Please reload the session before appending more events." + ) + + app_snap = ( + await app_ref.get(transaction=transaction) if app_updates else None + ) + user_snap = ( + await user_ref.get(transaction=transaction) + if user_updates + else None + ) + + # 2. Writes + if app_updates and app_snap is not None: + current_app = app_snap.to_dict() if app_snap.exists else {} + current_app.update(app_updates) + transaction.set(app_ref, current_app, merge=True) + + if user_updates and user_snap is not None: + current_user = user_snap.to_dict() if user_snap.exists else {} + current_user.update(user_updates) + transaction.set(user_ref, current_user, merge=True) + + for k, v in session_updates.items(): + session.state[k] = v + + new_revision = current_revision + 1 + session_only_state = { + k: v + for k, v in session.state.items() + if not k.startswith(State.APP_PREFIX) + and not k.startswith(State.USER_PREFIX) + } + transaction.update( + session_ref, + { + "state": session_only_state, + "updateTime": firestore.SERVER_TIMESTAMP, + "revision": new_revision, + }, + ) + + event_id = event.id + event_ref = session_ref.collection(self.events_collection).document( + event_id + ) + event_data = event.model_dump(exclude_none=True, mode="json") + transaction.set( + event_ref, + { + "event_data": event_data, + "timestamp": firestore.SERVER_TIMESTAMP, + "appName": session.app_name, + "userId": session.user_id, + }, + ) + + return cast(int, new_revision) + + transaction_obj = self.client.transaction() + new_revision_count = await _append_txn(transaction_obj) + session._storage_update_marker = str(new_revision_count) + + await super().append_event(session, event) + return event diff --git a/src/google/adk/integrations/langchain/__init__.py b/src/google/adk/integrations/langchain/__init__.py new file mode 100644 index 0000000000..985e49f82a --- /dev/null +++ b/src/google/adk/integrations/langchain/__init__.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .langchain_tool import LangchainTool +from .langchain_tool import LangchainToolConfig + +__all__ = [ + 'LangchainTool', + 'LangchainToolConfig', +] diff --git a/src/google/adk/integrations/langchain/langchain_tool.py b/src/google/adk/integrations/langchain/langchain_tool.py new file mode 100644 index 0000000000..54fd05d781 --- /dev/null +++ b/src/google/adk/integrations/langchain/langchain_tool.py @@ -0,0 +1,180 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional +from typing import Union + +from google.genai import types +from langchain_core.tools import BaseTool as LangchainBaseTool +from langchain_core.tools import Tool +from langchain_core.tools.structured import StructuredTool +from typing_extensions import override + +from ...tools import _automatic_function_calling_util +from ...tools.function_tool import FunctionTool +from ...tools.tool_configs import BaseToolConfig +from ...tools.tool_configs import ToolArgsConfig + + +class LangchainTool(FunctionTool): + """Adapter class that wraps a Langchain tool for use with ADK. + + This adapter converts Langchain tools into a format compatible with Google's + generative AI function calling interface. It preserves the tool's name, + description, and functionality while adapting its schema. + + The original tool's name and description can be overridden if needed. + + Args: + tool: A Langchain tool to wrap (BaseTool or a tool with a .run method) + name: Optional override for the tool's name + description: Optional override for the tool's description + + Examples:: + + from langchain.tools import DuckDuckGoSearchTool + from google.adk.integrations.langchain import LangchainTool + + search_tool = DuckDuckGoSearchTool() + wrapped_tool = LangchainTool(search_tool) + """ + + _langchain_tool: Union[LangchainBaseTool, object] + """The wrapped langchain tool.""" + + def __init__( + self, + tool: Union[LangchainBaseTool, object], + name: Optional[str] = None, + description: Optional[str] = None, + ): + if not hasattr(tool, 'run') and not hasattr(tool, '_run'): + raise ValueError( + "Tool must be a Langchain tool, have a 'run' or '_run' method." + ) + + # Determine which function to use + if isinstance(tool, StructuredTool): + func = tool.func + # For async tools, func might be None but coroutine exists + if func is None and hasattr(tool, 'coroutine') and tool.coroutine: + func = tool.coroutine + elif hasattr(tool, '_run') or hasattr(tool, 'run'): + func = tool._run if hasattr(tool, '_run') else tool.run + else: + raise ValueError( + "This is not supported. Tool must be a Langchain tool, have a 'run'" + " or '_run' method. The tool is: ", + type(tool), + ) + + super().__init__(func) + # run_manager is a special parameter for langchain tool + self._ignore_params.append('run_manager') + self._langchain_tool = tool + + # Set name: priority is 1) explicitly provided name, 2) tool's name, 3) default + if name is not None: + self.name = name + elif hasattr(tool, 'name') and tool.name: + self.name = tool.name + # else: keep default from FunctionTool + + # Set description: similar priority + if description is not None: + self.description = description + elif hasattr(tool, 'description') and tool.description: + self.description = tool.description + # else: keep default from FunctionTool + + @override + def _get_declaration(self) -> types.FunctionDeclaration: + """Build the function declaration for the tool. + + Returns: + A FunctionDeclaration object that describes the tool's interface. + + Raises: + ValueError: If the tool schema cannot be correctly parsed. + """ + try: + # There are two types of tools: + # 1. BaseTool: the tool is defined in langchain_core.tools. + # 2. Other tools: the tool doesn't inherit any class but follow some + # conventions, like having a "run" method. + # Handle BaseTool type (preferred Langchain approach) + if isinstance(self._langchain_tool, LangchainBaseTool): + tool_wrapper = Tool( + name=self.name, + func=self.func, + description=self.description, + ) + + # Add schema if available + if ( + hasattr(self._langchain_tool, 'args_schema') + and self._langchain_tool.args_schema + ): + tool_wrapper.args_schema = self._langchain_tool.args_schema + + return _automatic_function_calling_util.build_function_declaration_for_langchain( + False, + self.name, + self.description, + tool_wrapper.func, + tool_wrapper.args, + ) + + # Need to provide a way to override the function names and descriptions + # as the original function names are mostly ".run" and the descriptions + # may not meet users' needs + function_decl = super()._get_declaration() + function_decl.name = self.name + function_decl.description = self.description + return function_decl + + except Exception as e: + raise ValueError( + f'Failed to build function declaration for Langchain tool: {e}' + ) from e + + @override + @classmethod + def from_config( + cls: type[LangchainTool], config: ToolArgsConfig, config_abs_path: str + ) -> LangchainTool: + from ...agents import config_agent_utils + + langchain_tool_config = LangchainToolConfig.model_validate( + config.model_dump() + ) + tool = config_agent_utils.resolve_fully_qualified_name( + langchain_tool_config.tool + ) + name = langchain_tool_config.name + description = langchain_tool_config.description + return cls(tool, name=name, description=description) + + +class LangchainToolConfig(BaseToolConfig): + tool: str + """The fully qualified path of the Langchain tool instance.""" + + name: str = '' + """The name of the tool.""" + + description: str = '' + """The description of the tool.""" diff --git a/src/google/adk/integrations/parameter_manager/__init__.py b/src/google/adk/integrations/parameter_manager/__init__.py new file mode 100644 index 0000000000..87ac216afb --- /dev/null +++ b/src/google/adk/integrations/parameter_manager/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .parameter_client import ParameterManagerClient + +__all__ = [ + 'ParameterManagerClient', +] diff --git a/src/google/adk/integrations/parameter_manager/parameter_client.py b/src/google/adk/integrations/parameter_manager/parameter_client.py new file mode 100644 index 0000000000..2f0f12322e --- /dev/null +++ b/src/google/adk/integrations/parameter_manager/parameter_client.py @@ -0,0 +1,145 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +from typing import cast +from typing import Optional + +from google.api_core.gapic_v1 import client_info +import google.auth +from google.auth import default as default_service_credential +import google.auth.transport.requests +from google.cloud import parametermanager_v1 +from google.oauth2 import service_account + +from ... import version + +USER_AGENT = f"google-adk/{version.__version__}" + + +class ParameterManagerClient: + """A client for interacting with Google Cloud Parameter Manager. + + This class provides a simplified interface for retrieving parameters from + Parameter Manager, handling authentication using either a service account + JSON keyfile (passed as a string), a preexisting authorization token, or + default credentials. + + Attributes: + _credentials: Google Cloud credentials object (ServiceAccountCredentials + or Credentials). + _client: Parameter Manager client instance. + """ + + def __init__( + self, + service_account_json: Optional[str] = None, + auth_token: Optional[str] = None, + location: Optional[str] = None, + ): + """Initializes the ParameterManagerClient. + + If neither `service_account_json` nor `auth_token` is provided, default + credentials are used. + + Args: + service_account_json: The content of a service account JSON keyfile (as + a string), not the file path. Must be valid JSON. + auth_token: An existing Google Cloud authorization token. + location: The Google Cloud location (region) to use for the Parameter + Manager service. If not provided, the global endpoint is used. + + Raises: + ValueError: If both 'service_account_json' and 'auth_token' are + provided. Also raised if the 'service_account_json' is not valid JSON. + google.auth.exceptions.GoogleAuthError: If authentication fails. + """ + if service_account_json and auth_token: + raise ValueError( + "Must provide either 'service_account_json' or 'auth_token', not" + " both." + ) + + if service_account_json: + try: + credentials = service_account.Credentials.from_service_account_info( + json.loads(service_account_json) + ) + except json.JSONDecodeError as e: + raise ValueError(f"Invalid service account JSON: {e}") from e + elif auth_token: + credentials = google.auth.credentials.Credentials( + token=auth_token, + refresh_token=None, + token_uri=None, + client_id=None, + client_secret=None, + ) + request = google.auth.transport.requests.Request() + credentials.refresh(request) + else: + try: + credentials, _ = default_service_credential( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + except Exception as e: + raise ValueError( + "'service_account_json' or 'auth_token' are both missing, and" + " error occurred while trying to use default credentials: {e}" + ) from e + + if not credentials: + raise ValueError( + "Failed to obtain credentials. Provide either 'service_account_json'" + " or 'auth_token', not both. If neither is provided, default" + " credentials are used." + ) + + self._credentials = credentials + + client_options = None + if location: + client_options = { + "api_endpoint": f"parametermanager.{location}.rep.googleapis.com" + } + + self._client = parametermanager_v1.ParameterManagerClient( + credentials=self._credentials, + client_options=client_options, + client_info=client_info.ClientInfo(user_agent=USER_AGENT), + ) + + def get_parameter(self, resource_name: str) -> str: + """Retrieves a rendered parameter value from Google Cloud Parameter Manager. + + Args: + resource_name: The full resource name of the parameter version, in the + format "projects/*/locations/*/parameters/*/versions/*". Usually you + want the "latest" version, e.g., + "projects/my-project/locations/global/parameters/my-param/versions/latest". + + Returns: + The rendered parameter value as a string. + + Raises: + google.api_core.exceptions.GoogleAPIError: If the Parameter Manager API + returns an error (e.g., parameter not found, permission denied). + """ + request = parametermanager_v1.RenderParameterVersionRequest( + name=resource_name + ) + response = self._client.render_parameter_version(request=request) + return cast(str, response.rendered_payload.decode("UTF-8")) diff --git a/src/google/adk/integrations/secret_manager/__init__.py b/src/google/adk/integrations/secret_manager/__init__.py new file mode 100644 index 0000000000..9c1dbd53bd --- /dev/null +++ b/src/google/adk/integrations/secret_manager/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .secret_client import SecretManagerClient + +__all__ = [ + 'SecretManagerClient', +] diff --git a/src/google/adk/integrations/secret_manager/secret_client.py b/src/google/adk/integrations/secret_manager/secret_client.py new file mode 100644 index 0000000000..df06743565 --- /dev/null +++ b/src/google/adk/integrations/secret_manager/secret_client.py @@ -0,0 +1,138 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +from typing import cast +from typing import Optional + +from google.api_core.gapic_v1 import client_info +import google.auth +from google.auth import default as default_service_credential +import google.auth.transport.requests +from google.cloud import secretmanager +from google.oauth2 import service_account + +from ... import version + +USER_AGENT = f"google-adk/{version.__version__}" + + +class SecretManagerClient: + """A client for interacting with Google Cloud Secret Manager. + + This class provides a simplified interface for retrieving secrets from + Secret Manager, handling authentication using either a service account + JSON keyfile (passed as a string) or a preexisting authorization token. + + Attributes: + _credentials: Google Cloud credentials object (ServiceAccountCredentials + or Credentials). + _client: Secret Manager client instance. + """ + + def __init__( + self, + service_account_json: Optional[str] = None, + auth_token: Optional[str] = None, + location: Optional[str] = None, + ): + """Initializes the SecretManagerClient. + + Args: + service_account_json: The content of a service account JSON keyfile (as + a string), not the file path. Must be valid JSON. + auth_token: An existing Google Cloud authorization token. + location: The Google Cloud location (region) to use for the Secret + Manager service. If not provided, the global endpoint is used. + + Raises: + ValueError: If neither `service_account_json` nor `auth_token` is + provided, + or if both are provided. Also raised if the service_account_json + is not valid JSON. + google.auth.exceptions.GoogleAuthError: If authentication fails. + """ + if service_account_json: + try: + credentials = service_account.Credentials.from_service_account_info( + json.loads(service_account_json) + ) + except json.JSONDecodeError as e: + raise ValueError(f"Invalid service account JSON: {e}") from e + elif auth_token: + credentials = google.auth.credentials.Credentials( + token=auth_token, + refresh_token=None, + token_uri=None, + client_id=None, + client_secret=None, + ) + request = google.auth.transport.requests.Request() + credentials.refresh(request) + else: + try: + credentials, _ = default_service_credential( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + except Exception as e: + raise ValueError( + "'service_account_json' or 'auth_token' are both missing, and" + f" error occurred while trying to use default credentials: {e}" + ) from e + + if not credentials: + raise ValueError( + "Must provide either 'service_account_json' or 'auth_token', not both" + " or neither." + ) + + self._credentials = credentials + + client_options = None + if location: + client_options = { + "api_endpoint": f"secretmanager.{location}.rep.googleapis.com" + } + + self._client = secretmanager.SecretManagerServiceClient( + credentials=self._credentials, + client_options=client_options, + client_info=client_info.ClientInfo(user_agent=USER_AGENT), + ) + + def get_secret(self, resource_name: str) -> str: + """Retrieves a secret from Google Cloud Secret Manager. + + Args: + resource_name: The full resource name of the secret, in the format + "projects/*/secrets/*/versions/*". Usually you want the "latest" + version, e.g., + "projects/my-project/secrets/my-secret/versions/latest". + + Returns: + The secret payload as a string. + + Raises: + google.api_core.exceptions.GoogleAPIError: If the Secret Manager API + returns an error (e.g., secret not found, permission denied). + Exception: For other unexpected errors. + """ + try: + response = self._client.access_secret_version(name=resource_name) + return cast(str, response.payload.data.decode("UTF-8")) + except Exception as e: + raise e # Re-raise the exception to allow for handling by the caller + # Consider logging the exception here before re-raising. diff --git a/src/google/adk/integrations/slack/README.md b/src/google/adk/integrations/slack/README.md new file mode 100644 index 0000000000..1aab87a991 --- /dev/null +++ b/src/google/adk/integrations/slack/README.md @@ -0,0 +1,82 @@ +# Slack Integration + +The ADK Slack integration provides a `SlackRunner` to easily deploy your agents +on Slack using [Socket Mode](https://api.slack.com/apis/connections/socket). + +## Prerequisites + +Install the ADK with Slack support: + +```bash +pip install "google-adk[slack]" +``` + +## Slack App Configuration + +To use the `SlackRunner`, you need to set up a Slack App in the +[Slack API Dashboard](https://api.slack.com/apps). + +### 1. Enable Socket Mode +In your app settings, go to **Socket Mode** and toggle **Enable Socket Mode** to +`on`. +You will be prompted to generate an **App-Level Token** (starts with `xapp-`). +Ensure it has the `connections:write` scope. + +### 2. Configure Scopes +Navigate to **OAuth & Permissions** and add the following **Bot Token Scopes**: + +- `app_mentions:read`: To receive mention events. +- `chat:write`: To send messages. +- `im:history`: To respond in Direct Messages. +- `groups:history` (Optional): To respond in private channels. +- `channels:history` (Optional): To respond in public channels. + +### 3. Subscribe to Events +Go to **Event Subscriptions**: + +- Toggle **Enable Events** to `on`. +- Under **Subscribe to bot events**, add: + - `app_mention`: To respond when the bot is mentioned. + - `message.im`: To respond in Direct Messages. + +### 4. Install App to Workspace +Install the app to your workspace to obtain the +**Bot User OAuth Token** (starts with `xoxb-`). + +## Usage + +```python +import asyncio +import os +from google.adk.runners import Runner +from google.adk.integrations.slack import SlackRunner +from slack_bolt.app.async_app import AsyncApp + +async def main(): + # 1. Initialize your ADK Runner (with your agent) + # runner = Runner(agent=my_agent, session_service=my_session_service) + + # 2. Initialize Slack AsyncApp with your Bot Token + slack_app = AsyncApp(token=os.environ["SLACK_BOT_TOKEN"]) + + # 3. Initialize the SlackRunner + slack_runner = SlackRunner(runner=runner, slack_app=slack_app) + + # 4. Start the runner in Socket Mode with your App Token + await slack_runner.start(app_token=os.environ["SLACK_APP_TOKEN"]) + +if __name__ == "__main__": + asyncio.run(main()) +``` + +## Session Management + +The `SlackRunner` automatically manages conversation sessions: + +- **Direct Messages**: The `channel_id` is used as the session ID. +- **Threaded Conversations**: The combination of `channel_id` and `thread_ts` +(the timestamp of the parent message) is used as the session ID to maintain +thread context. +- **App Mentions**: If not in a thread, the message timestamp (`ts`) is used +with the `channel_id` to start a new threaded session if the user replies +in-thread. diff --git a/src/google/adk/integrations/slack/__init__.py b/src/google/adk/integrations/slack/__init__.py new file mode 100644 index 0000000000..ffa5fab716 --- /dev/null +++ b/src/google/adk/integrations/slack/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .slack_runner import SlackRunner + +__all__ = ["SlackRunner"] diff --git a/src/google/adk/integrations/slack/slack_runner.py b/src/google/adk/integrations/slack/slack_runner.py new file mode 100644 index 0000000000..d8449a1a4f --- /dev/null +++ b/src/google/adk/integrations/slack/slack_runner.py @@ -0,0 +1,123 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import logging +from typing import Any + +from google.adk.runners import Runner +from google.genai import types +from slack_bolt.adapter.socket_mode.aiohttp import AsyncSocketModeHandler + +try: + from slack_bolt.app.async_app import AsyncApp +except ImportError: + raise ImportError( + "slack_bolt is not installed. Please install it with " + '`pip install "google-adk[slack]"`.' + ) + +logger = logging.getLogger("google_adk." + __name__) + + +class SlackRunner: + """Runner for ADK agents on Slack.""" + + def __init__( + self, + runner: Runner, + slack_app: AsyncApp, + ): + self.runner = runner + self.slack_app = slack_app + self._setup_handlers() + + def _setup_handlers(self): + """Sets up event handlers for Slack.""" + + @self.slack_app.event("app_mention") + async def handle_app_mentions(event, say): + await self._handle_message(event, say) + + @self.slack_app.event("message") + async def handle_message_events(event, say): + # Skip bot messages to avoid loops + if event.get("bot_id") or event.get("bot_profile"): + return + + is_im = event.get("channel_type") == "im" + in_thread = event.get("thread_ts") is not None + + if is_im or in_thread: + await self._handle_message(event, say) + + async def _handle_message(self, event: dict[str, Any], say: Any): + """Handles a message or app_mention event.""" + text = event.get("text", "") + user_id = event.get("user") + channel_id = event.get("channel") + thread_ts = event.get("thread_ts") or event.get("ts") + + if not text or not user_id or not channel_id: + return + + # In Slack, we can use the channel_id (and optionally thread_ts) as a session ID. + session_id = f"{channel_id}-{thread_ts}" if thread_ts else channel_id + + new_message = types.Content(role="user", parts=[types.Part(text=text)]) + + thinking_ts: str | None = None + try: + thinking_response = await say(text="_Thinking..._", thread_ts=thread_ts) + thinking_ts = thinking_response.get("ts") + + async for event in self.runner.run_async( + user_id=user_id, + session_id=session_id, + new_message=new_message, + ): + if event.content and event.content.parts: + for part in event.content.parts: + if part.text: + if thinking_ts: + await self.slack_app.client.chat_update( + channel=channel_id, + ts=thinking_ts, + text=part.text, + ) + thinking_ts = None + else: + await say(text=part.text, thread_ts=thread_ts) + if thinking_ts: + await self.slack_app.client.chat_delete( + channel=channel_id, ts=thinking_ts + ) + thinking_ts = None + except Exception as e: + error_message = f"Sorry, I encountered an error: {str(e)}" + logger.exception("Error running ADK agent for Slack:") + if thinking_ts: + await self.slack_app.client.chat_update( + channel=channel_id, + ts=thinking_ts, + text=error_message, + ) + else: + await say(text=error_message, thread_ts=thread_ts) + + async def start(self, app_token: str): + """Starts the Slack app using Socket Mode.""" + handler = AsyncSocketModeHandler(self.slack_app, app_token) + await handler.start_async() diff --git a/src/google/adk/integrations/vmaas/__init__.py b/src/google/adk/integrations/vmaas/__init__.py new file mode 100644 index 0000000000..846800a9d8 --- /dev/null +++ b/src/google/adk/integrations/vmaas/__init__.py @@ -0,0 +1,40 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vertex AI Agent Engine Computer Use Sandbox integration. + +This module provides a BaseComputer implementation that uses Vertex AI +Agent Engine Computer Use Sandbox as the remote browser environment. + +Example: + ```python + from google.adk.integrations.vmaas import AgentEngineSandboxComputer + from google.adk.tools.computer_use import ComputerUseToolset + + computer = AgentEngineSandboxComputer( + project_id="my-project", + service_account_email="sa@my-project.iam.gserviceaccount.com", + ) + toolset = ComputerUseToolset(computer=computer) + agent = Agent(tools=[toolset], ...) + ``` +""" + +from .sandbox_client import SandboxClient +from .sandbox_computer import AgentEngineSandboxComputer + +__all__ = [ + "AgentEngineSandboxComputer", + "SandboxClient", +] diff --git a/src/google/adk/integrations/vmaas/sandbox_client.py b/src/google/adk/integrations/vmaas/sandbox_client.py new file mode 100644 index 0000000000..5fff119f37 --- /dev/null +++ b/src/google/adk/integrations/vmaas/sandbox_client.py @@ -0,0 +1,677 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Low-level client for Vertex AI Computer Use Sandbox CDP commands. + +This module provides functions to interact with the sandbox browser via +Chrome DevTools Protocol (CDP) commands sent through the Vertex AI SDK. +""" + +from __future__ import annotations + +import base64 +import logging +from typing import Any +from typing import Literal +from typing import TYPE_CHECKING + +from ...features import experimental +from ...features import FeatureName + +if TYPE_CHECKING: + import vertexai + +logger = logging.getLogger("google_adk." + __name__) + +# CDP command constants +_CDP_COMMAND_PAGE_CAPTURE_SCREENSHOT = "Page.captureScreenshot" +_CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT = "Input.dispatchMouseEvent" +_CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT = "Input.dispatchKeyEvent" +_CDP_COMMAND_INPUT_INSERT_TEXT = "Input.insertText" +_CDP_COMMAND_PAGE_GET_NAV_HISTORY = "Page.getNavigationHistory" +_CDP_COMMAND_PAGE_NAV_TO_HISTORY = "Page.navigateToHistoryEntry" +_CDP_COMMAND_PAGE_NAVIGATE = "Page.navigate" + +# Key mapping from user-friendly names to CDP key values +_META_KEY_MAP = { + "BACKSPACE": "BackSpace", + "TAB": "Tab", + "RETURN": "Enter", + "ENTER": "Enter", + "SHIFT": "Shift_L", + "CONTROL": "Control_L", + "ALT": "Alt_L", + "ESCAPE": "Escape", + "SPACE": "space", + "PAGEUP": "Page_Up", + "PAGE_UP": "Page_Up", + "PAGEDOWN": "Page_Down", + "PAGE_DOWN": "Page_Down", + "END": "End", + "HOME": "Home", + "LEFT": "Left", + "UP": "Up", + "RIGHT": "Right", + "DOWN": "Down", + "INSERT": "Insert", + "DELETE": "Delete", + "SEMICOLON": "semicolon", + "EQUALS": "equal", + "MULTIPLY": "asterisk", + "ADD": "plus", + "SEPARATOR": "KP_Separator", + "SUBTRACT": "minus", + "DECIMAL": "period", + "DIVIDE": "slash", + "F1": "F1", + "F2": "F2", + "F3": "F3", + "F4": "F4", + "F5": "F5", + "F6": "F6", + "F7": "F7", + "F8": "F8", + "F9": "F9", + "F10": "F10", + "F11": "F11", + "F12": "F12", + "COMMAND": "Super_L", +} + +# Modifier key to CDP modifier bitmask mapping +_MODIFIER_MAP = { + "CONTROL": 2, + "ALT": 1, + "SHIFT": 8, + "COMMAND": 4, + "SUPER": 4, +} + + +@experimental(FeatureName.COMPUTER_USE) +class SandboxClient: + """Client for interacting with Vertex AI Computer Use Sandbox via SDK.""" + + def __init__( + self, + vertexai_client: "vertexai.Client", + sandbox: Any, + access_token: str, + ): + """Initialize the sandbox client. + + Args: + vertexai_client: The Vertex AI client instance. + sandbox: The sandbox object from vertexai SDK (SandboxEnvironment). + access_token: The access token for authenticating with the sandbox. + """ + self._client = vertexai_client + self._sandbox = sandbox + self._access_token = access_token + + def _parse_response(self, response: Any) -> dict[str, Any]: + """Parse the response from send_command. + + Args: + response: The HttpResponse from send_command. + + Returns: + The parsed JSON response as a dict. + """ + import json + + if hasattr(response, "body") and response.body: + return json.loads(response.body) + return {} + + def update_access_token(self, access_token: str) -> None: + """Update the access token. + + Args: + access_token: The new access token. + """ + self._access_token = access_token + + async def make_cdp_request( + self, + command: str, + params: dict[str, Any] | None = None, + ) -> dict[str, Any]: + """Make a single CDP request to the sandbox. + + Args: + command: The CDP command to execute (e.g., "Page.navigate"). + params: Optional parameters for the CDP command. + + Returns: + The CDP command response. + + Raises: + Exception: If the request fails. + """ + import asyncio + + params = params if params is not None else {} + request_dict = {"command": command, "params": params} + + response = await asyncio.to_thread( + self._client.agent_engines.sandboxes.send_command, + http_method="POST", + path="cdp", + access_token=self._access_token, + sandbox_environment=self._sandbox, + request_dict=request_dict, + ) + return self._parse_response(response) + + async def make_cdp_batch_request( + self, + commands: list[dict[str, Any]], + stop_on_error: bool = True, + ) -> list[dict[str, Any]]: + """Execute multiple CDP commands. + + First tries the batch endpoint (/cdps), falls back to sequential + execution if batch is not available. + + Args: + commands: List of CDP commands, each with "command" and "params" keys. + stop_on_error: Whether to stop processing on first error. + + Returns: + List of results for each command. + """ + import asyncio + + # Try batch endpoint first + try: + request_dict = {"commands": commands, "stop_on_error": stop_on_error} + response = await asyncio.to_thread( + self._client.agent_engines.sandboxes.send_command, + http_method="POST", + path="cdps", + access_token=self._access_token, + sandbox_environment=self._sandbox, + request_dict=request_dict, + ) + parsed = self._parse_response(response) + return parsed.get("results", []) + except Exception as e: + # Batch endpoint not available, fall back to sequential + if "404" in str(e) or "not found" in str(e).lower(): + logger.debug("Batch CDP endpoint not available, using sequential") + else: + logger.warning("Batch CDP failed: %s, falling back to sequential", e) + + # Sequential fallback + results = [] + for cmd in commands: + try: + result = await self.make_cdp_request( + cmd["command"], cmd.get("params", {}) + ) + results.append({"status": "success", "result": result}) + except Exception as e: + results.append({"status": "error", "error": str(e)}) + if stop_on_error: + break + return results + + async def get_screenshot(self, max_retries: int = 3) -> bytes: + """Capture a screenshot of the current page. + + This method includes retry logic to handle transient errors that can occur + during page navigation (e.g., "Execution context was destroyed"). + + Args: + max_retries: Maximum number of retry attempts (default: 3). + + Returns: + The screenshot as PNG bytes. + """ + import asyncio + + last_error = None + for attempt in range(max_retries): + try: + response = await self.make_cdp_request( + _CDP_COMMAND_PAGE_CAPTURE_SCREENSHOT + ) + return base64.b64decode(response["data"]) + except Exception as e: + last_error = e + # Check if it's a transient navigation error + error_str = str(e).lower() + if "context was destroyed" in error_str or "navigation" in error_str: + if attempt < max_retries - 1: + logger.debug( + "Retrying get_screenshot after navigation error (attempt %d)", + attempt + 1, + ) + await asyncio.sleep(0.5) # Wait for page to stabilize + continue + raise + + # If we exhausted retries, raise the last error + if last_error: + raise last_error + return b"" + + async def get_current_url(self, max_retries: int = 3) -> str | None: + """Get the URL of the currently active tab. + + This method includes retry logic to handle transient errors that can occur + during page navigation (e.g., "Execution context was destroyed"). + + Args: + max_retries: Maximum number of retry attempts (default: 3). + + Returns: + The current URL, or None if no active tab. + """ + import asyncio + + last_error = None + for attempt in range(max_retries): + try: + response = await asyncio.to_thread( + self._client.agent_engines.sandboxes.send_command, + http_method="GET", + path="tabs", + access_token=self._access_token, + sandbox_environment=self._sandbox, + ) + parsed = self._parse_response(response) + + active_tab_id = parsed.get("active_tab_id") + if active_tab_id is None: + return None + + for tab in parsed.get("all_tabs", []): + if tab.get("id") == active_tab_id: + return tab.get("url") + + return None + except Exception as e: + last_error = e + # Check if it's a transient navigation error + error_str = str(e).lower() + if "context was destroyed" in error_str or "navigation" in error_str: + if attempt < max_retries - 1: + logger.debug( + "Retrying get_current_url after navigation error (attempt %d)", + attempt + 1, + ) + await asyncio.sleep(0.5) # Wait for page to stabilize + continue + raise + + # If we exhausted retries, raise the last error + if last_error: + raise last_error + return None + + async def navigate(self, url: str) -> dict[str, Any]: + """Navigate to a URL. + + Args: + url: The URL to navigate to. + + Returns: + The CDP response. + """ + return await self.make_cdp_request(_CDP_COMMAND_PAGE_NAVIGATE, {"url": url}) + + async def click_at(self, x: int, y: int) -> None: + """Click at a specific coordinate. + + Args: + x: The x-coordinate. + y: The y-coordinate. + """ + commands = [ + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": { + "type": "mousePressed", + "button": "left", + "x": x, + "y": y, + "clickCount": 1, + }, + }, + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": { + "type": "mouseReleased", + "button": "left", + "x": x, + "y": y, + "clickCount": 1, + }, + }, + ] + await self.make_cdp_batch_request(commands) + + async def hover_at(self, x: int, y: int) -> None: + """Hover at a specific coordinate. + + Args: + x: The x-coordinate. + y: The y-coordinate. + """ + await self.make_cdp_request( + _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + {"type": "mouseMoved", "x": x, "y": y}, + ) + + async def type_text( + self, + text: str, + press_enter: bool = False, + clear_before_typing: bool = False, + ) -> None: + """Type text at the currently focused element. + + Args: + text: The text to type. + press_enter: Whether to press Enter after typing. + clear_before_typing: Whether to clear existing content first. + """ + commands = [] + + if clear_before_typing: + # Ctrl+A to select all + commands.extend([ + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyDown", + "modifiers": 2, # Ctrl + "windowsVirtualKeyCode": 65, # A + "key": "A", + }, + }, + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyUp", + "windowsVirtualKeyCode": 65, + "key": "A", + }, + }, + # Delete to clear + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyDown", + "windowsVirtualKeyCode": 46, # Delete + "key": "Delete", + }, + }, + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyUp", + "windowsVirtualKeyCode": 46, + "key": "Delete", + }, + }, + ]) + + if text: + commands.append({ + "command": _CDP_COMMAND_INPUT_INSERT_TEXT, + "params": {"text": text}, + }) + + if press_enter: + commands.extend([ + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyDown", + "windowsVirtualKeyCode": 13, + "key": "Enter", + }, + }, + { + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": { + "type": "keyUp", + "windowsVirtualKeyCode": 13, + "key": "Enter", + }, + }, + ]) + + if commands: + await self.make_cdp_batch_request(commands) + + async def type_text_at( + self, + x: int, + y: int, + text: str, + press_enter: bool = False, + clear_before_typing: bool = False, + ) -> None: + """Click at a coordinate and type text. + + Args: + x: The x-coordinate to click. + y: The y-coordinate to click. + text: The text to type. + press_enter: Whether to press Enter after typing. + clear_before_typing: Whether to clear existing content first. + """ + await self.click_at(x, y) + await self.type_text(text, press_enter, clear_before_typing) + + async def scroll_at( + self, + x: int, + y: int, + direction: Literal["up", "down", "left", "right"], + magnitude: int, + ) -> None: + """Scroll at a specific coordinate. + + Args: + x: The x-coordinate. + y: The y-coordinate. + direction: The scroll direction. + magnitude: The scroll amount in pixels. + """ + direction = direction.lower() + sign = -1 if direction in ("left", "up") else 1 + delta_x = sign * magnitude if direction in ("left", "right") else 0 + delta_y = sign * magnitude if direction in ("up", "down") else 0 + + await self.make_cdp_request( + _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + { + "type": "mouseWheel", + "x": x, + "y": y, + "deltaX": delta_x, + "deltaY": delta_y, + }, + ) + + async def go_back(self) -> bool: + """Navigate back in browser history. + + Returns: + True if navigation was successful, False if at beginning of history. + """ + response = await self.make_cdp_request(_CDP_COMMAND_PAGE_GET_NAV_HISTORY) + current_index = response.get("currentIndex", 0) + + if current_index > 0: + entry_id = response["entries"][current_index - 1]["id"] + await self.make_cdp_request( + _CDP_COMMAND_PAGE_NAV_TO_HISTORY, {"entryId": entry_id} + ) + return True + return False + + async def go_forward(self) -> bool: + """Navigate forward in browser history. + + Returns: + True if navigation was successful, False if at end of history. + """ + response = await self.make_cdp_request(_CDP_COMMAND_PAGE_GET_NAV_HISTORY) + current_index = response.get("currentIndex", 0) + entries = response.get("entries", []) + + if current_index < len(entries) - 1: + entry_id = entries[current_index + 1]["id"] + await self.make_cdp_request( + _CDP_COMMAND_PAGE_NAV_TO_HISTORY, {"entryId": entry_id} + ) + return True + return False + + async def key_combination(self, keys: list[str]) -> None: + """Press a combination of keys. + + Args: + keys: List of keys to press (e.g., ["control", "c"]). + """ + commands = [] + modifiers_down = [] + + for key in keys: + upper_key = key.upper() + is_modifier = upper_key in ("CONTROL", "ALT", "SHIFT", "COMMAND", "SUPER") + + if is_modifier: + cdp_key = _META_KEY_MAP.get(upper_key, key) + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": {"type": "keyDown", "key": cdp_key}, + }) + modifiers_down.append(cdp_key) + elif upper_key in _META_KEY_MAP: + # Special key like Enter, Backspace + cdp_key = _META_KEY_MAP[upper_key] + params_down = {"type": "keyDown", "key": cdp_key} + params_up = {"type": "keyUp", "key": cdp_key} + if cdp_key == "Enter": + params_down["windowsVirtualKeyCode"] = 13 + params_up["windowsVirtualKeyCode"] = 13 + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": params_down, + }) + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": params_up, + }) + else: + # Regular character + if len(key) == 1: + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": {"type": "keyDown", "text": key}, + }) + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": {"type": "keyUp", "text": key}, + }) + else: + # Word/sentence - use insertText + commands.append({ + "command": _CDP_COMMAND_INPUT_INSERT_TEXT, + "params": {"text": key}, + }) + + # Release modifiers in reverse order + for cdp_key in reversed(modifiers_down): + commands.append({ + "command": _CDP_COMMAND_INPUT_DISPATCH_KEY_EVENT, + "params": {"type": "keyUp", "key": cdp_key}, + }) + + if commands: + await self.make_cdp_batch_request(commands) + + async def drag_and_drop(self, x1: int, y1: int, x2: int, y2: int) -> None: + """Drag from one coordinate to another. + + Args: + x1: Starting x-coordinate. + y1: Starting y-coordinate. + x2: Ending x-coordinate. + y2: Ending y-coordinate. + """ + commands = [ + # Move to start position + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": {"type": "mouseMoved", "x": x1, "y": y1}, + }, + # Press left mouse button + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": { + "type": "mousePressed", + "button": "left", + "x": x1, + "y": y1, + "clickCount": 1, + }, + }, + # Move to end position (drag) + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": {"type": "mouseMoved", "x": x2, "y": y2}, + }, + # Release left mouse button + { + "command": _CDP_COMMAND_INPUT_DISPATCH_MOUSE_EVENT, + "params": { + "type": "mouseReleased", + "button": "left", + "x": x2, + "y": y2, + "clickCount": 1, + }, + }, + ] + await self.make_cdp_batch_request(commands) + + async def health_check(self) -> bool: + """Check if the sandbox is healthy. + + Returns: + True if healthy, False otherwise. + """ + import asyncio + + try: + response = await asyncio.to_thread( + self._client.agent_engines.sandboxes.send_command, + http_method="GET", + path="", + access_token=self._access_token, + sandbox_environment=self._sandbox, + ) + parsed = self._parse_response(response) + return parsed.get("status") == "healthy" + except Exception as e: + logger.warning("Sandbox health check failed: %s", e) + return False diff --git a/src/google/adk/integrations/vmaas/sandbox_computer.py b/src/google/adk/integrations/vmaas/sandbox_computer.py new file mode 100644 index 0000000000..fdcf6fc21d --- /dev/null +++ b/src/google/adk/integrations/vmaas/sandbox_computer.py @@ -0,0 +1,440 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vertex AI Agent Engine Sandbox Computer implementation. + +This module provides a BaseComputer implementation that uses Vertex AI +Agent Engine Computer Use Sandbox as the remote browser environment. +""" + +from __future__ import annotations + +import asyncio +import logging +import time +from typing import Any +from typing import Literal +from typing import TYPE_CHECKING + +from ...features import experimental +from ...features import FeatureName +from ...tools.computer_use.base_computer import BaseComputer +from ...tools.computer_use.base_computer import ComputerEnvironment +from ...tools.computer_use.base_computer import ComputerState +from .sandbox_client import SandboxClient + +if TYPE_CHECKING: + import vertexai + + from ...tools.tool_context import ToolContext + +logger = logging.getLogger("google_adk." + __name__) + +# Session state keys for sharing resources across sessions +_STATE_KEY_AGENT_ENGINE_NAME = "_vmaas_agent_engine_name" +_STATE_KEY_SANDBOX_NAME = "_vmaas_sandbox_name" +_STATE_KEY_ACCESS_TOKEN = "_vmaas_access_token" +_STATE_KEY_TOKEN_EXPIRY = "_vmaas_token_expiry" + +# Default token timeout in seconds +_DEFAULT_TOKEN_TIMEOUT = 3600 + +# Buffer time before token expiry to trigger refresh (60 seconds) +_TOKEN_REFRESH_BUFFER = 60 + + +@experimental(FeatureName.COMPUTER_USE) +class AgentEngineSandboxComputer(BaseComputer): + """Computer implementation using Vertex AI Agent Engine Sandbox. + + This class provides a remote browser environment backed by Vertex AI + Computer Use Sandbox. It supports: + - Auto-provisioning of agent engines and sandboxes + - Bring-your-own-sandbox (BYOS) mode + - Session-aware resource sharing via session_state property + - Automatic token refresh on expiry + + When used with ComputerUseToolset, the session_state property is + automatically bound to tool_context.state before each tool call, + enabling state sharing across invocations and agent server instances. + + Example usage: + ```python + from google.adk.integrations.vmaas import AgentEngineSandboxComputer + from google.adk.tools.computer_use import ComputerUseToolset + + computer = AgentEngineSandboxComputer( + project_id="my-project", + service_account_email="sa@my-project.iam.gserviceaccount.com", + ) + toolset = ComputerUseToolset(computer=computer) + agent = Agent(tools=[toolset], ...) + ``` + """ + + def __init__( + self, + *, + project_id: str | None = None, + location: str = "us-central1", + service_account_email: str | None = None, + sandbox_name: str | None = None, + sandbox_ttl_seconds: int = 3600, + search_engine_url: str = "https://www.google.com", + vertexai_client: "vertexai.Client | None" = None, + ): + """Initialize the sandbox computer. + + Args: + project_id: GCP project ID. If None, uses Application Default + Credentials project. + location: Vertex AI location (default: us-central1). + service_account_email: Service account email for token generation. + Must have roles/iam.serviceAccountTokenCreator permission. + If None, attempts to use ADC service account. + sandbox_name: Existing sandbox resource name (BYOS mode). If provided, + the agent engine name is extracted from it. If None, creates new + agent engine and sandbox on demand. + Format: projects/{project}/locations/{location}/reasoningEngines/{id}/sandboxEnvironments/{id} + sandbox_ttl_seconds: TTL for auto-created sandboxes (default: 1 hour). + search_engine_url: URL to navigate to for search() method. + vertexai_client: Optional Vertex AI client instance. If None, creates + one lazily using project_id and location. + """ + self._project_id = project_id + self._location = location + self._service_account_email = service_account_email + self._sandbox_name = sandbox_name + self._sandbox_ttl_seconds = sandbox_ttl_seconds + self._search_engine_url = search_engine_url + self._screen_size = (1280, 720) + + # Extract agent engine name from sandbox_name if provided + self._agent_engine_name = None + if sandbox_name: + # Format: projects/.../reasoningEngines/.../sandboxEnvironments/... + parts = sandbox_name.split("/sandboxEnvironments/") + if len(parts) == 2: + self._agent_engine_name = parts[0] + + # Vertex client (lazy-initialized if not provided) + self._client = vertexai_client + + # Session state for sharing sandbox/tokens across invocations + self._session_state: dict[str, Any] | None = None + + async def prepare(self, tool_context: "ToolContext") -> None: + """Bind session state for sandbox resource sharing.""" + self._session_state = tool_context.state + + def _get_client(self) -> "vertexai.Client": + """Get or create the Vertex AI client.""" + if self._client is None: + import vertexai + + self._client = vertexai.Client( + project=self._project_id, location=self._location + ) + return self._client + + async def _ensure_agent_engine(self) -> str: + """Ensure an agent engine exists, creating one if needed. + + Returns: + The agent engine resource name. + """ + # Check if provided in constructor + if self._agent_engine_name: + return self._agent_engine_name + + # Check session state + agent_engine_name = self._session_state.get(_STATE_KEY_AGENT_ENGINE_NAME) + if agent_engine_name: + return agent_engine_name + + # Create new agent engine + logger.info("Creating new agent engine...") + client = self._get_client() + + agent_engine = await asyncio.to_thread(client.agent_engines.create) + agent_engine_name = agent_engine.api_resource.name + + # Store in session state for sharing + self._session_state[_STATE_KEY_AGENT_ENGINE_NAME] = agent_engine_name + logger.info("Created agent engine: %s", agent_engine_name) + + return agent_engine_name + + async def _get_sandbox(self) -> tuple[str, Any]: + """Get the sandbox, creating one if needed. + + Returns: + Tuple of (sandbox_name, sandbox_object). + """ + client = self._get_client() + + # Check if provided in constructor (BYOS mode) + if self._sandbox_name: + # Get sandbox object from name + sandbox = await asyncio.to_thread( + client.agent_engines.sandboxes.get, name=self._sandbox_name + ) + return self._sandbox_name, sandbox + + # Check session state for existing sandbox + sandbox_name = self._session_state.get(_STATE_KEY_SANDBOX_NAME) + if sandbox_name: + sandbox = await asyncio.to_thread( + client.agent_engines.sandboxes.get, name=sandbox_name + ) + return sandbox_name, sandbox + + # Ensure agent engine exists first + agent_engine_name = await self._ensure_agent_engine() + + # Create new sandbox + logger.info( + "Creating new sandbox under agent engine: %s", agent_engine_name + ) + + from vertexai import types + + operation = await asyncio.to_thread( + client.agent_engines.sandboxes.create, + spec={"computer_use_environment": {}}, + name=agent_engine_name, + config=types.CreateAgentEngineSandboxConfig( + display_name="adk_computer_use_sandbox" + ), + ) + + sandbox_name = operation.response.name + + # Store in session state for sharing + self._session_state[_STATE_KEY_SANDBOX_NAME] = sandbox_name + logger.info("Created sandbox: %s", sandbox_name) + + return sandbox_name, operation.response + + async def _get_access_token(self, sandbox_name: str) -> str: + """Get or refresh the access token for the sandbox. + + Args: + sandbox_name: The sandbox resource name. + + Returns: + The access token. + """ + # Check session state + token = self._session_state.get(_STATE_KEY_ACCESS_TOKEN) + expiry = self._session_state.get(_STATE_KEY_TOKEN_EXPIRY, 0) + if token and time.time() < expiry - _TOKEN_REFRESH_BUFFER: + return token + + # Generate new token + logger.debug("Generating new access token for sandbox: %s", sandbox_name) + client = self._get_client() + + token = await asyncio.to_thread( + client.agent_engines.sandboxes.generate_access_token, + service_account_email=self._service_account_email, + sandbox_id=sandbox_name, + timeout=_DEFAULT_TOKEN_TIMEOUT, + ) + + # Store in session state + self._session_state[_STATE_KEY_ACCESS_TOKEN] = token + self._session_state[_STATE_KEY_TOKEN_EXPIRY] = ( + time.time() + _DEFAULT_TOKEN_TIMEOUT + ) + + return token + + async def _get_sandbox_client(self) -> SandboxClient: + """Get a sandbox client, ensuring sandbox exists and token is valid. + + Returns: + A configured SandboxClient. + """ + sandbox_name, sandbox = await self._get_sandbox() + + try: + token = await self._get_access_token(sandbox_name) + except Exception as e: + # Token generation failed - clear cached token and retry + logger.warning("Token generation failed, clearing cache: %s", e) + self._session_state[_STATE_KEY_ACCESS_TOKEN] = None + self._session_state[_STATE_KEY_TOKEN_EXPIRY] = 0 + token = await self._get_access_token(sandbox_name) + + return SandboxClient( + vertexai_client=self._get_client(), + sandbox=sandbox, + access_token=token, + ) + + async def _get_current_state(self) -> ComputerState: + """Get the current state with screenshot and URL. + + Returns: + The current ComputerState. + """ + client = await self._get_sandbox_client() + screenshot = await client.get_screenshot() + url = await client.get_current_url() + return ComputerState(screenshot=screenshot, url=url) + + # ========================================================================= + # BaseComputer interface implementation + # ========================================================================= + + async def screen_size(self) -> tuple[int, int]: + """Returns the screen size of the environment.""" + return self._screen_size + + async def environment(self) -> ComputerEnvironment: + """Returns the environment type.""" + return ComputerEnvironment.ENVIRONMENT_BROWSER + + async def open_web_browser(self) -> ComputerState: + """Opens the web browser. + + For sandbox, the browser is always running. This is effectively a no-op + that returns the current state. + """ + return await self._get_current_state() + + async def click_at(self, x: int, y: int) -> ComputerState: + """Clicks at a specific x, y coordinate.""" + client = await self._get_sandbox_client() + await client.click_at(x, y) + return await self._get_current_state() + + async def hover_at(self, x: int, y: int) -> ComputerState: + """Hovers at a specific x, y coordinate.""" + client = await self._get_sandbox_client() + await client.hover_at(x, y) + return await self._get_current_state() + + async def type_text_at( + self, + x: int, + y: int, + text: str, + press_enter: bool = True, + clear_before_typing: bool = True, + ) -> ComputerState: + """Types text at a specific x, y coordinate.""" + client = await self._get_sandbox_client() + await client.type_text_at( + x=x, + y=y, + text=text, + press_enter=press_enter, + clear_before_typing=clear_before_typing, + ) + return await self._get_current_state() + + async def scroll_document( + self, + direction: Literal["up", "down", "left", "right"], + ) -> ComputerState: + """Scrolls the entire webpage.""" + client = await self._get_sandbox_client() + # Scroll at center of screen + center_x = self._screen_size[0] // 2 + center_y = self._screen_size[1] // 2 + # Use a reasonable default magnitude + magnitude = 400 + await client.scroll_at(center_x, center_y, direction, magnitude) + return await self._get_current_state() + + async def scroll_at( + self, + x: int, + y: int, + direction: Literal["up", "down", "left", "right"], + magnitude: int, + ) -> ComputerState: + """Scrolls at a specific coordinate.""" + client = await self._get_sandbox_client() + await client.scroll_at(x, y, direction, magnitude) + return await self._get_current_state() + + async def wait(self, seconds: int) -> ComputerState: + """Waits for n seconds.""" + await asyncio.sleep(seconds) + return await self._get_current_state() + + async def go_back(self) -> ComputerState: + """Navigates back in browser history.""" + client = await self._get_sandbox_client() + await client.go_back() + return await self._get_current_state() + + async def go_forward(self) -> ComputerState: + """Navigates forward in browser history.""" + client = await self._get_sandbox_client() + await client.go_forward() + return await self._get_current_state() + + async def search(self) -> ComputerState: + """Navigates to the search engine home page.""" + client = await self._get_sandbox_client() + await client.navigate(self._search_engine_url) + return await self._get_current_state() + + async def navigate(self, url: str) -> ComputerState: + """Navigates to a URL.""" + client = await self._get_sandbox_client() + await client.navigate(url) + return await self._get_current_state() + + async def key_combination(self, keys: list[str]) -> ComputerState: + """Presses a combination of keys.""" + client = await self._get_sandbox_client() + await client.key_combination(keys) + return await self._get_current_state() + + async def drag_and_drop( + self, + x: int, + y: int, + destination_x: int, + destination_y: int, + ) -> ComputerState: + """Drag and drop from one coordinate to another.""" + client = await self._get_sandbox_client() + await client.drag_and_drop(x, y, destination_x, destination_y) + return await self._get_current_state() + + async def current_state(self) -> ComputerState: + """Returns the current state.""" + return await self._get_current_state() + + async def initialize(self) -> None: + """Initialize the computer. + + This is a no-op for sandbox as provisioning happens lazily on first use. + """ + pass + + async def close(self) -> None: + """Cleanup resources. + + Note: Sandboxes are cleaned up via TTL by the sandbox service. + This method does not delete the sandbox to preserve state across + agent restarts within the TTL window. + """ + pass diff --git a/src/google/adk/memory/vertex_ai_memory_bank_service.py b/src/google/adk/memory/vertex_ai_memory_bank_service.py index 2218c8742b..0906e9a6ba 100644 --- a/src/google/adk/memory/vertex_ai_memory_bank_service.py +++ b/src/google/adk/memory/vertex_ai_memory_bank_service.py @@ -14,9 +14,10 @@ from __future__ import annotations +import asyncio from collections.abc import Mapping from collections.abc import Sequence -from datetime import datetime +import datetime from functools import lru_cache import logging from typing import Optional @@ -38,6 +39,10 @@ logger = logging.getLogger('google_adk.' + __name__) +# Strong references to fire-and-forget tasks to prevent garbage collection. +# See https://docs.python.org/3/library/asyncio-task.html#creating-tasks +_background_tasks: set[asyncio.Task] = set() + _GENERATE_MEMORIES_CONFIG_FALLBACK_KEYS = frozenset({ 'disable_consolidation', 'disable_memory_revisions', @@ -47,6 +52,7 @@ 'revision_expire_time', 'revision_labels', 'revision_ttl', + 'ttl', 'wait_for_completion', }) @@ -65,7 +71,34 @@ 'wait_for_completion', }) +_INGEST_EVENTS_CONFIG_FALLBACK_KEYS = frozenset({ + 'force_flush', + 'generation_trigger_config', + 'stream_id', +}) + _ENABLE_CONSOLIDATION_KEY = 'enable_consolidation' + + +def _should_use_generate_memories( + custom_metadata: Mapping[str, object] | None, +) -> bool: + """Returns True if custom_metadata contains keys only GenerateMemories supports. + + If any key in custom_metadata is recognized by GenerateMemories but NOT by + IngestEvents, the generate_memories API path is used. Otherwise + ingest_events is the default. + """ + if not custom_metadata: + return False + ingest_keys = _INGEST_EVENTS_CONFIG_FALLBACK_KEYS + generate_keys = _GENERATE_MEMORIES_CONFIG_FALLBACK_KEYS + for key in custom_metadata: + if key not in ingest_keys and key in generate_keys: + return True + return False + + # Vertex docs for GenerateMemoriesRequest.DirectMemoriesSource allow # at most 5 direct_memories per request. _MAX_DIRECT_MEMORIES_PER_GENERATE_CALL = 5 @@ -203,14 +236,35 @@ async def add_events_to_memory( session_id: str | None = None, custom_metadata: Mapping[str, object] | None = None, ) -> None: - """Adds events to Vertex AI Memory Bank via memories.generate. + """Adds events to Vertex AI Memory Bank. + + Uses ``memories.ingest_events`` by default. If ``custom_metadata`` contains + keys supported only by ``memories.generate`` (e.g. ``ttl``, + ``revision_ttl``, ``metadata``, ``wait_for_completion``), the generate path + is used instead. Args: app_name: The application name for memory scope. user_id: The user ID for memory scope. events: The events to process for memory generation. session_id: Optional session ID. Currently unused. - custom_metadata: Optional service-specific metadata for generate config. + custom_metadata: Optional service-specific metadata. Supported keys + depend on the API path chosen: + + **IngestEvents keys** (default path): + stream_id: Identifier for the event stream. + force_flush: If True, forces flushing buffered events. + generation_trigger_config: Configuration for triggering memory + generation, e.g. + ``{"generation_rule": {"idle_duration": "60s"}}``. + + **GenerateMemories keys** (used when any of these are present): + ttl: Time-to-live for generated memories, e.g. ``"6000s"``. + revision_ttl: Time-to-live for memory revisions. + metadata: A mapping of custom metadata key-value pairs. + wait_for_completion: Whether to wait for generation to complete. + disable_consolidation: Disable memory consolidation. + disable_memory_revisions: Disable memory revisions. """ _ = session_id await self._add_events_to_memory_from_events( @@ -260,30 +314,139 @@ async def _add_events_to_memory_from_events( events_to_process: Sequence[Event], custom_metadata: Mapping[str, object] | None = None, ) -> None: + # The generate_memories API is used only when custom_metadata contains + # keys exclusive to GenerateMemories. Otherwise, ingest_events is the + # default path, as its behavior is consistent with GenerateMemories + # (trigger immediately) and supports additional parameters like + # generation_trigger_config. + if _should_use_generate_memories(custom_metadata): + import vertexai + + direct_events = [] + for event in events_to_process: + if _should_filter_out_event(event.content): + continue + if event.content: + direct_events.append( + vertexai.types.GenerateMemoriesRequestDirectContentsSourceEvent( + content=event.content + ) + ) + if direct_events: + api_client = self._get_api_client() + config = _build_generate_memories_config(custom_metadata) + operation = await api_client.agent_engines.memories.generate( + name='reasoningEngines/' + self._agent_engine_id, + direct_contents_source=vertexai.types.GenerateMemoriesRequestDirectContentsSource( + events=direct_events + ), + scope={ + 'app_name': app_name, + 'user_id': user_id, + }, + config=config, + ) + logger.info('Generate memory response received.') + logger.debug('Generate memory response: %s', operation) + else: + logger.info('No events to add to memory.') + return + + await self._add_events_to_memory_via_ingest( + app_name=app_name, + user_id=user_id, + events_to_process=events_to_process, + custom_metadata=custom_metadata, + ) + + async def _add_events_to_memory_via_ingest( + self, + *, + app_name: str, + user_id: str, + events_to_process: Sequence[Event], + custom_metadata: Mapping[str, object] | None = None, + ) -> None: + """Adds events to Vertex AI Memory Bank via memories.ingest_events. + + Args: + app_name: The application name for memory scope. + user_id: The user ID for memory scope. + events_to_process: The events to process for memory ingestion. + custom_metadata: Optional service-specific metadata. Supported keys: + stream_id: Identifier for the event stream. + force_flush: If True, forces flushing buffered events (passed as + part of the ingest_events config). + generation_trigger_config: Configuration for triggering memory + generation, e.g. + ``{"generation_rule": {"idle_duration": "60s"}}``. + """ + import vertexai + direct_events = [] for event in events_to_process: if _should_filter_out_event(event.content): continue if event.content: - direct_events.append({ - 'content': event.content.model_dump(exclude_none=True, mode='json') - }) + event_time = None + if event.timestamp is not None: + event_time = datetime.datetime.fromtimestamp( + event.timestamp, tz=datetime.timezone.utc + ) + direct_events.append( + vertexai.types.IngestionDirectContentsSourceEvent( + content=event.content, + event_id=event.id, + event_time=event_time, + ) + ) + + api_client = self._get_api_client() + + stream_id = custom_metadata.get('stream_id') if custom_metadata else None + force_flush = ( + custom_metadata.get('force_flush') if custom_metadata else None + ) + generation_trigger_config = ( + custom_metadata.get('generation_trigger_config') + if custom_metadata + else None + ) + + request_kwargs: dict[str, object] = { + 'name': 'reasoningEngines/' + self._agent_engine_id, + 'scope': { + 'app_name': app_name, + 'user_id': user_id, + }, + } + # No-events requests are valid for trigger config updates, but + # won't trigger an events flush. if direct_events: - api_client = self._get_api_client() - config = _build_generate_memories_config(custom_metadata) - operation = await api_client.agent_engines.memories.generate( - name='reasoningEngines/' + self._agent_engine_id, - direct_contents_source={'events': direct_events}, - scope={ - 'app_name': app_name, - 'user_id': user_id, - }, - config=config, + request_kwargs['direct_contents_source'] = ( + vertexai.types.IngestionDirectContentsSource(events=direct_events) ) - logger.info('Generate memory response received.') - logger.debug('Generate memory response: %s', operation) - else: - logger.info('No events to add to memory.') + if stream_id: + request_kwargs['stream_id'] = stream_id + # force_flush is part of the ingest_events config, not a + # top-level request parameter. + config: dict[str, object] = {} + if force_flush is not None: + config['force_flush'] = force_flush + if config: + request_kwargs['config'] = config + if generation_trigger_config: + request_kwargs['generation_trigger_config'] = generation_trigger_config + + # Fire the ingest request without blocking. IngestEvents latency + # (~800ms to trigger) makes awaiting unnecessary outside debugging. + task = asyncio.create_task( + api_client.agent_engines.memories.ingest_events(**request_kwargs) + ) + _background_tasks.add(task) + task.add_done_callback(_background_tasks.discard) + task.add_done_callback(_log_ingest_task_error) + logger.info('Ingest events request triggered.') async def _add_memories_via_create( self, @@ -397,11 +560,18 @@ def _get_api_client(self) -> vertexai.AsyncClient: """ import vertexai - return vertexai.Client( - project=self._project, - location=self._location, - api_key=self._express_mode_api_key, - ).aio + if self._express_mode_api_key: + return vertexai.Client(api_key=self._express_mode_api_key).aio + return vertexai.Client(project=self._project, location=self._location).aio + + +def _log_ingest_task_error(task: asyncio.Task) -> None: + """Logs errors from fire-and-forget ingest_events tasks.""" + if task.cancelled(): + return + exception = task.exception() + if exception: + logger.error('Background ingest_events task failed: %s', exception) def _should_filter_out_event(content: types.Content) -> bool: @@ -409,7 +579,17 @@ def _should_filter_out_event(content: types.Content) -> bool: if not content or not content.parts: return True for part in content.parts: - if part.text or part.inline_data or part.file_data: + if ( + part.text + or part.inline_data + or part.file_data + or part.function_call + or part.function_response + or part.executable_code + or part.code_execution_result + or part.tool_call + or part.tool_response + ): return False return True @@ -744,7 +924,7 @@ def _to_vertex_metadata_value( return {'double_value': float(value)} if isinstance(value, str): return {'string_value': value} - if isinstance(value, datetime): + if isinstance(value, datetime.datetime): return {'timestamp_value': value} if isinstance(value, Mapping): if value.keys() <= { diff --git a/src/google/adk/models/anthropic_llm.py b/src/google/adk/models/anthropic_llm.py index 45c80b1595..a14c767f23 100644 --- a/src/google/adk/models/anthropic_llm.py +++ b/src/google/adk/models/anthropic_llm.py @@ -17,11 +17,13 @@ from __future__ import annotations import base64 +import copy import dataclasses from functools import cached_property import json import logging import os +import re from typing import Any from typing import AsyncGenerator from typing import Iterable @@ -145,6 +147,12 @@ def part_to_message_block( content = json.dumps(result) else: content = str(result) + elif response_data: + # Fallback: serialize the entire response dict as JSON so that tools + # returning arbitrary key structures (e.g. load_skill returning + # {"skill_name", "instructions", "frontmatter"}) are not silently + # dropped. + content = json.dumps(response_data) return anthropic_types.ToolResultBlockParam( tool_use_id=part.function_response.id or "", @@ -250,22 +258,60 @@ def message_to_generate_content_response( ) -def _update_type_string(value_dict: dict[str, Any]): - """Updates 'type' field to expected JSON schema format.""" - if "type" in value_dict: - value_dict["type"] = value_dict["type"].lower() - - if "items" in value_dict: - # 'type' field could exist for items as well, this would be the case if - # items represent primitive types. - _update_type_string(value_dict["items"]) - - if "properties" in value_dict["items"]: - # There could be properties as well on the items, especially if the items - # are complex object themselves. We recursively traverse each individual - # property as well and fix the "type" value. - for _, value in value_dict["items"]["properties"].items(): - _update_type_string(value) +def _update_type_string(value: Any): + """Lowercases nested JSON schema type strings for Anthropic compatibility.""" + if isinstance(value, list): + for item in value: + _update_type_string(item) + return + + if not isinstance(value, dict): + return + + schema_type = value.get("type") + if isinstance(schema_type, str): + value["type"] = schema_type.lower() + + for dict_key in ( + "$defs", + "defs", + "dependentSchemas", + "patternProperties", + "properties", + ): + child_dict = value.get(dict_key) + if isinstance(child_dict, dict): + for child_value in child_dict.values(): + _update_type_string(child_value) + + for single_key in ( + "additionalProperties", + "additional_properties", + "contains", + "else", + "if", + "items", + "not", + "propertyNames", + "then", + "unevaluatedProperties", + ): + child_value = value.get(single_key) + if isinstance(child_value, (dict, list)): + _update_type_string(child_value) + + for list_key in ( + "allOf", + "all_of", + "anyOf", + "any_of", + "oneOf", + "one_of", + "prefixItems", + ): + child_list = value.get(list_key) + if isinstance(child_list, list): + _update_type_string(child_list) def function_declaration_to_tool_param( @@ -276,16 +322,15 @@ def function_declaration_to_tool_param( # Use parameters_json_schema if available, otherwise convert from parameters if function_declaration.parameters_json_schema: - input_schema = function_declaration.parameters_json_schema + input_schema = copy.deepcopy(function_declaration.parameters_json_schema) + _update_type_string(input_schema) else: properties = {} required_params = [] if function_declaration.parameters: if function_declaration.parameters.properties: for key, value in function_declaration.parameters.properties.items(): - value_dict = value.model_dump(exclude_none=True) - _update_type_string(value_dict) - properties[key] = value_dict + properties[key] = value.model_dump(by_alias=True, exclude_none=True) if function_declaration.parameters.required: required_params = function_declaration.parameters.required @@ -295,6 +340,7 @@ def function_declaration_to_tool_param( } if required_params: input_schema["required"] = required_params + _update_type_string(input_schema) return anthropic_types.ToolParam( name=function_declaration.name, @@ -319,10 +365,23 @@ class AnthropicLlm(BaseLlm): def supported_models(cls) -> list[str]: return [r"claude-3-.*", r"claude-.*-4.*"] + def _resolve_model_name(self, model: Optional[str]) -> str: + if not model: + return self.model + if model.startswith("projects/"): + match = re.search( + r"projects/[^/]+/locations/[^/]+/(?:publishers/anthropic/models|endpoints)/([^/:]+)", + model, + ) + if match: + return match.group(1) + return model + @override async def generate_content_async( self, llm_request: LlmRequest, stream: bool = False ) -> AsyncGenerator[LlmResponse, None]: + model_to_use = self._resolve_model_name(llm_request.model) messages = [ content_to_message_param(content) for content in llm_request.contents or [] @@ -345,7 +404,7 @@ async def generate_content_async( if not stream: message = await self._anthropic_client.messages.create( - model=llm_request.model, + model=model_to_use, system=llm_request.config.system_instruction, messages=messages, tools=tools, @@ -371,8 +430,9 @@ async def _generate_content_streaming( Yields partial LlmResponse objects as content arrives, followed by a final aggregated LlmResponse with all content. """ + model_to_use = self._resolve_model_name(llm_request.model) raw_stream = await self._anthropic_client.messages.create( - model=llm_request.model, + model=model_to_use, system=llm_request.config.system_instruction, messages=messages, tools=tools, @@ -466,17 +526,26 @@ class Claude(AnthropicLlm): @cached_property @override def _anthropic_client(self) -> AsyncAnthropicVertex: - if ( - "GOOGLE_CLOUD_PROJECT" not in os.environ - or "GOOGLE_CLOUD_LOCATION" not in os.environ - ): + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + location = os.environ.get("GOOGLE_CLOUD_LOCATION") + + if self.model.startswith("projects/"): + match = re.search( + r"projects/([^/]+)/locations/([^/]+)/", + self.model, + ) + if match: + project_id = match.group(1) + location = match.group(2) + + if not project_id or not location: raise ValueError( "GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION must be set for using" " Anthropic on Vertex." ) return AsyncAnthropicVertex( - project_id=os.environ["GOOGLE_CLOUD_PROJECT"], - region=os.environ["GOOGLE_CLOUD_LOCATION"], + project_id=project_id, + region=location, default_headers=get_tracking_headers(), ) diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index da508891d4..3eb2fe5b3f 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -20,6 +20,7 @@ from google.genai import types +from ..utils import model_name_utils from ..utils.content_utils import filter_audio_parts from ..utils.context_utils import Aclosing from ..utils.variant_utils import GoogleLLMVariant @@ -80,11 +81,9 @@ async def send_history(self, history: list[types.Content]): if contents: logger.debug('Sending history to live connection: %s', contents) - await self._gemini_session.send( - input=types.LiveClientContent( - turns=contents, - turn_complete=contents[-1].role == 'user', - ), + await self._gemini_session.send_client_content( + turns=contents, + turn_complete=contents[-1].role == 'user', ) else: logger.info('no content is sent') @@ -99,25 +98,31 @@ async def send_content(self, content: types.Content): Args: content: The content to send to the model. """ - assert content.parts if content.parts[0].function_response: # All parts have to be function responses. function_responses = [part.function_response for part in content.parts] logger.debug('Sending LLM function response: %s', function_responses) - await self._gemini_session.send( - input=types.LiveClientToolResponse( - function_responses=function_responses - ), + await self._gemini_session.send_tool_response( + function_responses=function_responses ) else: logger.debug('Sending LLM new content %s', content) - await self._gemini_session.send( - input=types.LiveClientContent( - turns=[content], - turn_complete=True, - ) + is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( + self._model_version ) + if is_gemini_31 and len(content.parts) == 1 and content.parts[0].text: + logger.debug('Using send_realtime_input for Gemini 3.1 text input') + await self._gemini_session.send_realtime_input( + text=content.parts[0].text + ) + else: + await self._gemini_session.send( + input=types.LiveClientContent( + turns=[content], + turn_complete=True, + ) + ) async def send_realtime(self, input: RealtimeInput): """Sends a chunk of audio or a frame of video to the model in realtime. @@ -128,7 +133,22 @@ async def send_realtime(self, input: RealtimeInput): if isinstance(input, types.Blob): # The blob is binary and is very large. So let's not log it. logger.debug('Sending LLM Blob.') - await self._gemini_session.send_realtime_input(media=input) + is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( + self._model_version + ) + if is_gemini_31: + if input.mime_type and input.mime_type.startswith('audio/'): + await self._gemini_session.send_realtime_input(audio=input) + elif input.mime_type and input.mime_type.startswith('image/'): + await self._gemini_session.send_realtime_input(video=input) + else: + logger.warning( + 'Blob not sent. Unknown or empty mime type for' + ' send_realtime_input: %s', + input.mime_type, + ) + else: + await self._gemini_session.send_realtime_input(media=input) elif isinstance(input, types.ActivityStart): logger.debug('Sending LLM activity start signal.') @@ -156,6 +176,7 @@ def __build_full_text_response(self, text: str): role='model', parts=[types.Part.from_text(text=text)], ), + live_session_id=self._gemini_session.session_id, ) async def receive(self) -> AsyncGenerator[LlmResponse, None]: @@ -166,16 +187,19 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: """ text = '' + tool_call_parts = [] async with Aclosing(self._gemini_session.receive()) as agen: # TODO(b/440101573): Reuse StreamingResponseAggregator to accumulate # partial content and emit responses as needed. async for message in agen: logger.debug('Got LLM Live message: %s', message) + live_session_id = self._gemini_session.session_id if message.usage_metadata: # Tracks token usage data per model. yield LlmResponse( usage_metadata=message.usage_metadata, model_version=self._model_version, + live_session_id=live_session_id, ) if message.server_content: content = message.server_content.model_turn @@ -190,6 +214,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: grounding_metadata=message.server_content.grounding_metadata, interrupted=message.server_content.interrupted, model_version=self._model_version, + live_session_id=live_session_id, ) if content and content.parts: @@ -197,6 +222,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: content=content, interrupted=message.server_content.interrupted, model_version=self._model_version, + live_session_id=live_session_id, ) # grounding_metadata is yielded again at turn_complete, # so avoid duplicating it here if turn_complete is true. @@ -227,6 +253,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=True, model_version=self._model_version, + live_session_id=live_session_id, ) # finished=True and partial transcription may happen in the same # message. @@ -238,6 +265,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=False, model_version=self._model_version, + live_session_id=live_session_id, ) self._input_transcription_text = '' if message.server_content.output_transcription: @@ -252,6 +280,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=True, model_version=self._model_version, + live_session_id=live_session_id, ) if message.server_content.output_transcription.finished: yield LlmResponse( @@ -261,6 +290,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=False, model_version=self._model_version, + live_session_id=live_session_id, ) self._output_transcription_text = '' # The Gemini API might not send a transcription finished signal. @@ -279,6 +309,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=False, model_version=self._model_version, + live_session_id=live_session_id, ) self._input_transcription_text = '' if self._output_transcription_text: @@ -289,17 +320,27 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: ), partial=False, model_version=self._model_version, + live_session_id=live_session_id, ) self._output_transcription_text = '' if message.server_content.turn_complete: if text: yield self.__build_full_text_response(text) text = '' + if tool_call_parts: + logger.debug('Returning aggregated tool_call_parts') + yield LlmResponse( + content=types.Content(role='model', parts=tool_call_parts), + model_version=self._model_version, + live_session_id=live_session_id, + ) + tool_call_parts = [] yield LlmResponse( turn_complete=True, interrupted=message.server_content.interrupted, grounding_metadata=message.server_content.grounding_metadata, model_version=self._model_version, + live_session_id=live_session_id, ) break # in case of empty content or parts, we still surface it @@ -314,27 +355,41 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: yield LlmResponse( interrupted=message.server_content.interrupted, model_version=self._model_version, + live_session_id=live_session_id, ) if message.tool_call: + logger.debug('Received tool call: %s', message.tool_call) if text: yield self.__build_full_text_response(text) text = '' - parts = [ + tool_call_parts.extend([ types.Part(function_call=function_call) for function_call in message.tool_call.function_calls - ] - yield LlmResponse( - content=types.Content(role='model', parts=parts), - model_version=self._model_version, - ) + ]) if message.session_resumption_update: logger.debug('Received session resumption message: %s', message) yield ( LlmResponse( live_session_resumption_update=message.session_resumption_update, model_version=self._model_version, + live_session_id=live_session_id, ) ) + if message.go_away: + logger.debug('Received GoAway message: %s', message.go_away) + yield LlmResponse( + go_away=message.go_away, + model_version=self._model_version, + live_session_id=live_session_id, + ) + + if tool_call_parts: + logger.debug('Exited loop with pending tool_call_parts') + yield LlmResponse( + content=types.Content(role='model', parts=tool_call_parts), + model_version=self._model_version, + live_session_id=self._gemini_session.session_id, + ) async def close(self): """Closes the llm server connection.""" diff --git a/src/google/adk/models/gemma_llm.py b/src/google/adk/models/gemma_llm.py index f333bab241..7822d38beb 100644 --- a/src/google/adk/models/gemma_llm.py +++ b/src/google/adk/models/gemma_llm.py @@ -163,8 +163,8 @@ class GemmaFunctionCallModel(BaseModel): class Gemma(GemmaFunctionCallingMixin, Gemini): """Integration for Gemma models exposed via the Gemini API. - Only Gemma 3 models are supported at this time. For agentic use cases, - use of gemma-3-27b-it and gemma-3-12b-it are strongly recommended. + For agentic use cases, use of gemma-3-27b-it, gemma-3-12b-it, and + gemma-4-31b-it are strongly recommended. For full documentation, see: https://ai.google.dev/gemma/docs/core/ @@ -205,7 +205,7 @@ def supported_models(cls) -> list[str]: """ return [ - r'gemma-3.*', + r'gemma-.*', ] @cached_property diff --git a/src/google/adk/models/google_llm.py b/src/google/adk/models/google_llm.py index 23c9c27810..098388ef7e 100644 --- a/src/google/adk/models/google_llm.py +++ b/src/google/adk/models/google_llm.py @@ -54,7 +54,7 @@ _RESOURCE_EXHAUSTED_POSSIBLE_FIX_MESSAGE = """ On how to mitigate this issue, please refer to: -https://google.github.io/adk-docs/agents/models/#error-code-429-resource_exhausted +https://google.github.io/adk-docs/agents/models/google-gemini/#error-code-429-resource_exhausted """ @@ -304,13 +304,19 @@ def api_client(self) -> Client: """ from google.genai import Client - return Client( - http_options=types.HttpOptions( + base_url = self.base_url + + kwargs: dict[str, Any] = { + 'http_options': types.HttpOptions( headers=self._tracking_headers(), retry_options=self.retry_options, - base_url=self.base_url, + base_url=base_url, ) - ) + } + if self.model.startswith('projects/'): + kwargs['vertexai'] = True + + return Client(**kwargs) @cached_property def _api_backend(self) -> GoogleLLMVariant: @@ -336,11 +342,19 @@ def _live_api_version(self) -> str: def _live_api_client(self) -> Client: from google.genai import Client - return Client( - http_options=types.HttpOptions( - headers=self._tracking_headers(), api_version=self._live_api_version + base_url = self.base_url + + kwargs: dict[str, Any] = { + 'http_options': types.HttpOptions( + headers=self._tracking_headers(), + api_version=self._live_api_version, + base_url=base_url, ) - ) + } + if self.model.startswith('projects/'): + kwargs['vertexai'] = True + + return Client(**kwargs) @contextlib.asynccontextmanager async def connect(self, llm_request: LlmRequest) -> BaseLlmConnection: @@ -418,8 +432,8 @@ async def _adapt_computer_use_tool(self, llm_request: LlmRequest) -> None: from ..tools.computer_use.computer_use_toolset import ComputerUseToolset async def convert_wait_to_wait_5_seconds(wait_func): - async def wait_5_seconds(): - return await wait_func(5) + async def wait_5_seconds(tool_context=None): + return await wait_func(5, tool_context=tool_context) return wait_5_seconds diff --git a/src/google/adk/models/interactions_utils.py b/src/google/adk/models/interactions_utils.py index add8da0c54..be1c2a6ab2 100644 --- a/src/google/adk/models/interactions_utils.py +++ b/src/google/adk/models/interactions_utils.py @@ -56,6 +56,36 @@ _NEW_LINE = '\n' +def _extract_stream_interaction_id( + event: 'InteractionSSEEvent', +) -> Optional[str]: + """Extract the interaction ID from an Interactions SSE event. + + Different SSE lifecycle events expose the interaction ID on different + attributes. We normalize them here so streamed ADK responses consistently + carry the chain identifier needed for follow-up tool calls. Older + google-genai builds may also yield a legacy ``interaction`` event with a + top-level ``id``. + """ + from google.genai._interactions.types.interaction_complete_event import InteractionCompleteEvent + from google.genai._interactions.types.interaction_start_event import InteractionStartEvent + from google.genai._interactions.types.interaction_status_update import InteractionStatusUpdate + + if isinstance(event, InteractionStatusUpdate): + return event.interaction_id + + if isinstance(event, (InteractionStartEvent, InteractionCompleteEvent)): + return event.interaction.id + + try: + if event.event_type == 'interaction': + return event.id + except AttributeError: + pass + + return None + + def convert_part_to_interaction_content(part: types.Part) -> Optional[dict]: """Convert a types.Part to an interaction content dict. @@ -1013,9 +1043,9 @@ async def generate_content_via_interactions( # Log the streaming event logger.debug(build_interactions_event_log(event)) - # Extract interaction ID from event if available - if hasattr(event, 'id') and event.id: - current_interaction_id = event.id + interaction_id = _extract_stream_interaction_id(event) + if interaction_id: + current_interaction_id = interaction_id llm_response = convert_interaction_event_to_llm_response( event, aggregated_parts, current_interaction_id ) diff --git a/src/google/adk/models/lite_llm.py b/src/google/adk/models/lite_llm.py index ed265abe9f..7d13696c96 100644 --- a/src/google/adk/models/lite_llm.py +++ b/src/google/adk/models/lite_llm.py @@ -15,6 +15,7 @@ from __future__ import annotations import base64 +import binascii import copy import importlib.util import json @@ -143,6 +144,11 @@ "before a response was recorded)." ) +# Separator LiteLLM uses to embed thought_signature in tool call IDs. +# Gemini's thoughtSignature requirement is documented here: +# https://ai.google.dev/gemini-api/docs/thought-signatures +_THOUGHT_SIGNATURE_SEPARATOR = "__thought__" + _LITELLM_IMPORTED = False _LITELLM_GLOBAL_SYMBOLS = ( "ChatCompletionAssistantMessage", @@ -378,8 +384,42 @@ def _iter_reasoning_texts(reasoning_value: Any) -> Iterable[str]: yield str(reasoning_value) +def _is_thinking_blocks_format(reasoning_value: Any) -> bool: + """Returns True if reasoning_value is Anthropic thinking_blocks format. + + Anthropic thinking_blocks is a list of dicts, each with 'type', 'thinking', + and 'signature' keys. + """ + if not isinstance(reasoning_value, list) or not reasoning_value: + return False + first = reasoning_value[0] + return isinstance(first, dict) and "signature" in first + + def _convert_reasoning_value_to_parts(reasoning_value: Any) -> List[types.Part]: - """Converts provider reasoning payloads into Gemini thought parts.""" + """Converts provider reasoning payloads into Gemini thought parts. + + Handles Anthropic thinking_blocks (list of dicts with type/thinking/signature) + by preserving the signature on each part's thought_signature field. This is + required for Anthropic to maintain thinking across tool call boundaries. + """ + if _is_thinking_blocks_format(reasoning_value): + parts: List[types.Part] = [] + for block in reasoning_value: + if not isinstance(block, dict): + continue + block_type = block.get("type", "") + if block_type == "redacted": + continue + thinking_text = block.get("thinking", "") + signature = block.get("signature", "") + if not thinking_text: + continue + part = types.Part(text=thinking_text, thought=True) + if signature: + part.thought_signature = signature.encode("utf-8") + parts.append(part) + return parts return [ types.Part(text=text, thought=True) for text in _iter_reasoning_texts(reasoning_value) @@ -390,12 +430,19 @@ def _convert_reasoning_value_to_parts(reasoning_value: Any) -> List[types.Part]: def _extract_reasoning_value(message: Message | Delta | None) -> Any: """Fetches the reasoning payload from a LiteLLM message. - Checks for both 'reasoning_content' (LiteLLM standard, used by Azure/Foundry, - Ollama via LiteLLM) and 'reasoning' (used by LM Studio, vLLM). - Prioritizes 'reasoning_content' when both are present. + Checks for 'thinking_blocks' (Anthropic structured format with signatures), + 'reasoning_content' (LiteLLM standard, used by Azure/Foundry, Ollama via + LiteLLM) and 'reasoning' (used by LM Studio, vLLM). + Prioritizes 'thinking_blocks' when present (Anthropic models), then + 'reasoning_content', then 'reasoning'. """ if message is None: return None + # Anthropic models return thinking_blocks with type/thinking/signature fields. + # This must be preserved to maintain thinking across tool call boundaries. + thinking_blocks = message.get("thinking_blocks") + if thinking_blocks is not None: + return thinking_blocks reasoning_content = message.get("reasoning_content") if reasoning_content is not None: return reasoning_content @@ -602,6 +649,27 @@ def _extract_cached_prompt_tokens(usage: Any) -> int: return 0 +def _decode_thought_signature(value: Any) -> Optional[bytes]: + """Safely decodes a thought_signature value to bytes. + + Args: + value: A base64 string or raw bytes thought_signature. + + Returns: + The decoded bytes, or None if decoding fails. + """ + if isinstance(value, bytes): + return value + try: + return base64.b64decode(value, validate=True) + except (binascii.Error, TypeError, ValueError): + logger.debug( + "Failed to decode thought_signature of type %s.", + type(value).__name__, + ) + return None + + def _extract_reasoning_tokens(usage: Any) -> int: """Extracts reasoning tokens from LiteLLM usage. @@ -637,6 +705,64 @@ def _extract_reasoning_tokens(usage: Any) -> int: return 0 +def _extract_thought_signature_from_tool_call( + tool_call: ChatCompletionMessageToolCall, +) -> Optional[bytes]: + """Extracts thought_signature from a litellm tool call if present. + + Gemini thinking models attach a thought_signature to function call parts. + See https://ai.google.dev/gemini-api/docs/thought-signatures. + This signature may appear in several locations depending on the + provider path: + 1. extra_content.google.thought_signature (OpenAI-compatible API). + 2. provider_specific_fields on the tool call or function (Vertex). + 3. Embedded in the tool call ID via __thought__ separator. + + Args: + tool_call: A litellm tool call object. + + Returns: + The thought_signature as bytes, or None if not present. + """ + # Check extra_content.google.thought_signature (OpenAI format) + extra_content = tool_call.get("extra_content") + if isinstance(extra_content, dict): + google_fields = extra_content.get("google") + if isinstance(google_fields, dict): + signature = google_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check provider_specific_fields on the tool call + provider_fields = tool_call.get("provider_specific_fields") + if isinstance(provider_fields, dict): + signature = provider_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check provider_specific_fields on the function + function = tool_call.get("function") + if function: + func_provider_fields = None + if isinstance(function, dict): + func_provider_fields = function.get("provider_specific_fields") + elif hasattr(function, "provider_specific_fields"): + func_provider_fields = function.provider_specific_fields + if isinstance(func_provider_fields, dict): + signature = func_provider_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check if thought signature is embedded in the tool call ID + tool_call_id = tool_call.get("id") or "" + if _THOUGHT_SIGNATURE_SEPARATOR in tool_call_id: + parts = tool_call_id.split(_THOUGHT_SIGNATURE_SEPARATOR, 1) + if len(parts) == 2: + return _decode_thought_signature(parts[1]) + + return None + + async def _content_to_message_param( content: types.Content, *, @@ -706,16 +832,31 @@ async def _content_to_message_param( reasoning_parts: list[types.Part] = [] for part in content.parts: if part.function_call: - tool_calls.append( - ChatCompletionAssistantToolCall( - type="function", - id=part.function_call.id, - function=Function( - name=part.function_call.name, - arguments=_safe_json_serialize(part.function_call.args), - ), - ) - ) + tool_call_id = part.function_call.id or "" + tool_call_dict: ChatCompletionAssistantToolCall = { + "type": "function", + "id": tool_call_id, + "function": { + "name": part.function_call.name, + "arguments": _safe_json_serialize(part.function_call.args), + }, + } + # Preserve thought_signature for Gemini thinking models. + # LiteLLM's Gemini prompt conversion reads provider_specific_fields, + # while the OpenAI-compatible Gemini endpoint path expects the + # extra_content.google.thought_signature payload to survive. + # See https://ai.google.dev/gemini-api/docs/thought-signatures. + if part.thought_signature: + sig = part.thought_signature + if isinstance(sig, bytes): + sig = base64.b64encode(sig).decode("utf-8") + tool_call_dict["provider_specific_fields"] = { + "thought_signature": sig + } + tool_call_dict["extra_content"] = { + "google": {"thought_signature": sig} + } + tool_calls.append(tool_call_dict) elif part.thought: reasoning_parts.append(part) else: @@ -735,6 +876,30 @@ async def _content_to_message_param( else final_content ) + # For Anthropic models, rebuild thinking_blocks with signatures so that + # thinking is preserved across tool call boundaries. Without this, + # Anthropic silently drops thinking after the first turn. + if model and _is_anthropic_model(model) and reasoning_parts: + thinking_blocks = [] + for part in reasoning_parts: + if part.text and part.thought_signature: + sig = part.thought_signature + if isinstance(sig, bytes): + sig = sig.decode("utf-8") + thinking_blocks.append({ + "type": "thinking", + "thinking": part.text, + "signature": sig, + }) + if thinking_blocks: + msg = ChatCompletionAssistantMessage( + role=role, + content=final_content, + tool_calls=tool_calls or None, + ) + msg["thinking_blocks"] = thinking_blocks # type: ignore[typeddict-unknown-key] + return msg + reasoning_texts = [] for part in reasoning_parts: if part.text: @@ -1524,11 +1689,14 @@ def _message_to_generate_content_response( if tool_calls: for tool_call in tool_calls: if tool_call.type == "function": + thought_signature = _extract_thought_signature_from_tool_call(tool_call) part = types.Part.from_function_call( name=tool_call.function.name, args=json.loads(tool_call.function.arguments or "{}"), ) part.function_call.id = tool_call.id + if thought_signature: + part.thought_signature = thought_signature parts.append(part) return LlmResponse( @@ -1840,6 +2008,31 @@ def _build_request_log(req: LlmRequest) -> str: """ +def _is_anthropic_model(model_string: str) -> bool: + """Check if the model is an Anthropic Claude model accessed via LiteLLM. + + Detects models using the anthropic/ provider prefix, bedrock/ models that + contain 'anthropic' or 'claude', and vertex_ai/ models that contain 'claude'. + + Args: + model_string: A LiteLLM model string (e.g., "anthropic/claude-4-sonnet", + "bedrock/anthropic.claude-3-5-sonnet", "vertex_ai/claude-4-sonnet") + + Returns: + True if it's an Anthropic Claude model, False otherwise. + """ + lower = model_string.lower() + if lower.startswith("anthropic/"): + return True + if lower.startswith("bedrock/"): + model_part = lower.split("/", 1)[1] + return "anthropic" in model_part or "claude" in model_part + if lower.startswith("vertex_ai/"): + model_part = lower.split("/", 1)[1] + return "claude" in model_part + return False + + def _is_litellm_vertex_model(model_string: str) -> bool: """Check if the model is a Vertex AI model accessed via LiteLLM. diff --git a/src/google/adk/models/llm_response.py b/src/google/adk/models/llm_response.py index 754e5abcfb..69c299ce7e 100644 --- a/src/google/adk/models/llm_response.py +++ b/src/google/adk/models/llm_response.py @@ -110,6 +110,12 @@ class LlmResponse(BaseModel): ] = None """The session resumption update of the LlmResponse""" + live_session_id: Optional[str] = None + """The session ID of the Live session.""" + + go_away: Optional[types.LiveServerGoAway] = None + """The GoAway signal from the Live model.""" + input_transcription: Optional[types.Transcription] = None """Audio transcription of user input.""" diff --git a/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py b/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py index 8f0c7373ba..e9b82cdd50 100644 --- a/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py +++ b/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py @@ -15,6 +15,7 @@ from __future__ import annotations import asyncio +import contextvars import logging from typing import Any from typing import Optional @@ -298,7 +299,8 @@ def run_gepa(): _logger.info("Running the GEPA optimizer...") - gepa_results = await loop.run_in_executor(None, run_gepa) + ctx = contextvars.copy_context() + gepa_results = await loop.run_in_executor(None, lambda: ctx.run(run_gepa)) _logger.info("GEPA optimization finished. Preparing final results...") diff --git a/src/google/adk/plugins/base_plugin.py b/src/google/adk/plugins/base_plugin.py index 3639f61aa2..54bfab2ed2 100644 --- a/src/google/adk/plugins/base_plugin.py +++ b/src/google/adk/plugins/base_plugin.py @@ -155,10 +155,10 @@ async def before_run_callback( async def on_event_callback( self, *, invocation_context: InvocationContext, event: Event ) -> Optional[Event]: - """Callback executed after an event is yielded from runner. + """Callback executed when the runner produces an event. - This is the ideal place to make modification to the event before the event - is handled by the underlying agent app. + This is the ideal place to modify the event before it is persisted to the + session service and yielded to the caller. Args: invocation_context: The context for the entire invocation. diff --git a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py index bdca04820d..8c9a7e188d 100644 --- a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py +++ b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py @@ -67,6 +67,7 @@ from ..models.llm_response import LlmResponse from ..tools.base_tool import BaseTool from ..tools.tool_context import ToolContext +from ..utils._telemetry_context import _is_visual_builder from ..version import __version__ from .base_plugin import BasePlugin @@ -167,16 +168,57 @@ def _format_content( return " | ".join(parts), truncated -def _get_tool_origin(tool: "BaseTool") -> str: +def _find_transfer_target(agent, agent_name: str): + """Find a transfer target agent by name in the accessible agent tree. + + Searches the current agent's sub-agents, parent, and peer agents + to locate the transfer target. + + Args: + agent: The current agent executing the transfer. + agent_name: The name of the transfer target to find. + + Returns: + The matching agent object, or None if not found. + """ + for sub in getattr(agent, "sub_agents", []): + if sub.name == agent_name: + return sub + parent = getattr(agent, "parent_agent", None) + if parent is not None and parent.name == agent_name: + return parent + if parent is not None: + for peer in getattr(parent, "sub_agents", []): + if peer.name == agent_name and peer.name != agent.name: + return peer + return None + + +def _get_tool_origin( + tool: "BaseTool", + tool_args: Optional[dict[str, Any]] = None, + tool_context: Optional["ToolContext"] = None, +) -> str: """Returns the provenance category of a tool. Uses lazy imports to avoid circular dependencies. + For ``TransferToAgentTool`` the classification is **call-level**: when + *tool_args* and *tool_context* are supplied the selected + ``agent_name`` is resolved against the agent tree so that transfers + to a ``RemoteA2aAgent`` are labelled ``TRANSFER_A2A`` rather than + the generic ``TRANSFER_AGENT``. + Args: tool: The tool instance. + tool_args: Optional tool arguments, used for call-level classification of + TransferToAgentTool. + tool_context: Optional tool context, used to access the agent tree for + TransferToAgentTool classification. Returns: - One of LOCAL, MCP, A2A, SUB_AGENT, TRANSFER_AGENT, or UNKNOWN. + One of LOCAL, MCP, A2A, SUB_AGENT, TRANSFER_AGENT, + TRANSFER_A2A, or UNKNOWN. """ # Import lazily to avoid circular dependencies. # pylint: disable=g-import-not-at-top @@ -198,6 +240,15 @@ def _get_tool_origin(tool: "BaseTool") -> str: if McpTool is not None and isinstance(tool, McpTool): return "MCP" if isinstance(tool, TransferToAgentTool): + if RemoteA2aAgent is not None and tool_args and tool_context: + agent_name = tool_args.get("agent_name") + if agent_name: + target = _find_transfer_target( + tool_context._invocation_context.agent, + agent_name, + ) + if target is not None and isinstance(target, RemoteA2aAgent): + return "TRANSFER_A2A" return "TRANSFER_AGENT" if isinstance(tool, AgentTool): if RemoteA2aAgent is not None and isinstance(tool.agent, RemoteA2aAgent): @@ -208,11 +259,24 @@ def _get_tool_origin(tool: "BaseTool") -> str: return "UNKNOWN" +_SENSITIVE_KEYS = frozenset({ + "client_secret", + "access_token", + "refresh_token", + "id_token", + "api_key", + "password", +}) + + def _recursive_smart_truncate( obj: Any, max_len: int, seen: Optional[set[int]] = None ) -> tuple[Any, bool]: """Recursively truncates string values within a dict or list. + Redacts sensitive keys corresponding to OAuth tokens and secrets + prior to serialization into BigQuery JSON strings. + Args: obj: The object to truncate. max_len: Maximum length for string values. @@ -251,6 +315,12 @@ def _recursive_smart_truncate( # but explicit loop is fine for clarity given recursive nature. new_dict = {} for k, v in obj.items(): + if isinstance(k, str): + k_lower = k.lower() + if k_lower in _SENSITIVE_KEYS or k_lower.startswith("temp:"): + new_dict[k] = "[REDACTED]" + continue + val, trunc = _recursive_smart_truncate(v, max_len, seen) if trunc: truncated_any = True @@ -480,6 +550,16 @@ class BigQueryLoggerConfig: shutdown_timeout: Max time to wait for shutdown. queue_max_size: Max size of the in-memory queue. content_formatter: Optional custom formatter for content. + gcs_bucket_name: GCS bucket for offloading large content. + connection_id: BigQuery connection ID for ObjectRef columns. + log_session_metadata: Whether to log session metadata. + custom_tags: Static custom tags to attach to every event. + auto_schema_upgrade: Whether to auto-add new columns on schema evolution. + create_views: Whether to auto-create per-event-type views. + view_prefix: Prefix for auto-created view names. Default ``"v"`` produces + views like ``v_llm_request``. Set a distinct prefix per table when + multiple plugin instances share one dataset to avoid view-name + collisions. """ enabled: bool = True @@ -519,6 +599,12 @@ class BigQueryLoggerConfig: # Automatically create per-event-type BigQuery views that unnest # JSON columns into typed, queryable columns. create_views: bool = True + # Prefix for auto-created per-event-type view names. + # Default "v" produces views like ``v_llm_request``. Set a distinct + # prefix per table when multiple plugin instances share one dataset + # to avoid view-name collisions (e.g. ``"v_staging"`` → + # ``v_staging_llm_request``). + view_prefix: str = "v" # ============================================================================== @@ -887,6 +973,9 @@ def __init__( self.flush_interval = flush_interval self.retry_config = retry_config self.shutdown_timeout = shutdown_timeout + + self._visual_builder = _is_visual_builder.get() + self._queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue( maxsize=queue_max_size ) @@ -1057,9 +1146,15 @@ async def _write_rows_with_retry(self, rows: list[dict[str, Any]]) -> None: serialized_schema = self.arrow_schema.serialize().to_pybytes() serialized_batch = arrow_batch.serialize().to_pybytes() + trace_id_prefix = ( + "google-adk-bq-logger-visual-builder" + if self._visual_builder + else "google-adk-bq-logger" + ) + req = bq_storage_types.AppendRowsRequest( write_stream=self.write_stream, - trace_id=f"google-adk-bq-logger/{__version__}", + trace_id=f"{trace_id_prefix}/{__version__}", ) req.arrow_rows.writer_schema.serialized_schema = serialized_schema req.arrow_rows.rows.serialized_record_batch = serialized_batch @@ -1780,6 +1875,25 @@ def _get_events_schema() -> list[bigquery.SchemaField]: "JSON_VALUE(content, '$.tool') AS tool_name", "JSON_QUERY(content, '$.args') AS tool_args", ], + "A2A_INTERACTION": [ + "content AS response_content", + ( + "JSON_VALUE(attributes," + " '$.a2a_metadata.\"a2a:task_id\"') AS a2a_task_id" + ), + ( + "JSON_VALUE(attributes," + " '$.a2a_metadata.\"a2a:context_id\"') AS a2a_context_id" + ), + ( + "JSON_QUERY(attributes," + " '$.a2a_metadata.\"a2a:request\"') AS a2a_request" + ), + ( + "JSON_QUERY(attributes," + " '$.a2a_metadata.\"a2a:response\"') AS a2a_response" + ), + ], } _VIEW_SQL_TEMPLATE = """\ @@ -1859,9 +1973,14 @@ def __init__( else: logger.warning(f"Unknown configuration parameter: {key}") + if not self.config.view_prefix: + raise ValueError("view_prefix must be a non-empty string.") + self.table_id = table_id or self.config.table_id self.location = location + self._visual_builder = _is_visual_builder.get() + self._started = False self._startup_error: Optional[Exception] = None self._is_shutting_down = False @@ -1992,9 +2111,12 @@ def get_credentials(): if quota_project_id else None ) - client_info = gapic_client_info.ClientInfo( - user_agent=f"google-adk-bq-logger/{__version__}" - ) + + user_agents = [f"google-adk-bq-logger/{__version__}"] + if self._visual_builder: + user_agents.append(f"google-adk-visual-builder/{__version__}") + + client_info = gapic_client_info.ClientInfo(user_agent=" ".join(user_agents)) write_client = BigQueryWriteAsyncClient( credentials=creds, @@ -2295,7 +2417,7 @@ def _create_analytics_views(self) -> None: Errors are logged but never raised. """ for event_type, extra_cols in _EVENT_VIEW_DEFS.items(): - view_name = "v_" + event_type.lower() + view_name = self.config.view_prefix + "_" + event_type.lower() columns = ",\n ".join(list(_VIEW_COMMON_COLUMNS) + extra_cols) sql = _VIEW_SQL_TEMPLATE.format( project=self.project_id, @@ -2499,17 +2621,34 @@ def _resolve_ids( ) -> tuple[Optional[str], Optional[str], Optional[str]]: """Resolves trace_id, span_id, and parent_span_id for a log row. + Resolution rules: + + * **trace_id** — ambient OTel trace wins (the plugin stack already + shares the ambient trace when initialised from an ambient span, + so in practice they agree). + * **span_id / parent_span_id** — the plugin's internal span stack + (``TraceManager``) is the preferred source. Ambient OTel spans + are only used as a fallback when the plugin stack has no span. + This ensures every ``parent_span_id`` in BigQuery references a + ``span_id`` that is also logged to BigQuery, producing a + self-consistent execution tree. + * **Explicit overrides** (``EventData``) always win last — they + are set by post-pop callbacks that have already captured the + correct plugin-stack values before the pop. + Priority order (highest first): - 1. Explicit ``EventData`` overrides (needed for post-pop callbacks). - 2. Ambient OTel span (the framework's ``start_as_current_span``). - When present this aligns BQ rows with Cloud Trace / o11y. - 3. Plugin's internal span stack (``TraceManager``). + 1. Explicit ``EventData`` overrides. + 2. Plugin's internal span stack (``TraceManager``) for + ``span_id`` / ``parent_span_id``. + 3. Ambient OTel span — always used for ``trace_id``; used for + ``span_id`` / ``parent_span_id`` only when the plugin stack + has no span. 4. ``invocation_id`` fallback for trace_id. Returns: (trace_id, span_id, parent_span_id) """ - # --- Layer 3: plugin stack baseline --- + # --- Plugin stack: span_id / parent_span_id baseline --- trace_id = TraceManager.get_trace_id(callback_context) plugin_span_id, plugin_parent_span_id = ( TraceManager.get_current_span_and_parent() @@ -2517,21 +2656,24 @@ def _resolve_ids( span_id = plugin_span_id parent_span_id = plugin_parent_span_id - # --- Layer 2: ambient OTel span --- + # --- Ambient OTel: trace_id always; span fallback only --- ambient = trace.get_current_span() ambient_ctx = ambient.get_span_context() if ambient_ctx.is_valid: trace_id = format(ambient_ctx.trace_id, "032x") - span_id = format(ambient_ctx.span_id, "016x") - # Reset parent — stale plugin-stack parent must not leak through - # when the ambient span is a root (no parent). - parent_span_id = None - # SDK spans expose .parent; non-recording spans do not. - parent_ctx = getattr(ambient, "parent", None) - if parent_ctx is not None and parent_ctx.span_id: - parent_span_id = format(parent_ctx.span_id, "016x") - - # --- Layer 1: explicit EventData overrides --- + # Only use ambient span IDs when the plugin stack has no span. + # Framework-internal spans (execute_tool, call_llm, etc.) are + # never written to BQ, so deriving parent_span_id from them + # creates phantom references. The plugin stack guarantees + # that both span_id and parent_span_id reference BQ rows. + if span_id is None: + span_id = format(ambient_ctx.span_id, "016x") + parent_span_id = None + parent_ctx = getattr(ambient, "parent", None) + if parent_ctx is not None and parent_ctx.span_id: + parent_span_id = format(parent_ctx.span_id, "016x") + + # --- Explicit EventData overrides (post-pop callbacks) --- if event_data.trace_id_override is not None: trace_id = event_data.trace_id_override if event_data.span_id_override is not None: @@ -2760,13 +2902,18 @@ async def on_event_callback( invocation_context: InvocationContext, event: "Event", ) -> None: - """Logs state changes and HITL events from the event stream. + """Logs state changes, HITL events, and A2A interactions. - Checks each event for a non-empty state_delta and logs it as a STATE_DELTA event. - Detects synthetic ``adk_request_*`` function calls (HITL pause events) and their corresponding function responses (HITL completions) and emits dedicated HITL event types. + - Detects events carrying A2A interaction metadata + (``a2a:request`` / ``a2a:response`` in ``custom_metadata``) + and logs them as ``A2A_INTERACTION`` events so the remote + agent's response and cross-reference IDs (``a2a:task_id``, + ``a2a:context_id``) are visible in BigQuery. The HITL detection must happen here (not in tool callbacks) because ``adk_request_credential``, ``adk_request_confirmation``, and @@ -2830,6 +2977,45 @@ async def on_event_callback( is_truncated=is_truncated, ) + # --- A2A interaction logging --- + # RemoteA2aAgent attaches cross-reference metadata to events: + # a2a:task_id, a2a:context_id — correlation keys + # a2a:request, a2a:response — full interaction payload + # Log an A2A_INTERACTION event when meaningful payload is present + # so the supervisor's BQ trace contains the remote agent's + # response and cross-reference IDs for JOINs. + meta = getattr(event, "custom_metadata", None) + if meta and ( + meta.get("a2a:request") is not None + or meta.get("a2a:response") is not None + ): + a2a_keys = {k: v for k, v in meta.items() if k.startswith("a2a:")} + a2a_truncated, is_truncated = _recursive_smart_truncate( + a2a_keys, self.config.max_content_length + ) + # Use the a2a:response as the event content when available, + # so the remote agent's answer is visible in the content + # column. + response_payload = a2a_keys.get("a2a:response") + content_dict = None + content_truncated = False + if response_payload is not None: + content_dict, content_truncated = _recursive_smart_truncate( + response_payload, + self.config.max_content_length, + ) + await self._log_event( + "A2A_INTERACTION", + callback_ctx, + raw_content=content_dict, + is_truncated=is_truncated or content_truncated, + event_data=EventData( + extra_attributes={ + "a2a_metadata": a2a_truncated, + }, + ), + ) + return None async def on_state_change_callback( @@ -2887,19 +3073,14 @@ async def after_run_callback( span_id, duration = TraceManager.pop_span() parent_span_id = TraceManager.get_current_span_id() - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping STARTING/COMPLETED pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "INVOCATION_COMPLETED", callback_ctx, event_data=EventData( trace_id_override=trace_id, latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) finally: @@ -2942,18 +3123,13 @@ async def after_agent_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping STARTING/COMPLETED pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "AGENT_COMPLETED", callback_context, event_data=EventData( latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) @@ -3103,12 +3279,6 @@ async def after_model_callback( # Otherwise log_event will fetch current stack (which is parent). span_id = popped_span_id or span_id - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping LLM_REQUEST/LLM_RESPONSE pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - use_override = is_popped and not has_ambient - await self._log_event( "LLM_RESPONSE", callback_context, @@ -3119,8 +3289,8 @@ async def after_model_callback( time_to_first_token_ms=tfft, model_version=llm_response.model_version, usage_metadata=llm_response.usage_metadata, - span_id_override=span_id if use_override else None, - parent_span_id_override=parent_span_id if use_override else None, + span_id_override=span_id if is_popped else None, + parent_span_id_override=(parent_span_id if is_popped else None), ), ) @@ -3142,9 +3312,6 @@ async def on_model_error_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "LLM_ERROR", callback_context, @@ -3152,8 +3319,8 @@ async def on_model_error_callback( status="ERROR", error_message=str(error), latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) @@ -3175,7 +3342,7 @@ async def before_tool_callback( args_truncated, is_truncated = _recursive_smart_truncate( tool_args, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "args": args_truncated, @@ -3209,7 +3376,7 @@ async def after_tool_callback( resp_truncated, is_truncated = _recursive_smart_truncate( result, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "result": resp_truncated, @@ -3218,13 +3385,10 @@ async def after_tool_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - event_data = EventData( latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ) await self._log_event( "TOOL_COMPLETED", @@ -3254,7 +3418,7 @@ async def on_tool_error_callback( args_truncated, is_truncated = _recursive_smart_truncate( tool_args, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "args": args_truncated, @@ -3263,9 +3427,6 @@ async def on_tool_error_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "TOOL_ERROR", tool_context, @@ -3275,7 +3436,7 @@ async def on_tool_error_callback( status="ERROR", error_message=str(error), latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index 8e352794a4..3a8e49c3f2 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -791,6 +791,34 @@ def _should_append_event(self, event: Event, is_live_call: bool) -> bool: return False return True + def _get_output_event( + self, + *, + original_event: Event, + modified_event: Event | None, + run_config: RunConfig | None, + ) -> Event: + """Returns the event that should be persisted and yielded. + + Plugins may return a replacement event that only overrides a subset of + fields. Merge those changes onto the original event so the streamed event + and the persisted event stay aligned without losing the original event + identity. + """ + if modified_event is None: + return original_event + + _apply_run_config_custom_metadata(modified_event, run_config) + update = {} + for field_name in modified_event.model_fields_set: + if field_name in {'id', 'invocation_id', 'timestamp'}: + continue + update[field_name] = modified_event.__dict__[field_name] + output_event = original_event.model_copy(update=update) + if not output_event.author: + output_event.author = original_event.author + return output_event + async def _exec_with_plugin( self, invocation_context: InvocationContext, @@ -854,13 +882,24 @@ async def _exec_with_plugin( _apply_run_config_custom_metadata( event, invocation_context.run_config ) + # Step 3: Run the on_event callbacks before persisting so callback + # changes are stored in the session and match the streamed event. + modified_event = await plugin_manager.run_on_event_callback( + invocation_context=invocation_context, event=event + ) + output_event = self._get_output_event( + original_event=event, + modified_event=modified_event, + run_config=invocation_context.run_config, + ) + if is_live_call: if event.partial and _is_transcription(event): is_transcribing = True if is_transcribing and _is_tool_call_or_response(event): # only buffer function call and function response event which is # non-partial - buffered_events.append(event) + buffered_events.append(output_event) continue # Note for live/bidi: for audio response, it's considered as # non-partial event(event.partial=None) @@ -881,7 +920,7 @@ async def _exec_with_plugin( ) if self._should_append_event(event, is_live_call): await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) for buffered_event in buffered_events: @@ -897,25 +936,15 @@ async def _exec_with_plugin( if self._should_append_event(event, is_live_call): logger.debug('Appending non-buffered event: %s', event) await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) else: if event.partial is not True: await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) - # Step 3: Run the on_event callbacks to optionally modify the event. - modified_event = await plugin_manager.run_on_event_callback( - invocation_context=invocation_context, event=event - ) - if modified_event: - _apply_run_config_custom_metadata( - modified_event, invocation_context.run_config - ) - yield modified_event - else: - yield event + yield output_event # Step 4: Run the after_run callbacks to perform global cleanup tasks or # finalizing logs and metrics data. diff --git a/src/google/adk/sessions/base_session_service.py b/src/google/adk/sessions/base_session_service.py index eb22a83bb9..af94bb9eeb 100644 --- a/src/google/adk/sessions/base_session_service.py +++ b/src/google/adk/sessions/base_session_service.py @@ -27,7 +27,16 @@ class GetSessionConfig(BaseModel): - """The configuration of getting a session.""" + """The configuration of getting a session. + + Attributes: + num_recent_events: The limit of recent events to get for the session. + Optional: if None, the filter is not applied; if greater than 0, returns + at most given number of recent events; if 0, no events are returned. + after_timestamp: The earliest timestamp of events to get for the session. + Optional: if None, the filter is not applied; otherwise, returns events + with timestamp >= the given time. + """ num_recent_events: Optional[int] = None after_timestamp: Optional[float] = None diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index eed1d9eae6..d033f1f234 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -28,9 +28,12 @@ from google.adk.platform import time as platform_time from sqlalchemy import delete from sqlalchemy import event +from sqlalchemy import MetaData from sqlalchemy import select +from sqlalchemy.engine import Connection from sqlalchemy.engine import make_url from sqlalchemy.exc import ArgumentError +from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import async_sessionmaker from sqlalchemy.ext.asyncio import AsyncEngine from sqlalchemy.ext.asyncio import AsyncSession as DatabaseSessionFactory @@ -61,6 +64,11 @@ logger = logging.getLogger("google_adk." + __name__) +_STALE_SESSION_ERROR_MESSAGE = ( + "The session has been modified in storage since it was loaded. " + "Please reload the session before appending more events." +) + _SQLITE_DIALECT = "sqlite" _MARIADB_DIALECT = "mariadb" _MYSQL_DIALECT = "mysql" @@ -96,12 +104,57 @@ async def _select_required_state( return state_row +async def _get_or_create_state( + *, + sql_session: DatabaseSessionFactory, + state_model: type[_StorageStateT], + primary_key: Any, + defaults: dict[str, Any], +) -> _StorageStateT: + """Returns an existing state row or creates one, handling concurrent inserts. + + Uses a SAVEPOINT so that an IntegrityError from a racing INSERT does not + invalidate the outer transaction. + """ + row = await sql_session.get(state_model, primary_key) + if row is not None: + return row + try: + async with sql_session.begin_nested(): + row = state_model(**defaults) + sql_session.add(row) + return row + except IntegrityError: + # Another concurrent caller inserted the row first. + # The savepoint was rolled back, so re-fetch the winner's row. + row = await sql_session.get(state_model, primary_key) + if row is None: + raise + return row + + def _set_sqlite_pragma(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.close() +def _ensure_schema_indexes_exist( + connection: Connection, metadata: MetaData +) -> None: + """Ensures indexes declared in metadata exist for existing tables.""" + logger.debug("Ensuring schema indexes exist for metadata tables.") + for table in metadata.sorted_tables: + for index in sorted(table.indexes, key=lambda item: item.name or ""): + index.create(bind=connection, checkfirst=True) + + +def _setup_database_schema(connection: Connection, metadata: MetaData) -> None: + """Ensures tables and indexes declared in metadata exist.""" + metadata.create_all(bind=connection) + _ensure_schema_indexes_exist(connection, metadata) + + def _merge_state( app_state: dict[str, Any], user_state: dict[str, Any], @@ -173,11 +226,14 @@ def __init__(self, db_url: str, **kwargs: Any): ) from e self.db_engine: AsyncEngine = db_engine - # DB session factory method self.database_session_factory: async_sessionmaker[ DatabaseSessionFactory ] = async_sessionmaker(bind=self.db_engine, expire_on_commit=False) + read_only_engine = self.db_engine.execution_options(read_only=True) + self._read_only_database_session_factory: async_sessionmaker[ + DatabaseSessionFactory + ] = async_sessionmaker(bind=read_only_engine, expire_on_commit=False) # Flag to indicate if tables are created self._tables_created = False @@ -196,9 +252,18 @@ def __init__(self, db_url: str, **kwargs: Any): def _get_schema_classes(self) -> _SchemaClasses: return _SchemaClasses(self._db_schema_version) + def _get_database_session_factory( + self, *, read_only: bool = False + ) -> async_sessionmaker[DatabaseSessionFactory]: + if read_only: + return self._read_only_database_session_factory + return self.database_session_factory + @asynccontextmanager async def _rollback_on_exception_session( self, + *, + read_only: bool = False, ) -> AsyncIterator[DatabaseSessionFactory]: """Yields a database session with guaranteed rollback on errors. @@ -206,7 +271,8 @@ async def _rollback_on_exception_session( the transaction is explicitly rolled back before the error propagates, preventing connection-pool exhaustion from lingering invalid transactions. """ - async with self.database_session_factory() as sql_session: + session_factory = self._get_database_session_factory(read_only=read_only) + async with session_factory() as sql_session: try: yield sql_session except BaseException: @@ -284,11 +350,11 @@ async def _prepare_tables(self): # Uncomment to recreate DB every time # await conn.run_sync(BaseV1.metadata.drop_all) logger.debug("Using V1 schema tables...") - await conn.run_sync(BaseV1.metadata.create_all) + await conn.run_sync(_setup_database_schema, BaseV1.metadata) else: # await conn.run_sync(BaseV0.metadata.drop_all) logger.debug("Using V0 schema tables...") - await conn.run_sync(BaseV0.metadata.create_all) + await conn.run_sync(_setup_database_schema, BaseV0.metadata) if self._db_schema_version == _schema_check_utils.LATEST_SCHEMA_VERSION: async with self._rollback_on_exception_session() as sql_session: @@ -309,6 +375,39 @@ async def _prepare_tables(self): self._tables_created = True + async def _session_matches_storage_revision( + self, + *, + sql_session: DatabaseSessionFactory, + schema: _SchemaClasses, + session: Session, + ) -> bool: + """Returns whether a marker-less session still matches stored events.""" + if not session.events: + stmt = ( + select(schema.StorageEvent.id) + .filter(schema.StorageEvent.app_name == session.app_name) + .filter(schema.StorageEvent.session_id == session.id) + .filter(schema.StorageEvent.user_id == session.user_id) + .limit(1) + ) + result = await sql_session.execute(stmt) + return result.scalar_one_or_none() is None + + stmt = ( + select(schema.StorageEvent.id) + .filter(schema.StorageEvent.app_name == session.app_name) + .filter(schema.StorageEvent.session_id == session.id) + .filter(schema.StorageEvent.user_id == session.user_id) + .order_by( + schema.StorageEvent.timestamp.desc(), schema.StorageEvent.id.desc() + ) + .limit(1) + ) + result = await sql_session.execute(stmt) + latest_storage_event_id = result.scalar_one_or_none() + return latest_storage_event_id == session.events[-1].id + @override async def create_session( self, @@ -332,24 +431,20 @@ async def create_session( raise AlreadyExistsError( f"Session with id {session_id} already exists." ) - # Fetch app and user states from storage - storage_app_state = await sql_session.get( - schema.StorageAppState, (app_name) + # Get or create state rows, handling concurrent insert races. + storage_app_state = await _get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key=app_name, + defaults={"app_name": app_name, "state": {}}, ) - storage_user_state = await sql_session.get( - schema.StorageUserState, (app_name, user_id) + storage_user_state = await _get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageUserState, + primary_key=(app_name, user_id), + defaults={"app_name": app_name, "user_id": user_id, "state": {}}, ) - # Create state tables if not exist - if not storage_app_state: - storage_app_state = schema.StorageAppState(app_name=app_name, state={}) - sql_session.add(storage_app_state) - if not storage_user_state: - storage_user_state = schema.StorageUserState( - app_name=app_name, user_id=user_id, state={} - ) - sql_session.add(storage_user_state) - # Extract state deltas state_deltas = _session_util.extract_state_delta(state) app_state_delta = state_deltas["app"] @@ -403,7 +498,9 @@ async def get_session( # 2. Get all the events based on session id and filtering config # 3. Convert and return the session schema = self._get_schema_classes() - async with self._rollback_on_exception_session() as sql_session: + async with self._rollback_on_exception_session( + read_only=True + ) as sql_session: storage_session = await sql_session.get( schema.StorageSession, (app_name, user_id, session_id) ) @@ -458,7 +555,9 @@ async def list_sessions( ) -> ListSessionsResponse: await self._prepare_tables() schema = self._get_schema_classes() - async with self._rollback_on_exception_session() as sql_session: + async with self._rollback_on_exception_session( + read_only=True + ) as sql_session: stmt = select(schema.StorageSession).filter( schema.StorageSession.app_name == app_name ) @@ -529,9 +628,9 @@ async def append_event(self, session: Session, event: Event) -> Event: # Trim temp state before persisting event = self._trim_temp_delta_state(event) - # 1. Check if timestamp is stale - # 2. Update session attributes based on event config - # 3. Store event to table + # 1. Validate the session has not gone stale. + # 2. Update session attributes based on event config. + # 3. Store the new event. schema = self._get_schema_classes() is_sqlite = self.db_engine.dialect.name == _SQLITE_DIALECT use_row_level_locking = self._supports_row_level_locking() @@ -563,6 +662,8 @@ async def append_event(self, session: Session, event: Event) -> Event: storage_session = storage_session_result.scalars().one_or_none() if storage_session is None: raise ValueError(f"Session {session.id} not found.") + storage_update_time = storage_session.get_update_timestamp(is_sqlite) + storage_update_marker = storage_session.get_update_marker() storage_app_state = await _select_required_state( sql_session=sql_session, @@ -591,27 +692,27 @@ async def append_event(self, session: Session, event: Event) -> Event: ), ) - if ( - storage_session.get_update_timestamp(is_sqlite) - > session.last_update_time - ): - # Reload the session from storage if it has been updated since it was - # loaded. - app_state = storage_app_state.state - user_state = storage_user_state.state - session_state = storage_session.state - session.state = _merge_state(app_state, user_state, session_state) - - stmt = ( - select(schema.StorageEvent) - .filter(schema.StorageEvent.app_name == session.app_name) - .filter(schema.StorageEvent.session_id == session.id) - .filter(schema.StorageEvent.user_id == session.user_id) - .order_by(schema.StorageEvent.timestamp.asc()) - ) - result = await sql_session.stream_scalars(stmt) - storage_events = [e async for e in result] - session.events = [e.to_event() for e in storage_events] + if session._storage_update_marker is not None: + # Sessions loaded by DatabaseSessionService carry an exact storage + # revision marker, so stale-writer detection can use that marker + # instead of relying on rounded timestamps. + if session._storage_update_marker != storage_update_marker: + raise ValueError(_STALE_SESSION_ERROR_MESSAGE) + # Keep the float timestamp synchronized with the exact storage value + # so tiny round-trip differences do not trigger false stale checks on + # the next append. + session.last_update_time = storage_update_time + elif storage_update_time > session.last_update_time: + # Backward-compatible fallback for marker-less session objects, such + # as older in-memory sessions or manually constructed Session values. + # Only reject when storage has actually advanced beyond the in-memory + # revision represented by session.events. + if not await self._session_matches_storage_revision( + sql_session=sql_session, schema=schema, session=session + ): + raise ValueError(_STALE_SESSION_ERROR_MESSAGE) + session.last_update_time = storage_update_time + session._storage_update_marker = storage_update_marker # Merge pre-extracted state deltas into storage. if has_app_delta: @@ -642,6 +743,7 @@ async def append_event(self, session: Session, event: Event) -> Event: session.last_update_time = storage_session.get_update_timestamp( is_sqlite ) + session._storage_update_marker = storage_session.get_update_marker() # Also update the in-memory session await super().append_event(session=session, event=event) diff --git a/src/google/adk/sessions/in_memory_session_service.py b/src/google/adk/sessions/in_memory_session_service.py index e0f9b49ff3..1bef516086 100644 --- a/src/google/adk/sessions/in_memory_session_service.py +++ b/src/google/adk/sessions/in_memory_session_service.py @@ -25,6 +25,8 @@ from . import _session_util from ..errors.already_exists_error import AlreadyExistsError from ..events.event import Event +from ..features import FeatureName +from ..features import is_feature_enabled from .base_session_service import BaseSessionService from .base_session_service import GetSessionConfig from .base_session_service import ListSessionsResponse @@ -34,6 +36,28 @@ logger = logging.getLogger('google_adk.' + __name__) +def _light_copy(session: Session) -> Session: + """Returns a light copy of the session. + + Main difference between this and true shallow-copy is that container fields + (e.g., events and state) are also shallow-copied. What this means is appending + to events/state of the copied session won't affect the original while avoiding + the potentially expensive cost of a full/recursive deep-copy of all events and + state. + """ + copied_session = session.model_copy(deep=False) + copied_session.events = copy.copy(session.events) + copied_session.state = copy.copy(session.state) + return copied_session + + +def _copy_session(session: Session) -> Session: + if is_feature_enabled(FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY): + return _light_copy(session) + else: + return copy.deepcopy(session) + + class InMemorySessionService(BaseSessionService): """An in-memory implementation of the session service. @@ -124,7 +148,7 @@ def _create_session_impl( self.sessions[app_name][user_id] = {} self.sessions[app_name][user_id][session_id] = session - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) return self._merge_state(app_name, user_id, copied_session) @override @@ -175,13 +199,16 @@ def _get_session_impl( return None session = self.sessions[app_name][user_id].get(session_id) - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) if config: - if config.num_recent_events: - copied_session.events = copied_session.events[ - -config.num_recent_events : - ] + if config.num_recent_events is not None: + if config.num_recent_events == 0: + copied_session.events = [] + else: + copied_session.events = copied_session.events[ + -config.num_recent_events : + ] if config.after_timestamp: i = len(copied_session.events) - 1 while i >= 0: @@ -242,16 +269,15 @@ def _list_sessions_impl( sessions_without_events = [] if user_id is None: - for user_id in self.sessions[app_name]: - for session_id in self.sessions[app_name][user_id]: - session = self.sessions[app_name][user_id][session_id] - copied_session = copy.deepcopy(session) + for uid in list(self.sessions[app_name].keys()): + for session in list(self.sessions[app_name][uid].values()): + copied_session = _copy_session(session) copied_session.events = [] - copied_session = self._merge_state(app_name, user_id, copied_session) + copied_session = self._merge_state(app_name, uid, copied_session) sessions_without_events.append(copied_session) else: - for session in self.sessions[app_name][user_id].values(): - copied_session = copy.deepcopy(session) + for session in list(self.sessions[app_name][user_id].values()): + copied_session = _copy_session(session) copied_session.events = [] copied_session = self._merge_state(app_name, user_id, copied_session) sessions_without_events.append(copied_session) diff --git a/src/google/adk/sessions/schemas/v0.py b/src/google/adk/sessions/schemas/v0.py index a95d0b9de5..e4a4368c6d 100644 --- a/src/google/adk/sessions/schemas/v0.py +++ b/src/google/adk/sessions/schemas/v0.py @@ -29,6 +29,7 @@ from datetime import datetime from datetime import timezone import json +import logging import pickle from typing import Any from typing import Optional @@ -36,8 +37,10 @@ from google.adk.platform import uuid as platform_uuid from google.genai import types from sqlalchemy import Boolean +from sqlalchemy import desc from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func +from sqlalchemy import Index from sqlalchemy import inspect from sqlalchemy import Text from sqlalchemy.dialects import mysql @@ -59,6 +62,32 @@ from .shared import DynamicJSON from .shared import PreciseTimestamp +logger = logging.getLogger("google_adk." + __name__) + +_TRUNCATION_SUFFIX = "...[truncated]" + + +def _truncate_str(value: Optional[str], max_length: int) -> Optional[str]: + """Truncates a string to fit within *max_length* characters. + + Old databases may still carry ``VARCHAR(N)`` columns that were never + ALTERed after ADK upgraded the schema definition to ``TEXT``. Truncating + before the INSERT prevents a ``StringDataRightTruncationError`` crash. + """ + if value is not None and len(value) > max_length: + truncated = value[: max_length - len(_TRUNCATION_SUFFIX)] + ( + _TRUNCATION_SUFFIX + ) + logger.warning( + "Truncated value from %d to %d characters to fit database" + " column constraint. Run the appropriate ALTER TABLE command" + " or migrate to the v1 schema to store full-length values.", + len(value), + max_length, + ) + return truncated + return value + class DynamicPickleType(TypeDecorator): """Represents a type that can be pickled.""" @@ -154,6 +183,13 @@ def get_update_timestamp(self, is_sqlite: bool) -> float: return self.update_time.replace(tzinfo=timezone.utc).timestamp() return self.update_time.timestamp() + def get_update_marker(self) -> str: + """Returns a stable revision marker for optimistic concurrency checks.""" + update_time = self.update_time + if update_time.tzinfo is not None: + update_time = update_time.astimezone(timezone.utc) + return update_time.isoformat(timespec="microseconds") + def to_session( self, state: dict[str, Any] | None = None, @@ -166,7 +202,7 @@ def to_session( if events is None: events = [] - return Session( + session = Session( app_name=self.app_name, user_id=self.user_id, id=self.id, @@ -174,6 +210,8 @@ def to_session( events=events, last_update_time=self.get_update_timestamp(is_sqlite=is_sqlite), ) + session._storage_update_marker = self.get_update_marker() + return session class StorageEvent(Base): @@ -247,6 +285,13 @@ class StorageEvent(Base): ["sessions.app_name", "sessions.user_id", "sessions.id"], ondelete="CASCADE", ), + Index( + "idx_events_app_user_session_ts", + "app_name", + "user_id", + "session_id", + desc("timestamp"), + ), ) @property @@ -280,7 +325,9 @@ def from_event(cls, session: Session, event: Event) -> StorageEvent: partial=event.partial, turn_complete=event.turn_complete, error_code=event.error_code, - error_message=event.error_message, + error_message=_truncate_str( + event.error_message, DEFAULT_MAX_VARCHAR_LENGTH + ), interrupted=event.interrupted, ) if event.content: diff --git a/src/google/adk/sessions/schemas/v1.py b/src/google/adk/sessions/schemas/v1.py index 7ee8c811fd..12d8ee9061 100644 --- a/src/google/adk/sessions/schemas/v1.py +++ b/src/google/adk/sessions/schemas/v1.py @@ -28,8 +28,10 @@ from typing import Any from google.adk.platform import uuid as platform_uuid +from sqlalchemy import desc from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func +from sqlalchemy import Index from sqlalchemy import inspect from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.orm import DeclarativeBase @@ -128,6 +130,13 @@ def get_update_timestamp(self, is_sqlite: bool) -> float: return self.update_time.replace(tzinfo=timezone.utc).timestamp() return self.update_time.timestamp() + def get_update_marker(self) -> str: + """Returns a stable revision marker for optimistic concurrency checks.""" + update_time = self.update_time + if update_time.tzinfo is not None: + update_time = update_time.astimezone(timezone.utc) + return update_time.isoformat(timespec="microseconds") + def to_session( self, state: dict[str, Any] | None = None, @@ -140,7 +149,7 @@ def to_session( if events is None: events = [] - return Session( + session = Session( app_name=self.app_name, user_id=self.user_id, id=self.id, @@ -148,6 +157,8 @@ def to_session( events=events, last_update_time=self.get_update_timestamp(is_sqlite=is_sqlite), ) + session._storage_update_marker = self.get_update_marker() + return session class StorageEvent(Base): @@ -187,6 +198,13 @@ class StorageEvent(Base): ["sessions.app_name", "sessions.user_id", "sessions.id"], ondelete="CASCADE", ), + Index( + "idx_events_app_user_session_ts", + "app_name", + "user_id", + "session_id", + desc("timestamp"), + ), ) @classmethod diff --git a/src/google/adk/sessions/session.py b/src/google/adk/sessions/session.py index 89af1d4167..24d200efdb 100644 --- a/src/google/adk/sessions/session.py +++ b/src/google/adk/sessions/session.py @@ -20,6 +20,7 @@ from pydantic import BaseModel from pydantic import ConfigDict from pydantic import Field +from pydantic import PrivateAttr from ..events.event import Event @@ -48,3 +49,6 @@ class Session(BaseModel): call/response, etc.""" last_update_time: float = 0.0 """The last update time of the session.""" + + _storage_update_marker: str | None = PrivateAttr(default=None) + """Internal storage revision marker used for stale-session detection.""" diff --git a/src/google/adk/sessions/sqlite_session_service.py b/src/google/adk/sessions/sqlite_session_service.py index 3ad84e9d1a..427bc3e73e 100644 --- a/src/google/adk/sessions/sqlite_session_service.py +++ b/src/google/adk/sessions/sqlite_session_service.py @@ -261,11 +261,14 @@ async def get_session( query_parts.append("ORDER BY timestamp DESC") - if config and config.num_recent_events: + if config and config.num_recent_events is not None: query_parts.append("LIMIT ?") params.append(config.num_recent_events) - event_rows = await db.execute_fetchall(" ".join(query_parts), params) + if config and config.num_recent_events == 0: + event_rows = [] + else: + event_rows = await db.execute_fetchall(" ".join(query_parts), params) storage_events_data = [row["event_data"] for row in event_rows] # Fetch states from storage diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 8cb7109ece..d06816f132 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -14,6 +14,7 @@ from __future__ import annotations import asyncio +import copy import datetime import json import logging @@ -25,6 +26,7 @@ from google.genai import types from google.genai.errors import ClientError +import pydantic from typing_extensions import override if TYPE_CHECKING: @@ -42,6 +44,20 @@ logger = logging.getLogger('google_adk.' + __name__) +_COMPACTION_CUSTOM_METADATA_KEY = '_compaction' +_USAGE_METADATA_CUSTOM_METADATA_KEY = '_usage_metadata' + + +def _set_internal_custom_metadata( + metadata_dict: dict[str, Any], *, key: str, value: dict[str, Any] +) -> None: + """Stores internal metadata alongside user-provided custom metadata.""" + existing_custom_metadata = metadata_dict.get('custom_metadata') or {} + metadata_dict['custom_metadata'] = { + **existing_custom_metadata, + key: value, + } + class VertexAiSessionService(BaseSessionService): """Connects to the Vertex AI Agent Engine Session Service using Agent Engine SDK. @@ -101,16 +117,11 @@ async def create_session( Returns: The created session. """ - - if session_id: - raise ValueError( - 'User-provided Session id is not supported for' - ' VertexAISessionService.' - ) - reasoning_engine_id = self._get_reasoning_engine_id(app_name) config = {'session_state': state} if state else {} + if session_id: + config['session_id'] = session_id config.update(kwargs) async with self._get_api_client() as api_client: api_response = await api_client.agent_engines.sessions.create( @@ -158,13 +169,19 @@ async def get_session( } try: - get_session_response, events_iterator = await asyncio.gather( - api_client.agent_engines.sessions.get(name=session_resource_name), - api_client.agent_engines.sessions.events.list( - name=session_resource_name, - **list_events_kwargs, - ), - ) + if config and config.num_recent_events == 0: + get_session_response = await api_client.agent_engines.sessions.get( + name=session_resource_name + ) + events_iterator = None + else: + get_session_response, events_iterator = await asyncio.gather( + api_client.agent_engines.sessions.get(name=session_resource_name), + api_client.agent_engines.sessions.events.list( + name=session_resource_name, + **list_events_kwargs, + ), + ) except ClientError as e: if e.code == 404: logger.debug( @@ -190,8 +207,9 @@ async def get_session( # to discard events written milliseconds after the session resource was # updated. Clock skew between those writes can otherwise drop tool_result # events and permanently break the replayed conversation. - async for event in events_iterator: - session.events.append(_from_api_event(event)) + if events_iterator is not None: + async for event in events_iterator: + session.events.append(_from_api_event(event)) if config: # Filter events based on num_recent_events. @@ -252,6 +270,7 @@ async def append_event(self, session: Session, event: Event) -> Event: reasoning_engine_id = self._get_reasoning_engine_id(session.app_name) + # Build config (Monolithic approach) config = {} if event.content: config['content'] = event.content.model_dump( @@ -268,9 +287,6 @@ async def append_event(self, session: Session, event: Event) -> Event: k: json.loads(v.model_dump_json(exclude_none=True, by_alias=True)) for k, v in event.actions.requested_auth_configs.items() }, - # TODO: add requested_tool_confirmations, agent_state once - # they are available in the API. - # Note: compaction is stored via event_metadata.custom_metadata. } if event.error_code: config['error_code'] = event.error_code @@ -293,31 +309,62 @@ async def append_event(self, session: Session, event: Event) -> Event: metadata_dict['grounding_metadata'] = event.grounding_metadata.model_dump( exclude_none=True, mode='json' ) - # Store compaction data in custom_metadata since the Vertex AI service - # does not yet support the compaction field. - # TODO: Stop writing to custom_metadata once the Vertex AI service - # supports the compaction field natively in EventActions. + + # ALWAYS write to custom_metadata if event.actions and event.actions.compaction: compaction_dict = event.actions.compaction.model_dump( exclude_none=True, mode='json' ) - existing_custom = metadata_dict.get('custom_metadata') or {} - metadata_dict['custom_metadata'] = { - **existing_custom, - '_compaction': compaction_dict, - } + _set_internal_custom_metadata( + metadata_dict, + key=_COMPACTION_CUSTOM_METADATA_KEY, + value=compaction_dict, + ) + if event.usage_metadata: + usage_dict = event.usage_metadata.model_dump( + exclude_none=True, mode='json' + ) + _set_internal_custom_metadata( + metadata_dict, + key=_USAGE_METADATA_CUSTOM_METADATA_KEY, + value=usage_dict, + ) + config['event_metadata'] = metadata_dict + # Persist the full event state using raw_event. If the client-side SDK + # does not support this field, it will raise a ValidationError, and we + # will fall back to legacy field-based storage. + config['raw_event'] = event.model_dump( + exclude_none=True, + mode='json', + by_alias=True, + ) + + # Retry without raw_event if client side validation fails for older SDK + # versions. async with self._get_api_client() as api_client: - await api_client.agent_engines.sessions.events.append( - name=f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}', - author=event.author, - invocation_id=event.invocation_id, - timestamp=datetime.datetime.fromtimestamp( - event.timestamp, tz=datetime.timezone.utc - ), - config=config, - ) + + async def _do_append(cfg: dict[str, Any]): + await api_client.agent_engines.sessions.events.append( + name=( + f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}' + ), + author=event.author, + invocation_id=event.invocation_id, + timestamp=datetime.datetime.fromtimestamp( + event.timestamp, tz=datetime.timezone.utc + ), + config=cfg, + ) + + try: + await _do_append(config) + except pydantic.ValidationError: + logger.warning('Vertex SDK does not support raw_event, falling back.') + if 'raw_event' in config: + del config['raw_event'] + await _do_append(config) return event def _get_reasoning_engine_id(self, app_name: str): @@ -351,16 +398,46 @@ def _get_api_client(self) -> vertexai.AsyncClient: """ import vertexai + if self._express_mode_api_key: + return vertexai.Client( + http_options=self._api_client_http_options_override(), + api_key=self._express_mode_api_key, + ).aio return vertexai.Client( project=self._project, location=self._location, http_options=self._api_client_http_options_override(), - api_key=self._express_mode_api_key, ).aio +def _get_raw_event(api_event_obj: Any) -> dict[str, Any] | None: + """Extracts raw_event dict from SessionEvent object safely.""" + try: + return api_event_obj.raw_event + except AttributeError: + try: + return api_event_obj.rawEvent + except AttributeError: + return None + + def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: """Converts an API event object to an Event object.""" + # Prioritize reading from raw_event to restore full state. Fall back to + # top-level fields for older data that lacks raw_event. + raw_event_dict = _get_raw_event(api_event_obj) + if raw_event_dict: + event_dict = copy.deepcopy(raw_event_dict) + timestamp_obj = getattr(api_event_obj, 'timestamp', None) + event_dict.update({ + 'id': api_event_obj.name.split('/')[-1], + 'invocation_id': getattr(api_event_obj, 'invocation_id', None), + 'author': getattr(api_event_obj, 'author', None), + }) + if timestamp_obj: + event_dict['timestamp'] = timestamp_obj.timestamp() + return Event.model_validate(event_dict) + actions = getattr(api_event_obj, 'actions', None) event_metadata = getattr(api_event_obj, 'event_metadata', None) if event_metadata: @@ -378,11 +455,20 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: # Extract compaction data stored in custom_metadata. # NOTE: This read path must be kept permanently because sessions # written before native compaction support store compaction data - # in custom_metadata under the '_compaction' key. + # in custom_metadata under the compaction metadata key. compaction_data = None - if custom_metadata and '_compaction' in custom_metadata: + usage_metadata_data = None + if custom_metadata and ( + _COMPACTION_CUSTOM_METADATA_KEY in custom_metadata + or _USAGE_METADATA_CUSTOM_METADATA_KEY in custom_metadata + ): custom_metadata = dict(custom_metadata) # avoid mutating the API response - compaction_data = custom_metadata.pop('_compaction') + compaction_data = custom_metadata.pop( + _COMPACTION_CUSTOM_METADATA_KEY, None + ) + usage_metadata_data = custom_metadata.pop( + _USAGE_METADATA_CUSTOM_METADATA_KEY, None + ) if not custom_metadata: custom_metadata = None grounding_metadata = _session_util.decode_model( @@ -397,6 +483,7 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: branch = None custom_metadata = None compaction_data = None + usage_metadata_data = None grounding_metadata = None if actions: @@ -416,6 +503,19 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: else: event_actions = EventActions() + usage_metadata = None + if usage_metadata_data: + usage_metadata = types.GenerateContentResponseUsageMetadata.model_validate( + usage_metadata_data + ) + + timestamp_obj = getattr(api_event_obj, 'timestamp', None) + timestamp = ( + timestamp_obj.timestamp() + if timestamp_obj + else datetime.datetime.now(datetime.timezone.utc).timestamp() + ) + return Event( id=api_event_obj.name.split('/')[-1], invocation_id=api_event_obj.invocation_id, @@ -424,7 +524,7 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: content=_session_util.decode_model( getattr(api_event_obj, 'content', None), types.Content ), - timestamp=api_event_obj.timestamp.timestamp(), + timestamp=timestamp, error_code=getattr(api_event_obj, 'error_code', None), error_message=getattr(api_event_obj, 'error_message', None), partial=partial, @@ -434,4 +534,5 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: custom_metadata=custom_metadata, grounding_metadata=grounding_metadata, long_running_tool_ids=long_running_tool_ids, + usage_metadata=usage_metadata, ) diff --git a/src/google/adk/skills/_utils.py b/src/google/adk/skills/_utils.py index 0fdb553ee3..cab70a8d4b 100644 --- a/src/google/adk/skills/_utils.py +++ b/src/google/adk/skills/_utils.py @@ -20,6 +20,7 @@ import pathlib from typing import Union +from google.auth import credentials as auth from google.cloud import storage from pydantic import ValidationError import yaml @@ -301,6 +302,8 @@ def _list_skills_in_dir( def _list_skills_in_gcs_dir( bucket_name: str, skills_base_path: str = "", + project_id: str | None = None, + credentials: auth.Credentials | None = None, ) -> Dict[str, models.Frontmatter]: """List skills in a GCS directory. @@ -311,7 +314,7 @@ def _list_skills_in_gcs_dir( Returns: Dictionary mapping skill IDs to their frontmatter. """ - client = storage.Client() + client = storage.Client(project=project_id, credentials=credentials) bucket = client.bucket(bucket_name) base_prefix = skills_base_path.strip("/") @@ -350,6 +353,8 @@ def _load_skill_from_gcs_dir( bucket_name: str, skill_id: str, skills_base_path: str = "", + project_id: str | None = None, + credentials: auth.Credentials | None = None, ) -> models.Skill: """Load a complete skill from a GCS directory. @@ -357,6 +362,8 @@ def _load_skill_from_gcs_dir( bucket_name: Name of the GCS bucket. skill_id: The ID of the skill (directory name). skills_base_path: Base directory within the bucket (e.g., 'path/to/skills'). + project_id: Project ID to use for GCS client. + credentials: Credentials to use for GCS client. Returns: Skill object with all components loaded. @@ -366,7 +373,8 @@ def _load_skill_from_gcs_dir( ValueError: If SKILL.md is invalid or the skill name does not match the directory name. """ - client = storage.Client() + + client = storage.Client(project=project_id, credentials=credentials) bucket = client.bucket(bucket_name) base_prefix = skills_base_path.strip("/") diff --git a/src/google/adk/skills/models.py b/src/google/adk/skills/models.py index cda1447bbe..1cd443b2ca 100644 --- a/src/google/adk/skills/models.py +++ b/src/google/adk/skills/models.py @@ -26,14 +26,20 @@ from pydantic import Field from pydantic import field_validator -_NAME_PATTERN = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$") +from ..features import FeatureName +from ..features import is_feature_enabled + +_KEBAB_NAME_PATTERN = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$") +_SNAKE_OR_KEBAB_NAME_PATTERN = re.compile( + r"^([a-z0-9]+(-[a-z0-9]+)*|[a-z0-9]+(_[a-z0-9]+)*)$" +) class Frontmatter(BaseModel): """L1 skill content: metadata parsed from SKILL.md for skill discovery. Attributes: - name: Skill name in kebab-case (required). + name: Skill name in kebab-case or snake_case (required). description: What the skill does and when the model should use it (required). license: License for the skill (optional). @@ -78,11 +84,23 @@ def _validate_name(cls, v: str) -> str: v = unicodedata.normalize("NFKC", v) if len(v) > 64: raise ValueError("name must be at most 64 characters") - if not _NAME_PATTERN.match(v): - raise ValueError( - "name must be lowercase kebab-case (a-z, 0-9, hyphens)," - " with no leading, trailing, or consecutive hyphens" + if is_feature_enabled(FeatureName.SNAKE_CASE_SKILL_NAME): + pattern = _SNAKE_OR_KEBAB_NAME_PATTERN + msg = ( + "name must be lowercase kebab-case (a-z, 0-9, hyphens) or" + " snake_case (a-z, 0-9, underscores), with no leading, trailing," + " or consecutive delimiters. Mixing hyphens and underscores is" + " not allowed." + ) + else: + pattern = _KEBAB_NAME_PATTERN + msg = ( + "name must be lowercase kebab-case (a-z, 0-9," + " hyphens), with no leading, trailing, or" + " consecutive delimiters" ) + if not pattern.match(v): + raise ValueError(msg) return v @field_validator("description") diff --git a/src/google/adk/telemetry/tracing.py b/src/google/adk/telemetry/tracing.py index 4c79ca60e4..55c37a6c60 100644 --- a/src/google/adk/telemetry/tracing.py +++ b/src/google/adk/telemetry/tracing.py @@ -83,7 +83,10 @@ USER_CONTENT_ELIDED = '' -GEN_AI_AGENT_VERSION = 'gen_ai.agent.version' +# Used to associate a span with a destination resource for AppHub. Tools with +# this key in their BaseTool.custom_metadata will have the mapping added as a +# span attribute +GCP_MCP_SERVER_DESTINATION_ID = 'gcp.mcp.server.destination.id' # Needed to avoid circular imports if TYPE_CHECKING: @@ -159,7 +162,6 @@ def trace_agent_invocation( span.set_attribute(GEN_AI_AGENT_DESCRIPTION, agent.description) span.set_attribute(GEN_AI_AGENT_NAME, agent.name) - span.set_attribute(GEN_AI_AGENT_VERSION, agent.version) span.set_attribute(GEN_AI_CONVERSATION_ID, ctx.session.id) @@ -193,6 +195,14 @@ def trace_tool_call( else: span.set_attribute(ERROR_TYPE, type(error).__name__) + # Special case for client side association with a remote tool call + if ( + tool.custom_metadata + and GCP_MCP_SERVER_DESTINATION_ID in tool.custom_metadata + ): + destination_id = tool.custom_metadata[GCP_MCP_SERVER_DESTINATION_ID] + span.set_attribute(GCP_MCP_SERVER_DESTINATION_ID, destination_id) + # Setting empty llm request and response (as UI expect these) while not # applicable for tool_response. span.set_attribute('gcp.vertex.agent.llm_request', '{}') @@ -495,7 +505,6 @@ def use_generate_content_span( USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': model_response_event.id, 'gcp.vertex.agent.invocation_id': invocation_context.invocation_id, - GEN_AI_AGENT_VERSION: invocation_context.agent.version, } if ( _is_gemini_agent(invocation_context.agent) @@ -530,7 +539,6 @@ async def use_inference_span( USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': model_response_event.id, 'gcp.vertex.agent.invocation_id': invocation_context.invocation_id, - GEN_AI_AGENT_VERSION: invocation_context.agent.version, } if ( _is_gemini_agent(invocation_context.agent) diff --git a/src/google/adk/tools/__init__.py b/src/google/adk/tools/__init__.py index 28bb4670a0..b444e3a744 100644 --- a/src/google/adk/tools/__init__.py +++ b/src/google/adk/tools/__init__.py @@ -25,6 +25,7 @@ from .apihub_tool.apihub_toolset import APIHubToolset from .base_tool import BaseTool from .discovery_engine_search_tool import DiscoveryEngineSearchTool + from .discovery_engine_search_tool import SearchResultMode from .enterprise_search_tool import enterprise_web_search_tool as enterprise_web_search from .example_tool import ExampleTool from .exit_loop_tool import exit_loop @@ -55,6 +56,10 @@ '.discovery_engine_search_tool', 'DiscoveryEngineSearchTool', ), + 'SearchResultMode': ( + '.discovery_engine_search_tool', + 'SearchResultMode', + ), 'enterprise_web_search': ( '.enterprise_search_tool', 'enterprise_web_search_tool', diff --git a/src/google/adk/tools/_automatic_function_calling_util.py b/src/google/adk/tools/_automatic_function_calling_util.py index 392e256b33..aef4424a49 100644 --- a/src/google/adk/tools/_automatic_function_calling_util.py +++ b/src/google/adk/tools/_automatic_function_calling_util.py @@ -368,6 +368,11 @@ def from_function_with_options( parameters_json_schema[name] = types.Schema.model_validate( json_schema_dict ) + if param.default is not inspect.Parameter.empty: + if param.default is not None: + parameters_json_schema[name].default = param.default + else: + parameters_json_schema[name].nullable = True except Exception as e: _function_parameter_parse_util._raise_for_unsupported_param( param, func.__name__, e @@ -392,6 +397,11 @@ def from_function_with_options( type='OBJECT', properties=parameters_json_schema, ) + declaration.parameters.required = ( + _function_parameter_parse_util._get_required_fields( + declaration.parameters + ) + ) if variant == GoogleLLMVariant.GEMINI_API: return declaration diff --git a/src/google/adk/tools/_function_parameter_parse_util.py b/src/google/adk/tools/_function_parameter_parse_util.py index 1b9559b29c..a8e98980d5 100644 --- a/src/google/adk/tools/_function_parameter_parse_util.py +++ b/src/google/adk/tools/_function_parameter_parse_util.py @@ -399,8 +399,17 @@ def _parse_schema_from_parameter( ), func_name, ) + + required_fields = [ + field_name + for field_name, field_info in param.annotation.model_fields.items() + if field_info.is_required() + ] + if required_fields: + schema.required = required_fields _raise_if_schema_unsupported(variant, schema) return schema + if inspect.isclass(param.annotation) and issubclass( param.annotation, ToolContext ): diff --git a/src/google/adk/tools/_google_credentials.py b/src/google/adk/tools/_google_credentials.py index 8eb92d9c53..6d03e64995 100644 --- a/src/google/adk/tools/_google_credentials.py +++ b/src/google/adk/tools/_google_credentials.py @@ -191,6 +191,13 @@ async def get_valid_credentials( # If non-oauth credentials are provided then use them as is. This helps # in flows such as service account keys if creds and not isinstance(creds, google.oauth2.credentials.Credentials): + if not creds.valid: + try: + creds.refresh(Request()) + except Exception: # pylint: disable=broad-except + # If refresh fails, we still return the creds as they might work + # for some libraries that handle refresh internally. + pass return creds # Check if we have valid credentials diff --git a/src/google/adk/tools/agent_simulator/__init__.py b/src/google/adk/tools/agent_simulator/__init__.py index 3c44035781..4e8b134b44 100644 --- a/src/google/adk/tools/agent_simulator/__init__.py +++ b/src/google/adk/tools/agent_simulator/__init__.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from google.adk.tools.agent_simulator.agent_simulator_factory import AgentSimulatorFactory +import warnings -__all__ = ["AgentSimulator"] +from google.adk.tools.environment_simulation import EnvironmentSimulationFactory as AgentSimulatorFactory + +warnings.warn( + "google.adk.tools.agent_simulator is moved to" + " google.adk.tools.environment_simulation", + DeprecationWarning, + stacklevel=2, +) + +__all__ = ["AgentSimulatorFactory"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_config.py b/src/google/adk/tools/agent_simulator/agent_simulator_config.py index 17051c68b1..1b8b4df0ac 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_config.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_config.py @@ -14,150 +14,51 @@ from __future__ import annotations -import enum from typing import Any -from typing import Dict -from typing import List -from typing import Optional +import warnings -from google.genai import types as genai_types -from pydantic import BaseModel -from pydantic import Field -from pydantic import field_validator +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import InjectedError +from google.adk.tools.environment_simulation.environment_simulation_config import InjectionConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig from pydantic import model_validator -from pydantic_core import ValidationError +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_config is moved to" + " google.adk.tools.environment_simulation.environment_simulation_config", + DeprecationWarning, + stacklevel=2, +) -class InjectedError(BaseModel): - """An error to be injected into a tool call.""" - injected_http_error_code: int - """Inject http error code to the tool call. Will present as "error_code" - in the tool response dict.""" +class AgentSimulatorConfig(EnvironmentSimulationConfig): + """Deprecated AgentSimulatorConfig alias. - error_message: str - """Inject error message to the tool call. Will present as - "error_message" in the tool response dict.""" + Forwards tracing_path to tracing. + """ - -class InjectionConfig(BaseModel): - """Injection configuration for a tool.""" - - injection_probability: float = 1.0 - """Probability of injecting the injected_value.""" - - match_args: Optional[Dict[str, Any]] = None - """Only apply injection if the request matches the match_args. - If match_args is not provided, the injection will be applied to all - requests.""" - - injected_latency_seconds: float = Field(default=0.0, le=120.0) - """Inject latency to the tool call. Please note it may not be accurate if │ - the interceptor is applied as after tool callback.""" - - random_seed: Optional[int] = None - """The random seed to use for this injection.""" - - injected_error: Optional[InjectedError] = None - """The injected error.""" - - injected_response: Optional[Dict[str, Any]] = None - """The injected response.""" - - @model_validator(mode="after") - def check_injected_error_or_response(self) -> Self: - """Checks that either injected_error or injected_response is set.""" - if bool(self.injected_error) == bool(self.injected_response): - raise ValueError( - "Either injected_error or injected_response must be set, but not" - " both, and not neither." - ) - return self - - -class MockStrategy(enum.Enum): - """Mock strategy for a tool.""" - - MOCK_STRATEGY_UNSPECIFIED = 0 - - MOCK_STRATEGY_TOOL_SPEC = 1 - """Use tool specifications to mock the tool response.""" - - MOCK_STRATEGY_TRACING = 2 - """Use provided tracing and tool specifications to mock the tool - response based on llm response. Need to provide tracing path in - command.""" - - -class ToolSimulationConfig(BaseModel): - """Simulation configuration for a single tool.""" - - tool_name: str - """Name of the tool to be simulated.""" - - injection_configs: List[InjectionConfig] = Field(default_factory=list) - """Injection configuration for the tool. If provided, the tool will be - injected with the injected_value with the injection_probability first, - the mock_strategy will be applied if no injection config is hit.""" - - mock_strategy_type: MockStrategy = MockStrategy.MOCK_STRATEGY_UNSPECIFIED - """The mock strategy to use.""" - - @model_validator(mode="after") - def check_mock_strategy_type(self) -> Self: - """Checks that mock_strategy_type is not UNSPECIFIED if no injections.""" - if ( - not self.injection_configs - and self.mock_strategy_type == MockStrategy.MOCK_STRATEGY_UNSPECIFIED - ): - raise ValueError( - "If injection_configs is empty, mock_strategy_type cannot be" - " MOCK_STRATEGY_UNSPECIFIED." - ) - return self - - -class AgentSimulatorConfig(BaseModel): - """Configuration for AgentSimulator.""" - - tool_simulation_configs: List[ToolSimulationConfig] = Field( - default_factory=list - ) - """A list of tool simulation configurations.""" - - simulation_model: str = Field(default="gemini-2.5-flash") - """The model to use for internal simulator LLM calls (tool analysis, mock responses).""" - - simulation_model_configuration: genai_types.GenerateContentConfig = Field( - default_factory=lambda: genai_types.GenerateContentConfig( - thinking_config=genai_types.ThinkingConfig( - include_thoughts=False, - thinking_budget=10240, - ) - ), - ) - """The configuration for the internal simulator LLM calls.""" - - tracing_path: Optional[str] = None - """The path to the tracing file to be used for mocking. Only used if the - mock_strategy_type is MOCK_STRATEGY_TRACING.""" - - environment_data: Optional[str] = None - """Environment-specific data (e.g., a minimal database dump in JSON string - format). This data is passed directly to mock strategies for contextual - mock generation.""" - - @field_validator("tool_simulation_configs") + @model_validator(mode="before") @classmethod - def check_tool_simulation_configs(cls, v: List[ToolSimulationConfig]): - """Checks that tool_simulation_configs is not empty.""" - if not v: - raise ValueError("tool_simulation_configs must be provided.") - seen_tool_names = set() - for tool_sim_config in v: - if tool_sim_config.tool_name in seen_tool_names: - raise ValueError( - f"Duplicate tool_name found: {tool_sim_config.tool_name}" - ) - seen_tool_names.add(tool_sim_config.tool_name) - return v + def convert_tracing_path(cls, data: Any) -> Any: + """Convert tracing_path to tracing.""" + if isinstance(data, dict) and "tracing_path" in data: + warnings.warn( + "`tracing_path` is deprecated. Use `tracing` instead.", + DeprecationWarning, + stacklevel=2, + ) + if "tracing" not in data: + data["tracing"] = data.pop("tracing_path") + else: + data.pop("tracing_path") + return data + + +__all__ = [ + "AgentSimulatorConfig", + "InjectedError", + "InjectionConfig", + "MockStrategy", + "ToolSimulationConfig", +] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_engine.py b/src/google/adk/tools/agent_simulator/agent_simulator_engine.py index 577e8639e0..91d3962f4e 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_engine.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_engine.py @@ -14,125 +14,15 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import logging -import random -import time -from typing import Any -from typing import Dict -from typing import Optional +import warnings -agent_simulator_logger = logging.getLogger("agent_simulator_logger") +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine as AgentSimulatorEngine -from google.adk.agents.llm_agent import LlmAgent -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy as MockStrategyEnum -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.strategies import base as base_mock_strategies -from google.adk.tools.agent_simulator.strategies import tool_spec_mock_strategy -from google.adk.tools.agent_simulator.tool_connection_analyzer import ToolConnectionAnalyzer -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_engine is moved to" + " google.adk.tools.environment_simulation.environment_simulation_engine", + DeprecationWarning, + stacklevel=2, +) - -def _create_mock_strategy( - mock_strategy_type: MockStrategyEnum, - llm_name: str, - llm_config: genai_types.GenerateContentConfig, -) -> base_mock_strategies.MockStrategy: - """Creates a mock strategy based on the given type.""" - if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TOOL_SPEC: - return tool_spec_mock_strategy.ToolSpecMockStrategy(llm_name, llm_config) - if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TRACING: - return base_mock_strategies.TracingMockStrategy() - raise ValueError(f"Unknown mock strategy type: {mock_strategy_type}") - - -class AgentSimulatorEngine: - """Core engine to handle the simulation logic.""" - - def __init__(self, config: AgentSimulatorConfig): - self._config = config - self._tool_sim_configs = { - c.tool_name: c for c in config.tool_simulation_configs - } - self._is_analyzed = False - self._tool_connection_map: Optional[ToolConnectionMap] = None - self._analyzer = ToolConnectionAnalyzer( - llm_name=config.simulation_model, - llm_config=config.simulation_model_configuration, - ) - self._state_store = {} - self._random_generator = random.Random() - self._environment_data = config.environment_data - - async def simulate( - self, tool: BaseTool, args: Dict[str, Any], tool_context: Any - ) -> Optional[Dict[str, Any]]: - """Simulates a tool call.""" - if tool.name not in self._tool_sim_configs: - return None - - tool_sim_config = self._tool_sim_configs[tool.name] - - if not self._is_analyzed and any( - c.mock_strategy_type != MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED - for c in self._config.tool_simulation_configs - ): - agent = tool_context._invocation_context.agent - if isinstance(agent, LlmAgent): - tools = await agent.canonical_tools(tool_context) - self._tool_connection_map = await self._analyzer.analyze(tools) - self._is_analyzed = True - - for injection_config in tool_sim_config.injection_configs: - if injection_config.match_args: - if not all( - item in args.items() for item in injection_config.match_args.items() - ): - continue - - if injection_config.random_seed is not None: - self._random_generator.seed(injection_config.random_seed) - - if ( - self._random_generator.random() - < injection_config.injection_probability - ): - time.sleep(injection_config.injected_latency_seconds) - if injection_config.injected_error: - return { - "error_code": ( - injection_config.injected_error.injected_http_error_code - ), - "error_message": injection_config.injected_error.error_message, - } - if injection_config.injected_response: - return injection_config.injected_response - - # If no injection was applied, fall back to the mock strategy. - if ( - tool_sim_config.mock_strategy_type - == MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED - ): - agent_simulator_logger.warning( - "Tool '%s' did not hit any injection config and has no mock strategy" - " configured. Returning no-op.", - tool.name, - ) - return None - - mock_strategy = _create_mock_strategy( - tool_sim_config.mock_strategy_type, - self._config.simulation_model, - self._config.simulation_model_configuration, - ) - return await mock_strategy.mock( - tool, - args, - tool_context, - self._tool_connection_map, - self._state_store, - self._environment_data, - ) +__all__ = ["AgentSimulatorEngine"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_factory.py b/src/google/adk/tools/agent_simulator/agent_simulator_factory.py index 49a7cd2c3e..11af5df84e 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_factory.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_factory.py @@ -14,58 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Awaitable -from typing import Callable -from typing import Dict -from typing import Optional +import warnings -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin -from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_factory import EnvironmentSimulationFactory as AgentSimulatorFactory -from ...utils.feature_decorator import experimental +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_factory is moved to" + " google.adk.tools.environment_simulation.environment_simulation_factory", + DeprecationWarning, + stacklevel=2, +) - -@experimental -class AgentSimulatorFactory: - """Factory for creating AgentSimulator instances.""" - - @staticmethod - def create_callback( - config: AgentSimulatorConfig, - ) -> Callable[ - [BaseTool, Dict[str, Any], Any], Awaitable[Optional[Dict[str, Any]]] - ]: - """Creates a callback function for AgentSimulator. - - Args: - config: The configuration for the AgentSimulator. - - Returns: - A callable that can be used as a before_tool_callback or after_tool_callback. - """ - simulator_engine = AgentSimulatorEngine(config) - - async def _agent_simulator_callback( - tool: BaseTool, args: Dict[str, Any], tool_context: Any - ) -> Optional[Dict[str, Any]]: - return await simulator_engine.simulate(tool, args, tool_context) - - return _agent_simulator_callback - - @staticmethod - def create_plugin( - config: AgentSimulatorConfig, - ) -> AgentSimulatorPlugin: - """Creates an ADK Plugin for AgentSimulator. - - Args: - config: The configuration for the AgentSimulator. - - Returns: - An instance of AgentSimulatorPlugin that can be used as an ADK plugin. - """ - simulator_engine = AgentSimulatorEngine(config) - return AgentSimulatorPlugin(simulator_engine) +__all__ = ["AgentSimulatorFactory"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py b/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py index 0fb86a9f4d..9f883a0a3f 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,27 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.plugins import BasePlugin -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine -from google.adk.tools.base_tool import BaseTool -from google.adk.tools.tool_context import ToolContext +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin as AgentSimulatorPlugin +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_plugin is moved to" + " google.adk.tools.environment_simulation.environment_simulation_plugin", + DeprecationWarning, + stacklevel=2, +) -class AgentSimulatorPlugin(BasePlugin): - """ADK Plugin for AgentSimulator.""" - - name: str = "AgentSimulator" - - def __init__(self, simulator_engine: AgentSimulatorEngine): - self._simulator_engine = simulator_engine - - async def before_tool_callback( - self, tool: BaseTool, tool_args: dict[str, Any], tool_context: ToolContext - ) -> Optional[Dict[str, Any]]: - """Invokes the AgentSimulatorEngine before a tool call.""" - return await self._simulator_engine.simulate(tool, tool_args, tool_context) +__all__ = ["AgentSimulatorPlugin"] diff --git a/src/google/adk/tools/agent_simulator/strategies/__init__.py b/src/google/adk/tools/agent_simulator/strategies/__init__.py index 58d482ea38..f1dc50a2fa 100644 --- a/src/google/adk/tools/agent_simulator/strategies/__init__.py +++ b/src/google/adk/tools/agent_simulator/strategies/__init__.py @@ -11,3 +11,12 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + +import warnings + +warnings.warn( + "google.adk.tools.agent_simulator.strategies is moved to" + " google.adk.tools.environment_simulation.strategies", + DeprecationWarning, + stacklevel=2, +) diff --git a/src/google/adk/tools/agent_simulator/strategies/base.py b/src/google/adk/tools/agent_simulator/strategies/base.py index d4ffe1bd92..7d71fbb07c 100644 --- a/src/google/adk/tools/agent_simulator/strategies/base.py +++ b/src/google/adk/tools/agent_simulator/strategies/base.py @@ -14,46 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap +from google.adk.tools.environment_simulation.strategies.base import MockStrategy +warnings.warn( + "google.adk.tools.agent_simulator.strategies.base is moved to" + " google.adk.tools.environment_simulation.strategies.base", + DeprecationWarning, + stacklevel=2, +) -class MockStrategy: - """Base class for mock strategies.""" - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - """Generates a mock response for a tool call.""" - raise NotImplementedError() - - -class TracingMockStrategy(MockStrategy): - """Mocks a tool response based on tracing and an LLM.""" - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - # TODO: Implement tracing LLM-based mocking. - return {"status": "error", "error_message": "Not implemented"} +__all__ = ["MockStrategy"] diff --git a/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py b/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py index 2ad3a89265..9da5c78480 100644 --- a/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py +++ b/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py @@ -14,192 +14,16 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import json -import re -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.models.llm_request import LlmRequest -from google.adk.models.registry import LLMRegistry -from google.adk.tools.agent_simulator.strategies.base import MockStrategy -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool -from google.adk.utils.context_utils import Aclosing -from google.genai import types as genai_types +from google.adk.tools.environment_simulation.strategies.tool_spec_mock_strategy import ToolSpecMockStrategy -_TOOL_SPEC_MOCK_PROMPT_TEMPLATE = """ - You are a stateful tool simulator. Your task is to generate a - realistic JSON response for a tool call, maintaining consistency based - on a shared state. +warnings.warn( + "google.adk.tools.agent_simulator.strategies.tool_spec_mock_strategy is" + " moved to" + " google.adk.tools.environment_simulation.strategies.tool_spec_mock_strategy", + DeprecationWarning, + stacklevel=2, +) - {environment_data_snippet} - - Here is the map of how tools connect via stateful parameters: - {tool_connection_map_json} - - Here is the current state of all stateful parameters: - {state_store_json} - - You are now simulating the following tool call: - Tool Name: {tool_name} - Tool Description: {tool_description} - Tool Schema: {tool_schema_json} - Tool Arguments: {tool_arguments_json} - - Your instructions: - 1. Analyze the tool call. Is it a "creating" or "consuming" tool - based on the connection map? - 2. If it's a "consuming" tool, check the provided arguments against - the state store. If an ID is provided that does not exist in the - state, return a realistic error (e.g., a 404 Not Found error). - Otherwise, use the data from the state and the provided environment data - to generate the response. - 3. If it's a "creating" tool, generate a new, unique ID for the - stateful parameter (e.g., a random string for a ticket_id). Include - this new ID in your response. I will then update the state with it. - 4. Leverage the provided environment data (if any) to make your response - more realistic and consistent with the simulated environment. - 5. Generate a convincing, valid JSON object that mocks the tool's - response. The response must be only the JSON object, without any - additional text or formatting. - 6. The response must start with '{{' and end with '}}'. - """ - - -def _find_value_by_key(data: Any, target_key: str) -> Optional[Any]: - """Recursively searches for a value by key in a nested structure.""" - if isinstance(data, dict): - if target_key in data: - return data[target_key] - for key, value in data.items(): - result = _find_value_by_key(value, target_key) - if result is not None: - return result - elif isinstance(data, list): - for item in data: - result = _find_value_by_key(item, target_key) - if result is not None: - return result - return None - - -class ToolSpecMockStrategy(MockStrategy): - """Mocks a tool response based on the tool's specification.""" - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - llm_registry = LLMRegistry() - llm_class = llm_registry.resolve(self._llm_name) - self._llm = llm_class(model=self._llm_name) - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - declaration = tool._get_declaration() - if not declaration: - return { - "status": "error", - "error_message": "Could not get tool declaration.", - } - - tool_connection_map_json = ( - json.dumps(tool_connection_map.model_dump(exclude_none=True), indent=2) - if tool_connection_map - else "''" - ) - state_store_json = json.dumps(state_store, indent=2) - tool_schema_json = json.dumps( - declaration.model_dump(exclude_none=True), indent=2 - ) - tool_arguments_json = json.dumps(args, indent=2) - - environment_data_snippet = "" - if environment_data: - environment_data_snippet = f""" - Here is relevant environment data (e.g., database snippet, context information): - - {environment_data} - - Use this information to generate more realistic responses. - """ - - prompt = _TOOL_SPEC_MOCK_PROMPT_TEMPLATE.format( - environment_data_snippet=environment_data_snippet, - tool_connection_map_json=tool_connection_map_json, - state_store_json=state_store_json, - tool_name=tool.name, - tool_description=tool.description, - tool_schema_json=tool_schema_json, - tool_arguments_json=tool_arguments_json, - ) - - request_contents = [ - genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") - ] - request = LlmRequest( - contents=request_contents, - model=self._llm_name, - config=self._llm_config, - generation_config=genai_types.GenerateContentConfig( - response_mime_type="application/json" - ), - ) - response_text = "" - async with Aclosing(self._llm.generate_content_async(request)) as agen: - async for llm_response in agen: - generated_content: genai_types.Content = llm_response.content - if generated_content.parts: - for part in generated_content.parts: - if part.text: - response_text += part.text - - try: - clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) - clean_json_text = re.sub(r"\n```$", "", clean_json_text) - mock_response = json.loads(clean_json_text.strip()) - # Determine if the current tool is mutative by checking the connection map. - is_mutative = False - if tool_connection_map: - all_creating_tools = { - tool_name - for param in tool_connection_map.stateful_parameters - for tool_name in param.creating_tools - } - if tool.name in all_creating_tools: - is_mutative = True - - # After getting the response, update the state if this was a mutative tool. - if is_mutative: - for param_info in tool_connection_map.stateful_parameters: - param_name = param_info.parameter_name - # Only update the state for the specific parameter this tool - # creates/modifies. - if tool.name in param_info.creating_tools: - param_value = _find_value_by_key(mock_response, param_name) - if param_value is not None: - if param_name not in state_store: - state_store[param_name] = {} - # Store the entire response as the new state for this entity. - # This correctly captures creations and modifications (like - # cancellation). - state_store[param_name][param_value] = mock_response - - return mock_response - except json.JSONDecodeError: - return { - "status": "error", - "error_message": "Failed to generate valid JSON mock response.", - "llm_output": response_text, - } +__all__ = ["ToolSpecMockStrategy"] diff --git a/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py b/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py index 91655e7b85..599db0111a 100644 --- a/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py +++ b/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py @@ -14,128 +14,15 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import json -import logging -import re -from typing import Any -from typing import Dict -from typing import List +import warnings -from google.adk.models.llm_request import LlmRequest -from google.adk.models.registry import LLMRegistry -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool -from google.adk.utils.context_utils import Aclosing -from google.genai import types as genai_types +from google.adk.tools.environment_simulation.tool_connection_analyzer import ToolConnectionAnalyzer -_TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE = """ - You are an expert software architect analyzing a set of tools to understand - stateful dependencies. Your task is to identify parameters that act as - stateful identifiers (like IDs) and classify the tools that interact with - them. +warnings.warn( + "google.adk.tools.agent_simulator.tool_connection_analyzer is moved to" + " google.adk.tools.environment_simulation.tool_connection_analyzer", + DeprecationWarning, + stacklevel=2, +) - **Definitions:** - - A **"creating tool"** is a tool that creates a new resource or makes a - significant state change to an existing one (e.g., creating, updating, - canceling, or deleting). Tool names like `create_account`, `cancel_order`, - or `update_price` are strong indicators. These tools are responsible for - generating or modifying the state associated with an ID. - - A **"consuming tool"** is a tool that uses a resource's ID to retrieve - information without changing its state. Tool names like `get_user`, - `list_events`, or `find_order` are strong indicators. - - **Your Goal:** - Analyze the following tool schemas and identify the shared, stateful - parameters (like `user_id`, `order_id`, etc.). - - For each stateful parameter you identify, classify the tools into - `creating_tools` and `consuming_tools` based on the definitions above. - - **Example:** A `create_ticket` tool would be a `creating_tool` for - `ticket_id`. A `get_ticket` tool would be a `consuming_tool` for - `ticket_id`. A `list_tickets` tool that takes a `user_id` as input is a - `consuming_tool` for `user_id`. - - **Analyze the following tool schemas:** - {tool_schemas_json} - - **Output Format:** - Generate a JSON object with a single key, "stateful_parameters", which is a - list. Each item in the list must have these keys: - - "parameter_name": The name of the shared parameter (e.g., "ticket_id"). - - "creating_tools": A list of tools that create or modify this parameter's - state. - - "consuming_tools": A list of tools that use this parameter as input for - read-only operations. - - ONLY return the raw JSON object. - Your response must start with '{{' and end with '}}'. - """ - - -class ToolConnectionAnalyzer: - """ - Uses an LLM to analyze stateful connections between tools. For example, - get_ticket will consume a ticket_id created by create_ticket, the analyzer - will create a list of such connections. - """ - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - llm_registry = LLMRegistry() - llm_class = llm_registry.resolve(self._llm_name) - self._llm = llm_class(model=self._llm_name) - - async def analyze(self, tools: List[BaseTool]) -> ToolConnectionMap: - """ - Analyzes a list of tools and returns a map of their connections. - """ - tool_schemas = [ - tool._get_declaration().model_dump(exclude_none=True) - for tool in tools - if tool._get_declaration() - ] - tool_schemas_json = json.dumps(tool_schemas, indent=2) - prompt = _TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE.format( - tool_schemas_json=tool_schemas_json - ) - - request_contents = [ - genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") - ] - request = LlmRequest( - contents=request_contents, - model=self._llm_name, - config=self._llm_config, - generation_config=genai_types.GenerateContentConfig( - response_mime_type="application/json" - ), - ) - response_text = "" - async with Aclosing(self._llm.generate_content_async(request)) as agen: - async for llm_response in agen: - generated_content: genai_types.Content = llm_response.content - if not generated_content.parts: - continue - for part in generated_content.parts: - if part.text: - response_text += part.text - - try: - clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) - clean_json_text = re.sub(r"\n```$", "", clean_json_text) - response_json = json.loads(clean_json_text.strip()) - except json.JSONDecodeError: - logging.warning( - "Failed to parse tool connection analysis from LLM. Proceeding" - " without connection map. Error: %s\nLLM Output:\n%s", - e, - response_text, - ) - return ToolConnectionMap(stateful_parameters=[]) - return ToolConnectionMap.model_validate(response_json) +__all__ = ["ToolConnectionAnalyzer"] diff --git a/src/google/adk/tools/agent_simulator/tool_connection_map.py b/src/google/adk/tools/agent_simulator/tool_connection_map.py index 4063b3c368..0560995bf7 100644 --- a/src/google/adk/tools/agent_simulator/tool_connection_map.py +++ b/src/google/adk/tools/agent_simulator/tool_connection_map.py @@ -14,26 +14,16 @@ from __future__ import annotations -from typing import List +import warnings -from pydantic import BaseModel +from google.adk.tools.environment_simulation.tool_connection_map import StatefulParameter +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +warnings.warn( + "google.adk.tools.agent_simulator.tool_connection_map is moved to" + " google.adk.tools.environment_simulation.tool_connection_map", + DeprecationWarning, + stacklevel=2, +) -class StatefulParameter(BaseModel): - """Represents a stateful parameter and its connections.""" - - parameter_name: str - """The name of the shared parameter (e.g., "ticket_id").""" - - creating_tools: List[str] - """A list of tools that generate this parameter.""" - - consuming_tools: List[str] - """A list of tools that use this parameter as input.""" - - -class ToolConnectionMap(BaseModel): - """Represents the map of tool connections.""" - - stateful_parameters: List[StatefulParameter] - """A list of stateful parameters and their connections.""" +__all__ = ["StatefulParameter", "ToolConnectionMap"] diff --git a/src/google/adk/tools/agent_tool.py b/src/google/adk/tools/agent_tool.py index f53c18df51..8a43eb6311 100644 --- a/src/google/adk/tools/agent_tool.py +++ b/src/google/adk/tools/agent_tool.py @@ -113,10 +113,12 @@ def __init__( skip_summarization: bool = False, *, include_plugins: bool = True, + propagate_grounding_metadata: bool = False, ): self.agent = agent self.skip_summarization: bool = skip_summarization self.include_plugins = include_plugins + self.propagate_grounding_metadata = propagate_grounding_metadata super().__init__(name=agent.name, description=agent.description) @@ -247,6 +249,7 @@ async def run_async( ) last_content = None + last_grounding_metadata = None async with Aclosing( runner.run_async( user_id=session.user_id, session_id=session.id, new_message=content @@ -258,6 +261,7 @@ async def run_async( tool_context.state.update(event.actions.state_delta) if event.content: last_content = event.content + last_grounding_metadata = event.grounding_metadata # Clean up runner resources (especially MCP sessions) # to avoid "Attempted to exit cancel scope in a different task" errors @@ -273,6 +277,12 @@ async def run_async( tool_result = validate_schema(output_schema, merged_text) else: tool_result = merged_text + + if self.propagate_grounding_metadata and last_grounding_metadata: + tool_context.state['temp:_adk_grounding_metadata'] = ( + last_grounding_metadata + ) + return tool_result @override diff --git a/src/google/adk/tools/apihub_tool/clients/secret_client.py b/src/google/adk/tools/apihub_tool/clients/secret_client.py index 2d83fe7cb5..a7d0079e16 100644 --- a/src/google/adk/tools/apihub_tool/clients/secret_client.py +++ b/src/google/adk/tools/apihub_tool/clients/secret_client.py @@ -14,107 +14,16 @@ from __future__ import annotations -import json -from typing import Optional - -import google.auth -from google.auth import default as default_service_credential -import google.auth.transport.requests -from google.cloud import secretmanager -from google.oauth2 import service_account - - -class SecretManagerClient: - """A client for interacting with Google Cloud Secret Manager. - - This class provides a simplified interface for retrieving secrets from - Secret Manager, handling authentication using either a service account - JSON keyfile (passed as a string) or a preexisting authorization token. - - Attributes: - _credentials: Google Cloud credentials object (ServiceAccountCredentials - or Credentials). - _client: Secret Manager client instance. - """ - - def __init__( - self, - service_account_json: Optional[str] = None, - auth_token: Optional[str] = None, - ): - """Initializes the SecretManagerClient. - - Args: - service_account_json: The content of a service account JSON keyfile (as - a string), not the file path. Must be valid JSON. - auth_token: An existing Google Cloud authorization token. - - Raises: - ValueError: If neither `service_account_json` nor `auth_token` is - provided, - or if both are provided. Also raised if the service_account_json - is not valid JSON. - google.auth.exceptions.GoogleAuthError: If authentication fails. - """ - if service_account_json: - try: - credentials = service_account.Credentials.from_service_account_info( - json.loads(service_account_json) - ) - except json.JSONDecodeError as e: - raise ValueError(f"Invalid service account JSON: {e}") from e - elif auth_token: - credentials = google.auth.credentials.Credentials( - token=auth_token, - refresh_token=None, - token_uri=None, - client_id=None, - client_secret=None, - ) - request = google.auth.transport.requests.Request() - credentials.refresh(request) - else: - try: - credentials, _ = default_service_credential( - scopes=["https://www.googleapis.com/auth/cloud-platform"] - ) - except Exception as e: - raise ValueError( - "'service_account_json' or 'auth_token' are both missing, and" - f" error occurred while trying to use default credentials: {e}" - ) from e - - if not credentials: - raise ValueError( - "Must provide either 'service_account_json' or 'auth_token', not both" - " or neither." - ) - - self._credentials = credentials - self._client = secretmanager.SecretManagerServiceClient( - credentials=self._credentials - ) - - def get_secret(self, resource_name: str) -> str: - """Retrieves a secret from Google Cloud Secret Manager. - - Args: - resource_name: The full resource name of the secret, in the format - "projects/*/secrets/*/versions/*". Usually you want the "latest" - version, e.g., - "projects/my-project/secrets/my-secret/versions/latest". - - Returns: - The secret payload as a string. - - Raises: - google.api_core.exceptions.GoogleAPIError: If the Secret Manager API - returns an error (e.g., secret not found, permission denied). - Exception: For other unexpected errors. - """ - try: - response = self._client.access_secret_version(name=resource_name) - return response.payload.data.decode("UTF-8") - except Exception as e: - raise e # Re-raise the exception to allow for handling by the caller - # Consider logging the exception here before re-raising. +import warnings + +try: + from google.adk.integrations.secret_manager.secret_client import SecretManagerClient + + warnings.warn( + "SecretManagerClient has been moved to" + " google.adk.integrations.secret_manager. Please update your imports.", + DeprecationWarning, + stacklevel=2, + ) +except ImportError: + pass diff --git a/src/google/adk/tools/base_toolset.py b/src/google/adk/tools/base_toolset.py index 53c3b309d8..25f0d6a2a2 100644 --- a/src/google/adk/tools/base_toolset.py +++ b/src/google/adk/tools/base_toolset.py @@ -80,6 +80,9 @@ def __init__( """ self.tool_filter = tool_filter self.tool_name_prefix = tool_name_prefix + self._cached_invocation_id: Optional[str] = None + self._cached_prefixed_tools: Optional[list[BaseTool]] = None + self._use_invocation_cache = True @abstractmethod async def get_tools( @@ -112,9 +115,20 @@ async def get_tools_with_prefix( Returns: list[BaseTool]: A list of tools with prefixed names if tool_name_prefix is provided. """ + invocation_id = readonly_context.invocation_id if readonly_context else None + + if ( + self._use_invocation_cache + and self._cached_prefixed_tools is not None + and self._cached_invocation_id == invocation_id + ): + return self._cached_prefixed_tools + tools = await self.get_tools(readonly_context) if not self.tool_name_prefix: + self._cached_invocation_id = invocation_id + self._cached_prefixed_tools = tools return tools prefix = self.tool_name_prefix @@ -147,6 +161,8 @@ def _get_prefixed_declaration(): tool_copy._get_declaration = _create_prefixed_declaration() prefixed_tools.append(tool_copy) + self._cached_invocation_id = invocation_id + self._cached_prefixed_tools = prefixed_tools return prefixed_tools async def close(self) -> None: diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index 38e996430c..89de3bf34f 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -16,10 +16,14 @@ from __future__ import annotations +import asyncio import dataclasses +import logging +import os import pathlib +import resource import shlex -import subprocess +import signal from typing import Any from typing import Optional @@ -29,16 +33,26 @@ from .base_tool import BaseTool from .tool_context import ToolContext +logger = logging.getLogger("google_adk." + __name__) + @dataclasses.dataclass(frozen=True) class BashToolPolicy: - """Configuration for allowed bash commands based on prefix matching. + """Configuration for allowed bash commands and resource limits. Set allowed_command_prefixes to ("*",) to allow all commands (default), or explicitly list allowed prefixes. + + Values for max_memory_bytes, max_file_size_bytes, and max_child_processes + will be enforced upon the spawned subprocess. """ allowed_command_prefixes: tuple[str, ...] = ("*",) + blocked_operators: tuple[str, ...] = () + timeout_seconds: Optional[int] = 30 + max_memory_bytes: Optional[int] = None + max_file_size_bytes: Optional[int] = None + max_child_processes: Optional[int] = None def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: @@ -47,6 +61,10 @@ def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: if not stripped: return "Command is required." + for op in policy.blocked_operators: + if op in command: + return f"Command contains blocked operator: {op}" + if "*" in policy.allowed_command_prefixes: return None @@ -58,6 +76,29 @@ def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: return f"Command blocked. Permitted prefixes are: {allowed}" +def _set_resource_limits(policy: BashToolPolicy) -> None: + """Sets resource limits for the subprocess based on the provided policy.""" + try: + resource.setrlimit(resource.RLIMIT_CORE, (0, 0)) + if policy.max_memory_bytes: + resource.setrlimit( + resource.RLIMIT_AS, + (policy.max_memory_bytes, policy.max_memory_bytes), + ) + if policy.max_file_size_bytes: + resource.setrlimit( + resource.RLIMIT_FSIZE, + (policy.max_file_size_bytes, policy.max_file_size_bytes), + ) + if policy.max_child_processes: + resource.setrlimit( + resource.RLIMIT_NPROC, + (policy.max_child_processes, policy.max_child_processes), + ) + except (ValueError, OSError) as e: + logger.warning("Failed to set resource limits: %s", e) + + @features.experimental(features.FeatureName.SKILL_TOOLSET) class ExecuteBashTool(BaseTool): """Tool to execute a validated bash command within a workspace directory.""" @@ -132,19 +173,77 @@ async def run_async( elif not tool_context.tool_confirmation.confirmed: return {"error": "This tool call is rejected."} + stdout = None + stderr = None try: - result = subprocess.run( - shlex.split(command), - shell=False, + process = await asyncio.create_subprocess_exec( + *shlex.split(command), cwd=str(self._workspace), - capture_output=True, - text=True, - timeout=30, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + preexec_fn=lambda: _set_resource_limits(self._policy), ) + + try: + stdout, stderr = await asyncio.wait_for( + process.communicate(), timeout=self._policy.timeout_seconds + ) + except asyncio.TimeoutError: + try: + if process.pid: + os.killpg(process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + stdout, stderr = await process.communicate() + return { + "error": ( + f"Command timed out after {self._policy.timeout_seconds}" + " seconds." + ), + "stdout": ( + stdout.decode(errors="replace") + if stdout + else "" + ), + "stderr": ( + stderr.decode(errors="replace") + if stderr + else "" + ), + "returncode": process.returncode, + } + finally: + try: + if process.pid: + os.killpg(process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + return { + "stdout": ( + stdout.decode(errors="replace") + if stdout + else "" + ), + "stderr": ( + stderr.decode(errors="replace") + if stderr + else "" + ), + "returncode": process.returncode, + } + except Exception as e: # pylint: disable=broad-except + logger.exception("ExecuteBashTool execution failed") + + stdout_res = ( + stdout.decode(errors="replace") if stdout else "" + ) + stderr_res = ( + stderr.decode(errors="replace") if stderr else "" + ) + return { - "stdout": result.stdout, - "stderr": result.stderr, - "returncode": result.returncode, + "error": f"Execution failed: {str(e)}", + "stdout": stdout_res, + "stderr": stderr_res, } - except subprocess.TimeoutExpired: - return {"error": "Command timed out after 30 seconds."} diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index 54cc19f889..0c4f910df9 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""BigQuery Tools (Experimental). +"""BigQuery Tools. BigQuery Tools under this module are hand crafted and customized while the tools under google.adk.tools.google_api_tool are auto generated based on API diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py index 958ce9d7ec..768b001a87 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -14,21 +14,19 @@ from __future__ import annotations -from ...features import experimental from ...features import FeatureName from .._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] BIGQUERY_DEFAULT_SCOPE = ["https://www.googleapis.com/auth/bigquery"] -@experimental(FeatureName.GOOGLE_CREDENTIALS_CONFIG) class BigQueryCredentialsConfig(BaseGoogleCredentialsConfig): - """BigQuery Credentials Configuration for Google API tools (Experimental). + """BigQuery Credentials Configuration for Google API tools. Please do not use this in production, as it may be deprecated later. """ diff --git a/src/google/adk/tools/bigquery/bigquery_skill.py b/src/google/adk/tools/bigquery/bigquery_skill.py new file mode 100644 index 0000000000..bf03764966 --- /dev/null +++ b/src/google/adk/tools/bigquery/bigquery_skill.py @@ -0,0 +1,43 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Pre-packaged BigQuery skill for use with SkillToolset.""" + +from __future__ import annotations + +import pathlib + +from ...skills import load_skill_from_dir +from ...skills import Skill + +_SKILL_DIR = pathlib.Path(__file__).parent / "skills" / "bigquery-ai-ml" + + +def get_bigquery_skill() -> Skill: + """Returns the pre-packaged BigQuery data analysis skill. + + This skill follows the agentskills.io specification and + provides curated instructions for BigQuery data analysis. + Use it with SkillToolset alongside BigQueryToolset: + + from google.adk.tools.bigquery import BigQueryToolset + from google.adk.tools.bigquery.bigquery_skill import get_bigquery_skill + from google.adk.tools.skill_toolset import SkillToolset + + bq_skill = get_bigquery_skill() + toolset = SkillToolset(skills=[bq_skill]) + bigquery_toolset = BigQueryToolset(...) + agent = LlmAgent(tools=[bigquery_toolset, toolset]) + """ + return load_skill_from_dir(_SKILL_DIR) diff --git a/src/google/adk/tools/bigquery/bigquery_toolset.py b/src/google/adk/tools/bigquery/bigquery_toolset.py index dba5f8ee1a..37a5070996 100644 --- a/src/google/adk/tools/bigquery/bigquery_toolset.py +++ b/src/google/adk/tools/bigquery/bigquery_toolset.py @@ -25,7 +25,6 @@ from . import metadata_tool from . import query_tool from . import search_tool -from ...features import experimental from ...features import FeatureName from ...tools.base_tool import BaseTool from ...tools.base_toolset import BaseToolset @@ -35,7 +34,6 @@ from .config import BigQueryToolConfig -@experimental(FeatureName.BIG_QUERY_TOOLSET) class BigQueryToolset(BaseToolset): """BigQuery Toolset contains tools for interacting with BigQuery data and metadata.""" diff --git a/src/google/adk/tools/bigquery/client.py b/src/google/adk/tools/bigquery/client.py index 2cb4e67c37..526a181420 100644 --- a/src/google/adk/tools/bigquery/client.py +++ b/src/google/adk/tools/bigquery/client.py @@ -14,6 +14,7 @@ from __future__ import annotations +import os from typing import List from typing import Optional from typing import Union @@ -25,12 +26,16 @@ from google.cloud import dataplex_v1 from ... import version +from ...utils._telemetry_context import _is_visual_builder USER_AGENT_BASE = f"google-adk/{version.__version__}" BQ_USER_AGENT = f"adk-bigquery-tool {USER_AGENT_BASE}" DP_USER_AGENT = f"adk-dataplex-tool {USER_AGENT_BASE}" USER_AGENT = BQ_USER_AGENT +# Internal identifier for Visual Builder usage tracking. +_VISUAL_BUILDER_UA = "google-adk-visual-builder" + def get_bigquery_client( *, @@ -52,6 +57,10 @@ def get_bigquery_client( """ user_agents = [BQ_USER_AGENT] + + if _is_visual_builder.get(): + user_agents.append(_VISUAL_BUILDER_UA) + if user_agent: if isinstance(user_agent, str): user_agents.append(user_agent) @@ -88,6 +97,10 @@ def get_dataplex_catalog_client( """ user_agents = [DP_USER_AGENT] + + if _is_visual_builder.get(): + user_agents.append(_VISUAL_BUILDER_UA) + if user_agent: if isinstance(user_agent, str): user_agents.append(user_agent) diff --git a/src/google/adk/tools/bigquery/config.py b/src/google/adk/tools/bigquery/config.py index 15dea8a5d0..e2c56ab1e3 100644 --- a/src/google/adk/tools/bigquery/config.py +++ b/src/google/adk/tools/bigquery/config.py @@ -21,7 +21,6 @@ from pydantic import ConfigDict from pydantic import field_validator -from ...features import experimental from ...features import FeatureName @@ -48,7 +47,6 @@ class WriteMode(Enum): """All write operations are allowed.""" -@experimental(FeatureName.BIG_QUERY_TOOL_CONFIG) class BigQueryToolConfig(BaseModel): """Configuration for BigQuery tools.""" diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md new file mode 100644 index 0000000000..b1c0742ad6 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md @@ -0,0 +1,47 @@ +--- +name: bigquery-ai-ml +license: Apache-2.0 +metadata: + author: google-adk + version: "1.0" +description: | + Skill for BigQuery AI and Machine Learning queries using standard SQL + and `AI.*` functions (preferred over dedicated tools). + +--- + +# Skill: bigquery-ai-ml + +This skill defines the usage and rules for BigQuery AI/ML functions, +preferring SQL-based Skills over dedicated BigQuery tools. + +## 1. Skill vs Tool Preference (BigQuery AI/ML) + +Agents should **prefer using the Skill (SQL via `execute_sql()`)** over +dedicated BigQuery tools for functionalities like Forecasting and Anomaly +Detection. + +Use `execute_sql()` with the standard BigQuery `AI.*` functions for these tasks +instead of the corresponding high-level tools. + +## 2. Mandatory Reference Routing + +This skill file does not contain the syntax for these functions. You **MUST** +read the associated reference file before generating SQL. + +**CRITICAL**: DO NOT GUESS filenames. You MUST only use the exact paths +provided below. + +| Function | Description | Required Reference File to Retrieve | +| :--- | :--- | :--- | +| **AI.FORECAST** | Time-series forecasting via the pre-trained TimesFM model | `references/bigquery_ai_forecast.md` | +| **AI.CLASSIFY** | Categorize unstructured data into predefined labels | `references/bigquery_ai_classify.md` | +| **AI.DETECT_ANOMALIES** | Identify deviations in time-series data via the pre-trained TimesFM model | `references/bigquery_ai_detect_anomalies.md` | +| **AI.GENERATE** | General-purpose text and content generation | `references/bigquery_ai_generate.md` | +| **AI.GENERATE_BOOL** | Generate a boolean value (TRUE/FALSE) based on a prompt | `references/bigquery_ai_generate_bool.md` | +| **AI.GENERATE_DOUBLE** | Generate a floating-point number based on a prompt | `references/bigquery_ai_generate_double.md` | +| **AI.GENERATE_INT** | Generate an integer value based on a prompt | `references/bigquery_ai_generate_int.md` | +| **AI.IF** | Evaluate a natural-language boolean condition | `references/bigquery_ai_if.md` | +| **AI.SCORE** | Rank items by semantic relevance (use with ORDER BY) | `references/bigquery_ai_score.md` | +| **AI.SIMILARITY** | Compute cosine similarity between two inputs | `references/bigquery_ai_similarity.md` | +| **AI.SEARCH** | Semantic search on tables with autonomous embedding generation | `references/bigquery_ai_search.md` | diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md new file mode 100644 index 0000000000..749e47e2d7 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md @@ -0,0 +1,92 @@ +# BigQuery AI.Classify + +`AI.CLASSIFY` categorizes unstructured data into a predefined set of labels. + +## Syntax Reference + +```sql +AI.CLASSIFY( + [ input => ] 'INPUT', + [ categories => ] 'CATEGORIES' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, output_mode => 'OUTPUT_MODE' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :-------------------- | +| **`input`** | **Required** | String | The text content to | +: : : : classify. : +| **`categories`** | **Required** | Array | A list of target | +: : : : categories/labels. : +: : : : Can be : +: : : : `ARRAY` or : +: : : : `ARRAY>` (label, : +: : : : description). : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model name, e.g., | +: : : : `'gemini-2.5-flash'`. : +| **`output_mode`** | Optional | String | `'single'` (default) | +: : : : or `'multi'`. : +: : : : Determines the output : +: : : : type. : + +### Output Schema + +The output type depends on the `output_mode` argument: + +| Output Mode | output_mode Value | Type | Description | +| :--------------- | :---------------- | :-------------- | :------------------ | +| **Single Label** | `NULL` (Default) | `STRING` | The single category | +: : : : that best fits the : +: : : : input. : +| **Single Label | `'single'` | `ARRAY` | An array containing | +: (Explicit)** : : : exactly one : +: : : : category string. : +| **Multi Label** | `'multi'` | `ARRAY` | An array containing | +: : : : zero or more : +: : : : matching : +: : : : categories. : + +## Examples + +### Classify text into categories + +```sql +SELECT + content, + AI.CLASSIFY( + content, + categories => ['Spam', 'Not Spam', 'Urgent'], + connection_id => 'my-project.us.my-connection' + ) as classification +FROM `dataset.emails`; +``` + +### Classify text into multiple topics + +``` +SELECT + title, + body, + AI.CLASSIFY( + body, + categories => ['tech', 'sport', 'business', 'politics', 'entertainment', 'other'], + output_mode => 'multi') AS categories +FROM + `bigquery-public-data.bbc_news.fulltext` +LIMIT 100; +``` + +### Classify reviews by sentiment + +SELECT AI.CLASSIFY( ('Classify the review by sentiment: ', review), categories +=> [('green', 'The review is positive.'), ('yellow', 'The review is neutral.'), +('red', 'The review is negative.')]) AS ai_review_rating, reviewer_rating AS +human_provided_rating, review, FROM `bigquery-public-data.imdb.reviews` WHERE +title = 'The English Patient' diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md new file mode 100644 index 0000000000..5fc86a954a --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md @@ -0,0 +1,110 @@ +# BigQuery AI.Detect_Anomalies + +`AI.DETECT_ANOMALIES` uses the pre-trained **TimesFM** model to identify +deviations in time series data without needing to train a custom model. + +## Syntax Reference + +This function compares a target dataset against a historical dataset to identify +anomalies. + +```sql +SELECT * +FROM AI.DETECT_ANOMALIES( + { TABLE `project.dataset.history_table` | (SELECT * FROM history_query) }, + { TABLE `project.dataset.target_table` | (SELECT * FROM target_query) }, + data_col => 'DATA_COL', + timestamp_col => 'TIMESTAMP_COL' + [, model => 'MODEL'] + [, id_cols => ID_COLS] + [, anomaly_prob_threshold => ANOMALY_PROB_THRESHOLD] +) + +``` + +### Input Arguments + +Argument | Requirement | Type | Description +:--------------------------- | :----------- | :------------ | :---------- +**`historical_data`** | **Required** | Table/Query | The source table or subquery containing historical data for training context. +**`target_data`** | **Required** | Table/Query | The source table or subquery containing data to analyze for anomalies. +**`data_col`** | **Required** | String | The numeric column to analyze. +**`timestamp_col`** | **Required** | String | The column containing dates/timestamps. +**`id_cols`** | Optional | Array | Grouping columns for multiple series (e.g., `['store_id']`). +**`anomaly_prob_threshold`** | Optional | Float64 | Threshold for anomaly detection (0 to 1). Defaults to 0.95. +**`model`** | Optional | String | Model version. Defaults to `'TimesFM 2.0'`. + +### Output Schema + +| Column | Type | Description | +| :------------------------------- | :--------- | :--------------------------- | +| **`id_cols`** | (As Input) | Original identifiers for the | +: : : series. : +| **`time_series_timestamp`** | TIMESTAMP | Timestamp for the analyzed | +: : : points. : +| **`time_series_data`** | FLOAT64 | The original data value. | +| **`is_anomaly`** | BOOL | TRUE if the point is | +: : : identified as an anomaly. : +| **`lower_bound`** | FLOAT64 | Lower bound of the expected | +: : : range. : +| **`upper_bound`** | FLOAT64 | Upper bound of the expected | +: : : range. : +| **`anomaly_probability`** | FLOAT64 | Probability that the point | +: : : is an anomaly. : +| **`ai_detect_anomalies_status`** | STRING | Error messages or empty | +: : : string on success. A minimum : +: : : of 3 data points is : +: : : required. : + +## Examples + +### Basic Anomaly Detection + +Detect anomalies in daily bike trips for a specific 2-month window based on +prior history. + +```sql +WITH bike_trips AS ( + SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date +) +SELECT * +FROM AI.DETECT_ANOMALIES( + -- Historical context (Training data equivalent) + (SELECT * FROM bike_trips WHERE date <= DATE('2016-06-30')), + -- Target range (Data to inspect for anomalies) + (SELECT * FROM bike_trips WHERE date BETWEEN '2016-07-01' AND '2016-09-01'), + data_col => 'num_trips', + timestamp_col => 'date' +); + +``` + +### Multivariate Detection (Multiple Series) + +Use `id_cols` to detect anomalies separately for different user types (e.g., +Subscriber vs. Customer) in the same query. + +```sql +WITH bike_trips AS ( + SELECT + EXTRACT(DATE FROM starttime) AS date, usertype, gender, + COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date, usertype, gender + ) +SELECT * +FROM + AI.DETECT_ANOMALIES( + # Historical data from a query + (SELECT * FROM bike_trips WHERE date <= DATE('2016-06-30')), + # Target data from a query + (SELECT * FROM bike_trips WHERE date BETWEEN '2016-07-01' AND '2016-09-01'), + data_col => 'num_trips', + timestamp_col => 'date', + id_cols => ['usertype', 'gender'], + model => "TimesFM 2.5", + anomaly_prob_threshold => 0.8); + +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md new file mode 100644 index 0000000000..a384b2c321 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md @@ -0,0 +1,106 @@ +# BigQuery AI.Forecast + +`AI.FORECAST` leverages the pre-trained **TimesFM** foundation model to generate +forecasts without the need to train and manage custom models. + +## Syntax Reference + +```sql +SELECT + * +FROM + AI.FORECAST( + { TABLE `project.dataset.table` | (QUERY_STATEMENT) }, + data_col => 'DATA_COL', + timestamp_col => 'TIMESTAMP_COL' + [, model => 'MODEL'] + [, id_cols => ID_COLS] + [, horizon => HORIZON] + [, confidence_level => CONFIDENCE_LEVEL] + [, output_historical_time_series => OUTPUT_HISTORICAL_TIME_SERIES] + [, context_window => CONTEXT_WINDOW] + ) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :--------------------- | :----------- | :------------ | :---------------- | +| **`input_data`** | **Required** | | The source table | +: : : : or subquery : +: : : : containing : +: : : : historical data. : +| **`data_col`** | **Required** | String | The numeric | +: : : : column to : +: : : : predict. : +| **`timestamp_col`** | **Required** | String | The column | +: : : : containing : +: : : : dates/timestamps. : +| **`id_cols`** | Optional | Array | Grouping columns | +: : : : for multiple : +: : : : series (e.g., : +: : : : `['store_id']`). : +| **`horizon`** | Optional | Int64 | Number of future | +: : : : points to : +: : : : predict. Defaults : +: : : : to 10. The valid : +: : : : input range is : +: : : : [1, 10,000] : +| **`confidence_level`** | Optional | Float64 | Confidence | +: : : : interval (0 to : +: : : : 1). Defaults to : +: : : : 0.95. : +| **`model`** | Optional | String | Model version. | +: : : : Defaults to : +: : : : `'TimesFM 2.0'`. : +| **`context_window`** | Optional | Int64 | The number of | +: : : : historical data : +: : : : points the model : +: : : : uses to forecast. : +: : : : The min value is : +: : : : 64 and the max : +: : : : value is 2048 for : +: : : : `'TimesFM 2.0'`. : +: : : : If not set, the : +: : : : model determines : +: : : : this : +: : : : automatically. : + +### Output Schema + +The schema adjusts based on the `output_historical_time_series` flag. + +Column | Type | Included if output_historical_time_series=FALSE | Included if output_historical_time_series=TRUE | Description +:------------------------------------ | :--------- | :---------------------------------------------- | :--------------------------------------------- | :---------- +**`id_cols`** | (As Input) | Yes | Yes | Original identifiers for the series. +**`forecast_timestamp`** | TIMESTAMP | **Yes** | No | Timestamp for predicted points. +**`forecast_value`** | FLOAT64 | **Yes** | No | The 50% quantile (median) prediction. +**`time_series_timestamp`** | TIMESTAMP | No | **Yes** | Uniform timestamp column for both history and forecast. +**`time_series_data`** | FLOAT64 | No | **Yes** | Merged column: actual values for history, median for forecast. +**`time_series_type`** | STRING | No | **Yes** | Label: `'history'` or `'forecast'`. +**`prediction_interval_lower_bound`** | FLOAT64 | Yes | Yes | Lower bound (NULL for historical rows). +**`prediction_interval_upper_bound`** | FLOAT64 | Yes | Yes | Upper bound (NULL for historical rows). +**`confidence_level`** | FLOAT64 | Yes | Yes | The constant confidence level used. +**`ai_forecast_status`** | STRING | Yes | Yes | Error messages or empty string on success. A minimum of 3 data points is required. + +## Examples + +### Forecasting with History + +```sql +WITH + citibike_trips AS ( + SELECT EXTRACT(DATE FROM starttime) AS date, usertype, COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date, usertype + ) +SELECT * +FROM + AI.FORECAST( + TABLE citibike_trips, + data_col => 'num_trips', + timestamp_col => 'date', + id_cols => ['usertype'], + horizon => 30, + output_historical_time_series => true); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md new file mode 100644 index 0000000000..3b15e70e40 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md @@ -0,0 +1,116 @@ +# BigQuery AI.Generate + +`AI.GENERATE` is a general-purpose function text and content generation. + +## Syntax Reference + +```sql +AI.GENERATE( + [ prompt => ] 'PROMPT', + [, endpoint => 'ENDPOINT'] + [, model_params => 'MODEL_PARAMS'] + [, output_schema => 'OUTPUT_SCHEMA'] + [, connection_id => 'CONNECTION_ID'] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :-------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction for the : +: : : : model. : +| **`connection_id`** | Optional | String | The connection ID. | +: : : : Optional if : +: : : : configured via other : +: : : : means or testing. : +| **`endpoint`** | Optional | String | The model name, e.g., | +: : : : `'gemini-2.5-flash'`. : +| **`output_schema`** | Optional | String | Schema definition for | +: : : : structured output, : +: : : : e.g., `'answer BOOL, : +: : : : reason STRING'`. : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : + +### Output Schema + +Returns a `STRUCT` with the following fields: + +| Column Name | Type | Description | +| :------------------ | :------------------- | :----------------------------- | +| **`result`** | `STRING` (or Custom) | The generated content. If | +: : : `output_schema` is used, this : +: : : field is replaced by the : +: : : schema's fields. : +| **`status`** | `STRING` | API response status (empty on | +: : : success). : +| **`full_response`** | `JSON` | The complete raw JSON response | +: : : from the model (including : +: : : safety ratings, usage : +: : : metadata). : + +## Examples + +### Basic Text Generation + +```sql +SELECT + AI.GENERATE( + 'Summarize this article: ' || article_content, + connection_id => 'my-project.us.my-connection', + endpoint => 'gemini-2.5-flash' + ) as summary +FROM `dataset.articles` +LIMIT 5; +``` + +### Structured Output Generation + +```sql +SELECT + AI.GENERATE( + 'Extract the date and amount from this invoice: ' || invoice_text, + output_schema => 'date DATE, amount FLOAT64' + ) as extracted_data +FROM `dataset.invoices`; +``` + +### Process images in a Cloud Storage bucket + +``` +CREATE SCHEMA IF NOT EXISTS bqml_tutorial; + +CREATE OR REPLACE EXTERNAL TABLE bqml_tutorial.product_images + WITH CONNECTION DEFAULT OPTIONS ( + object_metadata = 'SIMPLE', + uris = ['gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*.png']); + +SELECT + uri, + STRING(OBJ.GET_ACCESS_URL(ref,'r').access_urls.read_url) AS signed_url, + AI.GENERATE( + ("What is this: ", OBJ.GET_ACCESS_URL(ref, 'r')), + output_schema => + "image_description STRING, entities_in_the_image ARRAY").* +FROM bqml_tutorial.product_images +WHERE uri LIKE "%aquarium%"; +``` + +### Using Grounding + +``` +SELECT + name, + AI.GENERATE( + ('Please check the weather of ', name, ' for today.'), + model_params => JSON '{"tools": [{"googleSearch": {}}]}' + ) +FROM UNNEST(['Seattle', 'NYC', 'Austin']) AS name; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md new file mode 100644 index 0000000000..95b6c11460 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md @@ -0,0 +1,51 @@ +# BigQuery AI.Generate_Bool + +`AI.GENERATE_BOOL` generates a boolean value (`TRUE` or `FALSE`) based on the +prompt. + +## Syntax Reference + +```sql +AI.GENERATE_BOOL( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, model_params => 'MODEL_PARAMS'] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :------- | :-------------------------------------- +**`result`** | `BOOL` | The generated boolean value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_BOOL( + 'Is this a valid email address? ' || email_address +) as is_valid +FROM `dataset.users`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md new file mode 100644 index 0000000000..6c89f52a6c --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md @@ -0,0 +1,50 @@ +# BigQuery AI.Generate_Double + +`AI.GENERATE_DOUBLE` generates a floating-point number based on the prompt. + +## Syntax Reference + +```sql +AI.GENERATE_DOUBLE( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, model_params => 'MODEL_PARAMS'] + [, endpoint => 'ENDPOINT' ] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :-------- | :-------------------------------------- +**`result`** | `FLOAT64` | The generated floating-point value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_DOUBLE( + 'What is the total price mentioned in this text? ' || text_content +) as total_price +FROM `dataset.receipts`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md new file mode 100644 index 0000000000..1a8ead6dc1 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md @@ -0,0 +1,50 @@ +# BigQuery AI.Generate_Int + +`AI.GENERATE_INT` generates an integer value based on the prompt. + +## Syntax Reference + +```sql +AI.GENERATE_INT( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, request_type => 'REQUEST_TYPE'] + [, model_params => 'MODEL_PARAMS'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :------- | :-------------------------------------- +**`result`** | `INT64` | The generated integer value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_INT( + 'How many items are in this list? ' || list_content +) as item_count +FROM `dataset.inventory`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md new file mode 100644 index 0000000000..c12d709df1 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md @@ -0,0 +1,55 @@ +# BigQuery AI.If + +`AI.IF` is a semantic boolean function used to evaluate a condition described in +natural language. + +The function can be used to filter and join data based on conditions described +in natural language or multimodal input. The following are common use cases: + +- Sentiment analysis: Find customer reviews with negative sentiment. +- Topic analysis: Identify news articles related to a specific subject. +- Image analysis: Select images that contain a specific item. +- Security: Identify suspicious emails. + +## Syntax Reference + +```sql +AI.IF( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :--------------------- | +| **`prompt`** | **Required** | String/Struct | The prompt text or a | +: : : : struct/tuple of : +: : : : `(data, instruction)`. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :----- | :---------------------------------------- | +| **(Scalar Result)** | `BOOL` | `TRUE` if the condition is met, `FALSE` | +: : : otherwise. Returns `NULL` on error/safety : +: : : filter. : + +## Examples + +### Filter rows based on semantic meaning + +```sql +SELECT * +FROM `dataset.table` +WHERE AI.IF( + (content_column, 'Is this review positive?') +); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md new file mode 100644 index 0000000000..1f7952cf98 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md @@ -0,0 +1,52 @@ +# BigQuery AI.Score + +The `AI.SCORE` function is commonly used with the ORDER BY clause and works well +when you want to rank items. The following are common use cases: + +- Retail: Find the top 5 most negative customer reviews about a product. +- Hiring: Find the top 10 resumes that appear most qualified for a job post. +- Customer success: Find the top 20 best customer support interactions. + +## Syntax Reference + +```sql +AI.SCORE( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :--------------------- | +| **`prompt`** | **Required** | String/Struct | The prompt text or a | +: : : : struct/tuple of : +: : : : `(data, instruction)`. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :-------- | :----------------------------------------- | +| **(Scalar Result)** | `FLOAT64` | A numerical score representing the degree | +: : : to which the data matches the instruction. : + +## Examples + +### Rank rows by semantic relevance + +```sql +SELECT * +FROM `dataset.table` +ORDER BY AI.SCORE( + (content_column, 'relevance to sports'), + connection_id => 'my-project.us.my-connection' +) DESC +LIMIT 10; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md new file mode 100644 index 0000000000..63d4a789cb --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md @@ -0,0 +1,76 @@ +# BigQuery AI.Search + +`AI.SEARCH` is a table-valued function for semantic search on tables that have +autonomous embedding generation enabled. If your table has a vector index on the +embedding column, then AI.SEARCH uses it to optimize the search. + +You can use AI.SEARCH to help with the following tasks: + +- Semantic search: search entities ranked by semantic similarity. +- Recommendation: return entities with attributes similar to a given entity. +- Classification: return the class of entities whose attributes are similar to + the given entity. +- Clustering: cluster entities whose attributes are similar to a given entity. +- Outlier detection: return entities whose attributes are least related to the + given entity. + +## Syntax Reference + +```sql +AI.SEARCH( + { TABLE base_table | base_table_query }, + column_to_search, + query_value + [, top_k => top_k_value ] + [, distance_type => distance_type_value ] + [, options => options_value] +) +``` + +### Input Arguments + +Argument | Requirement | Type | Description +:--------------------- | :----------- | :------------- | :---------- +**`base_table`** | **Required** | Table/Subquery | The table to search for nearest neighbor embeddings. The table must have autonomous embedding generation enabled. +**`column_to_search`** | **Required** | STRING | A STRING literal that contains the name of the string column to search +**`query_value`** | **Required** | STRING | A string literal that represents the search query. +**`top_k`** | Optional | INT64 | A named argument with an INT64 value, specifies the number of nearest neighbors to return. The default is 10. +**`distance_type`** | Optional | STRING | A named argument with a STRING value. distance_type_value specifies the type of metric to use to compute the distance between two vectors. Supported distance types are EUCLIDEAN, COSINE, and DOT_PRODUCT. The default is EUCLIDEAN. +**`options`** | Optional | STRING | A named argument with a JSON-formatted STRING value that specifies the following search options: `fraction_lists_to_search` or `use_brute_force` + +### Output Schema + +Column Name | Type | Description +:------------- | :------ | :---------------------------------------------------- +**`base`** | STRUCT | A struct containing all columns from the input table. +**`distance`** | FLOAT64 | The distance score between the query and the result. + +## Examples + +```sql +# Create a table of products and descriptions with a generated embedding column. +CREATE TABLE mydataset.products ( + name STRING, + description STRING, + description_embedding STRUCT, status STRING> + GENERATED ALWAYS AS (AI.EMBED( + description, + connection_id => 'us.example_connection', + endpoint => 'text-embedding-005' + )) + STORED OPTIONS( asynchronous = TRUE ) +); + +# Insert product descriptions into the table. +# The description_embedding column is automatically updated. +INSERT INTO mydataset.products (name, description) VALUES + ("Lounger chair", "A comfortable chair for relaxing in."), + ("Super slingers", "An exciting board game for the whole family."), + ("Encyclopedia set", "A collection of informational books."); + +SELECT + base.name, + base.description, + distance +FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy"); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md new file mode 100644 index 0000000000..f1c9be72d0 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md @@ -0,0 +1,48 @@ +# BigQuery AI.Similarity + +`AI.SIMILARITY` computes the cosine similarity between two inputs + +## Syntax Reference + +```sql +AI.SIMILARITY( + content1 => 'CONTENT1', + content2 => 'CONTENT2' + endpoint => 'ENDPOINT' + [, model_params => 'MODEL_PARAMS'] + [, connection_id => 'CONNECTION_ID'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :---------------------------- | +| **`content1`** | **Required** | String | The first text content. | +| **`content2`** | **Required** | String | The second text content to | +: : : : compare against. : +| **`connection_id`** | Optional | String | The connection ID to use for | +: : : : the LLM. : +| **`endpoint`** | Optional | String | The model endpoint (e.g. | +: : : : `'multimodalembedding@001'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :-------- | :---------------------------------- | +| **(Scalar Result)** | `FLOAT64` | A similarity score (e.g., cosine | +: : : similarity). Returns null if error. : + +## Examples + +```sql +SELECT AI.SIMILARITY( + content1 => 'The cat sat on the mat', + content2 => 'A feline is resting on the rug', + endpoint => 'text-embedding-005' +) as similarity_score; +``` diff --git a/src/google/adk/tools/computer_use/base_computer.py b/src/google/adk/tools/computer_use/base_computer.py index 84da84be59..021887fcc2 100644 --- a/src/google/adk/tools/computer_use/base_computer.py +++ b/src/google/adk/tools/computer_use/base_computer.py @@ -16,11 +16,16 @@ import abc from enum import Enum +from typing import Any from typing import Literal from typing import Optional +from typing import TYPE_CHECKING import pydantic +if TYPE_CHECKING: + from ..tool_context import ToolContext + from ...features import experimental from ...features import FeatureName @@ -60,6 +65,17 @@ class BaseComputer(abc.ABC): computer environments, including web browsers and other interactive systems. """ + async def prepare(self, tool_context: "ToolContext") -> None: + """Called before each tool invocation to prepare resources. + + Override this to set up session-level resources (sandbox, tokens, etc.) + using tool_context.state for persistence across invocations. + + Args: + tool_context: The tool context with session state access. + """ + pass + @abc.abstractmethod async def screen_size(self) -> tuple[int, int]: """Returns the screen size of the environment. diff --git a/src/google/adk/tools/computer_use/computer_use_toolset.py b/src/google/adk/tools/computer_use/computer_use_toolset.py index 922150aa73..b3207adc26 100644 --- a/src/google/adk/tools/computer_use/computer_use_toolset.py +++ b/src/google/adk/tools/computer_use/computer_use_toolset.py @@ -15,6 +15,8 @@ from __future__ import annotations import asyncio +import functools +import inspect import logging from typing import Any from typing import Callable @@ -34,7 +36,7 @@ from .computer_use_tool import ComputerUseTool # Methods that should be excluded when creating tools from BaseComputer methods -EXCLUDED_METHODS = {"screen_size", "environment", "close"} +EXCLUDED_METHODS = {"screen_size", "environment", "close", "prepare"} logger = logging.getLogger("google_adk." + __name__) @@ -57,6 +59,52 @@ async def _ensure_initialized(self) -> None: await self._computer.initialize() self._initialized = True + def _wrap_method_with_state_binding( + self, method: Callable[..., Any] + ) -> Callable[..., Any]: + """Wrap a computer method to bind session state from tool_context. + + This wrapper intercepts the tool_context parameter injected by ADK's + runtime and binds it to the computer's session_state property before + calling the actual method. This allows computers to access session + state without being coupled to tool_context directly. + + Args: + method: The computer method to wrap. + + Returns: + A wrapped method that binds session state before calling. + """ + computer = self._computer + + @functools.wraps(method) + async def wrapper( + *args: Any, tool_context: ToolContext = None, **kwargs: Any + ) -> Any: + # Prepare computer before each tool call + # Computers that need session state (e.g., AgentEngineSandboxComputer) + # override prepare() to bind state for sandbox/token sharing + if tool_context is not None: + await computer.prepare(tool_context) + + # Call the original method (without tool_context - computer doesn't need it) + return await method(*args, **kwargs) + + # Create a signature that includes both original parameters and tool_context. + # This is needed because FunctionTool filters args based on signature params. + orig_sig = inspect.signature(method) + new_params = list(orig_sig.parameters.values()) + [ + inspect.Parameter( + "tool_context", + inspect.Parameter.KEYWORD_ONLY, + default=None, + annotation=ToolContext, + ) + ] + wrapper.__signature__ = orig_sig.replace(parameters=new_params) + + return wrapper + @staticmethod async def adapt_computer_use_tool( method_name: str, @@ -151,14 +199,20 @@ async def get_tools( if method_name in EXCLUDED_METHODS: continue + # Skip session_state property + if method_name == "session_state": + continue + # Check if it's a method defined in Computer class attr = getattr(BaseComputer, method_name, None) if attr is not None and callable(attr): # Get the corresponding method from the concrete instance instance_method = getattr(self._computer, method_name) - computer_methods.append(instance_method) + # Wrap with state binding so session_state is set before each call + wrapped_method = self._wrap_method_with_state_binding(instance_method) + computer_methods.append(wrapped_method) - # Create ComputerUseTool instances for each method + # Create ComputerUseTool instances for each wrapped method self._tools = [ ComputerUseTool( diff --git a/src/google/adk/tools/crewai_tool.py b/src/google/adk/tools/crewai_tool.py index fca8ba9f50..1160a711eb 100644 --- a/src/google/adk/tools/crewai_tool.py +++ b/src/google/adk/tools/crewai_tool.py @@ -14,145 +14,18 @@ from __future__ import annotations -import inspect -from typing import Any -from typing import Callable +import warnings -from google.genai import types -from typing_extensions import override +from google.adk.integrations.crewai import CrewaiTool +from google.adk.integrations.crewai import CrewaiToolConfig -from . import _automatic_function_calling_util -from .function_tool import FunctionTool -from .tool_configs import BaseToolConfig -from .tool_configs import ToolArgsConfig -from .tool_context import ToolContext +warnings.warn( + "google.adk.tools.crewai_tool is moved to google.adk.integrations.crewai", + DeprecationWarning, + stacklevel=2, +) -try: - from crewai.tools import BaseTool as CrewaiBaseTool -except ImportError as e: - raise ImportError( - "Crewai Tools require pip install 'google-adk[extensions]'." - ) from e - - -class CrewaiTool(FunctionTool): - """Use this class to wrap a CrewAI tool. - - If the original tool name and description are not suitable, you can override - them in the constructor. - """ - - tool: CrewaiBaseTool - """The wrapped CrewAI tool.""" - - def __init__(self, tool: CrewaiBaseTool, *, name: str, description: str): - super().__init__(tool.run) - self.tool = tool - if name: - self.name = name - elif tool.name: - # Right now, CrewAI tool name contains white spaces. White spaces are - # not supported in our framework. So we replace them with "_". - self.name = tool.name.replace(' ', '_').lower() - if description: - self.description = description - elif tool.description: - self.description = tool.description - - @override - async def run_async( - self, *, args: dict[str, Any], tool_context: ToolContext - ) -> Any: - """Override run_async to handle CrewAI-specific parameter filtering. - - CrewAI tools use **kwargs pattern, so we need special parameter filtering - logic that allows all parameters to pass through while removing only - reserved parameters like 'self' and 'tool_context'. - - Note: 'tool_context' is removed from the initial args dictionary to prevent - duplicates, but is re-added if the function signature explicitly requires it - as a parameter. - """ - # Preprocess arguments (includes Pydantic model conversion) - args_to_call = self._preprocess_args(args) - - signature = inspect.signature(self.func) - valid_params = {param for param in signature.parameters} - - # Check if function accepts **kwargs - has_kwargs = any( - param.kind == inspect.Parameter.VAR_KEYWORD - for param in signature.parameters.values() - ) - - if has_kwargs: - # For functions with **kwargs, we pass all arguments. We defensively - # remove arguments like `self` that are managed by the framework and not - # intended to be passed through **kwargs. - args_to_call.pop('self', None) - # We also remove context param that might have been passed in `args`, - # as it will be explicitly injected later if it's a valid parameter. - args_to_call.pop(self._context_param_name, None) - else: - # For functions without **kwargs, use the original filtering. - args_to_call = { - k: v for k, v in args_to_call.items() if k in valid_params - } - - # Inject context if it's an explicit parameter. This will add it - # or overwrite any value that might have been passed in `args`. - if self._context_param_name in valid_params: - args_to_call[self._context_param_name] = tool_context - - # Check for missing mandatory arguments - mandatory_args = self._get_mandatory_args() - missing_mandatory_args = [ - arg for arg in mandatory_args if arg not in args_to_call - ] - - if missing_mandatory_args: - missing_mandatory_args_str = '\n'.join(missing_mandatory_args) - error_str = f"""Invoking `{self.name}()` failed as the following mandatory input parameters are not present: -{missing_mandatory_args_str} -You could retry calling this tool, but it is IMPORTANT for you to provide all the mandatory parameters.""" - return {'error': error_str} - - return await self._invoke_callable(self.func, args_to_call) - - @override - def _get_declaration(self) -> types.FunctionDeclaration: - """Build the function declaration for the tool.""" - function_declaration = _automatic_function_calling_util.build_function_declaration_for_params_for_crewai( - False, - self.name, - self.description, - self.func, - self.tool.args_schema.model_json_schema(), - ) - return function_declaration - - @override - @classmethod - def from_config( - cls: type[CrewaiTool], config: ToolArgsConfig, config_abs_path: str - ) -> CrewaiTool: - from ..agents import config_agent_utils - - crewai_tool_config = CrewaiToolConfig.model_validate(config.model_dump()) - tool = config_agent_utils.resolve_fully_qualified_name( - crewai_tool_config.tool - ) - name = crewai_tool_config.name - description = crewai_tool_config.description - return cls(tool, name=name, description=description) - - -class CrewaiToolConfig(BaseToolConfig): - tool: str - """The fully qualified path of the CrewAI tool instance.""" - - name: str = '' - """The name of the tool.""" - - description: str = '' - """The description of the tool.""" +__all__ = [ + "CrewaiTool", + "CrewaiToolConfig", +] diff --git a/src/google/adk/tools/discovery_engine_search_tool.py b/src/google/adk/tools/discovery_engine_search_tool.py index 11bc37c7ed..54603e6a83 100644 --- a/src/google/adk/tools/discovery_engine_search_tool.py +++ b/src/google/adk/tools/discovery_engine_search_tool.py @@ -14,6 +14,11 @@ from __future__ import annotations +from collections.abc import Mapping +import enum +import json +import logging +import re from typing import Any from typing import Optional @@ -25,6 +30,91 @@ from .function_tool import FunctionTool +logger = logging.getLogger('google_adk.' + __name__) + +_STRUCTURED_STORE_ERROR_PATTERN = re.compile( + r'search_result_mode.*DOCUMENTS', re.IGNORECASE +) + +_DEFAULT_ENDPOINT = 'discoveryengine.googleapis.com' +_GLOBAL_LOCATION = 'global' +_LOCATION_PATTERN = re.compile( + r'/locations/([a-z0-9-]+)(?:/|$)', flags=re.IGNORECASE +) +_VALID_LOCATION_PATTERN = re.compile(r'^[a-z0-9-]+$') + + +def _normalize_location(location: str, location_type: str) -> str: + """Normalizes and validates a location value.""" + normalized_location = location.strip().lower() + if not normalized_location: + raise ValueError(f'{location_type} must not be empty if specified.') + if not _VALID_LOCATION_PATTERN.fullmatch(normalized_location): + raise ValueError( + f'{location_type} must contain only letters, digits, and hyphens.' + ) + return normalized_location + + +def _extract_resource_location(resource_id: str) -> Optional[str]: + """Extracts and validates location from a resource id.""" + if '/locations/' not in resource_id.lower(): + return None + + location_match = _LOCATION_PATTERN.search(resource_id) + if not location_match: + raise ValueError('Invalid location in data_store_id or search_engine_id.') + return _normalize_location(location_match.group(1), 'resource location') + + +def _resolve_location(resource_id: str, location: Optional[str]) -> str: + """Resolves the Discovery Engine location to use for the endpoint.""" + inferred_location = _extract_resource_location(resource_id) + + if location is not None: + normalized_location = _normalize_location(location, 'location') + if inferred_location and normalized_location != inferred_location: + raise ValueError( + 'location must match the location in data_store_id or ' + 'search_engine_id.' + ) + return normalized_location + + if inferred_location: + return inferred_location + return _GLOBAL_LOCATION + + +def _build_client_options( + resource_id: str, + quota_project_id: Optional[str], + location: Optional[str], +) -> Optional[client_options.ClientOptions]: + """Builds client options for Discovery Engine requests.""" + client_options_kwargs = {} + resolved_location = _resolve_location(resource_id, location) + + if resolved_location != _GLOBAL_LOCATION: + client_options_kwargs['api_endpoint'] = ( + f'{resolved_location}-{_DEFAULT_ENDPOINT}' + ) + if quota_project_id: + client_options_kwargs['quota_project_id'] = quota_project_id + + if not client_options_kwargs: + return None + return client_options.ClientOptions(**client_options_kwargs) + + +class SearchResultMode(enum.Enum): + """Search result mode for discovery engine search.""" + + CHUNKS = 'CHUNKS' + """Results as chunks (default). Works for unstructured data.""" + + DOCUMENTS = 'DOCUMENTS' + """Results as documents. Required for structured datastores.""" + class DiscoveryEngineSearchTool(FunctionTool): """Tool for searching the discovery engine.""" @@ -38,6 +128,9 @@ def __init__( search_engine_id: Optional[str] = None, filter: Optional[str] = None, max_results: Optional[int] = None, + *, + search_result_mode: Optional[SearchResultMode] = None, + location: Optional[str] = None, ): """Initializes the DiscoveryEngineSearchTool. @@ -51,33 +144,43 @@ def __init__( "projects/{project}/locations/{location}/collections/{collection}/engines/{engine}". filter: The filter to be applied to the search request. Default is None. max_results: The maximum number of results to return. Default is None. + search_result_mode: The search result mode. When None (default), + automatically detects the correct mode by trying CHUNKS first and + falling back to DOCUMENTS if the datastore requires it. Set explicitly + to CHUNKS or DOCUMENTS to skip auto-detection. + location: Optional endpoint location override. + Examples: "global", "us", "eu". If not specified, location is inferred + from `data_store_id` or `search_engine_id` and defaults to "global". """ super().__init__(self.discovery_engine_search) if (data_store_id is None and search_engine_id is None) or ( data_store_id is not None and search_engine_id is not None ): raise ValueError( - "Either data_store_id or search_engine_id must be specified." + 'Either data_store_id or search_engine_id must be specified.' ) if data_store_specs is not None and search_engine_id is None: raise ValueError( - "search_engine_id must be specified if data_store_specs is specified." + 'search_engine_id must be specified if data_store_specs is specified.' ) self._serving_config = ( - f"{data_store_id or search_engine_id}/servingConfigs/default_config" + f'{data_store_id or search_engine_id}/servingConfigs/default_config' ) self._data_store_specs = data_store_specs self._search_engine_id = search_engine_id self._filter = filter self._max_results = max_results + self._search_result_mode = search_result_mode + self._location = location credentials, _ = google.auth.default() - quota_project_id = getattr(credentials, "quota_project_id", None) - options = ( - client_options.ClientOptions(quota_project_id=quota_project_id) - if quota_project_id - else None + quota_project_id = getattr(credentials, 'quota_project_id', None) + resource_id = data_store_id or search_engine_id or '' + options = _build_client_options( + resource_id=resource_id, + quota_project_id=quota_project_id, + location=location, ) self._discovery_engine_client = discoveryengine.SearchServiceClient( credentials=credentials, client_options=options @@ -93,19 +196,45 @@ def discovery_engine_search( query: The search query. Returns: - A dictionary containing the status of the request and the list of search - results, which contains the title, url and content. + A dictionary containing the status of the request and the list of + search results, which contains the title, url and content. """ + try: + mode = self._search_result_mode + if mode is not None: + return self._do_search(query, mode) + + # Auto-detect: try CHUNKS first, fall back to DOCUMENTS + # if the datastore requires it. + try: + return self._do_search(query, SearchResultMode.CHUNKS) + except GoogleAPICallError as e: + if _STRUCTURED_STORE_ERROR_PATTERN.search(str(e)): + logger.info( + 'CHUNKS mode failed for structured datastore,' + ' retrying with DOCUMENTS mode.' + ) + self._search_result_mode = SearchResultMode.DOCUMENTS + return self._do_search(query, SearchResultMode.DOCUMENTS) + raise + except GoogleAPICallError as e: + return {'status': 'error', 'error_message': str(e)} + + def _do_search( + self, + query: str, + mode: SearchResultMode, + ) -> dict[str, Any]: + """Executes a search request with the given mode. + + Raises: + GoogleAPICallError: If the search API call fails. + """ + content_search_spec = self._build_content_search_spec(mode) request = discoveryengine.SearchRequest( serving_config=self._serving_config, query=query, - content_search_spec=discoveryengine.SearchRequest.ContentSearchSpec( - search_result_mode=discoveryengine.SearchRequest.ContentSearchSpec.SearchResultMode.CHUNKS, - chunk_spec=discoveryengine.SearchRequest.ContentSearchSpec.ChunkSpec( - num_previous_chunks=0, - num_next_chunks=0, - ), - ), + content_search_spec=content_search_spec, ) if self._data_store_specs: @@ -116,28 +245,90 @@ def discovery_engine_search( request.page_size = self._max_results results = [] - try: - response = self._discovery_engine_client.search(request) - for item in response.results: + response = self._discovery_engine_client.search(request) + for item in response.results: + if mode == SearchResultMode.DOCUMENTS: + doc = item.document + if not doc: + continue + results.append(self._parse_document_result(doc)) + else: chunk = item.chunk if not chunk: continue + results.append(self._parse_chunk_result(chunk)) + return {'status': 'success', 'results': results} - title = "" - uri = "" - doc_metadata = chunk.document_metadata - if doc_metadata: - title = doc_metadata.title - uri = doc_metadata.uri - # Prioritize URI from struct_data if it exists. - if doc_metadata.struct_data and "uri" in doc_metadata.struct_data: - uri = doc_metadata.struct_data["uri"] - - results.append({ - "title": title, - "url": uri, - "content": chunk.content, - }) - except GoogleAPICallError as e: - return {"status": "error", "error_message": str(e)} - return {"status": "success", "results": results} + def _build_content_search_spec( + self, + mode: SearchResultMode, + ) -> discoveryengine.SearchRequest.ContentSearchSpec: + """Builds the ContentSearchSpec based on the search result mode.""" + spec_cls = discoveryengine.SearchRequest.ContentSearchSpec + if mode == SearchResultMode.DOCUMENTS: + return spec_cls( + search_result_mode=spec_cls.SearchResultMode.DOCUMENTS, + ) + return spec_cls( + search_result_mode=spec_cls.SearchResultMode.CHUNKS, + chunk_spec=spec_cls.ChunkSpec( + num_previous_chunks=0, + num_next_chunks=0, + ), + ) + + def _parse_chunk_result(self, chunk: discoveryengine.Chunk) -> dict[str, str]: + """Parses a chunk search result into a dict.""" + title = '' + uri = '' + doc_metadata = chunk.document_metadata + if doc_metadata: + title = doc_metadata.title + uri = doc_metadata.uri + # Prioritize URI from struct_data if it exists. + if doc_metadata.struct_data and 'uri' in doc_metadata.struct_data: + uri = doc_metadata.struct_data['uri'] + return { + 'title': title, + 'url': uri, + 'content': chunk.content, + } + + def _parse_document_result( + self, doc: discoveryengine.Document + ) -> dict[str, str]: + """Parses a document search result into a dict.""" + title = '' + uri = '' + content = '' + + # Structured data: fields are in struct_data. + if doc.struct_data: + data = dict(doc.struct_data) + title = data.pop('title', '') + uri = data.pop('uri', data.pop('link', '')) + content = json.dumps(data) + # Unstructured data: fields are in derived_struct_data. + elif doc.derived_struct_data: + data = dict(doc.derived_struct_data) + title = data.get('title', '') + uri = data.get('link', '') + snippets = data.get('snippets', []) + if snippets: + snippet_texts = [] + for s in snippets: + s_snippet = s.get('snippet') if isinstance(s, Mapping) else None + if s_snippet: + snippet_texts.append(str(s_snippet)) + else: + snippet_texts.append(str(s)) + content = '\n'.join(snippet_texts) + extractive_answers = data.get('extractive_answers', []) + if not content and extractive_answers: + content = '\n'.join(str(a) for a in extractive_answers) + + return { + 'title': title, + 'url': uri, + 'content': content, + } diff --git a/src/google/adk/tools/environment/__init__.py b/src/google/adk/tools/environment/__init__.py new file mode 100644 index 0000000000..adc6f4e493 --- /dev/null +++ b/src/google/adk/tools/environment/__init__.py @@ -0,0 +1,23 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Environment toolset for command execution and file I/O.""" + +from __future__ import annotations + +from ._environment_toolset import EnvironmentToolset + +__all__ = [ + 'EnvironmentToolset', +] diff --git a/src/google/adk/tools/environment/_constants.py b/src/google/adk/tools/environment/_constants.py new file mode 100644 index 0000000000..1950170e40 --- /dev/null +++ b/src/google/adk/tools/environment/_constants.py @@ -0,0 +1,46 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Constants for the environment toolset.""" + +from __future__ import annotations + +# --------------------------------------------------------------------------- +# Default limits +# --------------------------------------------------------------------------- + +DEFAULT_TIMEOUT = 30 +"""Default execution timeout in seconds.""" + +MAX_OUTPUT_CHARS = 30_000 +"""Maximum characters returned to the LLM per tool call.""" + +# --------------------------------------------------------------------------- +# System instruction templates +# --------------------------------------------------------------------------- + +ENVIRONMENT_INSTRUCTION = """\ +Your environment is at {working_dir}/ + +# Environment Rules + +DO: +- Chain sequential, dependent commands with `&&` in a single `Execute` call +- To read existing files, always use the `ReadFile` tool. Use `EditFile` to modify existing files. + +DON'T: +- Use `Execute` to run cat, head, or tail when `ReadFile` tools can do the job +- Combine `EditFile` or `ReadFile` with `Execute` in the same response (Instead, call the file tool first, then `Execute` in the next turn) +- Use multiple `Execute` calls for dependent commands (they run in parallel) +""" diff --git a/src/google/adk/tools/environment/_environment_toolset.py b/src/google/adk/tools/environment/_environment_toolset.py new file mode 100644 index 0000000000..42e5b02fb0 --- /dev/null +++ b/src/google/adk/tools/environment/_environment_toolset.py @@ -0,0 +1,109 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Environment toolset that provides tools to interact with an environment.""" + +from __future__ import annotations + +import logging +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from typing_extensions import override + +from ...utils.feature_decorator import experimental +from ..base_toolset import BaseToolset +from ._constants import ENVIRONMENT_INSTRUCTION +from ._tools import EditFileTool +from ._tools import ExecuteTool +from ._tools import ReadFileTool +from ._tools import WriteFileTool + +if TYPE_CHECKING: + from ...agents.readonly_context import ReadonlyContext + from ...environment._base_environment import BaseEnvironment + from ...models.llm_request import LlmRequest + from ..base_tool import BaseTool + from ..tool_context import ToolContext + +logger = logging.getLogger('google_adk.' + __name__) + + +@experimental +class EnvironmentToolset(BaseToolset): + """Toolset providing tools to interact with an environment. + + Tools provided: + - **Execute** -- run shell commands + - **ReadFile** -- read file contents + - **EditFile** -- surgical text replacement + - **WriteFile**q -- create/overwrite files + + The toolset injects an environment-level system instruction on each + LLM call that establishes environment identity and tool selection + rules. + """ + + def __init__( + self, + *, + environment: BaseEnvironment, + **kwargs: Any, + ): + """Create an environment toolset. + + Args: + environment: The environment used to execute commands and + perform file I/O. + **kwargs: Forwarded to ``BaseToolset.__init__``. + """ + super().__init__(**kwargs) + self._environment = environment + self._environment_initialized = False + + @override + async def get_tools( + self, + readonly_context: Optional[ReadonlyContext] = None, + ) -> list[BaseTool]: + if not self._environment_initialized: + await self._environment.initialize() + self._environment_initialized = True + return [ + ExecuteTool(self._environment), + ReadFileTool(self._environment), + EditFileTool(self._environment), + WriteFileTool(self._environment), + ] + + @override + async def process_llm_request( + self, *, tool_context: ToolContext, llm_request: LlmRequest + ) -> None: + """Inject environment-level system instruction.""" + if not self._environment_initialized: + await self._environment.initialize() + self._environment_initialized = True + working_dir = self._environment.working_dir + instruction = ENVIRONMENT_INSTRUCTION.format( + working_dir=working_dir, + ) + llm_request.append_instructions([instruction]) + + @override + async def close(self) -> None: + if self._environment_initialized: + await self._environment.close() + self._environment_initialized = False diff --git a/src/google/adk/tools/environment/_tools.py b/src/google/adk/tools/environment/_tools.py new file mode 100644 index 0000000000..662947de58 --- /dev/null +++ b/src/google/adk/tools/environment/_tools.py @@ -0,0 +1,370 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools available in the environment toolset.""" + +from __future__ import annotations + +import logging +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from google.genai import types +from typing_extensions import override + +from ...environment._base_environment import BaseEnvironment +from ...environment._base_environment import ExecutionResult +from ...utils.feature_decorator import experimental +from ..base_tool import BaseTool +from ._constants import DEFAULT_TIMEOUT +from ._constants import MAX_OUTPUT_CHARS + +if TYPE_CHECKING: + from ..tool_context import ToolContext + + +logger = logging.getLogger('google_adk.' + __name__) + + +def _truncate(text: str, limit: int = MAX_OUTPUT_CHARS) -> str: + """Truncate text to *limit* characters with a notice.""" + if len(text) <= limit: + return text + return text[:limit] + f'\n... (truncated, {len(text)} total chars)' + + +_EXECUTE_TOOL_DESCRIPTION = """ +Run a shell command in the environment. For running programs, tests, and build +commands ONLY. WARNING: Do NOT use for file reading -- use the ReadFile tool +instead. Shell commands like 'cat, head, tail will produce inferior results. +Good: Execute("python3 script.py"), Execute("pytest"), Execute("find ..."). +Bad: Execute("head ..."), Execute("cat ..."). +""" + + +@experimental +class ExecuteTool(BaseTool): + """Run a shell command in the environment's working directory.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='Execute', + description=_EXECUTE_TOOL_DESCRIPTION, + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'command': { + 'type': 'string', + 'description': ( + 'The shell command to execute. Chain dependent commands' + ' with &&.' + ), + }, + }, + 'required': ['command'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + command = args.get('command', '') + if not command: + return {'status': 'error', 'error': '`command` is required.'} + + logger.debug('Execute command: %s', command) + try: + execution_result: ExecutionResult = await self._environment.execute( + command, timeout=DEFAULT_TIMEOUT + ) + logger.debug( + 'Execute result: exit_code=%d, stdout=%r, stderr=%r, timed_out=%r', + execution_result.exit_code, + execution_result.stdout[:200] if execution_result.stdout else '', + execution_result.stderr[:200] if execution_result.stderr else '', + execution_result.timed_out, + ) + except Exception as e: + logger.exception('Execute failed: %s', e) + return {'status': 'error', 'error': str(e)} + + result: dict[str, Any] = {'status': 'ok'} + if execution_result.stdout: + result['stdout'] = _truncate(execution_result.stdout) + if execution_result.stderr: + result['stderr'] = _truncate(execution_result.stderr) + if execution_result.exit_code != 0: + result['status'] = 'error' + result['exit_code'] = execution_result.exit_code + if execution_result.timed_out: + result['status'] = 'error' + result['error'] = f'Command timed out after {DEFAULT_TIMEOUT}s.' + return result + + +@experimental +class ReadFileTool(BaseTool): + """Read a file from the environment.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='ReadFile', + description=( + 'Read the contents of a file in the environment. ' + 'Returns the file content with line numbers.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': ( + 'Path of the file to read within the environment.' + ), + }, + 'start_line': { + 'type': 'integer', + 'description': ( + 'First line to return (1-based, ' + 'inclusive). Defaults to 1.' + ), + }, + 'end_line': { + 'type': 'integer', + 'description': ( + 'Last line to return (1-based, ' + 'inclusive). Defaults to end of file.' + ), + }, + }, + 'required': ['path'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + start_line = args.get('start_line') + end_line = args.get('end_line') + + # Use `sed` to read the file if start_line or end_line are specified. + if (start_line and start_line > 1) or end_line: + start = start_line or 1 + if end_line: + sed_range = f'{start},{end_line}' + else: + sed_range = f'{start},$' + cmd = f"cat -n '{path}' | sed -n '{sed_range}p'" + res = await self._environment.execute(cmd) + if res.exit_code == 0: + return {'status': 'ok', 'content': _truncate(res.stdout)} + + try: + data_bytes = await self._environment.read_file(path) + text = data_bytes.decode('utf-8', errors='replace') + lines = text.splitlines(True) + total = len(lines) + start = max(1, start_line or 1) + end = min(total, end_line or total) + if start > total: + return { + 'status': 'error', + 'error': ( + f'`start_line` {start} exceeds file length ({total} lines).' + ), + 'total_lines': total, + } + if start > end: + return { + 'status': 'error', + 'error': f'`start_line` ({start}) is after `end_line` ({end}).', + 'total_lines': total, + } + selected = lines[start - 1 : end] + numbered = ''.join( + f'{start + i:6d}\t{line}' for i, line in enumerate(selected) + ) + result = {'status': 'ok', 'content': _truncate(numbered)} + if start > 1 or end < total: + result['total_lines'] = total + return result + except FileNotFoundError: + return {'status': 'error', 'error': f'File not found: {path}'} + except Exception as e: + return {'status': 'error', 'error': str(e)} + + +@experimental +class WriteFileTool(BaseTool): + """Create or overwrite a file in the environment.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='WriteFile', + description=( + 'Create or overwrite a file in the environment. ' + 'Use for new files or full rewrites. For small ' + 'changes to existing files, prefer EditFile.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': 'Path to the file within the environment.', + }, + 'content': { + 'type': 'string', + 'description': 'The full file content to write.', + }, + }, + 'required': ['path', 'content'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + content = args.get('content', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + try: + await self._environment.write_file(path, content) + except Exception as e: + return {'status': 'error', 'error': str(e)} + return {'status': 'ok', 'message': f'Wrote {path}'} + + +@experimental +class EditFileTool(BaseTool): + """Perform a surgical text replacement in an existing file.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='EditFile', + description=( + 'Replace an exact substring in an existing file ' + 'with new text. The old_string must appear exactly ' + 'once in the file. To create new files, use the WriteFile tool.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': ( + 'Path of the file to edit within the environment.' + ), + }, + 'old_string': { + 'type': 'string', + 'description': ( + 'The exact text to find and replace. Must not be empty.' + ), + }, + 'new_string': { + 'type': 'string', + 'description': 'The replacement text.', + }, + }, + 'required': ['path', 'old_string', 'new_string'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + old_string = args.get('old_string', '') + new_string = args.get('new_string', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + + if not old_string: + return { + 'status': 'error', + 'error': ( + '`old_string` cannot be empty. To create a new ' + 'file, use the WriteFile tool.' + ), + } + + try: + data_bytes = await self._environment.read_file(path) + content = data_bytes.decode('utf-8', errors='replace') + except FileNotFoundError: + return {'status': 'error', 'error': f'File not found: {path}'} + + count = content.count(old_string) + if count == 0: + return { + 'status': 'error', + 'error': ( + '`old_string` not found in file. Read the file first ' + 'to verify contents.' + ), + } + if count > 1: + return { + 'status': 'error', + 'error': ( + f'`old_string` appears {count} times. Provide more ' + 'surrounding context to make it unique.' + ), + } + + new_content = content.replace(old_string, new_string, 1) + await self._environment.write_file(path, new_content) + return {'status': 'ok', 'message': f'Edited {path}'} diff --git a/src/google/adk/tools/environment_simulation/__init__.py b/src/google/adk/tools/environment_simulation/__init__.py new file mode 100644 index 0000000000..4479d36bc0 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from google.adk.tools.environment_simulation.environment_simulation_factory import EnvironmentSimulationFactory + +__all__ = ["EnvironmentSimulationFactory"] diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_config.py b/src/google/adk/tools/environment_simulation/environment_simulation_config.py new file mode 100644 index 0000000000..a1ade063d3 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_config.py @@ -0,0 +1,170 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import enum +from typing import Any +from typing import Dict +from typing import List +from typing import Optional + +from google.genai import types as genai_types +from pydantic import BaseModel +from pydantic import Field +from pydantic import field_validator +from pydantic import model_validator +from pydantic_core import ValidationError + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class InjectedError(BaseModel): + """An error to be injected into a tool call.""" + + injected_http_error_code: int + """Inject http error code to the tool call. Will present as "error_code" + in the tool response dict.""" + + error_message: str + """Inject error message to the tool call. Will present as + "error_message" in the tool response dict.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class InjectionConfig(BaseModel): + """Injection configuration for a tool.""" + + injection_probability: float = 1.0 + """Probability of injecting the injected_value.""" + + match_args: Optional[Dict[str, Any]] = None + """Only apply injection if the request matches the match_args. + If match_args is not provided, the injection will be applied to all + requests.""" + + injected_latency_seconds: float = Field(default=0.0, le=120.0) + """Inject latency to the tool call. Please note it may not be accurate if │ + the interceptor is applied as after tool callback.""" + + random_seed: Optional[int] = None + """The random seed to use for this injection.""" + + injected_error: Optional[InjectedError] = None + """The injected error.""" + + injected_response: Optional[Dict[str, Any]] = None + """The injected response.""" + + @model_validator(mode="after") + def check_injected_error_or_response(self) -> Self: + """Checks that either injected_error or injected_response is set.""" + if bool(self.injected_error) == bool(self.injected_response): + raise ValueError( + "Either injected_error or injected_response must be set, but not" + " both, and not neither." + ) + return self + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class MockStrategy(enum.Enum): + """Mock strategy for a tool.""" + + MOCK_STRATEGY_UNSPECIFIED = 0 + + MOCK_STRATEGY_TOOL_SPEC = 1 + """Use tool specifications to mock the tool response.""" + + MOCK_STRATEGY_TRACING = 2 + """Deprecated, please use MOCK_STRATEGY_TOOL_SPEC with tracing input.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolSimulationConfig(BaseModel): + """Simulation configuration for a single tool.""" + + tool_name: str + """Name of the tool to be simulated.""" + + injection_configs: List[InjectionConfig] = Field(default_factory=list) + """Injection configuration for the tool. If provided, the tool will be + injected with the injected_value with the injection_probability first, + the mock_strategy will be applied if no injection config is hit.""" + + mock_strategy_type: MockStrategy = MockStrategy.MOCK_STRATEGY_UNSPECIFIED + """The mock strategy to use.""" + + @model_validator(mode="after") + def check_mock_strategy_type(self) -> Self: + """Checks that mock_strategy_type is not UNSPECIFIED if no injections.""" + if ( + not self.injection_configs + and self.mock_strategy_type == MockStrategy.MOCK_STRATEGY_UNSPECIFIED + ): + raise ValueError( + "If injection_configs is empty, mock_strategy_type cannot be" + " MOCK_STRATEGY_UNSPECIFIED." + ) + return self + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationConfig(BaseModel): + """Configuration for EnvironmentSimulation.""" + + tool_simulation_configs: List[ToolSimulationConfig] = Field( + default_factory=list + ) + """A list of tool simulation configurations.""" + + simulation_model: str = Field(default="gemini-2.5-flash") + """The model to use for internal simulator LLM calls (tool analysis, mock responses).""" + + simulation_model_configuration: genai_types.GenerateContentConfig = Field( + default_factory=lambda: genai_types.GenerateContentConfig( + thinking_config=genai_types.ThinkingConfig( + include_thoughts=False, + thinking_budget=10240, + ) + ), + ) + """The configuration for the internal simulator LLM calls.""" + + tracing: Optional[str] = None + """Tracing data (e.g., a prior agent run trace in JSON string format) to + provide historical context for mock generation. Passed directly to mock + strategies alongside environment_data.""" + + environment_data: Optional[str] = None + """Environment-specific data (e.g., a minimal database dump in JSON string + format). This data is passed directly to mock strategies for contextual + mock generation.""" + + @field_validator("tool_simulation_configs") + @classmethod + def check_tool_simulation_configs(cls, v: List[ToolSimulationConfig]): + """Checks that tool_simulation_configs is not empty.""" + if not v: + raise ValueError("tool_simulation_configs must be provided.") + seen_tool_names = set() + for tool_sim_config in v: + if tool_sim_config.tool_name in seen_tool_names: + raise ValueError( + f"Duplicate tool_name found: {tool_sim_config.tool_name}" + ) + seen_tool_names.add(tool_sim_config.tool_name) + return v diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_engine.py b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py new file mode 100644 index 0000000000..3d260c6954 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py @@ -0,0 +1,146 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import logging +import random +import time +from typing import Any +from typing import Dict +from typing import Optional + +environment_simulation_logger = logging.getLogger( + "environment_simulation_logger" +) + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy as MockStrategyEnum +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.strategies import base as base_mock_strategies +from google.adk.tools.environment_simulation.strategies import tool_spec_mock_strategy +from google.adk.tools.environment_simulation.tool_connection_analyzer import ToolConnectionAnalyzer +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap + +from ...features import experimental +from ...features import FeatureName + + +def _create_mock_strategy( + mock_strategy_type: MockStrategyEnum, + llm_name: str, + llm_config: genai_types.GenerateContentConfig, +) -> base_mock_strategies.MockStrategy: + """Creates a mock strategy based on the given type.""" + if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TOOL_SPEC: + return tool_spec_mock_strategy.ToolSpecMockStrategy(llm_name, llm_config) + if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TRACING: + return base_mock_strategies.TracingMockStrategy(llm_name, llm_config) + raise ValueError(f"Unknown mock strategy type: {mock_strategy_type}") + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationEngine: + """Core engine to handle the simulation logic.""" + + def __init__(self, config: EnvironmentSimulationConfig): + self._config = config + self._tool_sim_configs = { + c.tool_name: c for c in config.tool_simulation_configs + } + self._is_analyzed = False + self._tool_connection_map: Optional[ToolConnectionMap] = None + self._analyzer = ToolConnectionAnalyzer( + llm_name=config.simulation_model, + llm_config=config.simulation_model_configuration, + ) + self._state_store = {} + self._random_generator = random.Random() + self._environment_data = config.environment_data + self._tracing = config.tracing + + async def simulate( + self, tool: BaseTool, args: Dict[str, Any], tool_context: Any + ) -> Optional[Dict[str, Any]]: + """Simulates a tool call.""" + if tool.name not in self._tool_sim_configs: + return None + + tool_sim_config = self._tool_sim_configs[tool.name] + + if not self._is_analyzed and any( + c.mock_strategy_type != MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED + for c in self._config.tool_simulation_configs + ): + agent = tool_context._invocation_context.agent + if isinstance(agent, LlmAgent): + tools = await agent.canonical_tools(tool_context) + self._tool_connection_map = await self._analyzer.analyze(tools) + self._is_analyzed = True + + for injection_config in tool_sim_config.injection_configs: + if injection_config.match_args: + if not all( + item in args.items() for item in injection_config.match_args.items() + ): + continue + + if injection_config.random_seed is not None: + self._random_generator.seed(injection_config.random_seed) + + if ( + self._random_generator.random() + < injection_config.injection_probability + ): + time.sleep(injection_config.injected_latency_seconds) + if injection_config.injected_error: + return { + "error_code": ( + injection_config.injected_error.injected_http_error_code + ), + "error_message": injection_config.injected_error.error_message, + } + if injection_config.injected_response: + return injection_config.injected_response + + # If no injection was applied, fall back to the mock strategy. + if ( + tool_sim_config.mock_strategy_type + == MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED + ): + environment_simulation_logger.warning( + "Tool '%s' did not hit any injection config and has no mock strategy" + " configured. Returning no-op.", + tool.name, + ) + return None + + mock_strategy = _create_mock_strategy( + tool_sim_config.mock_strategy_type, + self._config.simulation_model, + self._config.simulation_model_configuration, + ) + return await mock_strategy.mock( + tool, + args, + tool_context, + self._tool_connection_map, + self._state_store, + self._environment_data, + self._tracing, + ) diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_factory.py b/src/google/adk/tools/environment_simulation/environment_simulation_factory.py new file mode 100644 index 0000000000..6fdea44f14 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_factory.py @@ -0,0 +1,74 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Awaitable +from typing import Callable +from typing import Dict +from typing import Optional + +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationFactory: + """Factory for creating EnvironmentSimulation instances.""" + + @staticmethod + def create_callback( + config: EnvironmentSimulationConfig, + ) -> Callable[ + [BaseTool, Dict[str, Any], Any], Awaitable[Optional[Dict[str, Any]]] + ]: + """Creates a callback function for EnvironmentSimulation. + + Args: + config: The configuration for the EnvironmentSimulation. + + Returns: + A callable that can be used as a before_tool_callback or + after_tool_callback. + """ + simulator_engine = EnvironmentSimulationEngine(config) + + async def _environment_simulation_callback( + tool: BaseTool, args: Dict[str, Any], tool_context: Any + ) -> Optional[Dict[str, Any]]: + return await simulator_engine.simulate(tool, args, tool_context) + + return _environment_simulation_callback + + @staticmethod + def create_plugin( + config: EnvironmentSimulationConfig, + ) -> EnvironmentSimulationPlugin: + """Creates an ADK Plugin for EnvironmentSimulation. + + Args: + config: The configuration for the EnvironmentSimulation. + + Returns: + An instance of EnvironmentSimulationPlugin that can be used as an ADK + plugin. + """ + simulator_engine = EnvironmentSimulationEngine(config) + return EnvironmentSimulationPlugin(simulator_engine) diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py b/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py new file mode 100644 index 0000000000..dad82bda3d --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py @@ -0,0 +1,44 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.plugins import BasePlugin +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine +from google.adk.tools.tool_context import ToolContext + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationPlugin(BasePlugin): + """ADK Plugin for EnvironmentSimulation.""" + + name: str = "EnvironmentSimulation" + + def __init__(self, simulator_engine: EnvironmentSimulationEngine): + self._simulator_engine = simulator_engine + + async def before_tool_callback( + self, tool: BaseTool, tool_args: dict[str, Any], tool_context: ToolContext + ) -> Optional[Dict[str, Any]]: + """Invokes the EnvironmentSimulationEngine before a tool call.""" + return await self._simulator_engine.simulate(tool, tool_args, tool_context) diff --git a/src/google/adk/tools/environment_simulation/strategies/__init__.py b/src/google/adk/tools/environment_simulation/strategies/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/strategies/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/src/google/adk/tools/environment_simulation/strategies/base.py b/src/google/adk/tools/environment_simulation/strategies/base.py new file mode 100644 index 0000000000..c2c7733f68 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/strategies/base.py @@ -0,0 +1,65 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.features import experimental +from google.adk.features import FeatureName +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.genai import types as genai_types + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class MockStrategy: + """Base class for mock strategies.""" + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + """Generates a mock response for a tool call.""" + raise NotImplementedError() + + +class TracingMockStrategy(MockStrategy): + + def __init__( + self, + llm_name: str = "", + llm_config: Optional[genai_types.GenerateContentConfig] = None, + ): + self._llm_name = llm_name + self._llm_config = llm_config + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + return {"status": "error", "error_message": "Not implemented"} diff --git a/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py new file mode 100644 index 0000000000..25a07b66f8 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py @@ -0,0 +1,226 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import json +import re +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.features import experimental +from google.adk.features import FeatureName +from google.adk.models.llm_request import LlmRequest +from google.adk.models.registry import LLMRegistry +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.strategies.base import MockStrategy +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.adk.utils.context_utils import Aclosing +from google.genai import types as genai_types + +_TOOL_SPEC_MOCK_PROMPT_TEMPLATE = """ + You are a stateful tool simulator. Your task is to generate a + realistic JSON response for a tool call, maintaining consistency based + on a shared state. + + {environment_data_snippet} + + {tracing_snippet} + + Here is the map of how tools connect via stateful parameters: + {tool_connection_map_json} + + Here is the current state of all stateful parameters: + {state_store_json} + + You are now simulating the following tool call: + Tool Name: {tool_name} + Tool Description: {tool_description} + Tool Schema: {tool_schema_json} + Tool Arguments: {tool_arguments_json} + + Your instructions: + 1. Analyze the tool call. Is it a "creating" or "consuming" tool + based on the connection map? + 2. If it's a "consuming" tool, check the provided arguments against + the state store. If an ID is provided that does not exist in the + state, return a realistic error (e.g., a 404 Not Found error). + Otherwise, use the data from the state, the provided environment data, + and the tracing history to generate the response. + 3. If it's a "creating" tool, generate a new, unique ID for the + stateful parameter (e.g., a random string for a ticket_id). Include + this new ID in your response. I will then update the state with it. + 4. Leverage the provided environment data (if any) to make your response + more realistic and consistent with the simulated environment. + 5. Leverage the provided tracing history (if any) to make your response + consistent with observed tool behavior patterns from prior runs. + 6. Generate a convincing, valid JSON object that mocks the tool's + response. The response must be only the JSON object, without any + additional text or formatting. + 7. The response must start with '{{' and end with '}}'. + """ + + +def _find_value_by_key(data: Any, target_key: str) -> Optional[Any]: + """Recursively searches for a value by key in a nested structure.""" + if isinstance(data, dict): + if target_key in data: + return data[target_key] + for key, value in data.items(): + result = _find_value_by_key(value, target_key) + if result is not None: + return result + elif isinstance(data, list): + for item in data: + result = _find_value_by_key(item, target_key) + if result is not None: + return result + return None + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolSpecMockStrategy(MockStrategy): + """Mocks a tool response based on the tool's specification.""" + + def __init__( + self, llm_name: str, llm_config: genai_types.GenerateContentConfig + ): + self._llm_name = llm_name + self._llm_config = llm_config + llm_registry = LLMRegistry() + llm_class = llm_registry.resolve(self._llm_name) + self._llm = llm_class(model=self._llm_name) + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + declaration = tool._get_declaration() + if not declaration: + return { + "status": "error", + "error_message": "Could not get tool declaration.", + } + + tool_connection_map_json = ( + json.dumps(tool_connection_map.model_dump(exclude_none=True), indent=2) + if tool_connection_map + else "''" + ) + state_store_json = json.dumps(state_store, indent=2) + tool_schema_json = json.dumps( + declaration.model_dump(exclude_none=True), indent=2 + ) + tool_arguments_json = json.dumps(args, indent=2) + + environment_data_snippet = "" + if environment_data: + environment_data_snippet = f""" + Here is relevant environment data (e.g., database snippet, context information): + + {environment_data} + + Use this information to generate more realistic responses. + """ + + tracing_snippet = "" + if tracing: + tracing_snippet = f""" + Here is a tracing history from a prior agent run (e.g., recorded tool + calls and responses): + + {tracing} + + Use this history to make your mock responses consistent with observed + tool behavior patterns. + """ + + prompt = _TOOL_SPEC_MOCK_PROMPT_TEMPLATE.format( + environment_data_snippet=environment_data_snippet, + tracing_snippet=tracing_snippet, + tool_connection_map_json=tool_connection_map_json, + state_store_json=state_store_json, + tool_name=tool.name, + tool_description=tool.description, + tool_schema_json=tool_schema_json, + tool_arguments_json=tool_arguments_json, + ) + + request_contents = [ + genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") + ] + request = LlmRequest( + contents=request_contents, + model=self._llm_name, + config=self._llm_config, + generation_config=genai_types.GenerateContentConfig( + response_mime_type="application/json" + ), + ) + response_text = "" + async with Aclosing(self._llm.generate_content_async(request)) as agen: + async for llm_response in agen: + generated_content: genai_types.Content = llm_response.content + if generated_content.parts: + for part in generated_content.parts: + if part.text: + response_text += part.text + + try: + clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) + clean_json_text = re.sub(r"\n```$", "", clean_json_text) + mock_response = json.loads(clean_json_text.strip()) + # Determine if the current tool is mutative by checking the connection map. + is_mutative = False + if tool_connection_map: + all_creating_tools = { + tool_name + for param in tool_connection_map.stateful_parameters + for tool_name in param.creating_tools + } + if tool.name in all_creating_tools: + is_mutative = True + + # After getting the response, update the state if this was a mutative tool. + if is_mutative: + for param_info in tool_connection_map.stateful_parameters: + param_name = param_info.parameter_name + # Only update the state for the specific parameter this tool + # creates/modifies. + if tool.name in param_info.creating_tools: + param_value = _find_value_by_key(mock_response, param_name) + if param_value is not None: + if param_name not in state_store: + state_store[param_name] = {} + # Store the entire response as the new state for this entity. + # This correctly captures creations and modifications (like + # cancellation). + state_store[param_name][param_value] = mock_response + + return mock_response + except json.JSONDecodeError: + return { + "status": "error", + "error_message": "Failed to generate valid JSON mock response.", + "llm_output": response_text, + } diff --git a/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py new file mode 100644 index 0000000000..8f8d5532cd --- /dev/null +++ b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py @@ -0,0 +1,145 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import json +import logging +import re +from typing import Any +from typing import Dict +from typing import List + +from google.adk.models.llm_request import LlmRequest +from google.adk.models.registry import LLMRegistry +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.adk.utils.context_utils import Aclosing +from google.genai import types as genai_types + +from ...features import experimental +from ...features import FeatureName + +_TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE = """ + You are an expert software architect analyzing a set of tools to understand + stateful dependencies. Your task is to identify parameters that act as + stateful identifiers (like IDs) and classify the tools that interact with + them. + + **Definitions:** + - A **"creating tool"** is a tool that creates a new resource or makes a + significant state change to an existing one (e.g., creating, updating, + canceling, or deleting). Tool names like `create_account`, `cancel_order`, + or `update_price` are strong indicators. These tools are responsible for + generating or modifying the state associated with an ID. + - A **"consuming tool"** is a tool that uses a resource's ID to retrieve + information without changing its state. Tool names like `get_user`, + `list_events`, or `find_order` are strong indicators. + + **Your Goal:** + Analyze the following tool schemas and identify the shared, stateful + parameters (like `user_id`, `order_id`, etc.). + + For each stateful parameter you identify, classify the tools into + `creating_tools` and `consuming_tools` based on the definitions above. + + **Example:** A `create_ticket` tool would be a `creating_tool` for + `ticket_id`. A `get_ticket` tool would be a `consuming_tool` for + `ticket_id`. A `list_tickets` tool that takes a `user_id` as input is a + `consuming_tool` for `user_id`. + + **Analyze the following tool schemas:** + {tool_schemas_json} + + **Output Format:** + Generate a JSON object with a single key, "stateful_parameters", which is a + list. Each item in the list must have these keys: + - "parameter_name": The name of the shared parameter (e.g., "ticket_id"). + - "creating_tools": A list of tools that create or modify this parameter's + state. + - "consuming_tools": A list of tools that use this parameter as input for + read-only operations. + + ONLY return the raw JSON object. + Your response must start with '{{' and end with '}}'. + """ + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolConnectionAnalyzer: + """ + Uses an LLM to analyze stateful connections between tools. For example, + get_ticket will consume a ticket_id created by create_ticket, the analyzer + will create a list of such connections. + """ + + def __init__( + self, llm_name: str, llm_config: genai_types.GenerateContentConfig + ): + self._llm_name = llm_name + self._llm_config = llm_config + llm_registry = LLMRegistry() + llm_class = llm_registry.resolve(self._llm_name) + self._llm = llm_class(model=self._llm_name) + + async def analyze(self, tools: List[BaseTool]) -> ToolConnectionMap: + """ + Analyzes a list of tools and returns a map of their connections. + """ + tool_schemas = [ + tool._get_declaration().model_dump(exclude_none=True) + for tool in tools + if tool._get_declaration() + ] + tool_schemas_json = json.dumps(tool_schemas, indent=2) + prompt = _TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE.format( + tool_schemas_json=tool_schemas_json + ) + + request_contents = [ + genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") + ] + request = LlmRequest( + contents=request_contents, + model=self._llm_name, + config=self._llm_config, + generation_config=genai_types.GenerateContentConfig( + response_mime_type="application/json" + ), + ) + response_text = "" + async with Aclosing(self._llm.generate_content_async(request)) as agen: + async for llm_response in agen: + generated_content: genai_types.Content = llm_response.content + if not generated_content.parts: + continue + for part in generated_content.parts: + if part.text: + response_text += part.text + + try: + clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) + clean_json_text = re.sub(r"\n```$", "", clean_json_text) + response_json = json.loads(clean_json_text.strip()) + except json.JSONDecodeError: + logging.warning( + "Failed to parse tool connection analysis from LLM. Proceeding" + " without connection map. Error: %s\nLLM Output:\n%s", + e, + response_text, + ) + return ToolConnectionMap(stateful_parameters=[]) + return ToolConnectionMap.model_validate(response_json) diff --git a/src/google/adk/tools/environment_simulation/tool_connection_map.py b/src/google/adk/tools/environment_simulation/tool_connection_map.py new file mode 100644 index 0000000000..affd1481ec --- /dev/null +++ b/src/google/adk/tools/environment_simulation/tool_connection_map.py @@ -0,0 +1,44 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import List + +from pydantic import BaseModel + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class StatefulParameter(BaseModel): + """Represents a stateful parameter and its connections.""" + + parameter_name: str + """The name of the shared parameter (e.g., "ticket_id").""" + + creating_tools: List[str] + """A list of tools that generate this parameter.""" + + consuming_tools: List[str] + """A list of tools that use this parameter as input.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolConnectionMap(BaseModel): + """Represents the map of tool connections.""" + + stateful_parameters: List[StatefulParameter] + """A list of stateful parameters and their connections.""" diff --git a/src/google/adk/tools/google_search_agent_tool.py b/src/google/adk/tools/google_search_agent_tool.py index 7ed09c7932..f21e915cc6 100644 --- a/src/google/adk/tools/google_search_agent_tool.py +++ b/src/google/adk/tools/google_search_agent_tool.py @@ -14,21 +14,12 @@ from __future__ import annotations -from typing import Any from typing import Union -from google.genai import types -from typing_extensions import override - from ..agents.llm_agent import LlmAgent -from ..memory.in_memory_memory_service import InMemoryMemoryService from ..models.base_llm import BaseLlm -from ..utils._schema_utils import validate_schema -from ..utils.context_utils import Aclosing -from ._forwarding_artifact_service import ForwardingArtifactService from .agent_tool import AgentTool from .google_search_tool import google_search -from .tool_context import ToolContext def create_google_search_agent(model: Union[str, BaseLlm]) -> LlmAgent: @@ -60,80 +51,4 @@ class GoogleSearchAgentTool(AgentTool): def __init__(self, agent: LlmAgent): self.agent = agent - super().__init__(agent=self.agent) - - @override - async def run_async( - self, - *, - args: dict[str, Any], - tool_context: ToolContext, - ) -> Any: - from ..agents.llm_agent import LlmAgent - from ..runners import Runner - from ..sessions.in_memory_session_service import InMemorySessionService - - if isinstance(self.agent, LlmAgent) and self.agent.input_schema: - input_value = self.agent.input_schema.model_validate(args) - content = types.Content( - role='user', - parts=[ - types.Part.from_text( - text=input_value.model_dump_json(exclude_none=True) - ) - ], - ) - else: - content = types.Content( - role='user', - parts=[types.Part.from_text(text=args['request'])], - ) - runner = Runner( - app_name=self.agent.name, - agent=self.agent, - artifact_service=ForwardingArtifactService(tool_context), - session_service=InMemorySessionService(), - memory_service=InMemoryMemoryService(), - credential_service=tool_context._invocation_context.credential_service, - plugins=list(tool_context._invocation_context.plugin_manager.plugins), - ) - - state_dict = { - k: v - for k, v in tool_context.state.to_dict().items() - if not k.startswith('_adk') # Filter out adk internal states - } - session = await runner.session_service.create_session( - app_name=self.agent.name, - user_id=tool_context._invocation_context.user_id, - state=state_dict, - ) - - last_content = None - last_grounding_metadata = None - async with Aclosing( - runner.run_async( - user_id=session.user_id, session_id=session.id, new_message=content - ) - ) as agen: - async for event in agen: - # Forward state delta to parent session. - if event.actions.state_delta: - tool_context.state.update(event.actions.state_delta) - if event.content: - last_content = event.content - last_grounding_metadata = event.grounding_metadata - - if last_content is None or last_content.parts is None: - return '' - merged_text = '\n'.join(p.text for p in last_content.parts if p.text) - if isinstance(self.agent, LlmAgent) and self.agent.output_schema: - tool_result = validate_schema(self.agent.output_schema, merged_text) - else: - tool_result = merged_text - - if last_grounding_metadata: - tool_context.state['temp:_adk_grounding_metadata'] = ( - last_grounding_metadata - ) - return tool_result + super().__init__(agent=self.agent, propagate_grounding_metadata=True) diff --git a/src/google/adk/tools/langchain_tool.py b/src/google/adk/tools/langchain_tool.py index 0a16b2ca0e..a483db6dc7 100644 --- a/src/google/adk/tools/langchain_tool.py +++ b/src/google/adk/tools/langchain_tool.py @@ -14,167 +14,19 @@ from __future__ import annotations -from typing import Optional -from typing import Union - -from google.genai import types -from langchain_core.tools import BaseTool as LangchainBaseTool -from langchain_core.tools import Tool -from langchain_core.tools.structured import StructuredTool -from typing_extensions import override - -from . import _automatic_function_calling_util -from .function_tool import FunctionTool -from .tool_configs import BaseToolConfig -from .tool_configs import ToolArgsConfig - - -class LangchainTool(FunctionTool): - """Adapter class that wraps a Langchain tool for use with ADK. - - This adapter converts Langchain tools into a format compatible with Google's - generative AI function calling interface. It preserves the tool's name, - description, and functionality while adapting its schema. - - The original tool's name and description can be overridden if needed. - - Args: - tool: A Langchain tool to wrap (BaseTool or a tool with a .run method) - name: Optional override for the tool's name - description: Optional override for the tool's description - - Examples:: - - from langchain.tools import DuckDuckGoSearchTool - from google.genai.tools import LangchainTool - - search_tool = DuckDuckGoSearchTool() - wrapped_tool = LangchainTool(search_tool) - """ - - _langchain_tool: Union[LangchainBaseTool, object] - """The wrapped langchain tool.""" - - def __init__( - self, - tool: Union[LangchainBaseTool, object], - name: Optional[str] = None, - description: Optional[str] = None, - ): - if not hasattr(tool, 'run') and not hasattr(tool, '_run'): - raise ValueError( - "Tool must be a Langchain tool, have a 'run' or '_run' method." - ) - - # Determine which function to use - if isinstance(tool, StructuredTool): - func = tool.func - # For async tools, func might be None but coroutine exists - if func is None and hasattr(tool, 'coroutine') and tool.coroutine: - func = tool.coroutine - elif hasattr(tool, '_run') or hasattr(tool, 'run'): - func = tool._run if hasattr(tool, '_run') else tool.run - else: - raise ValueError( - "This is not supported. Tool must be a Langchain tool, have a 'run'" - " or '_run' method. The tool is: ", - type(tool), - ) - - super().__init__(func) - # run_manager is a special parameter for langchain tool - self._ignore_params.append('run_manager') - self._langchain_tool = tool - - # Set name: priority is 1) explicitly provided name, 2) tool's name, 3) default - if name is not None: - self.name = name - elif hasattr(tool, 'name') and tool.name: - self.name = tool.name - # else: keep default from FunctionTool - - # Set description: similar priority - if description is not None: - self.description = description - elif hasattr(tool, 'description') and tool.description: - self.description = tool.description - # else: keep default from FunctionTool - - @override - def _get_declaration(self) -> types.FunctionDeclaration: - """Build the function declaration for the tool. - - Returns: - A FunctionDeclaration object that describes the tool's interface. - - Raises: - ValueError: If the tool schema cannot be correctly parsed. - """ - try: - # There are two types of tools: - # 1. BaseTool: the tool is defined in langchain_core.tools. - # 2. Other tools: the tool doesn't inherit any class but follow some - # conventions, like having a "run" method. - # Handle BaseTool type (preferred Langchain approach) - if isinstance(self._langchain_tool, LangchainBaseTool): - tool_wrapper = Tool( - name=self.name, - func=self.func, - description=self.description, - ) - - # Add schema if available - if ( - hasattr(self._langchain_tool, 'args_schema') - and self._langchain_tool.args_schema - ): - tool_wrapper.args_schema = self._langchain_tool.args_schema - - return _automatic_function_calling_util.build_function_declaration_for_langchain( - False, - self.name, - self.description, - tool_wrapper.func, - tool_wrapper.args, - ) - - # Need to provide a way to override the function names and descriptions - # as the original function names are mostly ".run" and the descriptions - # may not meet users' needs - function_decl = super()._get_declaration() - function_decl.name = self.name - function_decl.description = self.description - return function_decl - - except Exception as e: - raise ValueError( - f'Failed to build function declaration for Langchain tool: {e}' - ) from e - - @override - @classmethod - def from_config( - cls: type[LangchainTool], config: ToolArgsConfig, config_abs_path: str - ) -> LangchainTool: - from ..agents import config_agent_utils - - langchain_tool_config = LangchainToolConfig.model_validate( - config.model_dump() - ) - tool = config_agent_utils.resolve_fully_qualified_name( - langchain_tool_config.tool - ) - name = langchain_tool_config.name - description = langchain_tool_config.description - return cls(tool, name=name, description=description) - - -class LangchainToolConfig(BaseToolConfig): - tool: str - """The fully qualified path of the Langchain tool instance.""" - - name: str = '' - """The name of the tool.""" - - description: str = '' - """The description of the tool.""" +import warnings + +from google.adk.integrations.langchain import LangchainTool +from google.adk.integrations.langchain import LangchainToolConfig + +warnings.warn( + "google.adk.tools.langchain_tool is moved to" + " google.adk.integrations.langchain", + DeprecationWarning, + stacklevel=2, +) + +__all__ = [ + "LangchainTool", + "LangchainToolConfig", +] diff --git a/src/google/adk/tools/mcp_tool/mcp_session_manager.py b/src/google/adk/tools/mcp_tool/mcp_session_manager.py index f4339f8678..23f14421bd 100644 --- a/src/google/adk/tools/mcp_tool/mcp_session_manager.py +++ b/src/google/adk/tools/mcp_tool/mcp_session_manager.py @@ -33,7 +33,9 @@ from typing import Union from mcp import ClientSession +from mcp import SamplingCapability from mcp import StdioServerParameters +from mcp.client.session import SamplingFnT from mcp.client.sse import sse_client from mcp.client.stdio import stdio_client from mcp.client.streamable_http import create_mcp_http_client @@ -97,12 +99,17 @@ class SseConnectionParams(BaseModel): server. sse_read_timeout: Timeout in seconds for reading data from the MCP SSE server. + httpx_client_factory: Factory function to create a custom HTTPX client. If + not provided, a default factory will be used. """ + model_config = ConfigDict(arbitrary_types_allowed=True) + url: str headers: dict[str, Any] | None = None timeout: float = 5.0 sse_read_timeout: float = 60 * 5.0 + httpx_client_factory: CheckableMcpHttpClientFactory = create_mcp_http_client @runtime_checkable @@ -195,6 +202,9 @@ def __init__( StreamableHTTPConnectionParams, ], errlog: TextIO = sys.stderr, + *, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """Initializes the MCP session manager. @@ -204,7 +214,13 @@ def __init__( parameters but it's not configurable for now. errlog: (Optional) TextIO stream for error logging. Use only for initializing a local stdio MCP session. + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities + if isinstance(connection_params, StdioServerParameters): # So far timeout is not configurable. Given MCP is still evolving, we # would expect stdio_client to evolve to accept timeout parameter like @@ -387,6 +403,7 @@ def _create_client(self, merged_headers: Optional[Dict[str, str]] = None): headers=merged_headers, timeout=self._connection_params.timeout, sse_read_timeout=self._connection_params.sse_read_timeout, + httpx_client_factory=self._connection_params.httpx_client_factory, ) elif isinstance(self._connection_params, StreamableHTTPConnectionParams): client = streamablehttp_client( @@ -475,6 +492,8 @@ async def create_session( timeout=timeout_in_seconds, sse_read_timeout=sse_read_timeout_in_seconds, is_stdio=is_stdio, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ), timeout=timeout_in_seconds, diff --git a/src/google/adk/tools/mcp_tool/mcp_tool.py b/src/google/adk/tools/mcp_tool/mcp_tool.py index 9a2fd5fcfd..04ed799b17 100644 --- a/src/google/adk/tools/mcp_tool/mcp_tool.py +++ b/src/google/adk/tools/mcp_tool/mcp_tool.py @@ -479,6 +479,9 @@ async def _get_headers( f" {credential.http.credentials.token}" ) } + if credential.http.additional_headers: + headers = headers or {} + headers.update(credential.http.additional_headers) elif credential.api_key: if ( not self._credentials_manager diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index fb4e992dfd..4f197701e8 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -29,7 +29,9 @@ from typing import Union import warnings +from mcp import SamplingCapability from mcp import StdioServerParameters +from mcp.client.session import SamplingFnT from mcp.shared.session import ProgressFnT from mcp.types import ListResourcesResult from mcp.types import ListToolsResult @@ -46,7 +48,6 @@ from ..load_mcp_resource_tool import LoadMcpResourceTool from ..tool_configs import BaseToolConfig from ..tool_configs import ToolArgsConfig -from ..tool_context import ToolContext from .mcp_session_manager import MCPSessionManager from .mcp_session_manager import retry_on_errors from .mcp_session_manager import SseConnectionParams @@ -81,7 +82,7 @@ class McpToolset(BaseToolset): # Use in an agent agent = LlmAgent( - model='gemini-2.0-flash', + model='gemini-2.5-flash', name='enterprise_assistant', instruction='Help user accessing their file systems', tools=[toolset], @@ -114,6 +115,8 @@ def __init__( Union[ProgressFnT, ProgressCallbackFactory] ] = None, use_mcp_resources: Optional[bool] = False, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """Initializes the McpToolset. @@ -150,10 +153,16 @@ def __init__( use_mcp_resources: Whether the agent should have access to MCP resources. This will add a `load_mcp_resource` tool to the toolset and include available resources in the agent context. Defaults to False. + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ super().__init__(tool_filter=tool_filter, tool_name_prefix=tool_name_prefix) + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities + if not connection_params: raise ValueError("Missing connection params in McpToolset.") @@ -166,6 +175,8 @@ def __init__( self._mcp_session_manager = MCPSessionManager( connection_params=self._connection_params, errlog=self._errlog, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) self._auth_scheme = auth_scheme self._auth_credential = auth_credential @@ -228,6 +239,10 @@ def _get_auth_headers(self) -> Optional[Dict[str, str]]: f"{credential.http.scheme} {credential.http.credentials.token}" ) } + + if credential.http.additional_headers: + headers = headers or {} + headers.update(credential.http.additional_headers) elif credential.api_key: # For API key, use the auth scheme to determine header name if self._auth_config.auth_scheme: @@ -432,6 +447,20 @@ def from_config( use_mcp_resources=mcp_toolset_config.use_mcp_resources, ) + def __getstate__(self): + """Custom pickling to exclude non-picklable runtime objects.""" + state = self.__dict__.copy() + # Remove unpicklable file-like objects + state.pop("_errlog", None) + return state + + def __setstate__(self, state): + """Custom unpickling to restore state.""" + self.__dict__.update(state) + # Default to sys.stderr if _errlog was removed during pickling + if not hasattr(self, "_errlog") or self._errlog is None: + self._errlog = sys.stderr + class MCPToolset(McpToolset): """Deprecated name, use `McpToolset` instead.""" diff --git a/src/google/adk/tools/mcp_tool/session_context.py b/src/google/adk/tools/mcp_tool/session_context.py index ca637d0489..23e968fe52 100644 --- a/src/google/adk/tools/mcp_tool/session_context.py +++ b/src/google/adk/tools/mcp_tool/session_context.py @@ -22,6 +22,8 @@ from typing import Optional from mcp import ClientSession +from mcp import SamplingCapability +from mcp.client.session import SamplingFnT logger = logging.getLogger('google_adk.' + __name__) @@ -54,6 +56,9 @@ def __init__( timeout: Optional[float], sse_read_timeout: Optional[float], is_stdio: bool = False, + *, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """ Args: @@ -63,6 +68,9 @@ def __init__( sse_read_timeout: Timeout in seconds for reading data from the MCP SSE server. is_stdio: Whether this is a stdio connection (affects read timeout). + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ self._client = client self._timeout = timeout @@ -73,6 +81,8 @@ def __init__( self._close_event = asyncio.Event() self._task: Optional[asyncio.Task] = None self._task_lock = asyncio.Lock() + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities @property def session(self) -> Optional[ClientSession]: @@ -165,6 +175,8 @@ async def _run(self): read_timeout_seconds=timedelta(seconds=self._timeout) if self._timeout is not None else None, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ) else: @@ -176,6 +188,8 @@ async def _run(self): read_timeout_seconds=timedelta(seconds=self._sse_read_timeout) if self._sse_read_timeout is not None else None, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ) await asyncio.wait_for(session.initialize(), timeout=self._timeout) diff --git a/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py b/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py index 5f83548980..fa32ce932a 100644 --- a/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py +++ b/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py @@ -571,6 +571,7 @@ def __repr__(self): async def _request(**request_params) -> httpx.Response: async with httpx.AsyncClient( - verify=request_params.pop("verify", True) + verify=request_params.pop("verify", True), + timeout=None, ) as client: return await client.request(**request_params) diff --git a/src/google/adk/tools/retrieval/files_retrieval.py b/src/google/adk/tools/retrieval/files_retrieval.py index c70add4ce0..9db1bc39cf 100644 --- a/src/google/adk/tools/retrieval/files_retrieval.py +++ b/src/google/adk/tools/retrieval/files_retrieval.py @@ -32,7 +32,7 @@ def _get_default_embedding_model() -> BaseEmbedding: """Get the default Google Gemini embedding model. Returns: - GoogleGenAIEmbedding instance configured with text-embedding-004 model. + GoogleGenAIEmbedding instance configured with gemini-embedding-2-preview model. Raises: ImportError: If llama-index-embeddings-google-genai package is not installed. @@ -40,7 +40,10 @@ def _get_default_embedding_model() -> BaseEmbedding: try: from llama_index.embeddings.google_genai import GoogleGenAIEmbedding - return GoogleGenAIEmbedding(model_name="text-embedding-004") + return GoogleGenAIEmbedding( + model_name="gemini-embedding-2-preview", + embed_batch_size=1, + ) except ImportError as e: raise ImportError( "llama-index-embeddings-google-genai package not found. " @@ -65,7 +68,7 @@ def __init__( description: Description of the tool. input_dir: Directory path containing files to index. embedding_model: Optional custom embedding model. If None, defaults to - Google's text-embedding-004 model. + Google's gemini-embedding-2-preview model. """ self.input_dir = input_dir diff --git a/src/google/adk/tools/skill_toolset.py b/src/google/adk/tools/skill_toolset.py index 25f5ea1416..08dc937d7b 100644 --- a/src/google/adk/tools/skill_toolset.py +++ b/src/google/adk/tools/skill_toolset.py @@ -57,21 +57,34 @@ " conversation history for you to analyze." ) -_DEFAULT_SKILL_SYSTEM_INSTRUCTION = """You can use specialized 'skills' to help you with complex tasks. You MUST use the skill tools to interact with these skills. - -Skills are folders of instructions and resources that extend your capabilities for specialized tasks. Each skill folder contains: -- **SKILL.md** (required): The main instruction file with skill metadata and detailed markdown instructions. -- **references/** (Optional): Additional documentation or examples for skill usage. -- **assets/** (Optional): Templates, scripts or other resources used by the skill. -- **scripts/** (Optional): Executable scripts that can be run via bash. - -This is very important: - -1. If a skill seems relevant to the current user query, you MUST use the `load_skill` tool with `name=""` to read its full instructions before proceeding. -2. Once you have read the instructions, follow them exactly as documented before replying to the user. For example, If the instruction lists multiple steps, please make sure you complete all of them in order. -3. The `load_skill_resource` tool is for viewing files within a skill's directory (e.g., `references/*`, `assets/*`, `scripts/*`). Do NOT use other tools to access these files. -4. Use `run_skill_script` to run scripts from a skill's `scripts/` directory. Use `load_skill_resource` to view script content first if needed. -""" +_DEFAULT_SKILL_SYSTEM_INSTRUCTION = ( + "You can use specialized 'skills' to help you with complex tasks. " + "You MUST use the skill tools to interact with these skills.\n\n" + "Skills are folders of instructions and resources that extend your " + "capabilities for specialized tasks. Each skill folder contains:\n" + "- **SKILL.md** (required): The main instruction file with skill " + "metadata and detailed markdown instructions.\n" + "- **references/** (Optional): Additional documentation or examples for " + "skill usage.\n" + "- **assets/** (Optional): Templates, scripts or other resources used by " + "the skill.\n" + "- **scripts/** (Optional): Executable scripts that can be run via " + "bash.\n\n" + "This is very important:\n\n" + "1. If a skill seems relevant to the current user query, you MUST use " + 'the `load_skill` tool with `skill_name=""` to read ' + "its full instructions before proceeding.\n" + "2. Once you have read the instructions, follow them exactly as " + "documented before replying to the user. For example, If the " + "instruction lists multiple steps, please make sure you complete all " + "of them in order.\n" + "3. The `load_skill_resource` tool is for viewing files within a " + "skill's directory (e.g., `references/*`, `assets/*`, `scripts/*`). " + "Do NOT use other tools to access these files.\n" + "4. Use `run_skill_script` to run scripts from a skill's `scripts/` " + "directory. Use `load_skill_resource` to view script content first if " + "needed.\n" +) @experimental(FeatureName.SKILL_TOOLSET) @@ -122,23 +135,23 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: parameters_json_schema={ "type": "object", "properties": { - "name": { + "skill_name": { "type": "string", "description": "The name of the skill to load.", }, }, - "required": ["name"], + "required": ["skill_name"], }, ) async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: - skill_name = args.get("name") + skill_name = args.get("skill_name") if not skill_name: return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -152,7 +165,7 @@ async def run_async( agent_name = tool_context.agent_name state_key = f"_adk_activated_skill_{agent_name}" - activated_skills = list(tool_context.state.get(state_key, [])) + activated_skills = list(tool_context.state.get(state_key) or []) if skill_name not in activated_skills: activated_skills.append(skill_name) tool_context.state[state_key] = activated_skills @@ -189,7 +202,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: "type": "string", "description": "The name of the skill.", }, - "path": { + "file_path": { "type": "string", "description": ( "The relative path to the resource (e.g.," @@ -198,7 +211,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: ), }, }, - "required": ["skill_name", "path"], + "required": ["skill_name", "file_path"], }, ) @@ -206,17 +219,18 @@ async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: skill_name = args.get("skill_name") - resource_path = args.get("path") + file_path = args.get("file_path") + errors = [] if not skill_name: + errors.append("Argument 'skill_name' is required.") + if not file_path: + errors.append("Argument 'file_path' is required.") + + if errors: return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", - } - if not resource_path: - return { - "error": "Resource path is required.", - "error_code": "MISSING_RESOURCE_PATH", + "error": "\n".join(errors), + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -227,14 +241,14 @@ async def run_async( } content = None - if resource_path.startswith("references/"): - ref_name = resource_path[len("references/") :] + if file_path.startswith("references/"): + ref_name = file_path[len("references/") :] content = skill.resources.get_reference(ref_name) - elif resource_path.startswith("assets/"): - asset_name = resource_path[len("assets/") :] + elif file_path.startswith("assets/"): + asset_name = file_path[len("assets/") :] content = skill.resources.get_asset(asset_name) - elif resource_path.startswith("scripts/"): - script_name = resource_path[len("scripts/") :] + elif file_path.startswith("scripts/"): + script_name = file_path[len("scripts/") :] script = skill.resources.get_script(script_name) if script is not None: content = script.src @@ -248,22 +262,20 @@ async def run_async( if content is None: return { - "error": ( - f"Resource '{resource_path}' not found in skill '{skill_name}'." - ), + "error": f"Resource '{file_path}' not found in skill '{skill_name}'.", "error_code": "RESOURCE_NOT_FOUND", } if isinstance(content, bytes): return { "skill_name": skill_name, - "path": resource_path, + "file_path": file_path, "status": _BINARY_FILE_DETECTED_MSG, } return { "skill_name": skill_name, - "path": resource_path, + "file_path": file_path, "content": content, } @@ -289,8 +301,8 @@ async def process_llm_request( continue skill_name = response.get("skill_name") - resource_path = response.get("path") - if not skill_name or not resource_path: + file_path = response.get("file_path") + if not skill_name or not file_path: continue skill = self._toolset._get_skill(skill_name) @@ -299,18 +311,18 @@ async def process_llm_request( # Find the binary content content = None - if resource_path.startswith("references/"): - ref_name = resource_path[len("references/") :] + if file_path.startswith("references/"): + ref_name = file_path[len("references/") :] content = skill.resources.get_reference(ref_name) - elif resource_path.startswith("assets/"): - asset_name = resource_path[len("assets/") :] + elif file_path.startswith("assets/"): + asset_name = file_path[len("assets/") :] content = skill.resources.get_asset(asset_name) if not isinstance(content, bytes): continue # Determine mime type based on extension - mime_type, _ = mimetypes.guess_type(resource_path) + mime_type, _ = mimetypes.guess_type(file_path) if not mime_type: mime_type = "application/octet-stream" @@ -320,7 +332,7 @@ async def process_llm_request( role="user", parts=[ types.Part.from_text( - text=f"The content of binary file '{resource_path}' is:" + text=f"The content of binary file '{file_path}' is:" ), types.Part( inline_data=types.Blob( @@ -347,14 +359,32 @@ async def execute_script_async( self, invocation_context: Any, skill: models.Skill, - script_path: str, - script_args: dict[str, Any], + file_path: str, + script_args: dict[str, Any] | list[str] | None, + short_options: dict[str, Any] | None = None, + positional_args: list[str] | None = None, ) -> dict[str, Any]: - """Prepares and executes the script using the base executor.""" - code = self._build_wrapper_code(skill, script_path, script_args) + """Prepares and executes the script using the base executor. + + Args: + invocation_context: The context for execution. + skill: The skill containing the script. + file_path: Relative path to the script file (e.g., 'scripts/myscript.py' + or 'myscript.py'). + script_args: Optional arguments to pass to the script. Can be a dict of + long options or a list of strings. + short_options: Optional short options (single hyphen) as key-value pairs. + positional_args: Optional positional arguments. + + Returns: + A dictionary containing execution results (stdout, stderr, status). + """ + code = self._build_wrapper_code( + skill, file_path, script_args, short_options, positional_args + ) if code is None: - if "." in script_path: - ext_msg = f"'.{script_path.rsplit('.', 1)[-1]}'" + if "." in file_path: + ext_msg = f"'.{file_path.rsplit('.', 1)[-1]}'" else: ext_msg = "(no extension)" return { @@ -379,9 +409,10 @@ async def execute_script_async( # Shell scripts serialize both streams as JSON # through stdout; parse the envelope if present. rc = 0 - is_shell = "." in script_path and script_path.rsplit(".", 1)[ - -1 - ].lower() in ("sh", "bash") + is_shell = "." in file_path and file_path.rsplit(".", 1)[-1].lower() in ( + "sh", + "bash", + ) if is_shell and stdout: try: parsed = json.loads(stdout) @@ -404,7 +435,7 @@ async def execute_script_async( return { "skill_name": skill.name, - "script_path": script_path, + "file_path": file_path, "stdout": stdout, "stderr": stderr, "status": status, @@ -413,14 +444,14 @@ async def execute_script_async( if e.code in (None, 0): return { "skill_name": skill.name, - "script_path": script_path, + "file_path": file_path, "stdout": "", "stderr": "", "status": "success", } return { "error": ( - f"Failed to execute script '{script_path}':" + f"Failed to execute script '{file_path}':" f" exited with code {e.code}" ), "error_code": "EXECUTION_ERROR", @@ -428,7 +459,7 @@ async def execute_script_async( except Exception as e: # pylint: disable=broad-exception-caught logger.exception( "Error executing script '%s' from skill '%s'", - script_path, + file_path, skill.name, ) short_msg = str(e) @@ -437,7 +468,7 @@ async def execute_script_async( return { "error": ( "Failed to execute script" - f" '{script_path}':\n{type(e).__name__}:" + f" '{file_path}':\n{type(e).__name__}:" f" {short_msg}" ), "error_code": "EXECUTION_ERROR", @@ -446,16 +477,18 @@ async def execute_script_async( def _build_wrapper_code( self, skill: models.Skill, - script_path: str, - script_args: dict[str, Any], + file_path: str, + script_args: dict[str, Any] | list[str] | None, + short_options: dict[str, Any] | None = None, + positional_args: list[str] | None = None, ) -> str | None: """Builds a self-extracting Python script.""" ext = "" - if "." in script_path: - ext = script_path.rsplit(".", 1)[-1].lower() + if "." in file_path: + ext = file_path.rsplit(".", 1)[-1].lower() - if not script_path.startswith("scripts/"): - script_path = f"scripts/{script_path}" + if not file_path.startswith("scripts/"): + file_path = f"scripts/{file_path}" files_dict = {} for ref_name in skill.resources.list_references(): @@ -509,21 +542,46 @@ def _build_wrapper_code( ] if ext == "py": - argv_list = [script_path] - for k, v in script_args.items(): - argv_list.extend([f"--{k}", str(v)]) + argv_list = [file_path] + if isinstance(script_args, list): + argv_list.extend(str(v) for v in script_args) + else: + if isinstance(script_args, dict): + for k, v in script_args.items(): + argv_list.extend([f"--{k}", str(v)]) + + if short_options: + for k, v in short_options.items(): + argv_list.extend([f"-{k}", str(v)]) + + if positional_args: + argv_list.append("--") + argv_list.extend(str(v) for v in positional_args) + code_lines.extend([ f" sys.argv = {argv_list!r}", " try:", - f" runpy.run_path({script_path!r}, run_name='__main__')", + f" runpy.run_path({file_path!r}, run_name='__main__')", " except SystemExit as e:", " if e.code is not None and e.code != 0:", " raise e", ]) elif ext in ("sh", "bash"): - arr = ["bash", script_path] - for k, v in script_args.items(): - arr.extend([f"--{k}", str(v)]) + arr = ["bash", file_path] + if isinstance(script_args, list): + arr.extend(str(v) for v in script_args) + else: + if isinstance(script_args, dict): + for k, v in script_args.items(): + arr.extend([f"--{k}", str(v)]) + + if short_options: + for k, v in short_options.items(): + arr.extend([f"-{k}", str(v)]) + + if positional_args: + arr.append("--") + arr.extend(positional_args) timeout = self._script_timeout code_lines.extend([ " try:", @@ -580,7 +638,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: "type": "string", "description": "The name of the skill.", }, - "script_path": { + "file_path": { "type": "string", "description": ( "The relative path to the script (e.g.," @@ -588,41 +646,83 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: ), }, "args": { - "type": "object", + "anyOf": [ + {"type": "object"}, + {"type": "array", "items": {"type": "string"}}, + ], "description": ( "Optional arguments to pass to the script as key-value" - " pairs." + " pairs (long options) or as a list of strings. If" + " specified as a list, it is treated as the complete" + " list of arguments, and 'short_options' and" + " 'positional_args' must not be provided." + ), + }, + "short_options": { + "type": "object", + "description": ( + "Optional short options (single hyphen) to pass to the" + " script as key-value pairs. Must not be provided if" + " 'args' is a list." + ), + }, + "positional_args": { + "type": "array", + "items": {"type": "string"}, + "description": ( + "Optional positional arguments to pass to the script." + " Must not be provided if 'args' is a list." ), }, }, - "required": ["skill_name", "script_path"], + "required": ["skill_name", "file_path"], }, ) async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: + # Standardized arguments: skill_name and file_path. skill_name = args.get("skill_name") - script_path = args.get("script_path") - script_args = args.get("args", {}) - if not isinstance(script_args, dict): - return { - "error": ( - "'args' must be a JSON object (key-value pairs)," - f" got {type(script_args).__name__}." - ), - "error_code": "INVALID_ARGS_TYPE", - } + file_path = args.get("file_path") + script_args = args.get("args") + short_options = args.get("short_options") + positional_args = args.get("positional_args") + errors = [] if not skill_name: + errors.append("Argument 'skill_name' is required.") + if not file_path: + errors.append("Argument 'file_path' is required.") + + if script_args is not None and not isinstance(script_args, (dict, list)): + errors.append( + "'args' must be a JSON object (dict) or a list of strings," + f" got {type(script_args).__name__}." + ) + + if short_options is not None and not isinstance(short_options, dict): + errors.append( + "'short_options' must be a JSON object (dict)," + f" got {type(short_options).__name__}." + ) + + if positional_args is not None and not isinstance(positional_args, list): + errors.append( + "'positional_args' must be a list of strings," + f" got {type(positional_args).__name__}." + ) + + if isinstance(script_args, list) and (short_options or positional_args): + errors.append( + "Cannot specify 'short_options' or 'positional_args' when 'args' is" + " a list." + ) + + if errors: return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", - } - if not script_path: - return { - "error": "Script path is required.", - "error_code": "MISSING_SCRIPT_PATH", + "error": "\n".join(errors), + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -632,15 +732,14 @@ async def run_async( "error_code": "SKILL_NOT_FOUND", } - script = None - if script_path.startswith("scripts/"): - script = skill.resources.get_script(script_path[len("scripts/") :]) + if file_path.startswith("scripts/"): + script = skill.resources.get_script(file_path[len("scripts/") :]) else: - script = skill.resources.get_script(script_path) + script = skill.resources.get_script(file_path) if script is None: return { - "error": f"Script '{script_path}' not found in skill '{skill_name}'.", + "error": f"Script '{file_path}' not found in skill '{skill_name}'.", "error_code": "SCRIPT_NOT_FOUND", } @@ -663,7 +762,12 @@ async def run_async( code_executor, self._toolset._script_timeout # pylint: disable=protected-access ) return await script_executor.execute_script_async( - tool_context._invocation_context, skill, script_path, script_args # pylint: disable=protected-access + tool_context._invocation_context, # pylint: disable=protected-access + skill, + file_path, + script_args, + short_options, + positional_args, # pylint: disable=protected-access ) @@ -700,10 +804,14 @@ def __init__( self._skills = {skill.name: skill for skill in skills} self._code_executor = code_executor self._script_timeout = script_timeout + self._use_invocation_cache = False self._provided_tools_by_name = {} + self._provided_toolsets = [] for tool_union in additional_tools or []: - if isinstance(tool_union, BaseTool): + if isinstance(tool_union, BaseToolset): + self._provided_toolsets.append(tool_union) + elif isinstance(tool_union, BaseTool): self._provided_tools_by_name[tool_union.name] = tool_union elif callable(tool_union): ft = FunctionTool(tool_union) @@ -736,7 +844,7 @@ async def _resolve_additional_tools_from_state( agent_name = readonly_context.agent_name state_key = f"_adk_activated_skill_{agent_name}" - activated_skills = readonly_context.state.get(state_key, []) + activated_skills = readonly_context.state.get(state_key) or [] if not activated_skills: return [] @@ -754,11 +862,22 @@ async def _resolve_additional_tools_from_state( if not additional_tool_names: return [] + # Collect all candidate tools from both individual tools and toolsets + candidate_tools = self._provided_tools_by_name.copy() + if self._provided_toolsets: + ts_results = await asyncio.gather(*( + ts.get_tools_with_prefix(readonly_context) + for ts in self._provided_toolsets + )) + for ts_tools in ts_results: + for t in ts_tools: + candidate_tools[t.name] = t + resolved_tools = [] existing_tool_names = {t.name for t in self._tools} for name in additional_tool_names: - if name in self._provided_tools_by_name: - tool = self._provided_tools_by_name[name] + if name in candidate_tools: + tool = candidate_tools[name] if tool.name in existing_tool_names: logger.error( "Tool name collision: tool '%s' already exists.", tool.name @@ -769,9 +888,9 @@ async def _resolve_additional_tools_from_state( return resolved_tools - def _get_skill(self, name: str) -> models.Skill | None: + def _get_skill(self, skill_name: str) -> models.Skill | None: """Retrieves a skill by name.""" - return self._skills.get(name) + return self._skills.get(skill_name) def _list_skills(self) -> list[models.Skill]: """Lists all available skills.""" diff --git a/src/google/adk/tools/spanner/__init__.py b/src/google/adk/tools/spanner/__init__.py index e41b9b7986..533714b0be 100644 --- a/src/google/adk/tools/spanner/__init__.py +++ b/src/google/adk/tools/spanner/__init__.py @@ -31,10 +31,12 @@ """ from . import spanner_credentials +from .admin_toolset import SpannerAdminToolset from .spanner_toolset import SpannerToolset SpannerCredentialsConfig = spanner_credentials.SpannerCredentialsConfig __all__ = [ "SpannerToolset", + "SpannerAdminToolset", "SpannerCredentialsConfig", ] diff --git a/src/google/adk/tools/spanner/admin_tool.py b/src/google/adk/tools/spanner/admin_tool.py new file mode 100644 index 0000000000..2f7269945e --- /dev/null +++ b/src/google/adk/tools/spanner/admin_tool.py @@ -0,0 +1,372 @@ +# Copyright 2026 Google LLC +# +"""Spanner Admin Tool.""" + +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import annotations + +from typing import Any + +from google.auth.credentials import Credentials +from google.cloud import spanner_admin_instance_v1 +from google.cloud.spanner_admin_database_v1 import DatabaseAdminAsyncClient +from google.cloud.spanner_admin_instance_v1 import InstanceAdminAsyncClient + + +async def list_instances( + project_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner instances within a project. + + Args: + project_id: The Google Cloud project id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and a list of the Spanner instance IDs. + + Examples: + >>> await list_instances("my_project", credentials) + { + "status": "SUCCESS", + "results": [ + "instance_1", + "instance_2" + ] + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instances = [] + async for instance in await instance_admin_api.list_instances( + parent=f"projects/{project_id}" + ): + instances.append(instance.name.split("/")[-1]) + + return {"status": "SUCCESS", "results": instances} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def get_instance( + project_id: str, + *, + instance_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Get details of a Spanner instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and the Spanner instance details. + + Examples: + >>> await get_instance(project_id="my_project", instance_id="my_instance", + ... credentials=credentials) + { + "status": "SUCCESS", + "results": { + "instance_id": "my_instance", + "display_name": "My Instance", + "config": "projects/my_project/instanceConfigs/regional-us-central1", + "node_count": 1, + "processing_units": 1000, + "labels": {"env": "prod"} + } + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instance_path = instance_admin_api.instance_path(project_id, instance_id) + instance = await instance_admin_api.get_instance(name=instance_path) + + return { + "status": "SUCCESS", + "results": { + "instance_id": instance_id, + "display_name": instance.display_name, + "config": instance.config, + "node_count": instance.node_count, + "processing_units": instance.processing_units, + "labels": dict(instance.labels), + }, + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def list_instance_configs( + project_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner instance configs available for a project. + + Args: + project_id: The Google Cloud project id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with a list of Spanner instance config IDs. + + Examples: + >>> await list_instance_configs("my_project", credentials) + { + "status": "SUCCESS", + "results": [ + "regional-us-central1", + "nam3" + ] + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + configs = await instance_admin_api.list_instance_configs( + parent=instance_admin_api.common_project_path(project_id) + ) + config_ids = [config.name.split("/")[-1] async for config in configs] + + return {"status": "SUCCESS", "results": config_ids} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def get_instance_config( + project_id: str, + *, + config_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Get details of a Spanner instance config. + + Args: + project_id: The Google Cloud project id. + config_id: The Spanner instance config id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and the Spanner instance config details. + + Examples: + >>> await get_instance_config(project_id="my_project", + ... config_id="regional-us-central1", credentials=credentials) + { + "status": "SUCCESS", + "results": { + "name": "projects/my_project/instanceConfigs/regional-us-central1", + "display_name": "us-central1", + "replicas": [ + {'location': 'us-central1', 'type': 'READ_WRITE', + 'default_leader_location': True} + ], + "labels": {}, + } + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + config_name = instance_admin_api.instance_config_path(project_id, config_id) + config = await instance_admin_api.get_instance_config(name=config_name) + + replicas = [ + { + "location": r.location, + "type": ( + spanner_admin_instance_v1.types.ReplicaInfo.ReplicaType( + r.type + ).name + ), + "default_leader_location": r.default_leader_location, + } + for r in config.replicas + ] + + return { + "status": "SUCCESS", + "results": { + "name": config.name, + "display_name": config.display_name, + "replicas": replicas, + "labels": dict(config.labels), + }, + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def create_instance( + project_id: str, + *, + instance_id: str, + config_id: str, + display_name: str, + credentials: Credentials, + nodes: int = 1, +) -> dict[str, Any]: + """Create a Spanner instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id to create. + config_id: The instance config id, e.g. regional-us-central1. + display_name: The display name for the instance. + credentials: The credentials to use for the request. + nodes: Number of nodes for the instance. Defaults to 1. + + Returns: + dict: Dictionary with the status and result of instance creation. + + Examples: + >>> await create_instance(project_id="my_project", + instance_id="my_instance", + ... config_id="regional-us-central1", display_name="My Instance", + credentials=credentials) + { + "status": "SUCCESS", + "results": "Instance my_instance created successfully." + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instance_config = instance_admin_api.instance_config_path( + project_id, config_id + ) + instance = spanner_admin_instance_v1.types.Instance( + display_name=display_name, + config=instance_config, + node_count=nodes, + ) + operation = await instance_admin_api.create_instance( + parent=instance_admin_api.common_project_path(project_id), + instance_id=instance_id, + instance=instance, + ) + await operation.result(timeout=300) # waits for completion + + return { + "status": "SUCCESS", + "results": f"Instance {instance_id} created successfully.", + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def list_databases( + project_id: str, + *, + instance_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner databases within an instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and a list of the Spanner database IDs. + + Examples: + >>> await list_databases(project_id="my_project", + ... instance_id="my_instance", credentials=credentials) + { + "status": "SUCCESS", + "results": [ + "database_1", + "database_2" + ] + } + """ + try: + database_admin_api = DatabaseAdminAsyncClient(credentials=credentials) + databases = await database_admin_api.list_databases( + parent=database_admin_api.instance_path(project_id, instance_id) + ) + database_ids = [ + database.name.split("/")[-1] async for database in databases + ] + + return {"status": "SUCCESS", "results": database_ids} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def create_database( + project_id: str, + *, + instance_id: str, + database_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Create a Spanner database. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + database_id: The Spanner database id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with result of database creation. + + Examples: + >>> await create_database(project_id="my_project", + instance_id="my_instance", + ... database_id="my_database", credentials=credentials) + { + "status": "SUCCESS", + } + """ + try: + database_admin_api = DatabaseAdminAsyncClient(credentials=credentials) + operation = await database_admin_api.create_database( + parent=database_admin_api.instance_path(project_id, instance_id), + create_statement=f"CREATE DATABASE `{database_id}`", + ) + # Wait for the operation to complete (default timeout 5 minutes). + # Result on success is + # google.cloud.spanner_admin_database_v1.types.Database + await operation.result(timeout=300) + + return { + "status": "SUCCESS", + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } diff --git a/src/google/adk/tools/spanner/admin_toolset.py b/src/google/adk/tools/spanner/admin_toolset.py new file mode 100644 index 0000000000..4989a13440 --- /dev/null +++ b/src/google/adk/tools/spanner/admin_toolset.py @@ -0,0 +1,110 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from google.adk.agents.readonly_context import ReadonlyContext +from google.adk.tools.spanner import admin_tool +from typing_extensions import override + +from ...features import experimental +from ...features import FeatureName +from ...tools.base_tool import BaseTool +from ...tools.base_toolset import BaseToolset +from ...tools.base_toolset import ToolPredicate +from ...tools.google_tool import GoogleTool +from .settings import SpannerToolSettings +from .spanner_credentials import SpannerCredentialsConfig + +DEFAULT_SPANNER_TOOL_NAME_PREFIX = "spanner" + + +@experimental(FeatureName.SPANNER_ADMIN_TOOLSET) +class SpannerAdminToolset(BaseToolset): + """A toolset containing tools for interacting with Spanner admin tasks. + + The tool names are: + - spanner_list_instances + - spanner_get_instance + - spanner_create_database + - spanner_list_databases + - spanner_create_instance + - spanner_list_instance_configs + - spanner_get_instance_config + """ + + def __init__( + self, + *, + tool_filter: ToolPredicate | list[str] | None = None, + credentials_config: SpannerCredentialsConfig | None = None, + spanner_tool_settings: SpannerToolSettings | None = None, + ): + super().__init__( + tool_filter=tool_filter, + tool_name_prefix=DEFAULT_SPANNER_TOOL_NAME_PREFIX, + ) + self._credentials_config = credentials_config + self._tool_settings = ( + spanner_tool_settings + if spanner_tool_settings + else SpannerToolSettings() + ) + + def _is_tool_selected( + self, tool: BaseTool, readonly_context: ReadonlyContext + ) -> bool: + if self.tool_filter is None: + return True + + if isinstance(self.tool_filter, ToolPredicate): + return self.tool_filter(tool, readonly_context) + + if isinstance(self.tool_filter, list): + return tool.name in self.tool_filter + + return False + + @override + async def get_tools( + self, readonly_context: ReadonlyContext | None = None + ) -> list[BaseTool]: + """Get tools from the toolset.""" + all_tools = [ + GoogleTool( + func=func, + credentials_config=self._credentials_config, + tool_settings=self._tool_settings, + ) + for func in [ + # Admin tools + admin_tool.create_database, + admin_tool.list_instances, + admin_tool.get_instance, + admin_tool.list_databases, + admin_tool.create_instance, + admin_tool.list_instance_configs, + admin_tool.get_instance_config, + ] + ] + + return [ + tool + for tool in all_tools + if self._is_tool_selected(tool, readonly_context) + ] + + @override + async def close(self): + pass diff --git a/src/google/adk/tools/spanner/settings.py b/src/google/adk/tools/spanner/settings.py index 13eda282ec..e33b659e51 100644 --- a/src/google/adk/tools/spanner/settings.py +++ b/src/google/adk/tools/spanner/settings.py @@ -263,5 +263,8 @@ class SpannerToolSettings(BaseModel): query_result_mode: QueryResultMode = QueryResultMode.DEFAULT """Mode for Spanner execute sql query result.""" + database_role: Optional[str] = None + """Optional. The database role to use for the Spanner session.""" + vector_store_settings: Optional[SpannerVectorStoreSettings] = None """Settings for Spanner vector store and vector similarity search.""" diff --git a/src/google/adk/tools/spanner/utils.py b/src/google/adk/tools/spanner/utils.py index 9f5efdb76b..7d31ed44aa 100644 --- a/src/google/adk/tools/spanner/utils.py +++ b/src/google/adk/tools/spanner/utils.py @@ -82,7 +82,9 @@ def execute_sql( project=project_id, credentials=credentials ) instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database = instance.database( + database_id, database_role=settings.database_role + ) if database.database_dialect == DatabaseDialect.POSTGRESQL: return { @@ -244,7 +246,10 @@ def __init__( self._vector_store_settings.instance_id ) ) - self._database = instance.database(self._vector_store_settings.database_id) + self._database = instance.database( + self._vector_store_settings.database_id, + database_role=self._settings.database_role, + ) if not self._database.exists(): raise ValueError( "Database id {} doesn't exist.".format( diff --git a/src/google/adk/utils/_telemetry_context.py b/src/google/adk/utils/_telemetry_context.py new file mode 100644 index 0000000000..1d2b033cf9 --- /dev/null +++ b/src/google/adk/utils/_telemetry_context.py @@ -0,0 +1,25 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Context variables for internal telemetry use.""" + +from __future__ import annotations + +import contextvars + +# Internal context variable for Visual Builder usage tracking. +# True if the current execution is within a Visual Builder context. +_is_visual_builder: contextvars.ContextVar[bool] = contextvars.ContextVar( + "_is_visual_builder", default=False +) diff --git a/src/google/adk/utils/agent_info.py b/src/google/adk/utils/agent_info.py new file mode 100644 index 0000000000..957b5808bf --- /dev/null +++ b/src/google/adk/utils/agent_info.py @@ -0,0 +1,77 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any + +from google.genai import types +import pydantic + +from ..agents.llm_agent import LlmAgent +from ..agents.llm_agent import ToolUnion +from ..tools.base_tool import BaseTool +from ..tools.base_toolset import BaseToolset +from ..tools.function_tool import FunctionTool + + +class AgentInfo(pydantic.BaseModel): + name: str + description: str + instruction: str + tools: list[types.Tool] + sub_agents: list[str] + + +def get_tools_info(tools: list[ToolUnion]) -> list[Any]: + """Returns the info for a given list of tools.""" + final_tools = [] + for tool in tools: + if isinstance(tool, BaseTool): + final_tools.append(tool) + elif isinstance(tool, BaseToolset): + final_tools.extend(tool.get_tools()) + else: + final_tools.append(FunctionTool(tool)) + return [ + types.Tool(function_declarations=[tool._get_declaration()]) + for tool in final_tools + if tool._get_declaration() + ] + + +def get_agents_dict(agent: LlmAgent) -> dict[str, AgentInfo]: + """Returns a dict with info for the agent and its sub-agents.""" + agents_dict = {} + + def _traverse(current_agent: LlmAgent): + if current_agent.name in agents_dict: + return + + sub_agent_names = [] + for sub_agent in current_agent.sub_agents: + if isinstance(sub_agent, LlmAgent): + _traverse(sub_agent) + sub_agent_names.append(sub_agent.name) + + agents_dict[current_agent.name] = AgentInfo( + name=current_agent.name, + description=current_agent.description, + instruction=current_agent.instruction, + tools=get_tools_info(current_agent.tools), + sub_agents=sub_agent_names, + ) + + _traverse(agent) + return agents_dict diff --git a/src/google/adk/utils/context_utils.py b/src/google/adk/utils/context_utils.py index cb68d800c4..c0fde29ae4 100644 --- a/src/google/adk/utils/context_utils.py +++ b/src/google/adk/utils/context_utils.py @@ -22,6 +22,7 @@ from contextlib import aclosing import inspect +import typing from typing import Any from typing import Callable from typing import get_args @@ -80,7 +81,17 @@ def find_context_parameter(func: Callable[..., Any]) -> str | None: signature = inspect.signature(func) except (ValueError, TypeError): return None + # Resolve string annotations (e.g., 'Context') + try: + type_hints = typing.get_type_hints(func) + except Exception: + # get_type_hints can fail for various reasons (e.g., unresolvable forward + # references). In such cases, we fall back to inspecting the parameter + # annotations directly. + type_hints = {} + for name, param in signature.parameters.items(): - if _is_context_type(param.annotation): + annotation = type_hints.get(name, param.annotation) + if _is_context_type(annotation): return name return None diff --git a/src/google/adk/utils/instructions_utils.py b/src/google/adk/utils/instructions_utils.py index 505b5cf128..0dfe0a2b7f 100644 --- a/src/google/adk/utils/instructions_utils.py +++ b/src/google/adk/utils/instructions_utils.py @@ -51,7 +51,7 @@ async def build_instruction( ) agent = Agent( - model="gemini-2.0-flash", + model="gemini-2.5-flash", name="agent", instruction=build_instruction, ) diff --git a/src/google/adk/utils/model_name_utils.py b/src/google/adk/utils/model_name_utils.py index 57103fb2c7..457e72e184 100644 --- a/src/google/adk/utils/model_name_utils.py +++ b/src/google/adk/utils/model_name_utils.py @@ -41,7 +41,7 @@ def extract_model_name(model_string: str) -> str: Args: model_string: Either a simple model name like "gemini-2.5-pro" or a - path-based model name like "projects/.../models/gemini-2.0-flash-001" + path-based model name like "projects/.../models/gemini-2.5-flash" Returns: The extracted model name (e.g., "gemini-2.5-pro") @@ -125,3 +125,17 @@ def is_gemini_2_or_above(model_string: Optional[str]) -> bool: return False return parsed_version.major >= 2 + + +def is_gemini_3_1_flash_live(model_string: Optional[str]) -> bool: + """Check if the model is a Gemini 3.1 Flash Live model. + + Args: + model_string: The model name + + Returns: + True if it's a Gemini 3.1 Flash Live model, False otherwise + """ + if not model_string: + return False + return model_string.startswith('gemini-3.1-flash-live') diff --git a/src/google/adk/utils/output_schema_utils.py b/src/google/adk/utils/output_schema_utils.py index bb31d098a1..228e95b66d 100644 --- a/src/google/adk/utils/output_schema_utils.py +++ b/src/google/adk/utils/output_schema_utils.py @@ -36,10 +36,14 @@ def can_use_output_schema_with_tools(model: Union[str, BaseLlm]) -> bool: # tool_choice enforcement # This is strictly more reliable than the SetModelResponseTool # prompt-based workaround. - from ..models.lite_llm import LiteLlm - - if isinstance(model, LiteLlm): - return True + if not isinstance(model, str): + try: + from ..models.lite_llm import LiteLlm + except ImportError: + LiteLlm = None + + if LiteLlm is not None and isinstance(model, LiteLlm): + return True model_string = model if isinstance(model, str) else model.model diff --git a/src/google/adk/utils/streaming_utils.py b/src/google/adk/utils/streaming_utils.py index 808541f21b..af6957b8fe 100644 --- a/src/google/adk/utils/streaming_utils.py +++ b/src/google/adk/utils/streaming_utils.py @@ -225,6 +225,13 @@ def _process_function_call_part(self, part: types.Part) -> None: if fc.partial_args or fc.will_continue: # Streaming function call arguments + # Generate ID on first chunk if not provided by LLM + if not fc.id and not self._current_fc_id: + # Lazy import to avoid circular dependency + from ..flows.llm_flows.functions import generate_client_function_call_id + + fc.id = generate_client_function_call_id() + # Save thought_signature from the part (first chunk should have it) if part.thought_signature and not self._current_thought_signature: self._current_thought_signature = part.thought_signature @@ -233,6 +240,12 @@ def _process_function_call_part(self, part: types.Part) -> None: # Non-streaming function call (standard format with args) # Skip empty function calls (used as streaming end markers) if fc.name: + # Generate ID if not provided by LLM + if not fc.id: + # Lazy import to avoid circular dependency + from ..flows.llm_flows.functions import generate_client_function_call_id + + fc.id = generate_client_function_call_id() # Flush any buffered text first, then add the FC part self._flush_text_buffer_to_sequence() self._parts_sequence.append(part) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 2e373f505a..d392c99b2c 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.26.0" +__version__ = "1.30.0" diff --git a/tests/integration/fixture/context_update_test/OWNERS b/tests/integration/fixture/context_update_test/OWNERS deleted file mode 100644 index 02f72c401c..0000000000 --- a/tests/integration/fixture/context_update_test/OWNERS +++ /dev/null @@ -1 +0,0 @@ -gkcng diff --git a/tests/integration/fixture/ecommerce_customer_service_agent/agent.py b/tests/integration/fixture/ecommerce_customer_service_agent/agent.py index 7d54edac3f..1ec6bf8d1b 100644 --- a/tests/integration/fixture/ecommerce_customer_service_agent/agent.py +++ b/tests/integration/fixture/ecommerce_customer_service_agent/agent.py @@ -288,7 +288,7 @@ def get_user_id_from_cookie() -> str: root_agent = Agent( - model="gemini-2.0-flash-001", + model="gemini-2.5-flash", name="Ecommerce_Customer_Service", instruction=""" You are an intelligent customer service assistant for an e-commerce platform. Your goal is to accurately understand user queries and use the appropriate tools to fulfill requests. Follow these guidelines: diff --git a/tests/integration/fixture/hello_world_agent/agent.py b/tests/integration/fixture/hello_world_agent/agent.py index 0a1b01f96e..b828803210 100644 --- a/tests/integration/fixture/hello_world_agent/agent.py +++ b/tests/integration/fixture/hello_world_agent/agent.py @@ -60,7 +60,7 @@ def check_prime(nums: list[int]) -> list[str]: root_agent = Agent( - model='gemini-2.0-flash-001', + model='gemini-2.5-flash', name='data_processing_agent', instruction=""" You roll dice and answer questions about the outcome of the dice rolls. diff --git a/tests/integration/fixture/hello_world_agent_async/agent.py b/tests/integration/fixture/hello_world_agent_async/agent.py index 3c107e570b..b93a0d060a 100644 --- a/tests/integration/fixture/hello_world_agent_async/agent.py +++ b/tests/integration/fixture/hello_world_agent_async/agent.py @@ -68,7 +68,7 @@ async def get_agent_async() -> ( ): """Returns the root agent.""" root_agent = Agent( - model='gemini-2.0-flash-001', + model='gemini-2.5-flash', name='data_processing_agent', instruction=""" You roll dice and answer questions about the outcome of the dice rolls. diff --git a/tests/integration/fixture/home_automation_agent/agent.py b/tests/integration/fixture/home_automation_agent/agent.py index 17d2e4e28f..3785d56e33 100644 --- a/tests/integration/fixture/home_automation_agent/agent.py +++ b/tests/integration/fixture/home_automation_agent/agent.py @@ -284,7 +284,7 @@ def list_devices(status: str = "", location: str = "") -> list: root_agent = Agent( - model="gemini-2.0-flash-001", + model="gemini-2.5-flash", name="Home_automation_agent", instruction=""" You are Home Automation Agent. You are responsible for controlling the devices in the home. diff --git a/tests/integration/fixture/trip_planner_agent/agent.py b/tests/integration/fixture/trip_planner_agent/agent.py index 288aaf27e8..02217f4294 100644 --- a/tests/integration/fixture/trip_planner_agent/agent.py +++ b/tests/integration/fixture/trip_planner_agent/agent.py @@ -99,7 +99,7 @@ ) root_agent = Agent( - model='gemini-2.0-flash-001', + model='gemini-2.5-flash', name='trip_planner', description='Plan the best trip ever', instruction=""" diff --git a/tests/integration/integrations/agent_identity/README.md b/tests/integration/integrations/agent_identity/README.md new file mode 100644 index 0000000000..a732b8717b --- /dev/null +++ b/tests/integration/integrations/agent_identity/README.md @@ -0,0 +1,26 @@ +# Integration tests for GCP Agent Identity Credentials service + +Verifies OAuth flows using GCP Agent Identity Credentials service. + +## Setup + +To set up your environment for the first time, run the `uv` setup script: +```bash +cd open_source_workspace +./uv_setup.sh +``` + +Then, activate the virtual environment: +```bash +source .venv/bin/activate +``` + +Then, install test specific packages +```bash +pip install google-cloud-iamconnectorcredentials +``` + +## Run Tests +```bash +pytest -s tests/integration/integrations/agent_identity +``` diff --git a/tests/integration/integrations/agent_identity/test_2lo_flow.py b/tests/integration/integrations/agent_identity/test_2lo_flow.py new file mode 100644 index 0000000000..7af790fef2 --- /dev/null +++ b/tests/integration/integrations/agent_identity/test_2lo_flow.py @@ -0,0 +1,202 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""E2E Integration Test for GCP Agent Identity Auth Provider two-legged OAuth Flow.""" + +import dataclasses +from typing import Any +from unittest import mock + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk import Agent +from google.adk import Runner +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.credential_manager import CredentialManager +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.adk.tools.base_authenticated_tool import BaseAuthenticatedTool +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.genai import types + +from tests.unittests import testing_utils + +DUMMY_TOKEN = "fake-gcp-2lo-token-123" +TEST_CONNECTOR_2LO = ( + "projects/test-project/locations/global/connectors/test-connector" +) + + +class DummyTool(BaseAuthenticatedTool): + + def __init__(self, auth_config: AuthConfig) -> None: + super().__init__( + name="dummy_tool", + description="Dummy tool for testing 2LO.", + auth_config=auth_config, + ) + + def _get_declaration(self) -> types.FunctionDeclaration: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters=types.Schema( + type="OBJECT", + properties={}, + ), + ) + + async def _run_async_impl( + self, *, args: dict[str, Any] | None, tool_context: Any, credential: Any + ) -> Any: + # Return the token to prove the provider gave the expected credential + if credential.http and credential.http.credentials: + return credential.http.credentials.token + if credential.oauth2 and credential.oauth2.access_token: + return credential.oauth2.access_token + return None + + +# Mocked execution; pin to a single LLM backend to avoid duplicate runs. +@pytest.mark.parametrize("llm_backend", ["GOOGLE_AI"], indirect=True) +@dataclasses.dataclass +class _DummyOperation: + done: bool = True + error: Any = None + metadata: Any = None + response: Any = dataclasses.field(init=False) + operation: Any = dataclasses.field(init=False) + + def __post_init__(self) -> None: + self.response = mock.Mock() + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token=DUMMY_TOKEN + ) + self.response.value = RetrieveCredentialsResponse.serialize(mock_credential) + self.operation = self + + def HasField(self, field_name: str) -> bool: + return getattr(self, field_name, None) is not None + + +@pytest.mark.asyncio +async def test_gcp_agent_identity_2lo_gets_token() -> None: + """Test the end-to-end flow fetching 2LO OAuth token from GCP Agent Identity credentials service.""" + + # Clear registry to isolate tests + CredentialManager._auth_provider_registry._providers.clear() + + # 1. Setup mocked GCP Client to return the fake Bearer token + with mock.patch.object( + gcp_auth_provider, + "Client", + autospec=True, + ) as mock_client_cls: + + mock_operation = _DummyOperation() + + mock_client_cls.return_value.retrieve_credentials.return_value = ( + mock_operation + ) + + # 2. Configure Auth and DummyTool + auth_scheme = GcpAuthProviderScheme( + name=TEST_CONNECTOR_2LO, + scopes=["test-scope"], + ) + auth_config = AuthConfig(auth_scheme=auth_scheme) + dummy_tool = DummyTool(auth_config=auth_config) + + # 3. Setup LLM, Agent, and Runner + # We mock the LLM to just issue the tool call to 'dummy_tool' + mock_model = testing_utils.MockModel.create( + responses=[ + types.Part.from_function_call(name="dummy_tool", args={}), + "Tool executed successfully.", + ] + ) + + agent = Agent( + name="test_agent", + model=mock_model, + instruction="You are an agent. Use the dummy_tool when needed.", + tools=[dummy_tool], + ) + + runner = Runner( + app_name="test_mcp_2lo_app", + agent=agent, + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 4. Register Auth Provider + CredentialManager.register_auth_provider(GcpAuthProvider()) + + # 5. Execute Flow + event_list = [] + async for event in runner.run_async( + user_id="test_user", + session_id="test_session1", + new_message=types.UserContent( + parts=[types.Part(text="Get me the token.")] + ), + ): + event_list.append(event) + + # 6. Assertions + + # Assert GCP Agent Identity client was invoked for credentials + expected_request = RetrieveCredentialsRequest( + connector=TEST_CONNECTOR_2LO, + user_id="test_user", + scopes=["test-scope"], + continue_uri="", + force_refresh=False, + ) + mock_client_cls.return_value.retrieve_credentials.assert_called_once_with( + expected_request + ) + + # 3 Events: Model FunctionCall -> Tool FunctionResponse -> Final LLM Text + assert len(event_list) == 3 + last_event = event_list[-1] + assert last_event.content.parts[0].text == "Tool executed successfully." + + # Validate that the mock model received the query and the tool callback + requests = mock_model.requests + # 2 Events: User Input -> Tool FunctionResponse + assert len(requests) == 2 + + # Extract the function response from the prompt payload sent to the LLM + last_request = requests[-1] + function_response = next( + ( + p.function_response + for p in last_request.contents[-1].parts + if p.function_response + ), + None, + ) + + assert function_response.name == "dummy_tool" + assert DUMMY_TOKEN in str(function_response.response) diff --git a/tests/integration/integrations/agent_identity/test_3lo_flow.py b/tests/integration/integrations/agent_identity/test_3lo_flow.py new file mode 100644 index 0000000000..2bf89e7ea6 --- /dev/null +++ b/tests/integration/integrations/agent_identity/test_3lo_flow.py @@ -0,0 +1,304 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""E2E Integration Test for 3LO flow using GCP Agent Identity service.""" + +import dataclasses +from typing import Any +from unittest import mock + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk import Agent +from google.adk import Runner +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.credential_manager import CredentialManager +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.adk.tools.base_authenticated_tool import BaseAuthenticatedTool +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.genai import types + +from tests.unittests import testing_utils + +DUMMY_TOKEN = "mock-token-3legged" +TEST_CONNECTOR_3LO = ( + "projects/my-project/locations/some-location/connectors/test-connector-3lo" +) + + +class DummyTool(BaseAuthenticatedTool): + + def __init__(self, auth_config: AuthConfig) -> None: + super().__init__( + name="dummy_tool", + description="Dummy tool for testing 3LO.", + auth_config=auth_config, + ) + + def _get_declaration(self) -> types.FunctionDeclaration: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters=types.Schema( + type="OBJECT", + properties={}, + ), + ) + + async def _run_async_impl( + self, *, args: dict[str, Any] | None, tool_context: Any, credential: Any + ) -> Any: + # Extract and return the token to prove the provider gave us the expected credential + if credential.http and credential.http.credentials: + return credential.http.credentials.token + if credential.oauth2 and credential.oauth2.access_token: + return credential.oauth2.access_token + + return None + + +@dataclasses.dataclass +class _MockOperation: + done: bool + response_obj: Any = None + metadata_obj: Any = None + error: Any = None + metadata: Any = dataclasses.field(init=False, default=None) + response: Any = dataclasses.field(init=False, default=None) + operation: Any = dataclasses.field(init=False) + + def __post_init__(self) -> None: + if self.metadata_obj: + self.metadata = mock.Mock() + self.metadata.value = RetrieveCredentialsMetadata.serialize( + self.metadata_obj + ) + if self.response_obj: + self.response = mock.Mock() + self.response.value = RetrieveCredentialsResponse.serialize( + self.response_obj + ) + self.operation = self + + def HasField(self, field_name: str) -> bool: + return getattr(self, field_name, None) is not None + + +class MockGcpClient: + """Lightweight in-memory mock for Agent Identity Credentials service 3LO Consent Flow.""" + + def __init__(self) -> None: + self.finalized_connectors = set() + + def retrieve_credentials( + self, + request: RetrieveCredentialsRequest | dict[str, Any] | None = None, + **kwargs: Any, + ) -> _MockOperation: + connector = ( + request.get("connector") + if isinstance(request, dict) + else getattr(request, "connector", None) + ) + + if connector in self.finalized_connectors: + mock_credential = RetrieveCredentialsResponse( + token=DUMMY_TOKEN, header="Authorization: Bearer" + ) + return _MockOperation(done=True, response_obj=mock_credential) + + # Otherwise, return Consent Required + # Auto-finalize for the next call to simulate user approval flow + self.finalized_connectors.add(connector) + + mock_metadata = RetrieveCredentialsMetadata( + uri_consent_required=RetrieveCredentialsMetadata.UriConsentRequired( + authorization_uri="http://mock-auth-uri", + consent_nonce="mock-consent-nonce", + ) + ) + return _MockOperation(done=False, metadata_obj=mock_metadata) + + +# Mocked execution; pin to a single LLM backend to avoid duplicate runs. +@pytest.mark.parametrize("llm_backend", ["GOOGLE_AI"], indirect=True) +@pytest.mark.asyncio +async def test_gcp_agent_identity_3lo_user_consent_flow() -> None: + # Clear registry to isolate tests + CredentialManager._auth_provider_registry._providers.clear() + + # 1. Setup mocked GCP Client to simulate stateful 3LO process + mock_gcp_client = MockGcpClient() + + with mock.patch.object( + gcp_auth_provider, + "Client", + autospec=True, + ) as mock_client_cls: + mock_client_cls.return_value.retrieve_credentials.side_effect = ( + mock_gcp_client.retrieve_credentials + ) + + # 2. Configure Auth and DummyTool + auth_scheme = GcpAuthProviderScheme( + name=TEST_CONNECTOR_3LO, + scopes=["test-scope"], + continue_uri="https://example.com/continue", + ) + auth_config = AuthConfig(auth_scheme=auth_scheme) + dummy_tool = DummyTool(auth_config=auth_config) + + # 3. Setup LLM, Agent, and Runner + # We mock the LLM to just issue the tool call to 'dummy_tool' + mock_model = testing_utils.MockModel.create( + responses=[ + types.Part.from_function_call(name="dummy_tool", args={}), + "I am waiting for your authorization.", + "Tool executed successfully.", + ] + ) + + agent = Agent( + name="test_agent", + model=mock_model, + instruction="You are an agent. Use the dummy_tool when needed.", + tools=[dummy_tool], + ) + + runner = Runner( + app_name="test_mcp_3lo_app", + agent=agent, + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 4. Register Auth Provider + CredentialManager.register_auth_provider(GcpAuthProvider()) + + # 5. Execute Flow + session = await runner.session_service.create_session( + app_name="test_mcp_3lo_app", user_id="test_user" + ) + + event_list = [] + + # Step 5a: User sends message, Agent requests credential + async for event in runner.run_async( + user_id="test_user", + session_id=session.id, + new_message=types.UserContent( + parts=[types.Part(text="Get me the token.")] + ), + ): + event_list.append(event) + + def _find_auth_request_event(events): + for event in events: + for part in event.content.parts: + if ( + part.function_call + and part.function_call.name == "adk_request_credential" + ): + return event + return None + + auth_request_event = _find_auth_request_event(event_list) + + assert ( + auth_request_event + ), "Expected adk_request_credential tool call not found." + + # Step 5b: Simulate User Consent + call_part = next( + p for p in auth_request_event.content.parts if p.function_call + ) + request_auth_config = call_part.function_call.args.get("authConfig", {}) + + assert ( + request_auth_config.get("exchangedAuthCredential", {}) + .get("oauth2", {}) + .get("nonce") + == "mock-consent-nonce" + ) + + # Step 5c: User acknowledges credential request + response_part = types.Part.from_function_response( + name="adk_request_credential", response=request_auth_config + ) + response_part.function_response.id = call_part.function_call.id + + final_response_parts = [] + async for event in runner.run_async( + user_id="test_user", + session_id=session.id, + new_message=types.UserContent(parts=[response_part]), + ): + event_list.append(event) + if event.content: + for part in event.content.parts: + if part.text: + final_response_parts.append(part.text) + + final_response_text = "".join(final_response_parts) + + # 6. Assertions + + # Assert GCP Agent Identity client was invoked for credentials twice + # (Initial Request + Post-Consent call) + assert mock_client_cls.return_value.retrieve_credentials.call_count == 2 + expected_request = RetrieveCredentialsRequest( + connector=TEST_CONNECTOR_3LO, + user_id="test_user", + scopes=["test-scope"], + continue_uri="https://example.com/continue", + force_refresh=False, + ) + mock_client_cls.return_value.retrieve_credentials.assert_called_with( + expected_request + ) + + assert "Tool executed successfully." in final_response_text + + # Validate requests received by the mock model + requests = mock_model.requests + # Events: + # 1. User Input (Get me the token.) + # 2. LLM (I am waiting for your authorization.) + # 3. LLM (Tool executed successfully.) + assert len(requests) == 3 + + # Extract the function response from the prompt payload sent to the LLM + last_request = requests[-1] + function_response = next( + ( + p.function_response + for p in last_request.contents[-1].parts + if p.function_response + ), + None, + ) + + assert function_response is not None + assert function_response.name == "dummy_tool" + assert DUMMY_TOKEN in str(function_response.response) diff --git a/tests/integration/test_generate_eval_cases_cli.py b/tests/integration/test_generate_eval_cases_cli.py new file mode 100644 index 0000000000..b02c035446 --- /dev/null +++ b/tests/integration/test_generate_eval_cases_cli.py @@ -0,0 +1,72 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for generate_eval_cases CLI command.""" + +import json +import os +import pathlib + +from click.testing import CliRunner +# We must mock or import the command safely for pytest +from google.adk.cli.cli_tools_click import cli_generate_eval_cases +import pytest + + +def test_cli_generate_eval_cases_integration(tmp_path): + """E2E Test for the Vertex AI Scenario Generation Facade via the CLI.""" + # This requires identical project setup to Kokoro's e2e_test_gcp_ubuntu_docker + if not os.environ.get("GOOGLE_CLOUD_PROJECT"): + pytest.skip( + "GOOGLE_CLOUD_PROJECT is not set. Skipping generation CLI integration" + " test." + ) + + # 1. Provide a UserSimulationConfig proxy + config_file = tmp_path / "user_sim_config.json" + config_data = { + "generation_instruction": ( + "Generate a test conversation scenario where the user asks a simple" + " question." + ), + "count": 1, + "model_name": "gemini-2.5-flash", + } + with open(config_file, "w") as f: + json.dump(config_data, f) + + eval_set_id = "cli_gen_test_eval_set" + + # 2. Invoke the command via click's testing runner + runner = CliRunner() + result = runner.invoke( + cli_generate_eval_cases, + [ + str( + pathlib.Path(__file__).parent + / "fixture" + / "home_automation_agent" + ), + eval_set_id, + f"--user_simulation_config_file={config_file}", + "--log_level=DEBUG", + ], + ) + + # 3. Assert correct output + assert ( + result.exit_code == 0 + ), f"Command failed: {result.exception}\nOutput: {result.output}" + assert "Generating scenarios utilizing Vertex AI Eval SDK..." in result.output + assert "added to eval set" in result.output diff --git a/tests/integration/test_vertex_ai_search_grounding_streaming.py b/tests/integration/test_vertex_ai_search_grounding_streaming.py index 226fd845e8..d2b349103c 100644 --- a/tests/integration/test_vertex_ai_search_grounding_streaming.py +++ b/tests/integration/test_vertex_ai_search_grounding_streaming.py @@ -44,7 +44,7 @@ _COLLECTION = "default_collection" _DATA_STORE_ID = f"adk-grounding-test-{uuid.uuid4().hex[:8]}" _DATA_STORE_DISPLAY_NAME = "ADK Grounding Integration Test" -_MODEL = "gemini-2.0-flash" +_MODEL = "gemini-2.5-flash" _TEST_DOCUMENTS = ( { diff --git a/tests/remote/triggers/README.md b/tests/remote/triggers/README.md new file mode 100644 index 0000000000..23c03ad5c6 --- /dev/null +++ b/tests/remote/triggers/README.md @@ -0,0 +1,67 @@ +# Remote Integration Tests for `/apps/{app_name}/trigger/*` Endpoints + +End-to-end tests that verify Pub/Sub push, and +Eventarc triggers against a real ADK agent deployed to Cloud Run. + +## Workflow + +This workflow is split into three independent phases. + +### Phase 1: Deploy Agent + +Build the ADK package and deploy the echo agent to Cloud Run. This ensures that +the service and its identity exist before any infrastructure wiring occurs. + +```bash +export GCP_PROJECT_ID=your-project-id +export SUFFIX=ea786 # Pick a unique suffix +export SERVICE_NAME=adk-trigger-test-$SUFFIX + +# 1. Build local ADK wheel +uv build --wheel --out-dir tests/remote/triggers/test_agent/wheels/ + +# 2. Deploy Agent +gcloud run deploy $SERVICE_NAME \ + --source=tests/remote/triggers/test_agent \ + --project="$GCP_PROJECT_ID" \ + --region="us-central1" \ + --port=8080 \ + --quiet +``` + +### Phase 2: Wire Infrastructure (Terraform) + +Run Terraform to create the supporting infrastructure (IAM roles, Pub/Sub +topics). + +```bash +cd tests/remote/triggers/terraform +terraform init +terraform apply \ + -var=project_id=$GCP_PROJECT_ID \ + -var=service_name=$SERVICE_NAME \ + -var=suffix=$SUFFIX +``` + +### Phase 3: Run Tests (Pytest) + +```bash +# Run Tests from the project root +export GCP_PROJECT_ID=your-project-id +export SUFFIX=ea786 +pytest tests/remote/triggers/ -v -s +``` + +## Cleanup + +```bash +# 1. Destroy infrastructure +cd tests/remote/triggers/terraform +terraform destroy \ + -var=project_id=$GCP_PROJECT_ID \ + -var=service_name=$SERVICE_NAME \ + -var=suffix=$SUFFIX + +# 2. Delete Cloud Run service +gcloud run services delete $SERVICE_NAME --project=$GCP_PROJECT_ID --region=us-central1 --quiet +``` diff --git a/tests/remote/triggers/conftest.py b/tests/remote/triggers/conftest.py new file mode 100644 index 0000000000..1623ee1952 --- /dev/null +++ b/tests/remote/triggers/conftest.py @@ -0,0 +1,169 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Shared pytest fixtures for remote trigger integration tests. + +Exposes GCP resource references by reading current Terraform state. + +Environment variables: + GCP_PROJECT_ID : GCP project. + GCP_REGION : GCP region (default: ``us-central1``). + ADK_TERRAFORM_BIN : Path to terraform binary (default: ``terraform``). + ADK_TERRAFORM_CWD : Directory to run terraform from (default: + ``tests/remote/terraform``). + ADK_TERRAFORM_ARGS: Extra arguments for terraform commands. +""" + +from __future__ import annotations + +import json +import os +import shlex +import subprocess +import time + +import pytest +import requests + +TERRAFORM_DIR = os.path.join(os.path.dirname(__file__), "terraform") + + +def _get_project_id() -> str | None: + """Return GCP project ID from env or gcloud config.""" + project = os.environ.get("GCP_PROJECT_ID") + if project: + return project + try: + result = subprocess.run( + ["gcloud", "config", "get-value", "project"], + capture_output=True, + text=True, + check=False, + ) + return result.stdout.strip() or None + except FileNotFoundError: + return None + + +def _get_identity_token(audience: str) -> str | None: + """Fetch an identity token for the given audience via gcloud.""" + try: + result = subprocess.run( + [ + "gcloud", + "auth", + "print-identity-token", + f"--audiences={audience}", + ], + capture_output=True, + text=True, + check=True, + ) + return result.stdout.strip() + except (FileNotFoundError, subprocess.CalledProcessError): + return None + + +# --------------------------------------------------------------------------- +# Infrastructure Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture(scope="session") +def terraform_outputs(): + """Read Terraform outputs from the current state.""" + project = _get_project_id() + if not project: + pytest.skip( + "GCP_PROJECT_ID not set and no gcloud default project configured" + ) + + tf_bin = os.environ.get("ADK_TERRAFORM_BIN", "terraform") + tf_cwd = os.environ.get("ADK_TERRAFORM_CWD", TERRAFORM_DIR) + tf_args = shlex.split(os.environ.get("ADK_TERRAFORM_ARGS", "")) + + try: + # Build the command using provided overrides + cmd = [tf_bin] + tf_args + ["output", "-json"] + result = subprocess.run( + cmd, + cwd=tf_cwd, + capture_output=True, + text=True, + check=True, + ) + raw = json.loads(result.stdout) + return {k: v["value"] for k, v in raw.items()} + except ( + subprocess.CalledProcessError, + FileNotFoundError, + json.JSONDecodeError, + ) as e: + pytest.fail( + "Failed to read Terraform outputs. Ensure 'terraform apply' has been" + f" run successfully.\nCommand: {' '.join(cmd)}\nCWD:" + f" {tf_cwd}\nError: {e}" + ) + + +@pytest.fixture(scope="session") +def cloud_run_url(terraform_outputs) -> str: + """Base URL of the deployed Cloud Run service.""" + return terraform_outputs["cloud_run_url"] + + +@pytest.fixture(scope="session") +def pubsub_topic(terraform_outputs) -> str: + """Fully qualified Pub/Sub topic name.""" + return terraform_outputs["pubsub_topic"] + + +@pytest.fixture(scope="session") +def pubsub_topic_short(terraform_outputs) -> str: + """Short Pub/Sub topic name.""" + return terraform_outputs["pubsub_topic_short"] + + +@pytest.fixture(scope="session") +def eventarc_topic(terraform_outputs) -> str: + """Fully qualified Eventarc source topic name.""" + return terraform_outputs["eventarc_topic"] + + +@pytest.fixture(scope="session") +def eventarc_topic_short(terraform_outputs) -> str: + """Short Eventarc source topic name.""" + return terraform_outputs["eventarc_topic_short"] + + +@pytest.fixture(scope="session") +def project_id(terraform_outputs) -> str: + """GCP project ID.""" + return terraform_outputs["project_id"] + + +@pytest.fixture(scope="session") +def auth_headers(cloud_run_url) -> dict[str, str]: + """Authorization headers for direct HTTP calls to Cloud Run.""" + try: + resp = requests.get(cloud_run_url, timeout=10) + if resp.status_code != 403: + return {} + except requests.RequestException: + pass + + token = _get_identity_token(cloud_run_url) + if token: + return {"Authorization": f"Bearer {token}"} + return {} diff --git a/tests/remote/triggers/terraform/cloud_run.tf b/tests/remote/triggers/terraform/cloud_run.tf new file mode 100644 index 0000000000..8580cad44d --- /dev/null +++ b/tests/remote/triggers/terraform/cloud_run.tf @@ -0,0 +1,35 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# ADK Agent for trigger testing. +# +# This configuration references a Cloud Run service that has been deployed +# manually (e.g. via `gcloud run deploy`) before running Terraform. +# --------------------------------------------------------------------------- + +locals { + service_name = var.service_name != null ? var.service_name : "${local.name_prefix}-${local.suffix}" +} + +# Read the service back as a data source so other resources can reference +# its URL and attributes. +data "google_cloud_run_v2_service" "trigger_agent" { + name = local.service_name + location = var.region + project = var.project_id +} + +# No longer using resource "google_cloud_run_v2_service" to avoid +# deployment conflicts with local tools. diff --git a/tests/remote/triggers/terraform/eventarc.tf b/tests/remote/triggers/terraform/eventarc.tf new file mode 100644 index 0000000000..d8d586d7b7 --- /dev/null +++ b/tests/remote/triggers/terraform/eventarc.tf @@ -0,0 +1,120 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# Eventarc: separate Pub/Sub topic as event source → Cloud Run /trigger/eventarc +# --------------------------------------------------------------------------- + +# A dedicated topic that acts as the Eventarc event source. +# Publishing to this topic triggers the Eventarc → Cloud Run pipeline. +resource "google_pubsub_topic" "eventarc_source" { + name = "${local.name_prefix}-eventarc-${local.suffix}" + project = var.project_id + + depends_on = [google_project_service.apis] +} + +resource "google_eventarc_trigger" "trigger_test" { + name = "${local.name_prefix}-${local.suffix}" + location = var.region + project = var.project_id + + matching_criteria { + attribute = "type" + value = "google.cloud.pubsub.topic.v1.messagePublished" + } + + transport { + pubsub { + topic = google_pubsub_topic.eventarc_source.id + } + } + + destination { + cloud_run_service { + service = data.google_cloud_run_v2_service.trigger_agent.name + path = "/apps/trigger_echo_agent/trigger/eventarc" + region = var.region + } + } + + service_account = google_service_account.eventarc_invoker.email + + depends_on = [ + google_project_iam_member.eventarc_event_receiver, + google_project_service.apis, + ] +} + +# --------------------------------------------------------------------------- +# GCS Trigger Test +# --------------------------------------------------------------------------- + +resource "random_id" "bucket_suffix" { + byte_length = 4 +} + +resource "google_storage_bucket" "trigger_test_bucket" { + name = "${local.name_prefix}-bucket-${local.suffix}-${random_id.bucket_suffix.hex}" + location = var.region + project = var.project_id + force_destroy = true + + uniform_bucket_level_access = true + + depends_on = [google_project_service.apis] +} + +data "google_storage_project_service_account" "gcs_account" { + project = var.project_id +} + +resource "google_project_iam_member" "gcs_pubsub_publisher" { + project = var.project_id + role = "roles/pubsub.publisher" + member = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}" + + depends_on = [data.google_storage_project_service_account.gcs_account] +} + +resource "google_eventarc_trigger" "gcs_trigger" { + name = "${local.name_prefix}-gcs-${local.suffix}" + location = var.region + project = var.project_id + + matching_criteria { + attribute = "type" + value = "google.cloud.storage.object.v1.finalized" + } + matching_criteria { + attribute = "bucket" + value = google_storage_bucket.trigger_test_bucket.name + } + + destination { + cloud_run_service { + service = data.google_cloud_run_v2_service.trigger_agent.name + path = "/apps/trigger_echo_agent/trigger/eventarc" + region = var.region + } + } + + service_account = google_service_account.eventarc_invoker.email + + depends_on = [ + google_project_iam_member.eventarc_event_receiver, + google_project_iam_member.gcs_pubsub_publisher, + google_project_service.apis, + ] +} diff --git a/tests/remote/triggers/terraform/iam.tf b/tests/remote/triggers/terraform/iam.tf new file mode 100644 index 0000000000..cc0a5f0c3e --- /dev/null +++ b/tests/remote/triggers/terraform/iam.tf @@ -0,0 +1,80 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# IAM bindings and Service Accounts for Cloud Run invokers. +# --------------------------------------------------------------------------- + +# Service account for the Cloud Run agent itself. +resource "google_service_account" "cloud_run" { + account_id = "${local.name_prefix}-run-${local.suffix}" + display_name = "ADK Trigger Test - Cloud Run Agent" + project = var.project_id +} + +# Service account for Pub/Sub to invoke Cloud Run. +resource "google_service_account" "pubsub_invoker" { + account_id = "${local.name_prefix}-ps-${local.suffix}" + display_name = "ADK Trigger Test - Pub/Sub Invoker" + project = var.project_id +} + +# Service account for Eventarc to invoke Cloud Run. +resource "google_service_account" "eventarc_invoker" { + account_id = "${local.name_prefix}-ea-${local.suffix}" + display_name = "ADK Trigger Test - Eventarc Invoker" + project = var.project_id +} + +resource "google_cloud_run_v2_service_iam_member" "pubsub_invoker" { + name = data.google_cloud_run_v2_service.trigger_agent.name + location = var.region + project = var.project_id + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.pubsub_invoker.email}" +} + +resource "google_cloud_run_v2_service_iam_member" "eventarc_invoker" { + name = data.google_cloud_run_v2_service.trigger_agent.name + location = var.region + project = var.project_id + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.eventarc_invoker.email}" +} + + +# Eventarc requires the receiver role on the invoker service account. +resource "google_project_iam_member" "eventarc_event_receiver" { + project = var.project_id + role = "roles/eventarc.eventReceiver" + member = "serviceAccount:${google_service_account.eventarc_invoker.email}" +} + +data "google_project" "project" { + project_id = var.project_id +} + +# Grant the Pub/Sub service agent permission to create OIDC tokens for the pubsub_invoker SA +resource "google_service_account_iam_member" "pubsub_token_creator" { + service_account_id = google_service_account.pubsub_invoker.name + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" +} + +# Grant the Pub/Sub service agent permission to create OIDC tokens for the eventarc_invoker SA +resource "google_service_account_iam_member" "eventarc_token_creator" { + service_account_id = google_service_account.eventarc_invoker.name + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" +} diff --git a/tests/remote/triggers/terraform/main.tf b/tests/remote/triggers/terraform/main.tf new file mode 100644 index 0000000000..b084386ef6 --- /dev/null +++ b/tests/remote/triggers/terraform/main.tf @@ -0,0 +1,64 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +terraform { + required_version = ">= 1.0.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 5.0.0" + } + random = { + source = "hashicorp/random" + version = ">= 3.0.0" + } + } +} + +provider "google" { + project = var.project_id + region = var.region + + default_labels = { + goog-terraform-provisioned = "true" + } +} + +# Random suffix to avoid resource name collisions across parallel test runs. +resource "random_id" "suffix" { + byte_length = 4 +} + +locals { + suffix = var.suffix != null ? var.suffix : random_id.suffix.hex + name_prefix = "adk-trigger-test" + + required_apis = [ + "run.googleapis.com", + "pubsub.googleapis.com", + "cloudbuild.googleapis.com", + "eventarc.googleapis.com", + "logging.googleapis.com", + ] +} + +resource "google_project_service" "apis" { + for_each = toset(local.required_apis) + + project = var.project_id + service = each.value + + disable_on_destroy = false +} diff --git a/tests/remote/triggers/terraform/outputs.tf b/tests/remote/triggers/terraform/outputs.tf new file mode 100644 index 0000000000..01606d5530 --- /dev/null +++ b/tests/remote/triggers/terraform/outputs.tf @@ -0,0 +1,56 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +output "cloud_run_url" { + description = "Base URL of the deployed Cloud Run trigger-echo-agent service." + value = data.google_cloud_run_v2_service.trigger_agent.uri +} + +output "pubsub_topic" { + description = "Fully qualified Pub/Sub topic name for direct-push tests." + value = google_pubsub_topic.trigger_test.id +} + +output "pubsub_topic_short" { + description = "Short Pub/Sub topic name." + value = google_pubsub_topic.trigger_test.name +} + +output "eventarc_topic" { + description = "Fully qualified Pub/Sub topic name that fires the Eventarc trigger." + value = google_pubsub_topic.eventarc_source.id +} + +output "eventarc_topic_short" { + description = "Short Eventarc source topic name." + value = google_pubsub_topic.eventarc_source.name +} + + + + +output "project_id" { + description = "GCP project ID used for test resources." + value = var.project_id +} + +output "region" { + description = "GCP region used for test resources." + value = var.region +} + +output "suffix" { + description = "The random suffix used for resource naming." + value = local.suffix +} diff --git a/tests/remote/triggers/terraform/pubsub.tf b/tests/remote/triggers/terraform/pubsub.tf new file mode 100644 index 0000000000..d3cc3b5e59 --- /dev/null +++ b/tests/remote/triggers/terraform/pubsub.tf @@ -0,0 +1,54 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# Pub/Sub topic + push subscription pointing to /trigger/pubsub +# --------------------------------------------------------------------------- + +resource "google_pubsub_topic" "trigger_test" { + name = "${local.name_prefix}-${local.suffix}" + project = var.project_id + + depends_on = [google_project_service.apis] +} + +resource "google_pubsub_subscription" "trigger_push" { + name = "${local.name_prefix}-push-${local.suffix}" + project = var.project_id + topic = google_pubsub_topic.trigger_test.id + + push_config { + push_endpoint = "${data.google_cloud_run_v2_service.trigger_agent.uri}/apps/trigger_echo_agent/trigger/pubsub" + + oidc_token { + service_account_email = google_service_account.pubsub_invoker.email + audience = data.google_cloud_run_v2_service.trigger_agent.uri + } + } + + # Short ack deadline for faster test feedback. + ack_deadline_seconds = 30 + + # Retry policy for failed pushes. + retry_policy { + minimum_backoff = "10s" + maximum_backoff = "60s" + } + + # Let the subscription persist until Terraform destroys it. + # (default retention of 604800s is fine for tests) + expiration_policy { + ttl = "" + } +} diff --git a/tests/remote/triggers/terraform/variables.tf b/tests/remote/triggers/terraform/variables.tf new file mode 100644 index 0000000000..951ee84a18 --- /dev/null +++ b/tests/remote/triggers/terraform/variables.tf @@ -0,0 +1,42 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +variable "project_id" { + description = "GCP project ID for test resources." + type = string +} + +variable "region" { + description = "GCP region for Cloud Run and related resources." + type = string + default = "us-central1" +} + +variable "simulate_429_count" { + description = "Number of 429 errors the echo agent simulates before succeeding (0 = disabled)." + type = number + default = 0 +} + +variable "service_name" { + description = "Optional name of a pre-deployed Cloud Run service. If provided, Terraform will use it instead of generating a name from the suffix." + type = string + default = null +} + +variable "suffix" { + description = "Optional suffix for resource naming. If not provided, a random one will be generated." + type = string + default = null +} diff --git a/tests/remote/triggers/test_agent/Dockerfile b/tests/remote/triggers/test_agent/Dockerfile new file mode 100644 index 0000000000..2dd5028fce --- /dev/null +++ b/tests/remote/triggers/test_agent/Dockerfile @@ -0,0 +1,24 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Install the local ADK wheel (built from the repo under test). +# Install the .whl file directly so pip uses it instead of PyPI. +# Dependencies are resolved from PyPI automatically. +COPY wheels/ /tmp/wheels/ +SHELL ["/bin/bash", "-c"] +RUN pip install --no-cache-dir /tmp/wheels/google_adk-*.whl \ + && rm -rf /tmp/wheels + +# Copy the agent into the expected adk layout: +# /app/agents/trigger_echo_agent/__init__.py +# /app/agents/trigger_echo_agent/agent.py +COPY __init__.py agents/trigger_echo_agent/__init__.py +COPY agent.py agents/trigger_echo_agent/agent.py + +ENV PORT=8080 +ENV HOST=0.0.0.0 + +EXPOSE 8080 + +CMD ["adk", "api_server", "--host=0.0.0.0", "--port=8080", "--trigger_sources=pubsub,eventarc", "/app/agents"] diff --git a/tests/remote/triggers/test_agent/__init__.py b/tests/remote/triggers/test_agent/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/remote/triggers/test_agent/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/remote/triggers/test_agent/agent.py b/tests/remote/triggers/test_agent/agent.py new file mode 100644 index 0000000000..c855889ae1 --- /dev/null +++ b/tests/remote/triggers/test_agent/agent.py @@ -0,0 +1,86 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Echo agent for remote trigger integration tests. + +Uses a before_model_callback to echo user input without calling the LLM, +making tests fast, deterministic, and free of LLM model quota usage. + +Supports optional 429 simulation via the SIMULATE_429_COUNT environment +variable: when set to N > 0, the first N invocations per session will raise +a RuntimeError containing "429 RESOURCE_EXHAUSTED" before succeeding. +""" + +import os + +from google.adk.agents.callback_context import CallbackContext +from google.adk.agents.llm_agent import Agent +from google.adk.models.llm_request import LlmRequest +from google.adk.models.llm_response import LlmResponse +from google.genai import types + +# Track 429 simulation state across invocations within a process. +# Keyed by session_id to allow per-session failure counts. +_429_counter: dict[str, int] = {} + + +def before_model_callback( + callback_context: CallbackContext, + llm_request: LlmRequest, +) -> LlmResponse: + """Echo user input back without calling the LLM. + + If SIMULATE_429_COUNT is set, raises a transient error for the first N + invocations (per session) to exercise the retry-with-backoff logic in + the trigger endpoints. + """ + fail_count = int(os.environ.get("SIMULATE_429_COUNT", "0")) + session = callback_context.session + session_id = session.id if session else "default" + + if fail_count > 0: + current = _429_counter.get(session_id, 0) + if current < fail_count: + _429_counter[session_id] = current + 1 + raise RuntimeError("429 RESOURCE_EXHAUSTED: simulated quota exceeded") + + # Extract the most recent user message from the session events. + user_text = "" + if session and session.events: + for event in reversed(session.events): + if event.content and event.content.role == "user" and event.content.parts: + user_text = event.content.parts[0].text or "" + break + + # Fall back to the current LLM request contents if no session event found. + if not user_text and llm_request.contents: + for content in reversed(llm_request.contents): + if content.role == "user" and content.parts: + user_text = content.parts[0].text or "" + break + + return LlmResponse( + content=types.Content( + role="model", + parts=[types.Part(text=f"ECHO: {user_text}")], + ), + ) + + +root_agent = Agent( + model="gemini-2.0-flash-001", + name="trigger_echo_agent", + instruction="Echo agent for trigger testing.", + before_model_callback=before_model_callback, +) diff --git a/tests/remote/triggers/test_trigger_eventarc.py b/tests/remote/triggers/test_trigger_eventarc.py new file mode 100644 index 0000000000..bb4c215ee7 --- /dev/null +++ b/tests/remote/triggers/test_trigger_eventarc.py @@ -0,0 +1,125 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Remote integration tests for the /apps/trigger_echo_agent/trigger/eventarc endpoint. + +Tests cover: + + /apps/trigger_echo_agent/trigger/eventarc on Cloud Run. + 2. Full pipeline tests — publish to the Eventarc source topic and + verify the request reached Cloud Run via Cloud Logging. + +Prerequisites: + - GCP project with Eventarc, Pub/Sub, Cloud Run, and Cloud Logging + APIs enabled. + - ``gcloud`` CLI authenticated. + - Terraform >= 1.5 installed. + +Run: + GCP_PROJECT_ID=my-project pytest tests/remote/test_trigger_eventarc.py -v -s +""" + +from __future__ import annotations + +import datetime +import json +import time +import uuid + +from google.cloud import logging as cloud_logging +from google.cloud import pubsub_v1 +import pytest +import requests + +# --------------------------------------------------------------------------- +# Full Eventarc pipeline tests +# --------------------------------------------------------------------------- + + +class TestEventarcPipeline: + """Test the full Pub/Sub → Eventarc → Cloud Run pipeline. + + Verification is done by checking Cloud Run request logs for successful + POST requests to /apps/trigger_echo_agent/trigger/eventarc. + """ + + @pytest.fixture(autouse=True) + def _setup(self, eventarc_topic, project_id): + self.publisher = pubsub_v1.PublisherClient() + self.topic_path = eventarc_topic + self.project_id = project_id + self.logging_client = cloud_logging.Client(project=project_id) + + def _publish_event(self, data: str, wait_seconds: int = 45) -> None: + """Publish a message to the Eventarc source topic and wait.""" + future = self.publisher.publish( + self.topic_path, + data.encode("utf-8"), + ) + future.result(timeout=30) + time.sleep(wait_seconds) + + def _count_successful_requests( + self, + path: str, + since: datetime.datetime, + ) -> int: + """Count successful HTTP requests to the given path in Cloud Run logs.""" + timestamp = since.strftime("%Y-%m-%dT%H:%M:%SZ") + filter_str = ( + 'resource.type="cloud_run_revision" ' + f'httpRequest.requestUrl:"{path}" ' + "httpRequest.status=200 " + f'timestamp>="{timestamp}"' + ) + entries = list( + self.logging_client.list_entries( + filter_=filter_str, + page_size=50, + ) + ) + return len(entries) + + def test_eventarc_pubsub_trigger(self): + """Publish to Eventarc source topic and verify Cloud Run processes it.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_event(json.dumps({"test": "eventarc-pipeline"})) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/eventarc", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/eventarc, found {count}" + ) + + def test_eventarc_multiple_events(self): + """Publish multiple events and verify they are processed.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + for i in range(3): + future = self.publisher.publish( + self.topic_path, + json.dumps({"seq": i}).encode("utf-8"), + ) + future.result(timeout=30) + + # Eventarc delivery + log ingestion can be slow; wait longer. + time.sleep(90) + + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/eventarc", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/eventarc, found {count}" + ) diff --git a/tests/remote/triggers/test_trigger_pubsub.py b/tests/remote/triggers/test_trigger_pubsub.py new file mode 100644 index 0000000000..2168e4976d --- /dev/null +++ b/tests/remote/triggers/test_trigger_pubsub.py @@ -0,0 +1,166 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Remote integration tests for the /apps/trigger_echo_agent/trigger/pubsub endpoint. + +Tests cover: + + 2. Full pipeline tests — publish to a Pub/Sub topic with a push + subscription pointing at the Cloud Run service, then verify via + Cloud Logging that the requests reached the service. + +Prerequisites: + - GCP project with Pub/Sub, Cloud Run, and Cloud Logging APIs enabled. + - ``gcloud`` CLI authenticated. + - Terraform >= 1.5 installed. + +Run: + GCP_PROJECT_ID=my-project pytest tests/remote/test_trigger_pubsub.py -v -s +""" + +from __future__ import annotations + +import base64 +import datetime +import json +import time + +from google.cloud import logging as cloud_logging +from google.cloud import pubsub_v1 +import pytest +import requests + +# --------------------------------------------------------------------------- +# Full Pub/Sub pipeline tests +# --------------------------------------------------------------------------- + + +class TestPubSubPipeline: + """Test the full Pub/Sub → push subscription → Cloud Run pipeline. + + Verification is done by checking Cloud Run request logs for successful + POST requests to /apps/trigger_echo_agent/trigger/pubsub. We look for + httpRequest entries with + status 200 that arrived after we published. + """ + + @pytest.fixture(autouse=True) + def _setup(self, pubsub_topic, project_id, cloud_run_url): + self.publisher = pubsub_v1.PublisherClient() + self.topic_path = pubsub_topic + self.project_id = project_id + self.cloud_run_url = cloud_run_url + self.logging_client = cloud_logging.Client(project=project_id) + + def _publish_and_wait( + self, + data: str, + attributes: dict[str, str] | None = None, + wait_seconds: int = 30, + ) -> None: + """Publish a message and wait for it to be delivered.""" + future = self.publisher.publish( + self.topic_path, + data.encode("utf-8"), + **(attributes or {}), + ) + future.result(timeout=30) + time.sleep(wait_seconds) + + def _count_successful_requests( + self, + path: str, + since: datetime.datetime, + ) -> int: + """Count successful HTTP requests to the given path in Cloud Run logs.""" + timestamp = since.strftime("%Y-%m-%dT%H:%M:%SZ") + filter_str = ( + 'resource.type="cloud_run_revision" ' + f'httpRequest.requestUrl:"{path}" ' + "httpRequest.status=200 " + f'timestamp>="{timestamp}"' + ) + entries = list( + self.logging_client.list_entries( + filter_=filter_str, + page_size=200, + ) + ) + return len(entries) + + def test_publish_text_message(self): + """Publish a text message and verify it reaches Cloud Run.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_and_wait("hello-pipeline-test") + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_publish_json_message(self): + """Publish a JSON message and verify processing.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + data = json.dumps({"type": "json", "value": 42}) + self._publish_and_wait(data) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_publish_with_attributes(self): + """Publish a message with attributes and verify processing.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_and_wait( + "attr-pipeline-test", + attributes={"test_attr": "pytest"}, + ) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_high_volume(self): + """Publish 20 messages and verify they are processed.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + n = 20 + futures = [] + for i in range(n): + future = self.publisher.publish( + self.topic_path, + f"volume-test-{i}".encode("utf-8"), + ) + futures.append(future) + + for f in futures: + f.result(timeout=30) + + # Wait for push delivery. + time.sleep(15) + + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + # Allow some tolerance — at least 80% should arrive. + assert ( + count >= n * 0.8 + ), f"Expected at least {int(n * 0.8)} successful requests, found {count}" diff --git a/tests/unittests/a2a/converters/test_to_adk.py b/tests/unittests/a2a/converters/test_to_adk.py index 9065195645..12eaf2a75a 100644 --- a/tests/unittests/a2a/converters/test_to_adk.py +++ b/tests/unittests/a2a/converters/test_to_adk.py @@ -48,7 +48,7 @@ def setup_method(self): def test_convert_a2a_message_to_event_success(self): """Test successful conversion of A2A message to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} message = Message(message_id="msg-1", role="user", parts=[a2a_part]) @@ -73,10 +73,64 @@ def test_convert_a2a_message_to_event_none(self): with pytest.raises(ValueError, match="A2A message cannot be None"): convert_a2a_message_to_event(None) + def test_convert_a2a_message_to_event_restores_actions_from_metadata(self): + """Test A2A message conversion restores ADK actions metadata.""" + a2a_part = Mock(spec=A2APart) + a2a_part.root = Mock(spec=TextPart) + a2a_part.root.metadata = {} + message = Message( + message_id="msg-1", + role="user", + parts=[a2a_part], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + + mock_genai_part = genai_types.Part.from_text(text="hello") + mock_part_converter = Mock(return_value=[mock_genai_part]) + + event = convert_a2a_message_to_event( + message, + author="test-author", + invocation_context=self.mock_context, + part_converter=mock_part_converter, + ) + + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is not None + assert event.content.parts[0] == mock_genai_part + + def test_convert_a2a_message_to_event_returns_action_only_event(self): + """Test A2A message conversion returns action-only events.""" + message = Message( + message_id="msg-1", + role="user", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + + event = convert_a2a_message_to_event( + message, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is None + def test_convert_a2a_task_to_event_success(self): """Test successful conversion of A2A task to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} task = Task( id="task-1", @@ -107,6 +161,177 @@ def test_convert_a2a_task_to_event_success(self): assert len(event.content.parts) == 1 assert event.content.parts[0] == mock_genai_part + def test_convert_a2a_task_to_event_returns_action_only_event(self): + """Test A2A task conversion returns action-only events.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is None + + def test_convert_a2a_task_to_event_merges_actions_across_artifacts(self): + """Test task conversion merges actions across artifact metadata.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"first_key": "first-value"} + } + }, + ), + Artifact( + artifact_id="art-2", + artifact_type="message", + parts=[], + metadata={}, + ), + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"first_key": "first-value"} + assert event.content is None + + def test_convert_a2a_task_to_event_overwrites_nested_state_delta_values(self): + """Test task conversion preserves top-level state overwrite semantics.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": { + "settings": { + "theme": "light", + "language": "en", + } + } + } + }, + ), + Artifact( + artifact_id="art-2", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"settings": {"theme": "dark"}} + } + }, + ), + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"settings": {"theme": "dark"}} + assert event.content is None + + def test_convert_a2a_task_to_event_merges_status_and_artifact_actions(self): + """Test task conversion merges status and artifact actions.""" + a2a_part = Mock(spec=A2APart) + a2a_part.root = Mock(spec=TextPart) + a2a_part.root.metadata = {} + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.input_required, + timestamp="2024-01-01T00:00:00Z", + message=Message( + message_id="msg-1", + role="agent", + parts=[a2a_part], + metadata={ + _get_adk_metadata_key("actions"): { + "transferToAgent": "agent-2" + } + }, + ), + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + ], + ) + + mock_genai_part = genai_types.Part.from_text(text="need input") + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(return_value=[mock_genai_part]), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.actions.transfer_to_agent == "agent-2" + assert event.content is not None + assert event.content.parts == [mock_genai_part] + def test_convert_a2a_task_to_event_none(self): """Test convert_a2a_task_to_event with None.""" with pytest.raises(ValueError, match="A2A task cannot be None"): @@ -115,7 +340,7 @@ def test_convert_a2a_task_to_event_none(self): def test_convert_a2a_status_update_to_event_success(self): """Test successful conversion of A2A status update to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = { _get_adk_metadata_key(A2A_DATA_PART_METADATA_IS_LONG_RUNNING_KEY): True } @@ -161,7 +386,7 @@ def test_convert_a2a_status_update_to_event_none(self): def test_convert_a2a_artifact_update_to_event_success(self): """Test successful conversion of A2A artifact update to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} update = TaskArtifactUpdateEvent( task_id="task-1", diff --git a/tests/unittests/a2a/executor/test_a2a_agent_executor.py b/tests/unittests/a2a/executor/test_a2a_agent_executor.py index 787b260fe6..4f44e1363c 100644 --- a/tests/unittests/a2a/executor/test_a2a_agent_executor.py +++ b/tests/unittests/a2a/executor/test_a2a_agent_executor.py @@ -66,6 +66,7 @@ def setup_method(self): self.mock_context.current_task = None self.mock_context.task_id = "test-task-id" self.mock_context.context_id = "test-context-id" + self.mock_context.requested_extensions = [] self.mock_event_queue = Mock(spec=EventQueue) diff --git a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py index 9acae2dc52..940b79a0b9 100644 --- a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py +++ b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py @@ -29,12 +29,14 @@ from google.adk.a2a.converters.request_converter import AgentRunRequest from google.adk.a2a.converters.utils import _get_adk_metadata_key from google.adk.a2a.executor.a2a_agent_executor_impl import _A2aAgentExecutor as A2aAgentExecutor +from google.adk.a2a.executor.a2a_agent_executor_impl import _NEW_A2A_ADK_INTEGRATION_EXTENSION from google.adk.a2a.executor.a2a_agent_executor_impl import A2aAgentExecutorConfig from google.adk.a2a.executor.config import ExecuteInterceptor from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.runners import RunConfig from google.adk.runners import Runner +from google.adk.sessions.base_session_service import GetSessionConfig from google.genai.types import Content import pytest @@ -77,7 +79,7 @@ def setup_method(self): _get_adk_metadata_key("app_name"): "test-app", _get_adk_metadata_key("user_id"): "test-user", _get_adk_metadata_key("session_id"): "test-session", - _get_adk_metadata_key("agent_executor_v2"): True, + _NEW_A2A_ADK_INTEGRATION_EXTENSION: {"adk_agent_executor_v2": True}, } async def _create_async_generator(self, items): @@ -658,6 +660,7 @@ async def test_resolve_session_creates_new_session(self): app_name=self.mock_runner.app_name, user_id="test-user", session_id="old-session-id", + config=GetSessionConfig(num_recent_events=0, after_timestamp=None), ) self.mock_runner.session_service.create_session.assert_called_once_with( app_name=self.mock_runner.app_name, diff --git a/tests/unittests/a2a/integration/__init__.py b/tests/unittests/a2a/integration/__init__.py new file mode 100644 index 0000000000..f935b2c7f0 --- /dev/null +++ b/tests/unittests/a2a/integration/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A integration tests package.""" diff --git a/tests/unittests/a2a/integration/client.py b/tests/unittests/a2a/integration/client.py new file mode 100644 index 0000000000..11c34c35b9 --- /dev/null +++ b/tests/unittests/a2a/integration/client.py @@ -0,0 +1,88 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A Client for integration tests.""" + +from a2a.client.client import ClientConfig as A2AClientConfig +from a2a.client.client_factory import ClientFactory as A2AClientFactory +from a2a.extensions.common import HTTP_EXTENSION_HEADER +from a2a.types import TransportProtocol as A2ATransport +from google.adk.a2a.agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION +from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +import httpx + +from .server import agent_card + + +def create_client(app, streaming: bool = False) -> RemoteA2aAgent: + """Creates a RemoteA2aAgent connected to the provided FastAPI app. + + Args: + app: The FastAPI application (server) to connect to. + streaming: Whether to enable streaming mode in the client. + + Returns: + A RemoteA2aAgent instance. + """ + + client = httpx.AsyncClient( + transport=httpx.ASGITransport(app=app), base_url="http://test" + ) + + client_config = A2AClientConfig( + httpx_client=client, + streaming=streaming, + polling=False, + supported_transports=[A2ATransport.jsonrpc], + ) + factory = A2AClientFactory(config=client_config) + + # use_legacy=False forces the new implementation + agent = RemoteA2aAgent( + name="remote_agent", + agent_card=agent_card, + a2a_client_factory=factory, + use_legacy=False, + ) + + return agent + + +def create_a2a_client(app, streaming: bool = False): + """Creates a bare A2A Client connected to the provided FastAPI app. + + This is in contrast to create_client, which wraps the a2a_client into a + RemoteA2aAgent for the standard runner framework ecosystem execution. + + Args: + app: The FastAPI application (server) to connect to. + streaming: Whether to enable streaming mode in the client. + + Returns: + An A2A Client instance. + """ + client = httpx.AsyncClient( + transport=httpx.ASGITransport(app=app), + base_url="http://test", + headers={HTTP_EXTENSION_HEADER: _NEW_A2A_ADK_INTEGRATION_EXTENSION}, + ) + + client_config = A2AClientConfig( + httpx_client=client, + streaming=streaming, + polling=False, + supported_transports=[A2ATransport.jsonrpc], + ) + factory = A2AClientFactory(config=client_config) + return factory.create(agent_card) diff --git a/tests/unittests/a2a/integration/server.py b/tests/unittests/a2a/integration/server.py new file mode 100644 index 0000000000..c965a71091 --- /dev/null +++ b/tests/unittests/a2a/integration/server.py @@ -0,0 +1,97 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A Server for integration tests.""" + +from unittest.mock import AsyncMock +from unittest.mock import Mock + +from a2a.server.apps.jsonrpc.fastapi_app import A2AFastAPIApplication +from a2a.server.request_handlers.default_request_handler import DefaultRequestHandler +from a2a.server.tasks.inmemory_task_store import InMemoryTaskStore +from a2a.types import AgentCapabilities +from a2a.types import AgentCard +from a2a.types import AgentSkill +from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor +from google.adk.a2a.executor.config import A2aAgentExecutorConfig +from google.adk.a2a.executor.interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor +from google.adk.agents.base_agent import BaseAgent +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types + + +class FakeRunner(Runner): + """A Fake Runner that delegates run_async to a provided function.""" + + def __init__(self, run_async_fn): + agent = Mock(spec=BaseAgent) + agent.name = "FakeAgent" + + session_service = InMemorySessionService() + super().__init__( + app_name="FakeApp", + agent=agent, + session_service=session_service, + ) + self.run_async_fn = run_async_fn + + mock_artifact_service = Mock() + mock_artifact_service.load_artifact = AsyncMock( + return_value=types.Part(text="artifact content") + ) + self.artifact_service = mock_artifact_service + + async def run_async(self, **kwargs): + async for event in self.run_async_fn(**kwargs): + yield event + + +agent_card = AgentCard( + name="remote_agent", + url="http://test", + description="A fun fact generator agent", + capabilities=AgentCapabilities( + streaming=True, + extensions=[{"uri": "https://a2a-adk/a2a-extension/new-integration"}], + ), + version="0.0.1", + default_input_modes=["text/plain"], + default_output_modes=["text/plain"], + skills=[], +) + + +def create_server_app( + run_async_fn=None, config: A2aAgentExecutorConfig | None = None +): + """Creates an A2A FastAPI application with a mocked runner. + + Args: + run_async_fn: A generator function that takes **kwargs and yields Event + objects. + include_artifacts: Whether to include artifacts in A2A events. + + Returns: + A FastAPI application instance. + """ + runner = FakeRunner(run_async_fn) + executor = A2aAgentExecutor(runner=runner, config=config) + task_store = InMemoryTaskStore() + handler = DefaultRequestHandler( + agent_executor=executor, task_store=task_store + ) + + app = A2AFastAPIApplication(agent_card=agent_card, http_handler=handler) + return app.build() diff --git a/tests/unittests/a2a/integration/test_client_server.py b/tests/unittests/a2a/integration/test_client_server.py new file mode 100644 index 0000000000..bd1d72f617 --- /dev/null +++ b/tests/unittests/a2a/integration/test_client_server.py @@ -0,0 +1,638 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Integration tests for A2A client-server interaction.""" + +from a2a.types import Message as A2AMessage +from a2a.types import Part as A2APart +from a2a.types import Task +from a2a.types import TaskState +from a2a.types import TextPart +from google.adk.a2a.executor.config import A2aAgentExecutorConfig +from google.adk.a2a.executor.interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor +from google.adk.agents.remote_a2a_agent import A2A_METADATA_PREFIX +from google.adk.events.event import Event +from google.adk.events.event_actions import EventActions +from google.adk.platform import uuid as platform_uuid +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types +import pytest + +from .client import create_a2a_client +from .client import create_client +from .server import create_server_app + + +def create_streaming_mock_run_async(received_requests: list): + """Creates a mock_run_async that streams multiple chunks.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello")]), + partial=True, + ) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text=" world")]), + partial=True, + ) + yield Event( + author="FakeAgent", + partial=True, + actions=EventActions(artifact_delta={"file1": 1}), + ) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + + return mock_run_async + + +def create_non_streaming_mock_run_async(received_requests: list): + """Creates a mock_run_async that returns a single non-streaming event.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_streaming_adk_to_streaming_a2a(): + """Test streaming of normal text chunks.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + actions = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + if event.actions and event.actions.artifact_delta: + actions.append(event.actions) + + assert len(received_requests) == 1 + assert received_requests[0]["session_id"] is not None + + assert texts == ["Hello", " world", "Hello world"] + assert len(actions) == 1 + assert actions[0].artifact_delta == {"file1": 1} + + +@pytest.mark.asyncio +async def test_streaming_adk_to_non_streaming_a2a(): + """Test ADK streaming into A2A Non-Streaming.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=False) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +@pytest.mark.asyncio +async def test_non_streaming_adk_to_streaming_a2a(): + """Test ADK Non-Streaming into A2A Streaming.""" + received_requests = [] + mock_run_async = create_non_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +@pytest.mark.asyncio +async def test_non_streaming_adk_to_non_streaming_a2a(): + """Test ADK Non-Streaming into A2A Non-Streaming.""" + received_requests = [] + mock_run_async = create_non_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=False) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +def create_streaming_mock_run_async_with_multiple_agents( + received_requests: list, +): + """Creates a mock_run_async that streams multiple chunks.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text="Hello")]), + partial=True, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text=" Hi")]), + partial=True, + ) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text=" world")]), + partial=True, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text=" human")]), + partial=True, + ) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text="Hi human")]), + partial=False, + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_multiple_agents_streaming_adk_to_streaming_a2a(): + """Test streaming multiple agents chunks into A2A Streaming.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async_with_multiple_agents( + received_requests + ) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == [ + "Hello", + " Hi", + " world", + " human", + "Hello world", + "Hi human", + ] + + +@pytest.mark.asyncio +async def test_function_calls(): + """Test function call execution from agent.""" + received_requests = [] + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="get_weather", + args={"location": "San Francisco"}, + id="call_1", + ) + ), + types.Part( + function_response=types.FunctionResponse( + name="get_weather", + response={"temperature": "22C"}, + id="call_1", + ) + ), + ], + role="model", + ), + ) + + app = create_server_app(mock_run_async) + agent = create_client(app) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + func_calls = [] + func_responses = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + func_calls.extend(event.get_function_calls()) + if event.content and event.content.parts: + for p in event.content.parts: + if p.function_response: + func_responses.append(p.function_response) + + assert len(func_calls) == 1 + assert func_calls[0].name == "get_weather" + assert func_calls[0].args == {"location": "San Francisco"} + + assert len(func_responses) == 1 + assert func_responses[0].name == "get_weather" + assert func_responses[0].response == {"temperature": "22C"} + + +def create_long_running_mock_run_async(received_requests: list): + """Creates a mock_run_async for long running function tests.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + if len(received_requests) == 1: + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="long_task", args={}, id="call_long" + ) + ) + ], + role="model", + ), + long_running_tool_ids={"call_long"}, + ) + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_response=types.FunctionResponse( + name="long_task", + response={"status": "pending"}, + id="call_long", + ) + ) + ], + role="model", + ), + ) + else: + yield Event( + author="FakeAgent", + content=types.Content( + parts=[types.Part(text="Task completed well")], role="model" + ), + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_long_running_function_calls_success(): + """Test long running function calls flow success with user response.""" + received_requests = [] + mock_run_async = create_long_running_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message_1 = types.Content(parts=[types.Part(text="Hi")], role="user") + + func_calls_1 = [] + func_responses_1 = [] + task_id_1 = "" + has_long_running_id = False + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_1 + ): + if event.custom_metadata: + task_id_1 = event.custom_metadata.get( + A2A_METADATA_PREFIX + "task_id", task_id_1 + ) + if ( + event.long_running_tool_ids + and "call_long" in event.long_running_tool_ids + ): + has_long_running_id = True + + func_calls_1.extend(event.get_function_calls()) + if event.content and event.content.parts: + for p in event.content.parts: + if p.function_response: + func_responses_1.append(p.function_response) + + assert has_long_running_id + assert len(func_calls_1) == 1 + assert func_calls_1[0].name == "long_task" + + assert len(func_responses_1) == 1 + assert func_responses_1[0].name == "long_task" + assert func_responses_1[0].response == {"status": "pending"} + + new_message_2 = types.Content( + parts=[ + types.Part( + function_response=types.FunctionResponse( + name="long_task", response={"result": "done"}, id="call_long" + ) + ) + ], + role="user", + ) + + texts = [] + task_id_2 = "" + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_2 + ): + if event.custom_metadata: + task_id_2 = event.custom_metadata.get( + A2A_METADATA_PREFIX + "task_id", task_id_2 + ) + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert task_id_1 == task_id_2 + assert "Task completed well" in texts + + +@pytest.mark.asyncio +async def test_long_running_function_calls_error(): + """Test long running function calls returns error on missing response.""" + received_requests = [] + mock_run_async = create_long_running_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + a2a_client = create_a2a_client(app, streaming=False) + + request_1 = A2AMessage( + message_id=platform_uuid.new_uuid(), + parts=[A2APart(root=TextPart(text="Hi"))], + role="user", + ) + response_1_events = [] + async for event in a2a_client.send_message(request=request_1): + response_1_events.append(event) + + assert len(response_1_events) == 1 + # Extract task_id from Turn 1 responses + assert response_1_events[0][1] is None + task = response_1_events[0][0] + assert isinstance(task, Task) + assert task.status.state == TaskState.input_required + extracted_task_id = task.id + assert extracted_task_id is not None + + request_2 = A2AMessage( + message_id=platform_uuid.new_uuid(), + parts=[A2APart(root=TextPart(text="Any update?"))], + role="user", + task_id=extracted_task_id, + context_id=task.context_id if hasattr(task, "context_id") else None, + ) + response_2_events = [] + async for event in a2a_client.send_message(request=request_2): + response_2_events.append(event) + + # Verify that we get an error response for the second request due to missing function response + assert len(response_2_events) == 1 + assert response_2_events[0][1] is None + error_response = response_2_events[0][0] + assert isinstance(error_response, Task) + assert error_response.status.message.parts[0].root.text == ( + "It was not provided a function response for the function call." + ) + + +@pytest.mark.asyncio +async def test_user_follow_up(): + """Test multi-turn interaction or follow up with state.""" + received_requests = [] + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + # Yield response with custom metadata to test passing back + yield Event( + author="FakeAgent", + content=types.Content( + parts=[types.Part(text="Follow up response")], role="model" + ), + custom_metadata={"server_state": "active"}, + ) + + app = create_server_app(mock_run_async) + agent = create_client(app) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + # First Turn + new_message_1 = types.Content(parts=[types.Part(text="Turn 1")], role="user") + async for _ in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_1 + ): + pass + + # Second Turn + new_message_2 = types.Content(parts=[types.Part(text="Turn 2")], role="user") + last_event = None + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_2 + ): + last_event = event + + assert len(received_requests) == 2 + # The second request should carry the same session ID as the first + assert ( + received_requests[1]["session_id"] == received_requests[0]["session_id"] + ) + + assert last_event is not None + + +@pytest.mark.asyncio +async def test_include_artifacts_in_a2a_event(): + """Test that artifacts are included in A2A events when the interceptor is enabled.""" + + async def mock_run_async(**kwargs): + yield Event( + actions=EventActions(artifact_delta={"artifact1": 1, "artifact2": 1}), + author="agent", + content=types.Content( + parts=[types.Part(text="Here are the artifacts")] + ), + ) + + config = A2aAgentExecutorConfig( + execute_interceptors=[include_artifacts_in_a2a_event_interceptor] + ) + built_app = create_server_app(mock_run_async, config=config) + + a2a_client = create_a2a_client(built_app, streaming=False) + + request = A2AMessage( + message_id="test_message_id", + parts=[A2APart(root=TextPart(text="Hi"))], + role="user", + ) + + events = [] + async for event in a2a_client.send_message(request=request): + events.append(event) + + assert len(events) == 1 + + task = events[0][0] + assert isinstance(task, Task) + assert task.artifacts is not None + assert len(task.artifacts) == 3 + + assert task.artifacts[0].parts[0].root.text == "Here are the artifacts" + + assert task.artifacts[1].artifact_id == "artifact1_1" + assert task.artifacts[1].name == "artifact1" + assert task.artifacts[1].parts[0].root.text == "artifact content" + + assert task.artifacts[2].artifact_id == "artifact2_1" + assert task.artifacts[2].name == "artifact2" + assert task.artifacts[2].parts[0].root.text == "artifact content" diff --git a/tests/unittests/a2a/utils/test_agent_to_a2a.py b/tests/unittests/a2a/utils/test_agent_to_a2a.py index 21c96d7ec2..a9e2458ebd 100644 --- a/tests/unittests/a2a/utils/test_agent_to_a2a.py +++ b/tests/unittests/a2a/utils/test_agent_to_a2a.py @@ -86,9 +86,7 @@ def test_to_a2a_default_parameters( mock_card_builder_class.assert_called_once_with( agent=self.mock_agent, rpc_url="http://localhost:8000/" ) - mock_app.add_event_handler.assert_called_once_with( - "startup", mock_app.add_event_handler.call_args[0][1] - ) + mock_starlette_class.assert_called_once_with(lifespan=ANY) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -122,7 +120,7 @@ def test_to_a2a_with_custom_runner( # Assert assert result == mock_app - mock_starlette_class.assert_called_once() + mock_starlette_class.assert_called_once_with(lifespan=ANY) mock_task_store_class.assert_called_once() mock_agent_executor_class.assert_called_once_with(runner=custom_runner) mock_request_handler_class.assert_called_once_with( @@ -133,9 +131,6 @@ def test_to_a2a_with_custom_runner( mock_card_builder_class.assert_called_once_with( agent=self.mock_agent, rpc_url="http://localhost:8000/" ) - mock_app.add_event_handler.assert_called_once_with( - "startup", mock_app.add_event_handler.call_args[0][1] - ) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -402,12 +397,10 @@ async def test_create_runner_function_with_agent_without_name( @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_setup_a2a_function_builds_agent_card_and_configures_routes( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -415,8 +408,6 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( ): """Test that the setup_a2a function builds agent card and configures A2A routes.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -430,16 +421,12 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( mock_a2a_app = Mock(spec=A2AStarletteApplication) mock_a2a_app_class.return_value = mock_a2a_app - # Act - result = to_a2a(self.mock_agent) + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent) - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] - - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify agent card was built mock_card_builder.build.assert_called_once() @@ -451,18 +438,16 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( ) # Verify routes were added to the main app - mock_a2a_app.add_routes_to_app.assert_called_once_with(mock_app) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_setup_a2a_function_handles_agent_card_build_failure( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -470,8 +455,6 @@ async def test_setup_a2a_function_handles_agent_card_build_failure( ): """Test that setup_a2a function properly handles agent card build failure.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -484,17 +467,13 @@ async def test_setup_a2a_function_handles_agent_card_build_failure( mock_a2a_app = Mock(spec=A2AStarletteApplication) mock_a2a_app_class.return_value = mock_a2a_app - # Act - result = to_a2a(self.mock_agent) - - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent) - # Call the setup_a2a function and expect it to raise the exception + # Run the lifespan and expect it to raise during setup_a2a with pytest.raises(Exception, match="Build failed"): - await startup_handler() + async with app.router.lifespan_context(app): + pass @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -535,20 +514,19 @@ def test_to_a2a_with_none_agent(self): with pytest.raises(ValueError, match="Agent cannot be None or empty."): to_a2a(None) - def test_to_a2a_with_invalid_agent_type(self): + async def test_to_a2a_with_invalid_agent_type(self): """Test that to_a2a raises error when agent is not a BaseAgent.""" # Arrange invalid_agent = "not an agent" # Act & Assert - # The error occurs during startup when building the agent card + # The error occurs during lifespan startup when building the agent card app = to_a2a(invalid_agent) with pytest.raises( AttributeError, match="'str' object has no attribute 'name'" ): - import asyncio - - asyncio.run(app.router.on_startup[0]()) + async with app.router.lifespan_context(app): + pass @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -764,12 +742,10 @@ def test_to_a2a_with_ip_address_host( @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_to_a2a_with_custom_agent_card_object( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -777,8 +753,6 @@ async def test_to_a2a_with_custom_agent_card_object( ): """Test to_a2a with custom AgentCard object.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -794,16 +768,12 @@ async def test_to_a2a_with_custom_agent_card_object( custom_agent_card = Mock(spec=AgentCard) custom_agent_card.name = "custom_agent" - # Act - result = to_a2a(self.mock_agent, agent_card=custom_agent_card) - - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent, agent_card=custom_agent_card) - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify the card builder build method was NOT called since we provided a card mock_card_builder.build.assert_not_called() @@ -815,13 +785,12 @@ async def test_to_a2a_with_custom_agent_card_object( ) # Verify routes were added to the main app - mock_a2a_app.add_routes_to_app.assert_called_once_with(mock_app) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") @patch("json.load") @patch("pathlib.Path.open") @@ -832,7 +801,6 @@ async def test_to_a2a_with_agent_card_file_path( mock_open, mock_json_load, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -840,8 +808,6 @@ async def test_to_a2a_with_agent_card_file_path( ): """Test to_a2a with agent card file path.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -877,16 +843,12 @@ async def test_to_a2a_with_agent_card_file_path( } mock_json_load.return_value = agent_card_data - # Act - result = to_a2a(self.mock_agent, agent_card="/path/to/agent_card.json") + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent, agent_card="/path/to/agent_card.json") - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] - - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify file was opened and JSON was loaded mock_path_class.assert_called_once_with("/path/to/agent_card.json") @@ -939,3 +901,153 @@ def test_to_a2a_with_invalid_agent_card_file_path( # Act & Assert with pytest.raises(ValueError, match="Failed to load agent card from"): to_a2a(self.mock_agent, agent_card="/invalid/path.json") + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_with_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test to_a2a with a custom lifespan context manager.""" + from contextlib import asynccontextmanager + + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + startup_called = False + shutdown_called = False + + @asynccontextmanager + async def custom_lifespan(app): + nonlocal startup_called, shutdown_called + startup_called = True + app.state.test_value = "hello" + yield + shutdown_called = True + + # Act + app = to_a2a(self.mock_agent, lifespan=custom_lifespan) + + # Run the lifespan + async with app.router.lifespan_context(app): + # Verify setup_a2a ran (routes added) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) + # Verify user lifespan startup ran + assert startup_called + assert app.state.test_value == "hello" + + # Verify user lifespan shutdown ran + assert shutdown_called + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_without_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test to_a2a without lifespan still runs setup_a2a.""" + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + # Act - no lifespan parameter + app = to_a2a(self.mock_agent) + + # Run the lifespan + async with app.router.lifespan_context(app): + # Verify setup_a2a ran (routes added) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_lifespan_setup_runs_before_user_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test that A2A setup runs before user lifespan startup.""" + from contextlib import asynccontextmanager + + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + call_order = [] + + original_add_routes = mock_a2a_app.add_routes_to_app + + def track_add_routes(*args, **kwargs): + call_order.append("setup_a2a") + return original_add_routes(*args, **kwargs) + + mock_a2a_app.add_routes_to_app = track_add_routes + + @asynccontextmanager + async def custom_lifespan(app): + call_order.append("user_startup") + yield + call_order.append("user_shutdown") + + # Act + app = to_a2a(self.mock_agent, lifespan=custom_lifespan) + + async with app.router.lifespan_context(app): + pass + + # Assert - A2A setup runs before user lifespan + assert call_order == [ + "setup_a2a", + "user_startup", + "user_shutdown", + ] diff --git a/tests/unittests/agents/test_llm_agent_fields.py b/tests/unittests/agents/test_llm_agent_fields.py index df543db919..b9e410f17b 100644 --- a/tests/unittests/agents/test_llm_agent_fields.py +++ b/tests/unittests/agents/test_llm_agent_fields.py @@ -472,6 +472,40 @@ def _tool_2(): assert tools[0].name == '_tool_1' assert tools[1].name == '_tool_2' + async def test_canonical_tools_graceful_degradation_on_toolset_error(self): + """Test that canonical_tools returns tools from working toolsets when one fails.""" + from google.adk.tools.base_tool import BaseTool + from google.adk.tools.base_toolset import BaseToolset + + class FailingToolset(BaseToolset): + + async def get_tools(self, readonly_context=None): + raise ConnectionError('MCP server unavailable') + + class WorkingToolset(BaseToolset): + + async def get_tools(self, readonly_context=None): + tool = mock.MagicMock(spec=BaseTool) + tool.name = 'working_tool' + tool._get_declaration = mock.MagicMock(return_value=None) + return [tool] + + def _regular_tool(): + pass + + agent = LlmAgent( + name='test_agent', + model='gemini-pro', + tools=[_regular_tool, FailingToolset(), WorkingToolset()], + ) + ctx = await _create_readonly_context(agent) + tools = await agent.canonical_tools(ctx) + + # Should have the regular tool + working toolset tool, but not crash + assert len(tools) == 2 + assert tools[0].name == '_regular_tool' + assert tools[1].name == 'working_tool' + # Tests for multi-provider model support via string model names @pytest.mark.parametrize( diff --git a/tests/unittests/agents/test_remote_a2a_agent.py b/tests/unittests/agents/test_remote_a2a_agent.py index 0f1ce896a3..4707f33799 100644 --- a/tests/unittests/agents/test_remote_a2a_agent.py +++ b/tests/unittests/agents/test_remote_a2a_agent.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import copy import json from pathlib import Path import tempfile @@ -34,8 +35,10 @@ from a2a.types import TaskStatus as A2ATaskStatus from a2a.types import TaskStatusUpdateEvent from a2a.types import TextPart +from a2a.types import TransportProtocol as A2ATransport from google.adk.a2a.agent import ParametersConfig from google.adk.a2a.agent import RequestInterceptor +from google.adk.a2a.agent.config import A2aRemoteAgentConfig from google.adk.a2a.agent.utils import execute_after_request_interceptors from google.adk.a2a.agent.utils import execute_before_request_interceptors from google.adk.agents.invocation_context import InvocationContext @@ -196,6 +199,10 @@ async def test_ensure_httpx_client_creates_new_client(self): assert client is not None assert agent._httpx_client == client assert agent._httpx_client_needs_cleanup is True + assert agent._a2a_client_factory._config.supported_transports == [ + A2ATransport.jsonrpc, + A2ATransport.http_json, + ] @pytest.mark.asyncio async def test_ensure_httpx_client_reuses_existing_client(self): @@ -2866,3 +2873,28 @@ async def test_execute_after_request_interceptors_no_after_request( ) assert result is event + + +class TestRemoteA2aAgentDeepcopy: + """Test deepcopy functionality for RemoteA2aAgent and its config.""" + + def test_deepcopy_config(self): + """Test that A2aRemoteAgentConfig can be deepcopied with interceptors.""" + config = A2aRemoteAgentConfig() + mock_interceptor = Mock() + config.request_interceptors = [mock_interceptor] + + copied_config = copy.deepcopy(config) + assert copied_config is not None + + # Verify that functions are shared (by reference) + assert copied_config.a2a_message_converter is config.a2a_message_converter + + # Verify that request_interceptors list was copied + assert copied_config.request_interceptors is not None + assert len(copied_config.request_interceptors) == 1 + # Standard objects inside lists should be deepcopied (new instances) + assert ( + copied_config.request_interceptors[0] + is not config.request_interceptors[0] + ) diff --git a/tests/unittests/agents/test_run_config.py b/tests/unittests/agents/test_run_config.py index c34e9b66b6..cbb82af019 100644 --- a/tests/unittests/agents/test_run_config.py +++ b/tests/unittests/agents/test_run_config.py @@ -17,6 +17,7 @@ from unittest.mock import patch from google.adk.agents.run_config import RunConfig +from google.genai import types import pytest @@ -64,3 +65,35 @@ def test_audio_transcription_configs_are_not_shared_between_instances(): assert ( config1.input_audio_transcription is not config2.input_audio_transcription ) + + +def test_avatar_config_initialization(): + custom_avatar = types.CustomizedAvatar( + image_mime_type="image/jpeg", image_data=b"image_bytes" + ) + avatar_config = types.AvatarConfig( + audio_bitrate_bps=128000, + video_bitrate_bps=1000000, + customized_avatar=custom_avatar, + ) + run_config = RunConfig(avatar_config=avatar_config) + + assert run_config.avatar_config == avatar_config + assert run_config.avatar_config.customized_avatar == custom_avatar + assert ( + run_config.avatar_config.customized_avatar.image_mime_type == "image/jpeg" + ) + assert run_config.avatar_config.customized_avatar.image_data == b"image_bytes" + + +def test_avatar_config_with_name(): + avatar_config = types.AvatarConfig( + audio_bitrate_bps=128000, + video_bitrate_bps=1000000, + avatar_name="test_avatar", + ) + run_config = RunConfig(avatar_config=avatar_config) + + assert run_config.avatar_config == avatar_config + assert run_config.avatar_config.avatar_name == "test_avatar" + assert run_config.avatar_config.customized_avatar is None diff --git a/tests/unittests/apps/test_compaction.py b/tests/unittests/apps/test_compaction.py index 6960c8d48b..935b09793e 100644 --- a/tests/unittests/apps/test_compaction.py +++ b/tests/unittests/apps/test_compaction.py @@ -922,3 +922,209 @@ def test_get_contents_compaction_at_beginning(self): expected_texts = ['Summary 1-2', 'Event 3', 'Event 4'] actual_texts = [c.parts[0].text for c in result_contents] self.assertEqual(actual_texts, expected_texts) + + async def test_sliding_window_excludes_pending_function_call_events(self): + """Sliding-window compaction stops before pending function calls.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + # inv1: normal text, inv2: pending function call (no response) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 3.0, 'Summary without pending' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + self.assertEqual(compacted_inv_ids, ['inv1']) + + async def test_sliding_window_pending_function_call_remains_in_contents( + self, + ): + """Sliding-window compaction keeps pending tool calls visible in history.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + self.mock_compactor.maybe_summarize_events.side_effect = ( + lambda *, events: self._create_compacted_event( + events[0].timestamp, + events[-1].timestamp, + 'Summary safe prefix', + ) + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + appended_event = self.mock_session_service.append_event.call_args[1][ + 'event' + ] + self.assertEqual(appended_event.actions.compaction.start_timestamp, 1.0) + self.assertEqual(appended_event.actions.compaction.end_timestamp, 1.0) + + result_contents = contents._get_contents(None, events + [appended_event]) + self.assertEqual(result_contents[0].parts[0].text, 'Summary safe prefix') + self.assertEqual( + result_contents[1].parts[0].function_call.name, + 'tool', + ) + self.assertEqual(result_contents[2].parts[0].text, 'e3') + + async def test_token_threshold_excludes_pending_function_call_events(self): + """Token-threshold compaction stays contiguous before pending calls.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=999, + overlap_size=0, + token_threshold=50, + event_retention_size=0, + ), + ) + # inv1: text, inv2: pending function call, inv3: text with token count + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3', prompt_token_count=100), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 1.0, 'Summary inv1' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + self.assertEqual(compacted_inv_ids, ['inv1']) + + async def test_token_threshold_pending_function_call_remains_in_contents( + self, + ): + """Token-threshold compaction keeps pending tool calls visible.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=999, + overlap_size=0, + token_threshold=50, + event_retention_size=0, + ), + ) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3', prompt_token_count=100), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + self.mock_compactor.maybe_summarize_events.side_effect = ( + lambda *, events: self._create_compacted_event( + events[0].timestamp, + events[-1].timestamp, + 'Summary safe prefix', + ) + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + appended_event = self.mock_session_service.append_event.call_args[1][ + 'event' + ] + self.assertEqual(appended_event.actions.compaction.start_timestamp, 1.0) + self.assertEqual(appended_event.actions.compaction.end_timestamp, 1.0) + + result_contents = contents._get_contents(None, events + [appended_event]) + self.assertEqual(result_contents[0].parts[0].text, 'Summary safe prefix') + self.assertEqual( + result_contents[1].parts[0].function_call.name, + 'tool', + ) + self.assertEqual(result_contents[2].parts[0].text, 'e3') + + async def test_completed_function_call_pair_is_still_compacted(self): + """Completed function call/response pairs must still be compacted.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + # inv1: text, inv2: completed call+response pair, inv3: text + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'completed-call-1'), + self._create_function_response_event(3.0, 'inv2', 'completed-call-1'), + self._create_event(4.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 4.0, 'Summary with completed pair' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + # Both the call and response events for inv2 should be compacted. + self.assertIn('inv1', compacted_inv_ids) + self.assertEqual(compacted_inv_ids.count('inv2'), 2) + self.assertIn('inv3', compacted_inv_ids) diff --git a/tests/unittests/artifacts/test_artifact_service.py b/tests/unittests/artifacts/test_artifact_service.py index 25294d4909..8b82397097 100644 --- a/tests/unittests/artifacts/test_artifact_service.py +++ b/tests/unittests/artifacts/test_artifact_service.py @@ -744,6 +744,69 @@ async def test_file_save_artifact_rejects_out_of_scope_paths( ) +@pytest.mark.asyncio +@pytest.mark.parametrize( + "user_id", + [ + "../escape", + "../../etc", + "foo/../../bar", + "valid/../..", + "..", + ".", + "has/slash", + "back\\slash", + "null\x00byte", + "", + ], +) +async def test_file_save_artifact_rejects_traversal_in_user_id( + tmp_path, user_id +): + """FileArtifactService rejects user_id values that escape root_dir.""" + artifact_service = FileArtifactService(root_dir=tmp_path / "artifacts") + part = types.Part(text="content") + with pytest.raises(InputValidationError): + await artifact_service.save_artifact( + app_name="myapp", + user_id=user_id, + session_id="sess123", + filename="safe.txt", + artifact=part, + ) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "session_id", + [ + "../escape", + "../../tmp", + "foo/../../bar", + "..", + ".", + "has/slash", + "back\\slash", + "null\x00byte", + "", + ], +) +async def test_file_save_artifact_rejects_traversal_in_session_id( + tmp_path, session_id +): + """FileArtifactService rejects session_id values that escape root_dir.""" + artifact_service = FileArtifactService(root_dir=tmp_path / "artifacts") + part = types.Part(text="content") + with pytest.raises(InputValidationError): + await artifact_service.save_artifact( + app_name="myapp", + user_id="user123", + session_id=session_id, + filename="safe.txt", + artifact=part, + ) + + @pytest.mark.asyncio async def test_file_save_artifact_rejects_absolute_path_within_scope(tmp_path): """Absolute filenames are rejected even when they point inside the scope.""" diff --git a/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py b/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py index 574a0922b8..3a0a5647cb 100644 --- a/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py +++ b/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py @@ -15,7 +15,9 @@ import time from unittest.mock import Mock from unittest.mock import patch +from urllib.parse import parse_qs +from authlib.integrations.requests_client import OAuth2Session from authlib.oauth2.rfc6749 import OAuth2Token from fastapi.openapi.models import OAuth2 from fastapi.openapi.models import OAuthFlowClientCredentials @@ -25,11 +27,39 @@ from google.adk.auth.auth_credential import OAuth2Auth from google.adk.auth.auth_schemes import OAuthGrantType from google.adk.auth.auth_schemes import OpenIdConnectWithConfig +from google.adk.auth.exchanger import oauth2_credential_exchanger from google.adk.auth.exchanger.base_credential_exchanger import CredentialExchangeError from google.adk.auth.exchanger.oauth2_credential_exchanger import OAuth2CredentialExchanger import pytest +class _TokenBodyCapturingOAuth2Session(OAuth2Session): + """A mock OAuth2Session that captures the final token request body.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.request_body = "" + + def _fetch_token( + self, + url=None, + body="", + auth=None, + method="POST", + headers=None, + **kwargs, + ): + if auth is not None: + _, _, body = auth.prepare(method, url, headers or {}, body) + self.request_body = body + return OAuth2Token({ + "access_token": "new_access_token", + "refresh_token": "new_refresh_token", + "expires_at": int(time.time()) + 3600, + "expires_in": 3600, + }) + + class TestOAuth2CredentialExchanger: """Test suite for OAuth2CredentialExchanger.""" @@ -343,9 +373,53 @@ async def test_exchange_normalize_uri(self, mock_oauth2_session): authorization_response="https://example.com/callback?code=auth_code", # Normalized URI code="auth_code", grant_type=OAuthGrantType.AUTHORIZATION_CODE, - client_id="test_client_id", ) + async def test_exchange_client_secret_post_has_single_client_id(self): + """Test exchange lets Authlib add client_id only once for body auth.""" + scheme = OpenIdConnectWithConfig( + type_="openIdConnect", + openId_connect_url=( + "https://example.com/.well-known/openid_configuration" + ), + authorization_endpoint="https://example.com/auth", + token_endpoint="https://example.com/token", + scopes=["openid"], + ) + credential = AuthCredential( + auth_type=AuthCredentialTypes.OPEN_ID_CONNECT, + oauth2=OAuth2Auth( + client_id="test_client_id", + client_secret="test_client_secret", + token_endpoint_auth_method="client_secret_post", + auth_response_uri="https://example.com/callback?code=auth_code", + auth_code="auth_code", + ), + ) + + client = _TokenBodyCapturingOAuth2Session( + credential.oauth2.client_id, + credential.oauth2.client_secret, + token_endpoint_auth_method="client_secret_post", + ) + + with patch.object( + oauth2_credential_exchanger, + "create_oauth2_session", + autospec=True, + return_value=(client, "https://example.com/token"), + ): + exchanger = OAuth2CredentialExchanger() + exchange_result = await exchanger.exchange(credential, scheme) + + request_params = parse_qs(client.request_body) + + assert exchange_result.was_exchanged + assert request_params["grant_type"] == [OAuthGrantType.AUTHORIZATION_CODE] + assert request_params["code"] == ["auth_code"] + assert request_params["client_id"] == ["test_client_id"] + assert request_params["client_secret"] == ["test_client_secret"] + async def test_determine_grant_type_client_credentials(self): """Test grant type determination for client credentials.""" flows = OAuthFlows( diff --git a/tests/unittests/auth/test_auth_config.py b/tests/unittests/auth/test_auth_config.py index ba87954bdc..ab5f6b584c 100644 --- a/tests/unittests/auth/test_auth_config.py +++ b/tests/unittests/auth/test_auth_config.py @@ -23,6 +23,7 @@ from google.adk.auth.auth_credential import AuthCredential from google.adk.auth.auth_credential import AuthCredentialTypes from google.adk.auth.auth_credential import OAuth2Auth +from google.adk.auth.auth_schemes import CustomAuthScheme from google.adk.auth.auth_tool import AuthConfig import pytest @@ -162,3 +163,16 @@ def _run_with_seed(seed: str) -> str: ).strip() assert _run_with_seed("0") == _run_with_seed("1") + + +def test_credential_key_with_custom_auth_scheme(): + """Test generating a credential key when the auth scheme is a CustomAuthScheme (type_ is a string).""" + custom_scheme = CustomAuthScheme.model_validate({"type": "mock_custom_type"}) + + custom_config = AuthConfig( + auth_scheme=custom_scheme, + ) + + key = custom_config.credential_key + assert key.startswith("adk_mock_custom_type_") + assert len(key) > len("adk_mock_custom_type_") diff --git a/tests/unittests/auth/test_auth_provider_registry.py b/tests/unittests/auth/test_auth_provider_registry.py new file mode 100644 index 0000000000..7ccdc5ce81 --- /dev/null +++ b/tests/unittests/auth/test_auth_provider_registry.py @@ -0,0 +1,66 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the AuthProviderRegistry.""" + +from google.adk.auth.auth_provider_registry import AuthProviderRegistry +from google.adk.auth.auth_schemes import CustomAuthScheme +from google.adk.auth.base_auth_provider import BaseAuthProvider +from pydantic import Field + + +class SchemeA(CustomAuthScheme): + type_: str = Field(default="scheme_a") + + +class SchemeB(CustomAuthScheme): + type_: str = Field(default="scheme_b") + + +class TestAuthProviderRegistry: + """Test cases for AuthProviderRegistry.""" + + def test_register_and_get_provider(self, mocker): + """Test registering and retrieving providers for different auth scheme types.""" + registry = AuthProviderRegistry() + provider_a = mocker.create_autospec(BaseAuthProvider, instance=True) + provider_b = mocker.create_autospec(BaseAuthProvider, instance=True) + + registry.register(SchemeA, provider_a) + registry.register(SchemeB, provider_b) + + assert registry.get_provider(SchemeA()) is provider_a + assert registry.get_provider(SchemeB()) is provider_b + + # Test getting by scheme type + assert registry.get_provider(SchemeA) is provider_a + assert registry.get_provider(SchemeB) is provider_b + + def test_get_unregistered_provider_returns_none(self): + """Test that get_provider returns None for unregistered scheme types.""" + registry = AuthProviderRegistry() + assert registry.get_provider(SchemeA()) is None + assert registry.get_provider(SchemeA) is None + + def test_register_duplicate_type_overwrites_existing(self, mocker): + """Test that registering a provider for an existing type overwrites the previous one.""" + registry = AuthProviderRegistry() + provider_1 = mocker.create_autospec(BaseAuthProvider, instance=True) + provider_2 = mocker.create_autospec(BaseAuthProvider, instance=True) + + registry.register(SchemeA, provider_1) + registry.register(SchemeA, provider_2) + + assert registry.get_provider(SchemeA()) is provider_2 + assert registry.get_provider(SchemeA) is provider_2 diff --git a/tests/unittests/auth/test_credential_manager.py b/tests/unittests/auth/test_credential_manager.py index 7000c9b8f8..559c76138b 100644 --- a/tests/unittests/auth/test_credential_manager.py +++ b/tests/unittests/auth/test_credential_manager.py @@ -21,6 +21,8 @@ from fastapi.openapi.models import OAuthFlowAuthorizationCode from fastapi.openapi.models import OAuthFlowImplicit from fastapi.openapi.models import OAuthFlows +from fastapi.openapi.models import SecurityBase +from google.adk.agents.callback_context import CallbackContext from google.adk.agents.invocation_context import InvocationContext from google.adk.agents.llm_agent import Agent from google.adk.auth.auth_credential import AuthCredential @@ -30,21 +32,72 @@ from google.adk.auth.auth_credential import ServiceAccountCredential from google.adk.auth.auth_schemes import AuthScheme from google.adk.auth.auth_schemes import AuthSchemeType +from google.adk.auth.auth_schemes import CustomAuthScheme from google.adk.auth.auth_schemes import ExtendedOAuth2 from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.base_auth_provider import BaseAuthProvider +from google.adk.auth.credential_manager import _rehydrate_custom_scheme from google.adk.auth.credential_manager import CredentialManager from google.adk.auth.credential_manager import ServiceAccountCredentialExchanger from google.adk.auth.oauth2_discovery import AuthorizationServerMetadata from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.tools.tool_context import ToolContext +from pydantic import Field import pytest from .. import testing_utils +class DummyAuthScheme(SecurityBase): + """A custom auth scheme for testing pluggable auth providers.""" + + type_: str = "dummy_auth_scheme" + + class TestCredentialManager: """Test suite for CredentialManager.""" + @pytest.fixture(autouse=True) + def _clear_registry(self): + """Clear the global auth provider registry before each test.""" + CredentialManager._auth_provider_registry._providers.clear() + + def test_register_auth_provider(self, mocker): + """Test register_auth_provider class method.""" + provider = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + + CredentialManager.register_auth_provider(provider) + + assert ( + CredentialManager._auth_provider_registry._providers[DummyAuthScheme] + == provider + ) + + @patch("google.adk.auth.credential_manager.logger") + def test_register_auth_provider_collision(self, mock_logger, mocker): + """Test register_auth_provider logs warning on scheme collision, but ignores exact duplicates.""" + provider1 = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + CredentialManager.register_auth_provider(provider1) + + # Identical provider does not warn + CredentialManager.register_auth_provider(provider1) + mock_logger.warning.assert_not_called() + + provider2 = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + + CredentialManager.register_auth_provider(provider2) + mock_logger.warning.assert_called_once() + assert ( + CredentialManager._auth_provider_registry._providers[DummyAuthScheme] + == provider1 + ) + def test_init(self): """Test CredentialManager initialization.""" auth_config = Mock(spec=AuthConfig) @@ -63,6 +116,144 @@ async def test_request_credential(self): tool_context.request_credential.assert_called_once_with(auth_config) + @pytest.mark.asyncio + async def test_get_auth_credential_rehydrates_custom_scheme(self, mocker): + """Test that get_auth_credential rehydrates generic CustomAuthScheme.""" + + class SpecificCustomScheme(CustomAuthScheme): + type_: str = "specific_custom_scheme" + + # Create a generic CustomAuthScheme instance that models SpecificCustomScheme data + mock_scheme_data = {"type": "specific_custom_scheme"} + raw_custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + # Verify it's exactly the base class currently + assert type(raw_custom_scheme) is CustomAuthScheme + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = raw_custom_scheme + + mock_context = mocker.Mock(spec=CallbackContext) + + manager = CredentialManager(auth_config) + + # Supply a mock provider so we bypass the complex native token loading logic downstream + mock_provider = mocker.AsyncMock(spec=BaseAuthProvider) + mock_provider.get_auth_credential.return_value = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="dummy" + ) + mocker.patch.object( + manager._auth_provider_registry, + "get_provider", + return_value=mock_provider, + ) + + await manager.get_auth_credential(mock_context) + + # Verify the auth_scheme mutated to the specific subclass + assert isinstance(manager._auth_config.auth_scheme, SpecificCustomScheme) + assert manager._auth_config.auth_scheme.type_ == "specific_custom_scheme" + + @pytest.mark.asyncio + async def test_get_auth_credential_uses_registered_provider(self, mocker): + """Test get_auth_credential uses registered provider if available.""" + credential = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="test-key" + ) + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + provider.get_auth_credential.return_value = credential + manager = CredentialManager( + mocker.Mock(spec=AuthConfig, auth_scheme=DummyAuthScheme()) + ) + CredentialManager.register_auth_provider(provider) + mock_context = mocker.Mock(spec=CallbackContext) + + received_credential = await manager.get_auth_credential(mock_context) + + assert received_credential is credential + + @pytest.mark.asyncio + async def test_get_auth_credential_fallback_when_no_provider(self, mocker): + """Test fallback to standard flow when no provider is registered.""" + api_key_cred = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, + api_key="fallback-key-no-provider", + ) + + auth_scheme = mocker.Mock(spec=AuthScheme) + auth_scheme.type_ = AuthSchemeType.apiKey + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = auth_scheme + auth_config.raw_auth_credential = api_key_cred + auth_config.exchanged_auth_credential = None + + manager = CredentialManager(auth_config) + + # Setup registry to return None (no provider found) + mocker.patch.object( + CredentialManager._auth_provider_registry, + "get_provider", + return_value=None, + ) + + result = await manager.get_auth_credential(mocker.Mock()) + + assert result == api_key_cred + + @pytest.mark.asyncio + async def test_get_auth_credential_raises_error_when_provider_returns_none( + self, mocker + ): + """Test that a ValueError is raised when registered provider returns None.""" + api_key_cred = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="fallback-key" + ) + + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + provider.get_auth_credential.return_value = None + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = DummyAuthScheme() + auth_config.raw_auth_credential = api_key_cred + auth_config.exchanged_auth_credential = None + + manager = CredentialManager(auth_config) + CredentialManager.register_auth_provider(provider) + + mock_context = mocker.Mock(spec=CallbackContext) + + with pytest.raises( + ValueError, match="AuthProvider did not return a credential." + ): + await manager.get_auth_credential(mock_context) + + @pytest.mark.asyncio + async def test_get_auth_credential_triggers_user_consent_when_provider_returns_auth_uri( + self, mocker + ): + """Test get_auth_credential triggers user consent when provider returns oauth2 credential with auth_uri.""" + credential = mocker.Mock(spec=AuthCredential) + credential.oauth2 = mocker.Mock(auth_uri="http://auth", access_token=None) + + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + provider.get_auth_credential.return_value = credential + + manager = CredentialManager( + mocker.Mock(spec=AuthConfig, auth_scheme=DummyAuthScheme()) + ) + CredentialManager.register_auth_provider(provider) + mock_context = mocker.Mock(spec=CallbackContext) + + assert await manager.get_auth_credential(mock_context) is None + assert manager._auth_config.exchanged_auth_credential is credential + @pytest.mark.asyncio async def test_load_auth_credentials_success(self): """Test load_auth_credential with successful flow.""" @@ -70,6 +261,7 @@ async def test_load_auth_credentials_success(self): auth_config = Mock(spec=AuthConfig) auth_config.raw_auth_credential = None auth_config.exchanged_auth_credential = None + auth_config.auth_scheme = Mock(spec=AuthScheme) # Mock the credential that will be returned mock_credential = Mock(spec=AuthCredential) @@ -876,3 +1068,57 @@ def http_bearer_credential(): auth_type=AuthCredentialTypes.HTTP, http=Mock(), ) + + +class TestRehydrateCustomScheme: + """Unit tests for the module-level _rehydrate_custom_scheme function.""" + + def test_rehydrate_custom_scheme_success(self): + mock_scheme_data = {"type": "dummy_auth_scheme"} + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + rehydrated = _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthScheme] + ) + + assert isinstance(rehydrated, DummyAuthScheme) + assert rehydrated.type_ == "dummy_auth_scheme" + + def test_rehydrate_custom_scheme_with_model_extra(self): + """Test that model_extras are preserved during rehydration.""" + + class DummyAuthSchemeWithExtra(CustomAuthScheme): + type_: str = Field(default="dummy_with_extra") + some_extra_field: str | None = None + + mock_scheme_data = { + "type": "dummy_with_extra", + "some_extra_field": "extra_value", + } + # Because CustomAuthScheme doesn't know about `some_extra_field`, it goes' + # into model_extra + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + assert custom_scheme.model_extra == {"some_extra_field": "extra_value"} + + rehydrated = _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthSchemeWithExtra] + ) + + assert isinstance(rehydrated, DummyAuthSchemeWithExtra) + assert rehydrated.type_ == "dummy_with_extra" + assert rehydrated.some_extra_field == "extra_value" + + def test_rehydrate_custom_scheme_failure(self): + mock_scheme_data = {"type": "unknown_scheme"} + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + with pytest.raises( + ValueError, + match=( + "Cannot rehydrate: no registered scheme matches type" + " 'unknown_scheme'" + ), + ): + _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthScheme] + ) diff --git a/tests/unittests/cli/test_adk_web_server_run_live.py b/tests/unittests/cli/test_adk_web_server_run_live.py index 1c3c42593c..012af92d56 100644 --- a/tests/unittests/cli/test_adk_web_server_run_live.py +++ b/tests/unittests/cli/test_adk_web_server_run_live.py @@ -22,6 +22,7 @@ from google.adk.events.event import Event from google.adk.sessions.in_memory_session_service import InMemorySessionService import pytest +from starlette.websockets import WebSocketDisconnect class _DummyAgent(BaseAgent): @@ -203,3 +204,75 @@ async def _get_runner_async(_self, _app_name: str): run_config.session_resumption.transparent is expected_session_resumption_transparent ) + + +_WS_BASE_URL = ( + "/run_live" + "?app_name=test_app" + "&user_id=user" + "&session_id=session" + "&modalities=AUDIO" +) + + +def _build_ws_client(): + """Build a TestClient wired to a capturing runner.""" + session_service = InMemorySessionService() + asyncio.run( + session_service.create_session( + app_name="test_app", + user_id="user", + session_id="session", + state={}, + ) + ) + + runner = _CapturingRunner() + adk_web_server = AdkWebServer( + agent_loader=_DummyAgentLoader(), + session_service=session_service, + memory_service=types.SimpleNamespace(), + artifact_service=types.SimpleNamespace(), + credential_service=types.SimpleNamespace(), + eval_sets_manager=types.SimpleNamespace(), + eval_set_results_manager=types.SimpleNamespace(), + agents_dir=".", + ) + + async def _get_runner_async(_self, _app_name: str): + return runner + + adk_web_server.get_runner_async = _get_runner_async.__get__(adk_web_server) # pytype: disable=attribute-error + + fast_api_app = adk_web_server.get_fast_api_app( + setup_observer=lambda _observer, _server: None, + tear_down_observer=lambda _observer, _server: None, + ) + return TestClient(fast_api_app) + + +def test_run_live_rejects_disallowed_origin(): + client = _build_ws_client() + with pytest.raises(WebSocketDisconnect) as exc_info: + with client.websocket_connect( + _WS_BASE_URL, + headers={"origin": "https://evil.com"}, + ) as ws: + ws.receive_text() + assert exc_info.value.code == 1008 + + +def test_run_live_allows_matching_origin(): + client = _build_ws_client() + with client.websocket_connect( + _WS_BASE_URL, + headers={"origin": "http://testserver"}, + ) as ws: + _ = ws.receive_text() + + +def test_run_live_allows_no_origin_header(): + """Non-browser clients (curl, wscat, SDKs) send no Origin header.""" + client = _build_ws_client() + with client.websocket_connect(_WS_BASE_URL) as ws: + _ = ws.receive_text() diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 0ea28e6683..3e63f31222 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -15,6 +15,7 @@ import asyncio import json import logging +import os from pathlib import Path import signal import tempfile @@ -26,6 +27,7 @@ from fastapi.testclient import TestClient from google.adk.agents.base_agent import BaseAgent +from google.adk.agents.llm_agent import LlmAgent from google.adk.agents.run_config import RunConfig from google.adk.apps.app import App from google.adk.artifacts.base_artifact_service import ArtifactVersion @@ -39,6 +41,7 @@ from google.adk.evaluation.in_memory_eval_sets_manager import InMemoryEvalSetsManager from google.adk.events.event import Event from google.adk.events.event_actions import EventActions +from google.adk.plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin from google.adk.runners import Runner from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.sessions.session import Session @@ -186,19 +189,39 @@ def __init__(self, agents_dir: str): pass def load_agent(self, app_name): + if app_name == "yaml_app" or app_name == "bq_app": + agent = DummyAgent(name="yaml_agent") + agent._config = MagicMock(logging=None) + return agent return root_agent def list_agents(self): - return ["test_app"] + return ["test_app", "yaml_app", "bq_app"] def list_agents_detailed(self): - return [{ - "name": "test_app", - "root_agent_name": "test_agent", - "description": "A test agent for unit testing", - "language": "python", - "is_computer_use": False, - }] + return [ + { + "name": "test_app", + "root_agent_name": "test_agent", + "description": "A test agent for unit testing", + "language": "python", + "is_computer_use": False, + }, + { + "name": "yaml_app", + "root_agent_name": "yaml_agent", + "description": "A yaml agent for unit testing", + "language": "yaml", + "is_computer_use": False, + }, + { + "name": "bq_app", + "root_agent_name": "yaml_agent", + "description": "A bq agent for unit testing", + "language": "yaml", + "is_computer_use": False, + }, + ] return MockAgentLoader(".") @@ -517,6 +540,110 @@ def _create_test_client( return TestClient(app) +def test_agent_with_bigquery_analytics_plugin( + tmp_path, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, +): + """Verify that plugins.yaml is correctly read to attach BigQueryAgentAnalyticsPlugin.""" + app_name = "bq_app" + app_dir = tmp_path / app_name + app_dir.mkdir(parents=True) + + plugins_yaml_content = """\ +bigquery_agent_analytics: + project_id: test-project + dataset_id: test-dataset + table_id: test-table + dataset_location: US +""" + (app_dir / "plugins.yaml").write_text(plugins_yaml_content) + + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=mock_eval_sets_manager, + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=mock_eval_set_results_manager, + ), + patch.object( + os.path, + "exists", + autospec=True, + side_effect=lambda p: p.endswith("plugins.yaml") + or p.endswith("root_agent.yaml"), + ), + ): + from google.adk.cli.adk_web_server import AdkWebServer + + adk_web_server = AdkWebServer( + agent_loader=mock_agent_loader, + session_service=mock_session_service, + memory_service=mock_memory_service, + artifact_service=mock_artifact_service, + credential_service=MagicMock(), + eval_sets_manager=mock_eval_sets_manager, + eval_set_results_manager=mock_eval_set_results_manager, + agents_dir=str(tmp_path), + ) + + runner = asyncio.run(adk_web_server.get_runner_async(app_name)) + + # Assert that the plugin was attached + assert any( + isinstance(p, BigQueryAgentAnalyticsPlugin) for p in runner.app.plugins + ) + + # Check the configuration of the plugin + bq_plugin = next( + p + for p in runner.app.plugins + if isinstance(p, BigQueryAgentAnalyticsPlugin) + ) + assert bq_plugin.project_id == "test-project" + assert bq_plugin.dataset_id == "test-dataset" + assert bq_plugin.table_id == "test-table" + assert bq_plugin.location == "US" + + # Assert that the internal visual builder flag is set on the app + assert getattr(runner.app, "_is_visual_builder_app", False) is True + + @pytest.fixture def test_app( mock_session_service, @@ -593,7 +720,7 @@ def builder_test_client( session_service_uri="", artifact_service_uri="", memory_service_uri="", - allow_origins=["*"], + allow_origins=None, a2a=False, host="127.0.0.1", port=8000, @@ -801,6 +928,198 @@ def test_list_apps_detailed(test_app): logger.info(f"Listed apps: {data}") +def test_get_adk_app_info_llm_agent(test_app, mock_agent_loader): + """Test retrieving app info when root agent is an LlmAgent.""" + agent = LlmAgent( + name="test_llm_agent", description="test description", model="test_model" + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["name"] == "test_app" + assert data["rootAgentName"] == "test_llm_agent" + assert data["description"] == "test description" + assert data["language"] == "python" + assert "agents" in data + assert "test_llm_agent" in data["agents"] + + +def test_get_adk_app_info_llm_agent_with_subagents(test_app, mock_agent_loader): + """Test retrieving app info when root agent is an LlmAgent with sub_agents and tools.""" + + def sub_tool1(a: int) -> str: + """Sub tool 1.""" + return str(a) + + def sub_tool2(b: str) -> str: + """Sub tool 2.""" + return b + + sub_agent1 = LlmAgent( + name="sub_agent1", + description="sub description 1", + model="test_model", + tools=[sub_tool1], + ) + sub_agent2 = LlmAgent( + name="sub_agent2", + description="sub description 2", + model="test_model", + tools=[sub_tool2], + ) + agent = LlmAgent( + name="test_llm_agent", + description="test description", + model="test_model", + sub_agents=[sub_agent1, sub_agent2], + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "test_llm_agent" + assert "test_llm_agent" in data["agents"] + assert "sub_agent1" in data["agents"] + assert "sub_agent2" in data["agents"] + + # Verify tools for sub_agent1 + agent1_info = data["agents"]["sub_agent1"] + assert "tools" in agent1_info + assert len(agent1_info["tools"]) == 1 + tool1 = agent1_info["tools"][0] + field_name1 = ( + "functionDeclarations" + if "functionDeclarations" in tool1 + else "function_declarations" + ) + assert field_name1 in tool1 + assert tool1[field_name1][0]["name"] == "sub_tool1" + + # Verify tools for sub_agent2 + agent2_info = data["agents"]["sub_agent2"] + assert "tools" in agent2_info + assert len(agent2_info["tools"]) == 1 + tool2 = agent2_info["tools"][0] + field_name2 = ( + "functionDeclarations" + if "functionDeclarations" in tool2 + else "function_declarations" + ) + assert field_name2 in tool2 + assert tool2[field_name2][0]["name"] == "sub_tool2" + + +def test_get_adk_app_info_triple_nested_agents_with_tools( + test_app, mock_agent_loader +): + """Test retrieving app info when there are triple nested agents with tools.""" + + def tool1(a: int) -> str: + """Tool 1.""" + return str(a) + + def tool2(b: str) -> str: + """Tool 2.""" + return b + + def tool3(c: float) -> str: + """Tool 3.""" + return str(c) + + # Level 3 (deepest) + agent3 = LlmAgent( + name="agent3", + description="Level 3 agent", + model="test_model", + tools=[tool3], + ) + + # Level 2 + agent2 = LlmAgent( + name="agent2", + description="Level 2 agent", + model="test_model", + tools=[tool2], + sub_agents=[agent3], + ) + + # Level 1 (root) + root_agent = LlmAgent( + name="root_agent", + description="Level 1 agent", + model="test_model", + tools=[tool1], + sub_agents=[agent2], + ) + + with patch.object(mock_agent_loader, "load_agent", return_value=root_agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "root_agent" + assert "root_agent" in data["agents"] + assert "agent2" in data["agents"] + assert "agent3" in data["agents"] + + # Verify each has its tools + for agent_name, exp_tool_name in [ + ("root_agent", "tool1"), + ("agent2", "tool2"), + ("agent3", "tool3"), + ]: + ai = data["agents"][agent_name] + assert len(ai["tools"]) == 1 + tool = ai["tools"][0] + field_name = ( + "functionDeclarations" + if "functionDeclarations" in tool + else "function_declarations" + ) + assert tool[field_name][0]["name"] == exp_tool_name + + +def test_get_adk_app_info_llm_agent_with_function_tool( + test_app, mock_agent_loader +): + """Test retrieving app info when root agent has tools.""" + + def my_tool(a: int, b: str) -> str: + """A dummy tool function.""" + return f"{a} {b}" + + agent = LlmAgent( + name="test_llm_agent", + description="test description", + model="test_model", + tools=[my_tool], + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "test_llm_agent" + assert "test_llm_agent" in data["agents"] + agent_info = data["agents"]["test_llm_agent"] + assert "tools" in agent_info + assert len(agent_info["tools"]) == 1 + + # Verify tool serialization + tool = agent_info["tools"][0] + func_decls = tool["functionDeclarations"] + assert len(func_decls) == 1 + assert func_decls[0]["name"] == "my_tool" + + +def test_get_adk_app_info_non_llm_agent(test_app, mock_agent_loader): + """Test retrieving app info when root agent is not an LlmAgent raises 400.""" + agent = DummyAgent("dummy_agent") + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 400 + assert "Root agent is not an LlmAgent" in response.json()["detail"] + + def test_create_session_with_id(test_app, test_session_info): """Test creating a session with a specific ID.""" new_session_id = "new_session_id" @@ -1560,16 +1879,18 @@ def test_patch_memory(test_app, create_test_session, mock_memory_service): logger.info("Add session to memory test completed successfully") -def test_builder_final_save_preserves_tools_and_cleans_tmp( +def test_builder_final_save_preserves_files_and_cleans_tmp( builder_test_client, tmp_path ): files = [ - ("files", ("app/__init__.py", b"from . import agent\n", "text/plain")), - ("files", ("app/tools.py", b"def tool():\n return 1\n", "text/plain")), ( "files", ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), ), + ( + "files", + ("app/sub_agent.yaml", b"name: sub\n", "application/x-yaml"), + ), ] response = builder_test_client.post("/builder/save?tmp=true", files=files) assert response.status_code == 200 @@ -1589,12 +1910,52 @@ def test_builder_final_save_preserves_tools_and_cleans_tmp( assert response.status_code == 200 assert response.json() is True - assert (tmp_path / "app" / "tools.py").is_file() + assert (tmp_path / "app" / "sub_agent.yaml").is_file() assert not (tmp_path / "app" / "tmp" / "app").exists() tmp_dir = tmp_path / "app" / "tmp" assert not tmp_dir.exists() or not any(tmp_dir.iterdir()) +def test_builder_save_rejects_cross_origin_post(builder_test_client, tmp_path): + response = builder_test_client.post( + "/builder/save?tmp=true", + headers={"origin": "https://evil.com"}, + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + + assert response.status_code == 403 + assert response.text == "Forbidden: origin not allowed" + assert not (tmp_path / "app" / "tmp" / "app").exists() + + +def test_builder_save_allows_same_origin_post(builder_test_client, tmp_path): + response = builder_test_client.post( + "/builder/save?tmp=true", + headers={"origin": "http://testserver"}, + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + + assert response.status_code == 200 + assert response.json() is True + assert (tmp_path / "app" / "tmp" / "app" / "root_agent.yaml").is_file() + + +def test_builder_get_allows_cross_origin_get(builder_test_client): + response = builder_test_client.get( + "/builder/app/missing?tmp=true", + headers={"origin": "https://evil.com"}, + ) + + assert response.status_code == 200 + assert response.text == "" + + def test_builder_cancel_deletes_tmp_idempotent(builder_test_client, tmp_path): tmp_agent_root = tmp_path / "app" / "tmp" / "app" tmp_agent_root.mkdir(parents=True, exist_ok=True) @@ -1652,12 +2013,187 @@ def test_builder_save_rejects_traversal(builder_test_client, tmp_path): ("app/../escape.yaml", b"nope\n", "application/x-yaml"), )], ) - assert response.status_code == 200 - assert response.json() is False + assert response.status_code == 400 assert not (tmp_path / "escape.yaml").exists() assert not (tmp_path / "app" / "tmp" / "escape.yaml").exists() +def test_builder_save_rejects_py_files(builder_test_client, tmp_path): + """Uploading .py files via /builder/save is rejected.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/agent.py", b"import os\nos.system('id')\n", "text/plain"), + )], + ) + assert response.status_code == 400 + assert not (tmp_path / "app" / "tmp" / "app" / "agent.py").exists() + + +def test_builder_save_rejects_non_yaml_extensions( + builder_test_client, tmp_path +): + """Uploading non-YAML files (.json, .txt, .sh, etc.) is rejected.""" + for ext, content in [ + (".py", b"print('hi')"), + (".json", b"{}"), + (".txt", b"hello"), + (".sh", b"#!/bin/bash"), + (".pth", b"import os"), + ]: + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + (f"app/file{ext}", content, "application/octet-stream"), + )], + ) + assert response.status_code == 400, f"Expected 400 for {ext}" + + +def test_builder_save_allows_yaml_files(builder_test_client, tmp_path): + """Uploading .yaml and .yml files is allowed.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + assert response.status_code == 200 + assert response.json() is True + + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/sub_agent.yml", b"name: sub\n", "application/x-yaml"), + )], + ) + assert response.status_code == 200 + assert response.json() is True + + +def test_builder_save_rejects_args_key(builder_test_client, tmp_path): + """Uploading YAML with an `args` key is rejected (RCE prevention).""" + yaml_with_args = b"""\ +name: my_tool +args: + key: value +""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", yaml_with_args, "application/x-yaml"), + )], + ) + assert response.status_code == 400 + assert "args" in response.json()["detail"] + assert not (tmp_path / "app" / "tmp" / "app" / "root_agent.yaml").exists() + + +def test_builder_save_rejects_nested_args_key(builder_test_client, tmp_path): + """Uploading YAML with a nested `args` key is rejected.""" + yaml_with_nested_args = b"""\ +tools: + - name: some_tool + args: + param: value +""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", yaml_with_nested_args, "application/x-yaml"), + )], + ) + assert response.status_code == 400 + assert "args" in response.json()["detail"] + + +def test_builder_get_rejects_non_yaml_file_paths(builder_test_client, tmp_path): + """GET /builder/app/{app_name}?file_path=... rejects non-YAML extensions.""" + app_root = tmp_path / "app" + app_root.mkdir(parents=True, exist_ok=True) + (app_root / ".env").write_text("SECRET=supersecret\n") + (app_root / "agent.py").write_text("root_agent = None\n") + (app_root / "config.json").write_text("{}\n") + + for file_path in [".env", "agent.py", "config.json"]: + response = builder_test_client.get( + f"/builder/app/app?file_path={file_path}" + ) + assert response.status_code == 200, f"Expected 200 for {file_path}" + assert response.text == "", f"Expected empty response for {file_path}" + + +def test_builder_get_allows_yaml_file_paths(builder_test_client, tmp_path): + """GET /builder/app/{app_name}?file_path=... allows YAML extensions.""" + app_root = tmp_path / "app" + app_root.mkdir(parents=True, exist_ok=True) + (app_root / "sub_agent.yaml").write_text("name: sub\n") + (app_root / "tool.yml").write_text("name: tool\n") + + response = builder_test_client.get( + "/builder/app/app?file_path=sub_agent.yaml" + ) + assert response.status_code == 200 + assert response.text == "name: sub\n" + + response = builder_test_client.get("/builder/app/app?file_path=tool.yml") + assert response.status_code == 200 + assert response.text == "name: tool\n" + + +def test_builder_endpoints_not_registered_without_web( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, +): + """Builder endpoints must not be registered when web=False (e.g. deploy).""" + client = _create_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, + web=False, + ) + # /builder/save should return 404/405, not 200 + response = client.post( + "/builder/save", + files=[ + ("files", ("app/agent.yaml", b"name: test\n", "application/x-yaml")) + ], + ) + assert response.status_code in (404, 405) + + # /builder/app/{name}/cancel should also be absent + response = client.post("/builder/app/app/cancel") + assert response.status_code in (404, 405) + + # /builder/app/{name} GET should also be absent + response = client.get("/builder/app/app") + assert response.status_code in (404, 405) + + +def test_builder_endpoints_registered_with_web(builder_test_client): + """Builder endpoints are available when web=True.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[ + ("files", ("app/agent.yaml", b"name: test\n", "application/x-yaml")) + ], + ) + assert response.status_code == 200 + + def test_agent_run_resume_without_message_success( test_app, create_test_session ): @@ -1768,5 +2304,139 @@ async def run_async_session_not_found(self, **kwargs): assert "Session not found" in response.json()["detail"] +@pytest.mark.asyncio +async def test_independent_telemetry_context( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, + monkeypatch, +): + """Test that two agents have independent is_visual_builder context variables.""" + from google.adk.utils._telemetry_context import _is_visual_builder + import httpx + + # We use httpx.AsyncClient to send concurrent requests to the FastAPI app. + # This proves that is_visual_builder doesn't leak across concurrent requests. + captured_visual_builder_values = {} + + async def run_async_capture( + self, + *, + user_id: str, + session_id: str, + invocation_id: Optional[str] = None, + new_message: Optional[types.Content] = None, + state_delta: Optional[dict[str, Any]] = None, + run_config: Optional[RunConfig] = None, + ): + # Capture the value of is_visual_builder inside the request context + captured_visual_builder_values[self.app.name] = _is_visual_builder.get() + + # Sleep to ensure both requests overlap in time + await asyncio.sleep(0.1) + + # Read again to ensure it wasn't overwritten by the other concurrent request + captured_visual_builder_values[self.app.name + "_after_sleep"] = ( + _is_visual_builder.get() + ) + + yield _event_1() + + monkeypatch.setattr(Runner, "run_async", run_async_capture) + + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=mock_eval_sets_manager, + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=mock_eval_set_results_manager, + ), + patch.object( + os.path, + "exists", + autospec=True, + side_effect=lambda p: "yaml_app" in p + and p.endswith("root_agent.yaml"), + ), + ): + app = get_fast_api_app( + agents_dir=".", + web=True, + session_service_uri="", + artifact_service_uri="", + memory_service_uri="", + allow_origins=["*"], + a2a=False, + host="127.0.0.1", + port=8000, + ) + + transport = httpx.ASGITransport(app=app) + async with httpx.AsyncClient( + transport=transport, base_url="http://test" + ) as client: + # Send concurrent requests + req1 = client.post( + "/run", + json={ + "app_name": "test_app", + "user_id": "test_user", + "session_id": "test_session", + "new_message": {"role": "user", "parts": [{"text": "Hello"}]}, + }, + ) + req2 = client.post( + "/run", + json={ + "app_name": "yaml_app", + "user_id": "test_user", + "session_id": "test_session", + "new_message": {"role": "user", "parts": [{"text": "Hello"}]}, + }, + ) + + await asyncio.gather(req1, req2) + + assert captured_visual_builder_values.get("test_app") == False + assert captured_visual_builder_values.get("test_app_after_sleep") == False + + assert captured_visual_builder_values.get("yaml_app") == True + assert captured_visual_builder_values.get("yaml_app_after_sleep") == True + + if __name__ == "__main__": pytest.main(["-xvs", __file__]) diff --git a/tests/unittests/cli/test_trigger_routes.py b/tests/unittests/cli/test_trigger_routes.py new file mode 100644 index 0000000000..edec8cb675 --- /dev/null +++ b/tests/unittests/cli/test_trigger_routes.py @@ -0,0 +1,1011 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Integration tests for /trigger/* endpoints. + +Tests exercise the full FastAPI request → TriggerRouter → Runner pipeline +using the same TestClient pattern as test_fast_api.py, with a mocked Runner +that returns deterministic events. +""" + +import asyncio +import base64 +import json +import signal +from typing import Optional +from unittest.mock import AsyncMock +from unittest.mock import MagicMock +from unittest.mock import patch + +from fastapi.testclient import TestClient +from google.adk.agents.base_agent import BaseAgent +from google.adk.agents.run_config import RunConfig +from google.adk.cli import fast_api as fast_api_module +from google.adk.cli.fast_api import get_fast_api_app +from google.adk.cli.trigger_routes import _is_transient_error +from google.adk.cli.trigger_routes import TransientError +from google.adk.cli.trigger_routes import TriggerRouter +from google.adk.events.event import Event +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types +import pytest + +# --------------------------------------------------------------------------- +# Dummy agent & mocked runner (same pattern as test_fast_api.py) +# --------------------------------------------------------------------------- + + +class DummyAgent(BaseAgent): + + def __init__(self, name): + super().__init__(name=name) + self.sub_agents = [] + + +root_agent = DummyAgent(name="trigger_test_agent") + + +def _model_event(text: str = "Agent reply") -> Event: + return Event( + author="trigger_test_agent", + invocation_id="inv-trigger", + content=types.Content( + role="model", + parts=[types.Part(text=text)], + ), + ) + + +async def dummy_run_async( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that echoes input text back.""" + # Extract the input text to echo it back — proves the pipeline works e2e + input_text = "" + if new_message and new_message.parts: + input_text = new_message.parts[0].text or "" + + yield _model_event(f"Processed: {input_text}") + await asyncio.sleep(0) + + +async def dummy_run_async_error( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that raises an exception.""" + raise RuntimeError("Agent crashed") + yield # make it an async generator # noqa: E305 + + +def _make_rate_limit_runner(fail_count: int): + """Create a runner that fails with 429 `fail_count` times, then succeeds.""" + call_count = {"value": 0} + + async def dummy_run_async_rate_limit( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, + ): + call_count["value"] += 1 + if call_count["value"] <= fail_count: + raise RuntimeError("429 Resource has been exhausted") + input_text = "" + if new_message and new_message.parts: + input_text = new_message.parts[0].text or "" + yield _model_event(f"Processed: {input_text}") + await asyncio.sleep(0) + + return dummy_run_async_rate_limit + + +async def dummy_run_async_always_429( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that always raises a 429 error.""" + raise RuntimeError("RESOURCE_EXHAUSTED: 429 quota exceeded") + yield # noqa: E305 + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture(autouse=True) +def patch_runner(monkeypatch): + monkeypatch.setattr(Runner, "run_async", dummy_run_async) + + +@pytest.fixture +def mock_agent_loader(): + + class MockAgentLoader: + + def __init__(self, agents_dir: str): + pass + + def load_agent(self, app_name): + return root_agent + + def list_agents(self): + return ["test_app"] + + def list_agents_detailed(self): + return [{ + "name": "test_app", + "root_agent_name": "trigger_test_agent", + "description": "Test agent for triggers", + "language": "python", + "is_computer_use": False, + }] + + return MockAgentLoader(".") + + +@pytest.fixture +def mock_session_service(): + return InMemorySessionService() + + +@pytest.fixture +def mock_artifact_service(): + service = AsyncMock() + service.list_artifact_keys = AsyncMock(return_value=[]) + return service + + +@pytest.fixture +def mock_memory_service(): + return AsyncMock() + + +def _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources: Optional[list[str]] = None, +) -> TestClient: + """Build a TestClient with the given trigger setting.""" + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=AsyncMock(), + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=AsyncMock(), + ), + ): + app = get_fast_api_app( + agents_dir=".", + web=False, + session_service_uri="", + artifact_service_uri="", + memory_service_uri="", + allow_origins=["*"], + trigger_sources=trigger_sources, + ) + return TestClient(app) + + +@pytest.fixture +def client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, +): + """TestClient with all triggers enabled.""" + return _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["pubsub", "eventarc"], + ) + + +@pytest.fixture +def client_no_triggers( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, +): + """TestClient with triggers disabled (default).""" + return _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=None, + ) + + +# =================================================================== +# /apps/test_app/trigger/pubsub — Pub/Sub Push Subscription +# =================================================================== + + +class TestTriggerPubSub: + """Integration tests for the Pub/Sub push subscription trigger.""" + + def test_success(self, client, monkeypatch): + """Valid Pub/Sub message is processed and returns success.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + message_data = base64.b64encode(b"Hello from Pub/Sub").decode("utf-8") + payload = { + "message": { + "data": message_data, + "messageId": "msg-001", + }, + "subscription": "projects/my-project/subscriptions/my-sub", + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + data = resp.json() + assert data["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "Hello from Pub/Sub" + assert parsed_msg["attributes"] == {} + + def test_message_with_attributes(self, client, monkeypatch): + """Pub/Sub message with attributes (no data) is processed.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "attributes": {"key": "value", "action": "process"}, + "messageId": "msg-002", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] is None + assert parsed_msg["attributes"] == {"key": "value", "action": "process"} + + def test_json_payload_in_data(self, client, monkeypatch): + """JSON-encoded data in Pub/Sub message is decoded properly.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + inner_json = json.dumps({"order_id": 42, "amount": 99.99}) + message_data = base64.b64encode(inner_json.encode("utf-8")).decode("utf-8") + payload = { + "message": { + "data": message_data, + "messageId": "msg-003", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == {"order_id": 42, "amount": 99.99} + assert parsed_msg["attributes"] == {} + + def test_invalid_base64_returns_400(self, client): + """Invalid base64 data returns 400.""" + payload = { + "message": { + "data": "!!!not-valid-base64!!!", + "messageId": "msg-bad", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 400 + assert "base64" in resp.json()["detail"].lower() + + def test_agent_error_returns_500(self, client, monkeypatch): + """Agent failure returns 500, allowing Pub/Sub to retry.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_error) + + message_data = base64.b64encode(b"trigger error").decode("utf-8") + payload = { + "message": {"data": message_data}, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "Agent processing failed" in resp.json()["detail"] + + def test_with_subscription_metadata(self, client): + """Subscription field is used for user_id derivation.""" + message_data = base64.b64encode(b"test").decode("utf-8") + payload = { + "message": {"data": message_data}, + "subscription": "projects/p/subscriptions/orders-sub", + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + + def test_unknown_app_fails_early( + self, client, mock_agent_loader, mock_session_service + ): + """Unknown app fails early and does NOT create a session.""" + + def load_agent_raising(app_name): + if app_name == "unknown_app": + raise Exception("App not found") + return root_agent + + mock_agent_loader.load_agent = load_agent_raising + + message_data = base64.b64encode(b"test").decode("utf-8") + payload = { + "message": {"data": message_data}, + } + resp = client.post("/apps/unknown_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "unknown_app" not in mock_session_service.sessions + + +# =================================================================== +# /apps/test_app/trigger/eventarc — Eventarc / CloudEvents +# =================================================================== + + +class TestTriggerEventarc: + """Integration tests for the Eventarc / CloudEvents trigger.""" + + def test_success(self, client, monkeypatch): + """Valid CloudEvent payload is processed and returns success.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "data": { + "bucket": "my-bucket", + "name": "path/to/file.pdf", + "contentType": "application/pdf", + }, + "source": "storage.googleapis.com", + "type": "google.cloud.storage.object.v1.finalized", + "id": "evt-001", + "specversion": "1.0", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == payload["data"] + assert parsed_msg["attributes"]["ce-id"] == "evt-001" + assert ( + parsed_msg["attributes"]["ce-type"] + == "google.cloud.storage.object.v1.finalized" + ) + + def test_source_derived_from_body(self, client): + """Source from body is used for user_id.""" + payload = { + "data": {"key": "value"}, + "source": "my-custom-source", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + + def test_source_from_ce_header(self, client): + """ce-source header is used when body source is absent.""" + payload = { + "data": {"key": "value"}, + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={"ce-source": "header-source"}, + ) + assert resp.status_code == 200 + + def test_complex_event_data(self, client, monkeypatch): + """Complex nested event data is serialized as JSON for the agent.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "data": { + "resource": { + "name": "projects/p/topics/t", + "labels": {"env": "prod"}, + }, + "insertId": "abc123", + "timestamp": "2026-01-01T00:00:00Z", + }, + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == payload["data"] + + def test_agent_error_returns_500(self, client, monkeypatch): + """Agent failure returns 500, allowing Eventarc to retry.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_error) + + payload = { + "data": {"trigger": "error"}, + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + assert "Agent processing failed" in resp.json()["detail"] + + def test_minimal_payload(self, client, monkeypatch): + """Minimal payload with just data field works.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = {"data": {}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + assert resp.status_code == 200 + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == {} + + def test_structured_mode_pubsub_wrapper(self, client, monkeypatch): + """Eventarc structured mode with Pub/Sub envelope is base64-decoded.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + inner_message = "Hello from structured Eventarc" + encoded_message = base64.b64encode(inner_message.encode("utf-8")).decode( + "utf-8" + ) + payload = { + "data": { + "message": { + "data": encoded_message, + } + }, + "source": "my-source", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "Hello from structured Eventarc" + assert parsed_msg["attributes"] == {} + + def test_binary_content_mode_pubsub_wrapper(self, client, monkeypatch): + """Binary content mode: Pub/Sub message wrapper in body, CE attrs in headers.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "data": base64.b64encode(b"hello from eventarc").decode(), + "messageId": "evt-msg-001", + }, + "subscription": "projects/p/subscriptions/eventarc-sub", + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={ + "ce-source": "//pubsub.googleapis.com/projects/p/topics/t", + "ce-type": "google.cloud.pubsub.topic.v1.messagePublished", + "ce-id": "binary-test-1", + "ce-specversion": "1.0", + }, + ) + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "hello from eventarc" + assert parsed_msg["attributes"] == {} + + def test_binary_content_mode_attributes_only(self, client, monkeypatch): + """Binary content mode with attributes only (no data).""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "attributes": {"key": "value"}, + "messageId": "evt-msg-002", + }, + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={"ce-source": "//pubsub.googleapis.com/test"}, + ) + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] is None + assert parsed_msg["attributes"] == {"key": "value"} + + def test_binary_content_mode_arbitrary_payload(self, client, monkeypatch): + """Binary content mode with arbitrary JSON payload (not Pub/Sub).""" + captured_message = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_message.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "bucket": "my-bucket", + "name": "file.txt", + "contentType": "application/json", + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={ + "ce-source": ( + "//storage.googleapis.com/projects/_/buckets/my-bucket" + ), + "ce-type": "google.cloud.storage.object.v1.finalized", + "ce-id": "12345", + "ce-specversion": "1.0", + }, + ) + assert resp.status_code == 200 + assert len(captured_message) == 1 + received_data = json.loads(captured_message[0]) + assert received_data["data"]["bucket"] == "my-bucket" + assert received_data["data"]["name"] == "file.txt" + assert received_data["attributes"]["ce-id"] == "12345" + + +# =================================================================== +# Triggers disabled (default behavior) +# =================================================================== + + +class TestTriggersDisabled: + """Verify trigger endpoints return 404 when not enabled.""" + + def test_pubsub_returns_404(self, client_no_triggers): + resp = client_no_triggers.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert resp.status_code == 404 + + def test_eventarc_returns_404(self, client_no_triggers): + resp = client_no_triggers.post( + "/apps/test_app/trigger/eventarc", json={"data": {}} + ) + assert resp.status_code == 404 + + +# =================================================================== +# Transient error detection +# =================================================================== + + +class TestTransientErrorDetection: + """Unit tests for the _is_transient_error helper.""" + + def test_429_in_message(self): + assert _is_transient_error(RuntimeError("HTTP 429 Too Many Requests")) + + def test_resource_exhausted(self): + assert _is_transient_error(RuntimeError("RESOURCE_EXHAUSTED")) + + def test_rate_limit(self): + assert _is_transient_error(RuntimeError("rate limit exceeded")) + + def test_quota(self): + assert _is_transient_error(RuntimeError("quota exceeded for project")) + + def test_non_transient(self): + assert not _is_transient_error(RuntimeError("Agent crashed")) + + def test_permission_denied(self): + assert not _is_transient_error(RuntimeError("PERMISSION_DENIED")) + + +# =================================================================== +# Retry with exponential backoff +# =================================================================== + + +class TestRetryLogic: + """Integration tests for retry with exponential backoff on 429 errors.""" + + def test_pubsub_retry_exhausted_returns_500(self, client, monkeypatch): + """Pub/Sub trigger returns 500 when retries are exhausted.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_always_429) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + message_data = base64.b64encode(b"429 test").decode("utf-8") + payload = {"message": {"data": message_data}} + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "Rate limit" in resp.json()["detail"] + + def test_eventarc_retry_exhausted_returns_500(self, client, monkeypatch): + """Eventarc trigger returns 500 when retries are exhausted.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_always_429) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + payload = {"data": {"test": "429"}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + assert "Rate limit" in resp.json()["detail"] + + def test_non_transient_error_not_retried(self, client, monkeypatch): + """Non-429 errors are NOT retried — they fail immediately.""" + call_count = 0 + + async def counting_error_runner( + self, user_id, session_id, new_message, **kwargs + ): + nonlocal call_count + call_count += 1 + raise RuntimeError("PERMISSION_DENIED: no access") + yield # noqa: E305 + + monkeypatch.setattr(Runner, "run_async", counting_error_runner) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + payload = {"data": {"test": True}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + # Non-transient errors should NOT be retried — only 1 call + assert call_count == 1 + + +# =================================================================== +# Semaphore / concurrency control +# =================================================================== + + +class TestConcurrencyControl: + """Tests for semaphore-based concurrency limiting.""" + + def test_concurrent_pubsub_and_eventarc(self, client): + """Multiple trigger types can be called without semaphore starvation.""" + # Pub/Sub + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"ps").decode()}}, + ) + assert ps_resp.status_code == 200 + + # Eventarc + ea_resp = client.post( + "/apps/test_app/trigger/eventarc", + json={"data": {"key": "value"}}, + ) + assert ea_resp.status_code == 200 + + +# =================================================================== +# Selective trigger registration +# =================================================================== + + +class TestSelectiveRegistration: + """Tests that only requested trigger sources are registered.""" + + def test_only_pubsub( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """When trigger_sources=['pubsub'], only Pub/Sub is available.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["pubsub"], + ) + # Pub/Sub should work + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"test").decode()}}, + ) + assert ps_resp.status_code == 200 + + # Eventarc should NOT be available + ea_resp = client.post("/apps/test_app/trigger/eventarc", json={"data": {}}) + assert ea_resp.status_code == 404 + + def test_only_eventarc( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """When trigger_sources=['eventarc'], only Eventarc is available.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["eventarc"], + ) + # Eventarc should work + ea_resp = client.post( + "/apps/test_app/trigger/eventarc", json={"data": {"k": "v"}} + ) + assert ea_resp.status_code == 200 + + # Pub/Sub should NOT be available + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert ps_resp.status_code == 404 + + +class TestUnknownTriggerSources: + """Verify unknown trigger sources are filtered and warned about.""" + + def test_unknown_source_ignored( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """Unknown source is silently dropped; valid sources still work.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["unknown_source", "pubsub"], + ) + # "pubsub" should still be registered + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"test").decode()}}, + ) + assert ps_resp.status_code == 200 + + # "unknown_source" should NOT be registered + unknown_resp = client.post( + "/apps/test_app/trigger/unknown_source", json={"calls": [["test"]]} + ) + assert unknown_resp.status_code == 404 + + def test_all_unknown_sources_results_in_no_endpoints( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """All invalid sources means no trigger endpoints registered.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["foo", "bar"], + ) + unknown_resp = client.post( + "/apps/test_app/trigger/unknown_source", json={"calls": [["test"]]} + ) + assert unknown_resp.status_code == 404 + + +class TestTriggersDisabled: + """Verify trigger endpoints return 404 when not enabled.""" + + def test_pubsub_returns_404( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=[], + ) + resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert resp.status_code == 404 + + def test_eventarc_returns_404( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=[], + ) + resp = client.post("/apps/test_app/trigger/eventarc", json={"data": {}}) + assert resp.status_code == 404 diff --git a/tests/unittests/cli/utils/test_agent_loader.py b/tests/unittests/cli/utils/test_agent_loader.py index 0a7f9fc04f..abc5718adb 100644 --- a/tests/unittests/cli/utils/test_agent_loader.py +++ b/tests/unittests/cli/utils/test_agent_loader.py @@ -299,8 +299,6 @@ def test_error_messages_use_os_sep_consistently(self): loader.load_agent(agent_name) exc_info.match(re.escape(expected_path)) - exc_info.match(re.escape(f"{agent_name}{os.sep}root_agent.yaml")) - exc_info.match(re.escape(f"{os.sep}")) def test_agent_loader_with_mocked_windows_path(self, monkeypatch): """Mock Path() to simulate Windows behavior and catch regressions. @@ -333,19 +331,10 @@ def test_agent_not_found_error(self): with pytest.raises(ValueError) as exc_info: loader.load_agent("nonexistent_agent") - expected_msg_part_1 = "No root_agent found for 'nonexistent_agent'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_agent.agent.root_agent'," - " 'nonexistent_agent.root_agent' and" - " 'nonexistent_agent/root_agent.yaml'." + assert "Agent not found: 'nonexistent_agent'" in str(exc_info.value) + assert os.path.join(agents_dir, "nonexistent_agent") in str( + exc_info.value ) - expected_msg_part_3 = ( - f"Ensure '{agents_dir}/nonexistent_agent' is structured correctly" - ) - - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) def test_agent_without_root_agent_error(self): """Test that appropriate error is raised when agent has no root_agent.""" @@ -567,27 +556,17 @@ def test_yaml_agent_not_found_error(self): """Test that appropriate error is raised when YAML agent is not found.""" with tempfile.TemporaryDirectory() as temp_dir: loader = AgentLoader(temp_dir) - agents_dir = temp_dir # For use in the expected message string + agents_dir = temp_dir # Try to load nonexistent YAML agent with pytest.raises(ValueError) as exc_info: loader.load_agent("nonexistent_yaml_agent") - expected_msg_part_1 = "No root_agent found for 'nonexistent_yaml_agent'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_yaml_agent.agent.root_agent'," - " 'nonexistent_yaml_agent.root_agent' and" - " 'nonexistent_yaml_agent/root_agent.yaml'." - ) - expected_msg_part_3 = ( - f"Ensure '{agents_dir}/nonexistent_yaml_agent' is structured" - " correctly" + assert "Agent not found: 'nonexistent_yaml_agent'" in str(exc_info.value) + assert os.path.join(agents_dir, "nonexistent_yaml_agent") in str( + exc_info.value ) - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) - def test_yaml_agent_invalid_yaml_error(self): """Test that appropriate error is raised when YAML is invalid.""" with tempfile.TemporaryDirectory() as temp_dir: @@ -778,20 +757,7 @@ def test_special_agent_not_found_error(self): with pytest.raises(ValueError) as exc_info: loader.load_agent("__nonexistent_special") - expected_msg_part_1 = "No root_agent found for '__nonexistent_special'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_special.agent.root_agent'," - " 'nonexistent_special.root_agent' and" - " 'nonexistent_special/root_agent.yaml'." - ) - expected_msg_part_3 = ( - f"Ensure '{special_agents_dir}/nonexistent_special' is structured" - " correctly" - ) - - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) + assert "Agent not found: '__nonexistent_special'" in str(exc_info.value) finally: # Restore original SPECIAL_AGENTS_DIR @@ -994,47 +960,49 @@ def __init__(self): assert detailed_list[0]["name"] == agent_name assert not detailed_list[0]["is_computer_use"] - def test_list_agents_excludes_non_agent_directories(self): - """Test that list_agents filters out directories without agent definitions.""" + def test_validate_agent_name_rejects_dotted_paths(self): + """Agent names with dots are rejected to prevent arbitrary module imports.""" with tempfile.TemporaryDirectory() as temp_dir: - temp_path = Path(temp_dir) - - valid_package = temp_path / "valid_agent" - valid_package.mkdir() - (valid_package / "__init__.py").write_text(dedent(""" - from google.adk.agents.base_agent import BaseAgent - - class ValidAgent(BaseAgent): - def __init__(self): - super().__init__(name="valid_agent") - - root_agent = ValidAgent() - """)) - - valid_module = temp_path / "module_agent" - valid_module.mkdir() - (valid_module / "agent.py").write_text(dedent(""" - from google.adk.agents.base_agent import BaseAgent - - class ModuleAgent(BaseAgent): - def __init__(self): - super().__init__(name="module_agent") - - root_agent = ModuleAgent() - """)) - - valid_yaml = temp_path / "yaml_agent" - valid_yaml.mkdir() - (valid_yaml / "root_agent.yaml").write_text("name: yaml_agent\n") + loader = AgentLoader(temp_dir) + for name in ["os.path", "sys.modules", "subprocess.call"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) - (temp_path / "random_folder").mkdir() - (temp_path / "data").mkdir() - (temp_path / "tmp").mkdir() + def test_validate_agent_name_rejects_relative_imports(self): + """Agent names starting with dots are rejected.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + for name in ["..foo", ".bar", "...baz"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) - loader = AgentLoader(str(temp_path)) - agents = loader.list_agents() + def test_validate_agent_name_rejects_path_separators(self): + """Agent names with slashes or special characters are rejected.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + for name in ["foo/bar", "foo\\bar", "foo-bar", "foo bar"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) - assert agents == ["module_agent", "valid_agent", "yaml_agent"] - assert "random_folder" not in agents - assert "data" not in agents - assert "tmp" not in agents + def test_validate_agent_name_allows_valid_names(self): + """Valid Python identifiers that exist on disk pass validation.""" + with tempfile.TemporaryDirectory() as temp_dir: + temp_path = Path(temp_dir) + for name in ["my_agent", "Agent1", "_private"]: + (temp_path / name).mkdir(exist_ok=True) + loader = AgentLoader(temp_dir) + for name in ["my_agent", "Agent1", "_private"]: + # Should not raise ValueError for name validation; + # may raise other errors because the agent has no root_agent + with pytest.raises(Exception) as exc_info: + loader.load_agent(name) + assert "Invalid agent name" not in str(exc_info.value) + assert "Agent not found" not in str(exc_info.value) + + def test_validate_agent_name_rejects_nonexistent_agent(self): + """Valid identifiers that don't exist on disk are rejected before import.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + # 'subprocess' is a valid identifier but shouldn't be importable as an agent + with pytest.raises(ValueError, match="Agent not found"): + loader.load_agent("subprocess") diff --git a/tests/unittests/cli/utils/test_cli_create.py b/tests/unittests/cli/utils/test_cli_create.py index 0d76ab8a54..708a6a210d 100644 --- a/tests/unittests/cli/utils/test_cli_create.py +++ b/tests/unittests/cli/utils/test_cli_create.py @@ -26,6 +26,7 @@ import click import google.adk.cli.cli_create as cli_create +from google.adk.cli.utils import gcp_utils import pytest @@ -87,6 +88,23 @@ def test_generate_files_with_gcp(agent_folder: Path) -> None: assert "GOOGLE_GENAI_USE_VERTEXAI=1" in env_content +def test_generate_files_with_express_mode(agent_folder: Path) -> None: + """Files should be created with Vertex AI backend when both project and API key are present (Express Mode).""" + cli_create._generate_files( + str(agent_folder), + google_api_key="express-api-key", + google_cloud_project="express-project-id", + google_cloud_region="us-central1", + model="gemini-2.0-flash-001", + type="code", + ) + + env_content = (agent_folder / ".env").read_text() + assert "GOOGLE_GENAI_USE_VERTEXAI=1" in env_content + assert "GOOGLE_API_KEY=express-api-key" in env_content + assert "GOOGLE_CLOUD_PROJECT=express-project-id" in env_content + + def test_generate_files_overwrite(agent_folder: Path) -> None: """Existing files should be overwritten when generating again.""" agent_folder.mkdir(parents=True, exist_ok=True) @@ -284,6 +302,178 @@ def test_prompt_to_choose_backend_vertex( assert region == "region" +def test_prompt_to_choose_backend_login( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Choosing Login with Google returns (api_key, project, region) from handler.""" + monkeypatch.setattr(click, "prompt", lambda *a, **k: "3") + monkeypatch.setattr( + cli_create, + "_handle_login_with_google", + lambda: ("api-key", "proj", "region"), + ) + + api_key, proj, region = cli_create._prompt_to_choose_backend(None, None, None) + assert api_key == "api-key" + assert proj == "proj" + assert region == "region" + + +def test_handle_login_with_google_existing_express( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should return existing Express project if found.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr( + gcp_utils, + "retrieve_express_project", + lambda: {"api_key": "key", "project_id": "proj", "region": "us-central1"}, + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "key" + assert proj == "proj" + assert region == "us-central1" + + +def test_handle_login_with_google_select_gcp_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should prompt for project selection if no Express project found.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr( + gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] + ) + monkeypatch.setattr(click, "prompt", lambda *a, **k: 1) + monkeypatch.setattr( + cli_create, "_prompt_for_google_cloud_region", lambda _v: "us-east1" + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "p1" + assert region == "us-east1" + + +def test_handle_login_with_google_manual_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should allow manual project ID entry when '0' is selected.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr( + gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] + ) + prompts = iter([0, "manual-proj", "us-east1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "manual-proj" + assert region == "us-east1" + + +def test_handle_login_with_google_option_1( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 1, enters project ID and region.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + prompts = iter(["1", "test-proj", "us-east1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "test-proj" + assert region == "us-east1" + + +def test_handle_login_with_google_option_2( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 2, goes through express sign up.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(gcp_utils, "check_express_eligibility", lambda: True) + monkeypatch.setattr(click, "confirm", lambda *a, **k: True) + prompts = iter(["2", "1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + monkeypatch.setattr( + gcp_utils, + "sign_up_express", + lambda location="us-central1": { + "api_key": "new-key", + "project_id": "new-proj", + "region": location, + }, + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "new-key" + assert proj == "new-proj" + assert region == "us-central1" + + +def test_handle_login_with_google_option_2_unset_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 2, goes through express sign up, and unsets existing gcloud project.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(gcp_utils, "check_express_eligibility", lambda: True) + + confirms = iter([True, True]) + monkeypatch.setattr(click, "confirm", lambda *a, **k: next(confirms)) + + prompts = iter(["2", "1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + monkeypatch.setattr( + gcp_utils, + "sign_up_express", + lambda location="us-central1": { + "api_key": "new-key", + "project_id": "new-proj", + "region": location, + }, + ) + + monkeypatch.setattr( + cli_create, "_get_gcp_project_from_gcloud", lambda: "old-proj" + ) + + called = {} + + def fake_run(cmd, **kwargs): + if cmd == ["gcloud", "config", "unset", "project"]: + called["unset"] = True + return subprocess.CompletedProcess(args=cmd, returncode=0) + raise ValueError(f"Unexpected command: {cmd}") + + monkeypatch.setattr(subprocess, "run", fake_run) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "new-key" + assert proj == "new-proj" + assert region == "us-central1" + assert called.get("unset") is True + + +def test_handle_login_with_google_option_3( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 3, aborts.""" + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(click, "prompt", lambda *a, **k: "3") + with pytest.raises(click.Abort): + cli_create._handle_login_with_google() + + # prompt_str def test_prompt_str_non_empty(monkeypatch: pytest.MonkeyPatch) -> None: """_prompt_str should retry until a non-blank string is provided.""" diff --git a/tests/unittests/cli/utils/test_cli_deploy.py b/tests/unittests/cli/utils/test_cli_deploy.py index e1829d2f98..cf89863939 100644 --- a/tests/unittests/cli/utils/test_cli_deploy.py +++ b/tests/unittests/cli/utils/test_cli_deploy.py @@ -240,6 +240,20 @@ def test_agent_engine_app_template_compiles_with_windows_paths() -> None: compile(rendered, "", "exec") +def test_print_agent_engine_url() -> None: + """It should print the correct URL for a fully-qualified resource name.""" + with mock.patch("click.secho") as mocked_secho: + cli_deploy._print_agent_engine_url( + "projects/my-project/locations/us-central1/reasoningEngines/123456" + ) + mocked_secho.assert_called_once() + call_args = mocked_secho.call_args[0][0] + assert "my-project" in call_args + assert "us-central1" in call_args + assert "123456" in call_args + assert "playground" in call_args + + @pytest.mark.parametrize("include_requirements", [True, False]) def test_to_agent_engine_happy_path( monkeypatch: pytest.MonkeyPatch, @@ -306,6 +320,34 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: assert str(rmtree_recorder.get_last_call_args()[0]) == str(tmp_dir) +def test_to_agent_engine_raises_when_explicit_config_file_missing( + monkeypatch: pytest.MonkeyPatch, + agent_dir: Callable[[bool, bool], Path], + tmp_path: Path, +) -> None: + """It should fail with a clear error when --agent_engine_config_file is missing.""" + monkeypatch.setattr(shutil, "rmtree", lambda *a, **k: None) + src_dir = agent_dir(False, False) + missing_config = tmp_path / "no_such_agent_engine_config.json" + expected_abs = str(missing_config.resolve()) + + with pytest.raises(click.ClickException) as exc_info: + cli_deploy.to_agent_engine( + agent_folder=str(src_dir), + temp_folder="tmp", + adk_app="my_adk_app", + trace_to_cloud=True, + project="my-gcp-project", + region="us-central1", + display_name="My Test Agent", + description="A test agent.", + agent_engine_config_file=str(missing_config), + ) + + assert "Agent engine config file not found" in str(exc_info.value) + assert expected_abs in str(exc_info.value) + + def test_to_agent_engine_skips_agent_import_validation_by_default( monkeypatch: pytest.MonkeyPatch, agent_dir: Callable[[bool, bool], Path], @@ -508,7 +550,7 @@ def mock_subprocess_run(*args, **kwargs): assert "image: gcr.io/gke-proj/gke-svc" in yaml_content assert f"containerPort: 9090" in yaml_content assert f"targetPort: 9090" in yaml_content - assert "type: LoadBalancer" in yaml_content + assert "type: ClusterIP" in yaml_content # 4. Verify cleanup assert str(rmtree_recorder.get_last_call_args()[0]) == str(tmp_path) diff --git a/tests/unittests/cli/utils/test_gcp_utils.py b/tests/unittests/cli/utils/test_gcp_utils.py new file mode 100644 index 0000000000..962359eb4b --- /dev/null +++ b/tests/unittests/cli/utils/test_gcp_utils.py @@ -0,0 +1,159 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for gcp_utils.""" + +import unittest +from unittest import mock + +from google.adk.cli.utils import gcp_utils +import google.auth +import google.auth.exceptions +import requests + + +class TestGcpUtils(unittest.TestCase): + + @mock.patch("google.auth.default") + def test_check_adc_success(self, mock_auth_default): + mock_auth_default.return_value = (mock.Mock(), "test-project") + self.assertTrue(gcp_utils.check_adc()) + + @mock.patch("google.auth.default") + def test_check_adc_failure(self, mock_auth_default): + mock_auth_default.side_effect = ( + google.auth.exceptions.DefaultCredentialsError() + ) + self.assertFalse(gcp_utils.check_adc()) + + @mock.patch("google.auth.default") + def test_get_access_token(self, mock_auth_default): + mock_creds = mock.Mock() + mock_creds.token = "test-token" + mock_creds.valid = True + mock_auth_default.return_value = (mock_creds, "test-project") + self.assertEqual(gcp_utils.get_access_token(), "test-token") + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_retrieve_express_project_success( + self, mock_auth_default, mock_session_cls + ): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = { + "expressProject": { + "projectId": "test-project", + "defaultApiKey": "test-api-key", + "region": "us-central1", + } + } + mock_session.get.return_value = mock_response + + result = gcp_utils.retrieve_express_project() + self.assertEqual(result["project_id"], "test-project") + self.assertEqual(result["api_key"], "test-api-key") + self.assertEqual(result["region"], "us-central1") + mock_session.get.assert_called_once() + args, kwargs = mock_session.get.call_args + self.assertEqual( + args[0], + "https://us-central1-aiplatform.googleapis.com/v1beta1/vertexExpress:retrieveExpressProject", + ) + self.assertEqual(kwargs["params"], {"get_default_api_key": True}) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_retrieve_express_project_not_found( + self, mock_auth_default, mock_session_cls + ): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.status_code = 404 + mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError( + response=mock_response + ) + mock_session.get.return_value = mock_response + + result = gcp_utils.retrieve_express_project() + self.assertIsNone(result) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_check_express_eligibility(self, mock_auth_default, mock_session_cls): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = {"eligibility": "IN_SCOPE"} + mock_session.get.return_value = mock_response + + self.assertTrue(gcp_utils.check_express_eligibility()) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_sign_up_express(self, mock_auth_default, mock_session_cls): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = { + "projectId": "new-project", + "defaultApiKey": "new-api-key", + "region": "us-central1", + } + mock_session.post.return_value = mock_response + + result = gcp_utils.sign_up_express() + self.assertEqual(result["project_id"], "new-project") + self.assertEqual(result["api_key"], "new-api-key") + args, _ = mock_session.post.call_args + self.assertEqual( + args[0], + "https://us-central1-aiplatform.googleapis.com/v1beta1/vertexExpress:signUp", + ) + + @mock.patch( + "google.adk.cli.utils.gcp_utils.resourcemanager_v3.ProjectsClient" + ) + def test_list_gcp_projects(self, mock_client_cls): + mock_client = mock.Mock() + mock_client_cls.return_value = mock_client + + mock_project1 = mock.Mock() + mock_project1.project_id = "p1" + mock_project1.display_name = "Project 1" + + mock_project2 = mock.Mock() + mock_project2.project_id = "p2" + mock_project2.display_name = None + + mock_client.search_projects.return_value = [mock_project1, mock_project2] + + projects = gcp_utils.list_gcp_projects() + self.assertEqual(len(projects), 2) + self.assertEqual(projects[0], ("p1", "Project 1")) + self.assertEqual(projects[1], ("p2", "p2")) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py b/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py index 9b27b82c20..78c7c5cd33 100644 --- a/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py +++ b/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py @@ -13,6 +13,7 @@ # limitations under the License. import json +import os from unittest.mock import MagicMock from unittest.mock import patch @@ -249,3 +250,101 @@ def test_execute_code_creates_sandbox_if_missing( name=created_sandbox_name, input_data={"code": 'print("hello world")'}, ) + + def test_init_with_agent_engine_resource_name(self): + """Tests init when only agent_engine_resource_name is provided.""" + agent_engine_name = ( + "projects/123/locations/us-central1/reasoningEngines/456" + ) + + executor = AgentEngineSandboxCodeExecutor( + agent_engine_resource_name=agent_engine_name + ) + + # Verify the engine name is set, and sandbox remains None. + assert executor.agent_engine_resource_name == agent_engine_name + assert executor.sandbox_resource_name is None + assert executor._project_id == "123" + assert executor._location == "us-central1" + + @patch("vertexai.Client") + @patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test-project-456", + "GOOGLE_CLOUD_LOCATION": "us-central1", + }, + ) + def test_execute_code_with_auto_create_agent_engine( + self, mock_vertexai_client, mock_invocation_context + ): + """Tests that Agent Engine is created lazily in execute_code.""" + # Setup Mocks + mock_api_client = MagicMock() + mock_vertexai_client.return_value = mock_api_client + + # Mock Engine Creation + mock_created_engine = MagicMock() + mock_created_engine.api_resource.name = "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1" + mock_api_client.agent_engines.create.return_value = mock_created_engine + + # Mock create operation to return a sandbox resource name + operation_mock = MagicMock() + created_sandbox_name = "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1/sandboxEnvironments/789" + operation_mock.response.name = created_sandbox_name + mock_api_client.agent_engines.sandboxes.create.return_value = operation_mock + + # Mock execute_code response + mock_response = MagicMock() + mock_json_output = MagicMock() + mock_json_output.mime_type = "application/json" + mock_json_output.data = json.dumps( + {"stdout": "created sandbox run", "stderr": ""} + ).encode("utf-8") + mock_json_output.metadata = None + mock_response.outputs = [mock_json_output] + mock_api_client.agent_engines.sandboxes.execute_code.return_value = ( + mock_response + ) + + # Execute + executor = AgentEngineSandboxCodeExecutor() + code_input = CodeExecutionInput(code='print("hello world")') + executor.execute_code(mock_invocation_context, code_input) + + # Assert + mock_api_client.agent_engines.create.assert_called_once() + assert ( + executor.agent_engine_resource_name + == "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1" + ) + assert executor.sandbox_resource_name is None + mock_api_client.agent_engines.sandboxes.create.assert_called_once() + assert ( + mock_invocation_context.session.state["sandbox_name"] + == created_sandbox_name + ) + + @patch("vertexai.Client") + @patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test-project-456", + "GOOGLE_CLOUD_LOCATION": "us-central1", + }, + ) + def test_execute_code_auto_create_agent_engine_fails( + self, mock_vertexai_client, mock_invocation_context + ): + """Tests error handling when auto-creating Agent Engine fails.""" + mock_api_client = MagicMock() + mock_vertexai_client.return_value = mock_api_client + mock_api_client.agent_engines.create.side_effect = Exception( + "Failed to auto-create Agent Engine" + ) + + executor = AgentEngineSandboxCodeExecutor() + code_input = CodeExecutionInput(code='print("hello world")') + + with pytest.raises(Exception, match="Failed to auto-create Agent Engine"): + executor.execute_code(mock_invocation_context, code_input) diff --git a/tests/unittests/code_executors/test_unsafe_local_code_executor.py b/tests/unittests/code_executors/test_unsafe_local_code_executor.py index f8d5f496a8..fa22e1bbbf 100644 --- a/tests/unittests/code_executors/test_unsafe_local_code_executor.py +++ b/tests/unittests/code_executors/test_unsafe_local_code_executor.py @@ -121,3 +121,13 @@ def run(): assert result.stderr == "" assert result.stdout == "hi ada\n" + + def test_execute_code_timeout( + self, mock_invocation_context: InvocationContext + ): + executor = UnsafeLocalCodeExecutor(timeout_seconds=1) + code_input = CodeExecutionInput(code="import time\ntime.sleep(2)") + result = executor.execute_code(mock_invocation_context, code_input) + + assert result.stdout == "" + assert "Code execution timed out after 1 seconds." in result.stderr diff --git a/tests/unittests/evaluation/test_evaluation_generator.py b/tests/unittests/evaluation/test_evaluation_generator.py index 29ac75ffb5..a4aa8691fd 100644 --- a/tests/unittests/evaluation/test_evaluation_generator.py +++ b/tests/unittests/evaluation/test_evaluation_generator.py @@ -204,6 +204,28 @@ def test_multi_agent( assert events[2].author == "sub_agent_1" assert events[3].author == "sub_agent_2" + def test_convert_multi_agent_final_responses( + self, + ): + """Tests that only the last final response is excluded from intermediate data.""" + events = [ + _build_event("user", [types.Part(text="Hello")], "inv1"), + _build_event("agent1", [types.Part(text="First response")], "inv1"), + _build_event("agent2", [types.Part(text="Second response")], "inv1"), + ] + + invocations = EvaluationGenerator.convert_events_to_eval_invocations(events) + + assert len(invocations) == 1 + invocation = invocations[0] + assert invocation.final_response.parts[0].text == "Second response" + + intermediate_events = invocation.intermediate_data.invocation_events + # agent1 is included because it is not the final_event (which is agent2) + assert len(intermediate_events) == 1 + assert intermediate_events[0].author == "agent1" + assert intermediate_events[0].content.parts[0].text == "First response" + class TestGetAppDetailsByInvocationId: """Test cases for EvaluationGenerator._get_app_details_by_invocation_id method.""" diff --git a/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py b/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py new file mode 100644 index 0000000000..aa260bf27b --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Task Success Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_task_success_evaluator import MultiTurnTaskSuccessV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnTaskSuccessV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn task success metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnTaskSuccessV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_task_success" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TASK_SUCCESS.name + ] diff --git a/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py b/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py new file mode 100644 index 0000000000..330d5bdff5 --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Tool Use Quality Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_tool_use_quality_evaluator import MultiTurnToolUseQualityV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnToolUseQualityV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn tool use quality metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnToolUseQualityV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_tool_use_quality" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TOOL_USE_QUALITY.name + ] diff --git a/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py b/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py new file mode 100644 index 0000000000..6ab4bf1fda --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Trajectory Quality Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_trajectory_quality_evaluator import MultiTurnTrajectoryQualityV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnTrajectoryQualityV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn trajectory quality metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnTrajectoryQualityV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_trajectory_quality" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TRAJECTORY_QUALITY.name + ] diff --git a/tests/unittests/evaluation/test_vertex_ai_eval_facade.py b/tests/unittests/evaluation/test_vertex_ai_eval_facade.py index dbef1010dd..285f8c7062 100644 --- a/tests/unittests/evaluation/test_vertex_ai_eval_facade.py +++ b/tests/unittests/evaluation/test_vertex_ai_eval_facade.py @@ -20,8 +20,13 @@ import random from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade from google.adk.evaluation.vertex_ai_eval_facade import _SingleTurnVertexAiEvalFacade from google.adk.evaluation.vertex_ai_eval_facade import _VertexAiEvalFacade from google.genai import types as genai_types @@ -272,6 +277,7 @@ def test_constructor_with_api_key(self, mocker): mock_client_cls.assert_called_once_with(api_key="test_api_key") def test_constructor_with_project_and_location(self, mocker): + mocker.patch.dict( os.environ, { @@ -327,3 +333,262 @@ def test_constructor_with_no_env_vars_raises_error(self, mocker): _SingleTurnVertexAiEvalFacade( threshold=0.8, metric_name=vertexai_types.PrebuiltMetric.COHERENCE ) + + +class TestMultiTurnVertexAiEvalFacade: + """Tests for _MultiTurnVertexiAiEvalFacade.""" + + def test_map_agent_details_to_agent_config(self): + tool_declarations = [ + genai_types.Tool( + function_declarations=[ + genai_types.FunctionDeclaration( + name="tool_1", + description="this is tool 1", + ) + ] + ) + ] + agent_details = AgentDetails( + name="test_agent", + instructions="test_instructions", + tool_declarations=tool_declarations, + ) + agent_config = ( + _MultiTurnVertexiAiEvalFacade._map_agent_details_to_agent_config( + agent_details + ) + ) + assert agent_config.agent_id == "test_agent" + assert agent_config.instruction == "test_instructions" + assert agent_config.tools == tool_declarations + + def test_get_agent_details(self): + invocations = [ + Invocation( + user_content=genai_types.Content(), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ), + "agent2": AgentDetails( + name="agent2", instructions="instructions2" + ), + } + ), + ), + Invocation( + user_content=genai_types.Content(), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ), + "agent3": AgentDetails( + name="agent3", instructions="instructions3" + ), + } + ), + ), + ] + agent_configs = _MultiTurnVertexiAiEvalFacade._get_agent_details( + invocations + ) + assert len(agent_configs) == 3 + assert "agent1" in agent_configs + assert "agent2" in agent_configs + assert "agent3" in agent_configs + assert agent_configs["agent1"].instruction == "instructions1" + assert agent_configs["agent2"].instruction == "instructions2" + assert agent_configs["agent3"].instruction == "instructions3" + + def test_map_invocation_event_to_agent_event(self): + invocation_event = InvocationEvent( + author="test_author", + content=genai_types.Content( + parts=[genai_types.Part(text="test_content")] + ), + ) + agent_event = ( + _MultiTurnVertexiAiEvalFacade._map_inovcation_event_to_agent_event( + invocation_event + ) + ) + assert agent_event.author == "test_author" + assert agent_event.content.parts[0].text == "test_content" + + def test_map_invocation_turn(self): + invocation = Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="user query")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate content")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="final response")] + ), + ) + conversation_turn = _MultiTurnVertexiAiEvalFacade._map_invocation_turn( + 0, invocation + ) + assert conversation_turn.turn_index == 0 + assert conversation_turn.turn_id == "inv1" + assert len(conversation_turn.events) == 3 + assert conversation_turn.events[0].author == "user" + assert conversation_turn.events[0].content.parts[0].text == "user query" + assert conversation_turn.events[1].author == "agent1" + assert ( + conversation_turn.events[1].content.parts[0].text + == "intermediate content" + ) + assert conversation_turn.events[2].author == "agent" + assert conversation_turn.events[2].content.parts[0].text == "final response" + + def test_get_turns(self): + invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + ), + ] + turns = _MultiTurnVertexiAiEvalFacade._get_turns(invocations) + assert len(turns) == 2 + assert turns[0].turn_id == "inv1" + assert turns[1].turn_id == "inv2" + + def test_get_agent_data(self): + invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ) + ] + agent_data = _MultiTurnVertexiAiEvalFacade._get_agent_data(invocations) + assert "agent1" in agent_data.agents + assert len(agent_data.turns) == 1 + + def test_evaluate_invocations_multi_turn_metric_passed(self, mocker): + """Test evaluate_invocations function for a multi-turn metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = _MultiTurnVertexiAiEvalFacade( + threshold=0.8, + metric_name=vertexai_types.PrebuiltMetric.CONVERSATIONAL_COHERENCE, + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations(actual_invocations) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + assert len(evaluation_result.per_invocation_results) == 2 + assert ( + evaluation_result.per_invocation_results[0].eval_status + == EvalStatus.NOT_EVALUATED + ) + assert ( + evaluation_result.per_invocation_results[1].eval_status + == EvalStatus.PASSED + ) + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.PrebuiltMetric.CONVERSATIONAL_COHERENCE.name + ] + dataset = mock_kwargs["dataset"] + assert len(dataset.eval_cases) == 1 + agent_data = dataset.eval_cases[0].agent_data + assert "agent1" in agent_data.agents + assert len(agent_data.turns) == 2 + assert agent_data.turns[0].turn_id == "inv1" + assert agent_data.turns[1].turn_id == "inv2" + assert len(agent_data.turns[1].events) == 3 # user, intermediate, agent diff --git a/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py b/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py new file mode 100644 index 0000000000..b28e205851 --- /dev/null +++ b/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py @@ -0,0 +1,155 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Vertex AI Scenario Generation Facade.""" + +from __future__ import annotations + +import os + +from google.adk.agents.base_agent import BaseAgent +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation._vertex_ai_scenario_generation_facade import ScenarioGenerator +from google.adk.evaluation.conversation_scenarios import ConversationGenerationConfig +import pytest + +vertexai_types = vertexai.types + + +class TestScenarioGenerator: + """Unit tests for ScenarioGenerator.""" + + def test_constructor_with_api_key(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_API_KEY": "test_api_key"}, clear=True + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + ScenarioGenerator() + + mock_client_cls.assert_called_once_with(api_key="test_api_key") + + def test_constructor_with_project_and_location(self, mocker): + """Test constructor with project and location in env.""" + mocker.patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test_project", + "GOOGLE_CLOUD_LOCATION": "test_location", + }, + clear=True, + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + ScenarioGenerator() + + mock_client_cls.assert_called_once_with( + project="test_project", location="test_location" + ) + + def test_constructor_with_project_only_raises_error(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_CLOUD_PROJECT": "test_project"}, clear=True + ) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises(ValueError, match="Missing location."): + ScenarioGenerator() + + def test_constructor_with_location_only_raises_error(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_CLOUD_LOCATION": "test_location"}, clear=True + ) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises(ValueError, match="Missing project id."): + ScenarioGenerator() + + def test_constructor_with_no_env_vars_raises_error(self, mocker): + mocker.patch.dict(os.environ, {}, clear=True) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises( + ValueError, + match=( + "Either API Key or Google cloud Project id and location should be" + " specified." + ), + ): + ScenarioGenerator() + + def test_generate_scenarios(self, mocker): + """Test scenario generation with mocked components.""" + mocker.patch.dict( + os.environ, {"GOOGLE_API_KEY": "test_api_key"}, clear=True + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + mock_client = mock_client_cls.return_value + + # I need to mock AgentInfo.load_from_agent(agent=agent) + mock_agent_info_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.types.evals.AgentInfo" + ) + mock_agent_info_cls.load_from_agent.return_value = "mock_agent_info" + + mock_generate = mocker.patch.object( + mock_client.evals, "generate_conversation_scenarios" + ) + + mock_eval_cases = [ + mocker.Mock( + user_scenario=mocker.Mock( + starting_prompt="Hello", conversation_plan="Say hello" + ) + ), + mocker.Mock(user_scenario=None), # testing handling of None + mocker.Mock( + user_scenario=mocker.Mock( + starting_prompt="Bye", conversation_plan="Say bye" + ) + ), + ] + mock_generate.return_value = mocker.Mock(eval_cases=mock_eval_cases) + + generator = ScenarioGenerator() + + mock_agent = mocker.Mock(spec=BaseAgent) + config = ConversationGenerationConfig( + count=2, + generation_instruction="Test generation", + model_name="gemini-2.5-flash", + ) + + scenarios = generator.generate_scenarios(mock_agent, config) + + assert len(scenarios) == 2 + assert scenarios[0].starting_prompt == "Hello" + assert scenarios[0].conversation_plan == "Say hello" + assert scenarios[1].starting_prompt == "Bye" + assert scenarios[1].conversation_plan == "Say bye" + + mock_agent_info_cls.load_from_agent.assert_called_once_with( + agent=mock_agent + ) + + mock_generate.assert_called_once() + _, kwargs = mock_generate.call_args + assert kwargs["agent_info"] == "mock_agent_info" + passed_config = kwargs["config"] + assert passed_config.count == 2 + assert passed_config.generation_instruction == "Test generation" diff --git a/tests/unittests/flows/llm_flows/test_base_llm_flow.py b/tests/unittests/flows/llm_flows/test_base_llm_flow.py index 3dfadbcabf..7e3d4d8339 100644 --- a/tests/unittests/flows/llm_flows/test_base_llm_flow.py +++ b/tests/unittests/flows/llm_flows/test_base_llm_flow.py @@ -284,7 +284,6 @@ async def test_handle_after_model_callback_grounding_with_no_callbacks( invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -341,7 +340,6 @@ async def test_handle_after_model_callback_grounding_with_callback_override( invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -403,7 +401,6 @@ def __init__(self): invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -430,6 +427,7 @@ class MockGoogleSearchTool(BaseTool): def __init__(self): super().__init__(name='google_search_agent', description='Mock search') + self.propagate_grounding_metadata = True async def call(self, **kwargs): return 'mock result' @@ -459,7 +457,6 @@ async def call(self, **kwargs): invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() # Call _handle_after_model_callback multiple times with the same context result1 = await _handle_after_model_callback( @@ -487,3 +484,500 @@ async def call(self, **kwargs): assert result1.grounding_metadata == {'foo': 'bar'} assert result2.grounding_metadata == {'foo': 'bar'} assert result3.grounding_metadata == {'foo': 'bar'} + + +@pytest.mark.asyncio +async def test_run_live_reconnects_on_connection_closed(): + """Test that run_live reconnects when ConnectionClosed occurs.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate receiving a session resumption handle from the server. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + # Simulate connection dropping, triggering reconnection logic. + raise ConnectionClosed(None, None) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class NonRetryableError(Exception): + pass + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise non-retryable exception to exit the loop and finish test. + raise NonRetryableError('stop') + + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (drops), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + events = [] + try: + async for event in flow.run_live(invocation_context): + events.append(event) + except NonRetryableError: + pass + + # Verify that we attempted to connect twice (initial + reconnect). + assert mock_connect.call_count == 2 + assert invocation_context.live_session_resumption_handle == 'test_handle' + + +@pytest.mark.asyncio +async def test_run_live_reconnects_on_api_error(): + """Test that run_live reconnects when APIError occurs.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from google.genai.errors import APIError + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate receiving a session resumption handle from the server. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + # Simulate an API error occurring, triggering reconnection logic. + raise APIError(1000, {}) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class NonRetryableError(Exception): + pass + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise non-retryable exception to exit the loop and finish test. + raise NonRetryableError('stop') + + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (fails with APIError), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + events = [] + try: + async for event in flow.run_live(invocation_context): + events.append(event) + except NonRetryableError: + pass + + # Verify that we attempted to connect twice (initial + reconnect). + assert mock_connect.call_count == 2 + assert invocation_context.live_session_resumption_handle == 'test_handle' + + +@pytest.mark.asyncio +async def test_run_live_skips_send_history_on_resumption(): + """Test that run_live skips send_history when resuming a session.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + # Set resumption handle to simulate a resumed session. + invocation_context.live_session_resumption_handle = 'test_handle' + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + async def mock_preprocess(ctx, req): + req.contents = [types.Content(parts=[types.Part.from_text(text='history')])] + if False: + yield + + with mock.patch.object( + flow, '_preprocess_async', side_effect=mock_preprocess + ): + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + + # We need a way to break the infinite loop in run_live for testing. + class StopError(Exception): + pass + + async def mock_receive(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise StopError to exit the loop and finish test. + raise StopError('stop') + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.return_value = mock_connection + + try: + async for _ in flow.run_live(invocation_context): + pass + except StopError: + pass + + # Verify that send_history was not called because we resumed. + mock_connection.send_history.assert_not_called() + + +@pytest.mark.asyncio +async def test_live_session_resumption_go_away(): + """Test that go_away triggers reconnection.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + invocation_context.live_session_resumption_handle = 'old_handle' + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class StopError(Exception): + pass + + async def mock_receive_1(): + # Simulate receiving a go_away signal from the server. + yield LlmResponse(go_away=types.LiveServerGoAway()) + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise StopError to exit the loop and finish test. + raise StopError('stop') + + mock_connection.receive = mock.Mock(side_effect=mock_receive_1) + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (receives go_away), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + try: + async for _ in flow.run_live(invocation_context): + pass + except StopError: + pass + + # Verify that we attempted to connect twice (initial + reconnect after go_away). + assert mock_connect.call_count == 2 + + +@pytest.mark.asyncio +async def test_run_live_no_reconnect_without_handle(): + """Test that run_live does not reconnect when handle is missing.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate connection drop without any handle update. + if False: + yield + raise ConnectionClosed(None, None) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + # Ensure no handle is set + invocation_context.live_session_resumption_handle = None + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.return_value = mock_connection + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + # Verify that we only attempted to connect once. + assert mock_connect.call_count == 1 + + +@pytest.mark.asyncio +async def test_run_live_reconnect_limit(): + """Test that run_live stops reconnecting after 5 attempts.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + + connection_cnt = 0 + + async def mock_connect_impl(*args, **kwargs): + nonlocal connection_cnt + connection_cnt += 1 + conn = mock.AsyncMock() + + async def mock_receive(): + if connection_cnt == 1: + # Yield handle only on the first connection. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ), + turn_complete=True, + ) + # All subsequent receives (and all receives on later connections) fail. + raise ConnectionClosed(None, None) + + conn.receive = mock.Mock(side_effect=mock_receive) + return conn + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + # Mock the async context manager + mock_connect.return_value.__aenter__.side_effect = mock_connect_impl + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + from google.adk.flows.llm_flows.base_llm_flow import DEFAULT_MAX_RECONNECT_ATTEMPTS + + # 1 initial attempt + DEFAULT_MAX_RECONNECT_ATTEMPTS retries + assert mock_connect.call_count == DEFAULT_MAX_RECONNECT_ATTEMPTS + 1 + + +@pytest.mark.asyncio +async def test_run_live_reconnect_reset_attempt(): + """Test that attempt counter is reset on successful communication.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from google.adk.flows.llm_flows.base_llm_flow import DEFAULT_MAX_RECONNECT_ATTEMPTS + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + + connection_cnt = 0 + + async def mock_connect_impl(*args, **kwargs): + nonlocal connection_cnt + connection_cnt += 1 + conn = mock.AsyncMock() + + async def mock_receive(): + if connection_cnt <= 2: + # Yield handle on the first two connections. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ), + turn_complete=True, + ) + # All subsequent receives fail. + raise ConnectionClosed(None, None) + + conn.receive = mock.Mock(side_effect=mock_receive) + return conn + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.side_effect = mock_connect_impl + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + # We expect 2 successful attempts + DEFAULT_MAX_RECONNECT_ATTEMPTS failed attempts + # Total calls = 2 + 5 = 7 + assert mock_connect.call_count == DEFAULT_MAX_RECONNECT_ATTEMPTS + 2 + + +@pytest.mark.asyncio +async def test_postprocess_live_session_resumption_update(): + """Test that _postprocess_live yields live_session_resumption_update.""" + agent = Agent(name='test_agent') + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + flow = BaseLlmFlowForTesting() + + llm_request = LlmRequest() + llm_response = LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author=agent.name, + ) + + events = [] + async for event in flow._postprocess_live( + invocation_context, llm_request, llm_response, model_response_event + ): + events.append(event) + + assert len(events) == 1 + assert events[0].live_session_resumption_update is not None + assert events[0].live_session_resumption_update.new_handle == 'test_handle' + + +@pytest.mark.asyncio +async def test_receive_from_model_author_attribution(): + """Test that _receive_from_model sets the correct author for events based on LlmResponse.""" + agent = Agent(name='test_agent') + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + flow = BaseLlmFlowForTesting() + + mock_connection = mock.AsyncMock() + + # Case 1: input_transcription is set -> author should be 'user' + response_1 = LlmResponse( + input_transcription=types.Transcription(text='test', finished=True) + ) + + # Case 2: default -> author should be agent.name + response_2 = LlmResponse( + content=types.Content( + role='model', parts=[types.Part.from_text(text='hello')] + ) + ) + + # Case 3: content.role is 'user' -> author should be 'user' + response_3 = LlmResponse( + content=types.Content( + role='user', parts=[types.Part.from_text(text='user text')] + ) + ) + + class StopTest(Exception): + pass + + async def mock_receive(): + yield response_1 + yield response_2 + yield response_3 + raise StopTest() + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + events = [] + try: + async for event in flow._receive_from_model( + mock_connection, 'event_id', invocation_context, LlmRequest() + ): + events.append(event) + except StopTest: + pass + + assert len(events) == 3 + assert events[0].author == 'user' + assert events[1].author == 'test_agent' + assert events[2].author == 'user' diff --git a/tests/unittests/flows/llm_flows/test_contents.py b/tests/unittests/flows/llm_flows/test_contents.py index b762068d31..a028c5c5df 100644 --- a/tests/unittests/flows/llm_flows/test_contents.py +++ b/tests/unittests/flows/llm_flows/test_contents.py @@ -1068,3 +1068,30 @@ async def test_adk_function_call_ids_preserved_for_interactions_model(): user_fr_part = llm_request.contents[2].parts[0] assert user_fr_part.function_response is not None assert user_fr_part.function_response.id == function_call_id + + +def test_is_other_agent_reply_live_session(): + """Test _is_other_agent_reply when live_session_id is present.""" + event = Event(author="another_agent", live_session_id="session_123") + assert contents._is_other_agent_reply("current_agent", event) is True + + event = Event(author="user", live_session_id="session_123") + assert contents._is_other_agent_reply("current_agent", event) is False + + event = Event(author="current_agent", live_session_id="session_123") + assert contents._is_other_agent_reply("current_agent", event) is True + + +def test_is_other_agent_reply_non_live_session(): + """Test _is_other_agent_reply when live_session_id is not present.""" + event = Event(author="another_agent") + assert contents._is_other_agent_reply("current_agent", event) is True + + event = Event(author="user") + assert contents._is_other_agent_reply("current_agent", event) is False + + event = Event(author="current_agent") + assert contents._is_other_agent_reply("current_agent", event) is False + + event = Event(author="another_agent") + assert contents._is_other_agent_reply("", event) is False diff --git a/tests/unittests/flows/llm_flows/test_functions_simple.py b/tests/unittests/flows/llm_flows/test_functions_simple.py index 7aacb237e5..f63cefeb45 100644 --- a/tests/unittests/flows/llm_flows/test_functions_simple.py +++ b/tests/unittests/flows/llm_flows/test_functions_simple.py @@ -18,6 +18,8 @@ from google.adk.agents.llm_agent import Agent from google.adk.events.event import Event +from google.adk.events.event_actions import EventActions +from google.adk.events.ui_widget import UiWidget from google.adk.flows.llm_flows.functions import find_matching_function_call from google.adk.flows.llm_flows.functions import handle_function_calls_async from google.adk.flows.llm_flows.functions import handle_function_calls_live @@ -1138,6 +1140,45 @@ async def yielding_async() -> dict: ] +def test_merge_parallel_function_response_events_merges_ui_widgets(): + """Test that merge_parallel_function_response_events merges render_ui_widgets.""" + invocation_id = 'base_invocation_123' + + widget1 = UiWidget( + id='widget_1', provider='mcp', payload={'resource_uri': 'ui://widget1'} + ) + widget2 = UiWidget( + id='widget_2', provider='mcp', payload={'resource_uri': 'ui://widget2'} + ) + widget3 = UiWidget( + id='widget_3', provider='mcp', payload={'resource_uri': 'ui://widget3'} + ) + + event1 = Event( + invocation_id=invocation_id, + author='test_agent', + actions=EventActions(render_ui_widgets=[widget1]), + ) + + event2 = Event( + invocation_id='different_invocation_456', + author='different_agent', + actions=EventActions(render_ui_widgets=[widget2, widget3]), + ) + + # Merge the events + merged_event = merge_parallel_function_response_events([event1, event2]) + + # Should contain all ui widgets + assert merged_event.actions.render_ui_widgets is not None + assert len(merged_event.actions.render_ui_widgets) == 3 + + widget_ids = {widget.id for widget in merged_event.actions.render_ui_widgets} + assert 'widget_1' in widget_ids + assert 'widget_2' in widget_ids + assert 'widget_3' in widget_ids + + @pytest.mark.asyncio @pytest.mark.parametrize( 'handle_function_calls', diff --git a/tests/unittests/flows/llm_flows/test_functions_thread_pool.py b/tests/unittests/flows/llm_flows/test_functions_thread_pool.py index d3d3b00a18..e134a555c1 100644 --- a/tests/unittests/flows/llm_flows/test_functions_thread_pool.py +++ b/tests/unittests/flows/llm_flows/test_functions_thread_pool.py @@ -15,6 +15,7 @@ """Tests for thread pool execution of tools in Live API mode.""" import asyncio +import contextvars import threading import time @@ -349,6 +350,54 @@ def sync_func() -> dict: pool = _get_tool_thread_pool(max_workers=12) assert pool is not None + @pytest.mark.asyncio + async def test_contextvars_propagation_sync_tool(self): + """Test that contextvars propagate to sync tools in thread pool.""" + test_var = contextvars.ContextVar('test_var', default='default') + test_var.set('main_thread_value') + + def sync_func() -> dict[str, str]: + return {'value': test_var.get()} + + tool = FunctionTool(sync_func) + model = testing_utils.MockModel.create(responses=[]) + agent = Agent(name='test_agent', model=model, tools=[tool]) + invocation_context = await testing_utils.create_invocation_context( + agent=agent, user_content='' + ) + tool_context = ToolContext( + invocation_context=invocation_context, + function_call_id='test_id', + ) + + result = await _call_tool_in_thread_pool(tool, {}, tool_context) + + assert result == {'value': 'main_thread_value'} + + @pytest.mark.asyncio + async def test_contextvars_propagation_async_tool(self): + """Test that contextvars propagate to async tools in thread pool.""" + test_var = contextvars.ContextVar('test_var', default='default') + test_var.set('main_thread_value') + + async def async_func() -> dict[str, str]: + return {'value': test_var.get()} + + tool = FunctionTool(async_func) + model = testing_utils.MockModel.create(responses=[]) + agent = Agent(name='test_agent', model=model, tools=[tool]) + invocation_context = await testing_utils.create_invocation_context( + agent=agent, user_content='' + ) + tool_context = ToolContext( + invocation_context=invocation_context, + function_call_id='test_id', + ) + + result = await _call_tool_in_thread_pool(tool, {}, tool_context) + + assert result == {'value': 'main_thread_value'} + class TestToolThreadPoolConfig: """Tests for the tool_thread_pool_config in RunConfig.""" diff --git a/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py b/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py new file mode 100644 index 0000000000..cb7a0e545c --- /dev/null +++ b/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py @@ -0,0 +1,387 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests that before/after/error model callbacks all observe the same call_llm span. + +Regression tests for https://github.com/google/adk-python/issues/4851. +""" + +from typing import AsyncGenerator +from typing import Optional + +from google.adk.agents.callback_context import CallbackContext +from google.adk.agents.llm_agent import Agent +from google.adk.agents.run_config import RunConfig +from google.adk.agents.run_config import StreamingMode +from google.adk.events.event import Event +from google.adk.flows.llm_flows.base_llm_flow import BaseLlmFlow +from google.adk.models.llm_request import LlmRequest +from google.adk.models.llm_response import LlmResponse +from google.adk.plugins.base_plugin import BasePlugin +from google.adk.utils.context_utils import Aclosing +from google.genai import types +from google.genai.errors import ClientError +from opentelemetry import trace +from opentelemetry.sdk.trace import TracerProvider +import pytest + +from ... import testing_utils + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +_SPAN_ID_INVALID = 0 + + +class _SpanCapture: + """Stores the span ID and trace ID observed from within a callback.""" + + def __init__(self): + self.span_id: int = _SPAN_ID_INVALID + self.trace_id: int = 0 + + def capture(self): + span = trace.get_current_span() + ctx = span.get_span_context() + if ctx and ctx.span_id != _SPAN_ID_INVALID: + self.span_id = ctx.span_id + self.trace_id = ctx.trace_id + + +class SpanCapturingPlugin(BasePlugin): + """Plugin that records the active span ID in each callback.""" + + def __init__(self): + self.name = 'span_capturing_plugin' + self.before_capture = _SpanCapture() + self.after_capture = _SpanCapture() + self.error_capture = _SpanCapture() + + self._short_circuit_before = False + self._short_circuit_response: Optional[LlmResponse] = None + + async def before_model_callback( + self, + *, + callback_context: CallbackContext, + llm_request: LlmRequest, + ) -> Optional[LlmResponse]: + self.before_capture.capture() + if self._short_circuit_before: + return self._short_circuit_response + return None + + async def after_model_callback( + self, + *, + callback_context: CallbackContext, + llm_response: LlmResponse, + ) -> Optional[LlmResponse]: + self.after_capture.capture() + return None + + async def on_model_error_callback( + self, + *, + callback_context: CallbackContext, + llm_request: LlmRequest, + error: Exception, + ) -> Optional[LlmResponse]: + self.error_capture.capture() + # Return a response so the error doesn't propagate. + return LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='error_handled')] + ) + ) + + +# Install a real TracerProvider so spans are recorded (not NoOp). +# This must happen at module level *before* any tracer is obtained, +# because the OTel SDK only allows setting the provider once. +_provider = TracerProvider() +trace.set_tracer_provider(_provider) + + +_MOCK_ERROR = ClientError( + code=500, + response_json={ + 'error': { + 'code': 500, + 'message': 'Model error.', + 'status': 'INTERNAL', + } + }, +) + + +# --------------------------------------------------------------------------- +# Tests: non-CFC success path +# --------------------------------------------------------------------------- + + +def test_before_and_after_callbacks_share_same_span(): + """before_model_callback and after_model_callback see the same span ID.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['hello']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span' + assert ( + plugin.after_capture.span_id != _SPAN_ID_INVALID + ), 'after_model_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.after_capture.span_id, ( + 'before_model_callback and after_model_callback saw different spans:' + f' before={plugin.before_capture.span_id:#x},' + f' after={plugin.after_capture.span_id:#x}' + ) + + +def test_callbacks_same_trace_id(): + """before and after callbacks are in the same trace.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['hello']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert plugin.before_capture.trace_id != 0 + assert ( + plugin.before_capture.trace_id == plugin.after_capture.trace_id + ), 'before and after callbacks are in different traces' + + +# --------------------------------------------------------------------------- +# Tests: non-CFC error path +# --------------------------------------------------------------------------- + + +def test_before_and_error_callbacks_share_same_span(): + """before_model_callback and on_model_error_callback see the same span.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(error=_MOCK_ERROR, responses=[]) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span' + assert ( + plugin.error_capture.span_id != _SPAN_ID_INVALID + ), 'on_model_error_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.error_capture.span_id, ( + 'before_model_callback and on_model_error_callback saw different' + f' spans: before={plugin.before_capture.span_id:#x},' + f' error={plugin.error_capture.span_id:#x}' + ) + + +# --------------------------------------------------------------------------- +# Tests: short-circuit path (before_model_callback returns a response) +# --------------------------------------------------------------------------- + + +def test_short_circuit_before_callback_sees_valid_span(): + """When before_model_callback short-circuits, it sees call_llm span.""" + plugin = SpanCapturingPlugin() + plugin._short_circuit_before = True + plugin._short_circuit_response = LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='short_circuited')] + ) + ) + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span on short-circuit' + # after_model_callback should NOT have been called. + assert plugin.after_capture.span_id == _SPAN_ID_INVALID + + +# --------------------------------------------------------------------------- +# Tests: all three callbacks share same span on error path +# --------------------------------------------------------------------------- + + +def test_all_three_callbacks_share_span_on_error(): + """A plugin that implements all three callbacks sees the same span ID. + + When the LLM errors and on_model_error_callback returns a recovery + response, after_model_callback also runs on that response. All three + callbacks must observe the same call_llm span. + """ + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(error=_MOCK_ERROR, responses=[]) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + # All three callbacks should have been called with valid spans. + assert plugin.before_capture.span_id != _SPAN_ID_INVALID + assert plugin.error_capture.span_id != _SPAN_ID_INVALID + assert plugin.after_capture.span_id != _SPAN_ID_INVALID + # And they should all share the same call_llm span. + assert ( + plugin.before_capture.span_id == plugin.error_capture.span_id + ), 'before and error callbacks saw different spans' + assert ( + plugin.before_capture.span_id == plugin.after_capture.span_id + ), 'before and after callbacks saw different spans on error recovery' + + +# --------------------------------------------------------------------------- +# Tests: CFC (Controlled Function Calling) / live path +# --------------------------------------------------------------------------- + + +class _CfcTestFlow(BaseLlmFlow): + """BaseLlmFlow subclass that stubs run_live for CFC testing.""" + + def __init__(self, live_responses: list[LlmResponse]): + self._live_responses = live_responses + + async def run_live( + self, invocation_context + ) -> AsyncGenerator[LlmResponse, None]: + for resp in self._live_responses: + yield resp + + +@pytest.mark.asyncio +async def test_cfc_before_and_after_callbacks_share_same_span(): + """CFC path: before_model_callback and after_model_callback share span.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + + live_response = LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='live_hello')] + ), + turn_complete=True, + ) + flow = _CfcTestFlow(live_responses=[live_response]) + + invocation_context = await testing_utils.create_invocation_context( + agent=agent, + user_content='test', + run_config=RunConfig( + support_cfc=True, + streaming_mode=StreamingMode.SSE, + ), + plugins=[plugin], + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author='root_agent', + ) + + responses = [] + async with Aclosing( + flow._call_llm_async( + invocation_context, + LlmRequest(model='mock'), + model_response_event, + ) + ) as agen: + async for resp in agen: + responses.append(resp) + + assert len(responses) >= 1 + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'CFC: before_model_callback did not observe a valid span' + assert ( + plugin.after_capture.span_id != _SPAN_ID_INVALID + ), 'CFC: after_model_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.after_capture.span_id, ( + 'CFC: before_model_callback and after_model_callback saw different' + f' spans: before={plugin.before_capture.span_id:#x},' + f' after={plugin.after_capture.span_id:#x}' + ) + + +@pytest.mark.asyncio +async def test_cfc_error_callback_shares_span(): + """CFC path: on_model_error_callback shares span with before callback.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + + # Flow whose run_live raises an error. + class _ErrorCfcFlow(BaseLlmFlow): + + async def run_live(self, invocation_context): + # Make this a proper async generator that raises. + if False: + yield # pragma: no cover — makes this an async generator + raise _MOCK_ERROR + + flow = _ErrorCfcFlow() + + invocation_context = await testing_utils.create_invocation_context( + agent=agent, + user_content='test', + run_config=RunConfig( + support_cfc=True, + streaming_mode=StreamingMode.SSE, + ), + plugins=[plugin], + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author='root_agent', + ) + + responses = [] + async with Aclosing( + flow._call_llm_async( + invocation_context, + LlmRequest(model='mock'), + model_response_event, + ) + ) as agen: + async for resp in agen: + responses.append(resp) + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'CFC error: before_model_callback did not observe a valid span' + assert ( + plugin.error_capture.span_id != _SPAN_ID_INVALID + ), 'CFC error: on_model_error_callback did not observe a valid span' + assert ( + plugin.before_capture.span_id == plugin.error_capture.span_id + ), 'CFC error: before and error callbacks saw different spans' + + +if __name__ == '__main__': + pytest.main([__file__]) diff --git a/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py b/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py new file mode 100644 index 0000000000..f638d0088a --- /dev/null +++ b/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py @@ -0,0 +1,434 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from unittest.mock import Mock +from unittest.mock import patch + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk.agents.callback_context import CallbackContext +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_tool import AuthConfig +from google.adk.flows.llm_flows.functions import REQUEST_EUC_FUNCTION_CALL_NAME +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.session import Session +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.longrunning.operations_pb2 import Operation +from google.protobuf.any_pb2 import Any +from google.rpc.status_pb2 import Status + + +@pytest.fixture +def mock_client(): + return Mock(spec=gcp_auth_provider.Client) + + +@pytest.fixture +def provider(mock_client): + return GcpAuthProvider(client=mock_client) + + +@pytest.fixture +def auth_config(): + scheme = GcpAuthProviderScheme( + name="projects/test-project/locations/global/connectors/test-connector", + scopes=["test-scope"], + continue_uri="https://example.com/continue", + ) + return Mock(spec=AuthConfig, auth_scheme=scheme) + + +@pytest.fixture +def mock_operation(mocker, mock_client): + op = Operation(done=True) + + class DummyCall: + + def __init__(self, operation): + self.operation = operation + + mock_client.retrieve_credentials.return_value = DummyCall(op) + return op + + +@pytest.fixture +def context(): + context = Mock(spec=CallbackContext) + context.user_id = "user" + context.function_call_id = "call_123" + session = Mock(spec=Session) + session.events = [] + context.session = session + + return context + + +@patch.dict(gcp_auth_provider.os.environ, clear=True) +@patch.object(gcp_auth_provider, "Client") +def test_get_client_uses_rest_transport(mock_client_class): + provider = GcpAuthProvider() + provider._get_client() + + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs.get("transport") == "rest" + + +@patch.dict( + gcp_auth_provider.os.environ, + {"IAM_CONNECTOR_CREDENTIALS_TARGET_HOST": "some-host"}, +) +@patch.object(gcp_auth_provider, "Client") +@patch.object(gcp_auth_provider, "ClientOptions") +def test_get_client_with_env_var(mock_client_options_class, mock_client_class): + provider = GcpAuthProvider() + client = provider._get_client() + + assert client == mock_client_class.return_value + mock_client_options_class.assert_called_once_with(api_endpoint="some-host") + mock_client_class.assert_called_once_with( + client_options=mock_client_options_class.return_value, transport="rest" + ) + + +# ============================================================================== +# Non-interactive auth flows (API key and 2-legged OAuth) +# ============================================================================== + + +async def test_get_auth_credential_raises_error_for_invalid_auth_scheme( + provider, context +): + """Test get_auth_credential raises ValueError for invalid auth scheme.""" + invalid_auth_config = Mock(spec=AuthConfig) + invalid_auth_config.auth_scheme = Mock() # Not GcpAuthProviderScheme + + with pytest.raises(ValueError, match="Expected GcpAuthProviderScheme, got"): + await provider.get_auth_credential(invalid_auth_config, context) + + +async def test_get_auth_credential_raises_error_if_context_is_missing( + provider, auth_config +): + """Test get_auth_credential raises ValueError if context is missing.""" + with pytest.raises( + ValueError, + match="GcpAuthProvider requires a context with a valid user_id", + ): + await provider.get_auth_credential(auth_config, context=None) + + +async def test_get_auth_credential_raises_error_if_user_id_is_missing( + provider, auth_config +): + """Test get_auth_credential raises ValueError if user_id is missing.""" + context = Mock(spec=CallbackContext) + context.user_id = None + with pytest.raises( + ValueError, + match="GcpAuthProvider requires a context with a valid user_id", + ): + await provider.get_auth_credential(auth_config, context=context) + + +async def test_get_auth_credential_returns_credential_if_available_immediately( + mock_client, + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential returns credential if available immediately.""" + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + auth_credential = await provider.get_auth_credential(auth_config, context) + + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert auth_credential.http.scheme == "bearer" + assert auth_credential.http.credentials.token == "test-token" + mock_client.retrieve_credentials.assert_called_once() + + +async def test_get_auth_credential_raises_error_if_upstream_returns_empty_header( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError for empty header.""" + mock_credential = RetrieveCredentialsResponse(header="", token="test-token") + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + with pytest.raises( + ValueError, + match=( + "Received either empty header or token from Agent Identity" + " Credentials service." + ), + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_raises_error_if_upstream_returns_empty_token( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError for empty token.""" + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + with pytest.raises( + ValueError, + match=( + "Received either empty header or token from Agent Identity" + " Credentials service." + ), + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_returns_credential_if_upstream_returns_custom_header( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential returns valid credential for custom header and sets X-GOOG-API-KEY header.""" + mock_credential = RetrieveCredentialsResponse( + header="some-x-api-key", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + auth_credential = await provider.get_auth_credential(auth_config, context) + + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert not auth_credential.http.scheme + assert auth_credential.http.credentials.token is None + assert auth_credential.http.additional_headers == { + "some-x-api-key": "test-token", + "X-GOOG-API-KEY": "test-token", + } + + +async def test_get_auth_credential_raises_error_if_upstream_operation_errors( + mock_operation, auth_config, context, provider +): + """Test get_auth_credential raises RuntimeError for failed operations.""" + mock_operation.error.message = "OAuth server error" + mock_operation.done = False + + with pytest.raises( + RuntimeError, match="Operation failed: OAuth server error" + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_raises_error_if_upstream_call_fails( + mock_client, auth_config, context, provider +): + """Test get_auth_credential raises RuntimeError for failed calls.""" + mock_client.retrieve_credentials.side_effect = Exception( + "API Quota Exhausted" + ) + + with pytest.raises( + RuntimeError, + match="Failed to retrieve credential for user 'user' on connector", + ) as exc_info: + await provider.get_auth_credential(auth_config, context) + + # Assert that the original Exception is the chained cause! + assert str(exc_info.value.__cause__) == "API Quota Exhausted" + + +@patch.object(gcp_auth_provider.time, "time") +async def test_get_auth_credential_raises_error_if_polling_times_out( + mock_time, + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError if polling times out.""" + + # Force the operation into the polling loop state + meta_pb = RetrieveCredentialsMetadata.pb()() + meta_pb.consent_pending.SetInParent() + meta = RetrieveCredentialsMetadata.deserialize(meta_pb.SerializeToString()) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + + # First call sets start_time=0.0, second call checks time > timeout + # (20.0 > 10.0) + mock_time.side_effect = [0.0, 20.0] + + mock_metadata = Mock(spec=RetrieveCredentialsMetadata) + mock_metadata.consent_pending = True + mock_metadata.uri_consent_required = False + mock_operation.done = True + mock_operation.ClearField("error") + mock_client = Mock(spec=gcp_auth_provider.Client) + mock_client.retrieve_credentials.side_effect = Exception( + "Timeout waiting for credentials." + ) + provider._client = mock_client + + with pytest.raises( + RuntimeError, + match="Failed to retrieve credential for user 'user' on connector", + ) as exc_info: + await provider.get_auth_credential(auth_config, context) + + assert "Timeout waiting for credentials." in str(exc_info.value.__cause__) + + +# ============================================================================== +# Interactive Auth Flows (3-legged OAuth for User Consents) +# ============================================================================== + + +async def test_get_auth_credential_initiates_user_consent( + mock_operation, auth_config, context, provider +): + # Explicitly set the mock behavior for this test + expected_uri = "https://example.com/auth" + expected_nonce = "sample-nonce-123" + meta = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": expected_uri, + "consent_nonce": expected_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + mock_operation.done = False + # Assert that there is no prior user consent completion event + assert not context.session.events + + credential = await provider.get_auth_credential(auth_config, context) + + assert credential is not None + assert credential.auth_type == AuthCredentialTypes.OAUTH2 + assert credential.oauth2.auth_uri == expected_uri + assert credential.oauth2.nonce == expected_nonce + + +async def test_get_auth_credential_returns_fresh_auth_uri_for_repeated_requests( + mock_client, mock_operation, auth_config, context, provider +): + """Test that repeated calls fetch fresh auth URIs if consent is still pending.""" + # Arrange: Explicit initial URI + initial_uri = "https://example.com/auth" + initial_nonce = "initial-nonce-123" + meta1 = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": initial_uri, + "consent_nonce": initial_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta1) + mock_operation.done = False + + credential1 = await provider.get_auth_credential(auth_config, context) + assert credential1.oauth2.auth_uri == initial_uri + assert credential1.oauth2.nonce == initial_nonce + + # Arrange: Explicit new URI for the second call + fresh_auth_uri = "https://example.com/auth_new" + fresh_nonce = "fresh-nonce-456" + meta2 = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": fresh_auth_uri, + "consent_nonce": fresh_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta2) + + credential2 = await provider.get_auth_credential(auth_config, context) + + assert mock_client.retrieve_credentials.call_count == 2 + assert credential2.oauth2.auth_uri == fresh_auth_uri + assert credential2.oauth2.nonce == fresh_nonce + + +async def test_get_auth_credential_returns_token_if_consent_was_completed( + mock_operation, auth_config, context, provider +): + # Setup mock credential for successful credential retrieval + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + # Create mock events + # 1. FunctionCall event for adk_request_credential + function_call = Mock() + function_call.id = "auth-req-1" + function_call.name = REQUEST_EUC_FUNCTION_CALL_NAME + function_call.args = {"function_call_id": "call-123"} + + event1 = Mock() + event1.get_function_calls.return_value = [function_call] + event1.get_function_responses.return_value = [] + + # 2. FunctionResponse event for adk_request_credential + function_response = Mock() + function_response.id = "auth-req-1" + function_response.name = REQUEST_EUC_FUNCTION_CALL_NAME + + event2 = Mock() + event2.get_function_calls.return_value = [] + event2.get_function_responses.return_value = [function_response] + + # Setup tool context and event history (order of events matters) + context.session.events = [event1, event2] + context.function_call_id = "call-123" + + # Also set uri_consent_required to True-ish so it enters the check block + meta = RetrieveCredentialsMetadata( + uri_consent_required=RetrieveCredentialsMetadata.UriConsentRequired() + ) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + + # Execute + auth_credential = await provider.get_auth_credential(auth_config, context) + + # Verify + assert auth_credential is not None + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert auth_credential.http.scheme == "bearer" + assert auth_credential.http.credentials.token == "test-token" diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index fc68086942..a631e4a656 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -12,15 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. + +from unittest.mock import AsyncMock from unittest.mock import MagicMock from unittest.mock import patch from a2a.types import TransportProtocol as A2ATransport +from fastapi.openapi.models import OAuth2 from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import OAuth2Auth from google.adk.integrations.agent_registry import _ProtocolType from google.adk.integrations.agent_registry import AgentRegistry +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.tools.mcp_tool.mcp_toolset import McpToolset import httpx +from mcp import ClientSession +from mcp.types import ListToolsResult +from mcp.types import Tool import pytest @@ -31,6 +40,130 @@ def registry(self): with patch("google.auth.default", return_value=(MagicMock(), "project-id")): return AgentRegistry(project_id="test-project", location="global") + @pytest.mark.asyncio + @patch("httpx.Client") + @patch( + "google.adk.tools.mcp_tool.mcp_session_manager.MCPSessionManager.create_session", + new_callable=AsyncMock, + ) + async def test_get_mcp_toolset_adds_destination_id( + self, mock_create_session, mock_httpx, registry + ): + """Test that tools from get_mcp_toolset have the destination ID.""" + # Arrange + mcp_server_name = "test-mcp-server" + mock_api_response = MagicMock() + mock_api_response.json.return_value = { + "displayName": "TestPrefix", + "mcpServerId": ( + "urn:mcp:googleapis.com:projects:1234:locations:global:bigquery" + ), + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": "JSONRPC", + }], + } + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_api_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + mock_session = AsyncMock(spec=ClientSession) + mock_create_session.return_value = mock_session + + # Mock the tools returned by list_tools + mock_session.list_tools.return_value = ListToolsResult( + tools=[ + Tool( + name="tool1", + description="d1", + inputs={}, + outputs={}, + inputSchema={}, + ), + Tool( + name="tool2", + description="d2", + inputs={}, + outputs={}, + inputSchema={}, + ), + ] + ) + + # Act + toolset = registry.get_mcp_toolset(mcp_server_name) + tools = await toolset.get_tools() + + # Assert + assert isinstance(toolset, McpToolset) + mock_session.list_tools.assert_called_once_with() + assert len(tools) == 2 + for tool in tools: + assert tool.custom_metadata is not None + assert ( + tool.custom_metadata.get(GCP_MCP_SERVER_DESTINATION_ID) + == "urn:mcp:googleapis.com:projects:1234:locations:global:bigquery" + ) + + @pytest.mark.asyncio + @patch("httpx.Client") + @patch( + "google.adk.tools.mcp_tool.mcp_session_manager.MCPSessionManager.create_session", + new_callable=AsyncMock, + ) + async def test_get_mcp_toolset_handles_missing_destination_id( + self, mock_create_session, mock_httpx, registry + ): + """Test get_mcp_toolset when the destination ID is missing.""" + # Arrange + mcp_server_name = "test-mcp-server" + mock_api_response = MagicMock() + mock_api_response.json.return_value = { + "displayName": "TestPrefix", + # "mcpServerId" is intentionally omitted + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": "JSONRPC", + }], + } + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_api_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + mock_session = AsyncMock(spec=ClientSession) + mock_create_session.return_value = mock_session + + # Mock the tools returned by list_tools + mock_session.list_tools.return_value = ListToolsResult( + tools=[ + Tool( + name="tool1", + description="d1", + inputs={}, + outputs={}, + inputSchema={}, + ), + ] + ) + + # Act + toolset = registry.get_mcp_toolset(mcp_server_name) + tools = await toolset.get_tools() + + # Assert + assert isinstance(toolset, McpToolset) + mock_session.list_tools.assert_called_once_with() + assert len(tools) == 1 + for tool in tools: + # The custom_metadata shouldn't have been added + assert tool.custom_metadata is None + def test_init_raises_value_error_if_params_missing(self): with pytest.raises( ValueError, match="project_id and location must be provided" @@ -43,10 +176,12 @@ def test_get_connection_uri_mcp_interfaces_top_level(self, registry): {"url": "https://mcp-v1main.com", "protocolBinding": "JSONRPC"} ] } - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_binding=A2ATransport.jsonrpc ) assert uri == "https://mcp-v1main.com" + assert version is None + assert binding == "JSONRPC" def test_get_connection_uri_agent_nested_protocols(self, registry): resource_details = { @@ -54,14 +189,16 @@ def test_get_connection_uri_agent_nested_protocols(self, registry): "type": _ProtocolType.A2A_AGENT, "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], }] } - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.jsonrpc def test_get_connection_uri_filtering(self, registry): resource_details = { @@ -74,42 +211,52 @@ def test_get_connection_uri_filtering(self, registry): "type": _ProtocolType.A2A_AGENT, "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.http_json, + "protocolBinding": "HTTP_JSON", }], }, ] } # Filter by type - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.http_json # Filter by binding - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_binding=A2ATransport.http_json ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.http_json # No match - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT, protocol_binding=A2ATransport.jsonrpc, ) assert uri is None + assert version is None + assert binding is None def test_get_connection_uri_returns_none_if_no_interfaces(self, registry): resource_details = {} - uri = registry._get_connection_uri(resource_details) + uri, version, binding = registry._get_connection_uri(resource_details) assert uri is None + assert version is None + assert binding is None def test_get_connection_uri_returns_none_if_no_url_in_interfaces( self, registry ): resource_details = {"interfaces": [{"protocolBinding": "HTTP"}]} - uri = registry._get_connection_uri(resource_details) + uri, version, binding = registry._get_connection_uri(resource_details) assert uri is None + assert version is None + assert binding is None @patch("httpx.Client") def test_list_agents(self, mock_httpx, registry): @@ -143,13 +290,55 @@ def test_get_mcp_server(self, mock_httpx, registry): assert server == {"name": "test-mcp"} @patch("httpx.Client") - def test_get_mcp_toolset(self, mock_httpx, registry): + def test_list_endpoints(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = {"endpoints": []} + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + # Mock auth refresh + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + endpoints = registry.list_endpoints() + assert endpoints == {"endpoints": []} + + @patch("httpx.Client") + def test_get_endpoint(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = {"name": "test-endpoint"} + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + server = registry.get_endpoint("test-endpoint") + assert server == {"name": "test-endpoint"} + + @pytest.mark.parametrize( + "url, expected_auth, use_custom_provider", + [ + ("https://mcp.com", False, False), + ("https://mcp.googleapis.com/v1", True, False), + ("https://example.com/googleapis/v1", False, False), + ("https://mcp.googleapis.com/v1", True, True), + ], + ) + @patch("httpx.Client") + def test_get_mcp_toolset_auth_headers( + self, mock_httpx, registry, url, expected_auth, use_custom_provider + ): mock_response = MagicMock() mock_response.json.return_value = { "displayName": "TestPrefix", "interfaces": [{ - "url": "https://mcp.com", - "protocolBinding": A2ATransport.jsonrpc, + "url": url, + "protocolBinding": "JSONRPC", }], } mock_response.raise_for_status = MagicMock() @@ -157,12 +346,101 @@ def test_get_mcp_toolset(self, mock_httpx, registry): mock_response ) + if use_custom_provider: + custom_header_provider = lambda context: { + "Authorization": "Bearer custom_token" + } + with patch( + "google.auth.default", return_value=(MagicMock(), "project-id") + ): + registry = AgentRegistry( + project_id="test-project", + location="global", + header_provider=custom_header_provider, + ) + registry._credentials.token = "token" registry._credentials.refresh = MagicMock() toolset = registry.get_mcp_toolset("test-mcp") assert isinstance(toolset, McpToolset) assert toolset.tool_name_prefix == "TestPrefix" + assert toolset._connection_params.headers is None + headers = toolset._header_provider(MagicMock()) + + if use_custom_provider: + assert headers.get("Authorization") == "Bearer custom_token" + elif expected_auth: + assert headers.get("Authorization") == "Bearer token" + else: + assert "Authorization" not in headers + + @patch("httpx.Client") + def test_get_mcp_toolset_with_auth(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestPrefix", + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": "JSONRPC", + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + auth_scheme = OAuth2(flows={}) + auth_credential = AuthCredential( + auth_type="oauth2", + oauth2=OAuth2Auth(client_id="test_id", client_secret="test_secret"), + ) + + toolset = registry.get_mcp_toolset( + "test-mcp", auth_scheme=auth_scheme, auth_credential=auth_credential + ) + assert isinstance(toolset, McpToolset) + auth_config = toolset.get_auth_config() + assert auth_config is not None + assert auth_config.auth_scheme == auth_scheme + assert auth_config.raw_auth_credential == auth_credential + + @patch("httpx.Client") + def test_get_mcp_toolset_with_auth_blocks_gcp_headers( + self, mock_httpx, registry + ): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestPrefix", + "interfaces": [{ + "url": "https://mcp.googleapis.com/v1", + "protocolBinding": "JSONRPC", + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + auth_scheme = OAuth2(flows={}) + auth_credential = AuthCredential( + auth_type="oauth2", + oauth2=OAuth2Auth(client_id="test_id", client_secret="test_secret"), + ) + + toolset = registry.get_mcp_toolset( + "test-mcp", auth_scheme=auth_scheme, auth_credential=auth_credential + ) + assert isinstance(toolset, McpToolset) + + headers = toolset._header_provider(MagicMock()) + assert "Authorization" not in headers @patch("httpx.Client") def test_get_remote_a2a_agent(self, mock_httpx, registry): @@ -173,9 +451,10 @@ def test_get_remote_a2a_agent(self, mock_httpx, registry): "version": "1.0", "protocols": [{ "type": _ProtocolType.A2A_AGENT, + "protocolVersion": "0.4.0", "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "HTTP_JSON", }], }], "skills": [{"id": "s1", "name": "Skill 1", "description": "Desc 1"}], @@ -196,6 +475,128 @@ def test_get_remote_a2a_agent(self, mock_httpx, registry): assert agent._agent_card.version == "1.0" assert len(agent._agent_card.skills) == 1 assert agent._agent_card.skills[0].name == "Skill 1" + assert agent._agent_card.preferred_transport == A2ATransport.http_json + assert agent._agent_card.protocol_version == "0.4.0" + + @patch("httpx.Client") + def test_get_remote_a2a_agent_defaults(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "description": "Test Desc", + "version": "1.0", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert isinstance(agent, RemoteA2aAgent) + assert agent._agent_card.preferred_transport == A2ATransport.http_json + assert agent._agent_card.protocol_version == "0.3.0" + + @patch("httpx.Client") + def test_get_remote_a2a_agent_with_card(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "name": "projects/p/locations/l/agents/a", + "card": { + "type": "A2A_AGENT_CARD", + "content": { + "name": "CardName", + "description": "CardDesc", + "version": "2.0", + "url": "https://card-url.com", + "skills": [{ + "id": "s1", + "name": "S1", + "description": "D1", + "tags": ["t1"], + }], + "capabilities": {"streaming": True, "polling": False}, + "defaultInputModes": ["text"], + "defaultOutputModes": ["text"], + }, + }, + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert isinstance(agent, RemoteA2aAgent) + assert agent.name == "CardName" + assert agent.description == "CardDesc" + assert agent._agent_card.version == "2.0" + assert agent._agent_card.url == "https://card-url.com" + assert agent._agent_card.capabilities.streaming is True + assert len(agent._agent_card.skills) == 1 + assert agent._agent_card.skills[0].name == "S1" + + @patch("httpx.Client") + def test_get_remote_a2a_agent_with_httpx_client(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "description": "Test Desc", + "version": "1.0", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + custom_client = httpx.AsyncClient() + agent = registry.get_remote_a2a_agent( + "test-agent", httpx_client=custom_client + ) + assert agent._httpx_client is custom_client + + @patch("httpx.Client") + def test_get_remote_a2a_agent_configures_transports( + self, mock_httpx, registry + ): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + "protocolBinding": A2ATransport.jsonrpc, + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert agent._agent_card.preferred_transport == A2ATransport.jsonrpc def test_get_auth_headers(self, registry): registry._credentials.token = "fake-token" @@ -233,7 +634,7 @@ def test_make_request_raises_request_error(self, mock_httpx, registry): registry._credentials.refresh = MagicMock() with pytest.raises( - RuntimeError, match="API request failed \(network error\)" + RuntimeError, match=r"API request failed \(network error\)" ): registry._make_request("test-path") @@ -248,3 +649,86 @@ def test_make_request_raises_generic_exception(self, mock_httpx, registry): with pytest.raises(RuntimeError, match="API request failed: Generic error"): registry._make_request("test-path") + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_starts_with_projects( + self, mock_get_endpoint, registry + ): + mock_get_endpoint.return_value = { + "interfaces": [{"url": "projects/p1/locations/l1/models/m1"}] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_contains_projects(self, mock_get_endpoint, registry): + mock_get_endpoint.return_value = { + "interfaces": [{ + "url": ( + "https://vertexai.googleapis.com/v1/projects/p1/locations/l1/models/m1" + ) + }] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_strips_suffix(self, mock_get_endpoint, registry): + mock_get_endpoint.return_value = { + "interfaces": [{"url": "projects/p1/locations/l1/models/m1:predict"}] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_raises_value_error_if_no_uri( + self, mock_get_endpoint, registry + ): + mock_get_endpoint.return_value = {} + with pytest.raises(ValueError, match="Connection URI not found"): + registry.get_model_name("test-endpoint") + + @patch.object(AgentRegistry, "_make_request") + def test_get_mcp_toolset_with_binding(self, mock_make_request, registry): + def side_effect(*args, **kwargs): + if args[0] == "test-mcp": + return { + "displayName": "TestPrefix", + "mcpServerId": "server-456", + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": "JSONRPC", + }], + } + if args[0] == "bindings": + return { + "bindings": [{ + "target": { + "identifier": ( + "urn:mcp:projects-123:projects:123:locations:l:mcpServers:server-456" + ) + }, + "authProviderBinding": { + "authProvider": ( + "projects/123/locations/l/authProviders/ap-789" + ) + }, + }] + } + return {} + + mock_make_request.side_effect = side_effect + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + toolset = registry.get_mcp_toolset( + "test-mcp", continue_uri="https://override.com/continue" + ) + assert isinstance(toolset, McpToolset) + assert toolset._auth_scheme is not None + assert ( + toolset._auth_scheme.name + == "projects/123/locations/l/authProviders/ap-789" + ) + assert toolset._auth_scheme.continue_uri == "https://override.com/continue" diff --git a/tests/unittests/tools/test_crewai_tool.py b/tests/unittests/integrations/crewai/test_crewai_tool.py similarity index 98% rename from tests/unittests/tools/test_crewai_tool.py rename to tests/unittests/integrations/crewai/test_crewai_tool.py index a0028233f0..f7f9bfe0bd 100644 --- a/tests/unittests/tools/test_crewai_tool.py +++ b/tests/unittests/integrations/crewai/test_crewai_tool.py @@ -18,13 +18,13 @@ # Skip entire module if Python < 3.10 (must be before crewai_tool import) pytest.importorskip( - "google.adk.tools.crewai_tool", reason="Requires Python 3.10+" + "google.adk.integrations.crewai.crewai_tool", reason="Requires Python 3.10+" ) from google.adk.agents.context import Context from google.adk.agents.invocation_context import InvocationContext +from google.adk.integrations.crewai import CrewaiTool from google.adk.sessions.session import Session -from google.adk.tools.crewai_tool import CrewaiTool from google.adk.tools.tool_context import ToolContext diff --git a/tests/unittests/integrations/firestore/test_firestore_memory_service.py b/tests/unittests/integrations/firestore/test_firestore_memory_service.py new file mode 100644 index 0000000000..afa7f75cac --- /dev/null +++ b/tests/unittests/integrations/firestore/test_firestore_memory_service.py @@ -0,0 +1,388 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from unittest import mock + +from google.adk.events.event import Event +from google.adk.integrations.firestore.firestore_memory_service import FirestoreMemoryService +from google.cloud.firestore_v1.base_query import FieldFilter +from google.genai import types +import pytest + + +@pytest.fixture +def mock_firestore_client(): + client = mock.MagicMock() + collection_ref = mock.MagicMock() + client.collection.return_value = collection_ref + + collection_ref.where.return_value = collection_ref + + doc_snapshot = mock.MagicMock() + doc_snapshot.to_dict.return_value = {} + + collection_ref.get = mock.AsyncMock(return_value=[doc_snapshot]) + + return client + + +def test_extract_keywords(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + text = "The quick brown fox jumps over the lazy dog." + keywords = service._extract_keywords(text) + + assert "the" not in keywords + assert "over" not in keywords + assert "quick" in keywords + assert "brown" in keywords + assert "fox" in keywords + assert "jumps" in keywords + assert "lazy" in keywords + assert "dog" in keywords + + +@pytest.mark.asyncio +async def test_search_memory_empty_query(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + response = await service.search_memory( + app_name="test_app", user_id="test_user", query="" + ) + assert not response.memories + mock_firestore_client.collection.assert_not_called() + + +@pytest.mark.asyncio +async def test_search_memory_with_results(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick fox" + + doc_snapshot = mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get.return_value[ + 0 + ] + + content = types.Content(parts=[types.Part.from_text(text="quick fox jumps")]) + + doc_snapshot.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert response.memories + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + + mock_firestore_client.collection.assert_called_with("memories") + collection_ref = mock_firestore_client.collection.return_value + + assert collection_ref.where.call_count == 6 + calls = collection_ref.where.call_args_list + + app_name_calls = 0 + user_id_calls = 0 + keyword_calls = 0 + + for call in calls: + kwargs = call.kwargs + filt = kwargs.get("filter") + if filt: + if ( + filt.field_path == "appName" + and filt.op_string == "==" + and filt.value == app_name + ): + app_name_calls += 1 + elif ( + filt.field_path == "userId" + and filt.op_string == "==" + and filt.value == user_id + ): + user_id_calls += 1 + elif filt.field_path == "keywords" and filt.op_string == "array_contains": + + if filt.value in ["quick", "fox"]: + keyword_calls += 1 + + assert app_name_calls == 2 + assert user_id_calls == 2 + assert keyword_calls == 2 + + +@pytest.mark.asyncio +async def test_search_memory_deduplication(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick fox" + + content = types.Content(parts=[types.Part.from_text(text="quick fox jumps")]) + + doc_snapshot1 = mock.MagicMock() + doc_snapshot1.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + doc_snapshot2 = mock.MagicMock() + doc_snapshot2.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + get_mock = mock.AsyncMock(side_effect=[[doc_snapshot1], [doc_snapshot2]]) + + mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get = ( + get_mock + ) + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert response.memories + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + + +@pytest.mark.asyncio +async def test_search_memory_parsing_error(mock_firestore_client, caplog): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick" + + doc_snapshot = mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get.return_value[ + 0 + ] + doc_snapshot.to_dict.return_value = {"content": "invalid_data"} + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert not response.memories + assert "Failed to parse memory entry" in caplog.text + + +@pytest.mark.asyncio +async def test_search_memory_only_stop_words(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + response = await service.search_memory( + app_name="test_app", user_id="test_user", query="the and or" + ) + assert not response.memories + mock_firestore_client.collection.assert_not_called() + + +@pytest.mark.asyncio +async def test_search_memory_partial_failures(mock_firestore_client, caplog): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "fox quick" + + coll_ref = ( + mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value + ) + + doc_snapshot = mock.MagicMock() + doc_snapshot.to_dict.return_value = { + "content": {"parts": [{"text": "quick response"}]}, + "author": "user", + "timestamp": 1234567890.0, + } + + call_count = 0 + + async def mock_get(): + nonlocal call_count + call_count += 1 + if call_count == 1: + raise ValueError("Mock generic network failure standalone") + return [doc_snapshot] + + coll_ref.get = mock.AsyncMock(side_effect=mock_get) + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + assert "Memory keyword search partial failure" in caplog.text + + +def test_init_default_client(): + with mock.patch("google.cloud.firestore.AsyncClient") as mock_client_class: + mock_instance = mock.MagicMock() + mock_client_class.return_value = mock_instance + + service = FirestoreMemoryService() + + mock_client_class.assert_called_once() + assert service.client == mock_instance + + +@pytest.mark.asyncio +async def test_add_session_to_memory(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="quick brown fox")]) + event = Event( + invocation_id="test_inv", + author="user", + content=content, + timestamp=1234567890.0, + ) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + batch.commit = mock.AsyncMock() + + doc_ref = mock.MagicMock() + mock_firestore_client.collection.return_value.document.return_value = doc_ref + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + mock_firestore_client.collection.assert_called_with("memories") + batch.set.assert_called_once() + batch.commit.assert_called_once() + + args, kwargs = batch.set.call_args + assert args[0] == doc_ref + data = args[1] + assert data["appName"] == "test_app" + assert data["userId"] == "test_user" + assert "quick" in data["keywords"] + assert data["author"] == "user" + assert data["timestamp"] == 1234567890.0 + + +@pytest.mark.asyncio +async def test_add_session_to_memory_no_events(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + batch.set.assert_not_called() + batch.commit.assert_not_called() + + +@pytest.mark.asyncio +async def test_add_session_to_memory_no_keywords(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="the and or")]) + event = Event(invocation_id="test_inv", author="user", content=content) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + batch.set.assert_not_called() + batch.commit.assert_not_called() + + +@pytest.mark.asyncio +async def test_add_session_to_memory_commit_error(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="quick brown fox")]) + event = Event(invocation_id="test_inv", author="user", content=content) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + batch.commit = mock.AsyncMock( + side_effect=Exception("Firestore commit failed") + ) + + with pytest.raises(Exception, match="Firestore commit failed"): + await service.add_session_to_memory(session) + + +@pytest.mark.asyncio +async def test_add_session_to_memory_exceeds_batch_limit(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + for i in range(501): + content = types.Content( + parts=[types.Part.from_text(text=f"event keyword {i}")] + ) + event = Event( + invocation_id=f"test_inv_{i}", + author="user", + content=content, + timestamp=1234567890.0 + i, + ) + session.events.append(event) + + batch1 = mock.MagicMock() + batch2 = mock.MagicMock() + batch1.commit = mock.AsyncMock() + batch2.commit = mock.AsyncMock() + mock_firestore_client.batch.side_effect = [batch1, batch2] + + await service.add_session_to_memory(session) + + assert mock_firestore_client.batch.call_count == 2 + assert batch1.set.call_count == 500 + batch1.commit.assert_called_once() + assert batch2.set.call_count == 1 + batch2.commit.assert_called_once() diff --git a/tests/unittests/integrations/firestore/test_firestore_session_service.py b/tests/unittests/integrations/firestore/test_firestore_session_service.py new file mode 100644 index 0000000000..1445bfe0ef --- /dev/null +++ b/tests/unittests/integrations/firestore/test_firestore_session_service.py @@ -0,0 +1,757 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from unittest import mock + +from google.adk.events.event import Event +from google.adk.integrations.firestore.firestore_session_service import FirestoreSessionService +import pytest + + +@pytest.fixture +def mock_firestore_client(): + client = mock.MagicMock() + collection_ref = mock.MagicMock() + doc_ref = mock.MagicMock() + subcollection_ref = mock.MagicMock() + subdoc_ref = mock.MagicMock() + sessions_coll_ref = mock.MagicMock() + sessions_doc_ref = mock.MagicMock() + + client.collection.return_value = collection_ref + collection_ref.document.return_value = doc_ref + doc_ref.collection.return_value = subcollection_ref + subcollection_ref.document.return_value = subdoc_ref + subdoc_ref.collection.return_value = sessions_coll_ref + sessions_coll_ref.document.return_value = sessions_doc_ref + + doc_snapshot = mock.MagicMock() + doc_snapshot.exists = False + doc_snapshot.to_dict.return_value = {} + + subdoc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + sessions_doc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + doc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + + sessions_doc_ref.set = mock.AsyncMock() + sessions_doc_ref.delete = mock.AsyncMock() + + events_collection_ref = mock.MagicMock() + sessions_doc_ref.collection.return_value = events_collection_ref + events_collection_ref.order_by.return_value = events_collection_ref + events_collection_ref.where.return_value = events_collection_ref + events_collection_ref.limit_to_last.return_value = events_collection_ref + events_collection_ref.get = mock.AsyncMock(return_value=[]) + + sessions_coll_ref.get = mock.AsyncMock(return_value=[]) + sessions_coll_ref.where.return_value = sessions_coll_ref + + client.collection_group.return_value = collection_ref + + batch = mock.MagicMock() + client.batch.return_value = batch + batch.commit = mock.AsyncMock() + + return client + + +def test_init_missing_dependency(): + import builtins + + original_import = builtins.__import__ + + def mock_import(name, globals=None, locals=None, fromlist=(), level=0): + if name == "google.cloud" and "firestore" in fromlist: + raise ImportError("Mocked import error") + return original_import(name, globals, locals, fromlist, level) + + with mock.patch("builtins.__import__", side_effect=mock_import): + with pytest.raises(ImportError, match="requires google-cloud-firestore"): + FirestoreSessionService() + + +@pytest.mark.asyncio +async def test_create_session(mock_firestore_client): + + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + session = await service.create_session(app_name=app_name, user_id=user_id) + + assert session.app_name == app_name + assert session.user_id == user_id + assert session.id + + mock_firestore_client.collection.assert_any_call("adk-session") + mock_firestore_client.collection.assert_any_call("app_states") + mock_firestore_client.collection.assert_any_call("user_states") + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + + from google.cloud import firestore + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called_once() + args, kwargs = transaction.set.call_args + assert args[0] == session_doc_ref + assert args[1]["id"] == session.id + assert args[1]["appName"] == app_name + assert args[1]["userId"] == user_id + assert args[1]["state"] == {} + assert args[1]["createTime"] == firestore.SERVER_TIMESTAMP + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_get_session_not_found(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is None + + mock_firestore_client.collection.assert_called_with("adk-session") + root_coll = mock_firestore_client.collection.return_value + root_coll.document.assert_called_with(app_name) + app_ref = root_coll.document.return_value + app_ref.collection.assert_called_with("users") + users_coll = app_ref.collection.return_value + users_coll.document.assert_called_with(user_id) + user_ref = users_coll.document.return_value + user_ref.collection.assert_called_with("sessions") + sessions_ref = user_ref.collection.return_value + sessions_ref.document.assert_called_with(session_id) + + +@pytest.mark.asyncio +async def test_get_session_found(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + sessions_doc_ref = sessions_ref.document.return_value + + session_snap = mock.MagicMock() + session_snap.exists = True + session_snap.to_dict.return_value = { + "id": session_id, + "appName": app_name, + "userId": user_id, + "state": {"key": "value"}, + "updateTime": 1234567890.0, + } + sessions_doc_ref.get.return_value = session_snap + + # Decouple app and user documents so they do not duplicate values + app_state_coll = mock_firestore_client.collection.return_value + app_doc_ref = app_state_coll.document.return_value + app_snap = mock.MagicMock() + app_snap.exists = False + app_snap.to_dict.return_value = {} + app_doc_ref.get.return_value = app_snap + + user_state_coll = mock_firestore_client.collection.return_value + user_doc_ref = user_state_coll.document.return_value + user_snap = mock.MagicMock() + user_snap.exists = False + user_snap.to_dict.return_value = {} + user_doc_ref.get.return_value = user_snap + + events_collection_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + event_doc = mock.MagicMock() + event_doc.to_dict.return_value = { + "event_data": {"invocation_id": "test_inv", "author": "user"} + } + events_collection_ref.get = mock.AsyncMock(return_value=[event_doc]) + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is not None + assert session.id == session_id + assert session.state == {"key": "value"} + assert len(session.events) == 1 + assert session.events[0].invocation_id == "test_inv" + + +@pytest.mark.asyncio +async def test_delete_session(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + events_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + event_doc = mock.AsyncMock() + + async def to_async_iter(iterable): + for item in iterable: + yield item + + events_ref.stream.return_value = to_async_iter([event_doc]) + + await service.delete_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + events_ref.stream.assert_called_once() + mock_firestore_client.batch.assert_called_once() + batch = mock_firestore_client.batch.return_value + batch.delete.assert_called_once_with(event_doc.reference) + batch.commit.assert_called_once() + + session_doc_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value + ) + session_doc_ref.delete.assert_called_once() + + +@pytest.mark.asyncio +async def test_append_event(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + event = Event(invocation_id="test_inv", author="user") + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + from google.cloud import firestore + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() # Invoked for events appends + transaction.update.assert_called_once() # Invoked for session revisions + + args, kwargs = transaction.update.call_args + assert args[1]["revision"] == 1 + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_append_event_with_state_delta(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + + event = mock.MagicMock() + event.partial = False + event.id = "test_event_id" + event.actions.state_delta = { + "_app_my_key": "app_val", + "_user_my_key": "user_val", + "session_key": "session_val", + } + event.model_dump.return_value = {"id": "test_event_id", "author": "user"} + + service._update_app_state_transactional = mock.AsyncMock() + service._update_user_state_transactional = mock.AsyncMock() + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() + + assert session.state["session_key"] == "session_val" + + from google.cloud import firestore + + transaction.update.assert_called_once() + args, kwargs = transaction.update.call_args + # In modular Firestore configurations alignments, updating variables mock assertions core setups + assert args[1]["state"] == session.state + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_append_event_with_temp_state(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.events.event import Event + from google.adk.events.event import EventActions + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + + event = Event( + invocation_id="test_inv", + author="user", + actions=EventActions( + state_delta={"temp:k1": "v1", "session_key": "session_val"} + ), + ) + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + # 1. Verify it was applied in-memory + assert session.state["temp:k1"] == "v1" + assert session.state["session_key"] == "session_val" + + # 2. Verify it was trimmed before Firestore save + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() + + # Filter calls for the one that actually sets the event data + event_set_calls = [ + call + for call in transaction.set.call_args_list + if len(call[0]) > 1 + and isinstance(call[0][1], dict) + and "event_data" in call[0][1] + ] + assert len(event_set_calls) == 1 + event_data = event_set_calls[0][0][1]["event_data"] + + # Temporary keys should be deleted from delta before snapshot + assert "temp:k1" not in event_data["actions"]["state_delta"] + assert event_data["actions"]["state_delta"]["session_key"] == "session_val" + + +@pytest.mark.asyncio +async def test_list_sessions_with_user_id(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": user_id, + "state": {"session_key": "session_val"}, + } + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + sessions_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + elif name == service.root_collection: + return sessions_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.exists = True + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + user_doc_ref = mock.MagicMock() + users_coll.document.return_value = user_doc_ref + user_doc_ref.get = mock.AsyncMock(return_value=user_doc) + + app_doc_in_root = mock.MagicMock() + sessions_coll.document.return_value = app_doc_in_root + users_coll = mock.MagicMock() + app_doc_in_root.collection.return_value = users_coll + user_doc_in_users = mock.MagicMock() + users_coll.document.return_value = user_doc_in_users + sessions_subcoll = mock.MagicMock() + user_doc_in_users.collection.return_value = sessions_subcoll + sessions_query = mock.MagicMock() + sessions_subcoll.where.return_value = sessions_query + sessions_query.get = mock.AsyncMock(return_value=[session_doc]) + + response = await service.list_sessions(app_name=app_name, user_id=user_id) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["session_key"] == "session_val" + assert session.state["app:app_key"] == "app_val" + assert session.state["user:user_key"] == "user_val" + + +@pytest.mark.asyncio +async def test_list_sessions_without_user_id(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": "user1", + "state": {"session_key": "session_val"}, + } + + mock_firestore_client.collection_group.return_value.where.return_value.get = ( + mock.AsyncMock(return_value=[session_doc]) + ) + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.id = "user1" + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + users_coll.get = mock.AsyncMock(return_value=[user_doc]) + + response = await service.list_sessions(app_name=app_name) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["app:app_key"] == "app_val" + assert session.state["user:user_key"] == "user_val" + + mock_firestore_client.collection_group.assert_called_once_with("sessions") + mock_firestore_client.collection_group.return_value.where.assert_called_once_with( + "appName", "==", app_name + ) + + +@pytest.mark.asyncio +async def test_list_sessions_filters_other_apps(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": "user1", + "state": {"session_key": "session_val"}, + } + + mock_firestore_client.collection_group.return_value.where.return_value.get = ( + mock.AsyncMock(return_value=[session_doc]) + ) + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.id = "user1" + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + users_coll.get = mock.AsyncMock(return_value=[user_doc]) + + response = await service.list_sessions(app_name=app_name) + + assert len(response.sessions) == 1 + assert response.sessions[0].id == "session1" + assert response.sessions[0].app_name == app_name + + mock_firestore_client.collection_group.assert_called_once_with("sessions") + mock_firestore_client.collection_group.return_value.where.assert_called_once_with( + "appName", "==", app_name + ) + + +@pytest.mark.asyncio +async def test_create_session_already_exists(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + + from google.adk.errors.already_exists_error import AlreadyExistsError + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + with pytest.raises(AlreadyExistsError): + await service.create_session( + app_name=app_name, user_id=user_id, session_id="existing_id" + ) + + +@pytest.mark.asyncio +async def test_get_session_with_config(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + doc_snapshot.to_dict.return_value = { + "id": session_id, + "appName": app_name, + "userId": user_id, + } + + events_collection_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + + from google.adk.sessions.base_session_service import GetSessionConfig + + config = GetSessionConfig(after_timestamp=1234567890.0, num_recent_events=5) + + await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id, config=config + ) + + events_collection_ref.where.assert_called_once() + events_collection_ref.limit_to_last.assert_called_once_with(5) + + +@pytest.mark.asyncio +async def test_delete_session_batching(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + events_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + + dummy_docs = [mock.MagicMock() for _ in range(501)] + + async def to_async_iter(iterable): + for item in iterable: + yield item + + events_ref.stream.return_value = to_async_iter(dummy_docs) + + batch = mock_firestore_client.batch.return_value + + await service.delete_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert batch.commit.call_count == 2 + assert batch.delete.call_count == 501 + + +@pytest.mark.asyncio +async def test_append_event_partial(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + event = Event(invocation_id="test_inv", author="user", partial=True) + + result = await service.append_event(session, event) + + assert result == event + mock_firestore_client.batch.assert_not_called() + + +@pytest.mark.asyncio +@pytest.mark.asyncio +async def test_get_session_empty_data(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + doc_snapshot.to_dict.return_value = {} + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is None + + +@pytest.mark.asyncio +async def test_list_sessions_missing_states(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": user_id, + "state": {"session_key": "session_val"}, + } + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + sessions_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + elif name == service.root_collection: + return sessions_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = False + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.exists = False + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + user_doc_ref = mock.MagicMock() + users_coll.document.return_value = user_doc_ref + user_doc_ref.get = mock.AsyncMock(return_value=user_doc) + + app_doc_in_root = mock.MagicMock() + sessions_coll.document.return_value = app_doc_in_root + users_coll = mock.MagicMock() + app_doc_in_root.collection.return_value = users_coll + user_doc_in_users = mock.MagicMock() + users_coll.document.return_value = user_doc_in_users + sessions_subcoll = mock.MagicMock() + user_doc_in_users.collection.return_value = sessions_subcoll + sessions_query = mock.MagicMock() + sessions_subcoll.where.return_value = sessions_query + sessions_query.get = mock.AsyncMock(return_value=[session_doc]) + + response = await service.list_sessions(app_name=app_name, user_id=user_id) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["session_key"] == "session_val" + assert "_app_app_key" not in session.state + assert "_user_user_key" not in session.state diff --git a/tests/unittests/tools/test_langchain_tool.py b/tests/unittests/integrations/langchain/test_langchain_tool.py similarity index 97% rename from tests/unittests/tools/test_langchain_tool.py rename to tests/unittests/integrations/langchain/test_langchain_tool.py index 4d22fb5075..408b23c155 100644 --- a/tests/unittests/tools/test_langchain_tool.py +++ b/tests/unittests/integrations/langchain/test_langchain_tool.py @@ -14,7 +14,7 @@ from unittest.mock import MagicMock -from google.adk.tools.langchain_tool import LangchainTool +from google.adk.integrations.langchain import LangchainTool from langchain_core.tools import tool from langchain_core.tools.structured import StructuredTool from pydantic import BaseModel diff --git a/tests/unittests/integrations/parameter_manager/__init__.py b/tests/unittests/integrations/parameter_manager/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/integrations/parameter_manager/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/integrations/parameter_manager/test_parameter_client.py b/tests/unittests/integrations/parameter_manager/test_parameter_client.py new file mode 100644 index 0000000000..1fe07bfd24 --- /dev/null +++ b/tests/unittests/integrations/parameter_manager/test_parameter_client.py @@ -0,0 +1,231 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the ParameterManagerClient.""" + +import json +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.parameter_manager.parameter_client import ParameterManagerClient +from google.adk.integrations.parameter_manager.parameter_client import USER_AGENT +from google.api_core.gapic_v1 import client_info +import pytest + + +class TestParameterManagerClient: + """Tests for the ParameterManagerClient class.""" + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_default_credentials( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test initialization with default credentials.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + # Execute + client = ParameterManagerClient() + + # Verify + mock_default_service_credential.assert_called_once_with( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + mock_pm_client_class.assert_called_once() + call_kwargs = mock_pm_client_class.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch("google.oauth2.service_account.Credentials.from_service_account_info") + def test_init_with_service_account_json( + self, mock_from_service_account_info, mock_pm_client_class + ): + """Test initialization with service account JSON.""" + # Setup + mock_credentials = MagicMock() + mock_from_service_account_info.return_value = mock_credentials + service_account_json = json.dumps({ + "type": "service_account", + "project_id": "test-project", + "private_key_id": "key-id", + "private_key": "private-key", + "client_email": "test@example.com", + }) + + # Execute + client = ParameterManagerClient(service_account_json=service_account_json) + + # Verify + mock_from_service_account_info.assert_called_once_with( + json.loads(service_account_json) + ) + mock_pm_client_class.assert_called_once() + call_kwargs = mock_pm_client_class.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + def test_init_with_auth_token(self, mock_pm_client_class): + """Test initialization with auth token.""" + # Setup + auth_token = "test-token" + mock_credentials = MagicMock() + + with ( + patch("google.auth.credentials.Credentials") as mock_credentials_class, + patch("google.auth.transport.requests.Request") as mock_request, + ): + mock_credentials_class.return_value = mock_credentials + + # Execute + client = ParameterManagerClient(auth_token=auth_token) + + # Verify + mock_credentials.refresh.assert_called_once() + mock_pm_client_class.assert_called_once() + call_kwargs = mock_pm_client_class.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_location( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test initialization with a specific location.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + location = "us-central1" + + # Execute + ParameterManagerClient(location=location) + + # Verify + mock_pm_client_class.assert_called_once() + call_kwargs = mock_pm_client_class.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] == { + "api_endpoint": f"parametermanager.{location}.rep.googleapis.com" + } + assert call_kwargs["client_info"].user_agent == USER_AGENT + + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_default_credentials_error( + self, mock_default_service_credential + ): + """Test initialization with default credentials that fails.""" + # Setup + mock_default_service_credential.side_effect = Exception("Auth error") + + # Execute and verify + with pytest.raises( + ValueError, + match="error occurred while trying to use default credentials", + ): + ParameterManagerClient() + + def test_init_with_invalid_service_account_json(self): + """Test initialization with invalid service account JSON.""" + # Execute and verify + with pytest.raises(ValueError, match="Invalid service account JSON"): + ParameterManagerClient(service_account_json="invalid-json") + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_get_parameter( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test getting a parameter.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + mock_client = MagicMock() + mock_pm_client_class.return_value = mock_client + mock_response = MagicMock() + mock_response.rendered_payload.decode.return_value = "parameter-value" + mock_client.render_parameter_version.return_value = mock_response + + # Execute + client = ParameterManagerClient() + result = client.get_parameter( + "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) + + # Verify + assert result == "parameter-value" + mock_response.rendered_payload.decode.assert_called_once_with("UTF-8") + # Verify render_parameter_version was called with correct request object + call_kwargs = mock_client.render_parameter_version.call_args.kwargs + assert ( + call_kwargs["request"].name + == "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) + mock_response.rendered_payload.decode.assert_called_once_with("UTF-8") + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_get_parameter_error( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test getting a parameter that fails.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + mock_client = MagicMock() + mock_pm_client_class.return_value = mock_client + mock_client.render_parameter_version.side_effect = Exception("API error") + + # Execute and verify + client = ParameterManagerClient() + with pytest.raises(Exception, match="API error"): + client.get_parameter( + "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) diff --git a/tests/unittests/integrations/secret_manager/__init__.py b/tests/unittests/integrations/secret_manager/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/integrations/secret_manager/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/tools/apihub_tool/clients/test_secret_client.py b/tests/unittests/integrations/secret_manager/test_secret_client.py similarity index 72% rename from tests/unittests/tools/apihub_tool/clients/test_secret_client.py rename to tests/unittests/integrations/secret_manager/test_secret_client.py index 4f18a6c8f9..e463bd95bc 100644 --- a/tests/unittests/tools/apihub_tool/clients/test_secret_client.py +++ b/tests/unittests/integrations/secret_manager/test_secret_client.py @@ -18,7 +18,9 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.apihub_tool.clients.secret_client import SecretManagerClient +from google.adk.integrations.secret_manager.secret_client import SecretManagerClient +from google.adk.integrations.secret_manager.secret_client import USER_AGENT +from google.api_core.gapic_v1 import client_info import pytest import google @@ -29,7 +31,7 @@ class TestSecretManagerClient: @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_init_with_default_credentials( self, mock_default_service_credential, mock_secret_manager_client @@ -49,9 +51,11 @@ def test_init_with_default_credentials( mock_default_service_credential.assert_called_once_with( scopes=["https://www.googleapis.com/auth/cloud-platform"] ) - mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials - ) + mock_secret_manager_client.assert_called_once() + call_kwargs = mock_secret_manager_client.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value @@ -79,9 +83,11 @@ def test_init_with_service_account_json( mock_from_service_account_info.assert_called_once_with( json.loads(service_account_json) ) - mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials - ) + mock_secret_manager_client.assert_called_once() + call_kwargs = mock_secret_manager_client.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value @@ -105,14 +111,44 @@ def test_init_with_auth_token(self, mock_secret_manager_client): # Verify mock_credentials.refresh.assert_called_once() - mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials - ) + mock_secret_manager_client.assert_called_once() + call_kwargs = mock_secret_manager_client.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] is None + assert call_kwargs["client_info"].user_agent == USER_AGENT assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value + @patch("google.cloud.secretmanager.SecretManagerServiceClient") + @patch( + "google.adk.integrations.secret_manager.secret_client.default_service_credential" + ) + def test_init_with_location( + self, mock_default_service_credential, mock_secret_manager_client + ): + """Test initialization with a specific location.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + location = "us-central1" + + # Execute + SecretManagerClient(location=location) + + # Verify + mock_secret_manager_client.assert_called_once() + call_kwargs = mock_secret_manager_client.call_args.kwargs + assert call_kwargs["credentials"] == mock_credentials + assert call_kwargs["client_options"] == { + "api_endpoint": f"secretmanager.{location}.rep.googleapis.com" + } + assert call_kwargs["client_info"].user_agent == USER_AGENT + @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_init_with_default_credentials_error( self, mock_default_service_credential @@ -136,7 +172,7 @@ def test_init_with_invalid_service_account_json(self): @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_get_secret( self, mock_default_service_credential, mock_secret_manager_client @@ -170,7 +206,7 @@ def test_get_secret( @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_get_secret_error( self, mock_default_service_credential, mock_secret_manager_client diff --git a/tests/unittests/integrations/slack/test_slack_runner.py b/tests/unittests/integrations/slack/test_slack_runner.py new file mode 100644 index 0000000000..8dc9367fbe --- /dev/null +++ b/tests/unittests/integrations/slack/test_slack_runner.py @@ -0,0 +1,148 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from unittest.mock import AsyncMock +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.slack import SlackRunner +from google.adk.runners import Runner +from google.genai import types +from slack_bolt.app.async_app import AsyncApp + + +class TestSlackRunner(unittest.IsolatedAsyncioTestCase): + + def setUp(self): + self.mock_runner = MagicMock(spec=Runner) + self.mock_slack_app = MagicMock(spec=AsyncApp) + self.mock_slack_app.client = MagicMock() + self.mock_slack_app.client.chat_update = AsyncMock() + self.mock_slack_app.client.chat_delete = AsyncMock() + self.slack_runner = SlackRunner(self.mock_runner, self.mock_slack_app) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_success(self, mock_logger): + # Setup mocks + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Hello bot", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + # Mock runner.run_async to yield a response + mock_event = MagicMock() + mock_event.content = types.Content( + role="model", parts=[types.Part(text="Hi user!")] + ) + + async def mock_run_async(*args, **kwargs): + yield mock_event + + self.mock_runner.run_async.side_effect = mock_run_async + + # Call the handler + await self.slack_runner._handle_message(event, mock_say) + + # Verify calls + self.mock_runner.run_async.assert_called_once() + mock_say.assert_called_once_with( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + self.mock_slack_app.client.chat_update.assert_called_once_with( + channel="C67890", + ts="thinking_ts", + text="Hi user!", + ) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_multi_turn(self, mock_logger): + # Setup mocks + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Tell me two things", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + # Mock runner.run_async to yield two responses + e1 = MagicMock() + e1.content = types.Content( + role="model", parts=[types.Part(text="First thing.")] + ) + e2 = MagicMock() + e2.content = types.Content( + role="model", parts=[types.Part(text="Second thing.")] + ) + + async def mock_run_async(*args, **kwargs): + yield e1 + yield e2 + + self.mock_runner.run_async.side_effect = mock_run_async + + await self.slack_runner._handle_message(event, mock_say) + + # First message uses chat_update + self.mock_slack_app.client.chat_update.assert_called_once_with( + channel="C67890", + ts="thinking_ts", + text="First thing.", + ) + # Second message uses say + self.assertEqual(mock_say.call_count, 2) + mock_say.assert_any_call( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + mock_say.assert_any_call( + text="Second thing.", thread_ts="1234567890.123456" + ) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_error(self, mock_logger): + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Trigger error", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + async def mock_run_async_error(*args, **kwargs): + raise Exception("Something went wrong") + yield # To make it a generator + + self.mock_runner.run_async.side_effect = mock_run_async_error + + await self.slack_runner._handle_message(event, mock_say) + + mock_say.assert_called_once_with( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + self.mock_slack_app.client.chat_update.assert_called_once() + self.assertIn( + "Sorry, I encountered an error", + self.mock_slack_app.client.chat_update.call_args[1]["text"], + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unittests/integrations/vmaas/__init__.py b/tests/unittests/integrations/vmaas/__init__.py new file mode 100644 index 0000000000..0a2669d7a2 --- /dev/null +++ b/tests/unittests/integrations/vmaas/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/integrations/vmaas/test_sandbox_client.py b/tests/unittests/integrations/vmaas/test_sandbox_client.py new file mode 100644 index 0000000000..c9b70a81ef --- /dev/null +++ b/tests/unittests/integrations/vmaas/test_sandbox_client.py @@ -0,0 +1,364 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the SandboxClient class.""" + +import base64 +import json +import unittest +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.vmaas.sandbox_client import SandboxClient + + +def _make_response(data: dict) -> MagicMock: + """Create a mock HttpResponse with a JSON body.""" + response = MagicMock() + response.body = json.dumps(data) + return response + + +class TestSandboxClient(unittest.IsolatedAsyncioTestCase): + """Tests for SandboxClient.""" + + def setUp(self): + """Set up test fixtures.""" + self.mock_vertexai_client = MagicMock() + self.mock_sandbox = MagicMock() + self.access_token = "test_token_12345" + self.client = SandboxClient( + vertexai_client=self.mock_vertexai_client, + sandbox=self.mock_sandbox, + access_token=self.access_token, + ) + + def test_init(self): + """Test client initialization.""" + self.assertEqual(self.client._client, self.mock_vertexai_client) + self.assertEqual(self.client._sandbox, self.mock_sandbox) + self.assertEqual(self.client._access_token, self.access_token) + + def test_update_access_token(self): + """Test updating access token.""" + new_token = "new_token_67890" + self.client.update_access_token(new_token) + self.assertEqual(self.client._access_token, new_token) + + @patch("asyncio.to_thread") + async def test_make_cdp_request(self, mock_to_thread): + """Test making a single CDP request.""" + mock_to_thread.return_value = _make_response({"result": "success"}) + + result = await self.client.make_cdp_request( + "Page.navigate", {"url": "https://example.com"} + ) + + self.assertEqual(result, {"result": "success"}) + mock_to_thread.assert_called_once() + call_args = mock_to_thread.call_args + # First positional arg is the send_command method + self.assertEqual( + call_args[0][0], + self.mock_vertexai_client.agent_engines.sandboxes.send_command, + ) + # Check keyword args + self.assertEqual(call_args[1]["http_method"], "POST") + self.assertEqual(call_args[1]["path"], "cdp") + self.assertEqual(call_args[1]["access_token"], self.access_token) + self.assertEqual(call_args[1]["sandbox_environment"], self.mock_sandbox) + self.assertEqual( + call_args[1]["request_dict"], + {"command": "Page.navigate", "params": {"url": "https://example.com"}}, + ) + + @patch("asyncio.to_thread") + async def test_make_cdp_batch_request_with_batch_endpoint( + self, mock_to_thread + ): + """Test making a batch CDP request using batch endpoint.""" + mock_to_thread.return_value = _make_response( + {"results": [{"status": "success"}, {"status": "success"}]} + ) + + commands = [ + { + "command": "Input.dispatchMouseEvent", + "params": {"type": "mousePressed"}, + }, + { + "command": "Input.dispatchMouseEvent", + "params": {"type": "mouseReleased"}, + }, + ] + result = await self.client.make_cdp_batch_request(commands) + + # Should have 2 results from batch + self.assertEqual(len(result), 2) + # Should have made 1 call to /cdps + self.assertEqual(mock_to_thread.call_count, 1) + call_args = mock_to_thread.call_args + self.assertEqual(call_args[1]["path"], "cdps") + + @patch("asyncio.to_thread") + async def test_make_cdp_batch_request_fallback_sequential( + self, mock_to_thread + ): + """Test batch CDP falls back to sequential when batch endpoint fails.""" + + # First call (to /cdps) fails with 404 + # Subsequent calls (to /cdp) succeed + def side_effect(*args, **kwargs): + if kwargs.get("path") == "cdps": + raise Exception("404 Not Found") + return _make_response({"result": "ok"}) + + mock_to_thread.side_effect = side_effect + + commands = [ + {"command": "Command1", "params": {}}, + {"command": "Command2", "params": {}}, + ] + result = await self.client.make_cdp_batch_request(commands) + + # Should have 2 results (sequential fallback) + self.assertEqual(len(result), 2) + self.assertEqual(result[0]["status"], "success") + self.assertEqual(result[1]["status"], "success") + # Should have made 3 calls (1 failed /cdps + 2 sequential /cdp) + self.assertEqual(mock_to_thread.call_count, 3) + + @patch("asyncio.to_thread") + async def test_get_screenshot(self, mock_to_thread): + """Test capturing a screenshot.""" + # Create a simple PNG-like base64 data + png_data = b"\x89PNG\r\n\x1a\n" + base64_data = base64.b64encode(png_data).decode() + + mock_to_thread.return_value = _make_response({"data": base64_data}) + + result = await self.client.get_screenshot() + + self.assertEqual(result, png_data) + call_args = mock_to_thread.call_args + self.assertEqual( + call_args[1]["request_dict"]["command"], "Page.captureScreenshot" + ) + + @patch("asyncio.to_thread") + async def test_get_current_url(self, mock_to_thread): + """Test getting the current URL.""" + mock_to_thread.return_value = _make_response({ + "active_tab_id": "tab1", + "all_tabs": [ + {"id": "tab1", "url": "https://example.com", "title": "Example"}, + ], + }) + + result = await self.client.get_current_url() + + self.assertEqual(result, "https://example.com") + call_args = mock_to_thread.call_args + self.assertEqual(call_args[1]["path"], "tabs") + self.assertEqual(call_args[1]["http_method"], "GET") + + @patch("asyncio.to_thread") + async def test_get_current_url_no_active_tab(self, mock_to_thread): + """Test getting URL when no tab is active.""" + mock_to_thread.return_value = _make_response({ + "active_tab_id": None, + "all_tabs": [], + }) + + result = await self.client.get_current_url() + + self.assertIsNone(result) + + @patch("asyncio.to_thread") + async def test_navigate(self, mock_to_thread): + """Test navigating to a URL.""" + mock_to_thread.return_value = _make_response({"frameId": "frame123"}) + + result = await self.client.navigate("https://example.com") + + self.assertEqual(result, {"frameId": "frame123"}) + call_args = mock_to_thread.call_args + self.assertEqual( + call_args[1]["request_dict"], + {"command": "Page.navigate", "params": {"url": "https://example.com"}}, + ) + + @patch("asyncio.to_thread") + async def test_click_at(self, mock_to_thread): + """Test clicking at coordinates.""" + # Return success for batch endpoint + mock_to_thread.return_value = _make_response({"results": [{}, {}]}) + + await self.client.click_at(100, 200) + + # Should call batch endpoint + call_args = mock_to_thread.call_args + self.assertEqual(call_args[1]["path"], "cdps") + commands = call_args[1]["request_dict"]["commands"] + self.assertEqual(len(commands), 2) + self.assertEqual(commands[0]["params"]["type"], "mousePressed") + self.assertEqual(commands[1]["params"]["type"], "mouseReleased") + + @patch("asyncio.to_thread") + async def test_hover_at(self, mock_to_thread): + """Test hovering at coordinates.""" + mock_to_thread.return_value = _make_response({}) + + await self.client.hover_at(150, 250) + + call_args = mock_to_thread.call_args + self.assertEqual( + call_args[1]["request_dict"]["params"], + {"type": "mouseMoved", "x": 150, "y": 250}, + ) + + @patch("asyncio.to_thread") + async def test_scroll_at_down(self, mock_to_thread): + """Test scrolling down.""" + mock_to_thread.return_value = _make_response({}) + + await self.client.scroll_at(100, 200, "down", 300) + + call_args = mock_to_thread.call_args + params = call_args[1]["request_dict"]["params"] + self.assertEqual(params["type"], "mouseWheel") + self.assertEqual(params["x"], 100) + self.assertEqual(params["y"], 200) + self.assertEqual(params["deltaX"], 0) + self.assertEqual(params["deltaY"], 300) # Positive for down + + @patch("asyncio.to_thread") + async def test_scroll_at_up(self, mock_to_thread): + """Test scrolling up.""" + mock_to_thread.return_value = _make_response({}) + + await self.client.scroll_at(100, 200, "up", 300) + + call_args = mock_to_thread.call_args + params = call_args[1]["request_dict"]["params"] + self.assertEqual(params["deltaY"], -300) # Negative for up + + @patch("asyncio.to_thread") + async def test_go_back(self, mock_to_thread): + """Test navigating back.""" + # First call returns navigation history, second navigates + mock_to_thread.side_effect = [ + _make_response({ + "currentIndex": 1, + "entries": [ + {"id": 1, "url": "https://first.com"}, + {"id": 2, "url": "https://second.com"}, + ], + }), + _make_response({}), # Navigation response + ] + + result = await self.client.go_back() + + self.assertTrue(result) + self.assertEqual(mock_to_thread.call_count, 2) + + @patch("asyncio.to_thread") + async def test_go_back_at_beginning(self, mock_to_thread): + """Test navigating back when at beginning of history.""" + mock_to_thread.return_value = _make_response({ + "currentIndex": 0, + "entries": [{"id": 1, "url": "https://first.com"}], + }) + + result = await self.client.go_back() + + self.assertFalse(result) + # Should only call once (to get history) + self.assertEqual(mock_to_thread.call_count, 1) + + @patch("asyncio.to_thread") + async def test_type_text_with_clear_and_enter(self, mock_to_thread): + """Test typing text with clear and enter options.""" + # Return success for batch endpoint + mock_to_thread.return_value = _make_response({"results": [{}] * 7}) + + await self.client.type_text( + "hello", press_enter=True, clear_before_typing=True + ) + + # Should have: Ctrl+A down, Ctrl+A up, Delete down, Delete up, + # insertText, Enter down, Enter up = 7 commands in batch + call_args = mock_to_thread.call_args + commands = call_args[1]["request_dict"]["commands"] + self.assertEqual(len(commands), 7) + + @patch("asyncio.to_thread") + async def test_key_combination(self, mock_to_thread): + """Test pressing key combinations.""" + mock_to_thread.return_value = _make_response({"results": [{}] * 4}) + + await self.client.key_combination(["control", "c"]) + + # Should have: Control down, c down, c up, Control up = 4 commands + call_args = mock_to_thread.call_args + commands = call_args[1]["request_dict"]["commands"] + self.assertEqual(len(commands), 4) + + @patch("asyncio.to_thread") + async def test_drag_and_drop(self, mock_to_thread): + """Test drag and drop operation.""" + mock_to_thread.return_value = _make_response({"results": [{}] * 4}) + + await self.client.drag_and_drop(10, 20, 100, 200) + + # Should have: mouseMoved (start), mousePressed, mouseMoved (end), + # mouseReleased = 4 commands + call_args = mock_to_thread.call_args + commands = call_args[1]["request_dict"]["commands"] + self.assertEqual(len(commands), 4) + + @patch("asyncio.to_thread") + async def test_health_check_healthy(self, mock_to_thread): + """Test health check when sandbox is healthy.""" + mock_to_thread.return_value = _make_response({"status": "healthy"}) + + result = await self.client.health_check() + + self.assertTrue(result) + call_args = mock_to_thread.call_args + self.assertEqual(call_args[1]["http_method"], "GET") + self.assertEqual(call_args[1]["path"], "") + + @patch("asyncio.to_thread") + async def test_health_check_unhealthy(self, mock_to_thread): + """Test health check when sandbox is unhealthy.""" + mock_to_thread.return_value = _make_response({"status": "unhealthy"}) + + result = await self.client.health_check() + + self.assertFalse(result) + + @patch("asyncio.to_thread") + async def test_health_check_exception(self, mock_to_thread): + """Test health check when request fails.""" + mock_to_thread.side_effect = Exception("Connection failed") + + result = await self.client.health_check() + + self.assertFalse(result) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unittests/integrations/vmaas/test_sandbox_computer.py b/tests/unittests/integrations/vmaas/test_sandbox_computer.py new file mode 100644 index 0000000000..c0802ae44f --- /dev/null +++ b/tests/unittests/integrations/vmaas/test_sandbox_computer.py @@ -0,0 +1,505 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the AgentEngineSandboxComputer class.""" + +import time +import unittest +from unittest.mock import AsyncMock +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.vmaas.sandbox_computer import _STATE_KEY_ACCESS_TOKEN +from google.adk.integrations.vmaas.sandbox_computer import _STATE_KEY_AGENT_ENGINE_NAME +from google.adk.integrations.vmaas.sandbox_computer import _STATE_KEY_SANDBOX_NAME +from google.adk.integrations.vmaas.sandbox_computer import _STATE_KEY_TOKEN_EXPIRY +from google.adk.integrations.vmaas.sandbox_computer import AgentEngineSandboxComputer +from google.adk.tools.computer_use.base_computer import ComputerEnvironment +from google.adk.tools.computer_use.base_computer import ComputerState + + +class TestAgentEngineSandboxComputer(unittest.IsolatedAsyncioTestCase): + """Tests for AgentEngineSandboxComputer.""" + + def setUp(self): + """Set up test fixtures.""" + self.project_id = "test-project" + self.location = "us-central1" + self.service_account = "sa@test-project.iam.gserviceaccount.com" + + def test_init(self): + """Test computer initialization.""" + computer = AgentEngineSandboxComputer( + project_id=self.project_id, + location=self.location, + service_account_email=self.service_account, + ) + + self.assertEqual(computer._project_id, self.project_id) + self.assertEqual(computer._location, self.location) + self.assertEqual(computer._service_account_email, self.service_account) + self.assertEqual(computer._screen_size, (1280, 720)) + + def test_init_with_byos(self): + """Test initialization with bring-your-own-sandbox.""" + agent_engine_name = ( + "projects/test/locations/us-central1/reasoningEngines/123" + ) + sandbox_name = f"{agent_engine_name}/sandboxEnvironments/456" + + computer = AgentEngineSandboxComputer( + project_id=self.project_id, + sandbox_name=sandbox_name, + ) + + # Agent engine name should be extracted from sandbox_name + self.assertEqual(computer._agent_engine_name, agent_engine_name) + self.assertEqual(computer._sandbox_name, sandbox_name) + + def test_init_with_vertexai_client(self): + """Test initialization with provided vertexai client.""" + mock_client = MagicMock() + computer = AgentEngineSandboxComputer(vertexai_client=mock_client) + self.assertEqual(computer._client, mock_client) + + async def test_screen_size(self): + """Test screen_size returns hardcoded size.""" + computer = AgentEngineSandboxComputer() + result = await computer.screen_size() + self.assertEqual(result, (1280, 720)) + + async def test_environment(self): + """Test environment returns ENVIRONMENT_BROWSER.""" + computer = AgentEngineSandboxComputer() + result = await computer.environment() + self.assertEqual(result, ComputerEnvironment.ENVIRONMENT_BROWSER) + + async def test_ensure_agent_engine_with_sandbox_name(self): + """Test _ensure_agent_engine extracts agent engine from sandbox_name.""" + agent_engine_name = ( + "projects/test/locations/us-central1/reasoningEngines/123" + ) + sandbox_name = f"{agent_engine_name}/sandboxEnvironments/456" + computer = AgentEngineSandboxComputer(sandbox_name=sandbox_name) + computer._session_state = {} + + result = await computer._ensure_agent_engine() + + self.assertEqual(result, agent_engine_name) + # Should not have touched session state + self.assertNotIn(_STATE_KEY_AGENT_ENGINE_NAME, computer._session_state) + + async def test_ensure_agent_engine_from_session_state(self): + """Test _ensure_agent_engine uses session state value.""" + agent_engine_name = ( + "projects/test/locations/us-central1/reasoningEngines/123" + ) + computer = AgentEngineSandboxComputer() + computer._session_state = {_STATE_KEY_AGENT_ENGINE_NAME: agent_engine_name} + + result = await computer._ensure_agent_engine() + + self.assertEqual(result, agent_engine_name) + + @patch("google.adk.integrations.vmaas.sandbox_computer.asyncio.to_thread") + @patch.object(AgentEngineSandboxComputer, "_get_client") + async def test_ensure_agent_engine_creates_new( + self, mock_get_client, mock_to_thread + ): + """Test _ensure_agent_engine creates new agent engine.""" + new_engine_name = "projects/test/locations/us-central1/reasoningEngines/new" + + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + mock_engine = MagicMock() + mock_engine.api_resource.name = new_engine_name + mock_to_thread.return_value = mock_engine + + computer = AgentEngineSandboxComputer(project_id=self.project_id) + computer._session_state = {} + + result = await computer._ensure_agent_engine() + + self.assertEqual(result, new_engine_name) + self.assertEqual( + computer._session_state[_STATE_KEY_AGENT_ENGINE_NAME], new_engine_name + ) + + @patch("google.adk.integrations.vmaas.sandbox_computer.asyncio.to_thread") + @patch.object(AgentEngineSandboxComputer, "_get_client") + async def test_get_sandbox_with_constructor_value( + self, mock_get_client, mock_to_thread + ): + """Test _get_sandbox uses constructor value (BYOS mode).""" + sandbox_name = "projects/test/sandboxEnvironments/123" + + mock_sandbox = MagicMock() + mock_sandbox.name = sandbox_name + mock_to_thread.return_value = mock_sandbox + + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer(sandbox_name=sandbox_name) + computer._session_state = {} + + result_name, result_sandbox = await computer._get_sandbox() + + self.assertEqual(result_name, sandbox_name) + self.assertEqual(result_sandbox, mock_sandbox) + + @patch("google.adk.integrations.vmaas.sandbox_computer.asyncio.to_thread") + @patch.object(AgentEngineSandboxComputer, "_get_client") + async def test_get_sandbox_from_session_state( + self, mock_get_client, mock_to_thread + ): + """Test _get_sandbox uses session state value.""" + sandbox_name = "projects/test/sandboxEnvironments/123" + + mock_sandbox = MagicMock() + mock_to_thread.return_value = mock_sandbox + + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {_STATE_KEY_SANDBOX_NAME: sandbox_name} + + result_name, result_sandbox = await computer._get_sandbox() + + self.assertEqual(result_name, sandbox_name) + self.assertEqual(result_sandbox, mock_sandbox) + + async def test_get_access_token_cached(self): + """Test _get_access_token uses cached token.""" + sandbox_name = "projects/test/sandboxEnvironments/123" + cached_token = "cached_token_123" + # Set expiry far in the future + token_expiry = time.time() + 3600 + + computer = AgentEngineSandboxComputer() + computer._session_state = { + _STATE_KEY_ACCESS_TOKEN: cached_token, + _STATE_KEY_TOKEN_EXPIRY: token_expiry, + } + + result = await computer._get_access_token(sandbox_name) + + self.assertEqual(result, cached_token) + + @patch("google.adk.integrations.vmaas.sandbox_computer.asyncio.to_thread") + @patch.object(AgentEngineSandboxComputer, "_get_client") + async def test_get_access_token_generates_new_when_expired( + self, mock_get_client, mock_to_thread + ): + """Test _get_access_token generates new token when expired.""" + sandbox_name = "projects/test/sandboxEnvironments/123" + new_token = "new_token_456" + # Set expiry in the past + token_expiry = time.time() - 100 + + mock_to_thread.return_value = new_token + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer( + service_account_email=self.service_account + ) + computer._session_state = { + _STATE_KEY_ACCESS_TOKEN: "old_token", + _STATE_KEY_TOKEN_EXPIRY: token_expiry, + } + + result = await computer._get_access_token(sandbox_name) + + self.assertEqual(result, new_token) + self.assertEqual( + computer._session_state[_STATE_KEY_ACCESS_TOKEN], new_token + ) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_click_at(self, mock_get_client): + """Test click_at method.""" + mock_client = AsyncMock() + mock_client.click_at = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.click_at(100, 200) + + mock_client.click_at.assert_called_once_with(100, 200) + self.assertIsInstance(result, ComputerState) + self.assertEqual(result.screenshot, b"png_data") + self.assertEqual(result.url, "https://example.com") + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_hover_at(self, mock_get_client): + """Test hover_at method.""" + mock_client = AsyncMock() + mock_client.hover_at = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.hover_at(150, 250) + + mock_client.hover_at.assert_called_once_with(150, 250) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_type_text_at(self, mock_get_client): + """Test type_text_at method.""" + mock_client = AsyncMock() + mock_client.type_text_at = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.type_text_at( + 100, + 200, + "hello", + press_enter=True, + clear_before_typing=False, + ) + + mock_client.type_text_at.assert_called_once_with( + x=100, + y=200, + text="hello", + press_enter=True, + clear_before_typing=False, + ) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_scroll_document(self, mock_get_client): + """Test scroll_document method.""" + mock_client = AsyncMock() + mock_client.scroll_at = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.scroll_document("down") + + # Should scroll at center of screen + mock_client.scroll_at.assert_called_once_with(640, 360, "down", 400) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_scroll_at(self, mock_get_client): + """Test scroll_at method.""" + mock_client = AsyncMock() + mock_client.scroll_at = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.scroll_at(100, 200, "up", 500) + + mock_client.scroll_at.assert_called_once_with(100, 200, "up", 500) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_navigate(self, mock_get_client): + """Test navigate method.""" + mock_client = AsyncMock() + mock_client.navigate = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://newsite.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.navigate("https://newsite.com") + + mock_client.navigate.assert_called_once_with("https://newsite.com") + self.assertIsInstance(result, ComputerState) + self.assertEqual(result.url, "https://newsite.com") + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_search(self, mock_get_client): + """Test search method navigates to search engine.""" + mock_client = AsyncMock() + mock_client.navigate = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock( + return_value="https://www.google.com" + ) + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer( + search_engine_url="https://www.google.com" + ) + computer._session_state = {} + + result = await computer.search() + + mock_client.navigate.assert_called_once_with("https://www.google.com") + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_go_back(self, mock_get_client): + """Test go_back method.""" + mock_client = AsyncMock() + mock_client.go_back = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://prev.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.go_back() + + mock_client.go_back.assert_called_once() + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_go_forward(self, mock_get_client): + """Test go_forward method.""" + mock_client = AsyncMock() + mock_client.go_forward = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://next.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.go_forward() + + mock_client.go_forward.assert_called_once() + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_key_combination(self, mock_get_client): + """Test key_combination method.""" + mock_client = AsyncMock() + mock_client.key_combination = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.key_combination(["control", "c"]) + + mock_client.key_combination.assert_called_once_with(["control", "c"]) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_drag_and_drop(self, mock_get_client): + """Test drag_and_drop method.""" + mock_client = AsyncMock() + mock_client.drag_and_drop = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.drag_and_drop(10, 20, 100, 200) + + mock_client.drag_and_drop.assert_called_once_with(10, 20, 100, 200) + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_wait(self, mock_get_client): + """Test wait method.""" + mock_client = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + # Use a short wait time for testing + start_time = time.time() + result = await computer.wait(1) + elapsed = time.time() - start_time + + self.assertGreaterEqual(elapsed, 0.9) # Allow some margin + self.assertIsInstance(result, ComputerState) + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_current_state(self, mock_get_client): + """Test current_state method.""" + mock_client = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="https://example.com") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.current_state() + + self.assertIsInstance(result, ComputerState) + self.assertEqual(result.screenshot, b"png_data") + self.assertEqual(result.url, "https://example.com") + + @patch.object(AgentEngineSandboxComputer, "_get_sandbox_client") + async def test_open_web_browser(self, mock_get_client): + """Test open_web_browser method returns current state.""" + mock_client = AsyncMock() + mock_client.get_screenshot = AsyncMock(return_value=b"png_data") + mock_client.get_current_url = AsyncMock(return_value="about:blank") + mock_get_client.return_value = mock_client + + computer = AgentEngineSandboxComputer() + computer._session_state = {} + + result = await computer.open_web_browser() + + # open_web_browser is a no-op for sandbox, just returns current state + self.assertIsInstance(result, ComputerState) + + async def test_initialize_is_noop(self): + """Test initialize does nothing (lazy provisioning).""" + computer = AgentEngineSandboxComputer() + # Should not raise + await computer.initialize() + + async def test_close_is_noop(self): + """Test close does nothing (TTL-based cleanup).""" + computer = AgentEngineSandboxComputer() + # Should not raise + await computer.close() + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unittests/memory/test_vertex_ai_memory_bank_service.py b/tests/unittests/memory/test_vertex_ai_memory_bank_service.py index c498b8335b..b6eead6465 100644 --- a/tests/unittests/memory/test_vertex_ai_memory_bank_service.py +++ b/tests/unittests/memory/test_vertex_ai_memory_bank_service.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from datetime import datetime +import asyncio +import datetime from typing import Any from typing import Iterable from typing import Optional @@ -87,7 +88,7 @@ async def __anext__(self) -> Any: author='user', timestamp=12345, ), - # Function call event, should be ignored + # Function call event, no longer filtered out Event( id='666', invocation_id='456', @@ -207,6 +208,7 @@ def mock_vertexai_client(): mock_async_client.agent_engines.memories.generate = mock.AsyncMock() mock_async_client.agent_engines.memories.create = mock.AsyncMock() mock_async_client.agent_engines.memories.retrieve = mock.AsyncMock() + mock_async_client.agent_engines.memories.ingest_events = mock.AsyncMock() mock_client = mock.MagicMock() mock_client.aio = mock_async_client @@ -243,20 +245,28 @@ async def test_add_session_to_memory(mock_vertexai_client): memory_service = mock_vertex_ai_memory_bank_service() await memory_service.add_session_to_memory(MOCK_SESSION) - mock_vertexai_client.agent_engines.memories.generate.assert_awaited_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] - }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config={'wait_for_completion': False}, + # Allow the fire-and-forget task to complete. + await asyncio.sleep(0) + + mock_vertexai_client.agent_engines.memories.generate.assert_not_called() + mock_vertexai_client.agent_engines.memories.ingest_events.assert_awaited_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.ingest_events.call_args.kwargs + ) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 2 + assert source.events[0].event_id == '444' + assert source.events[0].content.parts[0].text == 'test_content' + assert source.events[0].event_time == datetime.datetime.fromtimestamp( + 12345, tz=datetime.timezone.utc ) + assert source.events[1].event_id == '666' + assert source.events[1].content.parts[0].function_call.name == 'test_function' @pytest.mark.asyncio @@ -269,7 +279,10 @@ async def test_add_events_to_memory_with_explicit_events_and_metadata( user_id=MOCK_SESSION.user_id, session_id=MOCK_SESSION.id, events=[MOCK_SESSION.events[0]], - custom_metadata={'ttl': '6000s', 'source': 'agent'}, + custom_metadata={ + 'ttl': '6000s', + 'source': 'agent', + }, ) expected_config = { @@ -279,26 +292,20 @@ async def test_add_events_to_memory_with_explicit_events_and_metadata( if _supports_generate_memories_metadata(): expected_config['metadata'] = {'source': {'string_value': 'agent'}} - mock_vertexai_client.agent_engines.memories.generate.assert_called_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] - }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config=expected_config, - ) - generate_config = ( - mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs[ - 'config' - ] + mock_vertexai_client.agent_engines.memories.generate.assert_called_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs ) - vertex_common_types.GenerateAgentEngineMemoriesConfig(**generate_config) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['config'] == expected_config + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].content.parts[0].text == 'test_content' + vertex_common_types.GenerateAgentEngineMemoriesConfig(**call_kwargs['config']) @pytest.mark.asyncio @@ -310,28 +317,26 @@ async def test_add_events_to_memory_without_session_id( app_name=MOCK_SESSION.app_name, user_id=MOCK_SESSION.user_id, events=[MOCK_SESSION.events[0]], + custom_metadata={'revision_ttl': '3600s'}, ) - mock_vertexai_client.agent_engines.memories.generate.assert_called_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] - }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config={'wait_for_completion': False}, - ) - generate_config = ( - mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs[ - 'config' - ] + mock_vertexai_client.agent_engines.memories.generate.assert_called_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs ) - vertex_common_types.GenerateAgentEngineMemoriesConfig(**generate_config) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['config'] == { + 'wait_for_completion': False, + 'revision_ttl': '3600s', + } + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].content.parts[0].text == 'test_content' + vertex_common_types.GenerateAgentEngineMemoriesConfig(**call_kwargs['config']) mock_vertexai_client.agent_engines.memories.create.assert_not_called() @@ -358,26 +363,20 @@ async def test_add_events_to_memory_merges_metadata_field_and_unknown_keys( 'source': {'string_value': 'agent'}, } - mock_vertexai_client.agent_engines.memories.generate.assert_called_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] - }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config=expected_config, - ) - generate_config = ( - mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs[ - 'config' - ] + mock_vertexai_client.agent_engines.memories.generate.assert_called_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs ) - vertex_common_types.GenerateAgentEngineMemoriesConfig(**generate_config) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['config'] == expected_config + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].content.parts[0].text == 'test_content' + vertex_common_types.GenerateAgentEngineMemoriesConfig(**call_kwargs['config']) @pytest.mark.asyncio @@ -390,29 +389,25 @@ async def test_add_events_to_memory_none_wait_for_completion_keeps_default( user_id=MOCK_SESSION.user_id, session_id=MOCK_SESSION.id, events=[MOCK_SESSION.events[0]], - custom_metadata={'wait_for_completion': None}, - ) - - mock_vertexai_client.agent_engines.memories.generate.assert_called_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] + custom_metadata={ + 'wait_for_completion': None, }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config={'wait_for_completion': False}, ) - generate_config = ( - mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs[ - 'config' - ] + + mock_vertexai_client.agent_engines.memories.generate.assert_called_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs ) - vertex_common_types.GenerateAgentEngineMemoriesConfig(**generate_config) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['config'] == {'wait_for_completion': False} + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].content.parts[0].text == 'test_content' + vertex_common_types.GenerateAgentEngineMemoriesConfig(**call_kwargs['config']) @pytest.mark.asyncio @@ -431,29 +426,23 @@ async def test_add_events_to_memory_ttl_used_when_revision_ttl_is_none( }, ) - mock_vertexai_client.agent_engines.memories.generate.assert_called_once_with( - name='reasoningEngines/123', - direct_contents_source={ - 'events': [ - { - 'content': { - 'parts': [{'text': 'test_content'}], - } - } - ] - }, - scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, - config={ - 'wait_for_completion': False, - 'revision_ttl': '6000s', - }, + mock_vertexai_client.agent_engines.memories.generate.assert_called_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs ) - generate_config = ( - mock_vertexai_client.agent_engines.memories.generate.call_args.kwargs[ - 'config' - ] - ) - vertex_common_types.GenerateAgentEngineMemoriesConfig(**generate_config) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['config'] == { + 'wait_for_completion': False, + 'revision_ttl': '6000s', + } + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].content.parts[0].text == 'test_content' + vertex_common_types.GenerateAgentEngineMemoriesConfig(**call_kwargs['config']) @pytest.mark.asyncio @@ -465,13 +454,87 @@ async def test_add_events_to_memory_with_filtered_events_skips_rpc( app_name=MOCK_SESSION.app_name, user_id=MOCK_SESSION.user_id, session_id=MOCK_SESSION.id, - events=[MOCK_SESSION.events[1], MOCK_SESSION.events[2]], + events=[MOCK_SESSION.events[1]], + custom_metadata={'revision_ttl': '3600s'}, ) mock_vertexai_client.agent_engines.memories.generate.assert_not_called() mock_vertexai_client.agent_engines.memories.create.assert_not_called() +@pytest.mark.asyncio +async def test_add_events_to_memory_via_ingest( + mock_vertexai_client, +): + memory_service = mock_vertex_ai_memory_bank_service() + await memory_service.add_events_to_memory( + app_name=MOCK_SESSION.app_name, + user_id=MOCK_SESSION.user_id, + events=[MOCK_SESSION.events[0]], + custom_metadata={ + 'stream_id': 'stream-123', + 'force_flush': True, + 'generation_trigger_config': { + 'generation_rule': {'idle_duration': '60s'}, + }, + }, + ) + + # Allow the fire-and-forget task to complete. + await asyncio.sleep(0) + + mock_vertexai_client.agent_engines.memories.ingest_events.assert_awaited_once() + call_kwargs = ( + mock_vertexai_client.agent_engines.memories.ingest_events.call_args.kwargs + ) + assert call_kwargs['name'] == 'reasoningEngines/123' + assert call_kwargs['scope'] == { + 'app_name': MOCK_APP_NAME, + 'user_id': MOCK_USER_ID, + } + assert call_kwargs['stream_id'] == 'stream-123' + assert call_kwargs['config'] == {'force_flush': True} + assert call_kwargs['generation_trigger_config'] == { + 'generation_rule': {'idle_duration': '60s'}, + } + source = call_kwargs['direct_contents_source'] + assert len(source.events) == 1 + assert source.events[0].event_id == '444' + assert source.events[0].content.parts[0].text == 'test_content' + assert source.events[0].event_time == datetime.datetime.fromtimestamp( + 12345, tz=datetime.timezone.utc + ) + + +@pytest.mark.asyncio +async def test_add_events_to_memory_via_ingest_no_events( + mock_vertexai_client, +): + """No-events requests are valid for trigger config updates.""" + memory_service = mock_vertex_ai_memory_bank_service() + await memory_service.add_events_to_memory( + app_name=MOCK_SESSION.app_name, + user_id=MOCK_SESSION.user_id, + events=[], + custom_metadata={ + 'generation_trigger_config': { + 'generation_rule': {'idle_duration': '60s'}, + }, + }, + ) + + # Allow the fire-and-forget task to complete. + await asyncio.sleep(0) + + mock_vertexai_client.agent_engines.memories.ingest_events.assert_awaited_once_with( + name='reasoningEngines/123', + scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, + generation_trigger_config={ + 'generation_rule': {'idle_duration': '60s'}, + }, + ) + + @pytest.mark.asyncio async def test_add_memory_calls_create( mock_vertexai_client, @@ -751,7 +814,7 @@ async def test_add_memory_with_missing_text_raises( memory_service = mock_vertex_ai_memory_bank_service() with pytest.raises( ValueError, - match=r'memories\[0\] must include text', + match=r'memories\[0\] must include non-whitespace text', ): await memory_service.add_memory( app_name=MOCK_SESSION.app_name, @@ -889,14 +952,21 @@ async def test_add_empty_session_to_memory(mock_vertexai_client): memory_service = mock_vertex_ai_memory_bank_service() await memory_service.add_session_to_memory(MOCK_SESSION_WITH_EMPTY_EVENTS) - mock_vertexai_client.agent_engines.memories.generate.assert_not_awaited() + # Allow the fire-and-forget task to complete. + await asyncio.sleep(0) + + mock_vertexai_client.agent_engines.memories.generate.assert_not_called() + mock_vertexai_client.agent_engines.memories.ingest_events.assert_awaited_once_with( + name='reasoningEngines/123', + scope={'app_name': MOCK_APP_NAME, 'user_id': MOCK_USER_ID}, + ) @pytest.mark.asyncio async def test_search_memory(mock_vertexai_client): retrieved_memory = mock.MagicMock() retrieved_memory.memory.fact = 'test_content' - retrieved_memory.memory.update_time = datetime( + retrieved_memory.memory.update_time = datetime.datetime( 2024, 12, 12, 12, 12, 12, 123456 ) diff --git a/tests/unittests/models/test_anthropic_llm.py b/tests/unittests/models/test_anthropic_llm.py index 8273d74aac..fb44d5c8e7 100644 --- a/tests/unittests/models/test_anthropic_llm.py +++ b/tests/unittests/models/test_anthropic_llm.py @@ -97,6 +97,41 @@ def llm_request(): ) +def test_claude_anthropic_client_creation(): + # Test with environment variables + with mock.patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "env-project", + "GOOGLE_CLOUD_LOCATION": "env-location", + }, + ): + model = Claude(model="claude-3-5-sonnet-v2@20241022") + with mock.patch( + "google.adk.models.anthropic_llm.AsyncAnthropicVertex", autospec=True + ) as mock_client_class: + _ = model._anthropic_client + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs["project_id"] == "env-project" + assert kwargs["region"] == "env-location" + + +def test_claude_anthropic_client_creation_with_full_resource_name(): + # Test with full resource name in model string + model = Claude( + model="projects/test-project/locations/test-location/publishers/anthropic/models/claude-3-5-sonnet-v2@20241022" + ) + with mock.patch( + "google.adk.models.anthropic_llm.AsyncAnthropicVertex", autospec=True + ) as mock_client_class: + _ = model._anthropic_client + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs["project_id"] == "test-project" + assert kwargs["region"] == "test-location" + + def test_supported_models(): models = Claude.supported_models() assert len(models) == 2 @@ -280,6 +315,220 @@ def test_supported_models(): }, ), ), + ( + "function_with_nested_object_parameter", + types.FunctionDeclaration( + name="update_profile", + description="Updates a user profile.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "profile": types.Schema( + type=types.Type.OBJECT, + description="The profile data", + properties={ + "name": types.Schema( + type=types.Type.STRING, + description="Full name", + ), + "address": types.Schema( + type=types.Type.OBJECT, + description="Mailing address", + properties={ + "city": types.Schema( + type=types.Type.STRING, + ), + "state": types.Schema( + type=types.Type.STRING, + ), + }, + ), + }, + ), + }, + required=["profile"], + ), + ), + anthropic_types.ToolParam( + name="update_profile", + description="Updates a user profile.", + input_schema={ + "type": "object", + "properties": { + "profile": { + "type": "object", + "description": "The profile data", + "properties": { + "name": { + "type": "string", + "description": "Full name", + }, + "address": { + "type": "object", + "description": "Mailing address", + "properties": { + "city": {"type": "string"}, + "state": {"type": "string"}, + }, + }, + }, + }, + }, + "required": ["profile"], + }, + ), + ), + ( + "function_with_any_of_parameter", + types.FunctionDeclaration( + name="set_value", + description="Sets a value that can be a string or integer.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "value": types.Schema( + description="A string or integer value", + any_of=[ + types.Schema(type=types.Type.STRING), + types.Schema(type=types.Type.INTEGER), + ], + ), + }, + required=["value"], + ), + ), + anthropic_types.ToolParam( + name="set_value", + description="Sets a value that can be a string or integer.", + input_schema={ + "type": "object", + "properties": { + "value": { + "description": "A string or integer value", + "anyOf": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + }, + "required": ["value"], + }, + ), + ), + ( + "function_with_additional_properties_parameter", + types.FunctionDeclaration( + name="store_metadata", + description="Stores arbitrary key-value metadata.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "metadata": types.Schema( + type=types.Type.OBJECT, + description="Arbitrary metadata", + additional_properties=types.Schema( + type=types.Type.STRING, + ), + ), + }, + required=["metadata"], + ), + ), + anthropic_types.ToolParam( + name="store_metadata", + description="Stores arbitrary key-value metadata.", + input_schema={ + "type": "object", + "properties": { + "metadata": { + "type": "object", + "description": "Arbitrary metadata", + "additionalProperties": {"type": "string"}, + }, + }, + "required": ["metadata"], + }, + ), + ), + ( + "function_with_parameters_json_schema_combinators", + types.FunctionDeclaration( + name="validate_payload", + description="Validates a payload with schema combinators.", + parameters_json_schema={ + "type": "OBJECT", + "properties": { + "choice": { + "oneOf": [ + {"type": "STRING"}, + {"type": "INTEGER"}, + ], + }, + "config": { + "allOf": [ + { + "type": "OBJECT", + "properties": { + "enabled": {"type": "BOOLEAN"}, + }, + }, + ], + }, + "blocked": { + "not": { + "type": "NULL", + }, + }, + "tuple_value": { + "type": "ARRAY", + "items": [ + {"type": "STRING"}, + {"type": "INTEGER"}, + ], + }, + }, + "required": ["choice"], + }, + ), + anthropic_types.ToolParam( + name="validate_payload", + description="Validates a payload with schema combinators.", + input_schema={ + "type": "object", + "properties": { + "choice": { + "oneOf": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + "config": { + "allOf": [ + { + "type": "object", + "properties": { + "enabled": {"type": "boolean"}, + }, + }, + ], + }, + "blocked": { + "not": { + "type": "null", + }, + }, + "tuple_value": { + "type": "array", + "items": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + }, + "required": ["choice"], + }, + ), + ), ( "function_with_parameters_json_schema", types.FunctionDeclaration( @@ -765,6 +1014,87 @@ def test_part_to_message_block_nested_dict_result(): assert parsed["results"][0]["tags"] == ["a", "b"] +# --- Tests for arbitrary dict fallback (e.g. SkillToolset load_skill) --- + + +def test_part_to_message_block_arbitrary_dict_serialized_as_json(): + """Dicts with keys other than 'content'/'result' should be JSON-serialized. + + This covers tools like load_skill that return arbitrary key structures + such as {"skill_name": ..., "instructions": ..., "frontmatter": ...}. + """ + response_part = types.Part.from_function_response( + name="load_skill", + response={ + "skill_name": "my_skill", + "instructions": "Step 1: do this. Step 2: do that.", + "frontmatter": {"version": "1.0", "tags": ["a", "b"]}, + }, + ) + response_part.function_response.id = "test_id" + + result = part_to_message_block(response_part) + + assert result["type"] == "tool_result" + assert result["tool_use_id"] == "test_id" + assert not result["is_error"] + parsed = json.loads(result["content"]) + assert parsed["skill_name"] == "my_skill" + assert parsed["instructions"] == "Step 1: do this. Step 2: do that." + assert parsed["frontmatter"]["version"] == "1.0" + + +def test_part_to_message_block_run_skill_script_response(): + """run_skill_script response keys (stdout/stderr/status) should not be dropped.""" + response_part = types.Part.from_function_response( + name="run_skill_script", + response={ + "skill_name": "my_skill", + "file_path": "scripts/setup.py", + "stdout": "Done.", + "stderr": "", + "status": "success", + }, + ) + response_part.function_response.id = "test_id_2" + + result = part_to_message_block(response_part) + + parsed = json.loads(result["content"]) + assert parsed["status"] == "success" + assert parsed["stdout"] == "Done." + + +def test_part_to_message_block_error_response_not_dropped(): + """Error dicts like {"error": ..., "error_code": ...} should be serialized.""" + response_part = types.Part.from_function_response( + name="load_skill", + response={ + "error": "Skill 'missing' not found.", + "error_code": "SKILL_NOT_FOUND", + }, + ) + response_part.function_response.id = "test_id_3" + + result = part_to_message_block(response_part) + + parsed = json.loads(result["content"]) + assert parsed["error_code"] == "SKILL_NOT_FOUND" + + +def test_part_to_message_block_empty_response_stays_empty(): + """An empty response dict should still produce an empty content string.""" + response_part = types.Part.from_function_response( + name="some_tool", + response={}, + ) + response_part.function_response.id = "test_id_4" + + result = part_to_message_block(response_part) + + assert result["content"] == "" + + # --- Tests for Bug #1: Streaming support --- diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 7b580c6fc0..d56ecde591 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -25,7 +25,9 @@ @pytest.fixture def mock_gemini_session(): """Mock Gemini session for testing.""" - return mock.AsyncMock() + mock_session = mock.AsyncMock() + mock_session.session_id = 'test-session-id' + return mock_session @pytest.fixture @@ -81,11 +83,11 @@ async def test_send_history(gemini_connection, mock_gemini_session): await gemini_connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - assert 'input' in call_args - assert call_args['input'].turns == history - assert call_args['input'].turn_complete is False # Last message is from model + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + assert 'turns' in call_args + assert call_args['turns'] == history + assert call_args['turn_complete'] is False # Last message is from model @pytest.mark.asyncio @@ -118,10 +120,10 @@ async def test_send_content_function_response( await gemini_connection.send_content(content) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - assert 'input' in call_args - assert call_args['input'].function_responses == [function_response] + mock_gemini_session.send_tool_response.assert_called_once() + call_args = mock_gemini_session.send_tool_response.call_args[1] + assert 'function_responses' in call_args + assert call_args['function_responses'] == [function_response] @pytest.mark.asyncio @@ -145,6 +147,7 @@ async def test_receive_transcript_finished( msg.tool_call = None msg.usage_metadata = None msg.session_resumption_update = None + msg.go_away = None msg.server_content.model_turn = None msg.server_content.interrupted = False msg.server_content.turn_complete = False @@ -210,6 +213,7 @@ async def test_receive_usage_metadata_and_server_content( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -245,6 +249,41 @@ async def mock_receive_generator(): assert content_response.content == mock_content +async def test_receive_populates_live_session_id( + gemini_connection, mock_gemini_session +): + """Test that receive populates live_session_id in LlmResponse.""" + mock_message = mock.AsyncMock() + mock_message.usage_metadata = None + mock_message.server_content = None + mock_message.tool_call = None + mock_message.session_resumption_update = None + mock_message.go_away = None + + mock_server_content = mock.Mock() + mock_server_content.model_turn = types.Content( + role='model', parts=[types.Part.from_text(text='text')] + ) + mock_server_content.interrupted = False + mock_server_content.input_transcription = None + mock_server_content.output_transcription = None + mock_server_content.turn_complete = False + mock_server_content.grounding_metadata = None + + mock_message.server_content = mock_server_content + + async def mock_receive_generator(): + yield mock_message + + mock_gemini_session.receive = mock.Mock(return_value=mock_receive_generator()) + + responses = [resp async for resp in gemini_connection.receive()] + + assert responses + for resp in responses: + assert resp.live_session_id == 'test-session-id' + + @pytest.mark.asyncio async def test_receive_transcript_finished_on_interrupt( gemini_api_connection, @@ -266,6 +305,7 @@ async def test_receive_transcript_finished_on_interrupt( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -281,6 +321,7 @@ async def test_receive_transcript_finished_on_interrupt( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -294,6 +335,7 @@ async def test_receive_transcript_finished_on_interrupt( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -343,6 +385,7 @@ async def test_receive_transcript_finished_on_generation_complete( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -358,6 +401,7 @@ async def test_receive_transcript_finished_on_generation_complete( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -371,6 +415,7 @@ async def test_receive_transcript_finished_on_generation_complete( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -419,6 +464,7 @@ async def test_receive_transcript_finished_on_turn_complete( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -434,6 +480,7 @@ async def test_receive_transcript_finished_on_turn_complete( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -447,6 +494,7 @@ async def test_receive_transcript_finished_on_turn_complete( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -494,6 +542,7 @@ async def test_receive_handles_input_transcription_fragments( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -509,6 +558,7 @@ async def test_receive_handles_input_transcription_fragments( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -524,6 +574,7 @@ async def test_receive_handles_input_transcription_fragments( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -566,6 +617,7 @@ async def test_receive_handles_output_transcription_fragments( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -581,6 +633,7 @@ async def test_receive_handles_output_transcription_fragments( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -596,6 +649,7 @@ async def test_receive_handles_output_transcription_fragments( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -651,9 +705,9 @@ async def test_send_history_filters_audio(mock_gemini_session, audio_part): await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Only the model response should be sent (user audio filtered out) assert len(sent_contents) == 1 assert sent_contents[0].role == 'model' @@ -679,9 +733,9 @@ async def test_send_history_keeps_image_data(mock_gemini_session): await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Both contents should be sent (image is not filtered) assert len(sent_contents) == 2 assert sent_contents[0].parts[0].inline_data == image_blob @@ -711,9 +765,9 @@ async def test_send_history_mixed_content_filters_only_audio( await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Content should be sent but only with the text part assert len(sent_contents) == 1 assert len(sent_contents[0].parts) == 1 @@ -819,6 +873,7 @@ async def test_receive_grounding_metadata_standalone( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -862,6 +917,7 @@ async def test_receive_grounding_metadata_with_content( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -894,6 +950,7 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_tool_call_msg.usage_metadata = None mock_tool_call_msg.server_content = None mock_tool_call_msg.session_resumption_update = None + mock_tool_call_msg.go_away = None function_call = types.FunctionCall( name='enterprise_web_search', @@ -932,34 +989,211 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_metadata_msg.server_content = mock_server_content mock_metadata_msg.tool_call = None mock_metadata_msg.session_resumption_update = None + mock_metadata_msg.go_away = None + + # 3. Message with turn_complete + mock_turn_complete_content = mock.create_autospec( + types.LiveServerContent, instance=True + ) + mock_turn_complete_content.model_turn = None + mock_turn_complete_content.grounding_metadata = None + mock_turn_complete_content.turn_complete = True + mock_turn_complete_content.interrupted = False + mock_turn_complete_content.input_transcription = None + mock_turn_complete_content.output_transcription = None + + mock_turn_complete_msg = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_turn_complete_msg.usage_metadata = None + mock_turn_complete_msg.server_content = mock_turn_complete_content + mock_turn_complete_msg.tool_call = None + mock_turn_complete_msg.session_resumption_update = None + mock_turn_complete_msg.go_away = None async def mock_receive_generator(): yield mock_tool_call_msg yield mock_metadata_msg + yield mock_turn_complete_msg receive_mock = mock.Mock(return_value=mock_receive_generator()) mock_gemini_session.receive = receive_mock responses = [resp async for resp in connection.receive()] - assert len(responses) == 2 + assert len(responses) == 3 - # First response: the tool call + # First response: the audio content and grounding metadata + assert responses[0].grounding_metadata == grounding_metadata + assert responses[0].content == mock_content assert responses[0].content is not None assert responses[0].content.parts is not None - assert responses[0].content.parts[0].function_call is not None + assert responses[0].content.parts[0].inline_data == audio_blob + + # Second response: the tool call, buffered until turn_complete + assert responses[1].content is not None + assert responses[1].content.parts is not None + assert responses[1].content.parts[0].function_call is not None assert ( - responses[0].content.parts[0].function_call.name + responses[1].content.parts[0].function_call.name == 'enterprise_web_search' ) - assert responses[0].content.parts[0].function_call.args == { + assert responses[1].content.parts[0].function_call.args == { 'query': 'Google stock price today' } - assert responses[0].grounding_metadata is None + assert responses[1].grounding_metadata is None - # Second response: the audio content and grounding metadata - assert responses[1].grounding_metadata == grounding_metadata - assert responses[1].content == mock_content - assert responses[1].content is not None - assert responses[1].content.parts is not None - assert responses[1].content.parts[0].inline_data == audio_blob + # Third response: the turn_complete + assert responses[2].turn_complete is True + + +@pytest.mark.asyncio +async def test_receive_multiple_tool_calls_buffered_until_turn_complete( + gemini_connection, mock_gemini_session +): + """Test receive buffers multiple tool call messages until turn complete.""" + # First tool call message + mock_tool_call_msg1 = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_tool_call_msg1.usage_metadata = None + mock_tool_call_msg1.server_content = None + mock_tool_call_msg1.session_resumption_update = None + mock_tool_call_msg1.go_away = None + + function_call1 = types.FunctionCall( + name='tool_1', + args={'arg': 'value1'}, + ) + mock_tool_call1 = mock.create_autospec( + types.LiveServerToolCall, instance=True + ) + mock_tool_call1.function_calls = [function_call1] + mock_tool_call_msg1.tool_call = mock_tool_call1 + + # Second tool call message + mock_tool_call_msg2 = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_tool_call_msg2.usage_metadata = None + mock_tool_call_msg2.server_content = None + mock_tool_call_msg2.session_resumption_update = None + mock_tool_call_msg2.go_away = None + + function_call2 = types.FunctionCall( + name='tool_2', + args={'arg': 'value2'}, + ) + mock_tool_call2 = mock.create_autospec( + types.LiveServerToolCall, instance=True + ) + mock_tool_call2.function_calls = [function_call2] + mock_tool_call_msg2.tool_call = mock_tool_call2 + + # Turn complete message + mock_turn_complete_content = mock.create_autospec( + types.LiveServerContent, instance=True + ) + mock_turn_complete_content.model_turn = None + mock_turn_complete_content.grounding_metadata = None + mock_turn_complete_content.turn_complete = True + mock_turn_complete_content.interrupted = False + mock_turn_complete_content.input_transcription = None + mock_turn_complete_content.output_transcription = None + + mock_turn_complete_msg = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_turn_complete_msg.usage_metadata = None + mock_turn_complete_msg.server_content = mock_turn_complete_content + mock_turn_complete_msg.tool_call = None + mock_turn_complete_msg.session_resumption_update = None + mock_turn_complete_msg.go_away = None + + async def mock_receive_generator(): + yield mock_tool_call_msg1 + yield mock_tool_call_msg2 + yield mock_turn_complete_msg + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + # Expected: One LlmResponse with both tool calls, then one with turn_complete + assert len(responses) == 2 + + # First response: single LlmResponse carrying both function calls + assert responses[0].content is not None + parts = responses[0].content.parts + assert len(parts) == 2 + assert parts[0].function_call.name == 'tool_1' + assert parts[0].function_call.args == {'arg': 'value1'} + assert parts[1].function_call.name == 'tool_2' + assert parts[1].function_call.args == {'arg': 'value2'} + + # Second response: turn_complete True + assert responses[1].turn_complete is True + + +@pytest.mark.asyncio +async def test_receive_go_away(gemini_connection, mock_gemini_session): + """Test receive yields go_away message.""" + mock_go_away = types.LiveServerGoAway(timeLeft='10s') + mock_msg = mock.MagicMock() + mock_msg.usage_metadata = None + mock_msg.server_content = None + mock_msg.tool_call = None + mock_msg.session_resumption_update = None + mock_msg.go_away = mock_go_away + + async def mock_receive_generator(): + yield mock_msg + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + assert len(responses) == 1 + assert responses[0].go_away == mock_go_away + + +@pytest.mark.asyncio +async def test_receive_video_content(gemini_connection, mock_gemini_session): + """Test receive with video content.""" + mock_content = types.Content( + role='model', + parts=[ + types.Part( + inline_data=types.Blob(data=b'video_data', mime_type='video/mp4') + ) + ], + ) + mock_server_content = mock.Mock() + mock_server_content.model_turn = mock_content + mock_server_content.interrupted = False + mock_server_content.input_transcription = None + mock_server_content.output_transcription = None + mock_server_content.turn_complete = False + mock_server_content.grounding_metadata = None + + mock_message = mock.AsyncMock() + mock_message.usage_metadata = None + mock_message.server_content = mock_server_content + mock_message.tool_call = None + mock_message.session_resumption_update = None + mock_message.go_away = None + + async def mock_receive_generator(): + yield mock_message + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + assert responses + content_response = next((r for r in responses if r.content), None) + assert content_response is not None + assert content_response.content == mock_content diff --git a/tests/unittests/models/test_gemma_llm.py b/tests/unittests/models/test_gemma_llm.py index 07b4b092d3..d822777c64 100644 --- a/tests/unittests/models/test_gemma_llm.py +++ b/tests/unittests/models/test_gemma_llm.py @@ -87,6 +87,16 @@ def llm_request_with_tools(): ) +def test_supported_models_matches_gemma4(): + """Gemma 4 model strings must resolve to the Gemma class via the registry.""" + assert models.LLMRegistry.resolve("gemma-4-31b-it") is Gemma + + +def test_supported_models_matches_gemma3(): + """Gemma 3 model strings must continue to resolve to the Gemma class.""" + assert models.LLMRegistry.resolve("gemma-3-27b-it") is Gemma + + @pytest.mark.asyncio async def test_not_gemma_model(): llm = Gemma() diff --git a/tests/unittests/models/test_google_llm.py b/tests/unittests/models/test_google_llm.py index 70aa01b69d..d1ee05be1e 100644 --- a/tests/unittests/models/test_google_llm.py +++ b/tests/unittests/models/test_google_llm.py @@ -155,6 +155,32 @@ def test_supported_models(): ) +def test_gemini_api_client_creation_with_projects_prefix(): + model = Gemini( + model="projects/test-project/locations/test-location/publishers/google/models/gemini-1.5-pro" + ) + with mock.patch("google.genai.Client", autospec=True) as mock_client: + _ = model.api_client + mock_client.assert_called_once() + _, kwargs = mock_client.call_args + assert kwargs["vertexai"] is True + assert "project" not in kwargs + assert "location" not in kwargs + + +def test_gemini_live_api_client_creation_with_projects_prefix(): + model = Gemini( + model="projects/test-project/locations/test-location/publishers/google/models/gemini-1.5-pro" + ) + with mock.patch("google.genai.Client", autospec=True) as mock_client: + _ = model._live_api_client + assert mock_client.call_count == 2 + + # Second call is for _live_api_client + _, kwargs = mock_client.call_args_list[1] + assert kwargs["vertexai"] is True + + def test_client_version_header(): model = Gemini(model="gemini-1.5-flash") client = model.api_client @@ -1654,9 +1680,10 @@ async def test_adapt_computer_use_tool_wait(): assert wait_5_seconds_tool._coordinate_space == (1000, 1000) # Verify calling the new tool calls the original with 5 seconds + # The wrapper adds tool_context parameter result = await wait_5_seconds_tool.func() assert result == "mock_result" - mock_wait_func.assert_awaited_once_with(5) + mock_wait_func.assert_awaited_once_with(5, tool_context=None) @pytest.mark.asyncio diff --git a/tests/unittests/models/test_interactions_utils.py b/tests/unittests/models/test_interactions_utils.py index 93dced0f21..3a6b964ac1 100644 --- a/tests/unittests/models/test_interactions_utils.py +++ b/tests/unittests/models/test_interactions_utils.py @@ -14,13 +14,183 @@ """Tests for interactions_utils.py conversion functions.""" +import asyncio import base64 +from collections.abc import Callable +from datetime import datetime +from datetime import timezone import json +from types import SimpleNamespace from unittest.mock import MagicMock from google.adk.models import interactions_utils from google.adk.models.llm_request import LlmRequest from google.genai import types +from google.genai._interactions.types.interaction import Interaction +from google.genai._interactions.types.interaction_complete_event import InteractionCompleteEvent +from google.genai._interactions.types.interaction_start_event import InteractionStartEvent +from google.genai._interactions.types.interaction_status_update import InteractionStatusUpdate +import pytest + + +class _MockAsyncIterator: + """Simple async iterator for streaming interaction events.""" + + def __init__(self, sequence: list[object]): + self._iterator = iter(sequence) + + def __aiter__(self): + return self + + async def __anext__(self): + try: + return next(self._iterator) + except StopIteration as exc: + raise StopAsyncIteration from exc + + +class _FakeInteractions: + """Minimal fake interactions resource for streaming tests.""" + + def __init__(self, events: list[object]): + self._events = events + + async def create(self, **_kwargs): + return _MockAsyncIterator(self._events) + + +class _FakeAio: + """Namespace matching the expected api_client.aio shape.""" + + def __init__(self, events: list[object]): + self.interactions = _FakeInteractions(events) + + +class _FakeApiClient: + """Minimal fake API client for generate_content_via_interactions tests.""" + + def __init__(self, events: list[object]): + self.aio = _FakeAio(events) + + +def _build_function_call_delta_event( + *, function_id: str, name: str, arguments: dict[str, object] +) -> SimpleNamespace: + """Build a version-agnostic content.delta event for a function call.""" + return SimpleNamespace( + event_type='content.delta', + delta=SimpleNamespace( + type='function_call', + id=function_id, + name=name, + arguments=arguments, + ), + ) + + +def _build_llm_request() -> LlmRequest: + """Build a minimal request for interactions streaming tests.""" + return LlmRequest( + model='gemini-2.5-flash', + contents=[ + types.Content( + role='user', + parts=[types.Part(text='Weather in Tokyo?')], + ) + ], + config=types.GenerateContentConfig(), + ) + + +def _build_lifecycle_streamed_events() -> list[object]: + """Build streamed events with lifecycle updates carrying the ID.""" + now = datetime.now(timezone.utc) + return [ + InteractionStartEvent( + event_type='interaction.start', + interaction=Interaction( + id='interaction_123', + created=now, + updated=now, + status='in_progress', + ), + ), + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + InteractionStatusUpdate( + event_type='interaction.status_update', + interaction_id='interaction_123', + status='requires_action', + ), + ] + + +def _build_complete_streamed_events() -> list[object]: + """Build streamed events with the ID on an interaction.complete event.""" + now = datetime.now(timezone.utc) + return [ + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + InteractionCompleteEvent( + event_type='interaction.complete', + interaction=Interaction( + id='interaction_complete_123', + created=now, + updated=now, + status='requires_action', + ), + ), + ] + + +def _build_legacy_streamed_events() -> list[object]: + """Build streamed events with the ID on the legacy interaction event.""" + return [ + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + SimpleNamespace( + event_type='interaction', + id='interaction_legacy_123', + status='requires_action', + error=None, + outputs=None, + usage=None, + ), + ] + + +async def _collect_function_call_interaction_ids( + streamed_events: list[object], +) -> list[str | None]: + """Collect non-partial function call interaction IDs from streamed events.""" + responses = [ + response + async for response in ( + interactions_utils.generate_content_via_interactions( + api_client=_FakeApiClient(streamed_events), + llm_request=_build_llm_request(), + stream=True, + ) + ) + ] + + return [ + response.interaction_id + for response in responses + if response.partial is not True + and response.content is not None + and response.content.parts + and response.content.parts[0].function_call is not None + ] class TestConvertPartToInteractionContent: @@ -955,3 +1125,36 @@ def test_unknown_event_type_returns_none(self): assert result is None assert not aggregated_parts + + +@pytest.mark.parametrize( + ('streamed_events_factory', 'expected_ids'), + [ + pytest.param( + _build_lifecycle_streamed_events, + ['interaction_123', 'interaction_123'], + id='lifecycle-events', + ), + pytest.param( + _build_complete_streamed_events, + ['interaction_complete_123'], + id='complete-event', + ), + pytest.param( + _build_legacy_streamed_events, + ['interaction_legacy_123'], + id='legacy-event', + ), + ], +) +def test_generate_content_via_interactions_stream_extracts_interaction_id( + streamed_events_factory: Callable[[], list[object]], + expected_ids: list[str], +): + """Streamed interaction IDs should be preserved across event variants.""" + streamed_events = streamed_events_factory() + + assert ( + asyncio.run(_collect_function_call_interaction_ids(streamed_events)) + == expected_ids + ) diff --git a/tests/unittests/models/test_litellm.py b/tests/unittests/models/test_litellm.py index e080b4c733..ace08ad997 100644 --- a/tests/unittests/models/test_litellm.py +++ b/tests/unittests/models/test_litellm.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License +import base64 import contextlib import json import logging @@ -21,19 +22,23 @@ import unittest from unittest.mock import ANY from unittest.mock import AsyncMock +from unittest.mock import MagicMock from unittest.mock import Mock import warnings from google.adk.models.lite_llm import _append_fallback_user_content_if_missing from google.adk.models.lite_llm import _content_to_message_param +from google.adk.models.lite_llm import _convert_reasoning_value_to_parts from google.adk.models.lite_llm import _enforce_strict_openai_schema from google.adk.models.lite_llm import _extract_reasoning_value +from google.adk.models.lite_llm import _extract_thought_signature_from_tool_call from google.adk.models.lite_llm import _FILE_ID_REQUIRED_PROVIDERS from google.adk.models.lite_llm import _FINISH_REASON_MAPPING from google.adk.models.lite_llm import _function_declaration_to_tool_param from google.adk.models.lite_llm import _get_completion_inputs from google.adk.models.lite_llm import _get_content from google.adk.models.lite_llm import _get_provider_from_model +from google.adk.models.lite_llm import _is_anthropic_model from google.adk.models.lite_llm import _message_to_generate_content_response from google.adk.models.lite_llm import _MISSING_TOOL_RESULT_MESSAGE from google.adk.models.lite_llm import _model_response_to_chunk @@ -42,6 +47,7 @@ from google.adk.models.lite_llm import _redirect_litellm_loggers_to_stdout from google.adk.models.lite_llm import _schema_to_dict from google.adk.models.lite_llm import _split_message_content_and_tool_calls +from google.adk.models.lite_llm import _THOUGHT_SIGNATURE_SEPARATOR from google.adk.models.lite_llm import _to_litellm_response_format from google.adk.models.lite_llm import _to_litellm_role from google.adk.models.lite_llm import FunctionChunk @@ -2421,6 +2427,219 @@ def test_extract_reasoning_value_no_reasoning_fields(): assert result is None +def test_extract_thought_signature_from_extra_content(): + """Extracts thought_signature from extra_content (OpenAI-compatible path).""" + sig_b64 = base64.b64encode(b"test_signature").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_123", + function=Function(name="test_fn", arguments="{}"), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"test_signature" + + +def test_extract_thought_signature_from_provider_specific_fields(): + """Extracts thought_signature from provider_specific_fields (Vertex path).""" + sig_b64 = base64.b64encode(b"vertex_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_456", + function=Function(name="test_fn", arguments="{}"), + provider_specific_fields={"thought_signature": sig_b64}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"vertex_sig" + + +def test_extract_thought_signature_from_function_provider_fields(): + """Extracts thought_signature from function's provider_specific_fields. + + When provider_specific_fields is set directly on the function object + (e.g. by litellm internals), the extraction should find it. + """ + sig_b64 = base64.b64encode(b"func_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_func", + function=Function(name="test_fn", arguments="{}"), + ) + # Simulate litellm setting provider_specific_fields on the function + tc.function.provider_specific_fields = { + "thought_signature": sig_b64, + } + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"func_sig" + + +def test_extract_thought_signature_from_id(): + """Extracts thought_signature from tool call ID (__thought__ separator).""" + sig_b64 = base64.b64encode(b"id_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id=f"call_789{_THOUGHT_SIGNATURE_SEPARATOR}{sig_b64}", + function=Function(name="test_fn", arguments="{}"), + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"id_sig" + + +def test_extract_thought_signature_returns_none_when_absent(): + """Returns None when no thought_signature is present.""" + tc = ChatCompletionMessageToolCall( + type="function", + id="call_plain", + function=Function(name="test_fn", arguments="{}"), + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result is None + + +def test_extract_thought_signature_corrupted_base64_returns_none(): + """Returns None gracefully for corrupted base64 signatures.""" + tc = ChatCompletionMessageToolCall( + type="function", + id="call_bad", + function=Function(name="test_fn", arguments="{}"), + extra_content={"google": {"thought_signature": "!!!not_valid_base64!!!"}}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result is None + + +def test_message_to_generate_content_response_preserves_thought_signature(): + """thought_signature from tool call is preserved on the output Part.""" + sig_b64 = base64.b64encode(b"round_trip_sig").decode("utf-8") + message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_ts_1", + function=Function( + name="load_skill", + arguments='{"skill": "my_skill"}', + ), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + ], + ) + + response = _message_to_generate_content_response(message) + fc_part = response.content.parts[0] + assert fc_part.function_call.name == "load_skill" + assert fc_part.function_call.id == "call_ts_1" + assert fc_part.thought_signature == b"round_trip_sig" + + +def test_message_to_generate_content_response_no_thought_signature(): + """Parts without thought_signature have thought_signature=None.""" + message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_no_ts", + function=Function( + name="plain_tool", + arguments="{}", + ), + ) + ], + ) + + response = _message_to_generate_content_response(message) + fc_part = response.content.parts[0] + assert fc_part.function_call.name == "plain_tool" + assert fc_part.thought_signature is None + + +@pytest.mark.asyncio +async def test_content_to_message_param_preserves_thought_signature(): + """thought_signature on Part is emitted on both tool call metadata paths.""" + sig_bytes = b"preserved_sig" + sig_b64 = base64.b64encode(sig_bytes).decode("utf-8") + content = types.Content( + role="model", + parts=[ + types.Part( + function_call=types.FunctionCall( + name="load_skill", + args={"skill": "my_skill"}, + id="call_rt", + ), + thought_signature=sig_bytes, + ), + ], + ) + + message = await _content_to_message_param(content) + assert message["role"] == "assistant" + tc = message["tool_calls"][0] + assert tc["function"]["name"] == "load_skill" + assert tc["id"] == "call_rt" + assert tc["provider_specific_fields"] == {"thought_signature": sig_b64} + assert tc["extra_content"] == {"google": {"thought_signature": sig_b64}} + + +@pytest.mark.asyncio +async def test_content_to_message_param_no_thought_signature(): + """Tool calls without thought_signature have no signature metadata.""" + content = types.Content( + role="model", + parts=[ + types.Part.from_function_call(name="plain_tool", args={"key": "val"}), + ], + ) + content.parts[0].function_call.id = "call_plain" + + message = await _content_to_message_param(content) + tc = message["tool_calls"][0] + assert tc["id"] == "call_plain" + assert "provider_specific_fields" not in tc + assert "extra_content" not in tc + + +@pytest.mark.asyncio +async def test_thought_signature_round_trip(): + """thought_signature survives a full round trip through ADK conversions. + + Simulates the flow: litellm response → types.Part → litellm request. + """ + sig_b64 = base64.b64encode(b"full_round_trip").decode("utf-8") + + # Step 1: Incoming litellm message with thought_signature + incoming_message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_round", + function=Function( + name="load_skill", + arguments='{"skill_name": "test"}', + ), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + ], + ) + + # Step 2: Convert to ADK internal format (types.Content) + llm_response = _message_to_generate_content_response(incoming_message) + fc_part = llm_response.content.parts[0] + assert fc_part.thought_signature == b"full_round_trip" + + # Step 3: Convert back to litellm format + outgoing_message = await _content_to_message_param(llm_response.content) + out_tc = outgoing_message["tool_calls"][0] + assert out_tc["provider_specific_fields"] == {"thought_signature": sig_b64} + assert out_tc["extra_content"] == {"google": {"thought_signature": sig_b64}} + + def test_parse_tool_calls_from_text_multiple_calls(): text = ( '{"name":"alpha","arguments":{"value":1}}\n' @@ -3018,32 +3237,24 @@ def test_to_litellm_role(): (None, "stop"), ), ( - ModelResponse( - choices=[{"finish_reason": "tool_calls"}], - usage={ - "prompt_tokens": 0, - "completion_tokens": 0, - "total_tokens": 0, - }, - ), + ModelResponse(choices=[{"finish_reason": "tool_calls"}]), [None], - UsageMetadataChunk( - prompt_tokens=0, completion_tokens=0, total_tokens=0 + ( + None, + UsageMetadataChunk( + prompt_tokens=0, completion_tokens=0, total_tokens=0 + ), ), "tool_calls", ), ( - ModelResponse( - choices=[{}], - usage={ - "prompt_tokens": 0, - "completion_tokens": 0, - "total_tokens": 0, - }, - ), + ModelResponse(choices=[{}]), [None], - UsageMetadataChunk( - prompt_tokens=0, completion_tokens=0, total_tokens=0 + ( + None, + UsageMetadataChunk( + prompt_tokens=0, completion_tokens=0, total_tokens=0 + ), ), "stop", ), @@ -3172,7 +3383,9 @@ def test_model_response_to_chunk( else: assert finished == expected_finished - if expected_usage_chunk is None: + if isinstance(expected_usage_chunk, tuple): + assert usage_chunk in expected_usage_chunk + elif expected_usage_chunk is None: assert usage_chunk is None else: assert usage_chunk is not None @@ -3780,7 +3993,6 @@ async def test_streaming_tool_call_truncated_by_max_tokens( ) ] ), - # finish_reason="length" arrives before args are complete ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3829,7 +4041,6 @@ async def test_streaming_tool_call_complete_with_length_finish_reason( ) ] ), - # finish_reason="length" but tool call args are valid JSON ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3873,7 +4084,6 @@ async def test_streaming_text_truncated_by_max_tokens( ) ] ), - # finish_reason="length" on text-only response ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3895,10 +4105,10 @@ async def test_streaming_text_truncated_by_max_tokens( ) ] - # First response is the partial text chunk, second is the aggregated response partial_responses = [r for r in responses if r.partial] aggregated_responses = [r for r in responses if not r.partial] + assert len(partial_responses) == 1 assert len(aggregated_responses) == 1 aggregated = aggregated_responses[0] assert aggregated.finish_reason == types.FinishReason.MAX_TOKENS @@ -4181,19 +4391,25 @@ async def test_finish_reason_unknown_maps_to_other( mock_acompletion, lite_llm_instance ): """Test that unmapped finish_reason values map to FinishReason.OTHER.""" - mock_response = ModelResponse( - choices=[ - Choices( - message=ChatCompletionAssistantMessage( - role="assistant", - content="Test response", - ), - # LiteLLM validates finish_reason to a known set. Use a value that - # LiteLLM accepts but ADK does not explicitly map. - finish_reason="eos", - ) - ] - ) + # LiteLLM's Choices model normalizes finish_reason values (e.g., "eos" -> + # "stop") before ADK processes them. To test ADK's own fallback mapping, + # construct a mock response that bypasses LiteLLM's normalization and + # returns a raw unmapped finish_reason string. + mock_choice = MagicMock() + mock_choice.get = lambda key, default=None: { + "message": ChatCompletionAssistantMessage( + role="assistant", + content="Test response", + ), + "finish_reason": "totally_unknown_reason", + }.get(key, default) + + mock_response = MagicMock() + mock_response.get = lambda key, default=None: { + "choices": [mock_choice], + }.get(key, default) + mock_response.model = "test_model" + mock_acompletion.return_value = mock_response llm_request = LlmRequest( @@ -4468,3 +4684,213 @@ def test_handles_litellm_logger_names(logger_name): finally: # Clean up test_logger.removeHandler(handler) + + +# ── Anthropic thinking_blocks tests ───────────────────────────── + + +@pytest.mark.parametrize( + "model_string,expected", + [ + ("anthropic/claude-4-sonnet", True), + ("anthropic/claude-3-5-sonnet-20241022", True), + ("Anthropic/Claude-4-Opus", True), + ("bedrock/anthropic.claude-3-5-sonnet", True), + ("bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0", True), + ("bedrock/claude-3-5-sonnet", True), + ("vertex_ai/claude-3-5-sonnet@20241022", True), + ("openai/gpt-4o", False), + ("gemini/gemini-2.5-pro", False), + ("vertex_ai/gemini-2.5-flash", False), + ("bedrock/amazon.titan-text-express-v1", False), + ], + ids=[ + "anthropic-prefix", + "anthropic-versioned", + "anthropic-uppercase", + "bedrock-anthropic-dot", + "bedrock-us-anthropic", + "bedrock-claude", + "vertex-claude", + "openai-no-match", + "gemini-no-match", + "vertex-gemini-no-match", + "bedrock-non-anthropic", + ], +) +def test_is_anthropic_model(model_string, expected): + assert _is_anthropic_model(model_string) is expected + + +def test_extract_reasoning_value_prefers_thinking_blocks(): + """thinking_blocks takes precedence over reasoning_content.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "deep thought", "signature": "sig123"}, + ] + message = { + "role": "assistant", + "content": "Answer", + "thinking_blocks": thinking_blocks, + "reasoning_content": "flat reasoning", + } + result = _extract_reasoning_value(message) + assert result is thinking_blocks + + +def test_extract_reasoning_value_falls_back_without_thinking_blocks(): + """When thinking_blocks is absent, falls back to reasoning_content.""" + message = { + "role": "assistant", + "content": "Answer", + "reasoning_content": "flat reasoning", + } + result = _extract_reasoning_value(message) + assert result == "flat reasoning" + + +def test_convert_reasoning_value_to_parts_thinking_blocks_preserves_signature(): + """thinking_blocks format produces parts with thought_signature.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "step 1", "signature": "sig_abc"}, + {"type": "thinking", "thinking": "step 2", "signature": "sig_def"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 2 + assert parts[0].text == "step 1" + assert parts[0].thought is True + assert parts[0].thought_signature == b"sig_abc" + assert parts[1].text == "step 2" + assert parts[1].thought_signature == b"sig_def" + + +def test_convert_reasoning_value_to_parts_skips_redacted_blocks(): + """Redacted thinking blocks are excluded from parts.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "visible", "signature": "sig1"}, + {"type": "redacted", "data": "hidden"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 1 + assert parts[0].text == "visible" + + +def test_convert_reasoning_value_to_parts_skips_empty_thinking(): + """Blocks with empty thinking text are excluded.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "", "signature": "sig1"}, + {"type": "thinking", "thinking": "real thought", "signature": "sig2"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 1 + assert parts[0].text == "real thought" + + +def test_convert_reasoning_value_to_parts_flat_string_unchanged(): + """Flat string reasoning still produces thought parts without signature.""" + parts = _convert_reasoning_value_to_parts("simple reasoning text") + assert len(parts) == 1 + assert parts[0].text == "simple reasoning text" + assert parts[0].thought is True + assert parts[0].thought_signature is None + + +@pytest.mark.asyncio +async def test_content_to_message_param_anthropic_outputs_thinking_blocks(): + """For Anthropic models, thinking_blocks are output instead of reasoning_content.""" + content = types.Content( + role="model", + parts=[ + types.Part( + text="deep thought", + thought=True, + thought_signature=b"sig_round_trip", + ), + types.Part(text="Hello!"), + ], + ) + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + assert result["role"] == "assistant" + assert "thinking_blocks" in result + assert result.get("reasoning_content") is None + blocks = result["thinking_blocks"] + assert len(blocks) == 1 + assert blocks[0]["type"] == "thinking" + assert blocks[0]["thinking"] == "deep thought" + assert blocks[0]["signature"] == "sig_round_trip" + assert result["content"] == "Hello!" + + +@pytest.mark.asyncio +async def test_content_to_message_param_non_anthropic_uses_reasoning_content(): + """For non-Anthropic models, reasoning_content is used as before.""" + content = types.Content( + role="model", + parts=[ + types.Part(text="thinking text", thought=True), + types.Part(text="Answer"), + ], + ) + result = await _content_to_message_param(content, model="openai/gpt-4o") + assert result["role"] == "assistant" + assert result.get("reasoning_content") == "thinking text" + assert "thinking_blocks" not in result + + +@pytest.mark.asyncio +async def test_anthropic_thinking_blocks_round_trip(): + """End-to-end: thinking_blocks in response → Part → thinking_blocks out.""" + # Simulate LiteLLM response with thinking_blocks + response_message = { + "role": "assistant", + "content": "Final answer", + "thinking_blocks": [ + { + "type": "thinking", + "thinking": "Let me reason...", + "signature": "abc123signature", + }, + ], + } + + # Step 1: Extract reasoning value + reasoning_value = _extract_reasoning_value(response_message) + assert isinstance(reasoning_value, list) + + # Step 2: Convert to parts (preserves signature) + parts = _convert_reasoning_value_to_parts(reasoning_value) + assert len(parts) == 1 + assert parts[0].thought_signature == b"abc123signature" + + # Step 3: Build Content for history + all_parts = parts + [types.Part(text="Final answer")] + content = types.Content(role="model", parts=all_parts) + + # Step 4: Convert back to message param for Anthropic + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + blocks = result["thinking_blocks"] + assert len(blocks) == 1 + assert blocks[0]["type"] == "thinking" + assert blocks[0]["thinking"] == "Let me reason..." + assert blocks[0]["signature"] == "abc123signature" + + +@pytest.mark.asyncio +async def test_content_to_message_param_anthropic_no_signature_falls_back(): + """Anthropic model with thought parts but no signatures uses reasoning_content.""" + content = types.Content( + role="model", + parts=[ + types.Part(text="thinking without sig", thought=True), + types.Part(text="Response"), + ], + ) + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + # Falls back to reasoning_content when no signatures present + assert result.get("reasoning_content") == "thinking without sig" + assert "thinking_blocks" not in result diff --git a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py index a39eb932cd..46efbe6d62 100644 --- a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py +++ b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py @@ -33,6 +33,7 @@ from google.adk.sessions import session as session_lib from google.adk.tools import base_tool as base_tool_lib from google.adk.tools import tool_context as tool_context_lib +from google.adk.utils._telemetry_context import _is_visual_builder from google.adk.version import __version__ import google.auth from google.auth import exceptions as auth_exceptions @@ -279,7 +280,8 @@ async def _get_captured_event_dict_async(mock_write_client, expected_schema): assert len(requests) == 1 request = requests[0] assert request.write_stream == DEFAULT_STREAM_NAME - assert request.trace_id == f"google-adk-bq-logger/{__version__}" + assert request.trace_id.startswith("google-adk-bq-logger") + assert request.trace_id.endswith(f"/{__version__}") # Parse the Arrow batch back to a dict for verification try: reader = pa.ipc.open_stream(request.arrow_rows.rows.serialized_record_batch) @@ -384,6 +386,39 @@ class LocalIncident: assert truncated["result"]["kpi_missed"][0]["kpi"] == "latency" +def test_recursive_smart_truncate_redaction(): + """Test that sensitive keys and temp: state keys are redacted.""" + obj = { + "client_secret": "super-secret-123", + "access_token": "ya29.blah", + "refresh_token": "1//0g", + "id_token": "eyJhb", + "api_key": "AIza", + "password": "my-password", + "safe_key": "safe-value", + "temp:auth_state": "some-auth-state", + "nested": { + "CLIENT_SECRET": "nested-secret", + "normal": "value", + }, + } + max_len = 1000 + truncated, is_truncated = ( + bigquery_agent_analytics_plugin._recursive_smart_truncate(obj, max_len) + ) + assert not is_truncated + assert truncated["client_secret"] == "[REDACTED]" + assert truncated["access_token"] == "[REDACTED]" + assert truncated["refresh_token"] == "[REDACTED]" + assert truncated["id_token"] == "[REDACTED]" + assert truncated["api_key"] == "[REDACTED]" + assert truncated["password"] == "[REDACTED]" + assert truncated["safe_key"] == "safe-value" + assert truncated["temp:auth_state"] == "[REDACTED]" + assert truncated["nested"]["CLIENT_SECRET"] == "[REDACTED]" + assert truncated["nested"]["normal"] == "value" + + class TestBigQueryAgentAnalyticsPlugin: """Tests for the BigQueryAgentAnalyticsPlugin.""" @@ -2213,6 +2248,118 @@ async def test_otel_integration_real_provider(self, callback_context): assert format(finished_spans[0].context.span_id, "016x") == span_id assert format(finished_spans[0].context.trace_id, "032x") == trace_id + @pytest.mark.asyncio + async def test_keyword_identifiers_emission_default( + self, + mock_auth_default, + mock_bq_client, + callback_context, + ): + """Verify the default keyword flow for User-Agent and Trace-ID.""" + keyword = "google-adk-bq-logger" + mock_write_client = mock.AsyncMock() + + # 1. Verify User-Agent contains default keyword. + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + + _, kwargs = mock_write_cls.call_args + client_info = kwargs.get("client_info") + assert f"{keyword}/{__version__}" in client_info.user_agent + + # 2. Verify Trace ID contains default keyword. + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + llm_request = llm_request_lib.LlmRequest( + model="gemini-pro", + contents=[types.Content(parts=[types.Part(text="Hi")])], + ) + await plugin.before_model_callback( + callback_context=callback_context, llm_request=llm_request + ) + await plugin.flush() + + call_args = mock_write_client.append_rows.call_args + requests_iter = call_args.args[0] + requests = [] + async for req in requests_iter: + requests.append(req) + + assert requests[0].trace_id.startswith(keyword) + assert requests[0].trace_id.endswith(f"/{__version__}") + + @pytest.mark.asyncio + async def test_visual_builder_identifiers_flow( + self, + mock_auth_default, + mock_bq_client, + callback_context, + dummy_arrow_schema, + ): + """Verify visual-builder keyword flow via contextvars.""" + keyword = "google-adk-visual-builder" + mock_write_client = mock.AsyncMock() + + # Simulate setting the internal flag via contextvars + token = _is_visual_builder.set(True) + try: + # 1. Verify Client User-Agent + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + + _, kwargs = mock_write_cls.call_args + client_info = kwargs.get("client_info") + assert keyword in client_info.user_agent + + # 2. Verify Request Trace ID + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + llm_request = llm_request_lib.LlmRequest( + model="gemini-pro", + contents=[types.Content(parts=[types.Part(text="Hi")])], + ) + await plugin.before_model_callback( + callback_context=callback_context, llm_request=llm_request + ) + await plugin.flush() + + call_args = mock_write_client.append_rows.call_args + requests_iter = call_args.args[0] + requests = [] + async for req in requests_iter: + requests.append(req) + + assert requests[0].trace_id.startswith( + "google-adk-bq-logger-visual-builder" + ) + assert requests[0].trace_id.endswith(f"/{__version__}") + finally: + _is_visual_builder.reset(token) + @pytest.mark.asyncio async def test_flush_mechanism( self, @@ -3112,8 +3259,49 @@ def test_none_override_keeps_default(self, callback_context): assert span_id == "span-1" assert parent_id == "parent-1" - def test_ambient_otel_span_takes_priority(self, callback_context): - """When an ambient OTel span is valid, its IDs take priority.""" + def test_ambient_provides_trace_id_only_when_stack_present( + self, callback_context + ): + """Plugin stack owns span_id/parent; ambient only provides trace_id.""" + from opentelemetry.sdk.trace import TracerProvider as SdkProvider + from opentelemetry.sdk.trace.export import SimpleSpanProcessor + from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + + provider = SdkProvider() + provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) + real_tracer = provider.get_tracer("test") + + ed = bigquery_agent_analytics_plugin.EventData() + + with real_tracer.start_as_current_span("invocation") as parent_span: + with real_tracer.start_as_current_span("agent") as agent_span: + ambient_ctx = agent_span.get_span_context() + expected_trace = format(ambient_ctx.trace_id, "032x") + + # Plugin stack has spans — these should win for span/parent. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=("plugin-span", "plugin-parent"), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value="plugin-trace", + ), + ): + trace_id, span_id, parent_id = self._resolve(ed, callback_context) + + # trace_id comes from ambient OTel. + assert trace_id == expected_trace + # span_id and parent_span_id come from plugin stack. + assert span_id == "plugin-span" + assert parent_id == "plugin-parent" + provider.shutdown() + + def test_ambient_fallback_when_no_plugin_stack(self, callback_context): + """Ambient OTel provides span_id/parent when plugin stack is empty.""" from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter @@ -3131,7 +3319,20 @@ def test_ambient_otel_span_takes_priority(self, callback_context): expected_span = format(ambient_ctx.span_id, "016x") expected_parent = format(parent_span.get_span_context().span_id, "016x") - trace_id, span_id, parent_id = self._resolve(ed, callback_context) + # Plugin stack returns None — ambient is the fallback. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=(None, None), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value=None, + ), + ): + trace_id, span_id, parent_id = self._resolve(ed, callback_context) assert trace_id == expected_trace assert span_id == expected_span @@ -3162,8 +3363,8 @@ def test_override_beats_ambient(self, callback_context): assert parent_id == "forced-parent" provider.shutdown() - def test_ambient_root_span_no_self_parent(self, callback_context): - """Ambient root span (no parent) must not produce self-parent.""" + def test_plugin_stack_wins_over_ambient_root_span(self, callback_context): + """Plugin stack span is used even when ambient root span exists.""" from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter @@ -3172,7 +3373,7 @@ def test_ambient_root_span_no_self_parent(self, callback_context): provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) real_tracer = provider.get_tracer("test") - # Seed the plugin stack with a span so there's a stale parent. + # Seed the plugin stack with a span. bigquery_agent_analytics_plugin._span_records_ctx.set(None) with mock.patch.object( bigquery_agent_analytics_plugin, "tracer", real_tracer @@ -3181,29 +3382,68 @@ def test_ambient_root_span_no_self_parent(self, callback_context): callback_context, "plugin-child" ) + # Capture the plugin span_id that was pushed. + plugin_span_id, _ = ( + bigquery_agent_analytics_plugin.TraceManager.get_current_span_and_parent() + ) + ed = bigquery_agent_analytics_plugin.EventData() # Single root ambient span — no parent. with real_tracer.start_as_current_span("root_invocation") as root: trace_id, span_id, parent_id = self._resolve(ed, callback_context) - root_span_id = format(root.get_span_context().span_id, "016x") + ambient_trace = format(root.get_span_context().trace_id, "032x") - # span_id should be the ambient root's span_id - assert span_id == root_span_id - # parent must be None — not the stale plugin parent, not self + # trace_id comes from ambient. + assert trace_id == ambient_trace + # span_id comes from plugin stack, not ambient. + assert span_id == plugin_span_id + # parent is None — only one span in plugin stack. assert parent_id is None - assert span_id != parent_id # Cleanup bigquery_agent_analytics_plugin.TraceManager.pop_span() provider.shutdown() - def test_ambient_span_used_for_completed_event(self, callback_context): - """Completed event with overrides should use ambient when present. + def test_ambient_root_fallback_no_self_parent(self, callback_context): + """Ambient root span fallback must not produce self-parent.""" + from opentelemetry.sdk.trace import TracerProvider as SdkProvider + from opentelemetry.sdk.trace.export import SimpleSpanProcessor + from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + + provider = SdkProvider() + provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) + real_tracer = provider.get_tracer("test") + + ed = bigquery_agent_analytics_plugin.EventData() + + # Plugin stack empty — ambient provides the fallback. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=(None, None), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value=None, + ), + ): + with real_tracer.start_as_current_span("root") as root: + trace_id, span_id, parent_id = self._resolve(ed, callback_context) + root_span_id = format(root.get_span_context().span_id, "016x") + + assert span_id == root_span_id + assert parent_id is None + provider.shutdown() + + def test_plugin_stack_pairs_starting_completed(self, callback_context): + """STARTING/COMPLETED pairing uses plugin stack, not ambient. - When an ambient OTel span is valid, passing None overrides lets - _resolve_ids Layer 2 pick the ambient span — matching the - STARTING event's span_id. + Post-pop callbacks now always pass explicit overrides from the + plugin stack. The plugin stack span_id is used for both events + regardless of ambient OTel state. """ from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor @@ -3213,23 +3453,33 @@ def test_ambient_span_used_for_completed_event(self, callback_context): provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) real_tracer = provider.get_tracer("test") - with real_tracer.start_as_current_span("invoke_agent") as agent_span: - expected_span = format(agent_span.get_span_context().span_id, "016x") - - # Simulate STARTING: no overrides → ambient Layer 2 wins. - ed_starting = bigquery_agent_analytics_plugin.EventData() - _, span_starting, _ = self._resolve(ed_starting, callback_context) + with real_tracer.start_as_current_span("invoke_agent"): + # Simulate STARTING: plugin stack provides span_id. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=("plugin-agent", "plugin-inv"), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value="plugin-trace", + ), + ): + ed_starting = bigquery_agent_analytics_plugin.EventData() + _, span_starting, _ = self._resolve(ed_starting, callback_context) - # Simulate COMPLETED: None overrides (ambient check passed). + # Simulate COMPLETED: explicit override from popped span. ed_completed = bigquery_agent_analytics_plugin.EventData( - span_id_override=None, - parent_span_id_override=None, + span_id_override="plugin-agent", + parent_span_id_override="plugin-inv", latency_ms=42, ) _, span_completed, _ = self._resolve(ed_completed, callback_context) - assert span_starting == expected_span - assert span_completed == expected_span + assert span_starting == "plugin-agent" + assert span_completed == "plugin-agent" assert span_starting == span_completed provider.shutdown() @@ -4339,6 +4589,228 @@ def test_transfer_tool_returns_transfer_agent(self): result = bigquery_agent_analytics_plugin._get_tool_origin(tool) assert result == "TRANSFER_AGENT" + def test_transfer_tool_without_args_returns_transfer_agent(self): + """TransferToAgentTool without tool_args falls back to TRANSFER_AGENT.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, tool_args=None, tool_context=None + ) + assert result == "TRANSFER_AGENT" + + def test_transfer_to_remote_a2a_sub_agent_returns_transfer_a2a(self): + """Transfer to a RemoteA2aAgent sub-agent is classified TRANSFER_A2A.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [remote_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + def test_transfer_to_local_sub_agent_returns_transfer_agent(self): + """Transfer to a local sub-agent is still classified TRANSFER_AGENT.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + local_agent = mock.MagicMock() + local_agent.name = "local_sub" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [local_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool(agent_names=["local_sub"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "local_sub"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_AGENT" + + def test_transfer_to_a2a_peer_returns_transfer_a2a(self): + """Transfer to a RemoteA2aAgent peer is classified TRANSFER_A2A.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_peer = mock.MagicMock(spec=RemoteA2aAgent) + remote_peer.name = "remote_peer" + + current_agent = mock.MagicMock() + current_agent.name = "child" + current_agent.sub_agents = [] + + parent_agent = mock.MagicMock() + parent_agent.name = "parent" + parent_agent.sub_agents = [current_agent, remote_peer] + current_agent.parent_agent = parent_agent + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool( + agent_names=["remote_peer"], + ) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_peer"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + def test_transfer_mixed_targets_classifies_per_call(self): + """A single TransferToAgentTool with mixed targets classifies per call.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + local_agent = mock.MagicMock() + local_agent.name = "local_sub" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [remote_agent, local_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool( + agent_names=["remote_a2a", "local_sub"], + ) + + # Transfer to remote target → TRANSFER_A2A + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + # Transfer to local target → TRANSFER_AGENT + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "local_sub"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_AGENT" + + @pytest.mark.asyncio + async def test_tool_error_callback_classifies_a2a_transfer( + self, + mock_auth_default, + mock_bq_client, + mock_write_client, + mock_to_arrow_schema, + dummy_arrow_schema, + mock_asyncio_to_thread, + ): + """on_tool_error_callback produces TRANSFER_A2A for RemoteA2aAgent.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + + mock_agent = mock.MagicMock(spec=base_agent.BaseAgent) + mock_agent.name = "root" + mock_agent.instruction = "" + mock_agent.sub_agents = [remote_agent] + mock_agent.parent_agent = None + + mock_s = mock.create_autospec( + session_lib.Session, instance=True, spec_set=True + ) + type(mock_s).id = mock.PropertyMock(return_value="sess-1") + type(mock_s).user_id = mock.PropertyMock(return_value="user-1") + type(mock_s).app_name = mock.PropertyMock(return_value="test_app") + type(mock_s).state = mock.PropertyMock(return_value={}) + + inv_ctx = InvocationContext( + agent=mock_agent, + session=mock_s, + invocation_id="inv-err", + session_service=mock.create_autospec( + base_session_service_lib.BaseSessionService, + instance=True, + spec_set=True, + ), + plugin_manager=mock.create_autospec( + plugin_manager_lib.PluginManager, + instance=True, + spec_set=True, + ), + ) + tool_ctx = tool_context_lib.ToolContext(invocation_context=inv_ctx) + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + + async with managed_plugin( + PROJECT_ID, DATASET_ID, table_id=TABLE_ID + ) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + bigquery_agent_analytics_plugin.TraceManager.push_span(tool_ctx, "tool") + await plugin.on_tool_error_callback( + tool=tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_ctx, + error=RuntimeError("connection refused"), + ) + await asyncio.sleep(0.01) + + rows = await _get_captured_rows_async( + mock_write_client, dummy_arrow_schema + ) + + assert len(rows) == 1 + assert rows[0]["event_type"] == "TOOL_ERROR" + content = json.loads(rows[0]["content"]) + assert content["tool_origin"] == "TRANSFER_A2A" + def test_mcp_tool_returns_mcp(self): try: from google.adk.tools.mcp_tool.mcp_tool import McpTool @@ -5054,18 +5526,19 @@ def test_reset_logs_fork_warning(self): class TestAnalyticsViews: """Tests for auto-created per-event-type BigQuery views.""" - def _make_plugin(self, create_views=True): + def _make_plugin(self, create_views=True, view_prefix="v", table_id=TABLE_ID): config = bigquery_agent_analytics_plugin.BigQueryLoggerConfig( create_views=create_views, + view_prefix=view_prefix, ) plugin = bigquery_agent_analytics_plugin.BigQueryAgentAnalyticsPlugin( project_id=PROJECT_ID, dataset_id=DATASET_ID, - table_id=TABLE_ID, + table_id=table_id, config=config, ) plugin.client = mock.MagicMock() - plugin.full_table_id = f"{PROJECT_ID}.{DATASET_ID}.{TABLE_ID}" + plugin.full_table_id = f"{PROJECT_ID}.{DATASET_ID}.{table_id}" plugin._schema = bigquery_agent_analytics_plugin._get_events_schema() return plugin @@ -5151,6 +5624,7 @@ def test_config_create_views_default_true(self): """Config create_views defaults to True.""" config = bigquery_agent_analytics_plugin.BigQueryLoggerConfig() assert config.create_views is True + assert config.view_prefix == "v" @pytest.mark.asyncio async def test_create_analytics_views_ensures_started( @@ -5209,6 +5683,77 @@ async def test_create_analytics_views_raises_on_startup_failure( assert exc_info.value.__cause__ is not None assert "client boom" in str(exc_info.value.__cause__) + def test_custom_view_prefix(self): + """Custom view_prefix namespaces view names.""" + plugin = self._make_plugin(view_prefix="v_staging") + plugin.client.get_table.side_effect = cloud_exceptions.NotFound("not found") + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + + plugin._ensure_schema_exists() + + calls = plugin.client.query.call_args_list + all_sql = " ".join(c[0][0] for c in calls) + # All views should use the custom prefix + for event_type in bigquery_agent_analytics_plugin._EVENT_VIEW_DEFS: + expected_name = "v_staging_" + event_type.lower() + assert expected_name in all_sql, f"View {expected_name} not found in SQL" + # Default prefix should NOT appear + assert ".v_llm_request" not in all_sql + + def test_default_view_prefix_preserves_names(self): + """Default view_prefix='v' produces the same names as before.""" + plugin = self._make_plugin() # default view_prefix="v" + plugin.client.get_table.side_effect = cloud_exceptions.NotFound("not found") + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + + plugin._ensure_schema_exists() + + calls = plugin.client.query.call_args_list + all_sql = " ".join(c[0][0] for c in calls) + for event_type in bigquery_agent_analytics_plugin._EVENT_VIEW_DEFS: + view_name = "v_" + event_type.lower() + assert view_name in all_sql + + def test_distinct_tables_and_prefixes_no_collision(self): + """Two plugins targeting different tables produce disjoint views.""" + plugin_a = self._make_plugin( + table_id="agent_events_prod", view_prefix="v_prod" + ) + plugin_b = self._make_plugin( + table_id="agent_events_staging", view_prefix="v_staging" + ) + + for plugin in (plugin_a, plugin_b): + plugin.client.get_table.side_effect = cloud_exceptions.NotFound( + "not found" + ) + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + plugin._ensure_schema_exists() + + sql_a = " ".join(c[0][0] for c in plugin_a.client.query.call_args_list) + sql_b = " ".join(c[0][0] for c in plugin_b.client.query.call_args_list) + + # View names use their own prefix + assert "v_prod_llm_request" in sql_a + assert "v_staging_llm_request" in sql_b + # No cross-contamination + assert "v_staging_" not in sql_a + assert "v_prod_" not in sql_b + + # FROM clauses point at the correct table + assert "agent_events_prod" in sql_a + assert "agent_events_staging" not in sql_a + assert "agent_events_staging" in sql_b + assert "agent_events_prod" not in sql_b + + def test_empty_view_prefix_raises(self): + """Empty view_prefix is rejected at init.""" + with pytest.raises(ValueError, match="view_prefix"): + self._make_plugin(view_prefix="") + # ============================================================================== # Trace-ID Continuity Tests (Issue #4645) @@ -6452,3 +6997,139 @@ def _fake_run_coroutine_threadsafe(coro, loop): mock_rcts.assert_called() call_args = mock_rcts.call_args assert call_args[0][1] is other_loop + + +# ============================================================== +# TEST CLASS: A2A_INTERACTION event logging via on_event_callback +# ============================================================== +class TestA2AInteractionLogging: + """Tests for A2A interaction event emission via on_event_callback. + + When a RemoteA2aAgent processes a response, it attaches A2A + metadata (``a2a:task_id``, ``a2a:context_id``, ``a2a:request``, + ``a2a:response``) to the event's ``custom_metadata``. The + plugin's ``on_event_callback`` should detect events carrying + ``a2a:request`` or ``a2a:response`` and log an + ``A2A_INTERACTION`` event so the remote agent's response and + cross-reference IDs are visible in BigQuery. + """ + + @pytest.mark.asyncio + async def test_a2a_interaction_logged_for_response_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + dummy_arrow_schema, + ): + """Event with a2a:response in custom_metadata emits A2A_INTERACTION.""" + a2a_meta = { + "a2a:task_id": "task-abc", + "a2a:context_id": "ctx-123", + "a2a:response": {"status": "completed", "text": "result"}, + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + bigquery_agent_analytics_plugin.TraceManager.push_span(invocation_context) + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + rows = await _get_captured_rows_async(mock_write_client, dummy_arrow_schema) + event_types = [r["event_type"] for r in rows] + assert "A2A_INTERACTION" in event_types + + a2a_row = next(r for r in rows if r["event_type"] == "A2A_INTERACTION") + attributes = json.loads(a2a_row["attributes"]) + assert "a2a_metadata" in attributes + assert attributes["a2a_metadata"]["a2a:task_id"] == "task-abc" + assert attributes["a2a_metadata"]["a2a:context_id"] == "ctx-123" + + # Content should contain the a2a:response payload. + content = json.loads(a2a_row["content"]) + assert content["status"] == "completed" + + @pytest.mark.asyncio + async def test_a2a_interaction_logged_for_request_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + dummy_arrow_schema, + ): + """Event with a2a:request (no a2a:response) emits A2A_INTERACTION.""" + a2a_meta = { + "a2a:task_id": "task-xyz", + "a2a:request": {"message": "hello"}, + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + bigquery_agent_analytics_plugin.TraceManager.push_span(invocation_context) + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + rows = await _get_captured_rows_async(mock_write_client, dummy_arrow_schema) + event_types = [r["event_type"] for r in rows] + assert "A2A_INTERACTION" in event_types + + a2a_row = next(r for r in rows if r["event_type"] == "A2A_INTERACTION") + attributes = json.loads(a2a_row["attributes"]) + assert attributes["a2a_metadata"]["a2a:request"] == {"message": "hello"} + # No a2a:response → content should be None. + assert a2a_row["content"] is None + + @pytest.mark.asyncio + async def test_no_a2a_interaction_for_irrelevant_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + ): + """Events with only a2a:task_id (no request/response) are skipped.""" + a2a_meta = { + "a2a:task_id": "task-only", + "a2a:context_id": "ctx-only", + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + # No events logged — a2a:task_id alone is not a meaningful + # interaction payload. + assert mock_write_client.append_rows.call_count == 0 + + @pytest.mark.asyncio + async def test_no_a2a_interaction_for_no_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + ): + """Events without custom_metadata produce no A2A_INTERACTION.""" + event = event_lib.Event(author="regular_agent") + + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + assert mock_write_client.append_rows.call_count == 0 diff --git a/tests/unittests/sessions/migration/test_database_schema.py b/tests/unittests/sessions/migration/test_database_schema.py index ceb5420b14..5381742097 100644 --- a/tests/unittests/sessions/migration/test_database_schema.py +++ b/tests/unittests/sessions/migration/test_database_schema.py @@ -72,6 +72,16 @@ def get_schema_version(sync_conn): event_col_names = {c['name'] for c in event_cols} assert 'event_data' in event_col_names assert 'actions' not in event_col_names + + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) await engine.dispose() @@ -168,3 +178,74 @@ async def test_existing_latest_db_uses_latest_schema(tmp_path): assert 'event_data' in event_col_names assert 'actions' not in event_col_names await engine.dispose() + + +@pytest.mark.asyncio +async def test_prepare_tables_recreates_missing_latest_events_index(tmp_path): + db_path = tmp_path / 'missing_latest_index.db' + db_url = f'sqlite+aiosqlite:///{db_path}' + + async with DatabaseSessionService(db_url) as session_service: + await session_service.create_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + + engine = create_async_engine(db_url) + async with engine.begin() as conn: + await conn.execute(text('DROP INDEX idx_events_app_user_session_ts')) + await engine.dispose() + + async with DatabaseSessionService(db_url) as session_service: + session = await session_service.get_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + assert session.id == 's1' + + engine = create_async_engine(db_url) + async with engine.connect() as conn: + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + await engine.dispose() + + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) + + +@pytest.mark.asyncio +async def test_prepare_tables_recreates_missing_v0_events_index(tmp_path): + db_path = tmp_path / 'missing_v0_index.db' + await create_v0_db(db_path) + db_url = f'sqlite+aiosqlite:///{db_path}' + + engine = create_async_engine(db_url) + async with engine.begin() as conn: + await conn.execute(text('DROP INDEX idx_events_app_user_session_ts')) + await engine.dispose() + + async with DatabaseSessionService(db_url) as session_service: + await session_service.create_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + session = await session_service.get_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + assert session.id == 's1' + + engine = create_async_engine(db_url) + async with engine.connect() as conn: + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + await engine.dispose() + + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) diff --git a/tests/unittests/sessions/test_session_service.py b/tests/unittests/sessions/test_session_service.py index 9686596b93..2d7d89f15f 100644 --- a/tests/unittests/sessions/test_session_service.py +++ b/tests/unittests/sessions/test_session_service.py @@ -13,6 +13,7 @@ # limitations under the License. import asyncio +from contextlib import asynccontextmanager from datetime import datetime from datetime import timezone import enum @@ -22,6 +23,8 @@ from google.adk.errors.already_exists_error import AlreadyExistsError from google.adk.events.event import Event from google.adk.events.event_actions import EventActions +from google.adk.features import FeatureName +from google.adk.features import override_feature_enabled from google.adk.sessions import database_session_service from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.database_session_service import DatabaseSessionService @@ -34,6 +37,7 @@ class SessionServiceType(enum.Enum): IN_MEMORY = 'IN_MEMORY' + IN_MEMORY_WITH_LIGHT_COPY_ENABLED = 'IN_MEMORY_WITH_LIGHT_COPY_ENABLED' DATABASE = 'DATABASE' SQLITE = 'SQLITE' @@ -47,22 +51,33 @@ def get_session_service( return DatabaseSessionService('sqlite+aiosqlite:///:memory:') if service_type == SessionServiceType.SQLITE: return SqliteSessionService(str(tmp_path / 'sqlite.db')) + if service_type == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + return InMemorySessionService() return InMemorySessionService() @pytest.fixture( params=[ SessionServiceType.IN_MEMORY, + SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED, SessionServiceType.DATABASE, SessionServiceType.SQLITE, ] ) async def session_service(request, tmp_path): """Provides a session service and closes database backends on teardown.""" + if request.param == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + override_feature_enabled( + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY, True + ) service = get_session_service(request.param, tmp_path) yield service if isinstance(service, DatabaseSessionService): await service.close() + if request.param == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + override_feature_enabled( + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY, False + ) def test_database_session_service_enables_pool_pre_ping_by_default(): @@ -151,6 +166,74 @@ def fake_create_async_engine(_db_url: str, **kwargs): assert captured_kwargs.get('pool_pre_ping') is False +def test_database_session_service_creates_read_only_engine_for_spanner(): + captured_binds = [] + fake_engine = mock.Mock() + fake_engine.dialect.name = 'spanner+spanner' + fake_engine.sync_engine = mock.Mock() + read_only_engine = mock.Mock() + fake_engine.execution_options.return_value = read_only_engine + + def fake_async_sessionmaker(*, bind, expire_on_commit, **kwargs): + del expire_on_commit + del kwargs + captured_binds.append(bind) + return mock.Mock() + + with ( + mock.patch.object( + database_session_service, + 'create_async_engine', + return_value=fake_engine, + ), + mock.patch.object( + database_session_service, + 'async_sessionmaker', + side_effect=fake_async_sessionmaker, + ), + ): + database_session_service.DatabaseSessionService( + 'spanner+spanner:///projects/test/instances/test/databases/test' + ) + + assert captured_binds == [fake_engine, read_only_engine] + fake_engine.execution_options.assert_called_once_with(read_only=True) + + +def test_database_session_service_creates_read_only_engine_for_other_dialects(): + captured_binds = [] + fake_engine = mock.Mock() + fake_engine.dialect.name = 'postgresql' + fake_engine.sync_engine = mock.Mock() + read_only_engine = mock.Mock() + fake_engine.execution_options.return_value = read_only_engine + + def fake_async_sessionmaker(*, bind, expire_on_commit, **kwargs): + del expire_on_commit + del kwargs + captured_binds.append(bind) + return mock.Mock() + + with ( + mock.patch.object( + database_session_service, + 'create_async_engine', + return_value=fake_engine, + ), + mock.patch.object( + database_session_service, + 'async_sessionmaker', + side_effect=fake_async_sessionmaker, + ), + ): + database_session_service.DatabaseSessionService( + 'postgresql+psycopg2://user:pass@localhost:5432/db' + ) + + assert captured_binds == [fake_engine, read_only_engine] + fake_engine.execution_options.assert_called_once_with(read_only=True) + + @pytest.mark.asyncio async def test_sqlite_session_service_accepts_sqlite_urls( tmp_path, monkeypatch @@ -198,6 +281,67 @@ async def test_get_empty_session(session_service): ) +@pytest.mark.asyncio +async def test_database_session_service_get_session_uses_read_only_factory(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + service._prepare_tables = mock.AsyncMock() + + read_only_session = mock.AsyncMock() + read_only_session.get = mock.AsyncMock(return_value=None) + + @asynccontextmanager + async def fake_read_only_session(): + yield read_only_session + + service.database_session_factory = mock.Mock( + side_effect=AssertionError('write session factory should not be used') + ) + service._read_only_database_session_factory = mock.Mock( + return_value=fake_read_only_session() + ) + + session = await service.get_session( + app_name='my_app', user_id='test_user', session_id='123' + ) + + assert session is None + service._read_only_database_session_factory.assert_called_once_with() + service.database_session_factory.assert_not_called() + + await service.close() + + +@pytest.mark.asyncio +async def test_database_session_service_list_sessions_uses_read_only_factory(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + service._prepare_tables = mock.AsyncMock() + + read_only_session = mock.AsyncMock() + empty_result = mock.Mock() + empty_result.scalars.return_value.all.return_value = [] + read_only_session.execute = mock.AsyncMock(return_value=empty_result) + read_only_session.get = mock.AsyncMock(return_value=None) + + @asynccontextmanager + async def fake_read_only_session(): + yield read_only_session + + service.database_session_factory = mock.Mock( + side_effect=AssertionError('write session factory should not be used') + ) + service._read_only_database_session_factory = mock.Mock( + return_value=fake_read_only_session() + ) + + response = await service.list_sessions(app_name='my_app', user_id='test_user') + + assert response.sessions == [] + service._read_only_database_session_factory.assert_called_once_with() + service.database_session_factory.assert_not_called() + + await service.close() + + @pytest.mark.asyncio async def test_create_get_session(session_service): app_name = 'my_app' @@ -657,28 +801,27 @@ async def test_append_event_to_stale_session(): assert len(original_session.events) == 1 assert 'sk2' not in original_session.state - # Appending another event to stale original_session + # Appending another event to stale original_session should be rejected. event3 = Event( invocation_id='inv3', author='user', timestamp=current_time + 3, actions=EventActions(state_delta={'sk3': 'v3'}), ) - await session_service.append_event(original_session, event3) + with pytest.raises(ValueError, match='modified in storage'): + await session_service.append_event(original_session, event3) - # If we fetch session from DB, it should contain all 3 events and all state - # changes. + # If we fetch session from DB, it should only contain the committed events. session_final = await session_service.get_session( app_name=app_name, user_id=user_id, session_id=original_session.id ) - assert len(session_final.events) == 3 + assert len(session_final.events) == 2 assert session_final.state.get('sk1') == 'v1' assert session_final.state.get('sk2') == 'v2' - assert session_final.state.get('sk3') == 'v3' + assert session_final.state.get('sk3') is None assert [e.invocation_id for e in session_final.events] == [ 'inv1', 'inv2', - 'inv3', ] @@ -738,7 +881,7 @@ async def test_append_event_raises_if_user_state_row_missing(): @pytest.mark.asyncio -async def test_append_event_concurrent_stale_sessions_preserve_all_state(): +async def test_append_event_concurrent_stale_sessions_reject_stale_writer(): session_service = get_session_service( service_type=SessionServiceType.DATABASE ) @@ -771,19 +914,103 @@ async def test_append_event_concurrent_stale_sessions_preserve_all_state(): actions=EventActions(state_delta={f'sk{i}-2': f'v{i}-2'}), ) - await asyncio.gather( + results = await asyncio.gather( session_service.append_event(stale_session_1, event_1), session_service.append_event(stale_session_2, event_2), + return_exceptions=True, ) + errors = [result for result in results if isinstance(result, Exception)] + successes = [ + result for result in results if not isinstance(result, Exception) + ] + assert len(successes) == 1 + assert len(errors) == 1 + assert isinstance(errors[0], ValueError) + assert 'modified in storage' in str(errors[0]) session_final = await session_service.get_session( app_name=app_name, user_id=user_id, session_id=session.id ) for i in range(iteration_count): - assert session_final.state.get(f'sk{i}-1') == f'v{i}-1' - assert session_final.state.get(f'sk{i}-2') == f'v{i}-2' - assert len(session_final.events) == iteration_count * 2 + event_values = { + session_final.state.get(f'sk{i}-1'), + session_final.state.get(f'sk{i}-2'), + } + assert event_values & {f'v{i}-1', f'v{i}-2'} + assert None in event_values + assert len(session_final.events) == iteration_count + + +@pytest.mark.asyncio +async def test_append_event_allows_timestamp_drift_for_current_session(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + session = await service.create_session( + app_name='my_app', user_id='user', session_id='s1' + ) + event1 = Event( + invocation_id='inv1', + author='user', + timestamp=session.last_update_time + 10, + ) + await service.append_event(session, event1) + + # Simulate a float round-trip mismatch without changing the persisted + # session revision. + session.last_update_time -= 0.0001 + + event2 = Event( + invocation_id='inv2', + author='user', + timestamp=event1.timestamp + 10, + ) + await service.append_event(session, event2) + + refreshed_session = await service.get_session( + app_name='my_app', user_id='user', session_id=session.id + ) + assert [event.invocation_id for event in refreshed_session.events] == [ + 'inv1', + 'inv2', + ] + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_append_event_allows_markerless_current_session(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + session = await service.create_session( + app_name='my_app', user_id='user', session_id='s1' + ) + event1 = Event( + invocation_id='inv1', + author='user', + timestamp=session.last_update_time + 10, + ) + await service.append_event(session, event1) + + session._storage_update_marker = None + session.last_update_time -= 0.0001 + + event2 = Event( + invocation_id='inv2', + author='user', + timestamp=event1.timestamp + 10, + ) + await service.append_event(session, event2) + + refreshed_session = await service.get_session( + app_name='my_app', user_id='user', session_id=session.id + ) + assert [event.invocation_id for event in refreshed_session.events] == [ + 'inv1', + 'inv2', + ] + finally: + await service.close() @pytest.mark.asyncio @@ -1157,6 +1384,137 @@ async def test_prepare_tables_serializes_schema_detection_and_creation(): await service.close() +@pytest.mark.asyncio +async def test_get_or_create_state_returns_existing_row(): + """_get_or_create_state returns an existing row without inserting.""" + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + # Pre-create the app_state row. + async with service.database_session_factory() as sql_session: + sql_session.add(schema.StorageAppState(app_name='app1', state={'k': 'v'})) + await sql_session.commit() + + # _get_or_create_state should find and return it. + async with service.database_session_factory() as sql_session: + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='app1', + defaults={'app_name': 'app1', 'state': {}}, + ) + assert row.app_name == 'app1' + assert row.state == {'k': 'v'} + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_get_or_create_state_creates_new_row(): + """_get_or_create_state creates a row when none exists.""" + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + async with service.database_session_factory() as sql_session: + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='new_app', + defaults={'app_name': 'new_app', 'state': {}}, + ) + await sql_session.commit() + assert row.app_name == 'new_app' + assert row.state == {} + + # Verify the row was actually persisted. + async with service.database_session_factory() as sql_session: + persisted = await sql_session.get(schema.StorageAppState, 'new_app') + assert persisted is not None + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_get_or_create_state_handles_race_condition(): + """_get_or_create_state recovers when a concurrent INSERT wins the race. + + Simulates the race from https://github.com/google/adk-python/issues/4954: + the initial SELECT returns None (another caller hasn't committed yet), but + by the time we INSERT, the other caller has committed — so the INSERT fails + with IntegrityError and we fall back to re-fetching. + """ + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + # Pre-create the row to guarantee the INSERT will fail. + async with service.database_session_factory() as sql_session: + sql_session.add(schema.StorageAppState(app_name='race_app', state={})) + await sql_session.commit() + + # Patch session.get to return None on the first call (simulating the + # race window), then fall through to the real implementation. + async with service.database_session_factory() as sql_session: + original_get = sql_session.get + call_count = 0 + + async def patched_get(*args, **kwargs): + nonlocal call_count + call_count += 1 + if call_count == 1: + return None # Simulate: row not yet visible + return await original_get(*args, **kwargs) + + sql_session.get = patched_get + + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='race_app', + defaults={'app_name': 'race_app', 'state': {}}, + ) + assert row.app_name == 'race_app' + # The function should have called get twice: once before the INSERT + # (patched to return None) and once after the IntegrityError. + assert call_count == 2 + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_create_session_sequential_same_app_name(): + """Sequential create_session calls for the same app_name work correctly. + + The second call reuses the existing app_states row. + """ + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + s1 = await service.create_session( + app_name='shared', user_id='u1', session_id='s1' + ) + s2 = await service.create_session( + app_name='shared', user_id='u2', session_id='s2' + ) + assert s1.app_name == 'shared' + assert s2.app_name == 'shared' + + got1 = await service.get_session( + app_name='shared', user_id='u1', session_id='s1' + ) + got2 = await service.get_session( + app_name='shared', user_id='u2', session_id='s2' + ) + assert got1 is not None + assert got2 is not None + finally: + await service.close() + + @pytest.mark.asyncio async def test_prepare_tables_idempotent_after_creation(): """Calling _prepare_tables multiple times is safe and idempotent. diff --git a/tests/unittests/sessions/test_v0_storage_event.py b/tests/unittests/sessions/test_v0_storage_event.py index cc82272506..3f542af8b4 100644 --- a/tests/unittests/sessions/test_v0_storage_event.py +++ b/tests/unittests/sessions/test_v0_storage_event.py @@ -15,9 +15,13 @@ from datetime import datetime from datetime import timezone +from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction +from google.adk.sessions.schemas.shared import DEFAULT_MAX_VARCHAR_LENGTH +from google.adk.sessions.schemas.v0 import _truncate_str from google.adk.sessions.schemas.v0 import StorageEvent +from google.adk.sessions.session import Session from google.genai import types @@ -48,3 +52,76 @@ def test_storage_event_v0_to_event_rehydrates_compaction_model(): assert isinstance(event.actions.compaction, EventCompaction) assert event.actions.compaction.start_timestamp == 1.0 assert event.actions.compaction.end_timestamp == 2.0 + + +def test_truncate_str_returns_none_for_none(): + assert _truncate_str(None, 256) is None + + +def test_truncate_str_returns_short_string_unchanged(): + short = "short message" + assert _truncate_str(short, 256) == short + + +def test_truncate_str_returns_exact_length_string_unchanged(): + exact = "a" * DEFAULT_MAX_VARCHAR_LENGTH + assert _truncate_str(exact, DEFAULT_MAX_VARCHAR_LENGTH) == exact + + +def test_truncate_str_truncates_long_string(): + long_msg = "x" * 1000 + result = _truncate_str(long_msg, DEFAULT_MAX_VARCHAR_LENGTH) + assert result is not None + assert len(result) == DEFAULT_MAX_VARCHAR_LENGTH + assert result.endswith("...[truncated]") + + +def test_from_event_truncates_long_error_message(): + long_error = "Malformed function call: " + "a" * 1000 + session = Session( + app_name="app", + user_id="user", + id="session_id", + state={}, + events=[], + last_update_time=0.0, + ) + event = Event( + id="event_id", + invocation_id="inv_id", + author="agent", + timestamp=1.0, + error_code="MALFORMED_FUNCTION_CALL", + error_message=long_error, + ) + + storage_event = StorageEvent.from_event(session, event) + + assert storage_event.error_message is not None + assert len(storage_event.error_message) == DEFAULT_MAX_VARCHAR_LENGTH + assert storage_event.error_message.endswith("...[truncated]") + assert storage_event.error_code == "MALFORMED_FUNCTION_CALL" + + +def test_from_event_preserves_short_error_message(): + short_error = "Something went wrong" + session = Session( + app_name="app", + user_id="user", + id="session_id", + state={}, + events=[], + last_update_time=0.0, + ) + event = Event( + id="event_id", + invocation_id="inv_id", + author="agent", + timestamp=1.0, + error_code="SOME_ERROR", + error_message=short_error, + ) + + storage_event = StorageEvent.from_event(session, event) + + assert storage_event.error_message == short_error diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index c095ddd9d2..d5e12f6038 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -28,12 +28,14 @@ from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction +from google.adk.models.cache_metadata import CacheMetadata from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.session import Session from google.adk.sessions.vertex_ai_session_service import VertexAiSessionService from google.api_core import exceptions as api_core_exceptions from google.genai import types as genai_types from google.genai.errors import ClientError +import pydantic import pytest MOCK_SESSION_JSON_1 = { @@ -91,6 +93,7 @@ 'branch': '', 'long_running_tool_ids': ['tool1'], }, + 'raw_event': {}, }, ] MOCK_EVENT_JSON_2 = [ @@ -162,6 +165,96 @@ def _generate_mock_events_for_session_5(num_events): MANY_EVENTS_COUNT = 200 MOCK_EVENTS_JSON_5 = _generate_mock_events_for_session_5(MANY_EVENTS_COUNT) +MOCK_EVENT_WITH_OVERRIDE_JSON = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'content': { + 'parts': [ + {'text': 'top_level_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'top_level_agent', + }, + 'eventMetadata': { + 'partial': True, + 'turnComplete': False, + 'interrupted': False, + 'branch': 'top_level_branch', + }, + 'errorCode': '111', + 'errorMessage': 'top_level_error', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'raw_event_agent', + }, + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + }, +}] + +MOCK_EVENT_WITH_OVERRIDE_JSON_2 = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'content': {}, + 'actions': {}, + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'skipSummarization': None, + 'stateDelta': {}, + 'artifactDelta': {}, + 'transferToAgent': 'raw_event_agent', + 'escalate': None, + 'requestedAuthConfigs': {}, + }, + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'customMetadata': None, + 'longRunningToolIds': None, + }, +}] + +MOCK_SESSION_WITH_OVERRIDE_JSON = { + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override' + ), + 'update_time': '2024-12-12T12:12:12.123456Z', + 'user_id': 'user_with_override', +} + MOCK_SESSION = Session( app_name='123', user_id='user', @@ -249,6 +342,8 @@ def _convert_to_object(data): 'artifact_delta', 'custom_metadata', 'requested_auth_configs', + 'rawEvent', + 'raw_event', ]: kwargs[key] = value else: @@ -324,7 +419,10 @@ async def _create_session( self, name: str, user_id: str, config: dict[str, Any] ): self.last_create_session_config = config - new_session_id = '4' + if 'session_id' in config: + new_session_id = config['session_id'] + else: + new_session_id = '4' self.session_dict[new_session_id] = { 'name': ( 'projects/test-project/locations/test-location/' @@ -343,7 +441,7 @@ async def _create_session( + '/operations/111' ), 'done': True, - 'response': self.session_dict['4'], + 'response': self.session_dict[new_session_id], }) async def _list_events(self, name: str, **kwargs): @@ -680,6 +778,38 @@ async def test_get_session_keeps_events_newer_than_update_time( ) +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +@pytest.mark.parametrize( + 'mock_event_json', + [MOCK_EVENT_WITH_OVERRIDE_JSON, MOCK_EVENT_WITH_OVERRIDE_JSON_2], +) +async def test_get_session_from_raw_event( + mock_api_client_instance: MockAsyncClient, + mock_event_json, +) -> None: + mock_api_client_instance.session_dict['6'] = MOCK_SESSION_WITH_OVERRIDE_JSON + mock_api_client_instance.event_dict['6'] = ( + copy.deepcopy(mock_event_json), + None, + ) + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user_with_override', session_id='6' + ) + assert session is not None + assert len(session.events) == 1 + event = session.events[0] + assert event.content.parts[0].text == 'raw_event_content' + assert event.actions.transfer_to_agent == 'raw_event_agent' + assert not event.partial + assert event.turn_complete + assert event.interrupted + assert event.branch == 'raw_event_branch' + assert event.error_code == '222' + assert event.error_message == 'raw_event_error' + + @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_get_session_with_many_events(mock_api_client_instance): @@ -696,6 +826,20 @@ async def test_get_session_with_many_events(mock_api_client_instance): assert len(session.events) == MANY_EVENTS_COUNT +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_get_session_with_num_recent_events_zero(): + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', + user_id='user', + session_id='2', + config=GetSessionConfig(num_recent_events=0), + ) + assert session is not None + assert len(session.events) == 0 + + @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_list_sessions(): @@ -755,15 +899,26 @@ async def test_create_session(): @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') -async def test_create_session_with_custom_session_id(): +@pytest.mark.parametrize('session_id', ['1', 'abc123']) +async def test_create_session_with_custom_session_id( + mock_api_client_instance: MockAsyncClient, session_id: str +): session_service = mock_vertex_ai_session_service() - with pytest.raises(ValueError) as excinfo: - await session_service.create_session( - app_name='123', user_id='user', session_id='1' - ) - assert str(excinfo.value) == ( - 'User-provided Session id is not supported for VertexAISessionService.' + mock_api_client_instance.event_dict[session_id] = ( + [], + None, + ) + + session = await session_service.create_session( + app_name='123', user_id='user', session_id=session_id + ) + assert session.id == session_id + assert session.app_name == '123' + assert session.user_id == 'user' + assert session.last_update_time is not None + assert session == await session_service.get_session( + app_name='123', user_id='user', session_id=session_id ) @@ -816,6 +971,36 @@ async def test_append_event(): branch='test_branch', custom_metadata={'custom': 'data'}, long_running_tool_ids={'tool2'}, + input_transcription=genai_types.Transcription( + text='test_input_transcription' + ), + output_transcription=genai_types.Transcription( + text='test_output_transcription' + ), + model_version='test_model_version', + avg_logprobs=0.5, + logprobs_result=genai_types.LogprobsResult( + chosen_candidates=[ + genai_types.LogprobsResultCandidate( + log_probability=0.5, + token='test_token', + token_id=0, + ) + ] + ), + cache_metadata=CacheMetadata( + cache_name='test_cache_name', + fingerprint='test_fingerprint', + contents_count=1, + ), + citation_metadata=genai_types.CitationMetadata( + citations=[ + genai_types.Citation( + uri='http://test.com', + title='test_title', + ) + ] + ), ) await session_service.append_event(session_before_append, event_to_append) @@ -911,3 +1096,183 @@ async def test_append_event_with_compaction_and_custom_metadata(): # User custom_metadata is preserved without the internal _compaction key assert appended_event.custom_metadata == {'user_key': 'user_value'} assert '_compaction' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata(): + """usage_metadata round-trips through append_event and get_session.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + event_to_append = Event( + invocation_id='usage_invocation', + author='model', + timestamp=1734005536.0, + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=150, + candidates_token_count=50, + total_token_count=200, + ), + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 150 + assert appended_event.usage_metadata.candidates_token_count == 50 + assert appended_event.usage_metadata.total_token_count == 200 + # custom_metadata should remain None when only usage_metadata was stored + assert appended_event.custom_metadata is None + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata_and_custom_metadata(): + """Both usage_metadata and user custom_metadata survive the round-trip.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + event_to_append = Event( + invocation_id='usage_and_meta_invocation', + author='model', + timestamp=1734005537.0, + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=300, + total_token_count=400, + ), + custom_metadata={'my_key': 'my_value'}, + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + # usage_metadata is restored + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 300 + assert appended_event.usage_metadata.total_token_count == 400 + # User custom_metadata is preserved without internal keys + assert appended_event.custom_metadata == {'my_key': 'my_value'} + assert '_usage_metadata' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata_and_compaction(): + """usage_metadata, compaction, and user custom_metadata all coexist.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + compaction = EventCompaction( + start_timestamp=500.0, + end_timestamp=600.0, + compacted_content=genai_types.Content( + parts=[genai_types.Part(text='compacted')] + ), + ) + event_to_append = Event( + invocation_id='all_three_invocation', + author='model', + timestamp=1734005538.0, + actions=EventActions(compaction=compaction), + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=1000, + candidates_token_count=250, + total_token_count=1250, + ), + custom_metadata={'extra': 'info'}, + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + # Compaction is restored + assert appended_event.actions.compaction is not None + assert appended_event.actions.compaction.start_timestamp == 500.0 + assert appended_event.actions.compaction.end_timestamp == 600.0 + # usage_metadata is restored + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 1000 + assert appended_event.usage_metadata.candidates_token_count == 250 + assert appended_event.usage_metadata.total_token_count == 1250 + # User custom_metadata is preserved without internal keys + assert appended_event.custom_metadata == {'extra': 'info'} + assert '_compaction' not in (appended_event.custom_metadata or {}) + assert '_usage_metadata' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_fallback_for_older_sdk(mock_api_client_instance): + """Tests that append_event falls back to custom_metadata when SDK fails on raw_event.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + compaction = EventCompaction( + start_timestamp=1000.0, + end_timestamp=2000.0, + compacted_content=genai_types.Content( + parts=[genai_types.Part(text='compacted summary')] + ), + ) + event_to_append = Event( + invocation_id='fallback_invocation', + author='model', + timestamp=1734005534.0, + actions=EventActions(compaction=compaction), + ) + + mock_client = mock_api_client_instance + + async def side_effect(name, author, invocation_id, timestamp, config): + if 'raw_event' in config: + # Trigger a real ValidationError since Pydantic V2 doesn't allow easy + # instantiation + class DummyModel(pydantic.BaseModel): + a: int + + DummyModel(a='not an int') + return await mock_client._append_event( + name, author, invocation_id, timestamp, config + ) + + mock_client.agent_engines.sessions.events.append.side_effect = side_effect + + await session_service.append_event(session, event_to_append) + + # Verify that it was written and restored correctly via custom_metadata + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + appended_event = retrieved_session.events[-1] + + assert appended_event.actions.compaction is not None + assert appended_event.actions.compaction.start_timestamp == 1000.0 diff --git a/tests/unittests/skills/test_models.py b/tests/unittests/skills/test_models.py index 5685e9d868..73136be0b9 100644 --- a/tests/unittests/skills/test_models.py +++ b/tests/unittests/skills/test_models.py @@ -14,6 +14,8 @@ """Unit tests for skill models.""" +from google.adk.features import FeatureName +from google.adk.features._feature_registry import temporary_feature_override from google.adk.skills import models from pydantic import ValidationError import pytest @@ -99,16 +101,39 @@ def test_name_consecutive_hyphens(): models.Frontmatter(name="my--skill", description="desc") -def test_name_invalid_chars_underscore(): +def test_name_underscore_rejected_by_default(): with pytest.raises(ValidationError, match="lowercase kebab-case"): models.Frontmatter(name="my_skill", description="desc") +def test_name_valid_underscore_preserved_with_flag(): + with temporary_feature_override(FeatureName.SNAKE_CASE_SKILL_NAME, True): + fm = models.Frontmatter(name="my_skill", description="desc") + assert fm.name == "my_skill" + + def test_name_invalid_chars_ampersand(): - with pytest.raises(ValidationError, match="lowercase kebab-case"): + with pytest.raises( + ValidationError, match="name must be lowercase kebab-case" + ): models.Frontmatter(name="skill&name", description="desc") +def test_name_mixed_delimiters_rejected_by_default(): + with pytest.raises( + ValidationError, match="name must be lowercase kebab-case" + ): + models.Frontmatter(name="my-skill_1", description="desc") + + +def test_name_mixed_delimiters_rejected_with_flag(): + with temporary_feature_override(FeatureName.SNAKE_CASE_SKILL_NAME, True): + with pytest.raises( + ValidationError, match="Mixing hyphens and underscores is not allowed" + ): + models.Frontmatter(name="my-skill_1", description="desc") + + def test_name_valid_passes(): fm = models.Frontmatter(name="my-skill-2", description="desc") assert fm.name == "my-skill-2" diff --git a/tests/unittests/streaming/test_live_streaming_configs.py b/tests/unittests/streaming/test_live_streaming_configs.py index c9cff4ea97..679d3964b9 100644 --- a/tests/unittests/streaming/test_live_streaming_configs.py +++ b/tests/unittests/streaming/test_live_streaming_configs.py @@ -642,3 +642,90 @@ def test_streaming_with_context_window_compression_config(): llm_request_sent_to_mock.live_connect_config.context_window_compression.sliding_window.target_tokens == 500 ) + + +def test_streaming_with_avatar_config(): + """Test avatar_config propagation and video content through run_live. + + Verifies: + 1. avatar_config from RunConfig is propagated to live_connect_config. + 2. Video inline_data from the model flows through events correctly. + """ + # Mock model returns video content followed by turn_complete. + video_response = LlmResponse( + content=types.Content( + role='model', + parts=[ + types.Part( + inline_data=types.Blob( + data=b'video_data', mime_type='video/mp4' + ) + ) + ], + ), + ) + turn_complete_response = LlmResponse( + turn_complete=True, + ) + + mock_model = testing_utils.MockModel.create( + [video_response, turn_complete_response] + ) + + root_agent = Agent( + name='root_agent', + model=mock_model, + tools=[], + ) + + runner = testing_utils.InMemoryRunner( + root_agent=root_agent, response_modalities=['VIDEO'] + ) + + run_config = RunConfig( + response_modalities=['VIDEO'], + avatar_config=types.AvatarConfig(avatar_name='Kai'), + ) + + live_request_queue = LiveRequestQueue() + live_request_queue.send_realtime( + blob=types.Blob(data=b'\x00\xFF', mime_type='audio/pcm') + ) + res_events = runner.run_live(live_request_queue, run_config) + + assert res_events is not None, 'Expected a list of events, got None.' + assert ( + len(res_events) > 0 + ), 'Expected at least one response, but got an empty list.' + assert len(mock_model.requests) == 1 + + # 1. Verify avatar_config was propagated to the live_connect_config. + llm_request_sent_to_mock = mock_model.requests[0] + assert llm_request_sent_to_mock.live_connect_config is not None + assert llm_request_sent_to_mock.live_connect_config.avatar_config is not None + assert ( + llm_request_sent_to_mock.live_connect_config.avatar_config.avatar_name + == 'Kai' + ) + + # 2. Verify video content flows through events. + video_events = [ + e + for e in res_events + if e.content + and e.content.parts + and any( + p.inline_data + and p.inline_data.mime_type + and p.inline_data.mime_type.startswith('video/') + for p in e.content.parts + ) + ] + assert video_events, 'Expected at least one event with video inline_data.' + + video_event = video_events[0] + assert video_event.content.role == 'model' + video_part = video_event.content.parts[0] + assert video_part.inline_data is not None + assert video_part.inline_data.data == b'video_data' + assert video_part.inline_data.mime_type == 'video/mp4' diff --git a/tests/unittests/telemetry/test_spans.py b/tests/unittests/telemetry/test_spans.py index e9df610f1a..5b0cfc7a82 100644 --- a/tests/unittests/telemetry/test_spans.py +++ b/tests/unittests/telemetry/test_spans.py @@ -26,7 +26,7 @@ from google.adk.models.llm_response import LlmResponse from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.telemetry.tracing import ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS -from google.adk.telemetry.tracing import GEN_AI_AGENT_VERSION +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.telemetry.tracing import trace_agent_invocation from google.adk.telemetry.tracing import trace_call_llm from google.adk.telemetry.tracing import trace_inference_result @@ -35,6 +35,7 @@ from google.adk.telemetry.tracing import trace_tool_call from google.adk.telemetry.tracing import use_inference_span from google.adk.tools.base_tool import BaseTool +from google.adk.tools.tool_context import ToolContext from google.genai import types from mcp import ClientSession as McpClientSession from mcp import ListToolsResult as McpListToolsResult @@ -71,6 +72,15 @@ def model_dumps_json(self, exclude_none: bool = False) -> str: return '' +# Create a minimal concrete BaseTool for testing +class SimpleTestTool(BaseTool): + + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + return 'SimpleTestTool result' + + @pytest.fixture def mock_span_fixture(): return mock.MagicMock() @@ -78,18 +88,21 @@ def mock_span_fixture(): @pytest.fixture def mock_tool_fixture(): - tool = mock.Mock(spec=BaseTool) - tool.name = 'sample_tool' - tool.description = 'A sample tool for testing.' - return tool + return SimpleTestTool( + name='sample_tool', + description='A sample tool for testing.', + ) @pytest.fixture def mock_event_fixture(): event_mock = mock.create_autospec(Event, instance=True) + event_mock.id = 'test_event_id' event_mock.model_dumps_json.return_value = ( '{"default_event_key": "default_event_value"}' ) + event_mock.content = mock.MagicMock() + event_mock.content.parts = [] return event_mock @@ -122,33 +135,6 @@ async def test_trace_agent_invocation(mock_span_fixture): mock.call('gen_ai.operation.name', 'invoke_agent'), mock.call('gen_ai.agent.description', agent.description), mock.call('gen_ai.agent.name', agent.name), - mock.call(GEN_AI_AGENT_VERSION, ''), - mock.call( - 'gen_ai.conversation.id', - invocation_context.session.id, - ), - ] - mock_span_fixture.set_attribute.assert_has_calls( - expected_calls, any_order=True - ) - assert mock_span_fixture.set_attribute.call_count == len(expected_calls) - - -@pytest.mark.asyncio -async def test_trace_agent_invocation_with_version(mock_span_fixture): - """Test trace_agent_invocation sets span attributes correctly when version is provided.""" - agent = LlmAgent(name='test_llm_agent', model='gemini-pro') - agent.description = 'Test agent description' - agent.version = '1.0.0' - invocation_context = await _create_invocation_context(agent) - - trace_agent_invocation(mock_span_fixture, agent, invocation_context) - - expected_calls = [ - mock.call('gen_ai.operation.name', 'invoke_agent'), - mock.call('gen_ai.agent.description', agent.description), - mock.call('gen_ai.agent.name', agent.name), - mock.call(GEN_AI_AGENT_VERSION, agent.version), mock.call( 'gen_ai.conversation.id', invocation_context.session.id, @@ -405,6 +391,91 @@ async def test_trace_call_llm_with_thought_signature( assert len(parsed['contents']) == 3 +def test_trace_tool_call_with_destination_id( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call sets destination ID span attribute when present.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + test_dest_id = 'urn:mcp:googleapis.com:project:1234:location:global:bigquery' + tool = mock_tool_fixture + tool.custom_metadata = { + GCP_MCP_SERVER_DESTINATION_ID: test_dest_id, + 'other_meta': 'value', + } + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + mock_span_fixture.set_attribute.assert_any_call( + GCP_MCP_SERVER_DESTINATION_ID, test_dest_id + ) + + +def test_trace_tool_call_without_destination_id( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call does not set destination ID span attribute when not present.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + tool = mock_tool_fixture + tool.custom_metadata = { + 'other_meta': 'value', + } + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + called_with_dest_id = any( + call_args[0][0] == GCP_MCP_SERVER_DESTINATION_ID + for call_args in mock_span_fixture.set_attribute.call_args_list + ) + assert not called_with_dest_id + + +def test_trace_tool_call_with_empty_custom_metadata( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call handles empty custom_metadata gracefully.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + tool = mock_tool_fixture + tool.custom_metadata = {} + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + called_with_dest_id = any( + call_args[0][0] == GCP_MCP_SERVER_DESTINATION_ID + for call_args in mock_span_fixture.set_attribute.call_args_list + ) + assert not called_with_dest_id + + def test_trace_tool_call_with_scalar_response( monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture ): @@ -445,7 +516,7 @@ def test_trace_tool_call_with_scalar_response( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('gen_ai.tool.call.id', test_tool_call_id), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call('gcp.vertex.agent.event_id', test_event_id), @@ -505,7 +576,7 @@ def test_trace_tool_call_with_dict_response( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('gen_ai.tool.call.id', test_tool_call_id), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call('gcp.vertex.agent.event_id', test_event_id), @@ -815,7 +886,6 @@ async def test_generate_content_span( mock_span.set_attributes.assert_called_once_with({ GEN_AI_AGENT_NAME: invocation_context.agent.name, - GEN_AI_AGENT_VERSION: '', GEN_AI_CONVERSATION_ID: invocation_context.session.id, USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': 'event-123', @@ -1136,7 +1206,6 @@ async def test_generate_content_span_with_experimental_semconv( mock_span.set_attributes.assert_called_once_with({ GEN_AI_AGENT_NAME: invocation_context.agent.name, - GEN_AI_AGENT_VERSION: '', GEN_AI_CONVERSATION_ID: invocation_context.session.id, USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': 'event-123', @@ -1251,7 +1320,7 @@ def test_trace_tool_call_with_tool_execution_error( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('error.type', 'INTERNAL_SERVER_ERROR'), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call( diff --git a/tests/unittests/test_runners.py b/tests/unittests/test_runners.py index b0d5bfb20a..e3bcaeb2a4 100644 --- a/tests/unittests/test_runners.py +++ b/tests/unittests/test_runners.py @@ -139,6 +139,7 @@ class MockPlugin(BasePlugin): "Modified user message ON_USER_CALLBACK_MSG from MockPlugin" ) ON_EVENT_CALLBACK_MSG = "Modified event ON_EVENT_CALLBACK_MSG from MockPlugin" + ON_EVENT_CALLBACK_METADATA = {"plugin_key": "plugin_value"} def __init__(self): super().__init__(name="mock_plugin") @@ -184,6 +185,7 @@ async def on_event_callback( ], role=event.content.role, ), + custom_metadata=self.ON_EVENT_CALLBACK_METADATA, ) @@ -359,6 +361,60 @@ async def test_run_live_auto_create_session(): assert session is not None +@pytest.mark.asyncio +async def test_run_live_persists_event_callback_modifications(): + """run_live should persist the same event it streams after callback changes.""" + session_service = InMemorySessionService() + artifact_service = InMemoryArtifactService() + plugin = MockPlugin() + plugin.enable_event_callback = True + runner = Runner( + app_name="live_app", + agent=MockLiveAgent("live_agent"), + session_service=session_service, + artifact_service=artifact_service, + plugins=[plugin], + ) + await session_service.create_session( + app_name="live_app", user_id="user", session_id="live_session" + ) + + from google.adk.agents.live_request_queue import LiveRequestQueue + + live_queue = LiveRequestQueue() + agen = runner.run_live( + user_id="user", + session_id="live_session", + live_request_queue=live_queue, + ) + + streamed_event = await agen.__anext__() + await agen.aclose() + + session = await session_service.get_session( + app_name="live_app", user_id="user", session_id="live_session" + ) + persisted_event = session.events[0] + + assert streamed_event.author == "live_agent" + assert streamed_event.invocation_id + assert streamed_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert streamed_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + + assert persisted_event.id == streamed_event.id + assert persisted_event.timestamp == streamed_event.timestamp + assert persisted_event.author == streamed_event.author + assert persisted_event.invocation_id == streamed_event.invocation_id + assert persisted_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + persisted_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + + @pytest.mark.asyncio async def test_runner_allows_nested_agent_directories(tmp_path, monkeypatch): project_root = tmp_path / "workspace" @@ -747,6 +803,39 @@ async def test_runner_modifies_event_after_execution(self): assert modified_event_message == MockPlugin.ON_EVENT_CALLBACK_MSG + @pytest.mark.asyncio + async def test_runner_persists_event_callback_modifications(self): + """Event callback output should be persisted, not only streamed.""" + self.plugin.enable_event_callback = True + + events = await self.run_test() + streamed_event = events[0] + + session = await self.session_service.get_session( + app_name=TEST_APP_ID, user_id=TEST_USER_ID, session_id=TEST_SESSION_ID + ) + persisted_event = session.events[1] + + assert streamed_event.author == "test_agent" + assert streamed_event.invocation_id + assert streamed_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + streamed_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + + assert persisted_event.id == streamed_event.id + assert persisted_event.timestamp == streamed_event.timestamp + assert persisted_event.author == streamed_event.author + assert persisted_event.invocation_id == streamed_event.invocation_id + assert persisted_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + persisted_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + @pytest.mark.asyncio async def test_runner_close_calls_plugin_close(self): """Test that runner.close() calls plugin manager close.""" diff --git a/tests/unittests/tools/BUILD b/tests/unittests/tools/BUILD new file mode 100644 index 0000000000..e8e32e294a --- /dev/null +++ b/tests/unittests/tools/BUILD @@ -0,0 +1,20 @@ +load("//third_party/py/pytest:pytest_defs.bzl", "pytest_test") + +package( + default_applicable_licenses = ["//third_party/py/google/adk:package_license"], + default_visibility = ["//visibility:private"], +) + +pytest_test( + name = "test_skill_toolset", + srcs = ["test_skill_toolset.py"], + args = [ + "-p", + "pytest_asyncio.plugin", + ], + deps = [ + "//third_party/py/google/adk", + "//third_party/py/google/genai", + "//third_party/py/pytest_asyncio", + ], +) diff --git a/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py b/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py new file mode 100644 index 0000000000..cc933624b7 --- /dev/null +++ b/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py @@ -0,0 +1,33 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import warnings + +from google.adk.integrations.secret_manager import secret_client +import pytest + + +def test_secret_client_module_deprecation(): + """Verifies that importing from clients.secret_client triggers a warning.""" + module_to_test = "google.adk.tools.apihub_tool.clients.secret_client" + if module_to_test in sys.modules: + sys.modules.pop(module_to_test) + + with pytest.warns( + DeprecationWarning, match="google.adk.integrations.secret_manager" + ): + from google.adk.tools.apihub_tool.clients.secret_client import SecretManagerClient as deprecated_secret_client + + assert deprecated_secret_client is secret_client.SecretManagerClient diff --git a/tests/unittests/tools/bigquery/test_bigquery_client.py b/tests/unittests/tools/bigquery/test_bigquery_client.py index d8d5e726ee..8720bf3dbe 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_client.py +++ b/tests/unittests/tools/bigquery/test_bigquery_client.py @@ -21,6 +21,7 @@ from google.adk.tools.bigquery.client import DP_USER_AGENT from google.adk.tools.bigquery.client import get_bigquery_client from google.adk.tools.bigquery.client import get_dataplex_catalog_client +from google.adk.utils._telemetry_context import _is_visual_builder from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError @@ -193,6 +194,33 @@ def test_bigquery_client_user_agent_custom_list(): assert expected_user_agents.issubset(actual_user_agents) +def test_bigquery_client_user_agent_visual_builder(): + """Test BigQuery client user agent when visual builder flag is set.""" + token = _is_visual_builder.set(True) + try: + with mock.patch.object( + bigquery_client, "Connection", autospec=True + ) as mock_connection: + # Trigger the BigQuery client creation + get_bigquery_client( + project="test-gcp-project", + credentials=mock.create_autospec(Credentials, instance=True), + ) + + # Verify that the tracking user agent was set + client_info_arg = mock_connection.call_args[1].get("client_info") + assert client_info_arg is not None + expected_user_agents = { + "adk-bigquery-tool", + f"google-adk/{google.adk.__version__}", + "google-adk-visual-builder", + } + actual_user_agents = set(client_info_arg.user_agent.split()) + assert expected_user_agents.issubset(actual_user_agents) + finally: + _is_visual_builder.reset(token) + + def test_bigquery_client_location_custom(): """Test BigQuery client custom location.""" # Trigger the BigQuery client creation diff --git a/tests/unittests/tools/bigquery/test_bigquery_credentials.py b/tests/unittests/tools/bigquery/test_bigquery_credentials.py index e20662924b..f0c188d0a4 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/tools/bigquery/test_bigquery_credentials.py @@ -47,7 +47,7 @@ def test_valid_credentials_object_auth_credentials(self): assert config.client_secret is None assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_valid_credentials_object_oauth2_credentials(self): @@ -90,7 +90,7 @@ def test_valid_client_id_secret_pair_default_scope(self): assert config.client_secret == "test_client_secret" assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_valid_client_id_secret_pair_w_scope(self): @@ -135,7 +135,7 @@ def test_valid_client_id_secret_pair_w_empty_scope(self): assert config.client_secret == "test_client_secret" assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_missing_client_secret_raises_error(self): diff --git a/tests/unittests/tools/bigquery/test_bigquery_skill.py b/tests/unittests/tools/bigquery/test_bigquery_skill.py new file mode 100644 index 0000000000..0ec7a9bbef --- /dev/null +++ b/tests/unittests/tools/bigquery/test_bigquery_skill.py @@ -0,0 +1,116 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the pre-packaged BigQuery skill.""" + +from __future__ import annotations + +import re + +from google.adk.skills._utils import _validate_skill_dir +from google.adk.tools.bigquery.bigquery_skill import _SKILL_DIR +from google.adk.tools.bigquery.bigquery_skill import get_bigquery_skill +from google.adk.tools.skill_toolset import ListSkillsTool +from google.adk.tools.skill_toolset import LoadSkillResourceTool +from google.adk.tools.skill_toolset import LoadSkillTool +from google.adk.tools.skill_toolset import RunSkillScriptTool +from google.adk.tools.skill_toolset import SkillToolset +import pytest + + +def test_get_bigquery_skill_returns_valid_skill(): + """Verify get_bigquery_skill returns a Skill with expected fields.""" + skill = get_bigquery_skill() + + assert skill.name == "bigquery-ai-ml" + assert skill.description + assert len(skill.description) > 0 + assert skill.instructions + assert len(skill.instructions) > 0 + + +def test_skill_name_matches_spec(): + """Verify skill name is kebab-case and matches directory name.""" + skill = get_bigquery_skill() + + # Name must be kebab-case + assert re.fullmatch(r"[a-z][a-z0-9]*(-[a-z0-9]+)*", skill.name) + + # Name must match the directory name + assert skill.name == _SKILL_DIR.name + + +def test_skill_has_expected_references(): + """Verify all expected reference files are present and non-empty.""" + skill = get_bigquery_skill() + + expected_refs = { + "bigquery_ai_classify.md", + "bigquery_ai_detect_anomalies.md", + "bigquery_ai_forecast.md", + "bigquery_ai_generate.md", + "bigquery_ai_generate_bool.md", + "bigquery_ai_generate_double.md", + "bigquery_ai_generate_int.md", + "bigquery_ai_if.md", + "bigquery_ai_score.md", + "bigquery_ai_search.md", + "bigquery_ai_similarity.md", + } + actual_refs = set(skill.resources.list_references()) + + assert expected_refs == actual_refs + + for ref_name in expected_refs: + content = skill.resources.get_reference(ref_name) + assert content is not None, f"Reference {ref_name} returned None" + assert len(content) > 0, f"Reference {ref_name} is empty" + + +@pytest.mark.asyncio +async def test_skill_works_with_skill_toolset(): + """Verify the skill integrates with SkillToolset and produces 4 tools.""" + skill = get_bigquery_skill() + toolset = SkillToolset(skills=[skill]) + + tools = await toolset.get_tools() + assert len(tools) == 4 + + tool_types = {type(t) for t in tools} + expected_types = { + ListSkillsTool, + LoadSkillTool, + LoadSkillResourceTool, + RunSkillScriptTool, + } + assert tool_types == expected_types + + +def test_skill_passes_validation(): + """Verify the skill directory passes ADK's built-in validator.""" + problems = _validate_skill_dir(_SKILL_DIR) + assert not problems, f"Validation problems: {problems}" + + +def test_skill_frontmatter_has_license(): + """Verify the skill includes a license field.""" + skill = get_bigquery_skill() + assert skill.frontmatter.license == "Apache-2.0" + + +def test_skill_frontmatter_has_metadata(): + """Verify the skill includes author and version metadata.""" + skill = get_bigquery_skill() + assert "author" in skill.frontmatter.metadata + assert "version" in skill.frontmatter.metadata diff --git a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py index 705f3d87b8..60a41eb440 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py @@ -27,14 +27,6 @@ def reset_warned_features(): _WARNED_FEATURES.clear() -def test_bigquery_tool_config_experimental_warning(): - """Test BigQueryToolConfig experimental warning.""" - with warnings.catch_warnings(record=True) as w: - BigQueryToolConfig() - assert len(w) == 1 - assert "BIG_QUERY_TOOL_CONFIG is enabled." in str(w[0].message) - - def test_bigquery_tool_config_invalid_property(): """Test BigQueryToolConfig raises exception when setting invalid property.""" with pytest.raises( diff --git a/tests/unittests/tools/computer_use/test_computer_use_toolset.py b/tests/unittests/tools/computer_use/test_computer_use_toolset.py index d553d37262..14fb319b97 100644 --- a/tests/unittests/tools/computer_use/test_computer_use_toolset.py +++ b/tests/unittests/tools/computer_use/test_computer_use_toolset.py @@ -238,8 +238,8 @@ async def test_get_tools_creates_tools_with_correct_methods( assert click_tool is not None - # The tool's function should be bound to the mock computer instance - assert click_tool.func.__self__ == mock_computer + # The tool's function should have the correct name (wrapped method) + assert click_tool.func.__name__ == "click_at" @pytest.mark.asyncio async def test_get_tools_handles_custom_screen_size(self, mock_computer): @@ -304,9 +304,11 @@ async def test_computer_method_binding(self, toolset, mock_computer): """Test that tools are properly bound to the computer instance.""" tools = await toolset.get_tools() - # All tools should be bound to the mock computer + # All tools should have wrapped functions with correct names for tool in tools: - assert tool.func.__self__ == mock_computer + # Wrapped functions preserve the original method name via functools.wraps + assert callable(tool.func) + assert not tool.func.__name__.startswith("_") @pytest.mark.asyncio async def test_toolset_handles_computer_initialization_failure( diff --git a/tests/unittests/tools/environment_simulation/__init__.py b/tests/unittests/tools/environment_simulation/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/tools/environment_simulation/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py similarity index 77% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py index 104b71d3fb..efa9538807 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py @@ -6,7 +6,10 @@ # # http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law of a-specific language governing permissions and +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and # limitations under the License. import logging @@ -14,31 +17,31 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import InjectedError -from google.adk.tools.agent_simulator.agent_simulator_config import InjectionConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import InjectedError +from google.adk.tools.environment_simulation.environment_simulation_config import InjectionConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine from google.genai import types as genai_types import pytest @patch( - "google.adk.tools.agent_simulator.agent_simulator_engine.ToolConnectionAnalyzer" + "google.adk.tools.environment_simulation.environment_simulation_engine.ToolConnectionAnalyzer" ) @patch( - "google.adk.tools.agent_simulator.agent_simulator_engine._create_mock_strategy" + "google.adk.tools.environment_simulation.environment_simulation_engine._create_mock_strategy" ) @pytest.mark.asyncio -class TestAgentSimulatorEngineSimulate: - """Test cases for the simulate method of AgentSimulatorEngine.""" +class TestEnvironmentSimulationEngineSimulate: + """Test cases for the simulate method of EnvironmentSimulationEngine.""" async def test_simulate_no_op_for_unconfigured_tool( self, mock_create_strategy, mock_analyzer ): """Test that simulate returns None for a tool not in the config.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="configured_tool", @@ -48,7 +51,7 @@ async def test_simulate_no_op_for_unconfigured_tool( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "unconfigured_tool" result = await engine.simulate(mock_tool, {}, MagicMock()) @@ -58,7 +61,7 @@ async def test_injection_with_matching_args( self, mock_create_strategy, mock_analyzer ): """Test that an injection is applied when match_args match.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -73,7 +76,7 @@ async def test_injection_with_matching_args( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" result = await engine.simulate(mock_tool, {"param": "value"}, MagicMock()) @@ -86,7 +89,7 @@ async def test_injection_not_applied_with_mismatched_args( mock_strategy_instance = MagicMock() mock_strategy_instance.mock = AsyncMock(return_value={"mocked": True}) mock_create_strategy.return_value = mock_strategy_instance - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -102,7 +105,7 @@ async def test_injection_not_applied_with_mismatched_args( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" result = await engine.simulate( @@ -120,7 +123,7 @@ async def test_no_op_when_no_injection_hit_and_unspecified_strategy( self, mock_create_strategy, mock_analyzer, caplog ): """Test for no-op and warning when no injection hits and mock strategy is unspecified.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -136,12 +139,14 @@ async def test_no_op_when_no_injection_hit_and_unspecified_strategy( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" - caplog.set_level(logging.WARNING, logger="agent_simulator_logger") - with caplog.at_level(logging.WARNING, logger="agent_simulator_logger"): + caplog.set_level(logging.WARNING, logger="environment_simulation_logger") + with caplog.at_level( + logging.WARNING, logger="environment_simulation_logger" + ): result = await engine.simulate( mock_tool, {"param": "different_value"}, MagicMock() ) @@ -161,7 +166,7 @@ async def test_injection_with_random_seed_is_deterministic( mock_strategy_instance = MagicMock() mock_strategy_instance.mock = AsyncMock(return_value={"mocked": True}) mock_create_strategy.return_value = mock_strategy_instance - config_mocked = AgentSimulatorConfig( + config_mocked = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -178,7 +183,7 @@ async def test_injection_with_random_seed_is_deterministic( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine_mocked = AgentSimulatorEngine(config_mocked) + engine_mocked = EnvironmentSimulationEngine(config_mocked) mock_tool = MagicMock() mock_tool.name = "test_tool" @@ -195,7 +200,7 @@ async def test_injection_with_random_seed_is_deterministic( mock_strategy_instance.mock.reset_mock() # With seed=100, random.random() is < 0.5, so this WILL be injected. - config_injected = AgentSimulatorConfig( + config_injected = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -212,7 +217,7 @@ async def test_injection_with_random_seed_is_deterministic( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine_injected = AgentSimulatorEngine(config_injected) + engine_injected = EnvironmentSimulationEngine(config_injected) result2 = await engine_injected.simulate(mock_tool, {}, MagicMock()) assert result2 == {"injected": True} mock_create_strategy.assert_not_called() diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py similarity index 60% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py index a247564484..159f6cc9a1 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py @@ -16,25 +16,25 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator import AgentSimulatorFactory -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin +from google.adk.tools.environment_simulation import EnvironmentSimulationFactory +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin import pytest @pytest.mark.asyncio @patch( - "google.adk.tools.agent_simulator.agent_simulator_factory.AgentSimulatorEngine" + "google.adk.tools.environment_simulation.environment_simulation_factory.EnvironmentSimulationEngine" ) -class TestAgentSimulatorFactory: - """Test cases for the AgentSimulator factory class.""" +class TestEnvironmentSimulationFactory: + """Test cases for the EnvironmentSimulation factory class.""" @pytest.fixture def mock_config(self): - """Fixture for a basic AgentSimulatorConfig.""" - return AgentSimulatorConfig( + """Fixture for a basic EnvironmentSimulationConfig.""" + return EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -49,7 +49,7 @@ async def test_create_callback(self, mock_engine_class, mock_config): mock_engine_instance.simulate = AsyncMock(return_value=None) mock_engine_class.return_value = mock_engine_instance - callback = AgentSimulatorFactory.create_callback(mock_config) + callback = EnvironmentSimulationFactory.create_callback(mock_config) assert callable(callback) await callback(MagicMock(), {}, MagicMock()) @@ -57,13 +57,13 @@ async def test_create_callback(self, mock_engine_class, mock_config): mock_engine_instance.simulate.assert_awaited_once() @patch( - "google.adk.tools.agent_simulator.agent_simulator_factory.AgentSimulatorPlugin" + "google.adk.tools.environment_simulation.environment_simulation_factory.EnvironmentSimulationPlugin" ) def test_create_plugin( self, mock_plugin_class, mock_engine_class, mock_config ): - """Test that create_plugin returns a valid AgentSimulatorPlugin instance.""" - plugin = AgentSimulatorFactory.create_plugin(mock_config) + """Test that create_plugin returns a valid EnvironmentSimulationPlugin instance.""" + plugin = EnvironmentSimulationFactory.create_plugin(mock_config) mock_engine_class.assert_called_once_with(mock_config) mock_plugin_class.assert_called_once_with(mock_engine_class.return_value) assert plugin == mock_plugin_class.return_value diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py similarity index 79% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py index bee11ce556..0611705ce6 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py @@ -16,24 +16,24 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin import pytest @pytest.mark.asyncio -class TestAgentSimulatorPlugin: - """Test cases for the AgentSimulatorPlugin.""" +class TestEnvironmentSimulationPlugin: + """Test cases for the EnvironmentSimulationPlugin.""" @pytest.fixture def mock_simulator_engine(self): - """Fixture for a mock AgentSimulatorEngine.""" + """Fixture for a mock EnvironmentSimulationEngine.""" engine = MagicMock() engine.simulate = AsyncMock() return engine async def test_before_tool_callback(self, mock_simulator_engine): """Test that the before_tool_callback calls the engine's simulate method.""" - plugin = AgentSimulatorPlugin(mock_simulator_engine) + plugin = EnvironmentSimulationPlugin(mock_simulator_engine) mock_tool = MagicMock() mock_args = {} diff --git a/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py b/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py index 327df114a8..9b1a8f6b7a 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py @@ -134,6 +134,49 @@ def test_init_with_sse_connection_params(self): assert manager._connection_params == sse_params + @patch("google.adk.tools.mcp_tool.mcp_session_manager.sse_client") + def test_init_with_sse_custom_httpx_factory(self, mock_sse_client): + """Test that sse_client is called with custom httpx_client_factory.""" + custom_httpx_factory = Mock() + + sse_params = SseConnectionParams( + url="https://example.com/mcp", + timeout=10.0, + httpx_client_factory=custom_httpx_factory, + ) + manager = MCPSessionManager(sse_params) + + manager._create_client() + + mock_sse_client.assert_called_once_with( + url="https://example.com/mcp", + headers=None, + timeout=10.0, + sse_read_timeout=300.0, + httpx_client_factory=custom_httpx_factory, + ) + + @patch("google.adk.tools.mcp_tool.mcp_session_manager.sse_client") + def test_init_with_sse_default_httpx_factory(self, mock_sse_client): + """Test that sse_client is called with default httpx_client_factory.""" + sse_params = SseConnectionParams( + url="https://example.com/mcp", + timeout=10.0, + ) + manager = MCPSessionManager(sse_params) + + manager._create_client() + + mock_sse_client.assert_called_once_with( + url="https://example.com/mcp", + headers=None, + timeout=10.0, + sse_read_timeout=300.0, + httpx_client_factory=SseConnectionParams.model_fields[ + "httpx_client_factory" + ].get_default(), + ) + def test_init_with_streamable_http_params(self): """Test initialization with StreamableHTTPConnectionParams.""" http_params = StreamableHTTPConnectionParams( diff --git a/tests/unittests/tools/mcp_tool/test_mcp_tool.py b/tests/unittests/tools/mcp_tool/test_mcp_tool.py index d6e39b94f3..7795fda0f4 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_tool.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_tool.py @@ -14,6 +14,7 @@ import inspect from unittest.mock import AsyncMock +from unittest.mock import create_autospec from unittest.mock import Mock from unittest.mock import patch @@ -415,6 +416,44 @@ async def test_get_headers_http_basic(self): expected_encoded = base64.b64encode(b"user:pass").decode() assert headers == {"Authorization": f"Basic {expected_encoded}"} + @pytest.mark.asyncio + @pytest.mark.parametrize( + "token, expected_headers", + [ + ( + "some-token", + { + "Authorization": "some-scheme some-token", + "X-Custom-Header": "custom-value", + }, + ), + ( + None, + {"X-Custom-Header": "custom-value"}, + ), + ], + ) + async def test_get_headers_http_adds_additional_headers( + self, token, expected_headers + ): + tool = MCPTool( + mcp_tool=self.mock_mcp_tool, + mcp_session_manager=self.mock_session_manager, + ) + http_auth = HttpAuth( + scheme="some-scheme", + credentials=HttpCredentials(token=token), + additional_headers={"X-Custom-Header": "custom-value"}, + ) + credential = AuthCredential( + auth_type=AuthCredentialTypes.HTTP, http=http_auth + ) + + tool_context = create_autospec(ToolContext, instance=True) + headers = await tool._get_headers(tool_context, credential) + + assert headers == expected_headers + @pytest.mark.asyncio async def test_get_headers_api_key_with_valid_header_scheme(self): """Test header generation for API Key credentials with header-based auth scheme.""" diff --git a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py index d510abc7c1..ae5c37473e 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py @@ -15,16 +15,19 @@ import asyncio import base64 from io import StringIO -import json +import pickle import sys -import unittest from unittest.mock import AsyncMock from unittest.mock import MagicMock from unittest.mock import Mock -from unittest.mock import patch +from fastapi.openapi.models import OAuth2 from google.adk.agents.readonly_context import ReadonlyContext from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_credential import HttpAuth +from google.adk.auth.auth_credential import HttpCredentials +from google.adk.auth.auth_tool import AuthConfig from google.adk.tools.load_mcp_resource_tool import LoadMcpResourceTool from google.adk.tools.mcp_tool.mcp_session_manager import MCPSessionManager from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams @@ -612,3 +615,67 @@ async def test_read_resource(self, name, mime_type, content, encoding): assert result == contents self.mock_session.list_resources.assert_called_once() self.mock_session.read_resource.assert_called_once_with(uri=uri) + + @pytest.mark.asyncio + async def test_sampling_callback_invoked(self): + + called = {"value": False} + + async def mock_sampling_handler(messages, params=None, context=None): + called["value"] = True + + assert isinstance(messages, list) + assert messages[0]["role"] == "user" + + return { + "model": "test-model", + "role": "assistant", + "content": {"type": "text", "text": "sampling response"}, + "stopReason": "endTurn", + } + + toolset = McpToolset( + connection_params=StreamableHTTPConnectionParams( + url="http://localhost:9999", + timeout=10, + ), + sampling_callback=mock_sampling_handler, + ) + + messages = [{"role": "user", "content": {"type": "text", "text": "hello"}}] + + result = await toolset._sampling_callback(messages) + + assert called["value"] is True + assert result["role"] == "assistant" + assert result["content"]["text"] == "sampling response" + + @pytest.mark.asyncio + async def test_get_auth_headers_includes_additional_headers(self): + credential = AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + scheme="bearer", + credentials=HttpCredentials(token="token"), + additional_headers={"X-API-Key": "secret"}, + ), + ) + auth_config = AuthConfig( + auth_scheme=OAuth2(flows={}), + raw_auth_credential=credential, + ) + auth_config.exchanged_auth_credential = credential + toolset = McpToolset(connection_params=self.mock_stdio_params) + toolset._auth_config = auth_config + + headers = toolset._get_auth_headers() + + assert headers["Authorization"] == "Bearer token" + assert headers["X-API-Key"] == "secret" + + def test_pickle_mcp_toolset(self): + toolset = McpToolset(connection_params=self.mock_stdio_params) + pickled = pickle.dumps(toolset) + unpickled = pickle.loads(pickled) + assert unpickled._connection_params == self.mock_stdio_params + assert unpickled._errlog == sys.stderr diff --git a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py index 1131181acd..64c8b37200 100644 --- a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +++ b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py @@ -1088,6 +1088,48 @@ async def test_call_with_verify_options( else: assert call_kwargs["verify"] == expected_verify_in_call + async def test_request_uses_no_default_timeout( + self, + mock_tool_context, + sample_endpoint, + sample_operation, + sample_auth_scheme, + sample_auth_credential, + ): + """Test that _request creates AsyncClient with timeout=None. + + httpx defaults to a 5-second timeout, which is too short for many + real-world API calls. Verify that we explicitly disable the timeout + to match the previous requests-library behavior (no timeout). + Regression test for https://github.com/google/adk-python/issues/4431. + """ + mock_response = mock.create_autospec(requests.Response, instance=True) + mock_response.json.return_value = {"result": "success"} + mock_response.configure_mock(status_code=200) + + mock_client = mock.create_autospec( + httpx.AsyncClient, instance=True, spec_set=True + ) + mock_client.request = AsyncMock(return_value=mock_response) + + tool = RestApiTool( + name="test_tool", + description="Test Tool", + endpoint=sample_endpoint, + operation=sample_operation, + auth_scheme=sample_auth_scheme, + auth_credential=sample_auth_credential, + ) + + with patch.object( + httpx, "AsyncClient", return_value=mock_client, autospec=True + ) as mock_async_client: + await tool.call(args={}, tool_context=mock_tool_context) + + assert mock_async_client.called + _, call_kwargs = mock_async_client.call_args + assert call_kwargs["timeout"] is None + async def test_call_with_configure_verify( self, mock_tool_context, diff --git a/tests/unittests/tools/retrieval/test_files_retrieval.py b/tests/unittests/tools/retrieval/test_files_retrieval.py index 3244e81746..5723b521fd 100644 --- a/tests/unittests/tools/retrieval/test_files_retrieval.py +++ b/tests/unittests/tools/retrieval/test_files_retrieval.py @@ -122,7 +122,8 @@ def test_get_default_embedding_model_success(self): result = _get_default_embedding_model() mock_module.GoogleGenAIEmbedding.assert_called_once_with( - model_name="text-embedding-004" + model_name="gemini-embedding-2-preview", + embed_batch_size=1, ) assert result == mock_embedding_instance diff --git a/tests/unittests/tools/spanner/test_admin_tool.py b/tests/unittests/tools/spanner/test_admin_tool.py new file mode 100644 index 0000000000..288cd8338e --- /dev/null +++ b/tests/unittests/tools/spanner/test_admin_tool.py @@ -0,0 +1,384 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from unittest.mock import create_autospec +from unittest.mock import patch + +from google.adk.tools.spanner import admin_tool +from google.api_core.operation_async import AsyncOperation +from google.auth.credentials import Credentials +from google.cloud import spanner_admin_database_v1 +from google.cloud import spanner_admin_instance_v1 +import pytest + + +class AsyncListIterator: + """Asynchronous iterator for a list.""" + + def __init__(self, list_): + self._iter = iter(list_) + + def __aiter__(self): + return self + + async def __anext__(self): + try: + return next(self._iter) + except StopIteration as exc: + raise StopAsyncIteration from exc + + +@pytest.fixture +def mock_credentials(): + return create_autospec(Credentials, instance=True) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instances_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the list_instances function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance1 = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance1.name = "projects/test-project/instances/test-instance-1" + mock_instance2 = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance2.name = "projects/test-project/instances/test-instance-2" + mock_instance_admin_client.list_instances.return_value = AsyncListIterator([ + mock_instance1, + mock_instance2, + ]) + + result = await admin_tool.list_instances("test-project", mock_credentials) + + assert result == { + "status": "SUCCESS", + "results": ["test-instance-1", "test-instance-2"], + } + mock_instance_admin_client.list_instances.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instances_error( + mock_instance_admin_client_cls, mock_credentials +): + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.list_instances.side_effect = Exception( + "test error" + ) + result = await admin_tool.list_instances("test-project", mock_credentials) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance.display_name = "Test Instance" + mock_instance.config = ( + "projects/test-project/instanceConfigs/regional-us-central1" + ) + mock_instance.node_count = 1 + mock_instance.processing_units = 1000 + mock_instance.labels = {"env": "test"} + mock_instance_admin_client.get_instance.return_value = mock_instance + + result = await admin_tool.get_instance( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + + assert result == { + "status": "SUCCESS", + "results": { + "instance_id": "test-instance", + "display_name": "Test Instance", + "config": ( + "projects/test-project/instanceConfigs/regional-us-central1" + ), + "node_count": 1, + "processing_units": 1000, + "labels": {"env": "test"}, + }, + } + mock_instance_admin_client.instance_path.assert_called_once_with( + "test-project", "test-instance" + ) + mock_instance_admin_client.get_instance.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_error( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance function in admin_tool when an error occurs.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.get_instance.side_effect = Exception("test error") + result = await admin_tool.get_instance( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instance_configs_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the list_instance_configs function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.common_project_path.return_value = ( + "projects/test-project" + ) + mock_config1 = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config1.name = "projects/test-project/instanceConfigs/config-1" + mock_config2 = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config2.name = "projects/test-project/instanceConfigs/config-2" + mock_instance_admin_client.list_instance_configs.return_value = ( + AsyncListIterator([ + mock_config1, + mock_config2, + ]) + ) + + result = await admin_tool.list_instance_configs( + "test-project", mock_credentials + ) + + assert result == {"status": "SUCCESS", "results": ["config-1", "config-2"]} + mock_instance_admin_client.common_project_path.assert_called_once_with( + "test-project" + ) + mock_instance_admin_client.list_instance_configs.assert_called_once_with( + parent="projects/test-project" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_config_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance_config function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.instance_config_path.return_value = ( + "projects/test-project/instanceConfigs/config-1" + ) + mock_config = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config.name = "projects/test-project/instanceConfigs/config-1" + mock_config.display_name = "Config 1" + mock_config.labels = {"env": "test"} + mock_replica = create_autospec( + spanner_admin_instance_v1.types.ReplicaInfo, instance=True + ) + mock_replica.location = "us-central1" + mock_replica.type = 1 # READ_WRITE + mock_replica.default_leader_location = True + mock_config.replicas = [mock_replica] + mock_instance_admin_client.get_instance_config.return_value = mock_config + + result = await admin_tool.get_instance_config( + project_id="test-project", + config_id="config-1", + credentials=mock_credentials, + ) + + assert result == { + "status": "SUCCESS", + "results": { + "name": "projects/test-project/instanceConfigs/config-1", + "display_name": "Config 1", + "replicas": [{ + "location": "us-central1", + "type": "READ_WRITE", + "default_leader_location": True, + }], + "labels": {"env": "test"}, + }, + } + mock_instance_admin_client.instance_config_path.assert_called_once_with( + "test-project", "config-1" + ) + mock_instance_admin_client.get_instance_config.assert_called_once_with( + name="projects/test-project/instanceConfigs/config-1" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_config_error( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance_config function when an error occurs.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.get_instance_config.side_effect = Exception( + "test error" + ) + result = await admin_tool.get_instance_config( + project_id="test-project", + config_id="config-1", + credentials=mock_credentials, + ) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_create_instance_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the create_instance function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.instance_config_path.return_value = ( + "projects/test-project/instanceConfigs/config-1" + ) + mock_instance_admin_client.common_project_path.return_value = ( + "projects/test-project" + ) + mock_op = create_autospec(AsyncOperation, instance=True) + mock_instance_admin_client.create_instance.return_value = mock_op + result = await admin_tool.create_instance( + project_id="test-project", + instance_id="test-instance", + config_id="config-1", + display_name="Test Instance", + credentials=mock_credentials, + ) + assert result == { + "status": "SUCCESS", + "results": "Instance test-instance created successfully.", + } + mock_instance_admin_client.create_instance.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.DatabaseAdminAsyncClient", + autospec=True, +) +async def test_list_databases_success( + mock_db_admin_client_cls, mock_credentials +): + """Tests the list_databases function in admin_tool.""" + mock_db_admin_client = mock_db_admin_client_cls.return_value + mock_db_admin_client.instance_path.return_value = ( + "projects/test-project/instances/test-instance" + ) + mock_db1 = create_autospec( + spanner_admin_database_v1.types.Database, instance=True + ) + mock_db1.name = "projects/test-project/instances/test-instance/databases/db-1" + mock_db2 = create_autospec( + spanner_admin_database_v1.types.Database, instance=True + ) + mock_db2.name = "projects/test-project/instances/test-instance/databases/db-2" + mock_db_admin_client.list_databases.return_value = AsyncListIterator([ + mock_db1, + mock_db2, + ]) + + result = await admin_tool.list_databases( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + + assert result == {"status": "SUCCESS", "results": ["db-1", "db-2"]} + mock_db_admin_client.instance_path.assert_called_once_with( + "test-project", "test-instance" + ) + mock_db_admin_client.list_databases.assert_called_once_with( + parent="projects/test-project/instances/test-instance" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.DatabaseAdminAsyncClient", + autospec=True, +) +async def test_create_database_success( + mock_db_admin_client_cls, mock_credentials +): + """Tests the create_database function in admin_tool.""" + mock_db_admin_client = mock_db_admin_client_cls.return_value + mock_db_admin_client.instance_path.return_value = ( + "projects/test-project/instances/test-instance" + ) + mock_op = create_autospec(AsyncOperation, instance=True) + mock_db_admin_client.create_database.return_value = mock_op + result = await admin_tool.create_database( + project_id="test-project", + instance_id="test-instance", + database_id="db-1", + credentials=mock_credentials, + ) + assert result == { + "status": "SUCCESS", + } + mock_db_admin_client.create_database.assert_called_once() diff --git a/tests/unittests/tools/spanner/test_admin_toolset.py b/tests/unittests/tools/spanner/test_admin_toolset.py new file mode 100644 index 0000000000..d49c9c3a8d --- /dev/null +++ b/tests/unittests/tools/spanner/test_admin_toolset.py @@ -0,0 +1,91 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from google.adk.tools.google_tool import GoogleTool +from google.adk.tools.spanner.admin_toolset import SpannerAdminToolset +from google.adk.tools.spanner.settings import SpannerToolSettings +from google.adk.tools.spanner.spanner_credentials import SpannerCredentialsConfig +import pytest + + +@pytest.mark.asyncio +async def test_spanner_toolset_tools_default(): + """Test Admin Spanner toolset. + + This test verifies the behavior of the Spanner admin toolset when no filter is + specified. + """ + credentials_config = SpannerCredentialsConfig( + client_id="abc", client_secret="def" + ) + toolset = SpannerAdminToolset(credentials_config=credentials_config) + assert isinstance(toolset._tool_settings, SpannerToolSettings) # pylint: disable=protected-access + assert toolset._tool_settings.__dict__ == SpannerToolSettings().__dict__ # pylint: disable=protected-access + tools = await toolset.get_tools() + assert tools is not None + + assert len(tools) == 7 + assert all([isinstance(tool, GoogleTool) for tool in tools]) + + expected_tool_names = set([ + "list_instances", + "get_instance", + "list_databases", + "create_instance", + "create_database", + "list_instance_configs", + "get_instance_config", + ]) + actual_tool_names = set([tool.name for tool in tools]) + assert actual_tool_names == expected_tool_names + + +@pytest.mark.parametrize( + "selected_tools", + [ + pytest.param( + ["list_instances"], + id="list-instances", + ) + ], +) +@pytest.mark.asyncio +async def test_spanner_admin_toolset_selective(selected_tools): + """Test selective Admin Spanner toolset. + + This test verifies the behavior of the Spanner admin toolset when a filter is + specified. + + Args: + selected_tools: A list of tool names to filter. + """ + credentials_config = SpannerCredentialsConfig( + client_id="abc", client_secret="def" + ) + toolset = SpannerAdminToolset( + credentials_config=credentials_config, + tool_filter=selected_tools, + spanner_tool_settings=SpannerToolSettings(), + ) + tools = await toolset.get_tools() + assert tools is not None + + assert len(tools) == len(selected_tools) + assert all([isinstance(tool, GoogleTool) for tool in tools]) + + expected_tool_names = set(selected_tools) + actual_tool_names = set([tool.name for tool in tools]) + assert actual_tool_names == expected_tool_names diff --git a/tests/unittests/tools/spanner/test_spanner_tool_settings.py b/tests/unittests/tools/spanner/test_spanner_tool_settings.py index df71dba247..f2f9e22d4d 100644 --- a/tests/unittests/tools/spanner/test_spanner_tool_settings.py +++ b/tests/unittests/tools/spanner/test_spanner_tool_settings.py @@ -83,9 +83,9 @@ def test_spanner_vector_store_settings_invalid_vector_length(): @pytest.mark.parametrize( - "settings_args, expected_rows, expected_mode", + "settings_args, expected_rows, expected_mode, expected_role", [ - ({}, 50, QueryResultMode.DEFAULT), + ({}, 50, QueryResultMode.DEFAULT, None), ( { "capabilities": [Capabilities.DATA_READ], @@ -94,12 +94,22 @@ def test_spanner_vector_store_settings_invalid_vector_length(): }, 100, QueryResultMode.DICT_LIST, + None, + ), + ( + {"database_role": "test-role"}, + 50, + QueryResultMode.DEFAULT, + "test-role", ), ], ) -def test_spanner_tool_settings(settings_args, expected_rows, expected_mode): +def test_spanner_tool_settings( + settings_args, expected_rows, expected_mode, expected_role +): """Test SpannerToolSettings with different values.""" settings = SpannerToolSettings(**settings_args) assert settings.capabilities == [Capabilities.DATA_READ] assert settings.max_executed_query_result_rows == expected_rows assert settings.query_result_mode == expected_mode + assert settings.database_role == expected_role diff --git a/tests/unittests/tools/spanner/test_utils.py b/tests/unittests/tools/spanner/test_utils.py index fe8d7db4a3..75730fbc10 100644 --- a/tests/unittests/tools/spanner/test_utils.py +++ b/tests/unittests/tools/spanner/test_utils.py @@ -411,3 +411,64 @@ def test_create_vector_search_index_fails( vector_store = spanner_utils.SpannerVectorStore(spanner_tool_settings) with pytest.raises(RuntimeError, match="DDL failed"): vector_store.create_vector_search_index() + + +@mock.patch.object(spanner_utils.client, "get_spanner_client", autospec=True) +def test_execute_sql_with_database_role(mock_get_spanner_client): + """Test that execute_sql passes database_role to instance.database.""" + mock_spanner_client = mock.MagicMock() + mock_instance = mock.MagicMock() + mock_database = mock.MagicMock() + mock_snapshot = mock.MagicMock() + + mock_snapshot.execute_sql.return_value = iter([["row1"]]) + mock_database.snapshot.return_value.__enter__.return_value = mock_snapshot + mock_database.database_dialect = DatabaseDialect.GOOGLE_STANDARD_SQL + mock_instance.database.return_value = mock_database + mock_spanner_client.instance.return_value = mock_instance + mock_get_spanner_client.return_value = mock_spanner_client + + database_role = "test-role" + settings = SpannerToolSettings(database_role=database_role) + + spanner_utils.execute_sql( + project_id="test-project", + instance_id="test-instance", + database_id="test-database", + query="SELECT 1", + credentials=mock.Mock(), + settings=settings, + tool_context=mock.Mock(), + ) + + mock_instance.database.assert_called_once_with( + "test-database", database_role=database_role + ) + + +@mock.patch.object(spanner_utils.client, "get_spanner_client", autospec=True) +def test_spanner_vector_store_with_database_role( + mock_get_spanner_client, vector_store_settings +): + """Test that SpannerVectorStore passes database_role to instance.database.""" + mock_spanner_client = mock.MagicMock() + mock_instance = mock.MagicMock() + mock_database = mock.MagicMock() + + mock_instance.database.return_value = mock_database + mock_instance.exists.return_value = True + mock_database.exists.return_value = True + mock_spanner_client.instance.return_value = mock_instance + mock_get_spanner_client.return_value = mock_spanner_client + mock_spanner_client._client_info = mock.Mock(user_agent="test-agent") + + database_role = "test-role" + settings = SpannerToolSettings( + database_role=database_role, vector_store_settings=vector_store_settings + ) + + spanner_utils.SpannerVectorStore(settings) + + mock_instance.database.assert_called_once_with( + "test-database", database_role=database_role + ) diff --git a/tests/unittests/tools/test_base_google_credentials_manager.py b/tests/unittests/tools/test_base_google_credentials_manager.py index 628a48a4c1..0d680ec484 100644 --- a/tests/unittests/tools/test_base_google_credentials_manager.py +++ b/tests/unittests/tools/test_base_google_credentials_manager.py @@ -105,15 +105,16 @@ async def test_get_valid_credentials_with_valid_existing_creds( ], ) @pytest.mark.asyncio + @patch.object(_google_credentials, "Request", autospec=True) async def test_get_valid_credentials_with_existing_non_oauth_creds( - self, manager, mock_tool_context, valid + self, mock_request_class, manager, mock_tool_context, valid ): - """Test that existing non-oauth credentials are returned immediately. + """Test that existing non-oauth credentials handle refresh logic correctly. - When credentials are of non-oauth type, no refresh or OAuth flow - is triggered irrespective of whether or not it is valid. + When credentials are of non-oauth type, a refresh is triggered if they + are invalid. No OAuth flow is ever triggered. """ - # Create mock credentials that are already valid + # Create mock credentials with the specified validity mock_creds = create_autospec(AuthCredentials, instance=True) mock_creds.valid = valid manager.credentials_config.credentials = mock_creds @@ -121,10 +122,39 @@ async def test_get_valid_credentials_with_existing_non_oauth_creds( result = await manager.get_valid_credentials(mock_tool_context) assert result == mock_creds + # Verify refresh behavior + if valid: + mock_creds.refresh.assert_not_called() + else: + mock_creds.refresh.assert_called_once_with( + mock_request_class.return_value + ) + # Verify no OAuth flow was triggered mock_tool_context.get_auth_response.assert_not_called() mock_tool_context.request_credential.assert_not_called() + @pytest.mark.asyncio + @patch.object(_google_credentials, "Request", autospec=True) + async def test_get_valid_credentials_with_non_oauth_refresh_failure( + self, mock_request_class, manager, mock_tool_context + ): + """Test that non-oauth refresh failures are caught gracefully. + + Even if refresh fails, we should still return the credentials as they + might work for some downstream libraries. + """ + mock_creds = create_autospec(AuthCredentials, instance=True) + mock_creds.valid = False + mock_creds.refresh.side_effect = Exception("Refresh failed") + manager.credentials_config.credentials = mock_creds + + result = await manager.get_valid_credentials(mock_tool_context) + + # Credentials should still be returned + assert result == mock_creds + mock_creds.refresh.assert_called_once_with(mock_request_class.return_value) + @pytest.mark.asyncio async def test_get_credentials_from_cache_when_none_in_manager( self, manager, mock_tool_context diff --git a/tests/unittests/tools/test_base_toolset.py b/tests/unittests/tools/test_base_toolset.py index 7c4ef3cfdd..cdb7808db7 100644 --- a/tests/unittests/tools/test_base_toolset.py +++ b/tests/unittests/tools/test_base_toolset.py @@ -383,6 +383,68 @@ async def test_no_duplicate_prefixing(): original_tools = await toolset.get_tools() assert original_tools[0].name == 'original' - # The prefixed tools should be different instances - assert prefixed_tools_1[0] is not prefixed_tools_2[0] + # The prefixed tools should be the same instance when cached + assert prefixed_tools_1[0] is prefixed_tools_2[0] assert prefixed_tools_1[0] is not original_tools[0] + + +@pytest.mark.asyncio +async def test_get_tools_with_prefix_caching(): + """Test that get_tools_with_prefix caches results within the same invocation.""" + tool1 = _TestingTool(name='tool1', description='Test tool 1') + toolset = _TestingToolset(tools=[tool1], tool_name_prefix='test') + + session_service = InMemorySessionService() + session = await session_service.create_session( + app_name='test_app', user_id='test_user' + ) + agent = SequentialAgent(name='test_agent') + invocation_context1 = InvocationContext( + invocation_id='inv-1', + agent=agent, + session=session, + session_service=session_service, + ) + readonly_context1 = ReadonlyContext(invocation_context1) + + # First call + tools1 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context1 + ) + assert len(tools1) == 1 + assert tools1[0].name == 'test_tool1' + + # Second call with same context/invocation_id + tools2 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context1 + ) + assert len(tools2) == 1 + assert ( + tools2 is tools1 + ) # Should return the exact same list instance (from cache) + + # Third call with different invocation_id + invocation_context2 = InvocationContext( + invocation_id='inv-2', + agent=agent, + session=session, + session_service=session_service, + ) + readonly_context2 = ReadonlyContext(invocation_context2) + + tools3 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + assert len(tools3) == 1 + assert tools3 is not tools1 # Should be a new list instance + assert tools3[0].name == 'test_tool1' + + # Test disabling caching + toolset._use_invocation_cache = False + tools4 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + tools5 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + assert tools4 is not tools5 diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index e35c32b6f5..772db385a6 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -12,6 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio +import resource +import signal from unittest import mock from google.adk.tools import bash_tool @@ -95,6 +98,8 @@ def test_default_policy_allows_everything(self): assert bash_tool._validate_command("rm -rf /", policy) is None assert bash_tool._validate_command("cat /etc/passwd", policy) is None assert bash_tool._validate_command("sudo curl", policy) is None + assert bash_tool._validate_command("echo hello | grep h", policy) is None + assert bash_tool._validate_command("ls ; rm -rf /", policy) is None def test_restricted_policy_allows_prefixes(self): policy = bash_tool.BashToolPolicy(allowed_command_prefixes=("ls", "cat")) @@ -109,6 +114,20 @@ def test_restricted_policy_blocks_others(self): "tree", policy ) + def test_blocked_operators_validation(self): + policy = bash_tool.BashToolPolicy( + allowed_command_prefixes=("*",), + blocked_operators=("|", ";", "$(", "`", "&&", "||"), + ) + assert ( + bash_tool._validate_command("echo hello | grep h", policy) + == "Command contains blocked operator: |" + ) + assert ( + bash_tool._validate_command("ls ; rm -rf /", policy) + == "Command contains blocked operator: ;" + ) + class TestExecuteBashTool: @@ -201,14 +220,26 @@ async def test_nonzero_returncode(self, workspace, tool_context_confirmed): @pytest.mark.asyncio async def test_timeout(self, workspace, tool_context_confirmed): tool = bash_tool.ExecuteBashTool(workspace=workspace) - with mock.patch( - "google.adk.tools.bash_tool.subprocess.run", - side_effect=__import__("subprocess").TimeoutExpired("cmd", 30), + mock_process = mock.AsyncMock() + mock_process.pid = 12345 + mock_process.communicate.return_value = (b"", b"") + with ( + mock.patch.object( + asyncio, + "create_subprocess_exec", + autospec=True, + return_value=mock_process, + ), + mock.patch.object( + asyncio, "wait_for", autospec=True, side_effect=asyncio.TimeoutError + ), + mock.patch("os.killpg") as mock_killpg, ): result = await tool.run_async( args={"command": "python scripts/do_thing.py"}, tool_context=tool_context_confirmed, ) + mock_killpg.assert_called_with(12345, signal.SIGKILL) assert "error" in result assert "timed out" in result["error"].lower() @@ -227,3 +258,35 @@ async def test_no_command(self, workspace, tool_context_confirmed): result = await tool.run_async(args={}, tool_context=tool_context_confirmed) assert "error" in result assert "required" in result["error"].lower() + + @pytest.mark.asyncio + async def test_resource_limits_set(self, workspace, tool_context_confirmed): + policy = bash_tool.BashToolPolicy( + max_memory_bytes=100 * 1024 * 1024, + max_file_size_bytes=50 * 1024 * 1024, + max_child_processes=10, + ) + tool = bash_tool.ExecuteBashTool(workspace=workspace, policy=policy) + mock_process = mock.AsyncMock() + mock_process.pid = None # Ensure finally block doesn't try to kill it + mock_process.communicate.return_value = (b"", b"") + mock_exec = mock.AsyncMock(return_value=mock_process) + + with mock.patch("asyncio.create_subprocess_exec", mock_exec): + await tool.run_async( + args={"command": "ls"}, + tool_context=tool_context_confirmed, + ) + assert "preexec_fn" in mock_exec.call_args.kwargs + preexec_fn = mock_exec.call_args.kwargs["preexec_fn"] + + mock_setrlimit = mock.create_autospec(resource.setrlimit, instance=True) + with mock.patch("resource.setrlimit", mock_setrlimit): + preexec_fn() + mock_setrlimit.assert_any_call(resource.RLIMIT_CORE, (0, 0)) + mock_setrlimit.assert_any_call( + resource.RLIMIT_AS, (100 * 1024 * 1024, 100 * 1024 * 1024) + ) + mock_setrlimit.assert_any_call( + resource.RLIMIT_FSIZE, (50 * 1024 * 1024, 50 * 1024 * 1024) + ) diff --git a/tests/unittests/tools/test_build_function_declaration.py b/tests/unittests/tools/test_build_function_declaration.py index 1c9bf245f1..608f06cb13 100644 --- a/tests/unittests/tools/test_build_function_declaration.py +++ b/tests/unittests/tools/test_build_function_declaration.py @@ -124,6 +124,65 @@ def simple_function(input: CustomInput) -> str: ) +def test_basemodel_required_fields(): + class SearchRequest(BaseModel): + query: str + max_results: int + filter: str = '' + + def search(request: SearchRequest) -> list: + return [] + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=search + ) + + inner = function_decl.parameters.properties['request'] + assert set(inner.required) == {'query', 'max_results'} + assert 'filter' not in (inner.required or []) + + +def test_basemodel_all_optional_fields_no_required(): + class Config(BaseModel): + timeout: int = 30 + retries: int = 3 + + def run(config: Config) -> str: + return '' + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=run + ) + + inner = function_decl.parameters.properties['config'] + assert not inner.required + + +def test_nested_basemodel_required_fields(): + class Inner(BaseModel): + x: int + y: int = 0 + + class Outer(BaseModel): + inner: Inner + label: str = '' + + def process(data: Outer) -> str: + return '' + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=process + ) + + outer = function_decl.parameters.properties['data'] + assert set(outer.required) == {'inner'} + assert 'label' not in (outer.required or []) + + inner = outer.properties['inner'] + assert set(inner.required) == {'x'} + assert 'y' not in (inner.required or []) + + def test_toolcontext_ignored(): def simple_function(input_str: str, tool_context: ToolContext) -> str: return {'result': input_str} diff --git a/tests/unittests/tools/test_discovery_engine_search_tool.py b/tests/unittests/tools/test_discovery_engine_search_tool.py index 7cba5f1841..a744be7c39 100644 --- a/tests/unittests/tools/test_discovery_engine_search_tool.py +++ b/tests/unittests/tools/test_discovery_engine_search_tool.py @@ -16,6 +16,7 @@ from google.adk.tools import discovery_engine_search_tool from google.adk.tools.discovery_engine_search_tool import DiscoveryEngineSearchTool +from google.adk.tools.discovery_engine_search_tool import SearchResultMode from google.api_core import exceptions from google.cloud import discoveryengine_v1beta as discoveryengine import pytest @@ -79,6 +80,193 @@ def test_init_with_data_store_specs_without_search_engine_id_raises_error( data_store_id="test_data_store", data_store_specs=[{"id": "123"}] ) + @pytest.mark.parametrize( + ("tool_kwargs", "expected_endpoint"), + [ + ( + { + "data_store_id": ( + "projects/test/locations/eu/collections/default_collection/" + "dataStores/test_data_store" + ) + }, + "eu-discoveryengine.googleapis.com", + ), + ( + { + "search_engine_id": ( + "projects/test/locations/us/collections/default_collection/" + "engines/test_search_engine" + ) + }, + "us-discoveryengine.googleapis.com", + ), + ( + { + "data_store_id": ( + "projects/test/locations/europe-west1/collections/" + "default_collection/dataStores/test_data_store" + ) + }, + "europe-west1-discoveryengine.googleapis.com", + ), + ], + ) + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_regional_location_uses_regional_endpoint( + self, + mock_search_client, + mock_client_options, + tool_kwargs, + expected_endpoint, + ): + """Test initialization uses the expected regional API endpoint.""" + DiscoveryEngineSearchTool(**tool_kwargs) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint=expected_endpoint + ) + mock_search_client.assert_called_once_with( + credentials="credentials", + client_options=mock_client_options.ClientOptions.return_value, + ) + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_explicit_location_override_uses_input_location( + self, mock_search_client, mock_client_options + ): + """Test initialization uses explicit location when resource has none.""" + DiscoveryEngineSearchTool( + data_store_id="test_data_store", + location="eu", + ) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint="eu-discoveryengine.googleapis.com" + ) + mock_search_client.assert_called_once_with( + credentials="credentials", + client_options=mock_client_options.ClientOptions.return_value, + ) + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_mismatched_location_raises_error(self, mock_search_client): + """Test initialization rejects mismatched location overrides.""" + with pytest.raises( + ValueError, + match=( + "location must match the location in data_store_id or " + "search_engine_id." + ), + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/us/collections/default_collection/" + "dataStores/test_data_store" + ), + location="eu", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_empty_location_raises_error(self, mock_search_client): + """Test initialization rejects an empty location override.""" + with pytest.raises( + ValueError, match="location must not be empty if specified." + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/us/collections/default_collection/" + "dataStores/test_data_store" + ), + location=" ", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_invalid_override_location_raises_error( + self, mock_search_client + ): + """Test initialization rejects invalid override location characters.""" + with pytest.raises( + ValueError, + match="location must contain only letters, digits, and hyphens.", + ): + DiscoveryEngineSearchTool( + data_store_id="test_data_store", + location="attacker.com#", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_invalid_resource_location_raises_error( + self, mock_search_client + ): + """Test initialization rejects invalid resource location characters.""" + with pytest.raises( + ValueError, + match="Invalid location in data_store_id or search_engine_id.", + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/attacker.com#/collections/" + "default_collection/dataStores/test_data_store" + ) + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_global_location_keeps_default_endpoint( + self, mock_search_client, mock_client_options + ): + """Test initialization keeps default API endpoint for global location.""" + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/global/collections/default_collection/" + "dataStores/test_data_store" + ) + ) + + mock_client_options.ClientOptions.assert_not_called() + mock_search_client.assert_called_once_with( + credentials="credentials", client_options=None + ) + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_regional_location_and_quota_project_id( + self, mock_search_client, mock_client_options + ): + """Test initialization uses endpoint and quota project id together.""" + mock_credentials = mock.MagicMock() + mock_credentials.quota_project_id = "test-quota-project" + + with mock.patch.object( + auth, "default", return_value=(mock_credentials, "project") + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/eu/collections/default_collection/" + "dataStores/test_data_store" + ) + ) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint="eu-discoveryengine.googleapis.com", + quota_project_id="test-quota-project", + ) + mock_search_client.assert_called_once_with( + credentials=mock_credentials, + client_options=mock_client_options.ClientOptions.return_value, + ) + @mock.patch.object(discovery_engine_search_tool, "client_options") @mock.patch.object( discoveryengine, @@ -128,8 +316,9 @@ def test_discovery_engine_search_success( client_options=mock_client_options.ClientOptions.return_value, ) - @mock.patch( - "google.cloud.discoveryengine_v1beta.SearchServiceClient", + @mock.patch.object( + discoveryengine, + "SearchServiceClient", ) def test_discovery_engine_search_api_error(self, mock_search_client): """Test discovery engine search with API error.""" @@ -143,8 +332,9 @@ def test_discovery_engine_search_api_error(self, mock_search_client): assert result["status"] == "error" assert result["error_message"] == "None API error" - @mock.patch( - "google.cloud.discoveryengine_v1beta.SearchServiceClient", + @mock.patch.object( + discoveryengine, + "SearchServiceClient", ) def test_discovery_engine_search_no_results(self, mock_search_client): """Test discovery engine search with no results.""" @@ -156,3 +346,164 @@ def test_discovery_engine_search_no_results(self, mock_search_client): assert result["status"] == "success" assert not result["results"] + + def test_init_default_search_result_mode(self): + """Test default search result mode is None (auto-detect).""" + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + assert tool._search_result_mode is None + + def test_init_with_documents_mode(self): + """Test initialization with DOCUMENTS search result mode.""" + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + assert tool._search_result_mode == SearchResultMode.DOCUMENTS + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_structured( + self, mock_search_client + ): + """Test DOCUMENTS mode with structured data.""" + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc1", + id="doc1", + struct_data={ + "title": "Jira Issue", + "uri": "https://jira.example.com/123", + "summary": "Bug fix for login", + }, + ) + mock_response = discoveryengine.SearchResponse() + mock_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Jira Issue" + assert result["results"][0]["url"] == "https://jira.example.com/123" + assert "Bug fix for login" in result["results"][0]["content"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_unstructured( + self, mock_search_client + ): + """Test DOCUMENTS mode with unstructured data.""" + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc2", + id="doc2", + derived_struct_data={ + "title": "Web Page", + "link": "https://example.com", + "snippets": [{"snippet": "Relevant text here"}], + }, + ) + mock_response = discoveryengine.SearchResponse() + mock_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Web Page" + assert result["results"][0]["url"] == "https://example.com" + assert "Relevant text here" in result["results"][0]["content"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_no_results( + self, mock_search_client + ): + """Test DOCUMENTS mode with no results.""" + mock_response = discoveryengine.SearchResponse() + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert not result["results"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_auto_detect_falls_back_to_documents(self, mock_search_client): + """Test auto-detect retries with DOCUMENTS on structured store error.""" + structured_error = exceptions.InvalidArgument( + "`content_search_spec.search_result_mode` must be set to" + " SearchRequest.ContentSearchSpec.SearchResultMode.DOCUMENTS" + " when the engine contains structured data store." + ) + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc1", + id="doc1", + struct_data={ + "title": "Jira Issue", + "uri": "https://jira.example.com/123", + "summary": "Bug fix", + }, + ) + mock_doc_response = discoveryengine.SearchResponse() + mock_doc_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.side_effect = [ + structured_error, + mock_doc_response, + ] + + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Jira Issue" + assert mock_search_client.return_value.search.call_count == 2 + # Mode should be persisted so subsequent calls skip the retry. + assert tool._search_result_mode == SearchResultMode.DOCUMENTS + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_auto_detect_does_not_retry_on_unrelated_error( + self, mock_search_client + ): + """Test auto-detect does not retry on unrelated API errors.""" + mock_search_client.return_value.search.side_effect = ( + exceptions.GoogleAPICallError("Permission denied") + ) + + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + result = tool.discovery_engine_search("test query") + + assert result["status"] == "error" + assert "Permission denied" in result["error_message"] + assert mock_search_client.return_value.search.call_count == 1 diff --git a/tests/unittests/tools/test_from_function_with_options.py b/tests/unittests/tools/test_from_function_with_options.py index a3f68ee11c..537094da39 100644 --- a/tests/unittests/tools/test_from_function_with_options.py +++ b/tests/unittests/tools/test_from_function_with_options.py @@ -319,3 +319,45 @@ async def test_function(param: str) -> AsyncGenerator[Dict[str, str], None]: # VERTEX_AI should extract yield type (Dict[str, str]) from AsyncGenerator assert declaration.response is not None assert declaration.response.type == types.Type.OBJECT + + +def test_required_fields_set_in_json_schema_fallback(): + """Test that required fields are populated when the json_schema fallback path is used. + + When a parameter has a complex union type (e.g. list[str] | None) that + _parse_schema_from_parameter can't handle, from_function_with_options falls + back to the parameters_json_schema branch. This test verifies that the + required fields are correctly populated in that fallback branch. + """ + + def complex_tool( + query: str, + mode: str = 'default', + tags: list[str] | None = None, + ) -> str: + """A tool where one param has a complex union type.""" + return query + + declaration = _automatic_function_calling_util.from_function_with_options( + complex_tool, GoogleLLMVariant.GEMINI_API + ) + + assert declaration.name == 'complex_tool' + assert declaration.parameters == types.Schema( + type=types.Type.OBJECT, + required=['query'], + properties={ + 'query': types.Schema(type=types.Type.STRING), + 'mode': types.Schema(type=types.Type.STRING, default='default'), + 'tags': types.Schema( + any_of=[ + types.Schema( + items=types.Schema(type=types.Type.STRING), + type=types.Type.ARRAY, + ), + types.Schema(type=types.Type.NULL), + ], + nullable=True, + ), + }, + ) diff --git a/tests/unittests/tools/test_skill_toolset.py b/tests/unittests/tools/test_skill_toolset.py index 1c0f1d0e3d..7d60110177 100644 --- a/tests/unittests/tools/test_skill_toolset.py +++ b/tests/unittests/tools/test_skill_toolset.py @@ -13,10 +13,13 @@ # limitations under the License. import logging +import sys from unittest import mock +from google.adk.agents.readonly_context import ReadonlyContext from google.adk.code_executors.base_code_executor import BaseCodeExecutor from google.adk.code_executors.code_execution_utils import CodeExecutionResult +from google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor from google.adk.models import llm_request as llm_request_model from google.adk.skills import models from google.adk.tools import skill_toolset @@ -25,8 +28,8 @@ import pytest -@pytest.fixture -def mock_skill1_frontmatter(): +@pytest.fixture(name="mock_skill1_frontmatter") +def _mock_skill1_frontmatter(): """Fixture for skill1 frontmatter.""" frontmatter = mock.create_autospec(models.Frontmatter, instance=True) frontmatter.name = "skill1" @@ -39,8 +42,8 @@ def mock_skill1_frontmatter(): return frontmatter -@pytest.fixture -def mock_skill1(mock_skill1_frontmatter): +@pytest.fixture(name="mock_skill1") +def _mock_skill1(mock_skill1_frontmatter): """Fixture for skill1.""" skill = mock.create_autospec(models.Skill, instance=True) skill.name = "skill1" @@ -94,8 +97,8 @@ def get_script(name): return skill -@pytest.fixture -def mock_skill2_frontmatter(): +@pytest.fixture(name="mock_skill2_frontmatter") +def _mock_skill2_frontmatter(): """Fixture for skill2 frontmatter.""" frontmatter = mock.create_autospec(models.Frontmatter, instance=True) frontmatter.name = "skill2" @@ -108,8 +111,8 @@ def mock_skill2_frontmatter(): return frontmatter -@pytest.fixture -def mock_skill2(mock_skill2_frontmatter): +@pytest.fixture(name="mock_skill2") +def _mock_skill2(mock_skill2_frontmatter): """Fixture for skill2.""" skill = mock.create_autospec(models.Skill, instance=True) skill.name = "skill2" @@ -183,6 +186,20 @@ async def test_get_tools(mock_skill1, mock_skill2): assert isinstance(tools[3], skill_toolset.RunSkillScriptTool) +@pytest.mark.asyncio +async def test_resolve_additional_tools_from_state_none(mock_skill1): + toolset = skill_toolset.SkillToolset([mock_skill1]) + + # Mock ReadonlyContext + readonly_context = mock.create_autospec(ReadonlyContext, instance=True) + readonly_context.agent_name = "test_agent" + readonly_context.state.get.return_value = None + + result = await toolset._resolve_additional_tools_from_state(readonly_context) + + assert not result + + @pytest.mark.asyncio async def test_list_skills_tool( mock_skill1, mock_skill2, tool_context_instance @@ -200,7 +217,7 @@ async def test_list_skills_tool( "args, expected_result", [ ( - {"name": "skill1"}, + {"skill_name": "skill1"}, { "skill_name": "skill1", "instructions": "instructions for skill1", @@ -211,7 +228,7 @@ async def test_list_skills_tool( }, ), ( - {"name": "nonexistent"}, + {"skill_name": "nonexistent"}, { "error": "Skill 'nonexistent' not found.", "error_code": "SKILL_NOT_FOUND", @@ -220,8 +237,8 @@ async def test_list_skills_tool( ( {}, { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ], @@ -235,31 +252,53 @@ async def test_load_skill_run_async( assert result == expected_result +@pytest.mark.asyncio +async def test_load_skill_run_async_state_none( + mock_skill1, tool_context_instance +): + toolset = skill_toolset.SkillToolset([mock_skill1]) + tool = skill_toolset.LoadSkillTool(toolset) + + # Mock state to return None for the key + state_key = "_adk_activated_skill_test_agent" + tool_context_instance.state.get.return_value = None + + result = await tool.run_async( + args={"skill_name": "skill1"}, tool_context=tool_context_instance + ) + + assert result["skill_name"] == "skill1" + # Verify that it correctly set the list in state + tool_context_instance.state.__setitem__.assert_called_with( + state_key, ["skill1"] + ) + + @pytest.mark.asyncio @pytest.mark.parametrize( "args, expected_result", [ ( - {"skill_name": "skill1", "path": "references/ref1.md"}, + {"skill_name": "skill1", "file_path": "references/ref1.md"}, { "skill_name": "skill1", - "path": "references/ref1.md", + "file_path": "references/ref1.md", "content": "ref content 1", }, ), ( - {"skill_name": "skill1", "path": "assets/asset1.txt"}, + {"skill_name": "skill1", "file_path": "assets/asset1.txt"}, { "skill_name": "skill1", - "path": "assets/asset1.txt", + "file_path": "assets/asset1.txt", "content": "asset content 1", }, ), ( - {"skill_name": "skill1", "path": "references/doc.pdf"}, + {"skill_name": "skill1", "file_path": "references/doc.pdf"}, { "skill_name": "skill1", - "path": "references/doc.pdf", + "file_path": "references/doc.pdf", "status": ( "Binary file detected. The content has been injected into" " the conversation history for you to analyze." @@ -267,10 +306,10 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "assets/image.png"}, + {"skill_name": "skill1", "file_path": "assets/image.png"}, { "skill_name": "skill1", - "path": "assets/image.png", + "file_path": "assets/image.png", "status": ( "Binary file detected. The content has been injected into" " the conversation history for you to analyze." @@ -278,22 +317,22 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "scripts/setup.sh"}, + {"skill_name": "skill1", "file_path": "scripts/setup.sh"}, { "skill_name": "skill1", - "path": "scripts/setup.sh", + "file_path": "scripts/setup.sh", "content": "echo setup", }, ), ( - {"skill_name": "nonexistent", "path": "references/ref1.md"}, + {"skill_name": "nonexistent", "file_path": "references/ref1.md"}, { "error": "Skill 'nonexistent' not found.", "error_code": "SKILL_NOT_FOUND", }, ), ( - {"skill_name": "skill1", "path": "references/other.md"}, + {"skill_name": "skill1", "file_path": "references/other.md"}, { "error": ( "Resource 'references/other.md' not found in skill" @@ -303,7 +342,7 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "invalid/path.txt"}, + {"skill_name": "skill1", "file_path": "invalid/path.txt"}, { "error": ( "Path must start with 'references/', 'assets/'," @@ -313,17 +352,17 @@ async def test_load_skill_run_async( }, ), ( - {"path": "references/ref1.md"}, + {"file_path": "references/ref1.md"}, { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ( {"skill_name": "skill1"}, { - "error": "Resource path is required.", - "error_code": "MISSING_RESOURCE_PATH", + "error": "Argument 'file_path' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ], @@ -361,7 +400,7 @@ async def test_load_resource_process_llm_request_binary( name=tool.name, response={ "skill_name": "skill1", - "path": resource_path, + "file_path": resource_path, "status": ( "Binary file detected. The content has been injected into the" " conversation history for you to analyze." @@ -428,7 +467,7 @@ async def test_scripts_resource_not_found(mock_skill1, tool_context_instance): toolset = skill_toolset.SkillToolset([mock_skill1]) tool = skill_toolset.LoadSkillResourceTool(toolset) result = await tool.run_async( - args={"skill_name": "skill1", "path": "scripts/nonexistent.sh"}, + args={"skill_name": "skill1", "file_path": "scripts/nonexistent.sh"}, tool_context=tool_context_instance, ) assert result["error_code"] == "RESOURCE_NOT_FOUND" @@ -463,20 +502,20 @@ def _make_mock_executor(stdout="", stderr=""): "args, expected_error_code", [ ( - {"script_path": "setup.sh"}, - "MISSING_SKILL_NAME", + {"file_path": "setup.sh"}, + "INVALID_ARGUMENTS", ), ( {"skill_name": "skill1"}, - "MISSING_SCRIPT_PATH", + "INVALID_ARGUMENTS", ), ( - {"skill_name": "", "script_path": "setup.sh"}, - "MISSING_SKILL_NAME", + {"skill_name": "", "file_path": "setup.sh"}, + "INVALID_ARGUMENTS", ), ( - {"skill_name": "skill1", "script_path": ""}, - "MISSING_SCRIPT_PATH", + {"skill_name": "skill1", "file_path": ""}, + "INVALID_ARGUMENTS", ), ], ) @@ -498,7 +537,7 @@ async def test_execute_script_skill_not_found(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "nonexistent", "script_path": "setup.sh"}, + args={"skill_name": "nonexistent", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "SKILL_NOT_FOUND" @@ -511,7 +550,7 @@ async def test_execute_script_script_not_found(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "nonexistent.py"}, + args={"skill_name": "skill1", "file_path": "nonexistent.py"}, tool_context=ctx, ) assert result["error_code"] == "SCRIPT_NOT_FOUND" @@ -525,7 +564,7 @@ async def test_execute_script_no_code_executor(mock_skill1): agent = mock.MagicMock(spec=[]) ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "NO_CODE_EXECUTOR" @@ -540,7 +579,7 @@ async def test_execute_script_agent_code_executor_none(mock_skill1): agent.code_executor = None ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "NO_CODE_EXECUTOR" @@ -553,7 +592,7 @@ async def test_execute_script_unsupported_type(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "build.rb"}, + args={"skill_name": "skill1", "file_path": "build.rb"}, tool_context=ctx, ) assert result["error_code"] == "UNSUPPORTED_SCRIPT_TYPE" @@ -566,14 +605,14 @@ async def test_execute_script_python_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" assert result["stdout"] == "hello\n" assert result["stderr"] == "" assert result["skill_name"] == "skill1" - assert result["script_path"] == "run.py" + assert result["file_path"] == "run.py" # Verify the code passed to executor runs the python scripts call_args = executor.execute_code.call_args @@ -593,7 +632,7 @@ async def test_execute_script_shell_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -616,7 +655,7 @@ async def test_execute_script_with_input_args_python(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "args": {"verbose": True, "count": "3"}, }, tool_context=ctx, @@ -640,7 +679,7 @@ async def test_execute_script_with_input_args_shell(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "setup.sh", + "file_path": "setup.sh", "args": {"force": True}, }, tool_context=ctx, @@ -652,6 +691,109 @@ async def test_execute_script_with_input_args_shell(mock_skill1): assert "['bash', 'scripts/setup.sh', '--force', 'True']" in code_input.code +@pytest.mark.asyncio +async def test_execute_script_with_list_args_python( + mock_skill1, +): + """Verifies that python scripts can be executed with list arguments.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "run.py", + "args": ["--verbose", "True", "-n", "5", "input.txt"], + }, + tool_context=ctx, + ) + assert result["status"] == "success" + + call_args = executor.execute_code.call_args + code_input = call_args[0][1] + assert ( + "['scripts/run.py', '--verbose', 'True', '-n', '5', 'input.txt']" + in code_input.code + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_list_args_shell( + mock_skill1, +): + """Verifies that shell scripts can be executed with list arguments.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "setup.sh", + "args": ["-n", "5", "input.txt"], + }, + tool_context=ctx, + ) + assert result["status"] == "success" + + call_args = executor.execute_code.call_args + code_input = call_args[0][1] + assert ( + "['bash', 'scripts/setup.sh', '-n', '5', 'input.txt']" in code_input.code + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_list_args_rejects_others_python( + mock_skill1, # pylint: disable=redefined-outer-name +): + """Verifies that short_options and positional_args are rejected when args is a list for Python scripts.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "run.py", + "args": ["arg1", "arg2"], + "short_options": {"v": True}, + "positional_args": ["pos1"], + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" + assert ( + "Cannot specify 'short_options' or 'positional_args'" in result["error"] + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_list_args_rejects_others_shell( + mock_skill1, # pylint: disable=redefined-outer-name +): + """Verifies that short_options and positional_args are rejected when args is a list for shell scripts.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "setup.sh", + "args": ["arg1", "arg2"], + "short_options": {"v": True}, + "positional_args": ["pos1"], + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" + assert ( + "Cannot specify 'short_options' or 'positional_args'" in result["error"] + ) + + @pytest.mark.asyncio async def test_execute_script_scripts_prefix_stripping(mock_skill1): executor = _make_mock_executor(stdout="setup\n") @@ -661,12 +803,12 @@ async def test_execute_script_scripts_prefix_stripping(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "scripts/setup.sh", + "file_path": "scripts/setup.sh", }, tool_context=ctx, ) assert result["status"] == "success" - assert result["script_path"] == "scripts/setup.sh" + assert result["file_path"] == "scripts/setup.sh" @pytest.mark.asyncio @@ -682,7 +824,7 @@ async def test_execute_script_toolset_executor_priority(mock_skill1): agent.code_executor = agent_executor ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["stdout"] == "from toolset\n" @@ -700,7 +842,7 @@ async def test_execute_script_agent_executor_fallback(mock_skill1): agent.code_executor = agent_executor ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["stdout"] == "from agent\n" @@ -715,7 +857,7 @@ async def test_execute_script_execution_error(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -731,7 +873,7 @@ async def test_execute_script_stderr_only_sets_error_status(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "error" @@ -746,7 +888,7 @@ async def test_execute_script_stderr_with_stdout_sets_warning(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "warning" @@ -763,7 +905,7 @@ async def test_execute_script_execution_error_truncated(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -781,7 +923,7 @@ async def test_execute_script_system_exit_caught(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -798,7 +940,7 @@ async def test_execute_script_system_exit_zero_is_success(mock_skill1): ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" @@ -813,7 +955,7 @@ async def test_execute_script_system_exit_none_is_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" @@ -829,7 +971,7 @@ async def test_execute_script_shell_includes_timeout(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -856,7 +998,7 @@ def get_script_extended(name): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "noext"}, + args={"skill_name": "skill1", "file_path": "noext"}, tool_context=ctx, ) assert result["error_code"] == "UNSUPPORTED_SCRIPT_TYPE" @@ -902,9 +1044,11 @@ def get_script(name): def _make_real_executor_toolset(skills, **kwargs): """Creates a SkillToolset with a real UnsafeLocalCodeExecutor.""" - from google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor - executor = UnsafeLocalCodeExecutor() + if sys.executable is None: + sys.executable = "/usr/bin/python3" + + executor = UnsafeLocalCodeExecutor(timeout_seconds=10) return skill_toolset.SkillToolset(skills, code_executor=executor, **kwargs) @@ -919,10 +1063,11 @@ async def test_integration_python_stdout(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "hello.py", + "file_path": "hello.py", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "success" assert result["stdout"] == "hello world\n" assert result["stderr"] == "" @@ -939,10 +1084,11 @@ async def test_integration_python_sys_exit_zero(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "exit_zero.py", + "file_path": "exit_zero.py", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "success" @@ -957,10 +1103,11 @@ async def test_integration_shell_stdout_and_stderr(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "both.sh", + "file_path": "both.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "warning" assert "output" in result["stdout"] assert "warning" in result["stderr"] @@ -977,10 +1124,11 @@ async def test_integration_shell_stderr_only(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "err.sh", + "file_path": "err.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "error" assert "failure" in result["stderr"] @@ -1004,7 +1152,7 @@ async def test_shell_json_envelope_parsed(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -1028,7 +1176,7 @@ async def test_shell_json_envelope_nonzero_returncode(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "error" @@ -1051,7 +1199,7 @@ async def test_shell_json_envelope_with_stderr(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "warning" @@ -1075,7 +1223,7 @@ async def test_shell_json_envelope_timeout(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "error" @@ -1091,7 +1239,7 @@ async def test_shell_non_json_stdout_passthrough(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -1109,7 +1257,7 @@ async def test_execute_script_input_files_packaged(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) @@ -1145,10 +1293,11 @@ async def test_integration_shell_nonzero_exit(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "fail.sh", + "file_path": "fail.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "error" assert "42" in result["stderr"] @@ -1201,7 +1350,7 @@ async def test_execute_script_empty_files_mounted(): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill_empty", "script_path": "run.py"}, + args={"skill_name": "skill_empty", "file_path": "run.py"}, tool_context=ctx, ) @@ -1220,7 +1369,6 @@ async def test_execute_script_empty_files_mounted(): "bad_args", [ "not a dict", - ["a", "list"], 42, True, ], @@ -1234,12 +1382,72 @@ async def test_execute_script_invalid_args_type(mock_skill1, bad_args): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "args": bad_args, }, tool_context=ctx, ) - assert result["error_code"] == "INVALID_ARGS_TYPE" + assert result["error_code"] == "INVALID_ARGUMENTS" + executor.execute_code.assert_not_called() + + +@pytest.mark.parametrize( + "bad_short_options", + [ + "not a dict", + 42, + True, + ["list"], + ], +) +@pytest.mark.asyncio +async def test_execute_script_invalid_short_options_type( + mock_skill1, bad_short_options +): + """Non-dict short_options should return INVALID_SHORT_OPTIONS_TYPE, not crash.""" + executor = _make_mock_executor() + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "run.py", + "short_options": bad_short_options, + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" + executor.execute_code.assert_not_called() + + +@pytest.mark.parametrize( + "bad_positional_args", + [ + "not a list", + 42, + True, + {"dict": 1}, + ], +) +@pytest.mark.asyncio +async def test_execute_script_invalid_positional_args_type( + mock_skill1, bad_positional_args +): + """Non-list positional_args should return INVALID_POSITIONAL_ARGS_TYPE, not crash.""" + executor = _make_mock_executor() + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "run.py", + "positional_args": bad_positional_args, + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" executor.execute_code.assert_not_called() @@ -1277,7 +1485,7 @@ async def test_execute_script_binary_content_packaged(): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill_bin", "script_path": "run.py"}, + args={"skill_name": "skill_bin", "file_path": "run.py"}, tool_context=ctx, ) @@ -1290,41 +1498,88 @@ async def test_execute_script_binary_content_packaged(): @pytest.mark.asyncio -async def test_skill_toolset_dynamic_tool_resolution(mock_skill1): - # Set up a skill with additional_tools in metadata +async def test_skill_toolset_dynamic_tool_resolution(mock_skill1, mock_skill2): + # Set up skills with additional_tools in metadata mock_skill1.frontmatter.metadata = { - "adk_additional_tools": ["my_custom_tool", "my_func"] + "adk_additional_tools": ["my_custom_tool", "my_func", "shared_tool"] } mock_skill1.name = "skill1" + mock_skill2.frontmatter.metadata = { + "adk_additional_tools": [ + "skill2_tool", + "shared_tool", + "prefixed_mock_tool", + ] + } + mock_skill2.name = "skill2" + # Prepare additional tools custom_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) custom_tool.name = "my_custom_tool" + skill2_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + skill2_tool.name = "skill2_tool" + + shared_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + shared_tool.name = "shared_tool" + def my_func(): """My function description.""" pass + # Setup prefixed toolset + mock_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + mock_tool.name = "prefixed_mock_tool" + prefixed_set = mock.create_autospec(skill_toolset.BaseToolset, instance=True) + prefixed_set.get_tools_with_prefix.return_value = [mock_tool] + toolset = skill_toolset.SkillToolset( - [mock_skill1], - additional_tools=[custom_tool, my_func], + [mock_skill1, mock_skill2], + additional_tools=[ + custom_tool, + skill2_tool, + shared_tool, + my_func, + prefixed_set, + ], ) ctx = _make_tool_context_with_agent() # Initial tools (only core) - tools = await toolset.get_tools(readonly_context=ctx) - assert len(tools) == 4 + tools1 = await toolset.get_tools_with_prefix(readonly_context=ctx) + assert len(tools1) == 4 - # Activate skill + # Activate skills load_tool = skill_toolset.LoadSkillTool(toolset) - await load_tool.run_async(args={"name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill2"}, tool_context=ctx) # Dynamic tools should now be resolved - tools = await toolset.get_tools(readonly_context=ctx) + tools = await toolset.get_tools_with_prefix(readonly_context=ctx) + assert tools is not tools1 tool_names = {t.name for t in tools} + + # Core tools + assert "list_skills" in tool_names + assert "load_skill" in tool_names + assert "load_skill_resource" in tool_names + assert "run_skill_script" in tool_names + + # Skill 1 tools assert "my_custom_tool" in tool_names assert "my_func" in tool_names + # Skill 2 tools + assert "skill2_tool" in tool_names + + # Shared tool (should only appear once) + assert "shared_tool" in tool_names + assert len([t for t in tools if t.name == "shared_tool"]) == 1 + + # Prefixed toolset tool + assert "prefixed_mock_tool" in tool_names + # Check specific tool resolution details my_func_tool = next(t for t in tools if t.name == "my_func") assert isinstance(my_func_tool, skill_toolset.FunctionTool) @@ -1342,7 +1597,7 @@ async def test_skill_toolset_resolution_error_handling(mock_skill1, caplog): # Activate skill load_tool = skill_toolset.LoadSkillTool(toolset) - await load_tool.run_async(args={"name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill1"}, tool_context=ctx) with caplog.at_level(logging.WARNING): tools = await toolset.get_tools(readonly_context=ctx) diff --git a/tests/unittests/utils/test_context_utils.py b/tests/unittests/utils/test_context_utils.py index a5e2d6566d..56583b9c6d 100644 --- a/tests/unittests/utils/test_context_utils.py +++ b/tests/unittests/utils/test_context_utils.py @@ -33,6 +33,30 @@ def my_tool(query: str, ctx: Context) -> str: assert find_context_parameter(my_tool) == 'ctx' + def test_find_context_parameter_with_string_annotation(self): + """Test detection of string annotation 'Context'.""" + + def my_tool(query: str, ctx: 'Context') -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + + def test_find_context_parameter_with_string_tool_context(self): + """Test detection of string annotation 'ToolContext'.""" + + def my_tool(query: str, ctx: 'ToolContext') -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + + def test_find_context_parameter_with_string_optional_context(self): + """Test detection of string annotation 'Optional[Context]'.""" + + def my_tool(query: str, ctx: 'Optional[Context]' = None) -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + def test_find_context_parameter_with_tool_context_type(self): """Test detection of ToolContext type annotation.""" diff --git a/tests/unittests/utils/test_output_schema_utils.py b/tests/unittests/utils/test_output_schema_utils.py index cf759c996b..2f9eb4bb09 100644 --- a/tests/unittests/utils/test_output_schema_utils.py +++ b/tests/unittests/utils/test_output_schema_utils.py @@ -12,10 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import annotations + +import builtins +import importlib.util +import sys +from typing import Any from google.adk.models.anthropic_llm import Claude +from google.adk.models.base_llm import BaseLlm from google.adk.models.google_llm import Gemini -from google.adk.models.lite_llm import LiteLlm from google.adk.utils.output_schema_utils import can_use_output_schema_with_tools import pytest @@ -38,19 +44,51 @@ (Claude(model="claude-3.7-sonnet"), "1", False), (Claude(model="claude-3.7-sonnet"), "0", False), (Claude(model="claude-3.7-sonnet"), None, False), - (LiteLlm(model="openai/gpt-4o"), "1", True), - (LiteLlm(model="openai/gpt-4o"), "0", True), - (LiteLlm(model="openai/gpt-4o"), None, True), - (LiteLlm(model="anthropic/claude-3.7-sonnet"), None, True), - (LiteLlm(model="fireworks_ai/llama-v3p1-70b"), None, True), ], ) def test_can_use_output_schema_with_tools( - monkeypatch, model, env_value, expected -): + monkeypatch: pytest.MonkeyPatch, + model: str | BaseLlm, + env_value: str | None, + expected: bool, +) -> None: """Test can_use_output_schema_with_tools.""" if env_value is not None: monkeypatch.setenv("GOOGLE_GENAI_USE_VERTEXAI", env_value) else: monkeypatch.delenv("GOOGLE_GENAI_USE_VERTEXAI", raising=False) assert can_use_output_schema_with_tools(model) == expected + + +def test_can_use_output_schema_with_tools_with_litellm_model() -> None: + """Test LiteLlm detection when the optional module is available.""" + if importlib.util.find_spec("litellm") is None: + pytest.skip("litellm is not installed") + + from google.adk.models.lite_llm import LiteLlm + + assert can_use_output_schema_with_tools(LiteLlm(model="openai/gpt-4o")) + + +def test_can_use_output_schema_with_tools_without_litellm_module( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Test optional LiteLlm import failures do not affect other models.""" + original_import = builtins.__import__ + + def _failing_import( + name: str, + globals_dict: dict[str, Any] | None = None, + locals_dict: dict[str, Any] | None = None, + fromlist: tuple[str, ...] = (), + level: int = 0, + ) -> Any: + if name.endswith("lite_llm"): + raise ImportError("litellm not installed") + return original_import(name, globals_dict, locals_dict, fromlist, level) + + monkeypatch.delenv("GOOGLE_GENAI_USE_VERTEXAI", raising=False) + monkeypatch.delitem(sys.modules, "google.adk.models.lite_llm", raising=False) + monkeypatch.setattr(builtins, "__import__", _failing_import) + + assert not can_use_output_schema_with_tools(Claude(model="claude-3.7-sonnet")) diff --git a/tests/unittests/utils/test_streaming_utils.py b/tests/unittests/utils/test_streaming_utils.py index c814ecd5b1..6b68789bf0 100644 --- a/tests/unittests/utils/test_streaming_utils.py +++ b/tests/unittests/utils/test_streaming_utils.py @@ -16,6 +16,7 @@ from google.adk.features._feature_registry import FeatureName from google.adk.features._feature_registry import temporary_feature_override +from google.adk.flows.llm_flows.functions import AF_FUNCTION_CALL_ID_PREFIX from google.adk.utils import streaming_utils from google.genai import types import pytest @@ -304,3 +305,234 @@ async def run_test(): await run_test() else: await run_test() + + +class TestFunctionCallIdGeneration: + """Tests for function call ID generation in streaming mode. + + Regression tests for https://github.com/google/adk-python/issues/4609. + """ + + @pytest.mark.asyncio + async def test_non_streaming_fc_generates_id_when_empty(self): + """Non-streaming function call should get an adk-* ID if LLM didn't provide one.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + response = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + args={"x": 1}, + id=None, # No ID from LLM + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response): + pass + + closed_response = aggregator.close() + assert closed_response is not None + fc = closed_response.content.parts[0].function_call + assert fc.id is not None + assert fc.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + + @pytest.mark.asyncio + async def test_non_streaming_fc_preserves_llm_assigned_id(self): + """Non-streaming function call should preserve ID if LLM provided one.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + response = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + args={"x": 1}, + id="llm-assigned-id", + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response): + pass + + closed_response = aggregator.close() + assert closed_response is not None + fc = closed_response.content.parts[0].function_call + assert fc.id == "llm-assigned-id" + + @pytest.mark.asyncio + async def test_streaming_fc_generates_consistent_id_across_chunks(self): + """Streaming function call should have the same ID in partial and final responses.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + # First chunk: function call starts + response1 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.x", + string_value="hello", + ) + ], + will_continue=True, + ) + ) + ] + ) + ) + ] + ) + + # Second chunk: function call continues + response2 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name=None, + id=None, + partial_args=[ + types.PartialArg( + json_path="$.x", + string_value=" world", + ) + ], + will_continue=False, # Complete + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + partial_results = [] + async for r in aggregator.process_response(response1): + partial_results.append(r) + async for r in aggregator.process_response(response2): + partial_results.append(r) + + closed_response = aggregator.close() + assert closed_response is not None + final_fc = closed_response.content.parts[0].function_call + assert final_fc.id is not None + assert final_fc.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert final_fc.args == {"x": "hello world"} + + # Verify partial and final events share the same ID + partial_fc = partial_results[0].content.parts[0].function_call + assert ( + partial_fc.id == final_fc.id + ), f"Partial FC ID ({partial_fc.id!r}) != Final FC ID ({final_fc.id!r})" + + @pytest.mark.asyncio + async def test_multiple_streaming_fcs_get_different_ids(self): + """Multiple function calls arriving in separate chunks should get different IDs.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + # First FC + response1 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="tool_a", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.a", string_value="val_a" + ) + ], + will_continue=False, + ) + ) + ] + ) + ) + ] + ) + + # Second FC + response2 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="tool_b", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.b", string_value="val_b" + ) + ], + will_continue=False, + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response1): + pass + async for _ in aggregator.process_response(response2): + pass + + closed_response = aggregator.close() + assert closed_response is not None + assert len(closed_response.content.parts) == 2 + + fc_a = closed_response.content.parts[0].function_call + fc_b = closed_response.content.parts[1].function_call + + assert fc_a.id is not None + assert fc_b.id is not None + assert fc_a.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert fc_b.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert fc_a.id != fc_b.id # Different IDs for different FCs